ฟังก์ชันแฮชทำอะไร
ฟังก์ชันแฮช (hash function) รับข้อมูลนำเข้าอะไรก็ได้ (คำหนึ่งคำ ไฟล์หนึ่งไฟล์ หรือธุรกรรมทั้งบล็อก) แล้วสร้างผลลัพธ์สั้น ๆ ที่มีความยาวคงที่ เรียกว่าแฮช (hash) หรือไดเจสต์ (digest) SHA-256 ซึ่ง Bitcoin ใช้ ให้ผลลัพธ์ยาว 256 บิตเสมอ ซึ่งมักเขียนเป็นอักขระเลขฐานสิบหก 64 ตัว ไม่ว่าข้อมูลนำเข้าจะเป็นตัวอักษรตัวเดียวหรือภาพยนตร์ทั้งเรื่อง
คุณสมบัติที่สำคัญ
- ให้ผลแน่นอน (deterministic): ข้อมูลนำเข้าเดิมให้แฮชเดิมเสมอ ไม่ว่าจะคำนวณบนคอมพิวเตอร์เครื่องไหน
- คำนวณได้เร็ว: การแฮชไฟล์ขนาดใหญ่ใช้เวลาไม่ถึงวินาที
- ทางเดียว (one-way): เมื่อมีแค่แฮช ไม่มีวิธีที่ใช้ได้จริงในการหาข้อมูลนำเข้าที่ให้แฮชนั้น นอกจากการเดา
- ปรากฏการณ์หิมะถล่ม (avalanche effect): เปลี่ยนข้อมูลนำเข้าเพียงตัวอักษรเดียว บิตของผลลัพธ์จะเปลี่ยนไปราวครึ่งหนึ่ง ข้อมูลนำเข้าที่คล้ายกันจึงให้แฮชที่ไม่เกี่ยวข้องกันเลย
คุณสมบัติอีกข้อคือความทนทานต่อการชนกัน (collision resistance) หมายความว่าไม่มีใครหาข้อมูลนำเข้า 2 ชุดที่ต่างกันแต่ได้แฮชเดียวกันได้ การชนกันแบบนี้ต้องมีอยู่แน่นอน เพราะข้อมูลนำเข้าที่เป็นไปได้มีมากกว่าผลลัพธ์ที่เป็นไปได้ แต่สำหรับฟังก์ชันที่ออกแบบมาดี การจะหาเจอสักคู่ต้องใช้พลังประมวลผลมากกว่าที่มีอยู่จริงในโลก
คุณจะเจอแฮชที่ไหนบ้างในคริปโต
- แต่ละบล็อกบันทึกแฮชของบล็อกก่อนหน้าไว้ ทำให้การแก้ไขประวัติเก่าถูกตรวจพบได้
- Merkle tree แฮชทุกธุรกรรมในบล็อกลงมาจนเหลือแฮชราก (root hash) เพียงค่าเดียว จึงพิสูจน์ได้ว่าธุรกรรมหนึ่งอยู่ในบล็อก โดยไม่ต้องดาวน์โหลดทั้งบล็อก
- นักขุดใน Proof of Work ค้นหาแฮชของบล็อกที่มีค่าต่ำกว่าตัวเลขเป้าหมาย ซึ่งทำได้ด้วยการลองข้อมูลนำเข้าไปทีละชุดเท่านั้น
- แอดเดรส Ethereum ตัดมาจากแฮช Keccak-256 ของพับลิกคีย์
จุดที่แฮชหยุดปกป้องคุณ
แฮชพิสูจน์ได้ว่าข้อมูลไม่ได้เปลี่ยนไปนับตั้งแต่ถูกแฮช แต่ไม่ได้บอกอะไรเลยว่าข้อมูลนั้นถูกต้องตั้งแต่แรกหรือไม่ และคุณสมบัติทางเดียวจะใช้ได้ก็ต่อเมื่อข้อมูลนำเข้าเดายาก ถ้าแฮช PIN 4 หลัก ใครก็ย้อนกลับได้ ด้วยการแฮช PIN ที่เป็นไปได้ทั้ง 10,000 แบบแล้วเทียบดู รหัสผ่าน และซีดเฟรสที่คนคิดขึ้นเอง ล้มเหลวด้วยเหตุผลเดียวกัน: ความปลอดภัยมาจากจำนวนข้อมูลนำเข้าที่เป็นไปได้ ไม่ได้มาจากตัวแฮช
แฮชคือตราผนึกบนเอกสาร ไม่ใช่คำตัดสินว่าสิ่งที่เอกสารเขียนไว้นั้นถูกต้อง