🪙Bitcoin, explained
ระดับกลางการเข้ารหัสอ่าน 8 นาที

ทำไม SHA-256 ถึงย้อนกลับไม่ได้?

SHA-256 คือรากฐานความปลอดภัยของ Bitcoin การเข้าใจว่าทำไมมันถึงเป็นฟังก์ชันทางเดียว — ไม่ใช่แค่ยาก แต่เป็นไปไม่ได้ทางคณิตศาสตร์ที่จะย้อนกลับ — จะช่วยให้คุณเข้าใจ Bitcoin ได้อย่างแท้จริง

ประโยค "Hello, Bitcoin." — เข้ารหัสด้วย SHA-256

b94d27b9934d3e08a52e52d7da7dabfac484efe04294e576f2a97c2d552ea9a8

สตริง 64 ตัวอักษรนั้นเข้ารหัสประโยคข้างต้น คุณไม่สามารถกู้ประโยคต้นฉบับกลับมาได้ — ไม่ใช่แค่ยาก แต่เป็นไปไม่ได้ นี่คือเหตุผลทางคณิตศาสตร์

ฟังก์ชันแฮชคืออะไร?

ฟังก์ชันแฮชรับข้อมูลอินพุตอะไรก็ได้ — ตัวอักษรเดียว นิยายทั้งเล่ม หรือบล็อก Bitcoin ทั้งบล็อก — แล้วสร้างลายนิ้วมือความยาวคงที่ที่เรียกว่า ไดเจสต์ SHA-256 จะให้ผลลัพธ์ 256 บิตเสมอ ซึ่งเขียนเป็นเลขฐานสิบหกจำนวน 64 ตัวอักษร

คุณสมบัติสามอย่างที่กำหนดฟังก์ชันแฮชที่ดี:

01ผลลัพธ์แน่นอน "hello" จะแฮชออกมาเป็น 64 ตัวอักษรเดิมเสมอ ทุกครั้ง
02ความยาวคงที่ หนึ่งไบต์หรือหนึ่งกิกะไบต์ — ผลลัพธ์เป็น 64 ตัวอักษรเสมอ
03คำนวณได้รวดเร็ว การคำนวณแฮช SHA-256 ทำได้ง่าย แต่การย้อนกลับเป็นไปไม่ได้

ลองด้วยตัวเองด้านล่าง สังเกตว่าอินพุตอะไรก็ได้ — แม้แต่ข้อความว่าง — จะให้ผลลัพธ์ 64 ตัวอักษรเสมอ

⌨️ลองแฮชเองเลยSHA-256 · แบบสด
0 ตัวอักษร · 0 ไบต์
ผลลัพธ์ SHA-256 — 64 ตัวอักษรเสมอ
กำลังคำนวณ...

ทำไมถึงย้อนกลับไม่ได้

"ย้อนกลับไม่ได้" ไม่ใช่ข้อจำกัดทางปฏิบัติที่รอให้คอมพิวเตอร์เร็วขึ้น มันถูกฝังอยู่ในโครงสร้างทางคณิตศาสตร์ มีสามข้อโต้แย้งที่อธิบายว่าทำไม

1

การทำลายข้อมูล (หลักการรังนกพิราบ)

SHA-256 แมปอินพุตที่มีจำนวนอนันต์ไปยังเอาต์พุต 2²⁵⁶ รายการที่มีจำนวนจำกัด ตามหลักการรังนกพิราบ อินพุตจำนวนอนันต์จะให้แฮชเดียวกัน

เมื่อคุณเห็นแฮช คุณไม่สามารถรู้ได้ว่าอินพุตใดสร้างมันขึ้นมา คุณอาจหาพรีอิมเมจด้วยการลองแบบ brute force — แต่ไม่มีทางได้ต้นฉบับ ข้อมูลนั้นสูญหายไปแล้ว

2²⁵⁶ ≈ 10⁷⁷ — มากกว่าจำนวนอะตอมในจักรวาลที่มองเห็นได้โดยประมาณ แม้จะตรวจสอบแฮชหนึ่งรายการต่ออะตอมต่อวินาที การค้นหาแบบ brute force ก็เป็นไปไม่ได้ทางกายภาพ
2

เอฟเฟกต์หิมะถล่ม (ไม่มีทิศทางที่จะติดตาม)

เปลี่ยนตัวอักษรเดียว — พลิกบิตเดียว — แล้วบิตเอาต์พุตประมาณครึ่งหนึ่งจะเปลี่ยนไปอย่างดูเหมือนสุ่ม

ไม่มี "การเข้าใกล้" ทุกการเดาที่ผิดดูผิดเท่ากันหมด ต่างจากสมการตัวเลขที่คุณสามารถแก้แบบวนซ้ำ คุณไม่มีสัญญาณใดเลยในการนำทางการค้นหา

🌊เอฟเฟกต์หิมะถล่มแก้ไขอินพุตใดก็ได้
แฮช
································································
แฮช
································································
3

ไม่มีอินเวอร์สเชิงพีชคณิต

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 ใหม่สำหรับรอบถัดไป

🔬สำรวจการทำงานภายในตัวอย่าง 8 บิต · SHA-256 ของจริงใช้ 32 บิต
S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)

SHA-256 คำนวณ S0 = rotr(a,2) ^ rotr(a,13) ^ rotr(a,22) ตัวอย่าง 8 บิตนี้ใช้การหมุน 1, 3 และ 5 บิตเพื่อให้เห็นภาพได้ง่าย คลิกที่บิตเพื่อเปลี่ยนค่า

a
← คลิกเพื่อเปลี่ยนค่า
rotr(a, 1)
rotr(a, 3)
rotr(a, 5)
XOR ทั้งสามตัว ↓
ผลลัพธ์ S0

แสดงผลจำลอง (rotr 0/5)

0
1
2
3
4
5
6
7
ขั้นตอนที่ 0 จาก 5
ทำไมถึงย้อนกลับไม่ได้: การหมุนบิตเพียงครั้งเดียวนั้นย้อนกลับได้ — แค่หมุนกลับ แต่ SHA-256 นำการหมุนที่แตกต่างกันสามแบบมา XOR กัน เมื่อรวมกันด้วย XOR แล้ว คุณไม่สามารถบอกได้ว่าบิตใดมาจากตัวหมุนไหน การหาค่า a จาก S0 จึงต้องแก้ระบบสมการที่ซับซ้อน — ไม่มีทางลัดทางพีชคณิต

การบวกแบบโมดูลาร์ แต่ละครั้งทิ้งข้อมูล carry ไว้ แต่ละ XOR สามารถตอบสนองได้ด้วยคู่อินพุตสองแบบที่แตกต่างกัน หลังจาก 64 รอบ การสร้างอินพุตขึ้นใหม่เทียบเท่ากับการแก้ระบบสมการที่มีตัวไม่รู้มากกว่าเงื่อนไขมาก

ลองดูเอง: อินพุตอะไรก็ได้ — ได้ 64 ตัวเสมอ

ลองพิมพ์ย่อหน้ายาว ช่องว่างเดียว หรือชื่อของคุณ ไม่ว่าขนาดจะเป็นอย่างไร ผลลัพธ์จะเป็น 64 ตัวอักษรฐานสิบหกเสมอ — และไม่มีข้อมูลใดที่บอกวิธีหาอินพุต

⌨️ลองแฮชเองเลยSHA-256 · แบบสด
0 ตัวอักษร · 0 ไบต์
ผลลัพธ์ SHA-256 — 64 ตัวอักษรเสมอ
กำลังคำนวณ...

ลองย้อนกลับดู

ด้านล่างคือแฮช SHA-256 ของวลีสั้นๆ ลองหาว่าอินพุตคืออะไร ไม่มีกลอุบาย — วิธีเดียวที่ใช้ได้คือการเดา

🔍ท้าทาย: ย้อนกลับแฮชคุณหาอินพุตต้นฉบับได้ไหม?
🎯 แฮชเป้าหมาย — หาอินพุตที่สร้างแฮชนี้
································································
แม้จะตรงกัน 63 จาก 64 ตัวอักษรก็ยังผิดทั้งหมด นั่นคือความหมายของ "การต้านทานพรีอิมเมจ" — ฟังก์ชันแฮชเป็นทั้งหมดหรือไม่มีเลย

ทำไมเรื่องนี้ถึงสำคัญกับ Bitcoin

ความไม่สามารถย้อนกลับของ SHA-256 ไม่ใช่แค่เชิงอรรถ — มันคือรากฐานที่ Bitcoin สร้างขึ้น

⛏️

การขุด

นักขุดต้องหาส่วนหัวบล็อกที่แฮชขึ้นต้นด้วยเลขศูนย์จำนวนหนึ่ง เนื่องจากการแฮชไม่สามารถย้อนกลับได้ จึงไม่มีทางลัด — นักขุดต้องลองหลายพันล้านแบบต่อวินาที ความพยายาม brute force นั้นคือ "งาน" ใน Proof of Work

🔑

ความปลอดภัยของที่อยู่

กุญแจส่วนตัวของคุณถูกแฮชเพื่อสร้างที่อยู่สาธารณะ แม้ที่อยู่ของคุณจะมองเห็นได้บน blockchain แต่แฮชมั่นใจว่าไม่มีใครสามารถย้อนกลับไปหากุญแจส่วนตัวของคุณได้ — และเงินของคุณ

บล็อก Bitcoin ทุกบล็อกมีแฮช SHA-256 ของบล็อกก่อนหน้า ห่วงโซ่แฮชนี้ทำให้การเขียนประวัติใหม่เป็นไปไม่ได้ทางการคำนวณ — คุณจะต้องทำ proof-of-work ใหม่สำหรับทุกบล็อกที่ตามมา

บทเรียนที่เกี่ยวข้อง

SHA-256 ทำงานยังไง?