Digital Signature คืออะไร Bitcoin พิสูจน์การ Spend โดยไม่เปิดเผย Private Key

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 ไม่ใช่เอกสารพิสูจน์กรรมสิทธิ์ตามกฎหมายหรือการยืนยันตัวตนของบุคคล

Similar Posts

  • UTXO คืออะไร? ทำไม Bitcoin ถึงไม่มี Balance อยู่จริง

    UTXO คืออะไร? ถ้าคุณเพิ่งเริ่มศึกษา Bitcoin คำนี้อาจฟังดูเหมือนศัพท์เทคนิคที่เข้าใจยาก แต่จริง ๆ แล้ว UTXO คือหนึ่งในแนวคิดพื้นฐานที่สุดของ Bitcoin และถ้าคุณเข้าใจมัน คุณจะเริ่มเห็นทันทีว่า Bitcoin ทำงานแตกต่างจากบัญชีธนาคารที่เราใช้กันทุกวันอย่างไร ถ้าผมถามคุณว่า… “ตอนนี้คุณมีเงินอยู่ในบัญชีธนาคารเท่าไหร่?” คุณอาจเปิด Mobile Banking ขึ้นมา แล้วตอบว่า ฉันมีเงินอยู่ 50,000 บาท ก็โอเค๊ นั่นมันง่ายมาก เพราะระบบธนาคารทำให้เราคุ้นเคยกับสิ่งที่เรียกว่า Account Base Balance แน่นอนว่าธนาคารมีบัญชีของคุณที่เป็นระบบฐานข้อมูล Databaseและในบัญชีนั้นมีตัวเลขเขียนเอาไว้ว่า นาย A มีเงิน = 50,000 บาท ถ้าคุณโอนให้ Bob 10,000 บาท ระบบก็ทำหน้าที่หักลบตัวเลขออกประมาณว่า: นาย A เหลือยอดเงินในบัญชีคือ : 50,000 → 40,000 บาท และนาย Bob ก็จะมียอดเงินเพิ่มขึ้นเป็น…

  • Private Key คืออะไร? ทำไมคนที่ถือ Key ถึงควบคุม Bitcoin ได้?

    “แล้วใครมีสิทธิ Spend UTXO ก้อนนั้น?” นี่คือคำถามที่เรียกได้ว่าเด็ดดวงที่สุดในปฐพี Private Key คืออะไร? ถ้าผมตอบแบบสั้นที่สุด… มันคือ ความลับ ที่ทำให้คุณสามารถสร้างหลักฐานทางคณิตศาสตร์ เพื่ออนุญาตให้ Bitcoin ของคุณเอาไป Spend ได้ แต่เดี๋ยวก่อน… ประโยคนี้มีอะไรแปลก ๆ อยู่หนึ่งอย่าง ผมไม่ได้พูดว่า : Private Key คือรหัสผ่านของ Bitcoin และผมก็ไม่ได้พูดว่า : Private Key คือที่เก็บ Bitcoin เพราะจริง ๆ แล้ว… Bitcoin ไม่ได้สิงอยู่ใน Private Key ของคุณ มันไม่ได้อยู่ใน Hardware Wallet ด้วยนะ ไม่ได้อยู่ในมือถือด้วยนะ ไม่ได้อยู่ใน Trezor ด้วยนะ และไม่ได้อยู่ในกระดาษที่คุณเขียน Seed Phrase เก็บเอาไว้นะ Bitcoin อยู่บน…

  • Bitcoin Transaction คืออะไร? วิธีสร้างด้วยมือเปล่าใน 8 ขั้นตอน

    เคยสงสัยไหมว่า ตอนที่เรากด Send Bitcoin ใน Wallet จริง ๆ แล้วเบื้องหลังมันกำลังทำอะไรอยู่? ถ้าวันหนึ่งไม่มี Wallet ให้ใช้ไม่มีปุ่ม Send ให้กดไม่มีหน้าจอสวย ๆ มาคอยจัดการทุกอย่างให้เรา… เรายังสามารถสร้าง Bitcoin Transaction ขึ้นมาเองได้ไหม? คำตอบคือ ได้ บทความนี้เราจะลองถอด Wallet ออกทีละชั้น แล้วสร้าง Bitcoin Transaction “ด้วยมือเปล่า” ตั้งแต่การเลือก Tools ที่เราจะใช้, กำหนดว่าจะส่งมันไปที่ไหน, สร้าง Transaction ขึ้นมา ไปจนถึงการเซ็น Transaction ก่อนส่งออกไปยัง Bitcoin Network เป้าหมายไม่ใช่การทรมานตัวเองด้วยการทำสิ่งที่ Wallet ทำให้เราได้ภายในไม่กี่วินาที 😆 แต่คือการเปิดฝากระโปรงดูว่า Bitcoin ทำงานอย่างไรจริง ๆ เพราะเมื่อคุณสร้าง Transaction เองได้สักครั้ง คำว่า UTXO, Input,…