ข้ามไปยังเนื้อหา

กระเป๋าเงินแบบลำดับชั้นเชิงกำหนด (HD)

เรียนรู้ว่ากระเป๋าเงิน HD สร้างต้นไม้ของคีย์จาก seed เดียวอย่างไร การสืบทอดแบบ hardened ต่างจากแบบปกติอย่างไร และข้อมูลใดต้องเก็บไว้ในข้อมูลสำรองที่ครบถ้วนและทดสอบได้

อัปเดต

จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้ขาดทุนได้

คำตอบโดยตรง

กระเป๋าเงินแบบลำดับชั้นเชิงกำหนด (HD) สร้างต้นไม้ของคู่คีย์เข้ารหัสที่ทำซ้ำได้จาก root seed เดียว BIP-32 กำหนดกลไกของต้นไม้คีย์ โดยแต่ละโหนดเป็นคีย์แบบขยายซึ่งประกอบด้วยคีย์และ chain code ขนาด 32-byte และเลือกโหนดลูกด้วยดัชนี เมื่อใช้ข้อมูลราก กฎการสืบทอด และพาธเดียวกัน จะได้คีย์ลูกชุดเดิม

คำว่า “เชิงกำหนด” ทำให้การสำรองข้อมูลสะดวก แต่ไม่ได้ทำให้กระเป๋าเงินทุกแบบใช้แทนกันได้ วลีช่วยจำเป็นวิธีหนึ่งในการเข้ารหัส entropy และสร้าง seed ส่วนพาธการสืบทอดใช้เลือกโหนด และกฎของที่อยู่หรือสคริปต์จะแปลงคีย์สาธารณะเป็นสิ่งที่เชนรู้จัก การกู้คืนเฉพาะชุดคำอาจแสดงกระเป๋าเงินว่าง หาก passphrase พาธ เครือข่าย ชนิดสคริปต์ หรือกฎค้นหาบัญชีต่างจากเดิม

คำว่า “ลำดับชั้น” หมายถึงการแบ่งสิทธิ์เป็นต้นไม้ย่อยได้ คีย์สาธารณะแบบขยายระดับบัญชีช่วยให้บริการ watch-only สร้างคีย์สาธารณะลูกแบบปกติได้โดยไม่ถือคีย์สำหรับใช้จ่าย ส่วนคีย์ส่วนตัวแบบขยายสร้างต้นไม้ย่อยของคีย์ส่วนตัวที่เกี่ยวข้องได้ จึงต้องปกป้องเสมือนเป็นชุดคีย์ส่วนตัว ไม่ใช่เพียงที่อยู่เดียว

กระเป๋าเงิน HD เป็นแนวทางจัดการคีย์ ไม่ใช่วัตถุกระเป๋าเงินบนเชน บล็อกเชนไม่ได้เก็บวลีช่วยจำ seed พาธ ป้ายกำกับ หรือข้อมูลสำรอง สิ่งเหล่านี้เป็นข้อมูล off-chain ที่ซอฟต์แวร์กระเป๋าเงินและผู้ใช้ดูแล

วิธีการทำงาน

1. จาก entropy สู่ราก

โดยทั่วไป BIP-39 ใช้ก่อน BIP-32 แต่มาตรฐานทั้งสองแยกจากกัน BIP-39 เข้ารหัส entropy 128-256 bits พร้อม checksum เป็น 12-24 words จากนั้นใช้ PBKDF2-HMAC-SHA512 จำนวน 2048 รอบกับวลีช่วยจำที่ปรับรูปแบบแล้วและ passphrase ที่เป็นตัวเลือก เพื่อสร้าง seed ขนาด 512-bit ทุก passphrase ให้ seed ที่ถูกต้องแต่แตกต่างกัน ดังนั้น passphrase ที่หายไปหรือพิมพ์ผิดอาจไม่ถูกตรวจพบด้วยข้อความ “รหัสผ่านไม่ถูกต้อง”

BIP-32 ใช้ HMAC-SHA512 กับคีย์ Bitcoin seed เพื่อแปลงไบต์ของ seed เป็นคีย์ส่วนตัวหลักและ chain code หลัก คีย์ส่วนตัวแบบขยายที่รากนี้เป็นต้นทางของต้นไม้ BIP-32 กระเป๋าเงินเชิงกำหนดไม่ได้ใช้ BIP-39 หรือ BIP-32 ทุกแบบ การกู้คืนจึงต้องระบุรูปแบบจริง ไม่ใช่อนุมานจากการมีชุดคำกู้คืนเท่านั้น

2. คีย์แบบขยายและการสืบทอดคีย์ลูก

คีย์ส่วนตัวแบบขยายของ BIP-32 รวมคีย์ส่วนตัวกับ chain code ส่วนคีย์สาธารณะแบบขยายที่ตัดความเป็นส่วนตัวออกจะรวมคีย์สาธารณะที่ตรงกันกับ chain code เดียวกัน การสืบทอดคีย์ลูกแบบปกติใช้คีย์สาธารณะของแม่ chain code และดัชนีลูก ดังนั้นคีย์สาธารณะแบบขยายจึงสร้างคีย์สาธารณะลูกแบบปกติได้ แต่สร้างคีย์ส่วนตัวลูกไม่ได้

คีย์ลูกแบบ hardened ใช้ดัชนีตั้งแต่ 2^31 ถึง 2^32 - 1 และใช้ข้อมูลคีย์ส่วนตัวของแม่ จึงสร้างจากคีย์สาธารณะแบบขยายของแม่ไม่ได้ พาธมักทำเครื่องหมายด้วยอัญประกาศเดี่ยว เช่น m/84'/0'/0' การทำ hardening จำกัดความเสียหายจากกรณีล้มเหลวเฉพาะของ BIP-32 เพราะคีย์สาธารณะแบบขยายของแม่เมื่อรวมกับคีย์ส่วนตัวลูกแบบ non-hardened ที่ตรงกันหนึ่งคีย์ สามารถเปิดเผยคีย์ส่วนตัวแบบขยายของแม่ได้

3. พาธทำให้ต้นไม้มีความหมาย

BIP-44 กำหนด m / purpose' / coin_type' / account' / change / address_index โดย 3 ระดับแรกเป็น hardened ส่วน change และ address_index เป็นแบบปกติ เพื่อให้คีย์สาธารณะของบัญชีสร้างที่อยู่รับเงินและเงินทอนได้ ตามธรรมเนียม กิ่ง 0 เป็นภายนอก และกิ่ง 1 เป็นเงินทอนภายใน การค้นหาตาม BIP-44 สแกนประวัติธุรกรรมและใช้ gap limit ที่ 20 ที่อยู่ภายนอกซึ่งไม่เคยใช้ติดต่อกัน

พาธเป็น metadata ไม่ใช่ความลับหรือหลักประกันสากล BIP-84 กำหนด purpose 84' ให้บัญชี P2WPKH แบบ native SegWit ส่วน purpose อื่นหรือโครงสร้างเฉพาะกระเป๋าเงินจะสร้างต้นไม้ย่อยอื่น coin type เป็นข้อตกลงของ namespace ไม่ใช่กฎที่บล็อกเชนบังคับใช้

4. คีย์ไม่ใช่ทุกอย่างของกระเป๋าเงิน

คีย์สาธารณะยังต้องใช้กฎของเครือข่ายและที่อยู่หรือสคริปต์ สำหรับ Bitcoin คีย์เดียวกันใช้กับ output script ต่างชนิดได้ และกระเป๋าเงิน multisignature ยังต้องมีจำนวนลายเซ็นขั้นต่ำ คีย์ของผู้ร่วมลงนาม ลำดับคีย์ และต้นกำเนิดการสืบทอด output descriptor ตาม BIP-380 ผูกคีย์และต้นกำเนิดเข้ากับนิพจน์สคริปต์ที่ชัดเจน และอาจมี checksum ดังนั้นข้อมูลสำรองที่มีเพียง seed อาจไม่พอสร้างสิ่งที่กระเป๋าเงินเดิมติดตามหรือใช้จ่ายได้

ป้ายกำกับ รายชื่อผู้ติดต่อ บันทึกธุรกรรม คีย์ที่นำเข้า ชื่อบัญชี และการตั้งค่ากู้คืนของสัญญาหรือ smart account บางส่วน โดยทั่วไปไม่ได้สืบทอดแบบเชิงกำหนด จึงต้องส่งออกหรือจดบันทึกแยกต่างหาก

5. การสำรองและกู้คืนต้องผ่านการทดสอบ

บันทึกซอฟต์แวร์กระเป๋าเงิน รูปแบบวลีช่วยจำหรือ seed การมี passphrase ลายนิ้วมือหลัก พาธที่เกี่ยวข้อง เครือข่าย ดัชนีบัญชี และ Bitcoin descriptor หรือข้อมูลนโยบายที่เทียบเท่า เก็บความลับระดับรากแบบออฟไลน์และแยกจาก metadata การกู้คืนสาธารณะเมื่อทำได้ xpub ใช้จ่ายเองไม่ได้ แต่อาจเปิดเผยยอดคงเหลือ ความสัมพันธ์ระหว่างที่อยู่ และลูกแบบปกติในอนาคต

ทดสอบการกู้คืนในสภาพแวดล้อมที่เชื่อถือได้ก่อนพึ่งข้อมูลสำรอง เริ่มจากเปรียบเทียบที่อยู่หรือ descriptor ที่รู้จักโดยไม่ย้ายเงิน จากนั้นตรวจทั้งกิ่งรับเงินและเงินทอน บัญชีลำดับถัดไป ประวัติธุรกรรม และการลงนามด้วยธุรกรรมขนาดเล็กที่ควบคุมได้ อย่าป้อนวลีช่วยจำ passphrase หรือ xprv ในเว็บไซต์หรือแชตฝ่ายสนับสนุนที่ไม่น่าเชื่อถือ

ตัวอย่าง

พิจารณาบัญชี Bitcoin แบบ native SegWit ที่ m/84'/0'/0' โดย purpose 84' เลือกข้อตกลง BIP-84, 0' เลือก namespace ของ coin type สำหรับ Bitcoin และ 0' ตัวสุดท้ายเลือกบัญชีแรก ระบบ watch-only รับคีย์สาธารณะแบบขยายของบัญชีและสร้างกิ่งปกติได้โดยไม่รับคีย์ส่วนตัวของบัญชี

คีย์รับเงินภายนอกคีย์แรกอยู่ที่ m/84'/0'/0'/0/0 คีย์ถัดไปอยู่ที่ m/84'/0'/0'/0/1 และคีย์เงินทอนภายในคีย์แรกอยู่ที่ m/84'/0'/0'/1/0 ทั้งหมดมาจากบัญชีเดียวกัน แต่กิ่งและดัชนีเลือกคีย์ต่างกัน การใช้ seed เดิมกับ m/44'/0'/0'/0/0 จะเลือกต้นไม้ย่อยและรูปแบบเอาต์พุตอีกแบบ ผลลัพธ์ที่ว่างไม่ได้พิสูจน์ว่า seed ผิด

สำหรับบันทึกกู้คืน Bitcoin ที่สมบูรณ์ ให้เก็บข้อมูลสำรองของความลับรากแยกจาก descriptor หรือ metadata ที่เทียบเท่า ซึ่งระบุลายนิ้วมือ พาธ คีย์สาธารณะแบบขยาย ชนิดสคริปต์ และ checksum ตรวจสอบหลายที่อยู่ที่เคยใช้บนทั้งสองกิ่ง การพบเพียงที่อยู่รับเงินแรกเป็นหลักฐานว่าใบหนึ่งถูกต้อง ไม่ใช่ข้อพิสูจน์ว่ากู้คืนทุกบัญชี เอาต์พุตเงินทอน หรือนโยบายกระเป๋าเงินแล้ว

ความเสี่ยง

  • การรวมศูนย์ที่รากเดียว: การรั่วไหลของ root seed หรือคีย์ส่วนตัวแบบขยายระดับสูงอาจเปิดเผยลูกทั้งหมดภายในขอบเขตนั้น
  • ข้อมูลสำรองสูญหาย: การสูญเสีย seed สำรองเพียงชุดเดียว หรือสูญเสีย passphrase BIP-39 ที่ไม่ได้บันทึกไว้แยกกัน อาจทำให้กู้คืนคีย์ลูกทั้งหมดไม่ได้
  • ความมั่นใจผิด ๆ ใน passphrase: passphrase BIP-39 ที่ผิดจะสร้างกระเป๋าเงินอีกใบที่ถูกต้อง ซึ่งอาจดูเหมือนกู้คืนสำเร็จแต่ไม่มีเงิน
  • พาธหรือสคริปต์ไม่ตรงกัน: seed ที่ถูกต้องกับ purpose บัญชี กิ่ง เครือข่าย หรือชนิดเอาต์พุตที่ผิด จะสร้างที่อยู่ที่ถูกต้องแต่ไม่เกี่ยวข้องกัน
  • สำรองนโยบายไม่ครบ: seed และพาธอย่างเดียวอาจสร้างเงื่อนไขการใช้จ่ายแบบ multisignature, descriptor, smart account หรือเฉพาะกระเป๋าเงินกลับมาไม่ได้
  • คีย์สาธารณะแบบขยายทำข้อมูลส่วนตัวรั่ว: xpub อาจเปิดเผยกลุ่มที่อยู่และทำให้ติดตามลูกแบบปกติต่อเนื่องได้
  • คีย์แม่ BIP-32 ถูกเจาะ: xpub ของแม่ร่วมกับคีย์ส่วนตัวลูกแบบ non-hardened ที่ตรงกันและรั่วไหล อาจเปิดเผยต้นไม้คีย์ส่วนตัวของแม่
  • เครื่องมือกู้คืนไม่น่าเชื่อถือ: เว็บไซต์ ส่วนขยาย อุปกรณ์ปลอม เครื่องมือคลิปบอร์ด หรือการแชร์หน้าจอ อาจจับความลับรากทั้งหมด
  • สื่อที่ไม่ผ่านการทดสอบ: กระดาษ โลหะ ไฟล์เข้ารหัส หรือข้อมูลสำรองฮาร์ดแวร์ อาจเสียหายจากการคัดลอกผิด การกัดกร่อน ลืมรหัสผ่าน หรือรูปแบบไม่รองรับ
  • ย้ายไม่ครบ: การย้ายเฉพาะเหรียญที่เห็น แต่ทิ้งโทเค็น เอาต์พุตเงินทอน บทบาทในสัญญา การอนุมัติ หรือบัญชีถัดไปไว้ใต้รากเก่า ยังคงความเสี่ยงไว้

ความเข้าใจผิดที่พบบ่อย

วลีสำรองหนึ่งชุดมีรายละเอียดทั้งหมดของกระเป๋าเงินหรือไม่

ไม่มี วลีอาจสร้างข้อมูลคีย์รากกลับมาได้ แต่ไม่จำเป็นต้องมี passphrase รูปแบบการสืบทอด เครือข่าย สคริปต์ นโยบาย multisignature ป้ายกำกับ คีย์นำเข้า หรือประวัติการค้นหาบัญชี จงเก็บ metadata ที่กระเป๋าเงินจริงต้องใช้

เผยแพร่ xpub ได้อย่างปลอดภัยเพราะใช้จ่ายไม่ได้ใช่หรือไม่

ไม่ใช่ โดยทั่วไปคีย์นี้ลงนามไม่ได้ แต่อาจเปิดเผยที่อยู่ลูกแบบปกติทั้งในอดีตและอนาคตพร้อมประวัติรวม ในกรณีล้มเหลวของ BIP-32 ข้างต้น การจับคู่กับคีย์ส่วนตัวลูกแบบ non-hardened ที่ตรงกันอาจทำให้ต้นไม้ของแม่ถูกเจาะด้วย

ที่อยู่ใหม่สร้างข้อมูลสำรองที่เป็นอิสระหรือไม่

ไม่ ที่อยู่ใหม่ลดการใช้ที่อยู่ซ้ำและเพิ่มความเป็นส่วนตัว แต่ลูกเชิงกำหนดยังอยู่ภายใต้บรรพบุรุษเดียวกัน หากรากถูกเจาะ ต้นไม้ย่อยย่อมได้รับผลกระทบแม้แต่ละการชำระเงินใช้ที่อยู่ใหม่

การกู้คืนที่อยู่คุ้นเคยหนึ่งที่อยู่พิสูจน์ว่ากระเป๋าเงินครบถ้วนหรือไม่

ไม่ การกระทำนี้ยืนยันเพียงชุดข้อมูลราก พาธ และวิธีสร้างที่อยู่หนึ่งแบบ การกู้คืนยังต้องครอบคลุมกิ่งรับเงินและเงินทอน ทุกบัญชีที่ใช้ สคริปต์หรือนโยบาย และเครือข่ายที่เกี่ยวข้อง

หัวข้อที่เกี่ยวข้อง

แหล่งที่มา

การนำทาง

ค้นหาในวิกิ...