Hash คืออะไร Hash function คืออะไร คุณสมบัติเป็นอย่างไร มีกี่รูปแบบ รหัสของ hash จะมีกี่ตัวอักษร

Hash คืออะไร Hash function คืออะไร คุณสมบัติเป็นอย่างไร มีกี่รูปแบบ
Hash คืออะไร Hash function คืออะไร คุณสมบัติเป็นอย่างไร มีกี่รูปแบบ
Hash คืออะไร Hash function คืออะไร คุณสมบัติเป็นอย่างไร มีกี่รูปแบบ

Hash คืออะไร

Hash (แฮช) เป็นฟังก์ชันทางคณิตศาสตร์ที่ใช้สำหรับการแปลงข้อมูลจากรูปแบบของข้อความหรือข้อมูลใดๆ เป็นสตริงของตัวเลขความยาวคงที่ที่เรียกว่า “ค่าแฮช” หรือ “โค้ดแฮช” (hash code) ฟังก์ชันแฮชจะรับข้อมูลใดๆ เข้ามาและสร้างค่าแฮชตามหลักการที่ถูกกำหนดไว้ ฟังก์ชันแฮชมักถูกใช้ในหลายระบบและแอปพลิเคชันที่ต้องการค้นหาข้อมูลอย่างรวดเร็ว เช่นในฐานข้อมูล, การจัดเก็บข้อมูลในตารางแบบแฮช (hash table), การตรวจสอบความเปลี่ยนแปลงของไฟล์ (checksums), การตรวจสอบความปลอดภัยของรหัส (cryptography), และอื่นๆ อีกมากมาย

Hash function คืออะไร

Hash Function เป็นอัลกอริทึมทางคณิตศาสตร์ที่ใช้ในการแปลงข้อมูลต้นฉบับเป็นรหัสหรือค่าแฮช โดยอาศัยคำนวณทางคณิตศาสตร์แบบเฉพาะเพื่อให้ได้ค่าแฮชที่มีคุณสมบัติเฉพาะ ค่าแฮชที่ได้จากฟังก์ชันแฮชมีความยาวคงที่ไม่ว่าข้อมูลต้นฉบับจะยาวเท่าใด และฟังก์ชันแฮชจะไม่สามารถนำค่าแฮชกลับไปเป็นข้อมูลต้นฉบับได้ (one-way function) นี้ช่วยให้ฟังก์ชันแฮชเป็นเครื่องมือสำคัญในความปลอดภัยข้อมูลและการตรวจสอบความถูกต้องของข้อมูล.

ปัจจุบันมีหลายอัลกอริทึมของฟังก์ชันแฮชที่ใช้งานอย่างแพร่หลาย เช่น MD5, SHA-1, SHA-256, SHA-512, และ CRC32 แต่อย่างไรก็ตามควรระวังว่าไม่ใช่ทุกฟังก์ชันแฮชที่มีความปลอดภัยเท่ากัน บางฟังก์ชันอาจมีช่องโหว่ความปลอดภัย หรือถูกทำลายได้ง่าย เพราะฉะนั้นควรเลือกใช้ฟังก์ชันแฮชที่เหมาะสมกับการใช้งานและมีความปลอดภัยในระดับที่เหมาะสม โดยเฉพาะในแอปพลิเคชันที่เกี่ยวข้องกับความปลอดภัยข้อมูลและการรักษาความลับ

Hash function มีกี่รูปแบบ

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

Hash function มีกี่รูปแบบ
Hash function มีกี่รูปแบบ
  1. MD5 (Message Digest Algorithm 5):
    • ขนาดค่าแฮช: 128 bits.
    • ลักษณะการทำงาน: MD5 เป็นฟังก์ชันแฮชแบบไม่คงทนต่อการโจมตี เมื่อให้ข้อมูลเข้ามา, มันจะสร้างค่าแฮชความยาว 128 bits จากข้อมูลนั้น. อัลกอริทึมนี้ทำงานโดยการแบ่งข้อมูลออกเป็นบล็อกขนาดเท่า ๆ กันและประมวลผลแต่ละบล็อกเป็นลำดับ.
    • ความคงทนและความปลอดภัย: MD5 ไม่คงทนต่อการโจมตีและมีความปลอดภัยต่ำ มีช่องโหว่ที่ทำให้เป็นไปได้ที่จะสร้างค่าแฮชที่เหมือนกันจากข้อมูลที่แตกต่างกัน.
  2. SHA-1 (Secure Hash Algorithm 1):
    • ขนาดค่าแฮช: 160 bits.
    • ลักษณะการทำงาน: SHA-1 เหมือนกับ MD5 แต่มีขนาดค่าแฮชที่ใหญ่ขึ้น และมีการปรับปรุงความคงทนต่อการโจมตีบางประเภท.
    • ความคงทนและความปลอดภัย: SHA-1 กำลังจะถูกถือว่าไม่คงทนต่อการโจมตีและไม่ควรใช้ในการป้องกันความปลอดภัยสูง เนื่องจากมีช่องโหว่ที่เกี่ยวข้องกับการแตกคีย์.
  3. SHA-256 (Secure Hash Algorithm 256-bit):
    • ขนาดค่าแฮช: 256 bits.
    • ลักษณะการทำงาน: SHA-256 เป็นฟังก์ชันแฮชที่ใช้กันอย่างกว้างขวางในการรักษาความปลอดภัยและความคงทนต่อการโจมตี มันทำงานโดยการแบ่งข้อมูลออกเป็นบล็อกขนาดเท่า ๆ กันและประมวลผลแต่ละบล็อกเป็นลำดับ.
    • ความคงทนและความปลอดภัย: SHA-256 มีความคงทนต่อการโจมตีสูงและใช้ในการรักษาความลับและความปลอดภัยข้อมูล.
  4. SHA-512 (Secure Hash Algorithm 512-bit):
    • ขนาดค่าแฮช: 512 bits.
    • ลักษณะการทำงาน: SHA-512 เหมือนกับ SHA-256 แต่มีขนาดค่าแฮชที่ใหญ่ขึ้น และมีความคงทนและความปลอดภัยสูง.
    • ความคงทนและความปลอดภัย: SHA-512 มีความคงทนต่อการโจมตีสูงและเป็นหนึ่งในฟังก์ชันแฮชที่แข็งแกร่งที่สุดในตระกูล SHA.
  5. CRC32 (Cyclic Redundancy Check 32-bit):
    • ขนาดค่าแฮช: 32 bits.
    • ลักษณะการทำงาน: CRC32 ไม่ได้ถูกออกแบบมาเพื่อความปลอดภัย แต่ใช้ในการตรวจสอบความถูกต้องของข้อมูลโดยการสร้างค่าความสอดคล้องที่ใช้ในการตรวจสอบข้อมูล.
    • ความคงทนและความปลอดภัย: CRC32 ไม่คงทนต่อการโจมตีและไม่เหมาะสำหรับการใช้ในการรักษาความปลอดภัยข้อมูล.

Hash function คุณสมบัติเป็นอย่างไร

Hash function มีคุณสมบัติหลายอย่างที่ทำให้มันเหมาะสำหรับการใช้งานแต่ละประเภท นี่คือคุณสมบัติหลักของฟังก์ชันแฮช

คุณสมบัติ Hash function
คุณสมบัติ Hash function
  1. ความคงทน (Pre-image Resistance): ความคงทนหมายถึงความยากต่อการหาข้อมูลต้นฉบับ (input) จากค่าแฮช (output) ของฟังก์ชันแฮช ฟังก์ชันแฮชที่มีความคงทนสูงคือที่ไม่สามารถกลับไปหาข้อมูลต้นฉบับได้ง่าย ๆ หรือในคำอื่นคือความยากของการแก้ประโยคแฮช.
  2. ความคงทนต่อการชนแฮช (Second Pre-image Resistance): ความคงทนต่อการชนแฮชหมายถึงความยากต่อการหาข้อมูลที่มีค่าแฮชเท่ากับค่าแฮชของข้อมูลอื่น ๆ (collision) โดยเฉพาะการหาข้อมูลที่มีค่าแฮชตรงกันกับข้อมูลต้นฉบับที่กำหนด.
  3. ความคงทนต่อการชนแฮชบท (Collision Resistance): ความคงทนต่อการชนแฮชบทหมายถึงความยากต่อการหาคู่ข้อมูลที่มีค่าแฮชเหมือนกัน นั่นหมายความว่าการที่ค่าแฮชจะซ้ำกันคือเหตุการณ์ที่สุ่มและยากมาก.
  4. ความคงทนต่อการชนแฮชบทแบบแรง (Avalanche Effect): ความคงทนต่อการชนแฮชบทแบบแรงหมายถึงความสามารถของฟังก์ชันแฮชที่การเปลี่ยนแปลงเพียงบิตเดียวในข้อมูลต้นฉบับจะทำให้ค่าแฮชเปลี่ยนแปลงอย่างสมบูรณ์ ในคำอื่นคือการเปลี่ยนแปลงเล็กน้อยในข้อมูลต้นฉบับควรส่งผลให้ค่าแฮชเปลี่ยนไปอย่างสุ่มและไม่อาจคาดเดาได้.
  5. ความคงทนต่อการทำแก้ไขข้อมูล (Resistant to Input Changes): ความคงทนต่อการทำแก้ไขข้อมูลหมายถึงความสามารถของฟังก์ชันแฮชที่การเปลี่ยนแปลงเพียงบางส่วนของข้อมูลต้นฉบับจะทำให้ค่าแฮชต่างจากค่าแฮชของข้อมูลต้นฉบับ นี่เป็นคุณสมบัติที่สำคัญในการปกป้องความปลอดภัยของข้อมูล.
  6. ความคงทนต่อการบุคคลที่สาม (Resistant to Third-Party Attacks): ความคงทนต่อการบุคคลที่สามหมายถึงความยากต่อการโจมตีจากบุคคลที่ไม่ได้มีสิทธิ์เข้าถึงรหัสแหล่งต้นฉบับ ฟังก์ชันแฮชควรป้องกันการโจมตีจากผู้ที่พยายามสร้างค่าแฮชเทียบเท่ากับค่าแฮชของข้อมูลโดยไม่มีข้อมูลต้นฉบับ.
  7. ความเร็วและประสิทธิภาพ (Efficiency): ฟังก์ชันแฮชควรทำงานอย่างมีประสิทธิภาพเพื่อให้สามารถใช้งานได้ในแอปพลิเคชันที่ต้องการความเร็ว ควรมีการคำนวณที่รวดเร็วและใช้ทรัพยากรน้อย.
  8. ความคุ้มครองข้อมูล (Data Integrity): ฟังก์ชันแฮชควรรักษาความคุ้มครองข้อมูลโดยไม่ให้มีการเปลี่ยนแปลงค่าแฮชเมื่อข้อมูลไม่เปลี่ยนแปลง นี้เป็นคุณสมบัติสำคัญในการป้องกันการแก้ไขข้อมูลโดยไม่ได้รับอนุญาต.

รหัสของ Hash จะมีกี่ตัวอักษร

ความยาวของรหัส Hash จะขึ้นอยู่กับอัลกอริทึมและการกำหนดค่าที่ใช้ในการสร้าง Hash นั่นเอง แต่ส่วนใหญ่รหัส Hash มักจะมีความยาวในหน่วย bits (บิต) หรือหน่วยตัวอักษรเล็กๆ อย่าง HEX (ฐาน 16) หรือ Base64 (ฐาน 64) ซึ่งใช้เพื่อแสดงค่า Hash ออกมาในรูปแบบที่เราสามารถอ่านและใช้งานได้ง่ายขึ้น.

ตัวอย่าง:

  • สำหรับ MD5, SHA-1 และ SHA-256, รหัส Hash มักจะมีความยาวเป็น 32 หลักถ้าเราแสดงในรูปแบบ HEX (ฐาน 16) และมีความยาวเป็น 44 ตัวอักษรถ้าเราแสดงในรูปแบบ Base64.
  • สำหรับ SHA-512, รหัส Hash มักจะมีความยาวเป็น 64 หลักถ้าเราแสดงในรูปแบบ HEX (ฐาน 16) และมีความยาวเป็น 88 ตัวอักษรถ้าเราแสดงในรูปแบบ Base64.

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

Hash มีจุดอ่อนอะไรบ้าง

การเลือกใช้ Hash function และการใช้ค่า Salt (ค่าเพิ่มเติมที่ใช้ในการป้องกันการโจมตี) จะช่วยลดความเสี่ยงของการโจมตีและเพิ่มความปลอดภัยของข้อมู แต่ละฟังก์ชันแฮชมีจุดอ่อนและข้อจำกัดที่ต้องระวังดังนี้

Hash มีจุดอ่อนอะไรบ้าง
Hash มีจุดอ่อนอะไรบ้าง
  1. การโจมตีด้วย Brute-force Attack: การโจมตีโดยใช้ Brute-force attack คือการลองคำทั้งหมดที่เป็นไปได้ที่จะสร้างค่า Hash และเทียบกับค่า Hash ที่เป้าหมาย. หากค่า Hash มีความยาวที่สูงและความซับซ้อน, การโจมตีนี้จะใช้เวลามากขึ้นและยากยิ่งขึ้น. แต่หากค่า Hash มีความยาวและความซับซ้อนต่ำ, การโจมตีโดย Brute-force attack อาจเป็นไปได้ง่ายขึ้น.
  2. การโจมตีแบบ Dictionary Attack: การโจมตีแบบนี้เป็นการลองคำที่อาจเป็นคำผ่านสำหรับการเข้ารหัส Hash โดยใช้คำที่อยู่ในรายการคำพจนานุกรม (dictionary) หรือคำที่เป็นที่รู้จัก เช่น รหัสผ่านที่ใช้ที่นิยม. การใช้รหัสผ่านที่แข็งแกร่งและที่ไม่เป็นที่รู้จักสามารถป้องกันการโจมตีแบบนี้ได้.
  3. การโจมตี Rainbow Table: Rainbow table คือตารางที่เก็บคู่ของข้อมูลต้นฉบับและค่า Hash ที่เป็นไปได้ สำหรับการโจมตีแบบ Rainbow table, Hacker สามารถใช้ตารางนี้ในการหาค่า Hash ของข้อมูลต้นฉบับโดยอย่างรวดเร็ว. การใช้ “Salt” สามารถป้องกันการโจมตีแบบนี้ได้.
  4. การโจมตีแบบ Time-Memory Tradeoff: การโจมตีแบบนี้ใช้ทรัพยากรมาก เช่น หน่วยความจำ ในการสร้างตาราง Rainbow table แต่สามารถทำให้การโจมตีเร็วขึ้น. การใช้ Salt และการทำค่าแฮชยาวขึ้นสามารถลดความเสี่ยงจากการโจมตีนี้.
  5. การโจมตีแบบ Collision Attack: การโจมตีแบบนี้เกิดขึ้นเมื่อสองข้อมูลต่าง ๆ มีค่า Hash ที่เหมือนกัน ซึ่งสามารถใช้ในการโจมตีและสร้างข้อมูลที่มีค่า Hash ตรงกัน (collision) การใช้ฟังก์ชันแฮชที่คงทนต่อการชนแฮชเป็นสิ่งสำคัญในการป้องกันการโจมตีนี้.

เสริมความแข็งแกร่งของ Hash function ด้วย Salt

การเพิ่มความแข็งแกร่งให้กับการใช้ Hash function สามารถทำได้โดยการเสริมด้วย Saltโดย Salt เป็นข้อมูลสุ่มที่ถูกเพิ่มเข้าไปในข้อมูลต้นฉบับก่อนที่จะถูก Hash ซึ่งทำให้ค่า Hash ผลลัพธ์มีความแปรปรวนและความคงทนต่อการโจมตีดีขึ้น. นี่คือวิธีที่ Salt ช่วยเสริมความแข็งแกร่งของการใช้ Hash:

เสริมความแข็งแกร่งของ Hash function ด้วย Salt
เสริมความแข็งแกร่งของ Hash function ด้วย Salt
  1. การสร้าง Salt: Salt ควรเป็นข้อมูลสุ่มที่ไม่ซ้ำกันสำหรับแต่ละข้อมูลต้นฉบับ. Salt สามารถสร้างขึ้นโดยใช้การสร้างเลขสุ่ม (random number) หรือข้อมูลสุ่มอื่น ๆ ที่มีความคล้ายคลึงกับข้อมูลต้นฉบับ.
  2. การเชื่อมต่อ Salt กับข้อมูลต้นฉบับ: Salt จะถูกเชื่อมต่อ (concatenated) หรือผสมร่วมกับข้อมูลต้นฉบับก่อนที่จะถูก Hash. ยกตัวอย่างเช่น หากคุณมีรหัสผ่าน “mypassword” และ Salt เป็น “abc123” คุณจะเชื่อมต่อ Salt กับรหัสผ่านเพื่อสร้างข้อมูลต้นฉบับแบบมี Salt เช่น “mypasswordabc123”.
  3. การ Hash ข้อมูลต้นฉบับแบบมี Salt: ข้อมูลต้นฉบับที่มี Salt จะถูก Hash เหมือนเดิม แต่อีกครั้งค่า Hash จะถูกเพิ่มความสับสนและความคาดเดายากขึ้น.
  4. การเก็บ Salt: Salt จะถูกเก็บไว้รวมกับค่า Hash ที่ได้ ซึ่งเป็นข้อมูลที่จำเป็นในการตรวจสอบรหัสผ่านในอนาคต.

การใช้ Salt ช่วยป้องกันการโจมตีแบบ Rainbow table และทำให้การคาดเดาค่า Hash ของข้อมูลต้นฉบับมีความยากลำบากมากขึ้น เมื่อ Salt ถูกเพิ่มเข้าไปในกระบวนการ Hashing แม้คุณจะใช้รหัสผ่านที่ซ้ำกันก็จะได้ค่า Hash ที่แตกต่างกันแบบสมบูรณ์ โดยทำให้การบุกรุกด้วยการใช้ข้อมูลรหัสผ่านที่ถูกโจมตีด้วย Rainbow table เป็นไปได้ยากมากขึ้น.