ข้ามไปที่เนื้อหาหลัก

BIP39 คืออะไร

อัปเดตแล้ววันนี้

ข้อกำหนด BIP-39 อธิบายถึงอัลกอริทึมและกระบวนการในการสร้างกระเป๋าเงินแบบกำหนดได้ (deterministic wallets) โดยอาศัย mnemonics (ชุดของคำที่จำง่าย)

ข้อกำหนดนี้แบ่งออกเป็น 2 ส่วนหลัก:

  1. วิธีการสร้าง mnemonic

  2. วิธีการแปลง mnemonic ที่สร้างขึ้นให้เป็น binary seed

ต่อไปนี้คือการอธิบายวิธีการสร้างกระเป๋าเงินแบบกำหนดได้ โดยจะเริ่มจากการอธิบายแต่ละส่วนทั้งสองนี้

การสร้าง mnemonic

กระบวนการอัลกอริทึมสำหรับการสร้าง mnemonic มีดังนี้:

กระบวนการมีดังนี้:

  1. สร้างลำดับสุ่ม (entropy) ตั้งแต่ 128 ถึง 256 บิต (เพิ่มทีละ 32 บิต)

  2. ทำการ SHA256 กับลำดับสุ่มที่สร้างขึ้นในขั้นตอนก่อนหน้า เพื่อสร้างค่า Hash และนำ N บิตแรกของค่า Hash (ความยาว entropy / 32 เช่น 128 บิต ดังนั้น N = 4) มาเป็น Checksum ของลำดับสุ่ม

  3. เพิ่ม Checksum เข้าไปท้ายลำดับสุ่มที่สร้างขึ้นในขั้นตอนแรก ดังนั้นสำหรับตัวอย่างในภาพ ลำดับสุ่มพร้อม Checksum จะมีความยาว 128 + 4 = 132 บิต

  4. แบ่งลำดับสุ่มจากขั้นตอนก่อนหน้าออกเป็นส่วนๆ ละ 11 บิต (split) ดังนั้นสำหรับลำดับความยาว entropy 128 บิต จะได้ 12 ส่วน (132 / 11 = 12)

  5. ในขั้นตอนนี้ ให้จับคู่ค่าแต่ละส่วนที่มี 11 บิต กับรายการคำศัพท์ที่กำหนดไว้ล่วงหน้า 2048 คำ

  6. กลุ่มคำศัพท์สุดท้ายที่สร้างขึ้นตามลำดับการแบ่ง คือ mnemonic

การสร้าง Seed จาก mnemonics

หลังจากสร้าง mnemonic แล้ว เราสามารถสร้าง seed ได้โดยใช้อัลกอริทึมฟังก์ชันสร้างคีย์ PBKDF2

PBKDF2 ต้องการพารามิเตอร์สองอย่าง: mnemonic และ salt วัตถุประสงค์ของ salt คือทำให้การถอดรหัสยากขึ้น และใน BIP-39 เราสามารถใช้ passphrase เป็นปัจจัยเสริมด้านความปลอดภัยเพื่อปกป้อง seeds ได้

"PBKDF2 เป็นส่วนหนึ่งของชุดข้อกำหนด Public-Key Cryptography Standards (PKCS) ของ RSA Laboratories
โดยเฉพาะ PKCS #5 v2.0 ซึ่งเผยแพร่ในรูปแบบ RFC 2898 ของ Internet Engineering Task Force ด้วย"

ตามการสร้าง mnemonic ข้างต้น แผนภาพต่อไปนี้แสดงอัลกอริทึมสำหรับการสร้าง seed

  • พารามิเตอร์แรกของ PBKDF2 คือ mnemonic ที่สร้างขึ้นข้างต้น

  • พารามิเตอร์ที่สองของ PBKDF2 คือ salt ซึ่งโดยทั่วไปประกอบด้วยสตริงและการรวมกันของสตริง cipher ที่ผู้ใช้ระบุ

  • PBKDF2 ใช้อัลกอริทึม HMAC-SHA512 ซึ่งใช้การ hash 2048 ครั้ง เพื่อสร้างค่า 512 บิตเป็น seed

การสร้าง HD wallet จาก seed

seed ที่สร้างขึ้นข้างต้นจะถูกใช้เป็น Root Seed ของ HD wallet และ Root Seed ของ HD wallet ใดๆ ก็สามารถสร้าง HD wallet ทั้งหมดขึ้นมาใหม่ได้

generate-hd-master-key.jpeg

การป้อน Root Seed เข้าสู่อัลกอริทึม HMAC-SHA512 จะได้ hash 512 บิต โดย 256 บิตด้านซ้ายจะถูกใช้เป็น Master Private Key และ 256 บิตด้านขวาจะเป็น Master Chain Code หลังจากนั้น Master Public Key (264 บิต) สามารถสร้างได้จาก Master Private Key m

ดังที่คุณเห็นจากภาพด้านบน HD key ถูกสร้างขึ้นโดยใช้พารามิเตอร์ดังต่อไปนี้:

  • Parent Private Key หรือ Parent Public Key; (ทั้งคู่เป็น ECDSA keys ขนาด 256 บิต แบบ uncompressed)

  • Parent Chain Code ขนาด 256 บิต

  • หมายเลขดัชนีจำนวนเต็ม 32 บิต

นอกจากนี้ กระบวนการข้างต้นเป็นแบบ recursive และ Child Private Key ในแผนภาพสามารถใช้เป็น Parent Private Key ในระดับถัดไปได้

โดยการป้อน (Parent Publick Key, Parent Chain Code, Index Number) เข้าสู่อัลกอริทึม HMAC-SHA512 เราสามารถสร้าง subkeys ได้ และเราสามารถปรับ Index Number เพื่อสร้าง subkeys หลายรายการในระดับเดียวกันได้

เกี่ยวกับ Extended Key

เนื่องจากฟังก์ชันการไล่เรียงคีย์นี้เป็นแบบทิศทางเดียว subkeys ทั้งหมดไม่สามารถใช้เพื่อไล่เรียงคีย์แม่หรือคีย์พี่น้องในระดับเดียวกันได้ มีเพียงคีย์แม่และ chain code ของแม่ (ที่สร้างจากคีย์แม่ของแม่และ chain code) เท่านั้นที่สามารถใช้เพื่อไล่เรียง subkeys และ subchain codes ทั้งหมด และสร้าง subpublic keys และ addresses ที่สอดคล้องกันสำหรับการลงนามธุรกรรมได้

การรวมกันของ Key และ Chain Code เรียกว่า extended key และ extended key สามารถใช้เพื่อสร้างทุกสาขาจากตรงนั้นลงไปได้

คีย์ที่ให้มาใน extended key อาจเป็น private key หรือ public key ก็ได้ เมื่อรวมกับ chain code จะเรียกว่า Extended Private Key และ Extended Public Key ตามลำดับ และแทนด้วย (k, c) และ (K, c) ตามลำดับ โดยที่ public key K = point(k)

เราสามารถไล่เรียง extended public key จาก extended private key ได้ แต่ไม่สามารถทำในทางกลับกันได้ ดังนั้นสำหรับบางสถานการณ์ธุรกรรม (เช่น อีคอมเมิร์ซ) สามารถสร้าง public key และ address ใหม่สำหรับแต่ละธุรกรรมเพื่อรับการชำระเงินได้ ในขณะที่ extended private key สามารถเก็บไว้ใน paper wallet หรือ hardware wallet เพื่อการลงนามธุรกรรมแบบออฟไลน์ที่ปลอดภัยได้ ดังที่เราเห็นได้ว่าความปลอดภัยของ extended public key ค่อนข้างสูง และแผนภาพต่อไปนี้แสดงกลไกการส่งผ่านของ extended parent public key เพื่อไล่เรียง child private key และสร้าง child public key:

นี่ไม่ใช่คำตอบที่ต้องการใช่ไหม