Hashing คืออะไร ทำงานอย่างไร แม้แต่ Blockchain ก็ใช้ Hash ในการเข้ารหัสด้วย

Hashing คือ เป็นการแปลงข้อมูลต้นฉบับที่มีความยาวเท่าไหร่ก็ตามมาสร้าง Hash ผ่านอัลกอริทึมทางคณิตศาสตร์เพื่อให้ได้ค่า Hash (Hash value) ซึ่งเป็นข้อมูลที่เป็นเอกลักษณ์(Unique) และมีความยาวคงที่(fixed length) เปรียบเสมือนการสร้างรหัสบัตรประชาชนคือแต่ละคนจะได้รหัสบัตรประชาชนที่ไม่ซ้ำกัน ปัจจุบัน Blockchain ก็มีการใช้ Hash ในการสร้าง Block ทำให้ระบบมีความปลอดภัย

Hash Function

     Hash Function คืออัลกอริทึมทางคณิตศาสตร์ที่ใช้ในการเข้าข้อมูลต้นฉบับสร้างเป็นรหัสหรือค่า Hash ข้อมูลไม่ว่าจะยาวเท่าไหร่ก็ตามเมื่อผ่าน Hash function แล้วควรจะมีความยาวที่เท่ากันและ Hash function ไม่สามารถย้อนกลับชุดข้อมูลเดิมได้ ปัจจุบัน Hash function มีหลายอัลกอริทึมในการเข้ารหัสข้อมูลเช่น MD5, SHA1, SHA-256, SHA-512 และ CRC32 เป็นต้น 
     จากตัวอย่างสมมติมีข้อความทั่วไป(Plain Text) ที่มีเนื้อความต่างกันคือ Hello, Hello Alice, Hello Bob จากนั้นเมื่อนำมาเข้า Hash Function ก็จะได้ค่า Hash ออกมาจะสังเกตุว่าถึงแม้มีจำนวนตัวอักษรที่ต่างกันแต่ความยาวของค่า Hash จะได้เท่ากัน ค่า Hash ที่เราได้ออกมานั้นเราจะไม่สามารถนำไปคำนวณย้อนกลับไปยังข้อความตั้งต้นของเราได้ เราจะพบการใช้ Hash Function บ่อยในกรณีที่ User ป้อน Login Form โดยการป้อน Username และ Password เมื่อ User ป้อน Username และ Password เราจะใช้ Hash Function ในการเข้ารหัสสร้างค่า Hash ออกมาก่อนจัดเก็บข้อมูลลง Database ต่อไป

ตัวอย่างการเข้ารหัสโดย 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 บ้าง

ตัวอย่างของ Password ที่คนชอบตั้งกันมากที่สุด
1. 123456
2. password
3. 123456789
4. qwerty
5. football

     แต่ที่นี้หาก 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 กับข้อมูลที่เหมือนกัน


ป้ายกำกับ

แสดงเพิ่มเติม

บทความยอดนิยม

Software Development Life Cycle (SDLC) คืออะไร ทำไมจำเป็นต่อการพัฒนาซอฟต์แวร์

ม.ปลายอยากเข้าสายคอม วิทยาการคอม วิศวกรรมคอม เตรียมตัวอย่างไร ต้องมีพื้นฐานอะไรบ้าง

Automation testing หรือ การทดสอบซอฟต์แวร์อัตโนมัติ คืออะไร ทำไมถึงสำคัญต่อการทดสอบซอฟต์แวร์

วิธีเก็บ วิเคราะห์ รวบรวม requirement อย่างไรให้มีประสิทธิภาพ

Performance Test คือ อะไร วัดประสิทธิภาพของระบบ ล่มไม่ล่ม จะรู้ได้อย่างไร

8 สิ่งที่ AI จะมาเปลี่ยนโลกในอนาคต

ถอดรหัสความลับเครื่อง Enigma จุดเริ่มต้นและจุดจบของสงครามโลกครั้งที่ 2