Digital Signature คืออะไร? Bitcoin พิสูจน์ว่าเป็นเจ้าของได้อย่างไร โดยไม่เปิดเผย Private Key
Digital Signature คืออะไร?
ถ้าผมบอกคุณว่า…
ผมสามารถพิสูจน์กับคนทั้งโลกได้ว่า
“ผมมี Private Key ของแท้”
โดยที่…
ผมไม่ต้องเอา Private Key ให้ใครดูเลยแม้แต่นิดเดียว
คุณจะเชื่อมั้ย? หรือคุณอาจถามว่า :
“แล้วกูจะรู้ได้ยังไงว่ามึงมีของจริง?” 😂
นี่แหละครับคือหนึ่งในความมหัศจรรย์ของ Cryptography ที่ Bitcoin ใช้
ในบทความก่อนหน้าเรื่อง Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้? เรารู้แล้วว่า Private Key ไม่ใช่ Password และ Bitcoin ก็ไม่ได้ถูกเก็บอยู่ใน Private Key
Private Key คือ Secret ที่สามารถนำมาใช้สร้างหลักฐานทาง Cryptography เพื่ออนุญาตให้เราทำการ Spend Bitcoin ตามเงื่อนไขที่กำหนดไว้ได้อย่างสบายใจ
ซึ่งอีหลักฐานที่ว่านี้คือสิ่งที่เรียกว่า :
Digital Signature
หรือลายเซ็นดิจิทัล
แต่ถ้าคุณกำลังจินตนาการถึงการเอาลายเซ็นของคุณไป Scan เป็นภาพ JPG แล้วเอาไปแปะลงบน Bitcoin Transaction…
ผิด! ไม่ใช่ครับ มันไม่ใช่แบบนั้น 😂
มันเจ๋งกว่านั้นเยอะ
Digital Signature คืออะไร?
เราลองเริ่มจากลายเซ็นธรรมดาก่อนก็ได้
สมมุติผมเขียนเช็คให้ Bob
ผมเขียนว่า :
จ่ายเงินให้ Bob 10,000 บาท
แล้วผมก็เซ็นชื่อด้านล่าง :
DJ Tar
ธนาคารอาจใช้ลายเซ็นนั้นเป็นส่วนหนึ่งในการตรวจสอบว่าเอกสารได้รับการอนุญาตจากผมหรือไม่ ?
แต่ถ้าลายเซ็นบนกระดาษนั้นมีปัญหาล่ะ ?
ถ้ามีคนถ่ายรูปมันล่ะ ?
ถ้ามีคน Copy มันล่ะ ?
ถ้ามีคนที่เก่งมากจนสามารถเขียนเลียนแบบลายเซ็นผมได้แบบเด๊ะๆล่ะ?
Bitcoin ต้องการอะไรที่แข็งแรงกว่านั้นมาก
ท้ายที่สุดแล้วเราต้องการระบบที่จะสามารถทำกระบวนการดังต่อไปนี้ได้ :
Private Key + ข้อมูลที่ต้องการ Sign
↓
สร้าง
Digital Signature
แล้วอีกฝ่ายสามารถใช้ข้อมูลที่เกี่ยวข้อง เช่น Public Key พร้อมกับข้อมูลที่ถูก Sign เพื่อตรวจสอบว่า Signature นั้น Valid หรือไม่
โดยที่…
Private Key ไม่ต้องถูกเปิดเผย
นี่คือ Mental Model ที่สำคัญที่สุดของบทความนี้
มันไม่ใช่การส่ง Private Key ไปให้ Bitcoin Network!!!
มือใหม่บางคนอาจจินตนาการว่าเวลาส่ง Bitcoin:
เปิด Wallet → ส่ง Private Key ไป → Node Server ตรวจสอบ → Transaction ผ่าน
ถ้า Bitcoin ทำแบบนั้นจริง…
ระบบคงพังภายในห้านาที ไม่น่ารอดนะอีดอก 😂
เพราะ Private Key คือ Secret
เมื่อ Secret ถูกเปิดเผย…
มันก็คือ ไม่ Secret อีกต่อไป
สิ่งที่ Wallet ทำจริง ๆ นั้นมีดังนี้ ผมจะพูดให้เห็นภาพแบบง่ายๆเลยก็คือ :
Transaction Data จะถูกเอาไปรวมกับ
Private Key
↓
Signing
↓
Digital Signature
จากนั้นข้อมูลที่จำเป็นสำหรับการตรวจสอบ Transaction ก็จะถูกส่งออกไป
แต่ :
Private Key ยังคงเป็นความลับ
Node Server ไม่จำเป็นต้องถามว่า :
“ไหนบอกมาซิว่า Private Key ของคุณคืออะไร?”
มันถามในเชิงคณิตศาสตร์ประมาณว่า :
“Signature นี้ Valid สำหรับข้อมูลนั้นมั้ย? แล้วไอ่เจ้า Key นี้มันเกี่ยวข้องหรือไม่?”
นี่คือความแตกต่างมหาศาล
จาก Private Key มาถึง Digital Signature
ลองต่อภาพจาก Blog #3 กันนิดนึงนะครับ
ตอนนี้เรามี :
Private Key
ที่เป็น Secret
จากที่มันเราสามารถ derive ข้อมูล Public ที่เกี่ยวข้องให้เราได้
นั่นก็คือ :
Public Key
ทีนี้สมมุติว่าเราต้องการ Spend UTXO
Wallet Application ของเราก็จะทำการสร้าง Transaction ขึ้นมา
แล้วใช้ Private Key ในกระบวนการ Signing
Mental Model แบบง่ายมีดังนี้ :
Private Key ประกอบกับ
Transaction Data
↓
Signature Algorithm
↓
Digital Signature
จากนั้นให้เราไปดูฝั่งที่จะ Verify :
Public Key ประกอบกับ
Transaction Data แล้วก็ประกอบกับ
Digital Signature
↓
Verification
↓
VALID ✅
หรือ
INVALID ❌
และนี่คือคำตอบแรกของคำถามว่า Digital Signature คืออะไร
มันคือหลักฐานทาง Cryptography ที่สามารถถูกตรวจสอบได้ โดยไม่จำเป็นต้องเปิดเผย Secret Key ที่ใช้สร้างมันเลยแม้แต่นิดเดียว
แล้ว Digital Signature กำลัง Sign อะไรกันแน่?
คำถามนี้สำคัญมาก
เพราะเราไม่ได้ Sign คำว่า:
“ผมคือ Satoshi”
โดยปกติแล้ว Bitcoin ไม่สนว่าผมชื่ออะไร 😂
และโดยทั่วไปเราก็ไม่ได้ Sign แค่ :
“ส่ง 100,000 sats ให้ Bob”
ที่เป็นแบบข้อความธรรมดา
กล่าวคือในระบบ Bitcoin นั้น กระบวนการ Signing จะสร้างข้อมูลที่ต้อง Sign จาก Transaction ตามกฎของ Signature Hash หรือ sighash ที่เกี่ยวข้องนั่นเอง
พูดง่าย ๆ คือ Wallet Application สร้าง Transaction เปล่าๆขึ้นมา แล้วคำนวณข้อมูลตามกฎของ Bitcoin เพื่อให้ได้ Signature ไปผูกอยู่กับ Transaction ที่กำลังจะทำการโอน
ดังนั้นถ้ามีใครเอา Transaction ของเราที่ยังไม่ได้ประกาศไปยัง Node Server แล้วเอาไปแก้ในส่วนที่ Signature เช่นเปลี่ยนแปลง Address ปลายทางหรือเปลี่ยนจำนวนเงิน…
Signature เดิมก็จะไม่ผ่านการ Verify สำหรับข้อมูลใหม่ที่ถูกแก้
นี่คือคุณสมบัติที่สำคัญมาก
ลองส่ง Bitcoin 100,000 sats ให้ Bob
สมมุติเรามี :
UTXO ใบนึงมูลค่า = 150,000 sats
จากนั้นเราต้องการส่งให้ :
Bob → 100,000 sats
Wallet Application อาจสร้าง Transaction ดังนี้ :
INPUT
UTXO เดิม → 150,000 sats
OUTPUT ลำดับที่ #0
Bob → 100,000 sats
OUTPUT ลำดับที่ #1
Change → 49,500 sats
FEE หรือค่าธรรมเนียมของพวก Miner
500 sats
ตอนนี้ Transaction ของเราก็มีโครงสร้างขึ้นมาแล้ว
แต่มันยังมีคำถามสุดท้ายว่าว่า :
ใครอนุญาตให้ Spend UTXO 150,000 sats ก้อนนี้ ?
Wallet จึงใช้ Key ที่เกี่ยวข้องในการสร้าง Signature
จากนั้น Node Server จะสามารถตรวจสอบได้ว่า Spending Condition ของ Input นั้นได้รับการ satisfy หรือไม่ ?
และถ้ามันถูกต้อง :
VALID ✅
ถ้าไม่ถูกต้อง:
INVALID ❌
นี่คือจุดที่ Blog ทั้งสามก่อนหน้าเริ่มต่อกันเป็นภาพเดียว
Bitcoin Transaction
↓
ใช้ UTXO เป็น Input
↓
UTXO มี Spending Condition
↓
Private Key ใช้สร้าง Signature ที่จำเป็น
↓
Digital Signature
↓
Node Server
↓
VERIFY
ตอนนี้เราไม่ได้เรียนศัพท์ Bitcoin แยกกันอีกแล้ว
เราเริ่มเห็น เครื่องจักรทั้งตัว เข้ามาประกอบกันแล้วทำงานร่วมกันเป็นภาพใหญ่
ถ้ามีคนแก้ Transaction หลังจากผม Sign แล้วล่ะ?
นี่คือส่วนที่ Digital Signature เริ่มโชว์ของลับ
ผมสมมุติให้ Transaction เดิมเลยคือ :
ส่ง Bob 100,000 sats
ทีนี้ผม Sign เรียบร้อยละอ่ะ
แล้ว Mallory ดัก Transaction ของผมกลางทางและพยายามแก้ให้กลายเป็น :
ส่ง Mallory 100,000 sats
ซึ่งสิ่งที่ Mallory กระทำนั้นสามารถทำได้นะ แต่…
ข้อมูลที่ใช้ตรวจสอบก็ต้องเปลี่ยนด้วย
ดังนั้น Signature เดิมที่สร้างขึ้นสำหรับ Transaction ก่อนหน้าที่เป็นของ Bob :
จะไม่ Valid สำหรับ Transaction ที่ Mallory แก้ไขไป
Mallory จึงไม่สามารถแค่ Copy Signature เดิมของผม แล้วเอาไปแปะใส่ใน Transaction ได้ตามใจชอบ
ถ้า Mallory ต้องการ Signature ที่ Valid สำหรับ Transaction ของ Bob นั้น…
เขาต้องมีความสามารถในการสร้าง Signature ที่ถูกต้อง ซึ่งก็แปลว่า Mallory จะต้องมี Private Key ของผมเสียก่อน
และนั่นคือสิ่งที่ Private Key มีบทบาทมากในการ Protect การขโมยในสิ่งที่ตนเองไม่ได้เป็นเจ้าของ
นี่ไม่ใช่แค่ “ลายเซ็น” แต่มันผูกเข้ากับ Message
ตรงนี้ช่วยให้เราเข้าใจว่า Digital Signature คืออะไร ได้ชัดขึ้น
ในโลกของความเป็นจริงนั้น ลายเซ็นบนกระดาษของคุณมักมีหน้าตาคล้ายเดิมทุกครั้ง ถูกป่ะ ?
แต่ Digital Signature ไม่ควรถูกคิดว่าเป็นรูปภาพประจำตัวที่เอาไปแปะบนเอกสารทุกฉบับ
ซึ่ง Digital Signature จะเปลี่ยนไปทุกครั้ง มันไม่เคยเหมือนเดิมเลย
มันถูกสร้างขึ้นในบริบทของ :
Key + Message
ในกรณี Bitcoin ตัว Message ที่ใช้ในการ Signing นั่นก็คือข้อมูล Transaction ตามกฎของ sighash
ดังนั้น Signature สำหรับ Transaction A ไม่ได้หมายความว่าเราสามารถยกมันไปใช้กับ Transaction B ได้ตามใจชอบ
นี่คือเหตุผลที่ Digital Signature มีพลังมากกว่าการ Scan ลายเซ็นของเราลง PDF เยอะมาก
แล้ว Node Server Verify ได้ยังไง ถ้าไม่รู้ Private Key?
นี่คือคำถามที่ผมชอบที่สุดของบทความนี้
Node Server มีข้อมูลที่จำเป็นสำหรับการ Verification ตาม Spending Condition
แน่นอนว่ามันมี Transaction
แน่นอนว่ามันมี Signature
และขั้นตอนในการโอนเงินออกนั้นมันก็มี Public Key หรือข้อมูลที่ทำให้ตรวจสอบเงื่อนไขของการ Lock เงิน
จากนั้นมันใช้กฎทาง Cryptography ทำการตรวจสอบ :
Signature ถูกต้องหรือไม่?
สิ่งที่น่าทึ่งคือ :
Node Server สามารถตรวจสอบจนได้คำตอบว่า :
YES
หรือ
NO
โดยที่มันไม่จำเป็นต้องรู้ Private Key เลยแม้แต่น้อย
นี่คือแนวคิดสำคัญของ Public-Key Cryptography หรือศัพท์ทางเทคนิคเรียกว่า Asymmetric Cryptography
ในกรณีของ Digital Signature เราไม่ได้เอาข้อมูลไป “เข้ารหัสด้วย Private Key แล้วถอดรหัสด้วย Public Key”
แต่เราใช้ Private Key เพื่อสร้าง Signature จากข้อมูลที่เราต้องการจะ Sign
แล้วใช้ Public Key เพื่อตรวจสอบทางคณิตศาสตร์ว่า Signature นั้นถูกต้องหรือไม่
ฉะนั้น Private Key → SIGN
และ Public Key → VERIFY
นี่คือความสามารถสองด้านที่แตกต่างกันอย่างชัดเจน
มันเหมือนกับการเข้าอีกทางแล้วออกอีกทางนึงอ่ะ
เรามีความสามารถสองด้านที่ต่างกันดังนี้ :
Signing
ต้องใช้ Secret ที่เป็น Private Key
Verification
สามารถทำได้ด้วยข้อมูล Public Key ที่เข้าคู่กับ Private Key ตัวนั้น
นี่ทำให้ Bitcoin สามารถกระจายการตรวจสอบไปยัง Node Server ทั่วโลกได้
โดยไม่ต้องกระจาย Secret Private Key ของเราไปทั่วโลกรับรู้
มันเจ๋งป๊ะล่าาาาาาาาา
Bitcoin ไม่ต้องเชื่อว่าคุณเป็นคนดี
ลองคิดดูสิครับว่าระบบธนาคารทำงานอย่างไร ?
ธนาคารจำเป็นต้องรู้ว่า :
คุณเป็นใคร ?
ชื่ออะไร ?
Account ไหนเป็นของคุณ ?
Credential ถูกต้องไหม ?
แล้วระบบ Server ส่วนกลางของธนาคารจึงอนุญาตให้ทำ Transaction
แต่ Bitcoin มี Philosophy ที่ต่างออกไปเป็นอย่างมาก
Node Server ไม่จำเป็นต้องรู้ว่า :
“คนนี้คือ คุณจอย ใช่ไหม?”
มันไม่สนว่าผมเป็นคนขายเบียร์เถื่อน ?
มันไม่สนว่าผมใส่เสื้อสีอะไร ?
มันไม่สนว่าผมกำลังนั่งอยู่ประเทศไหน ?
มันสนใจแค่ว่า :
Transaction ที่ผมสร้างนั้นมัน Follow ตาม Consensus Rules หรือไม่?
และในส่วนของ Signature :
Cryptographic Signature ที่ผมสร้างมานั้นมันผ่านการตรวจสอบหรือไม่?
ถ้าสิ่งที่ผมสร้างมัน Valid ก็คือ Valid
ถ้าสิ่งที่ผมสร้างมัน Invalid ก็คือ Invalid
Same rules for everyone ไม่มีการเลือกปฏิบัติ.
นี่คือความหมายที่ลึกซึ้งของ :
Don’t trust. Verify.
แล้ว ECDSA คืออะไร?
ตอนนี้เราต้องลงลึกอีกหนึ่งชั้น
ถ้าคุณอ่านบทความ Bitcoin รุ่นเก่า คุณจะเห็นคำว่า:
ECDSA
หรือ:
Elliptic Curve Digital Signature Algorithm
Bitcoin แอบใช้กระบวนการ Elliptic Curve Cryptography บน curve ที่มีชื่อว่า :
secp256k1
และ ECDSA ถูกใช้มาอย่างยาวนานในการสร้างและตรวจสอบ Signature ในระบบ Bitcoin
ดังนั้นคุณอาจเห็นคำอธิบายบนอินเทอร์เน็ตว่า :
Bitcoin uses ECDSA signatures.
ประโยคนี้มีพื้นฐานถูกต้องในบริบท Bitcoin แบบดั้งเดิม…
แต่วันนี้มัน ไม่ครบแล้ว
เพราะ Bitcoin กระบวนการ Sign อีกตัวหนึ่งที่มีชื่อว่า
Schnorr Signatures
Schnorr Signature เข้ามาในระบบ Bitcoin ตอนไหน?
เมื่อ Bitcoin เปิดใช้งานและได้รับการอัปเกรดขึ้นเป็น Taproot ในปี 2021 เราได้มีความสามารถในการใช้งาน Schnorr Signatures ตามมาตรฐาน BIP340 สำหรับ Taproot ไปโดยปริยาย
ดังนั้นใน Bitcoin ปัจจุบัน คุณควรรู้จักอย่างน้อยสองชื่อนั่นก็คือ :
ECDSA
ใช้กับรูปแบบการ Spend แบบดั้งเดิมหลายประเภท
และอีกอันนึงชื่อว่า
Schnorr
ใช้ในกระเป๋า Wallet ประเภท Taproot
แน่นอนว่าทั้งสองนั้นเกี่ยวข้องกับ Digital Signature
แต่มีคุณสมบัติทางคณิตศาสตร์และการใช้งานที่แตกต่างกันออกไป
เราไม่จำเป็นต้องเปิดสมการทั้งหมดในบทความนี้
ไม่งั้นจาก Blog จะกลายเป็นวิชา Cryptography 101 แล้วคนปิดเว็บหนีหมด 😂
สิ่งที่อยากให้จำคือ :
Bitcoin Digital Signature ไม่ได้หมายถึง ECDSA อย่างเดียวอีกต่อไปแล้วนะจ๊ะ
ทำไม Bitcoin ถึงเพิ่ม Schnorr?
Schnorr นั้นมีคุณสมบัติทางคณิตศาสตร์ที่น่าสนใจหลายอย่าง โดยเฉพาะ linearity
คุณสมบัติเหล่านี้เปิดทางให้การออกแบบระบบ Signature นั้นมีประสิทธิภาพและยืดหยุ่นมากขึ้น เช่นการรวม Key หรือการรวม Signature ในบาง Protocol
และในบริบทของ Taproot มันช่วยให้ Bitcoin สามารถสร้าง Spending Policies ที่มีความสามารถสูงขึ้นได้อย่างสบายๆ พร้อมกับได้รับประโยชน์ด้าน efficiency และ privacy ในบางกรณีอีกด้วย
แต่ถ้าคุณใช้ Address แบบ:
bc1p...
คุณกำลังก้าวเข้าสู่โลกของ Taproot นะจ๊ะ
และตรงนั้น Schnorr จะเริ่มเข้ามีบทบาทละ
และนี่คือ Rabbit Hole อีกหลุมนะครับบอกก่อนเลย 😂
Digital Signature กับ Bitcoin Address มันไม่ใช่สิ่งเดียวกันนะ
ตรงนี้อย่าสับสนนะครับ
ตอนนี้เรามี :
Private Key
Public Key
Bitcoin Address
Digital Signature
แน่นอนว่าทั้งสี่อย่างนี้มันเกี่ยวข้องกัน
แต่มันไม่ใช่สิ่งเดียวกัน
Mental Model แบบง่าย :
Private Key
Secret ที่ต้องปกป้อง
↓
Public Key
ข้อมูล Public ที่ derive จาก Private Key
↓
Address / Script
มีหน้าที่ในการกำหนดปลายทางที่เงินนั้นจะวิ่งไปและ Spending Condition ตามรูปแบบที่เราจะใช้
และตรงขั้นตอนของการ Spend เราจะต้องมี:
Private Key + Transaction Data
↓
Digital Signature
↓
Node Server Verification
Address จึงไม่ได้ทำหน้าที่ในการ “Sign” Transaction
และ Signature ก็ไม่ใช่ Address ซะด้วย
แยกหน้าที่พวกมันออกจากกันให้ชัด แล้ว Bitcoin จะเข้าใจง่ายขึ้นเยอะ
Digital Signature พิสูจน์ว่าเรา “เป็นเจ้าของ Bitcoin” หรือไม่?
ตรงนี้เราต้องระวังเรื่องของการใช้ภาษาอีกครั้ง
เพื่อให้อธิบายง่าย เรามักพูดว่า :
“Signature พิสูจน์ว่าคุณเป็นเจ้าของ Bitcoin”
ซึ่งแน่นอนว่าเข้าใจง่าย
แต่ในระดับ Protocol คำว่า :
Owner
ไม่ได้ถูกเขียนอยู่บน Blockchain นะครับ
แล้วระบบของ Bitcoin ก็ไม่ได้มี Database ที่ระบุว่า:
UTXO หมายเลข #123 → Owner: คือ DJ Tar
สิ่งที่มีคือ Output ที่รวมเข้ากับ :
Spending Condition
และเมื่อเวลาที่เราจะ Spend เราจะต้อง Provide ข้อมูล ที่จะทำให้เงื่อนไขของการโอนนั้นสำเร็จ
และ Signature ก็จะเป็นส่วนสำคัญของกระบวนการนี้
ดังนั้นถ้าจะพูดให้แม่นกว่านี้ก็คือ :
Digital Signature มีส่วนช่วยในการพิสูจน์ว่าคนที่สร้าง Transaction นั้น สามารถให้ Authorization ในการโอนครั้งนั้นได้หรือไม่
ระบบ Bitcoin ไม่ได้พิสูจน์ชื่อ
ระบบ Bitcoin ไม่ได้พิสูจน์สัญชาติ
ระบบ Bitcoin ไม่ได้พิสูจน์กรรมสิทธิ์ตามกฎหมาย
แต่ระบบ Bitcoin มันพิสูจน์ในสิ่งที่ Protocol ต้องการ
และนั่นคือความแตกต่างที่สำคัญมาก
แล้ว Multisig ล่ะ?
ตอนนี้สมมุติว่าเราไม่ต้องการให้ Private Key เพียงดอกเดียวสามารถ Spend Bitcoin ได้
เราอาจสร้างเงื่อนไขประมาณว่า :
ต้องมี Signature อย่างน้อย 2 จาก 3 Keys
เช่น:
Key A
Key B
Key C
และ Transaction ของเรานั้นต้องการ :
2-of-3 Multisig ซึ่งนั่นหมายถึง เอา 2 ใน 3 Key มาไขได้
ดังนั้นถ้า Key A หาย…
เรายังอาจใช้:
Key B + Key C
เพื่อ satisfy policy สำหรับ Transaction ได้
นี่แสดงให้เห็นอีกครั้งว่าระบบ Bitcoin ไม่ได้คิดง่าย ๆ ว่า :
UTXO = Private Key หนึ่งดอก
สิ่งที่สำคัญจริงคือ :
Spending Condition
Signature เป็นหนึ่งในเครื่องมือสำคัญที่ใช้ตอบสนองเงื่อนไขเหล่านั้น
Digital Signature ป้องกันการขโมย Bitcoin ได้ 100% ไหม?
คำตอบก็คือ ไม่!!!
Cryptography อาจแข็งแรงมาก
แต่คนยังเป็นคน มนุษย์ก็ยังเป็นมนุษย์ 😂
Digital Signature ไม่ได้ช่วยคุณถ้า :
Private Key ถูกขโมย
Seed Phrase ถูกถ่ายรูป หรือบางทีคุณตั้งใจ Upload Seed ขึ้นไปบน Cloud
คุณ Sign Transaction ผิดตัว
Hardware Wallet ถูกใช้งานอย่างไม่ปลอดภัย
คุณโดนหลอกให้อนุมัติสิ่งที่ไม่ตั้งใจ
หรือ Software ที่ใช้ Signing ถูกโจมตี
ดังนั้น Security ของ Bitcoin ไม่ได้จบที่ :
“Signature Algorithm แข็งแรงไหม?”
แต่มันยังรวมถึง :
Key Generation
Key Storage
การ Backup
Transaction Verification
Device Security
Operational Security
และพฤติกรรมของเราเอง
Cryptography สามารถป้องกันโจทย์ทางคณิตศาสตร์ได้
แต่…
มันป้องกันคุณจากการเอา Seed Phrase ไปส่งให้ Scammer ไม่ได้ 😂
Hardware Wallet ทำอะไรตอนคุณกด Confirm?
ทีนี้คำว่า Hardware Wallet จาก Blog #3 จะเริ่มมีความหมายขึ้นมา
สมมุติว่า Software ของ Hardware Wallet กำลังเตรียม Transaction ให้คุณ
จากนั้น Hardware Wallet ก็รับข้อมูลเข้ามา
แล้วมันก็แสดงรายละเอียด Transaction ให้คุณตรวจสอบบนหน้าจอของอุปกรณ์
แล้วทันทีที่คุณกด :
CONFIRM
ตัวอุปกรณ์ Hardware Wallet จึงใช้ Key ที่อยู่ภายใน Secure Environment เพื่อทำการ Signing
สิ่งที่ออกจากอุปกรณ์คือข้อมูล Signature ที่จำเป็นสำหรับ Transaction นั้นๆ เท่านั้นเอง
ซึ่งตัว Hardware Wallet มันไม่ได้ส่ง Private Key ออกมาให้ Computer ซักหน่อย
นี่คือหนึ่งในเหตุผลหลักที่ Hardware Wallet มีประโยชน์กับเรา
มันพยายามสร้าง Boundary ระหว่างตัวเรากับ Computer :
สิ่งที่เรียกว่า Private Key อยู่ด้านในอุปกรณ์ Hardware Wallet
Host Computer อยู่ด้านนอก และจะไม่มีทางได้ยุ่งเกี่ยวกับ Private Key ของเราเป็นอันขาด
แน่นอนว่า Hardware Wallet แต่ละรุ่นก็จะมี Security Architecture แตกต่างกันไป
แต่ Mental Model นี้สำคัญมาก ต้องท่องเอาไว้
แล้ว Signature ถูกเก็บไว้ที่ไหน?
เมื่อ Transaction ถูก Broadcast และเข้า Blockchain แล้ว ข้อมูลที่เกี่ยวข้องกับการ Spend รวมถึง Signature/Witness ตามรูปแบบ Transaction จะกลายเป็นส่วนหนึ่งของข้อมูลที่ Node Server ใช้ในการ Validate การโอนของคุณ
นั่นหมายความว่า…
คนอื่นๆบนโลกหล้าสามารถเห็นข้อมูล Public ที่ใช้ในการตรวจสอบ Transaction ได้
แต่สิ่งที่พวกเขาไม่ควรได้เห็นก็คือ :
Private Key ของคุณ
นี่คือคุณสมบัติพื้นฐานที่ระบบ Signature ต้องการให้มันเป็น
เราสามารถเปิดเผย Proof ของ Transaction ได้
โดยไม่เปิดเผย Secret Private Key
เจ๋งมั้ย ?
แล้วทำไมคนอื่นเอา Signature ของเราไปใช้ไม่ได้?
คำตอบสั้น ๆ คือ :
เพราะ Signature ถูกสร้างขึ้นด้วยข้อมูลตามที่กำหนดตามกฎของการ Signing
ถ้าเอา Signature ไปใช้กับ Message อื่นๆ :
มันจะ Verification ไม่ผ่าน
นี่คือเหตุผลที่การผูก Signature เข้ากับ Transaction Data นั้นสำคัญมากๆ
อย่างไรก็ตาม Bitcoin มีรายละเอียดเรื่อง SIGHASH flags ที่กำหนดว่าส่วนใดของ Transaction ที่ถูก commit โดย Signature ไว้บ้าง
หากคุณเริ่มคุ้นเคยและลงลึกไปกับ Bitcoin Transaction คุณอาจจะได้เห็นสิ่งเหล่านี้ :
SIGHASH_ALL
SIGHASH_NONE
SIGHASH_SINGLE
และ modifier อย่าง :
ANYONECANPAY
นี่เป็นเรื่องเทคนิคที่ Deep มากขึ้นอีกระดับ
แต่ถ้าคุณเคยสงสัยว่า :
“Signature กำลัง Sign ส่วนไหนของ Transaction?”
คำตอบก็คือ :
มันขึ้นอยู่กับกฎของ sighash ที่เราใช้
และนี่อาจเป็นบทความระดับ Rabbit Hole ของเราในอนาคต ^_^
Digital Signature คืออะไร ในมุมที่สำคัญที่สุด?
ถ้าผมต้องลบทั้งบทความแล้วเหลือแค่หนึ่งภาพในหัว…
ผมอยากให้คุณจำภาพนี้ :
ฝั่ง SIGN
Private Key ประกอบเข้ากับ
Transaction Data
↓
Signature Algorithm
↓
Digital Signature
แล้วทางฝั่งของการ :
ฝั่ง VERIFY
Public Key ประกอบเข้ากับ
Transaction Data และก็จะต้องมี
Digital Signature
↓
Verification
↓
VALID ✅ / INVALID ❌
ซึ่ง Private Key นั้นอยู่ฝั่ง :
SIGN
แต่ไม่จำเป็นต้องถูกเปิดเผยให้ฝั่ง :
VERIFY
นี่คือหัวใจของคำถามว่า Digital Signature คืออะไร
จาก Bitcoin Transaction ถึง Digital Signature
ตอนนี้ Blog ทั้งสี่ของเราก็เชื่องโยงกันหมดแล้ว
ซึ่งเราเริ่มจาก :
Bitcoin Transaction
แล้วพบว่า Transaction ต้องมี Input
↓
Input อ้างถึง :
UTXO
แล้วเราถามว่า :
ใครมีสิทธิ Spend UTXO?
↓
เราเจอเข้ากับ :
Private Key
แล้วเราถามต่อ :
ถ้าไม่เปิดเผย Private Key แล้ว Network รู้ได้อย่างไรว่าเรามีสิทธิ?
↓
คำตอบคือ :
Digital Signature
แล้วคำถามถัดไปก็โผล่ขึ้นมาทันที…
ใครเป็นคนตรวจสอบ Signature?
ใครตรวจสอบว่า Input มีอยู่จริง?
ใครตรวจสอบว่า UTXO ยังไม่ถูก Spend?
ใครตรวจสอบว่า Transaction ไม่สร้าง Bitcoin ออกมาจากอากาศ?
ใครตรวจสอบกฎทั้งหมดนี้?
คำตอบคือ…
Bitcoin Node Server
และนี่คือ Rabbit Hole ต่อไปของเราครับ ^_^
สรุป Digital Signature คืออะไร?
Digital Signature คืออะไร?
มันคือกลไกทาง Cryptography ที่ช่วยให้ผู้ถือ Secret Key สามารถสร้าง Signature สำหรับข้อมูลหนึ่งชุด และส่งไปให้ผู้อื่นตรวจสอบ Signature นั้นด้วยข้อมูล Public Key โดยไม่ต้องเปิดเผย Private Key
ใน Bitcoin มันเป็นส่วนสำคัญของการ Authorization การ Spend UTXO
มันทำให้ :
Private Key ยังคงเป็น Secret
แต่ :
Node ยังสามารถ Verify ได้
มันทำให้เราไม่ต้องส่ง Password ไปหา Bitcoin Network เลยแม้แต่น้อย
มันไม่ต้องมีบริษัทกลางมารับรองว่าเราเป็นใคร ?
และไม่ต้องให้คนทั้งโลกเชื่อคำพูดของเรา
เราให้พวกเขา :
Proof
แล้วพวกเขาก็ :
Verify
นี่คือหัวใจของ Bitcoin ครับ
Don’t trust. Verify.
คำถามที่พบบ่อยเกี่ยวกับ Digital Signature
Digital Signature คืออะไร?
Digital Signature คือลายเซ็นทาง Cryptography ที่สร้างจาก Secret Key และข้อมูลที่ต้องการ Sign โดยสามารถถูกตรวจสอบด้วยข้อมูล Public Key โดยไม่ต้องเปิดเผย Private Key
Bitcoin ส่ง Private Key ไปให้ Node ตรวจสอบหรือไม่?
ไม่!!! Private Key ควรเป็น Secret แล้วใช้ Key ในกระบวนการ Signing จากนั้น Node ก็ทำการตรวจสอบ Signature และเงื่อนไขที่เกี่ยวข้องโดยไม่ต้องเห็น Private Key เลยแม้แต่น้อย
Bitcoin ใช้ ECDSA หรือ Schnorr?
Bitcoin ใช้ทั้งสองแบบในบริบทที่แตกต่างกัน ECDSA ถูกใช้กับรูปแบบการ Spend แบบดั้งเดิม ส่วน Taproot ใช้ Schnorr Signatures ตาม BIP340 ซึ่งเป็นกระเป๋ารูปแบบใหม่
Digital Signature กับ Bitcoin Address เหมือนกันไหม?
ไม่เหมือนกัน
Address ใช้เป็นส่วนหนึ่งของระบบรับ Bitcoin/แสดง Spending Destination ตามรูปแบบที่เกี่ยวข้อง ส่วน Digital Signature ถูกสร้างขึ้นในกระบวนการ Authorization เพื่อใช้ในการ Spend
ถ้ามีคน Copy Digital Signature ของเรา เขาสามารถขโมย Bitcoin ได้ไหม?
Signature ถูกผูกไว้กับข้อมูล Transaction ที่ถูก Sign ตามกฎของ sighash เราจึงไม่สามารถนำ Signature เดิมไปใช้กับ Transaction อื่นที่แตกต่างออกไปได้ตามใจ
Hardware Wallet ทำหน้าที่อะไรกับ Digital Signature?
หนึ่งในหน้าที่สำคัญของ Hardware Wallet คือเก็บ Key แยกจาก Host Computer และใช้ Key ภายในอุปกรณ์เพื่อทำการ Signing Transaction โดยพยายามไม่ให้ Private Key ต้องเล็ดลอดออกจากอุปกรณ์
Digital Signature พิสูจน์ว่าเราเป็นเจ้าของ Bitcoin ตามกฎหมายหรือไม่?
ไม่!!! Signature เป็นหลักฐานทาง Cryptography ที่เกี่ยวข้องกับการ satisfy Spending Condition ของ Bitcoin ไม่ใช่เอกสารพิสูจน์กรรมสิทธิ์ตามกฎหมายหรือการยืนยันตัวตนของบุคคล