ทำไม SHA-256 ถึงย้อนกลับไม่ได้?
SHA-256 คือรากฐานความปลอดภัยของ Bitcoin การเข้าใจว่าทำไมมันถึงเป็นฟังก์ชันทางเดียว — ไม่ใช่แค่ยาก แต่เป็นไปไม่ได้ทางคณิตศาสตร์ที่จะย้อนกลับ — จะช่วยให้คุณเข้าใจ Bitcoin ได้อย่างแท้จริง
b94d27b9934d3e08a52e52d7da7dabfac484efe04294e576f2a97c2d552ea9a8
สตริง 64 ตัวอักษรนั้นเข้ารหัสประโยคข้างต้น คุณไม่สามารถกู้ประโยคต้นฉบับกลับมาได้ — ไม่ใช่แค่ยาก แต่เป็นไปไม่ได้ นี่คือเหตุผลทางคณิตศาสตร์
ฟังก์ชันแฮชคืออะไร?
ฟังก์ชันแฮชรับข้อมูลอินพุตอะไรก็ได้ — ตัวอักษรเดียว นิยายทั้งเล่ม หรือบล็อก Bitcoin ทั้งบล็อก — แล้วสร้างลายนิ้วมือความยาวคงที่ที่เรียกว่า ไดเจสต์ SHA-256 จะให้ผลลัพธ์ 256 บิตเสมอ ซึ่งเขียนเป็นเลขฐานสิบหกจำนวน 64 ตัวอักษร
คุณสมบัติสามอย่างที่กำหนดฟังก์ชันแฮชที่ดี:
ลองด้วยตัวเองด้านล่าง สังเกตว่าอินพุตอะไรก็ได้ — แม้แต่ข้อความว่าง — จะให้ผลลัพธ์ 64 ตัวอักษรเสมอ
ทำไมถึงย้อนกลับไม่ได้
"ย้อนกลับไม่ได้" ไม่ใช่ข้อจำกัดทางปฏิบัติที่รอให้คอมพิวเตอร์เร็วขึ้น มันถูกฝังอยู่ในโครงสร้างทางคณิตศาสตร์ มีสามข้อโต้แย้งที่อธิบายว่าทำไม
การทำลายข้อมูล (หลักการรังนกพิราบ)
SHA-256 แมปอินพุตที่มีจำนวนอนันต์ไปยังเอาต์พุต 2²⁵⁶ รายการที่มีจำนวนจำกัด ตามหลักการรังนกพิราบ อินพุตจำนวนอนันต์จะให้แฮชเดียวกัน
เมื่อคุณเห็นแฮช คุณไม่สามารถรู้ได้ว่าอินพุตใดสร้างมันขึ้นมา คุณอาจหาพรีอิมเมจด้วยการลองแบบ brute force — แต่ไม่มีทางได้ต้นฉบับ ข้อมูลนั้นสูญหายไปแล้ว
เอฟเฟกต์หิมะถล่ม (ไม่มีทิศทางที่จะติดตาม)
เปลี่ยนตัวอักษรเดียว — พลิกบิตเดียว — แล้วบิตเอาต์พุตประมาณครึ่งหนึ่งจะเปลี่ยนไปอย่างดูเหมือนสุ่ม
ไม่มี "การเข้าใกล้" ทุกการเดาที่ผิดดูผิดเท่ากันหมด ต่างจากสมการตัวเลขที่คุณสามารถแก้แบบวนซ้ำ คุณไม่มีสัญญาณใดเลยในการนำทางการค้นหา
ไม่มีอินเวอร์สเชิงพีชคณิต
SHA-256 ใช้การดำเนินการ XOR AND OR การหมุนบิต และ การบวกแบบโมดูลาร์ — ผ่าน 64 รอบ แต่ละรอบป้อนเข้าสู่รอบถัดไป ต่างจาก RSA (ซึ่งมีการดำเนินการทางคณิตศาสตร์ผกผัน) หรือแม้แต่รหัสซีซาร์ (แค่กลับทิศทาง) SHA-256 ไม่มีการดำเนินการผกผัน
ภายในหนึ่งรอบของ SHA-256
1. กระจายข้อมูล (S1)
S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)หมุนบิตของ e ไป 6, 11 และ 25 ตำแหน่ง แล้ว XOR เข้าด้วยกัน เพื่อให้ทุกบิตส่งผลต่อกันอย่างกว้างขวาง
2. การเลือกบิต (Ch)
ch = (e & f) ^ (~e & g)ใช้บิตจาก e เพื่อเลือกบิตระหว่าง f หรือ g
3. การบวกค่าคงที่ (t1)
t1 = h + S1 + ch + k + wรวม h, S1, Ch และ word กับ constant ประจำรอบเข้าด้วยกัน
4. กระจายข้อมูล (S0)
S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)หมุนบิตของ a ไป 2, 13 และ 22 ตำแหน่ง แล้ว XOR เข้าด้วยกัน
5. กฎเสียงข้างมาก (Maj)
maj = (a & b) ^ (a & c) ^ (b & c)สำหรับแต่ละตำแหน่งบิต ให้เลือกค่าที่ปรากฏบ่อยที่สุดใน a, b และ c
6. อัปเดตสถานะ
[a', a, b, c, e', e, f, g]เลื่อนค่าทั้งหมดและคำนวณ a และ e ใหม่สำหรับรอบถัดไป
SHA-256 คำนวณ S0 = rotr(a,2) ^ rotr(a,13) ^ rotr(a,22) ตัวอย่าง 8 บิตนี้ใช้การหมุน 1, 3 และ 5 บิตเพื่อให้เห็นภาพได้ง่าย คลิกที่บิตเพื่อเปลี่ยนค่า
แสดงผลจำลอง (rotr 0/5)
การบวกแบบโมดูลาร์ แต่ละครั้งทิ้งข้อมูล carry ไว้ แต่ละ XOR สามารถตอบสนองได้ด้วยคู่อินพุตสองแบบที่แตกต่างกัน หลังจาก 64 รอบ การสร้างอินพุตขึ้นใหม่เทียบเท่ากับการแก้ระบบสมการที่มีตัวไม่รู้มากกว่าเงื่อนไขมาก
ลองดูเอง: อินพุตอะไรก็ได้ — ได้ 64 ตัวเสมอ
ลองพิมพ์ย่อหน้ายาว ช่องว่างเดียว หรือชื่อของคุณ ไม่ว่าขนาดจะเป็นอย่างไร ผลลัพธ์จะเป็น 64 ตัวอักษรฐานสิบหกเสมอ — และไม่มีข้อมูลใดที่บอกวิธีหาอินพุต
ลองย้อนกลับดู
ด้านล่างคือแฮช SHA-256 ของวลีสั้นๆ ลองหาว่าอินพุตคืออะไร ไม่มีกลอุบาย — วิธีเดียวที่ใช้ได้คือการเดา
ทำไมเรื่องนี้ถึงสำคัญกับ Bitcoin
ความไม่สามารถย้อนกลับของ SHA-256 ไม่ใช่แค่เชิงอรรถ — มันคือรากฐานที่ Bitcoin สร้างขึ้น
การขุด
นักขุดต้องหาส่วนหัวบล็อกที่แฮชขึ้นต้นด้วยเลขศูนย์จำนวนหนึ่ง เนื่องจากการแฮชไม่สามารถย้อนกลับได้ จึงไม่มีทางลัด — นักขุดต้องลองหลายพันล้านแบบต่อวินาที ความพยายาม brute force นั้นคือ "งาน" ใน Proof of Work
ความปลอดภัยของที่อยู่
กุญแจส่วนตัวของคุณถูกแฮชเพื่อสร้างที่อยู่สาธารณะ แม้ที่อยู่ของคุณจะมองเห็นได้บน blockchain แต่แฮชมั่นใจว่าไม่มีใครสามารถย้อนกลับไปหากุญแจส่วนตัวของคุณได้ — และเงินของคุณ
บทเรียนที่เกี่ยวข้อง
SHA-256 ทำงานยังไง?→