วันพฤหัสบดีที่ 17 มีนาคม พ.ศ. 2554

MD5 คืออะไรเกี่ยวอะไรกับ Hash

MD5 เป็นรูปแบบการเข้ารหัสแบบ Hash ชนิดหนึ่งครับ

การเข้ารหัสแบบ Hash (Cryptographic hash) หมายถึง การแปลงรูปแบบของข้อมูลที่รับเข้ามาไม่ว่าขนาดเท่าใดก็ตาม ให้อยู่ในอีกรูปแบบหนึ่งที่มีขนาดคงที่ เพราะฉะนั้น จะไม่สามารถเรียกดูข้อมูลต้นฉบับได้ (Decrypt) ทำได้เพียงตรวจสอบว่าข้อมูลที่ให้มาแต่ละครั้งเหมือนกันหรือไม่
ตัวอย่าเช่น กำหนดรหัส a เมื่อเป็น MD5 จะได้ 0cc175b9c0f1b6a831c399e269772661
แต่เราจะไม่สามารถรู้ว่าค่า 0cc175b9c0f1b6a831c399e269772661 เท่ากับ a
แต่ไม่ว่าจะป้อนค่า a กี่ครั้ง ค่า MD5 ก็จะได้ 0cc175b9c0f1b6a831c399e269772661 เหมือนเดิมทุกครั้ง

ในที่นี้ MD5 เป็นการเข้ารหัสแบบ 128-bit ให้ค่าเป็นตัวเลขฐาน 16 (0123456789abcd) ขนาด 32 ตัวอักษร แต่ก็มีบางประเภทที่ให้ค่าเป็น binary และ base64 (การเข้ารหัสอีกแบบ แต่สามารถถอดรหัสได้)

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

อย่างไรก็ตาม MD5 ไม่ได้มีความปลอดภัยแล้วในปัจจุบันเนื่องจากคอมพิวเตอร์ในปัจจุบันเร็วขึ้นมาก การแปลงค่า MD5 ทำได้เร็วขึ้น ก็สามารถทราบค่าต้นฉบับได้ภายในเวลาไม่นานนัก วิธีการนี้เรียกว่า Brute-Force (หาค่าตั้งแต่ a-z และนำไปเปรียบเทียบ จากนั้นก็เป็น aa-zz และต่อไปเรื่อยๆ) นอกเหนือไปจากนี้ยังมีวิธีการที่เ้รียกว่า Hash Collision (การชนกันของ Hash) ตัวอย่างเช่นสมมติค่าต้นฉบับคือ

'Test' ได้ MD5 คือ 098f6bcd4621d373cade4e832627b4f6
สามารถคำนวนหาคำว่า 'Wow' ที่ไ้ด้ค่า 098f6bcd4621d373cade4e832627b4f6 เช่นกัน
(แต่สมมติค่าเท่านั้นครับ)

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

การป้องกันก็คือหันไปใช้การเข้ารหัสแบบอื่นที่มีความปลอดภัยกว่า เช่น SHA-1 หรือดีที่สุดคือใช้หลายๆ อันร่วมกันครับ :)



ถ้าเราได้ค่า hash จากเพื่อนมาเราไปแปลงเป็นอักษรได้ที่นี่ครับ http://www.md5decrypter.com/
หรืออยากเขียนให้เพื่อนก็ http://www.md5encrypter.com/


ลองดูนะครับค่า hash ของผมคือ   0405552a6ac013293c623cc08fdce598 


ิอักษรปกติคืออะไร

1 ความคิดเห็น:

  1. "ถูกต้องนะคร้าบบบบบบ"

    ผม Hoster ครับ (ผู้ฝึกหัด)

    ขอคำแนะนำด้วยนะครับ

    ตอบลบ