Right Tech EP.3

แล้ว Seed แปลงร่างเป็น Keys ได้ไง? | Right Tech EP3 (อ.อาร์ม x มิวนิค x อิสร x มูฟวี่)

HD Wallet (Hierarchical Deterministic Wallet)

Hierarchical Deterministic Wallet (HD Wallet)

  • Hierarchical: keys และ addresses ถูกจัดระเบียบในโครงสร้างต้นไม้ (tree structure)

โครงสร้างแบบต้นไม้

  • Deterministic: keys และ addresses ถูกสร้างด้วยวิธีแบบเดียวกัน

ประโยชน์ของ HD Wallet

1. single backup (สำรองข้อมูลเพียงครั้งเดียว)

  • Basic Wallet:

    • ต้องสร้างคู่คีย์ใหม่ทุกครั้งที่รับบิตคอยน์

    • ต้องสำรองข้อมูลทุกครั้งที่ได้รับการชำระเงินใหม่

Figure 1: Diagram showing individual private and public keys generated in a

Figure 1: Basic Wallet | Source: learnmeabitcoin.com

  • HD Wallet:

    • ใช้ seed เดียวในการสร้าง master private key

    • จาก master key นี้ สามารถสร้างคีย์ "ลูก" ได้หลายพันล้านชุด

    • เพียง backup seed ก็สามารถกู้คืนกระเป๋าเงินทั้งหมดได้

    • การสร้างคีย์เป็นแบบกำหนดแน่นอน (deterministic)

Figure 3: Diagram showing private and public keys generated from a single seed in an HD Wallet.

Figure 2: HD Wallet | Source: learnmeabitcoin.com

2. การจัดระเบียบ (Organization)

  • จุดเด่นของ HD Wallet คือสามารถสร้างลำดับชั้นของคีย์ (hierarchy)

  • แต่ละคีย์ลูก (child key) สามารถสร้างคีย์ของตัวเองได้อีก

  • ทำให้สามารถจัดโครงสร้างแบบต้นไม้เพื่อจัดระเบียบคีย์ต่าง ๆ ได้

  • สามารถแบ่งคีย์ออกเป็นส่วน ๆ เพื่อใช้งานใน "บัญชี" ที่แตกต่างกัน

Image 4: Diagram showing the hierarchical structure of keys in an HD wallet.

Figure 3: Hierarchical structure of keys in an HD wallet | Source: learnmeabitcoin.com


1. How do HD Wallets work?

  1. Seed Generation:

  • HD Wallet เริ่มต้นจากการสุ่มค่า 64 ไบต์ ซึ่งเรียกว่า seed

  • Seed นี้จะถูกใช้เพื่อสร้าง master key

  1. Master Private Key

  • จาก seed จะถูกนำไปผ่านฟังก์ชัน HMAC-SHA512 เพื่อให้ได้ข้อมูลชุดใหม่อีก 64 ไบต์ (master private key)

  • เราใช้ข้อมูล 64 ไบต์นี้เพื่อสร้าง master extended private key:

    • Private Key: 32 ไบต์แรก

    • Chain Code: 32 ไบต์สุดท้าย

  • Chain code เป็นข้อมูลขนาด 32 ไบต์ที่จับคู่กับ private key เพื่อสร้างสิ่งที่เรียกว่า extended key

Image 7: Animation showing the creation of a master private key from a 64-byte seed.

Figure 4: Master Private Key Creation | Source: learnmeabitcoin.com

  • หลังจากการแฮช seed ขนาด 64 ไบต์ด้วย HMAC-SHA512 จะได้ข้อมูล 64 ไบต์ใหม่:

  • คำนวณ master extended public key (จาก eiliptical curve):

  1. Child Keys (Basic)

  • child keys ถูกสร้างจาก master extended private key (private key + chain code) และเลข index

Image 8: Animation showing the derivation of hardened extended private key children.

Figure 5: Child Keys Creation (Basic) | Source: learnmeabitcoin.com

  1. Child Keys (Advanced)

  • ถ้าเราต้องการ extended private key ที่สามารถสร้าง private key และ public key ได้ แต่ต้องการให้ extended public key สามารถสร้าง public key ที่เหมือนกันได้หรือก็คือ เราสามารถสร้าง public key โดยไม่ต้องใช้ private key

  1. Extended Public Key

  • เริ่มจากสร้าง extended public key

    • นำ public key จาก extended private key มาจับคู่กับ chain code

    • public key จะถูกสร้างจาก private key (key จาก extended private key) โดยใช้ elliptic curve multiplication

  1. Extended Private Key Children

  • นำ chain code มาจับคู่กับ extended public key + index มาผ่าน HMAC-SHA512

  • ผลลัพธ์จาก HMAC-SHA512:

  1. Extended Public Key Children

  • นำ chain code มาจับคู่กับ extended public key + index มาผ่าน HMAC-SHA512

  • นำผลลัพธ์ 32 byte แรก จาก HMAC-SHA512 มาผ่าน Elliptical Curve Multiplication จะได้ child public key


2. Extended Keys

Image 11: Diagram showing how an extended key is converted to an address.

Figure 6: Extended Keys Serialization | Source: learnmeabitcoin.com

  • Extended Key สามารถแปลงเป็น Address เพื่อให้ง่ายต่อการนำไปใช้งานหรือส่งต่อ

  • Address แบบ Extended Key จะประกอบด้วย private key/public key and chain code, พร้อมกับ ข้อมูลเมตา (Metadata) อื่น ๆ เพิ่มเติม

  • ก่อนจะแปลงเป็นที่อยู่ คีย์แบบขยายจะถูก ทำให้อยู่ในรูปแบบซีเรียลไลซ์ (Serialized) ตามโครงสร้างฟิลด์ดังนี้:

ฟิลด์
ขนาด (ไบต์)
คำอธิบาย

Version

4

ค่าที่แสดงชนิดของ key เช่น "xprv" มีค่าเป็น 0488ade4

Depth

1

ความลึกของการแยกคีย์จาก Master Key

Parent Fingerprint

4

4 ไบต์แรกของ HASH160 จาก parent public key

Child Number

4

ลำดับ index ของ child key จาก Master Key

Chain Code

32

รหัสลับพิเศษ 32 ไบต์ ที่ช่วยป้องกันไม่ให้ผู้อื่นสามารถสร้าง child keys ได้

Key

33

private key (เติม 00 ข้างหน้า) หรือ public key


3. Mnemonic Seed (BIP 39)

  • การแทนค่าตัวเลขขนาดใหญ่ที่สุ่มขึ้นมา ด้วยลำดับของคำศัพท์ ซึ่งทำให้มนุษย์สามารถจดจำและเก็บรักษาได้ง่ายขึ้น

  • คำเหล่านี้จะถูกนำมาใช้สร้างในการสร้าง seed ซึ่งจะถูกนำไปใช้ในการสร้าง extended keys ภายใน HD Wallet ได้

มี 3 ขั้นตอนในการสร้าง mnemonic sentence seed:

  1. สร้างค่าเอนโทรปี (Generate Entropy)

  2. แปลงเอนโทรปีเป็นคำช่วยจำ (Entropy to Mnemonic)

  3. แปลงคำช่วยจำเป็นซีด (Mnemonic to Seed)

Creating Mnemonic Seed

1. การสร้างค่าเอนโทรปี (Generate Entropy)

Image 2: Animation showing entropy being generated as a series of 1s and 0s in multiples of 32 bits.

Figure 7: Generating Entropy | Source: learnmeabitcoin.com

  • สามารถจินตนาการได้ว่าเอนโทรปีคือชุดของตัวเลขสุ่มขนาดใหญ่มาก ที่ไม่สามารถสร้างซ้ำได้อีกในอนาคต

  • โดยปกติแล้ว ค่าดังกล่าวจะแสดงในรูปของบิต เช่น 10011010010001...

  • เอนโทรปีที่สร้างขึ้นควรมีขนาดเป็นจำนวนเท่าของ 32 บิต เพื่อให้ง่ายต่อการแบ่งเป็นกลุ่มในขั้นตอนถัดไป

2. จากเอนโทรปีสู่เมนโมนิก Entropy to Mnemonic

เมื่อเราได้ค่าเอนโทรปีแล้ว ขั้นตอนต่อไปคือการแปลงให้เป็นประโยคที่มนุษย์สามารถจดจำได้ง่ายขึ้น

การตรวจสอบความถูกต้อง (Checksum)

Image 6: Diagram showing a checksum being created from the entropy when creating a mnemonic sentence.

Figure 8: Checksum Creation | Source: learnmeabitcoin.com

  • เริ่มจากการเพิ่มข้อมูล checksum เข้าไปในค่าเอนโทรปี เพื่อช่วยตรวจจับข้อผิดพลาดและทำให้ใช้งานได้ง่ายขึ้น

  • checksum ถูกสร้างขึ้นโดยการแฮชค่าเอนโทรปีด้วย SHA-256 ซึ่งจะได้ผลลัพธ์เป็น “ลายนิ้วมือ” เฉพาะตัวของเอนโทรปี

  • จากนั้นให้นำบิตเริ่มต้นจากค่าที่ได้จาก SHA-256 มาใช้เป็นเช็กซัม โดยใช้ 1 บิตต่อเอนโทรปี 32 บิต แล้วนำบิตเช็กซัมไปต่อท้ายเอนโทรปีเดิม

การแปลงเป็นคำ (Words)

Image 7: Diagram showing a checksum being created from the entropy when creating a mnemonic sentence.

Figure 9: Entropy to Mnemonic | Source: learnmeabitcoin.com

  • จากนั้นให้นำ เอนโทรปี + เช็กซัม มาแบ่งออกเป็นกลุ่มละ 11 บิต

  • แต่ละกลุ่ม 11 บิตจะถูกแปลงเป็นเลขฐานสิบ แล้วใช้ค่านั้นเป็นดัชนีเพื่อเลือกคำจาก รายการคำ (wordlist)

  • ผลลัพธ์ที่ได้คือ ประโยคช่วยจำ (mnemonic sentence) ซึ่งประกอบด้วยคำที่เลือกมาเรียงกันตามลำดับ

3. จากเมนโมนิกสู่ซีด Mnemonic to Seed

Image 8: Animation showing a seed being created from the mnemonic sentence and optional passphrase.

Figure 10: Mnemonic to Seed | Source: learnmeabitcoin.com

เมื่อเราได้ ประโยคช่วยจำ (mnemonic sentence) แล้ว ขั้นตอนสุดท้ายคือการแปลงประโยคนี้ให้เป็น seed

  • ในการสร้าง seed เราจะนำ mnemonic เข้าสู่กระบวนการของฟังก์ชัน PBKDF2

  • ฟังก์ชันนี้จะทำการแฮช mnemonic ซ้ำหลายครั้ง โดยสามารถเพิ่ม รหัสผ่านเสริม (optional passphrase) ได้ด้วยถ้าต้องการ

  • ผลลัพธ์สุดท้ายคือข้อมูลขนาด 64 ไบต์ (512 บิต)

  • ค่าที่ได้จากขั้นตอนนี้คือ "seed" ซึ่งจะถูกนำไปใช้ในการสร้าง master extended key สำหรับ HD Wallet

  1. Overall

Image 1: Diagram showing how a mnemonic sentence and seed is created.

Figure 11: Mnemonic Seed Creation | Source: learnmeabitcoin.com


4. Derivation Paths

  • Derivation Paths คือวิธีระบุตำแหน่งของ key และ address ภายใน HD Wallet

  • ใช้ร่วมกับมาตรฐาน BIP ต่าง ๆ เช่น:

    • BIP 44: สำหรับ Legacy Address (P2PKH)

    • BIP 49: สำหรับ Nested SegWit Address (P2SH-P2WPKH)

    • BIP 84: สำหรับ Native SegWit Address (P2WPKH)

  • โครงสร้างของ derivation paths ใช้รูปแบบ:

  • Extended Keys สามารถแตก และคีย์ลูกสามารถแตกต่อไปเป็นต้นไม้ลำดับชั้นได้

  • แต่ละคีย์ในโครงสร้างมี "เส้นทางของตัวเอง" ที่ย้อนกลับไปยัง Master key ได้

  • การใช้เส้นทางที่เป็นมาตรฐานช่วยให้กระเป๋าเงินหลายตัวทำงานร่วมกันได้อย่างราบรื่น

  • HD Wallet ใช้แนวคิดลำดับชั้นแบบ Deterministic ทำให้สามารถ:

    • สร้างคีย์ใหม่ได้เรื่อย ๆ โดยไม่ต้องจัดเก็บแต่ละคีย์แยกกัน

    • สำรองข้อมูลง่าย (แค่ Seed หรือ Master Key ก็พอ)

    • มีโครงสร้างการจัดการคีย์แบบปลอดภัยและเป็นระเบียบ

โครงสร้างของกระเป๋าเงิน (Wallet Structure)

  • m: Master Key

    • คีย์มาสเตอร์แบบขยาย (extended master key)

    • สร้างขึ้นจาก seed และเป็นจุดเริ่มต้นของการแตกคีย์ทั้งหมด

  • m / purpose': Purpose (จุดประสงค์)

    • ระบุโครงสร้างของกระเป๋าเงินตามมาตรฐาน BIP เช่น BIP44, BIP49, BIP84, BIP86

    • ' หมายถึง hardened key

  • m / purpose' / coin_type': Coin Type (ประเภทเหรียญ)

    • ระบุสกุลเงินดิจิทัลที่ใช้งาน

    • ตัวอย่าง:

      • 0' = Bitcoin

      • 1' = Bitcoin Testnet

      • 2' = Litecoin

  • m / purpose' / coin_type' / account': Account (บัญชี)

    • แยกบัญชีเพื่อไม่ให้เหรียญปะปนกัน

    • ค่าเริ่มต้น = 0'

    • สร้างตามลำดับเพื่อง่ายต่อการกู้คืน

  • m / purpose' / coin_type' / account' / change: Change (ประเภทแอดเดรส)

    • 0 = Receiving address (รับเงินจากคนอื่น)

    • 1 = Change address (รับเงินทอนจากการส่งออก)

    • เป็น normal children ใช้ xpub สร้างแอดเดรสได้โดยไม่เปิดเผย private key

  • m / purpose' / coin_type' / account' / change / index: Index (ลำดับของแอดเดรส)

    • คีย์ที่ใช้งานจริงในการรับ/ส่งเงิน

    • ทุกครั้งที่สร้างแอดเดรสใหม่ index จะเพิ่มขึ้นทีละ 1

    • ใช้คีย์นี้ตรง ๆ โดยไม่ต้องแตกคีย์ต่ออีก


Derivation Path

  • BIP44: Legacy (P2PKH)

BIP 44

Figure 12: BIP 44 Derivation Path | Source: learnmeabitcoin.com

  • m/44'/0'/0'/0/0

  • รูปแบบ Legacy P2PKH → แอดเดรสขึ้นต้นด้วย 1

  • คีย์แบบขยาย: xprv, xpub


  • BIP49: Nested Segwit (P2SH-P2WKPH)

  • BIP 49
    • m/49'/0'/0'/0/0

    • รูปแบบ Nested Segwit (P2SH-P2WPKH) → แอดเดรสขึ้นต้นด้วย 3

    • คีย์แบบขยาย: yprv, ypub


  • BIP84: Native Segwit (P2WPKH)

  • BIP 84
    • m/84'/0'/0'/0/0

    • รูปแบบ Native Segwit (P2WPKH) → แอดเดรสขึ้นต้นด้วย bc1q

    • คีย์แบบขยาย: zprv, zpub


  • BIP86: Taproot (P2TR)

  • BIP 86

    • m/86'/0'/0'/0/0

    • รูปแบบ Taproot (P2TR) → แอดเดรสขึ้นต้นด้วย bc1p

    • ไม่มี prefix เฉพาะของตัวเอง → ใช้ xprv, xpub + Output Descriptors เพื่อระบุว่าเป็น Taproot


Last updated