เวลาที่เราส่งไฟล์ผ่านอินเทอร์เน็ต จะรู้ได้อย่างไรว่าข้อมูลทุกอย่างเดินทางมาถึงได้อย่างสมบูรณ์ ? ถ้าคิดแบบง่าย ๆ เราก็อาจจะทักไปถามผู้รับไฟล์เพื่อตรวจสอบ และเปรียบเทียบไฟล์ที่เขาได้รับ กับไฟล์ที่เราส่งไป ว่ามีขนาด หรือจำนวนเท่ากันหรือไม่ ? แต่ด้วยอัลกอริทึม แฮช (Hash) MD5 มันช่วยให้เราไม่จำเป็นต้องทำอะไรที่วุ่นวายเช่นนั้น
ข้อมูลเพิ่มเติม : Algorithm คืออะไร ? ดูการทำงาน ข้อดี-ข้อเสีย และประเภทของอัลกอริทึม
ในบทความนี้เราจะมาเรียนรู้กันว่า การแฮช MD5 คืออะไร ? และอัลกอริทึม MD5 ทำงานอย่างไร ?
อัลกอริทึมแฮช MD5 ย่อมาจาก "Message-Digest Algorithm" เป็นฟังก์ชันแฮชเชิง เข้ารหัส (Encrypt) เป็นอัลกอริทึมขนาด 128 บิต ที่ใช้ในการสร้าง และตรวจสอบ ลายเซ็นดิจิทัล (Digital Signature) หรือข้อความย่อ (Message Digest) แม้ว่า MD5 จะถูกประกาศว่า มีความ "ล้มเหลวทางคริปโตกราฟี" (Cryptographically Broken) มานานกว่าทศวรรษแล้ว แต่ในปัจจุบันก็ยังมีการใช้งานมันอย่างแพร่หลาย
โดยปัญหาของ MD5 ที่เป็นช่องโหว่ด้านความปลอดภัยที่รู้จักกันดี คือ ความเสี่ยงสูงต่อการเกิด "การชนกัน" (Collision) ซึ่งหมายถึงกรณีที่ ข้อความสองชุดที่แตกต่างกัน แต่กลับให้ค่าผลลัพธ์แฮชเหมือนกัน
MD5 สามารถใช้ในการ สร้าง (Generate) หรือ ตรวจสอบ (Verify) แฮชเชิงเข้ารหัสขนาด 128 บิต จากข้อความที่มีความยาวไม่แน่นอน ซึ่งเป็นฟังก์ชันแฮชเชิงเข้ารหัสที่ออกแบบมาเพื่อสร้างลายเซ็นดิจิทัล บีบอัดไฟล์ขนาดใหญ่ให้มีขนาดเล็กลงอย่างปลอดภัย และเข้ารหัสด้วยกุญแจลับ (Private Key) เพื่อนำไปจับคู่กับ กุญแจสาธารณะ (Public Key)
อัลกอริทึมแฮช MD5 เป็นฟังก์ชันเข้ารหัสแบบทางเดียว ที่รับข้อความที่มีความยาวเท่าใดก็ได้เป็นข้อมูลนำเข้า และให้ค่าผลลัพธ์เป็นค่าที่มีความยาวคงที่ ทำให้สามารถนำไปประยุกต์ใช้ในการตรวจสอบความถูกต้องของข้อความต้นฉบับ, ตรวจสอบไฟล์ที่เสียหาย หรือการเปลี่ยนแปลงในกลุ่มไฟล์ขนาดใหญ่ได้อีกด้วย
นอกจากนี้ MD5 ยังถูกใช้เป็นเครื่องมือ ตรวจสอบความสมบูรณ์ของข้อมูล (Checksum) และตรวจสอบลายเซ็นดิจิทัล อีกทั้ง ยังสามารถนำไปใช้ในฟังก์ชันที่ไม่เกี่ยวกับการเข้ารหัส เช่น การกำหนดพาร์ทิชันของฐานข้อมูลโดยอิงจากคีย์เฉพาะได้อีกด้วย
ปัจจุบัน MD5 ถูกยกเลิกการใช้งานในด้านความปลอดภัยไปแล้ว และถูกจำกัดให้ใช้เป็นเพียงเครื่องมือตรวจสอบความสมบูรณ์ของข้อมูล (Checksum) เพื่อป้องกันความเสียหายของข้อมูลโดยไม่คาดคิดเท่านั้น
อัลกอริทึม MD5 มีกระบวนการทำงาน ตามขั้นตอนดังต่อไปนี้
ในขั้นตอนแรก จะมีการเพิ่มบิตพาดดิ้งลงในข้อความต้นฉบับ เพื่อให้ความยาวของข้อความทั้งหมดน้อยกว่าจำนวนเต็มของ 512 บิตอยู่ 64 บิต
ตัวอย่างเช่น หากเรามีข้อความที่มีขนาด 1,000 บิต จะต้องเพิ่มบิตพาดดิ้งเข้าไป เมื่อคำนวณแล้ว จะต้องเพิ่ม 472 บิตพาดดิ้ง ลงในข้อความต้นฉบับ หลังจากเพิ่มบิตพาดดิ้งแล้ว ขนาดของข้อความจะกลายเป็น 1,472 บิต ซึ่งน้อยกว่าจำนวนเต็มของ 512 บิตอยู่ 64 บิต (เช่น 512 × 3 = 1,536 บิต)
สมการที่ใช้ก็จะเป็น "ความยาว(ข้อความต้นฉบับ+บิตพาดดิ้ง) = 512 x i - 64 โดยที่ i เท่ากับ 1, 2, 3, ..."
ในขั้นตอนนี้ จะมีการเพิ่มบิตความยาวลงในผลลัพธ์ของขั้นตอนแรกเพื่อให้จำนวนบิตทั้งหมดเป็นจำนวนเต็มที่หารด้วย 512 ลงตัว กล่าวคือ เราจะเพิ่ม 64 บิต เป็นบิตความยาวในผลลัพธ์ของขั้นตอนแรก
ผลลัพธ์ของขั้นตอนแรก = 512 x n - 64
บิตความยาว = 64
หลังจากเพิ่มทั้งสองส่วนแล้ว จะได้ค่า 512 x n ซึ่งเป็นจำนวนเต็มของ 512
ในขั้นตอนนี้ เราจะใช้บัฟเฟอร์ 4 ตัว ตัวอย่างเช่น A, B, C และ D โดยแต่ละบัฟเฟอร์มีขนาด 32 บิต
ภาพจาก: https://www.geeksforgeeks.org/computer-networks/what-is-the-md5-algorithm/
เป็นขั้นตอนที่สำคัญที่สุดของอัลกอริทึม MD5 โดยจะมีการดำเนินการทั้งหมด 64 ขั้นตอน ใน 4 รอบ
ในแต่ละรอบจะใช้ฟังก์ชันที่แตกต่างกัน:
สำหรับการคำนวณฟังก์ชัน ปกติก็จะใช้ Logic Gates ได้แก่ OR, AND, XOR และ NOT โดยทำงานร่วมกับ บัฟเฟอร์ 3 ตัว ได้แก่ B, C และ D
รอบที่ | ขั้นตอนการคำนวณ |
1 | (B และ C) หรือ ((ไม่ใช่ B) และ (D)) |
2 | (B และ D) หรือ (C และ (ไม่ใช่ D)) |
3 | B หรือ C หรือ D |
4 | C หรือ (B หรือ (ไม่ใช้ D)) |
หลังจากใช้ฟังก์ชันแล้ว ขั้นตอนต่อไปคือ การดำเนินการกับแต่ละบล็อก โดยในการดำเนินการ เราจะใช้
พอถึงขั้นตอนนี้ เราจะใช้บัฟเฟอร์ A, B, C และ D โดยผลลัพธ์ของ B จะถูกป้อนให้กับ C, C จะถูกป้อนให้กับ D, และ D จะถูกป้อนให้กับ J หลังจากดำเนินการดังกล่าว เราจะทำการคำนวณเพื่อหาผลลัพธ์ของ A
หลังจากดำเนินการทุกขั้นตอน ผลลัพธ์ของ A จะถูกนำไปป้อนให้กับ B และขั้นตอนเดียวกันนี้จะถูกนำไปใช้กับฟังก์ชัน G, H และ I เมื่อทำครบ 64 ขั้นตอน เราจะได้ค่า MD (Message Digest) มา
หลังจากดำเนินการครบทุกขั้นตอนแล้ว บัฟเฟอร์ A, B, C และ D จะเก็บค่าผลลัพธ์ของ MD5 โดยเริ่มต้นจากบิตต่ำสุดที่ A และสิ้นสุดที่บิตสูงสุดที่ D ตัวอย่างผลลัพธ์ เช่น "922547e866c89b8f677312df0ccec8ee"
เป้าหมายของฟังก์ชันแฮชเชิงข้อความ (Message-Digest) คือ การสร้างค่าผลลัพธ์ที่ดูเหมือนเป็นแบบสุ่ม เพื่อให้ถือว่ามีความปลอดภัยทางเข้ารหัส ฟังก์ชันแฮชต้องมีคุณสมบัติสองข้อหลัก ประกอบไปด้วย
จากเหตุผลทั้งสองข้อดังกล่าว ส่งผลให้ MD5 ไม่ถือเป็นวิธีการที่ปลอดภัยสำหรับการเข้ารหัสอีกต่อไป และไม่ควรใช้ในการตรวจสอบสิทธิ์แบบเข้ารหัส ตามข้อแนะนำของคณะทำงานเฉพาะกิจด้านวิศวกรรมอินเทอร์เน็ต หรือ Internet Engineering Task Force (IETF)
ในปี ค.ศ. 2011 (พ.ศ. 2554) IETF ได้เผยแพร่เอกสาร RFC 6151 เรื่อง "Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms" ซึ่งกล่าวถึงการโจมตีที่เกิดขึ้นกับ MD5 หนึ่งในตัวอย่างที่กล่าวถึงคือ สาธิตการสร้างคอลลิชัน (Collision) หรือค่าผลลัพธ์แฮชซ้ำกันภายในเวลาไม่ถึง หนึ่งนาที บนโน้ตบุ๊กธรรมดา ๆ และอีกหนึ่งกรณีที่สามารถสร้างคอลลิชันได้ภายในเวลาเพียง 10 วินาที บนระบบ Pentium 4 ความเร็ว 2.6 GHz
ผลจากงานวิจัยเหล่านี้ IETF จึงแนะนำว่า MD5 ไม่ควรถูกใช้ในการออกแบบ โปรโตคอล (Protocol) ใหม่ และมีเหตุผลเพียงพอให้ควรเลิกใช้ MD5 ในแอปพลิเคชันที่ต้องการคุณสมบัติป้องกันการคอลลิชัน เช่น การตรวจสอบลายเซ็นดิจิทัล
MD5 เป็นหนึ่งในชุดอัลกอริทึมแฮชที่ได้รับการออกแบบโดย ศาสตราจารย์ Ronald Rivest แห่งสถาบันเทคโนโลยีแมสซาชูเซตส์ (Massachusetts Institute of Technology - MIT) โดยก่อนหน้านี้งานวิเคราะห์ชี้ให้เห็นว่า MD4 ซึ่งเป็นรุ่นก่อนของ MD5 อาจมีช่องโหว่ด้านความปลอดภัย ดังนั้นในปี ค.ศ. 1991 (พ.ศ. 2534) Ronald Rivest จึงพัฒนา MD5 ขึ้นมาเพื่อใช้แทน MD4 ในฐานะอัลกอริทึมที่ปลอดภัยกว่า ซึ่งในเวลาต่อมา Hans Dobbertin ก็พบข้อบกพร่องใน MD4 จริง ๆ
ในปี ค.ศ. 1993 (พ.ศ. 2536) นักวิจัย Den Boer และ Bosselaers ได้นำเสนอผลการศึกษาขั้นต้นเกี่ยวกับช่องโหว่ของฟังก์ชันบีบอัดของ MD5 โดยพบว่าเกิด "Pseudo-Collision" หรือการชนกันของผลลัพธ์ค่าแฮชจากการใช้ เวกเตอร์เริ่มต้นสองตัวที่แตกต่างกัน แต่กลับได้ค่าแฮชเดียวกัน
ในปี ค.ศ. 1996 (พ.ศ. 2539) Hans Dobbertin ได้ประกาศพบ การชนกัน (Collision) ในฟังก์ชันบีบอัดของ MD5 แม้ว่าจะไม่ใช่การโจมตีต่อฟังก์ชันแฮช MD5 ทั้งหมด แต่ผลลัพธ์ที่พบก็เพียงพอที่จะทำให้นักเข้ารหัสแนะนำให้เปลี่ยนไปใช้ทางเลือกอื่น เช่น SHA-1 (ซึ่งต่อมาพบว่ามีช่องโหว่เช่นกัน) หรือ RIPEMD-160
ขนาดของค่าแฮช ที่มีขนาดเพียง 128 บิต เล็กพอที่จะทำให้สามารถใช้การโจมตีแบบ บรูทฟอร์ (Brute Force) ได้อย่างมีประสิทธิภาพ MD5CRK เป็นโครงการคำนวณแบบกระจายที่เริ่มต้นขึ้นในเดือน มีนาคม ค.ศ. 2004 (พ.ศ. 2547) โดยมีเป้าหมายเพื่อพิสูจน์ว่า MD5 ไม่มีความปลอดภัยในทางปฏิบัติผ่านการค้นหาคอลลิชัน
MD5CRK สิ้นสุดลงไม่นานหลังจากวันที่ 17 สิงหาคม ค.ศ. 2004 (พ.ศ. 2547) เมื่อทีมนักวิจัย Xiaoyun Wang, Dengguo Feng, Xuejia Lai และ Hongbo Yu ประกาศว่าพบคอลลิชันของ MD5 อย่างสมบูรณ์ การโจมตีทางวิเคราะห์ของพวกเขาถูกระบุว่าใช้เวลาเพียง 1 ชั่วโมง บนระบบ IBM p690 Cluster
เมื่อวันที่ 1 มีนาคม ค.ศ. 2005 (พ.ศ. 2548) Arjen Lenstra, Xiaoyun Wang และ Benne de Weger ได้สาธิตการสร้างใบรับรอง X.509 สองใบ ที่มี Public Key ต่างกัน แต่กลับให้ค่าแฮช MD5 เดียวกัน ซึ่งถือเป็น การชนกัน (Collision) ที่สามารถนำไปใช้ได้จริง นอกจากนี้ การสร้างใบรับรองดังกล่าวยังรวมถึง Private Key สำหรับทั้งสอง Public Key อีกด้วย
ไม่กี่วันต่อมา Vlastimil Klima ได้นำเสนอ อัลกอริทึมที่ปรับปรุงใหม่ ซึ่งสามารถสร้าง การชนกันของ MD5 ได้ภายในเวลาเพียงไม่กี่ชั่วโมงบนโน้ตบุ๊กเครื่องเดียว
ต่อมาในวันที่ 18 มีนาคม ค.ศ. 2006 (พ.ศ. 2549) Vlastimil Klima คนเดิม ได้เผยแพร่อัลกอริทึมที่สามารถ ค้นหาคอลลิชันของ MD5 ได้ภายในหนึ่งนาทีบนโน้ตบุ๊กเครื่องเดียว โดยใช้เทคนิคที่เรียกว่า "Tunneling"
มีการเผยแพร่ "การร้องขอความคิดเห็น (Request for Comments - RFC) ที่เกี่ยวข้องกับ MD5 หลายรายการ ในปี ค.ศ. 2009 (พ.ศ. 2552) หน่วยบัญชาการไซเบอร์แห่งสหรัฐฯ (United States Cyber Command) ได้นำค่าผลลัพธ์แฮช MD5 ของคำแถลงภารกิจของพวกเขา มาใช้เป็นส่วนหนึ่งของสัญลักษณ์ทางการ
เมื่อวันที่ 24 ธันวาคม ค.ศ. 2010 (พ.ศ. 2553) Tao Xie และ Dengguo Feng ได้ประกาศการค้นพบ คอลลิชันของ MD5 แบบบล็อกเดียว (512 บิต) เป็นครั้งแรกที่เปิดเผยแพร่ต่อสาธารณะ ก่อนหน้านี้ การค้นพบการชนกันของ MD5 อาศัยการโจมตีแบบหลายบล็อก
ในกรณีนี้ Xie และ Feng ไม่ได้เปิดเผยวิธีการโจมตีใหม่ ด้วยเหตุผลด้านความปลอดภัย แต่พวกเขาได้ออกคำท้าต่อชุมชนวิจัยด้านเข้ารหัส โดยเสนอ รางวัล 10,000 ดอลลาร์สหรัฐฯ (ประมาณ 324,850 บาท) ให้กับผู้ค้นพบการชนกันแบบ 64 ไบต์ ก่อนวันที่ 1 มกราคม ค.ศ. 2013 (พ.ศ. 2556)
Marc Stevens รับคำท้านี้ และได้เผยแพร่ข้อความที่ชนกัน รวมถึงอัลกอริทึมการสร้าง และ โค้ดต้นฉบับ (Source Code)
ในปี ค.ศ. 2011 (พ.ศ. 2554) มีการอนุมัติเอกสาร RFC 6151 ซึ่งเป็นเอกสารเชิงข้อมูลที่ อัปเดตข้อพิจารณาด้านความปลอดภัยของ MD5 และ HMAC-MD5
|
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ |
ความคิดเห็นที่ 1
วันนี้ 15:22:36
|
||
GUEST |
![]() |
Minna
Cabinet IQ8305 State Hwy 71 #110, Austin, TX 78735, United Ⴝtates 254-275-5536 Doors |