กุญแจสาธารณะและกุญแจส่วนตัวใน Bitcoin
กระเป๋าเงิน Bitcoin ของคุณคือตัวเลข ที่อยู่ของคุณคือจุดบนเส้นโค้ง ความสัมพันธ์ระหว่างทั้งสองคือประตูทางคณิตศาสตร์ทางเดียว — เปิดได้ง่าย แต่ย้อนกลับไม่ได้
···
ตัวเลข 64 หลักนั้นคือกุญแจส่วนตัว Bitcoin ใครก็ตามที่รู้ตัวเลขนี้สามารถลงนามธุรกรรมและใช้จ่ายเงินที่เกี่ยวข้องได้ ไม่มีใครสามารถหามันจากกุญแจสาธารณะได้ — แม้แต่คอมพิวเตอร์ทุกเครื่องบนโลกที่ทำงานนานกว่าอายุของจักรวาล
กุญแจส่วนตัวคืออะไร?
กุญแจส่วนตัวคือจำนวนเต็มสุ่มระหว่าง 1 ถึงตัวเลข 77 หลักที่เรียกว่า order ของกลุ่ม secp256k1 (n) ไม่มีอะไรมากกว่านั้น ไม่ต้องมีผู้ออกใบรับรอง ไม่ต้องลงทะเบียน — ใครก็ตามที่สร้างมันได้เป็นเจ้าของ
Bitcoin ใช้กุญแจ 256 บิต ขนาดเดียวกับแฮช SHA-256 มีกุญแจส่วนตัวที่ถูกต้องประมาณ 10⁷⁷ ตัว
สุ่ม
สร้างโดยอุปกรณ์ของคุณโดยใช้ entropy ของระบบปฏิบัติการ ไม่มีใครอื่นเห็นขั้นตอนนี้
ลับ
ไม่เคยส่งผ่านเครือข่าย เก็บไว้ในกระเป๋าเงินแบบเข้ารหัส สูญเสียมัน — สูญเสีย Bitcoin
256 บิต
เขียนเป็นอักขระ hex 64 ตัว หรือเข้ารหัสเป็น WIF (Wallet Import Format) สำหรับมนุษย์
สร้างกุญแจส่วนตัวจริงด้านล่าง แต่ละครั้งที่คลิกจะสร้างตัวเลขสุ่มแบบ cryptographic ที่เบราว์เซอร์ของคุณไม่เคยเห็นมาก่อน — และคำนวณกุญแจสาธารณะและที่อยู่ Bitcoin จากมัน
ตัวสร้างกุญแจ
secp256k1 · แบบสด
สร้างกุญแจใหม่ →
วิธีที่กุญแจสาธารณะถูกสร้างขึ้น
เส้นโค้ง secp256k1
Bitcoin ใช้เส้นโค้ง elliptic y² = x³ + 7 บน prime field F_p จุดบนเส้นโค้งนี้มีการคำนวณพิเศษ — คุณสามารถ "บวก" สองจุดเพื่อได้จุดที่สาม และผลลัพธ์จะเป็นจุดอื่นบนเส้นโค้งเดิมเสมอ
เส้นโค้งมีจุด generator พิเศษที่เรียกว่า G ซึ่งถูกกำหนดไว้ในโปรโตคอล Bitcoin กระเป๋าเงิน Bitcoin ทุกใบใช้ G เดียวกัน
p = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
G.x = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
G.y = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
n = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141การคูณจุด: ประตูทางเดียว
กำหนดกุญแจส่วนตัว k และ generator G กุญแจสาธารณะของคุณคือ: publicKey = k × G ซึ่งหมายถึงการบวก G กับตัวเองจำนวน k ครั้ง เมื่อ k ≈ 10⁷⁷ นั่นคือการบวกมากมาย — แต่อัลกอริทึม double-and-add ทำได้ใน ~256 ขั้นตอนเท่านั้น
ผลลัพธ์คือจุด (x, y) บนเส้นโค้ง เข้ารหัสเป็น 33 ไบต์ในรูปแบบ compressed: ไบต์ prefix (02 หรือ 03 ขึ้นอยู่กับว่า y เป็นเลขคู่หรือคี่) บวกกับ x coordinate 32 ไบต์
Steps for k = 3
k·G = (19, 4)
Private key
k (256 bits)
Public key
(x, y) point
🔒 Private key
k = ???
ทำไมย้อนกลับไม่ได้ (ECDLP)
การหาค่า k จากเพียง k×G เรียกว่า Elliptic Curve Discrete Logarithm Problem (ECDLP) ไม่มีอัลกอริทึมที่มีประสิทธิภาพสำหรับ secp256k1 การโจมตีที่ดีที่สุดที่รู้จัก — Pollard's rho — ต้องการ ~2¹²⁸ operations
ไปข้างหน้า: k × G → ~256 การดับเบิ้ล/บวกจุด → มิลลิวินาที
ย้อนกลับ: P → k → ~2¹²⁸ operations → เป็นไปไม่ได้ทางกายภาพลองหากุญแจส่วนตัว
ด้านล่างคือกุญแจสาธารณะของเส้นโค้งขนาดเล็ก คณิตศาสตร์เหมือนกันกับ secp256k1 — เพียงแต่ใช้ prime field ที่เล็กกว่ามาก เพื่อให้คุณลองทุกค่าได้จริงๆ
🎯 จุดกุญแจสาธารณะ — หากุญแจส่วนตัว k ที่สร้างจุดนี้
(0, 0)
Curve: y² = x³ + 7 (mod 43) · G = (6, 34)
การเดาของคุณสำหรับ k
จากกุญแจสาธารณะสู่ที่อยู่ Bitcoin
แฮชกุญแจสาธารณะสองครั้ง
ที่อยู่ Bitcoin ไม่ใช่กุญแจสาธารณะเอง — มันคือฟังก์ชันแฮชสองตัวที่ใช้ต่อเนื่องกัน: SHA-256 แล้วตามด้วย RIPEMD-160 ได้ address hash 20 ไบต์ (160 บิต)
ทำไมต้องแฮช? เพื่อย่อที่อยู่และเพิ่มชั้นความปลอดภัยอีกชั้น แม้ว่า elliptic curve cryptography จะถูกทำลายในอนาคต ผู้โจมตีก็ยังต้องทำลายฟังก์ชันแฮชสองตัวพร้อมกัน
ขั้น 1: SHA256(publicKey) → 32 ไบต์
ขั้น 2: RIPEMD160(ผลลัพธ์) → 20 ไบต์ (address hash)
ขั้น 3: เพิ่ม version byte (0x00 mainnet)
ขั้น 4: checksum = SHA256(SHA256(versioned))[0:4]
ขั้น 5: Base58Check(versioned + checksum) → ที่อยู่แบบอ่านได้ทำไมที่อยู่รับได้แต่พิสูจน์การเป็นเจ้าของไม่ได้
ใครก็สามารถส่ง Bitcoin ไปยังที่อยู่ของคุณได้ — พวกเขาแค่ต้องการ address hash 20 ไบต์ แต่เพื่อใช้จ่าย คุณต้องพิสูจน์ว่าคุณรู้กุญแจส่วนตัวที่สร้างกุญแจสาธารณะที่แฮชไปยังที่อยู่นั้น การพิสูจน์นั้นคือลายเซ็นดิจิทัล
ห่วงโซ่การสร้างทั้งหมด
Private key
random 256-bit
→ ×G →
secp256k1
Public key
33-byte point
→ SHA256+RIPEMD160 →
one-way
Address
Base58Check
ทุกขั้นตอนเป็นทางเดียว คุณสามารถแชร์ที่อยู่และกุญแจสาธารณะได้อย่างเปิดเผย กุญแจส่วนตัวยังคงเป็นความลับ — นั่นคือโมเดลความปลอดภัยทั้งหมด
ทำไมเรื่องนี้ถึงสำคัญกับ Bitcoin
Public-key cryptography คือเหตุผลที่ Bitcoin ไม่มีรหัสผ่าน ไม่มีบัญชี และไม่มีธนาคาร
ความเป็นเจ้าของ
Bitcoin ไม่มีบัญชี การเป็นเจ้าของ Bitcoin หมายถึงการรู้กุญแจส่วนตัว ไม่มีธนาคารสามารถอายัดมัน ไม่มีรัฐบาลยึดมันได้โดยไม่มีตัวเลขนั้น
ลายเซ็นดิจิทัล
เมื่อคุณใช้จ่าย Bitcoin คุณสร้างลายเซ็น ECDSA โดยใช้กุญแจส่วนตัว โนดตรวจสอบมันกับกุญแจสาธารณะ — พิสูจน์ว่าคุณอนุมัติธุรกรรมโดยไม่เปิดเผยกุญแจ
HD Wallet
กระเป๋าเงินสมัยใหม่สร้างคู่กุญแจหลายพันล้านคู่จาก master seed หนึ่งตัวโดยใช้ BIP32 วลีสำรองหนึ่งชุดปลดล็อกที่อยู่ไม่จำกัดทั้งหมดที่สร้างขึ้นอย่างกำหนดแน่นอน
ความเสี่ยงควอนตัม
ECDLP มีความเสี่ยงเชิงทฤษฎีต่อ Shor's algorithm บนคอมพิวเตอร์ควอนตัมในอนาคต ที่อยู่ Bitcoin ที่ยังไม่เคยใช้จ่าย (กุญแจสาธารณะยังไม่เปิดเผย) มีชั้นป้องกันแฮชเพิ่มเติม
บทเรียนที่เกี่ยวข้อง