บทความทั้งหมด

Hash Generator: MD5, SHA-1 และ SHA-256 ต่างกันอย่างไร

อักษรไทยไม่มีตัวพิมพ์ใหญ่-เล็กและไม่เว้นวรรคระหว่างคำ แต่มีความซับซ้อนอีกแบบคือสระและวรรณยุกต์ที่วางซ้อนอยู่เหนือหรือใต้พยัญชนะ ในการเข้ารหัส Unicode ลำดับของสระบน วรรณยุกต์ และตัวการันต์ในบางกรณีมีความยืดหยุ่น ทำให้ข้อความที่หน้าตาเหมือนกันทุกประการบนหน้าจออาจมีลำดับไบต์ภายในต่างกันได้ — และนั่นหมายถึงแฮชที่ต่างกันสำหรับข้อความที่ "ดูเหมือนกัน"

ทำไมเรื่องนี้ถึงน่าประหลาดใจเมื่อแฮชข้อความภาษาไทย

ตัวอัลกอริทึมแฮชเองทำงานถูกต้องเสมอ — มันแค่เห็นไบต์ที่ต่างกันแล้วให้ผลลัพธ์ที่ต่างกันตามนั้น ปัญหาจริง ๆ อยู่ที่ขั้นตอนก่อนหน้า: เมื่อต้องเปรียบเทียบหรือแฮชข้อความภาษาไทยที่มาจากหลายแหล่ง (คัดลอกจากเว็บ จากแอป จากไฟล์เอกสาร) ควรทำ Unicode normalization ให้เป็นรูปแบบเดียวกันก่อน ไม่เช่นนั้นข้อความที่เหมือนกันทุกประการอาจถูกมองว่า "ต่างกัน" เพียงเพราะการเข้ารหัสภายในต่างกัน

เหตุใด MD5 และ SHA-1 จึงถือว่าไม่ปลอดภัย

สำหรับทั้งสองอัลกอริทึม มีการค้นพบวิธีที่ใช้งานได้จริงในการสร้างชุดข้อมูลสองชุดที่ต่างกันแต่มีแฮชเดียวกัน — เรียกว่าการชนกัน (collision) สิ่งนี้ทำให้ไม่เหมาะกับที่ที่ความแข็งแกร่งทางการเข้ารหัสสำคัญ แม้จะยังใช้ในที่ที่ต้องการแค่การตรวจสอบความถูกต้องอย่างรวดเร็ว

SHA-256 และตระกูล SHA-2

SHA-256 สร้างแฮชขนาด 256 บิต และจนถึงปัจจุบันยังไม่มีการชนกันที่ใช้งานได้จริงที่รู้จัก ใช้ในบล็อกเชน ใบรับรอง TLS และการตรวจสอบความถูกต้องของซอฟต์แวร์

ทำไมต้องใช้สิ่งนี้

  • ตรวจสอบความถูกต้องของไฟล์ที่ดาวน์โหลดโดยเปรียบเทียบกับแฮชที่เผยแพร่
  • เข้าใจว่าทำไมข้อความภาษาไทยที่ "เหมือนกัน" จากสองแหล่งอาจให้แฮชต่างกัน
  • สร้างลายนิ้วมือสั้น ๆ ที่ไม่ซ้ำกันสำหรับข้อมูลจำนวนมาก

เหตุใด SHA-3 จึงไม่ได้มาแทนที่ SHA-2

SHA-3 ถูกเลือกให้เป็นผู้ชนะการแข่งขันแยกต่างหากของ NIST เผื่อกรณีที่ในอนาคตพบช่องโหว่พื้นฐานใน SHA-2 — มันคือ "ประกันภัย" ที่อิงโครงสร้างภายในที่แตกต่างไปโดยพื้นฐาน (Keccak) เนื่องจากยังไม่พบการโจมตีเชิงปฏิบัติต่อ SHA-2 SHA-256 จึงยังคงเป็นค่ามาตรฐานเริ่มต้นในระบบส่วนใหญ่

ลองใช้เครื่องมือ