Toolora

MD5 ยังปลอดภัยอยู่ไหม

ทำไม MD5 ถึงถูกเจาะ ทำไมนั่นไม่ได้แปลว่าใช้ไม่ได้เลย และรหัสผ่านควรเก็บด้วยอะไรแทน

คำตอบสั้น ๆ คือ ขึ้นอยู่กับว่าคุณเอาไปใช้ทำอะไร MD5 ถูกเจาะจริงสำหรับงานที่เกี่ยวกับความปลอดภัย และก็ยังใช้ได้ดีจริงกับงานบางอย่างในชีวิตประจำวัน การสรุปแบบเหมารวมไปทางใดทางหนึ่งล้วนไม่ถูกต้อง จึงควรเข้าใจว่าตัวเองอยู่ในสถานการณ์ไหน

แฮชคืออะไรกันแน่

ฟังก์ชันแฮช (hash) รับข้อมูลอะไรก็ได้ ตั้งแต่คำเดียว ไฟล์หนึ่งไฟล์ ไปจนถึงฐานข้อมูลทั้งก้อน แล้วให้ผลลัพธ์เป็นข้อความความยาวคงที่ ข้อมูลเดิมจะให้ผลลัพธ์เดิมเสมอ คำว่า abc ให้ค่า MD5 เป็น 900150983cd24fb0d6963f7d28e17f72 ทุกครั้ง ไม่ว่าจะคำนวณวันนี้หรืออีกสิบปีข้างหน้า

คุณสมบัติสำคัญคือมันทำงานทางเดียว คุณเอาค่าแฮชมาย้อนกลับไปหาข้อมูลต้นทางไม่ได้ ไม่มีกุญแจถอดรหัส เพราะไม่ได้มีการเข้ารหัสตั้งแต่แรก ข้อมูลต้นทางไม่ได้ “อยู่ข้างใน” แต่ถูกย่อยจนเหลือเป็นลายนิ้วมือขนาดคงที่ และข้อมูลส่วนใหญ่หายไปแล้ว

แล้วทำไมเว็บ “ถอดรหัส MD5” ถึงใช้ได้

มันไม่ได้ถอดอะไรเลย มันคือตารางเปิดดู

มีคนเอารหัสผ่านยอดนิยม คำในพจนานุกรม และข้อความสั้น ๆ ทั้งหมด มาคำนวณค่าแฮชไว้ล่วงหน้าแล้วเก็บลงฐานข้อมูล พอคุณวางค่าแฮชลงไป เว็บก็แค่ค้นว่าเคยเห็นค่านี้ไหม ถ้าต้นทางของคุณคือ password123 มันมีอยู่ในตารางและเด้งกลับมาทันที แต่ถ้าต้นทางเป็นข้อความสุ่มยาว ๆ ที่ไม่เคยมีใครคำนวณไว้ เว็บนั้นจะหาไม่เจอ

สิ่งนี้เรียกว่า rainbow table และจุดที่ควรสังเกตคือมันเอาชนะข้อมูลต้นทางที่อ่อนแอ ไม่ใช่เอาชนะตัวอัลกอริทึม rainbow table ใช้กับ SHA-256 ได้ผลไม่ต่างกัน การเปลี่ยนอัลกอริทึมไม่ได้ช่วยอะไรกับรหัสผ่านที่เป็น 123456

“MD5 ถูกเจาะ” หมายความว่าอย่างไร

จุดที่พังคือ collision resistance หรือความทนทานต่อการชนกัน collision คือข้อมูลสองชุดที่ต่างกันแต่ให้ค่าแฮชเดียวกัน สำหรับ MD5 การสร้าง collision ขึ้นมาโดยตั้งใจทำได้ง่าย ต้นทุนต่ำ บนเครื่องคอมพิวเตอร์ธรรมดา ผู้โจมตีสามารถสร้างไฟล์สองไฟล์ เช่นเอกสารปกติกับไฟล์อันตราย ให้มีค่าแฮชตรงกันได้

SHA-1 ก็พังด้วยเหตุผลเดียวกัน มีการสาธิต collision จริงต่อสาธารณะแล้ว และต้นทุนในการสร้างก็มีแต่ลดลงเรื่อย ๆ

ข้อควรระวังคือ นี่ไม่ใช่เรื่องเดียวกับการที่ MD5 ย้อนกลับได้ ปัจจุบันยังไม่มีวิธีที่ใช้ได้จริงในการเอาค่าแฮช MD5 ใด ๆ มาหาข้อมูลต้นทาง สิ่งที่พังคือผู้โจมตีที่ควบคุมข้อมูลต้นทางได้ สามารถปั้นให้ค่าแฮชตรงกันได้

ความต่างข้อนี้เป็นตัวตัดสินทุกอย่างที่เหลือ

MD5 ยังใช้ได้ดีกับอะไร

ถ้าไม่มีใครกำลังโจมตีคุณ ความทนทานต่อ collision ก็ไม่มีความหมาย MD5 เร็ว สั้น และเหมาะสมอย่างยิ่งกับงานเหล่านี้:

  • ตรวจจับไฟล์เสียโดยไม่ตั้งใจ ไฟล์ที่เสียหายระหว่างโอนย้ายจะไม่บังเอิญให้ค่าแฮชเดิม
  • ตรวจไฟล์ซ้ำ ดูว่าไฟล์ที่อัปโหลดมาสองครั้งเป็นไฟล์เดียวกันหรือไม่
  • ทำ cache key ย่อข้อมูลยาว ๆ ให้เป็นตัวระบุสั้น ๆ ที่คงที่

เงื่อนไขคือข้อมูลต้นทางต้องมาจากระบบของคุณเอง ไม่ใช่จากคนที่ได้ประโยชน์จากการปลอมค่าแฮชให้ตรงกัน ทันทีที่ผู้ไม่หวังดีเลือกข้อมูลต้นทางได้ MD5 ก็หมดความเหมาะสม

MD5 กับ SHA-1 ห้ามใช้กับอะไร

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

งานเหล่านี้ให้ใช้ SHA-256 ซึ่งมีให้ใช้ทุกที่ เร็วพอ และยังไม่มีวิธีเจาะที่ใช้ได้จริง

รหัสผ่าน: ไม่ใช่ MD5 และไม่ใช่ SHA-256 เปล่า ๆ ด้วย

นี่คือส่วนที่สำคัญที่สุด และเป็นส่วนที่คนเข้าใจผิดกันมากที่สุด

อย่าเก็บรหัสผ่านด้วยแฮช MD5, SHA-1 หรือ SHA-256 เด็ดขาด ปัญหาของตระกูล SHA ในกรณีนี้ไม่ใช่ว่ามันอ่อนแอ แต่คือมันเร็ว และความเร็วคือสิ่งที่ผู้โจมตีซึ่งขโมยฐานข้อมูลไปได้ต้องการพอดี ฮาร์ดแวร์สมัยนี้คำนวณ SHA-256 ได้หลายพันล้านครั้งต่อวินาที แฮชที่เร็วทำให้ผู้โจมตีลองทั้งพจนานุกรมกับทุกระเบียนที่ขโมยมาได้ในเวลาไม่นาน

การเก็บรหัสผ่านต้องใช้ฟังก์ชันที่จงใจให้ช้า และมี salt (ค่าสุ่มเฉพาะของแต่ละรหัสผ่าน ทำให้รหัสผ่านที่เหมือนกันไม่ได้ค่าแฮชเหมือนกัน และ rainbow table ตารางเดียวครอบคลุมทั้งหมดไม่ได้):

  • Argon2id — ตัวเลือกแรกในปัจจุบัน
  • scrypt — ทางเลือกที่ดี
  • bcrypt — เก่ากว่า แต่ยังน่าเชื่อถือและใช้กันแพร่หลาย

ทั้งสามตัวปรับต้นทุนการคำนวณได้ คุณจึงตั้งให้การเดาแต่ละครั้งแพงพอจนการไล่เดาจำนวนมากไม่คุ้ม ในขณะที่การล็อกอินจริงครั้งเดียวยังเร็วจนผู้ใช้ไม่รู้สึก

หากคุณกำลังเขียนระบบเก็บรหัสผ่านเอง ควรใช้ไลบรารีที่มีคนดูแลอยู่ แทนการประกอบขึ้นเองจากส่วนประกอบพื้นฐาน

งานไหนควรใช้อัลกอริทึมอะไร

สิ่งที่คุณกำลังทำ ใช้
ตรวจว่าไฟล์โอนมาครบไม่เสีย MD5 หรือ SHA-256 ก็ได้
ตรวจไฟล์ดาวน์โหลดกับค่าแฮชที่ผู้พัฒนาประกาศ SHA-256
ตรวจไฟล์ซ้ำ ทำ cache key MD5 ใช้ได้และเร็ว
ลายเซ็นดิจิทัล ใบรับรอง SHA-256 ขึ้นไป
เก็บรหัสผ่าน Argon2id, scrypt หรือ bcrypt ห้ามใช้แฮชเปล่า
เทียบข้อความสองชุดว่าตรงกันไหม เทียบข้อความตรง ๆ ไปเลย

สิ่งที่ตารางนี้บอกคือ ยิ่งมีคนได้ประโยชน์จากการปลอมค่าแฮชมากเท่าไหร่ ยิ่งต้องใช้อัลกอริทึมที่แข็งแรงขึ้นเท่านั้น ส่วนงานที่ไม่มีใครมาโจมตี ความเร็วคือสิ่งเดียวที่สำคัญ และ MD5 ยังทำได้ดีที่สุด

คำนวณค่าแฮชโดยไม่ต้องอัปโหลด

เครื่องมือสร้างค่าแฮช ของ Toolora ทำงานในเบราว์เซอร์ของคุณทั้งหมด แสดง MD5, SHA-1, SHA-256, SHA-384 และ SHA-512 พร้อมกัน โดยมีป้ายกำกับที่ MD5 กับ SHA-1 ว่าไม่เหมาะกับงานความปลอดภัย

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

หากกำลังสงสัยว่า Base64 ช่วยปกปิดข้อมูลได้ไหม คำตอบคือไม่ได้ คู่มือเรื่องนั้น อธิบายว่าการเข้ารหัสแบบ encoding กับการแฮชเป็นคนละเรื่องกันอย่างไร