คำจำกัดความ
Hash คืออะไร?
Hash Function คือฟังก์ชันที่แปลงข้อมูลขนาดใดก็ได้เป็นค่าความยาวคงที่ (hash value หรือ digest) ค่า hash เป็นแบบทางเดียว (one-way) ไม่สามารถย้อนกลับไปเป็นข้อมูลเดิมได้
Hash ใช้สำหรับตรวจสอบความสมบูรณ์ของข้อมูล (integrity), เก็บรหัสผ่าน, digital signatures, และอื่นๆ
Algorithms
อัลกอริทึมที่รองรับ
- MD5 — 128-bit hash ใช้ตรวจสอบ checksum (ไม่แนะนำสำหรับ security)
- SHA-1 — 160-bit hash (เลิกใช้ใน security context แล้ว)
- SHA-256 — 256-bit hash จากตระกูล SHA-2 (แนะนำ ปลอดภัย)
- SHA-512 — 512-bit hash จากตระกูล SHA-2 (ปลอดภัยที่สุด)
- ตรวจสอบความสมบูรณ์ของไฟล์ (file integrity check)
- เก็บรหัสผ่านในฐานข้อมูล (password hashing)
- Digital signatures สำหรับยืนยันตัวตน
- Content addressing ใน Git, IPFS
- Checksum สำหรับ data deduplication
กรณีใช้งานจริง
กรณีใช้งานจริง
- ตรวจสอบ checksum ของไฟล์ที่ดาวน์โหลดมาว่าตรงกับที่เจ้าของเผยแพร่ ป้องกันไฟล์ถูกดัดแปลง
- สร้าง hash ของ API response เพื่อใช้เป็น cache key ใน Redis หรือ CDN ลดการเรียก API ซ้ำ
- สร้าง content hash สำหรับ cache busting ของ static assets เช่น CSS และ JavaScript
- ตรวจสอบว่าข้อมูลสองชุดเหมือนกันหรือไม่โดยเปรียบเทียบ hash แทนการเทียบทั้งไฟล์
- สร้าง fingerprint ของ configuration เพื่อตรวจจับการเปลี่ยนแปลงใน deployment pipeline
แนวปฏิบัติ
เคล็ดลับและแนวปฏิบัติที่ดี
- ใช้ SHA-256 เป็นค่า default สำหรับงาน integrity check เพราะปลอดภัยและเร็วเพียงพอสำหรับทุกกรณี
- อย่าใช้ MD5 หรือ SHA-1 สำหรับงานด้าน security เพราะมี collision attack ที่ proven แล้ว
- สำหรับ password hashing ต้องใช้ bcrypt, scrypt หรือ Argon2 ที่มี salt และ cost factor ไม่ใช่ SHA
- เปรียบเทียบ hash แบบ constant-time ในโค้ดเพื่อป้องกัน timing attack อย่าใช้ === ธรรมดา
- ใช้ฟีเจอร์สร้างทุกอัลกอริทึมพร้อมกัน เพื่อเปรียบเทียบความยาวและรูปแบบของแต่ละ algorithm
หลีกเลี่ยง
ข้อผิดพลาดที่พบบ่อย
- ใช้ SHA-256 เก็บ password โดยตรงโดยไม่ใส่ salt ทำให้ถูก rainbow table attack ได้ง่าย
- สับสนระหว่าง hashing กับ encryption คิดว่า hash ถอดรหัสกลับได้ ซึ่งจริงๆ เป็น one-way function
- ใช้ MD5 สำหรับงาน security-sensitive เช่น digital signature ทั้งที่มี known collision ตั้งแต่ปี 2004
- ไม่ตรวจสอบ encoding ของ input ก่อน hash ทำให้ข้อความเดียวกันแต่ต่าง encoding ได้ hash ต่างกัน
เปรียบเทียบ
เปรียบเทียบกับเครื่องมืออื่น
Hash Generator ของเราใช้ Web Crypto API (crypto.subtle) ซึ่งเป็น native API ของเบราว์เซอร์ เร็วและปลอดภัย ต่างจากเว็บไซต์บางแห่งที่ส่งข้อมูลไป hash บน server
เมื่อเทียบกับ command-line อย่าง shasum หรือ md5sum เครื่องมือนี้แสดง hash จากทุก algorithm พร้อมกันในหน้าเดียว ไม่ต้องพิมพ์คำสั่งหลายครั้ง และคัดลอกผลลัพธ์ได้ง่าย
เครื่องมือนี้ประมวลผลในเบราว์เซอร์ ไม่ควรใช้ MD5 หรือ SHA-1 สำหรับงานด้าน security แนะนำ SHA-256 ขึ้นไป สำหรับ password hashing ควรใช้ bcrypt, scrypt หรือ Argon2 แทน