Hashing คือ เป็นการแปลงข้อมูลต้นฉบับที่มีความยาวเท่าไหร่ก็ตามมาสร้าง Hash ผ่านอัลกอริทึมทางคณิตศาสตร์เพื่อให้ได้ค่า Hash (Hash value) ซึ่งเป็นข้อมูลที่เป็นเอกลักษณ์(Unique) และมีความยาวคงที่(fixed length) เปรียบเสมือนการสร้างรหัสบัตรประชาชนคือแต่ละคนจะได้รหัสบัตรประชาชนที่ไม่ซ้ำกัน ปัจจุบัน Blockchain ก็มีการใช้ Hash ในการสร้าง Block ทำให้ระบบมีความปลอดภัย
Hash Function
อัลกอริทึมแต่ละประเภทจะใช้วิธีการเข้ารหัสที่คล้ายกันจะแตกต่างกันที่ความยาวของค่า Hash ซึ่งยิ่งค่า Hash มากแสดงถึงการเข้ารหัสที่ซับซ้อนและมีความปลอดภัยยิ่งขึ้น
- MD5 ขนาดข้อมูล = 128 bits เป็นอัลกอริทึมแรกที่ถูกสร้างขึ้นมา เกิดขึ้นในปี ค.ศ. 1995 ปัจจุบันไม่ใช้แล้วเพราะค่า Hash มีขนาดเล็กถูกโจมตีจาก Hacker ได้ง่าย
- SHA-1 ขนาดข้อมูล = 160 bits เป็นอัลกอริทึมแรกๆในตระกูล SHA ออกแบบในปี ค.ศ. 1995 ปัจจุบันการเข้ารหัสแบบนี้ไม่ปลอดภัยพบจุดอ่อนหลายจุด ถึงจะมีความยาว 160 bits จริงแต่พบว่าค่า Hash ที่สามารถสร้างแบบไม่ซ้ำกันได้มีเพียง 61 bits เท่านั้น
- SHA-256 ขนาดข้อมูล = 256 bits อัลกอริทึมนี้เป็นการเข้ารหัสทางเดียว ไม่สามารถถอดรหัสได้เพราะมีการสร้างที่ไม่มีรูปแบบตายตัวและสร้างค่า Hash ที่ไม่ซ้ำกันออกมา เป็นอัลกอริทึมที่ได้รับความนิยมมากที่สุดในปัจจุบันโดยเฉพาะ blockchain ก็ใช้อัลกอริทึมนี้ในการเข้ารหัสข้อมูล
- SHA-512 ขนาดข้อมูล = 512 bits เป็นอัลกอริทึมที่แข็งแกร่งที่สุดในตระกูล SHA แต่จะทำงานได้ดีบนคอมพิวเตอร์ที่มีความเร็ว 64 bits
ตัวอย่างการสร้างค่า Hash โดยอัลกอริทึมแบบต่างๆ |
Hash มีจุดอ่อนอะไรบ้าง?
Hacker เองจะโจมตี hash โดยใช้เทคนิค Brute-force attack หรือใช้การเดารหัสผ่านทั้งตัวเลข ตัวอักษรที่เป็นไปได้ทั้งหมด จากนั้นนำมาเทียบกับ hash ที่ขโมยมา หากตรงกัน Hacker ก็จะทราบรหัสผ่านทันที ซึ่งหลายครั้ง Hacker ก็สามารถเดาถูกทำให้บัญชีถูกขโมยได้อย่างง่ายดาย สาเหตุมาจากการตั้ง Password ที่ง่ายเกินไปทำให้ Hacker สามารถเดาคำเหล่านั้นได้ง่ายเช่น ตัวเลข คำที่อยู่ใน Dictionary หรือวลีง่ายๆ เป็นต้น ดังนั้นเราควรตั้ง Password ให้มีความซับซ้อน ผสมตัวพิมพ์เล็ก ตัวพิมพ์ใหญ่ ตัวเลข เพิ่มสัญลักษณ์พิเศษลงไป และควรเปลี่ยน Password บ้าง
1. 123456
2. password
แต่ที่นี้หาก Hacker สามารถสร้างฐานข้อมูลขนาดใหญ่ขึ้นมาเพื่อเตรียมจะโจมตีหรือเรียกว่า Rainbow Table ก็จะเป็นอาวุธที่ดีอย่างหนึ่งของ Hacker เลยทีเดียวเพราะไม่ต้องมา Run เลขหรือตัวอักษรทีละหลักเหมือนวิธี Brute-force attack แต่ใช้ความน่าจะเป็นหรือสถิติว่าคนน่าจะตั้ง Password จากคำหรือข้อความลงไปซึ่งหลายครั้งพบว่าสามารถ Hack ได้สำเร็จเพราะบางคนก็ตั้งรหัสง่ายๆเพราะกลัวลืม แต่อย่างไรก็ตามก็มีวิธีแก้ให้ Hash มีความปลอดภัยมากขึ้นจาก "Salt"
เสริมความแข็งแกร่งอีกชั้นด้วย Salt
จากข้อความ 123456 เราสามารถสร้าง Hash ได้เป็น "8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92" ซึ่งไม่ว่าจะสร้างกี่ครั้งก็ได้ค่า Hash เหมือนเดิม ทำให้ยิ่งไม่ปลอดภัยเพราะเราสามารถนำค่า Hash ไปค้นหา Hash ที่คล้ายกันได้จาก User คนอื่นๆ หากเจอว่ามี Hash ที่เหมือนกันก็หมายความว่า Hacker สามารถรู้รหัสผ่านของทุกๆคนที่ค่า Hash เหมือนกันหมดเลย ทำให้ยิ่งอันตรายอย่างมาก ดังนั้นเพื่อทำให้ Hash มีความแข็งแกร่งมากขึ้นเราจะสร้าง Salt ขึ้นมาหรือเป็นการสร้างค่า Random Unique Data ขึ้นมาแล้วนำไปรวมกับ Password ทำให้ Hash ที่ได้ออกมาจะไม่มีทางซ้ำกันถึงแม้จะเป็น Password เดียวกัน
ตัวอย่างการเข้ารหัสโดย Salt กับข้อมูลที่เหมือนกัน |