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

เส้นทางการสืบทอดคีย์ของกระเป๋า: มาตรฐาน การค้นหา และการกู้คืน

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

อัปเดต

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

คำตอบโดยตรง

เส้นทางการสืบทอดคีย์ของกระเป๋าคือลำดับดัชนีของคีย์ลูก ซึ่งบอกอัลกอริทึมแบบกำหนดแน่นอนว่าต้องเลือกโหนดใดในต้นไม้คีย์ ในสัญกรณ์ BIP-32 ที่ใช้ทั่วไป m/84'/0'/0'/0/7 เริ่มจากโหนดส่วนตัวระดับ master m แล้วผ่านคีย์ลูกห้าระดับ apostrophe ระบุคีย์ลูก BIP-32 แบบ hardened เส้นทางเป็นเพียงข้อมูลกำหนดตำแหน่ง ไม่ใช่คีย์ส่วนตัว ไม่ได้เข้ารหัส seed ไม่ได้ระบุยอดคงเหลือบนบล็อกเชนด้วยตัวเอง และกู้คืนสิ่งใดไม่ได้หากไม่มีข้อมูลรากกับอัลกอริทึมการสืบทอดที่ถูกต้อง

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

วลีช่วยจำเดียวกันอาจนำไปสู่ชุดที่อยู่หลายชุดซึ่งถูกต้องแต่ไม่เกี่ยวข้องกัน สำหรับ Bitcoin เส้นทางแบบคีย์เดียวที่พบบ่อย ได้แก่ m/44'/0'/account'/change/index สำหรับ P2PKH, m/49'/0'/account'/change/index สำหรับ P2WPKH ที่ซ้อนใน P2SH, m/84'/0'/account'/change/index สำหรับ native SegWit P2WPKH และ m/86'/0'/account'/change/index สำหรับ Taproot P2TR แบบคีย์เดียว กระเป๋ายังต้องทราบวิธีสร้างเอาต์พุตหรือสคริปต์ เส้นทางเพียงอย่างเดียวจึงไม่ใช่นโยบายกระเป๋า Bitcoin ที่ครบถ้วน

ระบบนิเวศอื่นนำสัญกรณ์บางส่วนไปใช้โดยไม่ได้รับประกันว่าความหมายจะเหมือนกัน Ether จดทะเบียนเป็นชนิดเหรียญ BIP-44 60 และ m/44'/60'/0'/0/index เป็นข้อตกลงที่พบบ่อยสำหรับ externally owned account แต่ซอฟต์แวร์กระเป๋าเคยใช้โครงสร้างบัญชีหลายแบบ คีย์ EVM เดียวกันอาจให้ที่อยู่บัญชีเดียวกันในหลายเครือข่าย EVM แม้ยอดคงเหลือและประวัติรายการจะแยกตามเชน ส่วนคีย์ BLS ของผู้ตรวจสอบ Ethereum ใช้ ERC-2333 และ ERC-2334 แทน BIP-32 เส้นทาง m/12381/3600/account/use ไม่มี apostrophe และใช้ร่วมกับต้นไม้ BIP-32 ไม่ได้ การกู้คืนจึงต้องทราบ implementation เส้นโค้ง seed หรือ passphrase ข้อตกลงเส้นทาง เครือข่าย และวิธีสร้างที่อยู่ที่ถูกต้อง ไม่ใช่เพียงสตริงที่ดูสมเหตุผล

วิธีระบุและตรวจสอบเส้นทางการสืบทอดคีย์

1. ระบุข้อมูลรากและอัลกอริทึมการสืบทอดคีย์

บันทึกรูปแบบวลีช่วยจำ รายการคำ passphrase ที่อาจใช้ seed ดิบหรือคีย์แบบขยาย และ implementation ของซอฟต์แวร์หรือฮาร์ดแวร์ที่สร้างกระเป๋า BIP-39 แปลง entropy ขนาด 128 ถึง 256 บิตเป็นวลีช่วยจำ และสร้าง seed ขนาด 512-bit จากวลีช่วยจำร่วมกับ passphrase ที่ตรงทุกตัวอักษร passphrase ทุกค่าจะให้ seed ที่ถูกต้องตามรูปแบบแต่แตกต่างกัน จากนั้น BIP-32 จึงสืบทอดคีย์ secp256k1 แบบขยายจาก seed กระเป๋าตระกูลอื่นอาจใช้รูปแบบวลีช่วยจำ เส้นโค้ง ฟังก์ชันสืบทอดคีย์ หรือกฎ master key ต่างกัน คำที่ตรงกันจึงไม่ได้พิสูจน์ว่า root ตรงกัน

2. ระบุมาตรฐาน เครือข่าย และหน้าที่ของคีย์

ระบุว่าเป้าหมายเป็นคีย์รับชำระ Bitcoin, externally owned account ของ EVM, คีย์ผู้ตรวจสอบ, ผู้ลงนาม multisig, ผู้ดูแลสัญญา หรือสิทธิ์ประเภทอื่น บันทึกเชนและเครือข่าย มาตรฐานกับเวอร์ชัน เส้นโค้งของคีย์ ประเภทเอาต์พุตหรือที่อยู่ และแอปกระเป๋า การจดทะเบียนชนิดเหรียญใน SLIP-0044 เป็นเพียงการจัดสรร namespace ไม่ได้พิสูจน์ว่ากระเป๋าทุกใบของสินทรัพย์นั้นใช้ BIP-44 ไม่ใช่การรับรองโครงการ และไม่ได้ห้ามเชนอื่นสืบทอดคีย์เดียวกัน

3. แยกความหมายของแต่ละส่วนในเส้นทางอย่างแม่นยำ

ถือว่า / เป็นขอบเขตระหว่างโหนดแม่กับโหนดลูก และรักษาดัชนี ความลึก และเครื่องหมาย hardened ทุกตัว ใน BIP-32 คีย์ลูกปกติใช้ดัชนี 0 ถึง 2^31 - 1 ส่วนคีย์ลูกแบบ hardened ใช้ 2^31 ถึง 2^32 - 1 และมักเขียนด้วย ', h หรือ H ดังนั้น 7' จึงเข้ารหัสหมายเลขลูก 2^31 + 7 ไม่ใช่ลูกปกติ 7 ตรวจสอบว่า interface นำเข้าแทน root อย่างไร รับเส้นทางเต็มหรือ suffix แบบสัมพัทธ์ และคีย์แบบขยายที่ส่งออกอยู่ต่ำกว่าบางส่วนของเส้นทางนั้นแล้วหรือไม่

4. เชื่อมเส้นทางกับความหมายของที่อยู่หรือเอาต์พุต

สำหรับกระเป๋า Bitcoin ในตระกูล BIP-44 ให้ยืนยัน purpose, coin_type, account, change และ address_index แล้วตรวจประเภทสคริปต์กับเครือข่ายแยกต่างหาก BIP-49, BIP-84 และ BIP-86 จงใจใช้ค่า purpose ต่างกัน เพื่อไม่ให้เอาต์พุตที่เข้ากันไม่ได้ปรากฏปะปนในบัญชีเดียว สำหรับกระเป๋า multisig หรือ descriptor ต้องเก็บ key origin, master fingerprint, suffix การสืบทอด, threshold, ลำดับคีย์, วิธีสร้างสคริปต์ และ checksum เส้นทางเดียวไม่สามารถสร้างนโยบายทั้งหมดกลับมาได้

5. ทำซ้ำกระบวนการค้นหาบัญชีและที่อยู่

อย่าสรุปว่าสินทรัพย์สูญหายเพียงเพราะบัญชีเริ่มต้นว่าง การค้นหา BIP-44 ตรวจบัญชีตามลำดับและสแกนแขนงภายนอก โดยใช้ address gap ที่มีที่อยู่ไม่เคยใช้ต่อเนื่อง 20 รายการ กระเป๋าที่สร้างที่อยู่เลยช่วงนี้ ใช้แขนงภายในผิดจากปกติ ข้ามบัญชี หรือใช้โครงสร้างเฉพาะ อาจไม่ถูกพบในการสแกนปริยาย ค้นหาด้วยข้อมูล watch-only ที่เชื่อถือได้หรือสืบทอดแบบออฟไลน์เท่านั้น กำหนดขอบเขตชัดเจน บันทึกทุกแขนงที่ตรวจ และอย่าอัปโหลดวลีช่วยจำหรือคีย์ส่วนตัวแบบขยายไปยังเว็บไซต์

6. ตรวจสอบตัวระบุกระเป๋าก่อนอ้างอิงยอดคงเหลือ

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

7. กู้คืนหรือย้ายผ่านกระบวนการที่ควบคุมได้

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

ตัวอย่างการคำนวณ

การแยกเส้นทาง Bitcoin แบบ hardened

พิจารณา m/84'/0'/2'/1/17 แต่ละส่วนหมายถึง purpose สำหรับ native SegWit 84' ชนิดเหรียญ Bitcoin 0' บัญชี 2' แขนงภายในหรือเงินทอน 1 และดัชนีที่อยู่ 17 เนื่องจากดัชนีแบบ hardened ของ BIP-32 ต้องบวก 2^31 = 2,147,483,648 เลขคีย์ลูกที่จัดเก็บจึงเป็น 84' = 2,147,483,732, 0' = 2,147,483,648 และ 2' = 2,147,483,650 สองดัชนีสุดท้ายยังเป็นดัชนีปกติ 1 และ 17 การตก apostrophe หนึ่งตัวจะเลือกต้นไม้ย่อยคนละชุด ไม่ใช่เพียงการเขียนอีกแบบหนึ่ง

ช่วงว่างที่ทำให้ไม่พบที่อยู่ซึ่งเคยใช้

สมมติว่าแขนงภายนอกเคยใช้ที่อยู่ดัชนี 0 และ 5 จากนั้นกระเป๋าสแกนดัชนี 6 ถึง 25 และพบที่อยู่ซึ่งไม่เคยใช้ต่อเนื่อง 20 รายการ ตามกฎ address gap ของ BIP-44 การค้นหาจะหยุดที่ 25 ที่อยู่ซึ่งเคยใช้ที่ดัชนี 26 จึงอยู่หลังเงื่อนไขหยุดและไม่ถูกพบ การขยายการสแกนถึงขอบเขตที่ระบุและบันทึกไว้ช่วยค้นหาได้ แต่สาเหตุคือกระเป๋าต้นทางสร้างที่อยู่เลยช่วงว่างมาตรฐานโดยไม่มีการใช้งานคั่นกลาง

การนับขอบเขตการค้นหาเพื่อกู้คืน

บันทึกการกู้คืนไม่ได้ระบุว่าใช้ purpose ของ Bitcoin ใน 4 กลุ่มใด (44', 49', 84' หรือ 86') รวมทั้งบัญชีใดจาก 3 บัญชี แขนงใดจาก 2 แขนง และดัชนีใดใน 20 รายการแรก การค้นหารอบแรกจึงมีคีย์ปลายทางที่เป็นไปได้ 4 × 3 × 2 × 20 = 480 รายการ การพบที่อยู่ที่คุ้นเคยระบุได้เพียงเส้นทางผู้สมัคร ไม่ได้ยืนยันว่าพบทั้งกระเป๋า ยังต้องตรวจเงินทอน ดัชนีถัดไป บัญชีอื่น descriptor และประวัติรายการ การกำหนดทุกมิติให้ชัดทำให้ทำซ้ำการกู้คืนได้และไม่ต้องลองอย่างไร้ขอบเขต

เหตุใด xpub ระดับบัญชีจึงไม่ใช่ข้อมูลสาธารณะทั่วไป

สำหรับคีย์ลูก BIP-32 แบบ non-hardened ค่าสเกลาร์ส่วนตัวสัมพันธ์กันตาม child = parent + tweak (mod n) ในตัวอย่างอย่างง่ายโมดูโล 101 หากข้อมูลการสืบทอดจากคีย์สาธารณะแบบขยายระดับบัญชีกำหนด tweak = 37 และค่าสเกลาร์ส่วนตัวของคีย์ลูก 12 รั่วไหล จะได้ parent = 12 - 37 mod 101 = 76 BIP-32 จริงใช้ลำดับกรุป secp256k1 และค่า HMAC แต่ผลทางพีชคณิตเหมือนกัน คือ xpub ระดับแม่ร่วมกับคีย์ส่วนตัวลูกหลานแบบ non-hardened ที่ตรงกันอาจเปิดเผยคีย์ส่วนตัวแบบขยายระดับแม่และต้นไม้ย่อยได้ ขอบเขตบัญชีแบบ hardened ช่วยจำกัดความเสียหายนี้

ความเสี่ยงและข้อบกพร่องในการตรวจสอบ

  • วลีช่วยจำหรือ passphrase ไม่ถูกต้อง: การเปลี่ยนคำหนึ่งคำ ลำดับคำ กฎ Unicode normalization หรือ passphrase จะสร้าง root key อีกชุดที่อาจดูเหมือนถูกต้อง
  • รูปแบบการสืบทอดคีย์ไม่ถูกต้อง: การใช้ BIP-32 กับกระเป๋าที่ใช้รูปแบบวลีช่วยจำ เส้นโค้ง KDF หรืออัลกอริทึม master key อื่น จะได้คีย์ที่ไม่เกี่ยวข้องกัน
  • เครือข่ายหรือชนิดเหรียญไม่ถูกต้อง: root key ที่ถูกต้องใน namespace อื่นยังสร้างที่อยู่ที่ดูสมเหตุผลได้ ขณะที่เชนเป้าหมายยังไม่ได้รับการค้นหา
  • purpose หรือสคริปต์ไม่ถูกต้อง: การสลับ 44', 49', 84' หรือ 86' อาจทำให้ไม่พบประเภทเอาต์พุต Bitcoin ที่มีเงินอยู่จริง
  • ไม่มีเครื่องหมาย hardened: 7, 7', 7h และ 7H อาจถูกตีความต่างกันหรือถูกปฏิเสธ และคีย์ลูกแบบ hardened กับแบบปกติใช้แทนกันไม่ได้
  • ดัชนีบัญชีไม่ถูกต้อง: การตรวจเฉพาะบัญชี 0' อาจทำให้พลาดเงินหรือสิทธิ์ในบัญชีลำดับถัดไป
  • สับสนแขนงภายนอกกับแขนงเงินทอน: การสแกนเฉพาะแขนง 0 อาจพลาดเอาต์พุตเงินทอนในแขนง 1 หรือโครงสร้างแขนงเฉพาะของกระเป๋า
  • ดัชนีที่อยู่ไม่ถูกต้อง: การพบที่อยู่แรกที่คุ้นเคยไม่ได้พิสูจน์ว่าดัชนีถัดไป ดัชนีที่ข้าม หรือที่อยู่นำเข้าถูกตรวจครบแล้ว
  • ข้อผิดพลาดจากช่วงว่างของที่อยู่: ที่อยู่ภายนอกที่ไม่เคยใช้ต่อเนื่อง 20 รายการอาจทำให้การสแกน BIP-44 หยุดก่อนการใช้งานแบบไม่เป็นมาตรฐานในภายหลัง
  • บัญชีถูกข้าม: การค้นหาบัญชีตามลำดับอาจหยุดที่บัญชีซึ่งไม่เคยใช้และไม่ไปถึงบัญชีที่สร้างภายหลัง
  • นโยบาย Bitcoin ไม่ครบถ้วน: หากไม่มี descriptor สคริปต์ เกณฑ์ ลำดับคีย์ fingerprint และ checksum เส้นทางเพียงอย่างเดียวอาจสร้างเอาต์พุตที่มีเงินอยู่เดิมไม่ได้
  • ข้อตกลงเฉพาะของกระเป๋า: แอปอาจใช้โครงสร้างแบบเก่า แบบ proprietary หรือเพื่อการย้ายข้อมูลที่เครื่องมือกู้คืนทั่วไปไม่ได้ระบุไว้
  • การรั่วไหลจากคีย์สาธารณะแบบขยาย: xpub อาจเปิดเผยกลุ่มที่อยู่ ประวัติ ยอดคงเหลือ และที่อยู่ลูกแบบ non-hardened ในอนาคต
  • การเปิดเผยคีย์ส่วนตัวแบบขยายเกินจำเป็น: การนำเข้า xprv อาจเปิดเผยทั้งต้นไม้ย่อย ไม่ใช่เพียง leaf เดียวที่ต้องใช้ในการทำรายการ
  • คีย์แม่ BIP-32 ถูกเปิดเผย: xpub ระดับแม่ร่วมกับคีย์ส่วนตัวลูกแบบ non-hardened ที่ตรงกันหนึ่งคีย์ อาจเปิดเผยคีย์ส่วนตัวแบบขยายระดับแม่และต้นไม้ย่อยทั้งหมด
  • เชื่อรูปแบบที่อยู่มากเกินไป: ที่อยู่ที่ถูกต้องตามรูปแบบไม่ได้พิสูจน์ว่า seed เส้นทาง เครือข่าย สคริปต์ หรือผู้ถือสิทธิ์ถูกต้อง
  • สับสนเชนที่ใช้ที่อยู่เดียวกัน: คีย์ EVM เดียวอาจให้ที่อยู่เดียวกันในหลายเครือข่าย แต่ยอดคงเหลือ nonce โทเค็น และความเสี่ยงแยกจากกัน
  • ซอฟต์แวร์กู้คืนที่เป็นอันตราย: เว็บไซต์ ส่วนขยาย เครื่องมือแชร์หน้าจอ ตัวตรวจ clipboard keylogger หรืออุปกรณ์ปลอมอาจขโมย root secret
  • สับสนการ import กับ sweep: การ import ยังเก็บสิทธิ์เดิมไว้ ส่วน sweep หรือการย้ายจะสร้างธุรกรรม จึงต้องตรวจค่าธรรมเนียมและปลายทาง
  • กู้คืนไม่ครบขอบเขต: การพบยอดคงเหลือหนึ่งรายการโดยไม่ตรวจลายเซ็น เงินทอน สัญญาโทเค็น บทบาท การอนุมัติ คีย์ผู้ตรวจสอบ และข้อมูลสำรอง อาจทำให้สินทรัพย์ยังซ่อนอยู่หรือยังเสี่ยงอยู่

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

เส้นทางการสืบทอดคีย์เป็นรหัสผ่านหรือความลับหรือไม่?

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

วลีช่วยจำเดียวกันจะกู้คืนกระเป๋าเดียวกันโดยอัตโนมัติเสมอหรือไม่?

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

ชนิดเหรียญป้องกันการใช้คีย์บนเชนอื่นหรือไม่?

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

บัญชีที่กู้คืนแล้วไม่มียอดคงเหลือพิสูจน์ว่าสินทรัพย์หายไปหรือไม่?

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

เครื่องมือกู้คืนสามารถลองทุกเส้นทางที่เป็นไปได้อย่างปลอดภัยหรือไม่?

ไม่ พื้นที่ค้นหาอาจมีขนาดใหญ่ ข้อตกลงของกระเป๋าไม่ได้เป็นสากลทั้งหมด และการเปิดเผย root secret ให้เครื่องมือที่ไม่น่าเชื่อถือก็ถือเป็นเหตุการณ์สูญเสีย ใช้ข้อมูลที่มาของกระเป๋า fingerprint และที่อยู่ที่บันทึกไว้ การค้นหาออฟไลน์แบบมีขอบเขต และซอฟต์แวร์ที่ตรวจสอบแล้วเพื่อจำกัดการค้นหา

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

แหล่งที่มา

การนำทาง

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