Blockchain/Tahap IV · Kedalaman protokol/4.3 Jagaan dan privasi/Pelajaran 1
Dompet HD (BIP32, BIP44, BIP84, BIP86)
Mendapatkan pokok kunci daripada satu benih
BahanDompet dalam mod ujian (testnet atau signet), jangan sekali-kali benih sebenarDompet HD atau alat yang memaparkan laluan terbitanBuku nota
Ingin tahu
- Bagaimanakah satu benih boleh menjana kunci peribadi yang unik dan boleh dipulihkan dalam jumlah yang secara praktikalnya tidak terhad?
- Mengapakah satu kunci peribadi anak yang bocor, bersama kunci awam lanjutan (extended public key) induknya, boleh mendedahkan setiap kunci dalam cabang yang tidak diperkukuh (non-hardened)?
- Apakah perbezaan struktur yang membezakan alamat legacy P2PKH daripada alamat native SegWit atau Taproot dari segi kecekapan yuran?
Teroka
- Sebelum BIP32, yang diperkenalkan oleh Pieter Wuille pada tahun 2012, dompet menjana pasangan kunci rawak untuk setiap alamat baharu. Membuat sandaran dompet bermakna menyimpan setiap kunci peribadi satu demi satu; kehilangan satu fail sandaran bermakna dana yang berkaitan tidak dapat dipulihkan. BIP32 mengubah model ini dengan menerbitkan pokok kunci yang deterministik daripada satu benih induk. Seluruh sejarah kewangan kini berpaksikan benih tunggal itu, yang biasanya dijana daripada 128 atau 256 bit entropi dan ditulis sebagai 12 atau 24 perkataan.
- Laluan terbitan mengikut struktur yang ditetapkan dalam BIP44 (2014): `m / purpose' / coin_type' / account' / change / index`. Tanda apostrof menandakan terbitan diperkukuh (hardened derivation). Ini ialah mekanisme keselamatan yang kritikal. Dalam terbitan tidak diperkukuh, jika penyerang memperoleh kedua-dua kunci awam lanjutan induk (xpub) dan mana-mana satu kunci peribadi anak, dia boleh mengira kunci peribadi induk secara matematik. Terbitan diperkukuh memutuskan pautan ini; kunci peribadi anak yang bocor, digabungkan dengan xpub, tidak mendedahkan apa-apa tentang rahsia induk.
- BIP44 menyeragamkan tiga tahap pertama untuk membolehkan sokongan pelbagai mata wang dalam satu hierarki. Tahap `purpose'` mengenal pasti standard (contohnya, 44 untuk BIP44, 84 untuk BIP84). Tahap `coin_type'` membezakan aset; Bitcoin ialah indeks 0. Ini membolehkan satu benih mengurus mata wang kripto yang berbeza tanpa mencampurkan kunci masing-masing. Tahap `account'` menyusun dana ke dalam akaun berasingan, setiap satu dengan rantaian baki (change) sendiri. Kunci awam lanjutan (xpub) biasanya diterbitkan pada kedalaman ini.
- BIP84 mengemas kini standard untuk alamat native SegWit yang bermula dengan `bc1q`. Ia menetapkan purpose kepada 84. Alamat ini lebih cekap berbanding format legacy kerana data witness alamat ini diberi diskaun dalam pengiraan berat transaksi, sekali gus mengurangkan yuran. Laluan terbitan menjadi `m / 84' / 0' / account' / change / index`. Sebagai contoh, alamat luaran pertama bagi Akaun 0 diterbitkan pada `m/84'/0'/0'/0/0`. Struktur ini membolehkan pelayan menjana alamat penerimaan daripada xpub tanpa pernah menyentuh kunci peribadi.
- BIP86, satu standard terbitan berasingan yang ditulis oleh Ava Chow pada tahun 2021 untuk Taproot, menetapkan purpose kepada 86 dan menerbitkan alamat Taproot kunci tunggal yang bermula dengan `bc1p`. BIP86 meliputi output Taproot kunci tunggal tanpa pokok skrip (script tree). Oleh sebab laluan kunci (key path) Taproot juga boleh memegang kunci teragregat, seperti kunci MuSig2, output dompet berbilang pihak boleh kelihatan sama sekali seperti output kunci tunggal ini di rantaian (on-chain).
- Dompet mengimbas ke hadapan untuk mengesan alamat yang telah digunakan, dan biasanya berhenti selepas 'had jurang' (gap limit) sebanyak 20 alamat tidak digunakan berturut-turut dalam satu rantaian. Jika tiada transaksi ditemui dalam julat itu, dompet menganggap ia telah menemui semua kunci sedia ada bagi akaun tersebut. Untuk mengesahkan mekanisme ini, buka mana-mana dompet HD moden dan cari tetapan laluan terbitannya. Kenal pasti setiap tahap: purpose, jenis koin, akaun, baki (change) dan indeks. Terbitkan dua laluan berbeza daripada benih yang sama untuk mengesahkan bahawa kedua-duanya menghasilkan kunci yang berbeza tetapi masih boleh dipulihkan sepenuhnya daripada mnemonik asal.
Fakta utama
- BIP32 menerbitkan pokok kunci anak yang deterministik daripada satu benih induk.
- Terbitan diperkukuh (ditandakan dengan `'`) menghalang kebocoran kunci induk jika kunci peribadi anak dan xpub terjejas.
- Struktur laluan BIP44 ialah `m / purpose' / coin_type' / account' / change / index`.
- Purpose 84 sepadan dengan alamat native SegWit (`bc1q`), yang lebih jimat yuran berbanding format legacy.
- Purpose 86 sepadan dengan alamat Taproot kunci tunggal (`bc1p`).
- Dompet biasanya berhenti mengimbas selepas 20 alamat tidak digunakan berturut-turut (had jurang atau gap limit).
Latihan sembilan, enam, tiga, satu
9KumpulSenaraikan 9 laluan terbitan (derivation path) daripada dompet atau standard yang berbeza. Catat purpose, jenis koin (coin type) dan format alamat bagi setiap satu.
6KelompokkanKumpulkan 9 laluan itu kepada 6 kategori berdasarkan jenis skrip: legacy P2PKH, nested SegWit, native SegWit, Taproot, pelbagai mata wang, atau lain-lain.
3SaringRingkaskan 6 kategori itu kepada 3 sebab mengapa pembangun dompet memilih satu laluan terbitan berbanding yang lain.
1KristalkanTulis 1 ayat yang menerangkan bagaimana terbitan diperkukuh (hardened derivation) melindungi kunci induk daripada terdedah melalui kunci anak.
Semakan fakta
Tarikh, angka dan dakwaan telah disemak berbanding dengan sumber yang diterbitkan yang disenaraikan di bawah.
- P. Wuille, BIP32: Hierarchical Deterministic Wallets (2012)
- M. Palatinus & P. Rusnak, BIP44: Multi-Account Hierarchy for Deterministic Wallets (2014)
- P. Rusnak, BIP84: Derivation scheme for P2WPKH based accounts (2017)
- A. Chow, BIP86: Key Derivation for Single Key P2TR Outputs (2021)
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023), ch. 5