การเข้ารหัสแบบ md5 คืออะไร

ผมเห็นมีหลายคนให้ความสนใจกับเรื่องของการทำระบบ login ที่ผมทำเป็นตัวอย่างใน blog นี้มากก็เลยคิดว่าอยากจะให้ทำความรู้จักกับเรื่องของความปลอดภัยบนเว็บให้มากขึ้น ผมเลยหยิบเอาเรื่องของการเข้ารหัสที่นิยมใช้กับ password มาให้รู้จักกันครับ

password-decrypting

password-decrypting

ก่อนอื่นขออ้างอิงข้อมูลจากทาง http://th.wikipedia.org ก่อนนะครับว่าการเข้ารหัสกับการถอดรหัสนั้นนะหมายถึงอะไร

การเข้ารหัส

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

การถอดรหัส

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

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

ทีนี้เราจะมาดูว่าแล้วเจ้า md5 ที่นิยมใช้ในการเข้ารหัสข้อมูลในการ login นั้นคืออะไร

Ronald_Rivest

Ronald_Rivest

นาย Ronald Rivest บุคคลที่อยู่ในรูปผู้นี้เป็นคนที่คิดระบบ md5 ขึ้นมาซึ่งมันย่อมาจากคำว่า Message-Digest algorithm 5 ซึ่งถูกนำมาใช้เป็น hash function ในการเข้ารหัสลับ แล้วอะไรคือ hash function มันก็คือการนำเอาข้อมูลอิเล็กทรอนิกส์ต้นฉบับที่จะถูกส่ง มาผ่านกระบวนการทางด้านคณิตศาสตร์ที่เรียกว่า Hash Function เพื่อให้ได้ข้อมูลที่สั้น ที่เรียกว่า Digest หรือ ข้อมูลที่ถูกสับ ถูกย่อย จนเละเทะ ก่อนที่จะทำการเข้ารหัส เนื่องจากข้อมูลต้นฉบับมักจะมีความยาวมาก ซึ่งจะทำให้กระบวนการเข้ารหัสใช้ระยะเวลานาน

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

ผมลองทำการเข้ารหัสกับชื่อตัวเอง “teerapuch” ค่าที่ออกมาคือ “df36d247cd131d0a8bfafda53dda9ef5”
และผมลองเอานามสกุลมาเข้ารหัสดูบ้าง “kassakul”  ค่าที่ออกมาคือ “80d20bd1d66c42e7f548d6835bbaf338”

สังเกตุดูว่าไม่ว่าจะใช้ข้อความว่าอะไรก็จะแปลงออกมาเป็น 32 ตัวอักษรเหมือนกันทั้งหมดแต่ถึงแม้ว่าเราจะเอาข้อมูลที่ได้มา กลับไปย้อนทำ md5 อีกครั้งค่าที่ได้มาก็จะไม่สามารถใช้ได้ เพราะ md5 เป็นระบบของ One-way Function นั้นหมายถึงว่า ถ้าเราเอาข้อมูลมาย้อนกลับด้วยค่าเดิม ด้วยวิธีเดิมก็จะไม่ได้ค่าเดิมที่ถูกต้อง งั้นมาลองดูกันดีกว่าครับ

ผมลองเอารหัสที่ได้มาจากชื่อ “df36d247cd131d0a8bfafda53dda9ef5”  กลับไปแปลงเป็น md5 จะได้ค่า “f25267a1bc313935bc2a6b1e3a903e18”
และลองเอารหัสจากนามสกุล “80d20bd1d66c42e7f548d6835bbaf338” กลับไปแปลงเป็น md5 จะได้ค่า  “1a2ec6d4cfc99a7d1665f1ebd4b71965”

ซะงั้นไป !!

แต่ถึงแม้ว่ามันจะมีข้อดีที่ว่าเราไม่รู้ว่ามันเข้ารหัสแล้วกลายไปเป็นข้อความอะไร แต่มันก็พอจะมีข้อเสียอยู่บ้างตามหลักความเป็นจริงคือมันสามารถที่จะเกิดการทำซ้ำกันได้ ถึงแม้โอกาสจะน้อยแต่ก็ถือว่ามีนะครับ

เอาละครับคงจะไม่ขอลงลึกไปมากกว่านี้ เพราะคนอื่นๆคงจะอธิบายได้ดีกว่าผมมาก งั้นเรามาดูตัวอย่างวิธีการเข้ารหัสด้วย md5 กันครับ

Code :: PHP

echo md5(“teerapuchroom”)

ง่ายๆนะครับสำหรับวิธีการเข้ารหัส แค่เราเอา function md5 มาวางหน้าข้อมูลของเราเท่านั้นเองเราก็จะได้ข้อมูลที่เราต้องการแบบเข้ารหัสเรียบร้อยแล้วครับ ทีนี้โอกาสหน้าจะขอพูดถึงเรื่องของการทำระบบ login แบบมีการเข้ารหัสกันบ้าง นี่ถือเป็นบทความปูพื้นก่อนก็แล้วกันนะครับ

ขอบคุณครับ