อ่าน 15 นาที

Hash Function คืออะไร? Cryptographic Hashing ทำงานอย่างไร

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

Hash Function คืออะไร?

Hash function คืออัลกอริทึมทางคณิตศาสตร์ที่รับ input ขนาดใดก็ได้ ไม่ว่าจะเป็นตัวอักษรเดียว ข้อความยาว หรือไฟล์ทั้งไฟล์ แล้วสร้าง output ความยาวคงที่ที่เรียกว่า hash value, digest หรือ fingerprint

input เดิมจะได้ hash เดิมเสมอ แต่ถ้าเปลี่ยน input เพียงตัวอักษรเดียว ค่า hash จะเปลี่ยนไปอย่างมาก คุณจึงใช้ hash เพื่อตรวจว่าข้อมูลถูกแก้ไขหรือเสียหายหรือไม่

Input: Hello
SHA-256: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

Input: hello
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

คุณสมบัติสำคัญคือ hash เป็น one-way function คือคำนวณจาก input ไปเป็น hash ได้ แต่ไม่สามารถย้อนกลับจาก hash เพื่อกู้ input เดิมได้โดยตรง

คุณสมบัติ 5 ข้อของ Cryptographic Hash

  • Deterministic: input เดิมต้องได้ hash เดิมเสมอ
  • Pre-image resistance: เห็น hash แล้วหา input เดิมไม่ได้ในทางปฏิบัติ
  • Second pre-image resistance: มี input กับ hash แล้ว หา input อื่นที่ได้ hash เดียวกันไม่ได้ในทางปฏิบัติ
  • Collision resistance: หา input สองชุดที่ต่างกันแต่ hash เหมือนกันไม่ได้ในทางปฏิบัติ
  • Avalanche effect: เปลี่ยน input นิดเดียว output ควรเปลี่ยนไปอย่างมาก

Hashing ทำงานอย่างไร

รายละเอียดทางคณิตศาสตร์ของแต่ละอัลกอริทึมต่างกัน แต่โดยทั่วไป hash จะ padding ข้อมูล แบ่งเป็น block แล้วประมวลผลทีละ block ผ่าน compression function เพื่ออัปเดต state ภายใน ก่อนปล่อย digest สุดท้ายออกมา

Input data
  -> Padding
  -> Split into fixed-size blocks
  -> Process each block with compression rounds
  -> Final digest, e.g. SHA-256 = 256 bits = 64 hex characters

เปรียบเทียบอัลกอริทึม Hash

อัลกอริทึม hash หลายตัวเคยปลอดภัยในอดีต แต่ถูกโจมตีได้เมื่อเวลาผ่านไป การเลือกใช้จึงต้องดูบริบทและมาตรฐานปัจจุบัน

AlgorithmOutputสถานะคำแนะนำ
MD5128-bitไม่ปลอดภัยใช้ได้เฉพาะ checksum ที่ไม่เกี่ยวกับความปลอดภัย
SHA-1160-bitไม่ปลอดภัยเลิกใช้กับ certificate, signing และระบบใหม่
SHA-256256-bitปลอดภัยและนิยมมากเหมาะกับ file integrity, signatures, blockchain และงานทั่วไป
SHA-384384-bitปลอดภัยเหมาะกับระบบที่ต้องการ security margin สูงขึ้น
SHA-512512-bitปลอดภัยเร็วบน CPU 64-bit หลายรุ่นและให้ output ยาวกว่า
SHA-3หลายขนาดปลอดภัยโครงสร้างต่างจาก SHA-2 ใช้เมื่ออยากได้ทางเลือกมาตรฐานอีกตระกูล

MD5 และ SHA-1 ไม่ควรใช้เพื่อความปลอดภัยอีกแล้ว เพราะมี collision attack ที่ใช้งานได้จริง ส่วน SHA-256 ยังเป็นมาตรฐานที่ใช้แพร่หลายมากที่สุดในงานทั่วไป

Collision Attack คืออะไร

Collision เกิดเมื่อ input สองชุดที่ต่างกันได้ hash เดียวกัน เนื่องจาก input มีได้ไม่จำกัดแต่ output มีจำนวนจำกัด collision จึงมีอยู่แน่นอนในทางทฤษฎี คำถามคือหาได้จริงหรือไม่

สำหรับ hash ขนาด n bits การหา collision ใช้ประมาณ 2n/2 ครั้งตาม birthday paradox ไม่ใช่ 2n นี่คือเหตุผลที่ MD5 128-bit อ่อนแอกว่าที่ดูจากเลข 128 อย่างมาก

Password Hashing, Salt และ Key Stretching

เว็บไม่ควรเก็บ password จริง แต่ควรเก็บ hash ของ password อย่างไรก็ตาม การใช้ SHA-256 ตรง ๆ กับ password เป็นเรื่องอันตราย เพราะ SHA-256 ถูกออกแบบให้เร็วมาก และ GPU สามารถลองได้หลายพันล้านครั้งต่อวินาที

Salt คือค่าสุ่มเฉพาะผู้ใช้ที่เก็บคู่กับ hash ทำให้ password เดียวกันได้ hash ต่างกัน และป้องกัน rainbow table ส่วน key stretching คือการทำให้การ hash ช้าลงอย่างตั้งใจ

สำหรับ password ควรใช้ฟังก์ชันเฉพาะทาง เช่น Argon2, bcrypt หรือ scrypt เพราะออกแบบมาให้ช้าและใช้ memory สูง ทำให้ brute force แพงขึ้นมาก

HMAC สำหรับการยืนยันตัวตน

HMAC หรือ Hash-based Message Authentication Code รวม hash function เข้ากับ secret key เพื่อให้ตรวจได้ทั้ง integrity และ authenticity ต่างจาก hash ธรรมดาที่บอกได้แค่ว่าข้อมูลเปลี่ยนหรือไม่

HMAC(key, message) = keyed hash digest

HMAC-SHA256 ใช้บ่อยใน API signatures, webhook verification และระบบที่ต้องพิสูจน์ว่าข้อความมาจากผู้ที่มี secret key จริง

การใช้งานจริง

  • Blockchain: Bitcoin ใช้ double SHA-256 สำหรับ proof-of-work, transaction ID และการเชื่อม block
  • HTTPS/TLS: ใช้ hash ใน certificate verification, key derivation และ message integrity
  • Git: object ต่าง ๆ เช่น commit, tree และ blob ถูกอ้างอิงด้วย hash
  • Software downloads: ใช้ SHA-256 checksum เพื่อตรวจว่าไฟล์ไม่เสียหายหรือถูกแก้ไข
  • Digital signatures: มัก sign hash ของข้อความแทนที่จะ sign ข้อความเต็ม
  • Deduplication: ระบบ storage ใช้ hash หาไฟล์ซ้ำโดยไม่ต้องเทียบข้อมูลเต็มทุกครั้ง
  • Hash tables: dictionary, map และ hash map ในภาษาโปรแกรมต่าง ๆ ใช้ hash เพื่อค้นหาเร็ว

Hash vs Encryption vs Encoding

วิธีย้อนกลับได้ไหมตัวอย่าง
Hashingไม่ได้SHA-256, SHA-512
Encryptionได้ ถ้ามี keyAES, RSA
Encodingได้ ไม่ต้องมี keyBase64, URL encoding

Base64 ไม่ใช่ encryption เพราะใครก็ decode ได้ และ hash ก็ไม่ใช่ encryption เพราะไม่มีการ decrypt hash เพื่อกลับไปหา input เดิม ทั้งสามอย่างมีเป้าหมายต่างกัน

แนวทางใช้งานที่ดี

  • ใช้ SHA-256 หรือ SHA-512 สำหรับงาน integrity และ cryptographic hashing ทั่วไป
  • เลิกใช้ MD5 และ SHA-1 กับงานความปลอดภัย
  • อย่าใช้ SHA-256 ตรง ๆ กับ password ให้ใช้ Argon2, bcrypt หรือ scrypt พร้อม salt เฉพาะผู้ใช้
  • ใช้ HMAC เมื่อจำเป็นต้องพิสูจน์ทั้งความถูกต้องของข้อมูลและผู้ส่ง เช่น API requests หรือ webhooks
  • ใช้ library มาตรฐาน เช่น Web Crypto API, OpenSSL, Node.js crypto หรือ Python hashlib
  • เก็บชื่อ algorithm คู่กับ hash เพื่อรองรับการ migration ในอนาคต

สร้างค่า Hash ได้ทันที

ใช้เครื่องมือ Hash Generator ฟรีเพื่อสร้างค่า MD5, SHA-1, SHA-256, SHA-384 และ SHA-512 จากข้อความใดก็ได้ แบบ real-time และประมวลผลในเบราว์เซอร์ของคุณ

เปิด Hash Generator

แหล่งอ้างอิง

  1. NIST. FIPS 180-4: Secure Hash Standard (SHS)
  2. NIST. FIPS 202: SHA-3 Standard
  3. Google Research and CWI Amsterdam. SHAttered: The first SHA-1 collision
  4. Rivest, R. (1992). RFC 1321: The MD5 Message-Digest Algorithm
  5. Krawczyk, H. et al. (1997). RFC 2104: HMAC
  6. Biryukov, A. et al. (2015). Argon2: the memory-hard function for password hashing
USTHJP