อัลกอริทึมแฮชอธิบายแล้ว: MD5, SHA-1, SHA-256, SHA-512
ตอบด่วน
MD5 และ SHA-1 ถูกทำลายแล้ว ห้ามใช้เพื่อความปลอดภัย SHA-256 เป็นค่าเริ่มต้นปัจจุบันสำหรับ integrity check และ signature SHA-512 เร็วกว่าบน 64-bit CPU ใช้ Hash Generator ของเราเพื่อคำนวณในเบราว์เซอร์
การแนะนำ
ฟังก์ชัน hash ทาง cryptography รับ input ขนาดใดๆ และผลิต digest ขนาดคงที่ที่ deterministic คำนวณเร็ว ย้อนกลับไม่ได้ collision-resistant และ avalanche-sensitive (เปลี่ยน 1 bit เปลี่ยนประมาณครึ่งหนึ่งของ output) MD5 (128-bit), SHA-1 (160-bit), SHA-256 (256-bit) และ SHA-512 (512-bit) เป็นฟังก์ชัน hash ที่พบบ่อย แต่คุณสมบัติความปลอดภัยต่างกันมาก
ทีละขั้นตอน
-
ทำความเข้าใจคุณสมบัติของฟังก์ชันแฮช
แฮชการเข้ารหัสที่ดีนั้นถูกกำหนดไว้แล้ว (อินพุตเดียวกันจะให้เอาต์พุตเดียวกันเสมอ) เอาต์พุตที่มีขนาดคงที่ คำนวณได้เร็ว ไม่สามารถย้อนกลับได้ (ความต้านทานก่อนอิมเมจ) ไม่สามารถค้นหาอินพุต 2 ตัวที่มีเอาต์พุตเดียวกันได้ (ความต้านทานการชนกัน) และหิมะถล่ม (การเปลี่ยนแปลงอินพุตเพียงเล็กน้อยจะพลิก ~50% ของบิตเอาท์พุต)
-
รู้ขนาดย่อย
MD5 สร้าง 128 บิต (32 อักขระฐานสิบหก) SHA-1 สร้าง 160 บิต (อักขระฐานสิบหก 40 ตัว) SHA-256 สร้าง 256 บิต (64 อักขระฐานสิบหก) SHA-512 สร้าง 512 บิต (อักขระฐานสิบหก 128 ตัว) การย่อยที่นานขึ้นจะช่วยลดโอกาสที่จะเกิดการชนกัน แต่จะเพิ่มขนาดการจัดเก็บ
-
เรียนรู้ว่าเหตุใด MD5 และ SHA-1 จึงใช้งานไม่ได้
นักวิจัยพบการโจมตีแบบชนกันในทางปฏิบัติกับ MD5 (2004) และ SHA-1 (2017, การโจมตีแบบ SHAttered) การชนกันทำให้ผู้โจมตีสร้างอินพุตที่แตกต่างกันสองรายการด้วยแฮชเดียวกัน ทำลายลายเซ็นดิจิทัลและผู้ออกใบรับรอง ไม่ควรใช้เพื่อความปลอดภัย
-
เลือกอัลกอริธึมที่เหมาะสม
สำหรับการตรวจสอบความสมบูรณ์ของไฟล์ที่ความเร็วมีความสำคัญมากกว่าความปลอดภัย MD5 หรือ SHA-1 ยังคงเป็นเรื่องปกติ สำหรับการใช้งานที่คำนึงถึงความปลอดภัย (รหัสผ่าน ลายเซ็น ใบรับรอง บล็อกเชน) ให้ใช้ SHA-256 หรือ SHA-512 สำหรับการจัดเก็บรหัสผ่าน ให้ใช้ KDF ที่ช้า เช่น bcrypt, scrypt หรือ Argon2 —ไม่เคยดิบ SHA-256
-
คำนวณและตรวจสอบแฮช
ใช้ตัวสร้างแฮชเพื่อแฮชข้อความด้วยอัลกอริทึมใดๆ หรือใช้แฮชไฟล์เพื่อคำนวณแฮชของไฟล์ในเครื่อง เปรียบเทียบผลลัพธ์ที่ได้กับค่าที่ทราบดีเพื่อตรวจสอบความสมบูรณ์ —ความแตกต่างเพียงเล็กน้อยหมายความว่าไฟล์เสียหายหรือถูกแก้ไข
ตัวอย่าง
MD5 จาก 'สวัสดี' (128 บิต, 32 ตัวอักษรฐานสิบหก)
ป้อนข้อมูล: hello
เอาท์พุต: 5d41402abc4b2a76b9719d911017c592
SHA-256 จาก 'สวัสดี' (256 บิต, 64 ตัวอักษรฐานสิบหก)
ป้อนข้อมูล: hello
เอาท์พุต: 2cf24dba5fb0d30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
เอฟเฟกต์หิมะถล่ม—เปลี่ยนตัวละครหนึ่งตัว
ป้อนข้อมูล: สวัสดี vs สวัสดี
เอาท์พุต: SHA-256('hello') เริ่มต้น 2cf24dba... ในขณะที่ SHA-256('Hello') เริ่มต้น 185f8db3... —แตกต่างอย่างสิ้นเชิงแม้จะมีการเปลี่ยนแปลงอินพุตหนึ่งบิต
ปัญหาทั่วไป
- การใช้ MD5 หรือ SHA-1 สำหรับการแฮชรหัสผ่าน: ทั้งสองอย่างรวดเร็วและใช้งานไม่ได้ ทำให้การโจมตีแบบ brute-force และ rainbow table เป็นเรื่องเล็กน้อย ใช้ bcrypt, scrypt หรือ Argon2 แทน
- การแฮชที่สับสนด้วยการเข้ารหัส: การแฮชเป็นแบบทางเดียวและไม่สามารถย้อนกลับได้ การเข้ารหัสเป็นแบบสองทาง คุณไม่สามารถ 'ถอดรหัส' แฮชได้ คุณสามารถเปรียบเทียบได้เฉพาะแฮชเท่านั้น
- การเพิกเฉยต่อการโจมตีแบบขยายความยาว: MD5, SHA-1, SHA-256 และ SHA-512 ล้วนเสี่ยงต่อการโจมตีแบบขยายความยาวเมื่อใช้เป็น MAC ใช้ HMAC-SHA256 สำหรับการตรวจสอบสิทธิ์ข้อความ
- การเปรียบเทียบแฮชกับ == แทนการเปรียบเทียบเวลาคงที่: การรั่วไหลของเวลาช่วยให้ผู้โจมตีกู้คืนแฮชแบบไบต์ต่อไบต์ได้ ใช้การเปรียบเทียบเวลาคงที่ในรหัสความปลอดภัย
เคล็ดลับ
- ค่าเริ่มต้นเป็น SHA-256 สำหรับระบบใหม่ —รวดเร็ว ได้รับการสนับสนุนอย่างกว้างขวาง และไม่มีการโจมตีแบบชนกันในทางปฏิบัติในปี 2026
- สำหรับการจัดเก็บรหัสผ่าน ให้ใช้ bcrypt ที่มีปัจจัยการทำงาน 12+ (หรือ Argon2id ที่มีหน่วยความจำ 64MB) — ห้ามใช้ SHA-256 แบบ raw ซึ่งเร็วเกินไปเมื่อเทียบกับ GPU
- เมื่อตรวจสอบการดาวน์โหลดไฟล์ ให้เปรียบเทียบทั้งชื่ออัลกอริทึมและไดเจสต์ —แฮช SHA-1 จะไม่มีความหมายหากผู้เผยแพร่ตั้งใจเพียง SHA-256
- ใช้เครื่องมือ File Hash ของเราเพื่อคำนวณ SHA-256 ไฟล์ขนาดใหญ่ในเครื่องโดยไม่ต้องอัปโหลด โดยจะสตรีมไฟล์ผ่าน Web Crypto API