อธิบายฟังก์ชันแฮช
ฟังก์ชันแฮชแปลงข้อมูลเข้าใด ๆ ให้เป็นลายนิ้วมือสั้น ๆ ที่มีความยาวคงที่ คู่มือนี้อธิบายว่า MD5, SHA-1 และ SHA-256 มีประโยชน์ในงานใด มีข้อจำกัดตรงไหน และวิธีเปรียบเทียบไฟล์กับ checksum ที่เผยแพร่ไว้
แฮชคืออะไร
ฟังก์ชันแฮชเชิงวิทยาการเข้ารหัสอ่านข้อมูลขนาดใดก็ได้แล้วสร้างไดเจสต์ที่มีความยาวคงที่ ได้แก่ 128 บิตสำหรับ MD5, 160 บิตสำหรับ SHA-1 และ 256 บิตสำหรับ SHA-256 ซึ่งมักแสดงเป็นข้อความฐานสิบหก ข้อมูลเข้าเดียวกันให้ไดเจสต์เดียวกันทุกครั้ง และการเปลี่ยนข้อมูลเข้าแม้เพียงบิตเดียวจะได้ไดเจสต์ที่ต่างไปมาก แฮชเป็นแบบทางเดียว คุณไม่สามารถกู้ข้อมูลเข้าจากไดเจสต์ได้ นอกจากการเดาข้อมูลเข้าแล้วเปรียบเทียบผลลัพธ์
คู่มือนี้ให้ข้อมูลทั่วไป สำหรับการตัดสินใจด้านความปลอดภัย ให้ปฏิบัติตามข้อกำหนดขององค์กรของคุณหรือของบริการที่คุณทำงานด้วย
Checksum และความสมบูรณ์ของข้อมูล
การใช้งานที่พบบ่อยที่สุดในชีวิตประจำวันคือการตรวจว่าไฟล์มาถึงครบถ้วน หน้าดาวน์โหลดอาจเผยแพร่ค่า SHA-256 ไว้ข้างไฟล์ หลังดาวน์โหลด คุณคำนวณแฮชของสำเนาที่ได้แล้วเปรียบเทียบกับค่าที่เผยแพร่ หากค่าตรงกัน ไฟล์มีแนวโน้มสูงมากที่จะเหมือนกับไฟล์ที่ผู้เผยแพร่ใช้คำนวณแฮช หากต่างกัน แสดงว่าไฟล์ที่ดาวน์โหลดเสียหายหรือเป็นคนละเวอร์ชัน
checksum มีประโยชน์ก็ต่อเมื่อค่าที่เผยแพร่นั้นเชื่อถือได้ หากผู้โจมตีเปลี่ยนได้ทั้งไฟล์และ checksum ในหน้าเดียวกัน แฮชที่ตรงกันก็พิสูจน์ได้น้อยมาก ลายเซ็นดิจิทัลช่วยแก้ปัญหานี้
ทำไม MD5 และ SHA-1 จึงไม่เหมาะกับงานด้านความปลอดภัย
แฮชที่ปลอดภัยควรทำให้การหาข้อมูลเข้าสองชุดที่ต่างกันแต่ได้ไดเจสต์เดียวกัน (collision) เป็นไปได้ยากในทางปฏิบัติ มีการเผยแพร่การโจมตีแบบ collision ที่ใช้ได้จริงทั้งกับ MD5 และ SHA-1 แล้ว ผู้โจมตีจึงเตรียมไฟล์สองไฟล์ที่ต่างกันแต่มีแฮชเดียวกันได้ ด้วยเหตุนี้ทั้งสองจึงไม่ถือว่าเหมาะกับลายเซ็นดิจิทัล ใบรับรอง หรืองานด้านความปลอดภัยอื่นอีกต่อไป
MD5 และ SHA-1 ยังตรวจจับความเสียหายที่เกิดโดยไม่ตั้งใจได้ และระบบเก่าบางระบบยังเผยแพร่ค่าเหล่านี้ สำหรับงานใหม่ ตัวเลือกทั่วไปคือ SHA-256 หรือแฮชอื่นในตระกูล SHA-2 (SHA-384, SHA-512)
| อัลกอริทึม | ความยาวไดเจสต์ | สถานะด้านความปลอดภัย |
|---|---|---|
| MD5 | 128 บิต (อักขระ hex 32 ตัว) | ถูกเจาะด้วย collision แล้ว ใช้เฉพาะ checksum แบบเดิม |
| SHA-1 | 160 บิต (อักขระ hex 40 ตัว) | ถูกเจาะด้วย collision แล้ว ใช้กับระบบเดิม |
| SHA-256 | 256 บิต (อักขระ hex 64 ตัว) | ใช้กันแพร่หลายและแนะนำให้ใช้ |
| SHA-384 / SHA-512 | 384 / 512 บิต | ใช้กันแพร่หลายและแนะนำให้ใช้ |
การแฮชไม่ใช่การเข้ารหัสลับ และรหัสผ่านต้องการมากกว่านั้น
การเข้ารหัสลับย้อนกลับได้เมื่อมีคีย์ที่ถูกต้อง แต่การแฮชไม่ได้ออกแบบมาให้ย้อนกลับได้ อย่างไรก็ตาม แฮชไม่ได้ปกปิดข้อมูลเข้าที่สั้นหรือคาดเดาได้ ใครก็แฮชคำทั่วไปหรือหมายเลขโทรศัพท์แล้วมองหาค่าที่ตรงกันได้
นี่คือเหตุผลที่แฮชที่เร็วอย่าง MD5 หรือ SHA-256 เพียงอย่างเดียวไม่เหมาะกับการจัดเก็บรหัสผ่าน แฮชเหล่านี้ออกแบบมาให้เร็ว ซึ่งทำให้ผู้โจมตีทดสอบการเดาจำนวนมหาศาลได้อย่างรวดเร็ว การจัดเก็บรหัสผ่านใช้อัลกอริทึมที่ช้าและใช้ salt ซึ่งสร้างมาเพื่องานนี้โดยเฉพาะ เช่น Argon2, scrypt หรือ bcrypt หากคุณสร้างระบบล็อกอิน ให้ใช้ไลบรารีที่ได้รับการดูแลและแนวทางปัจจุบันของแพลตฟอร์มของคุณ แทนแฮชสำหรับงานทั่วไป
HMAC สำหรับการยืนยันข้อความ
แฮชธรรมดาแสดงว่าข้อมูลเปลี่ยนไปหรือไม่ แต่ใครก็คำนวณใหม่ได้ HMAC (hash-based message authentication code) ใช้ข้อมูลร่วมกับคีย์ลับ เช่น HMAC-SHA256 มีเพียงผู้ที่รู้คีย์เท่านั้นที่สร้างค่าที่ถูกต้องได้ ผู้รับจึงตรวจได้ว่าข้อความมาจากผู้ถือคีย์และไม่ถูกแก้ไข Webhook และการลงนามคำขอ API มักใช้ HMAC เก็บคีย์ไว้เป็นความลับ เพราะใครที่มีคีย์ก็สร้างโค้ดที่ถูกต้องได้
ทำไมข้อความเดียวกันจึงได้แฮชต่างกัน
แฮชคำนวณจากไบต์ ไม่ใช่จากข้อความที่คุณเห็น ความแตกต่างเหล่านี้เปลี่ยนผลลัพธ์
- การขึ้นบรรทัดใหม่: Windows ใช้ CR LF ส่วน Linux และ macOS ใช้ LF
- การเข้ารหัสอักขระ: "é" เป็นไบต์ที่ต่างกันใน UTF-8 และในการเข้ารหัสแบบเก่า
- การขึ้นบรรทัดใหม่หรือช่องว่างต่อท้าย หรือ byte order mark ที่ต้นไฟล์
- ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กในข้อมูลเข้า
เมื่อแฮชไม่ตรงกัน ให้ตรวจสิ่งเหล่านี้ก่อน การแฮชไฟล์ต้นฉบับมักเชื่อถือได้มากกว่าการแฮชข้อความที่คัดลอกมาจากไฟล์ ส่วนผลลัพธ์แบบ hex เองไม่สนตัวพิมพ์เล็ก/ใหญ่ A1B2 และ a1b2 เป็นค่าเดียวกัน
คำถามที่พบบ่อย
ถอดรหัสแฮช MD5 หรือ SHA-256 ได้หรือไม่
ไม่ได้ แฮชไม่ใช่ข้อมูลที่เข้ารหัสลับ บริการ "ถอดรหัส" ออนไลน์จะค้นหาแฮชของข้อมูลเข้าทั่วไปที่คำนวณไว้ล่วงหน้า ซึ่งเป็นเหตุผลที่แฮชของค่าที่เรียบง่ายให้การปกป้องได้น้อย
ควรใช้อัลกอริทึมใดตรวจสอบไฟล์ที่ดาวน์โหลด
ใช้อัลกอริทึมที่ผู้เผยแพร่ให้ไว้ หากมีหลายตัวเลือก SHA-256 หรือ SHA-512 เป็นตัวเลือกที่ดีกว่า MD5 หรือ SHA-1
เครื่องมือสร้างแฮชอัปโหลดไฟล์ของฉันหรือไม่
เครื่องมือสร้างแฮชของ LeedyBox คำนวณแฮชในเบราว์เซอร์ของคุณ ข้อความหรือไฟล์ที่คุณเลือกจึงประมวลผลบนอุปกรณ์ของคุณ