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: Basic Wallet | Source: learnmeabitcoin.com
HD Wallet:
ใช้ seed เดียวในการสร้าง master private key
จาก master key นี้ สามารถสร้างคีย์ "ลูก" ได้หลายพันล้านชุด
เพียง backup seed ก็สามารถกู้คืนกระเป๋าเงินทั้งหมดได้
การสร้างคีย์เป็นแบบกำหนดแน่นอน (deterministic)
Figure 2: HD Wallet | Source: learnmeabitcoin.com
2. การจัดระเบียบ (Organization)
จุดเด่นของ HD Wallet คือสามารถสร้างลำดับชั้นของคีย์ (hierarchy)
แต่ละคีย์ลูก (child key) สามารถสร้างคีย์ของตัวเองได้อีก
ทำให้สามารถจัดโครงสร้างแบบต้นไม้เพื่อจัดระเบียบคีย์ต่าง ๆ ได้
สามารถแบ่งคีย์ออกเป็นส่วน ๆ เพื่อใช้งานใน "บัญชี" ที่แตกต่างกัน
Figure 3: Hierarchical structure of keys in an HD wallet | Source: learnmeabitcoin.com
1. How do HD Wallets work?
Seed Generation:
HD Wallet เริ่มต้นจากการสุ่มค่า 64 ไบต์ ซึ่งเรียกว่า seed
Seed นี้จะถูกใช้เพื่อสร้าง master key
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

Figure 4: Master Private Key Creation | Source: learnmeabitcoin.com
หลังจากการแฮช seed ขนาด 64 ไบต์ด้วย HMAC-SHA512 จะได้ข้อมูล 64 ไบต์ใหม่:
คำนวณ master extended public key (จาก eiliptical curve):
Child Keys (Basic)
child keys ถูกสร้างจาก master extended private key (private key + chain code) และเลข index
Figure 5: Child Keys Creation (Basic) | Source: learnmeabitcoin.com
Child Keys (Advanced)
ถ้าเราต้องการ extended private key ที่สามารถสร้าง private key และ public key ได้ แต่ต้องการให้ extended public key สามารถสร้าง public key ที่เหมือนกันได้หรือก็คือ เราสามารถสร้าง public key โดยไม่ต้องใช้ private key
Extended Public Key
เริ่มจากสร้าง extended public key
นำ public key จาก extended private key มาจับคู่กับ chain code
public key จะถูกสร้างจาก private key (key จาก extended private key) โดยใช้ elliptic curve multiplication
Extended Private Key Children
นำ chain code มาจับคู่กับ extended public key + index มาผ่าน HMAC-SHA512
ผลลัพธ์จาก HMAC-SHA512:
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
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:
สร้างค่าเอนโทรปี (Generate Entropy)
แปลงเอนโทรปีเป็นคำช่วยจำ (Entropy to Mnemonic)
แปลงคำช่วยจำเป็นซีด (Mnemonic to Seed)
Creating Mnemonic Seed
1. การสร้างค่าเอนโทรปี (Generate Entropy)
Figure 7: Generating Entropy | Source: learnmeabitcoin.com
สามารถจินตนาการได้ว่าเอนโทรปีคือชุดของตัวเลขสุ่มขนาดใหญ่มาก ที่ไม่สามารถสร้างซ้ำได้อีกในอนาคต
โดยปกติแล้ว ค่าดังกล่าวจะแสดงในรูปของบิต เช่น 10011010010001...
เอนโทรปีที่สร้างขึ้นควรมีขนาดเป็นจำนวนเท่าของ 32 บิต เพื่อให้ง่ายต่อการแบ่งเป็นกลุ่มในขั้นตอนถัดไป
2. จากเอนโทรปีสู่เมนโมนิก Entropy to Mnemonic
เมื่อเราได้ค่าเอนโทรปีแล้ว ขั้นตอนต่อไปคือการแปลงให้เป็นประโยคที่มนุษย์สามารถจดจำได้ง่ายขึ้น
การตรวจสอบความถูกต้อง (Checksum)
Figure 8: Checksum Creation | Source: learnmeabitcoin.com
เริ่มจากการเพิ่มข้อมูล checksum เข้าไปในค่าเอนโทรปี เพื่อช่วยตรวจจับข้อผิดพลาดและทำให้ใช้งานได้ง่ายขึ้น
checksum ถูกสร้างขึ้นโดยการแฮชค่าเอนโทรปีด้วย SHA-256 ซึ่งจะได้ผลลัพธ์เป็น “ลายนิ้วมือ” เฉพาะตัวของเอนโทรปี
จากนั้นให้นำบิตเริ่มต้นจากค่าที่ได้จาก SHA-256 มาใช้เป็นเช็กซัม โดยใช้ 1 บิตต่อเอนโทรปี 32 บิต แล้วนำบิตเช็กซัมไปต่อท้ายเอนโทรปีเดิม
การแปลงเป็นคำ (Words)
Figure 9: Entropy to Mnemonic | Source: learnmeabitcoin.com
จากนั้นให้นำ เอนโทรปี + เช็กซัม มาแบ่งออกเป็นกลุ่มละ 11 บิต
แต่ละกลุ่ม 11 บิตจะถูกแปลงเป็นเลขฐานสิบ แล้วใช้ค่านั้นเป็นดัชนีเพื่อเลือกคำจาก รายการคำ (wordlist)
ผลลัพธ์ที่ได้คือ ประโยคช่วยจำ (mnemonic sentence) ซึ่งประกอบด้วยคำที่เลือกมาเรียงกันตามลำดับ
3. จากเมนโมนิกสู่ซีด Mnemonic to Seed
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
Overall
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'= Bitcoin1'= Bitcoin Testnet2'= 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)

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)

m/86'/0'/0'/0/0รูปแบบ Taproot (P2TR) → แอดเดรสขึ้นต้นด้วย bc1p
ไม่มี prefix เฉพาะของตัวเอง → ใช้
xprv,xpub+ Output Descriptors เพื่อระบุว่าเป็น Taproot
Last updated









