โปรแกรมเมอร์เว็บควรรู้ว่าพวกเขาไม่ควรลองใช้การเข้ารหัสด้วยตนเอง
โดยเฉพาะอย่างยิ่งนั่นหมายความว่าไม่มีผู้เชี่ยวชาญด้านความปลอดภัยที่ไม่ควรสัมผัสกับการเข้ารหัสแบบดั้งเดิมใด ๆ โดยตรง พวกเขาไม่ควรคิดในระดับของ AES, SHA-1 ฯลฯ แต่พวกเขาควรใช้ฟังก์ชั่นระดับสูงเพื่อเข้ารหัสและลงนามข้อความและรหัสผ่าน "แฮช"
ทำไม? เพราะมิฉะนั้นคนเข้าใจผิดคิดว่า:
- AES-256 คือ "การเข้ารหัสที่ยอดเยี่ยม" แม้ว่าจะใช้งานจริงในโหมด ECB หรือใช้ค่า IV ที่ไม่ได้สุ่มเป็นต้น (ในบางโหมด IV ที่ไม่ใช่แบบสุ่ม แต่ไม่ซ้ำกันนั้นใช้ได้ในคนอื่น ๆ ไม่ใช่ มากมาย.)
- พวกเขาสามารถใช้คีย์ symmetric เดียวกันสำหรับการเข้ารหัสข้อความหลาย ๆ ข้อความ (หรือแย่กว่านั้นคือเก็บคีย์ symmetric ในรหัสเพื่อใช้โดยตรง)
- พวกเขาอาจตัดสินใจใช้ข้อความรหัสผ่านเป็นคีย์โดยตรงโดยไม่ต้องใช้ฟังก์ชั่นการรับรหัส
- พวกเขาสามารถใช้ RSA เพื่อเข้ารหัสข้อมูลโดยตรง
- พวกเขาสามารถ "เกลือและ MD5" รหัสผ่านของพวกเขาเพื่อให้พวกเขาปลอดภัย (ถ้าคุณคิดว่าตารางสายรุ้งเป็นลิงค์ที่อ่อนแอที่สุดให้คิดอีกครั้ง )
เพียงเพื่อจะอยู่ในหน้าเดียวกันไม่มีรายการข้างต้นจะถูก หากคุณไม่ได้รับสิ่งนั้นคุณไม่ควรสัมผัส crypto กับเสาขนาด 10 ฟุต! (AES-256 เป็นการเข้ารหัสที่ยอดเยี่ยม แต่ถ้าคุณใช้อย่างถูกต้อง "ไม่ใช่ขนาดที่สำคัญมันเป็นสิ่งที่คุณทำกับมัน" :-))
ฉันกำลังพูดถึงฟังก์ชั่นระดับสูงอะไร ฉันเองแนะนำให้ใช้ไลบรารี OpenPGP (สำหรับข้อมูลที่เหลือ) หรือ SSL (สำหรับ data in motion) โปรโตคอลเหล่านี้ระบุการใช้อัลกอริทึมแบบไม่สมมาตรสมมาตรและแฮชอย่างถูกต้อง ตัวอย่างเช่นด้วย OpenPGP:
- มันไม่ได้ใช้ RSA ในการเข้ารหัสข้อมูลโดยตรง แต่จะสร้างคีย์แบบสุ่ม (สมมาตร) ต่อข้อความ (นี่เป็นสิ่งสำคัญ) และใช้ RSA เพื่อเข้ารหัสคีย์เซสชันนั้น
- มันใช้ฟังก์ชั่นที่ได้รับกุญแจเพื่อแปลงวลีรหัสผ่านเป็นกุญแจ (ในสำนวน OpenPGP เรียกว่า S2K แต่ฉันคิดว่า "ฟังก์ชั่นการสืบทอดที่สำคัญ" เป็นคำมาตรฐานมากขึ้น)
- มันจัดการการเลือกโหมดที่ดีดังนั้นคุณจะไม่จบลงด้วยการใช้ ECB
- มันจัดการการจัดการที่สำคัญสำหรับคุณดังนั้นคุณไม่จำเป็นต้องตัดสินใจเกี่ยวกับคีย์ที่เชื่อถือได้ ฯลฯ
สรุป: ถ้าคุณไม่ได้เป็นผู้เชี่ยวชาญด้านการรักษาความปลอดภัยและคุณความคิดอยู่ที่ระดับของ AES หรือ SHA-1 หรือ (ห้ามสวรรค์) MD5 ที่คุณกำลังทำมันผิด ใช้ไลบรารีที่เขียนโดยผู้เชี่ยวชาญด้านความปลอดภัย (เช่น Bouncy Castle) ที่ใช้โปรโตคอลที่ออกแบบโดยผู้เชี่ยวชาญด้านความปลอดภัย (เช่น OpenPGP สำหรับการเข้ารหัสหรือ bcrypt หรือ scrypt สำหรับการแฮ็กรหัสผ่าน)
ฉันไม่ใช่ผู้เชี่ยวชาญการเข้ารหัสด้วยวิธีใด ๆ แต่ฉันรู้ดีพอที่จะไม่ออกแบบโปรโตคอล ad-hoc ของฉันเอง เพียงเพื่อจะชัดเจน, โพสต์ทั้งหมดเป็นวัสดุการเข้ารหัส 101 ดังนั้นหากโพสต์นี้ไม่เหมาะกับคุณ 100% คุณก็ไม่ควรเข้าใกล้การเข้ารหัส