BIP39 adalah standar untuk mengubah data acak menjadi kata-kata pemulihan yang dikenal sebagai Seed Phrase. Dari kata-kata itu dan passphrase opsional, yaitu rahasia tambahan, dompet menghitung seed: data awal untuk membuat kunci. Ini membantu mencadangkan akses ke bitcoin; kata-katanya sendiri tidak menyimpan koin atau riwayat pembayaran.
Alice membuat dompet yang memakai BIP39 lalu menyimpan kata-kata pemulihannya dengan aman sesuai petunjuk. Kemudian ponselnya rusak. Bitcoin miliknya tidak hilang dari jaringan; ia kehilangan perangkat yang menyimpan kunci untuk menandatangani pembayaran. Pada perangkat pengganti yang tepercaya, ia dapat menggunakan fitur pemulihan dalam dompet yang kompatibel. Kata-kata yang sama dalam urutan yang sama, disertai passphrase yang sama jika sebelumnya digunakan, menghasilkan seed yang sama. Prosedur berikutnya membuat kembali kunci privat yang diperlukan, lalu dompet menemukan pembayaran di jaringan Bitcoin. Ini bukan proses masuk ke akun yang kata sandinya bisa diatur ulang oleh tim dukungan. Jika Alice memakai passphrase, ia juga membutuhkannya; PIN ponsel lama tidak dapat menggantikannya. Saldo nol setelah pemulihan belum tentu berarti koin hilang: selain kata-kata dan passphrase, akun yang dipilih serta pengaturan pemulihan juga perlu diperiksa. Itulah sebabnya seluruh proses sebaiknya diverifikasi sebelum menyimpan jumlah yang besar. [1] [5] [13] [14]
Kata-kata lebih mudah disalin dan diperiksa oleh manusia daripada representasi data komputer yang panjang. Marek Palatinus, Pavol Rusnak, Aaron Voisine, dan Sean Bowe mengusulkan cara mengubah keacakan yang dihasilkan komputer menjadi bentuk yang mudah disalin dengan tangan. Proposal ini bertanggal 10 September 2013 dan berstatus Deployed dalam spesifikasinya. Kata-kata harus berasal dari masukan acak yang berkualitas; jangan mengarangnya berdasarkan kalimat favorit. Cara itu akan menghasilkan Brainwallet dengan rahasia buatan manusia yang mudah diperkirakan. Node Bitcoin tidak memeriksa BIP39: node memvalidasi transaksi dan blok, bukan cara dompet membuat kuncinya. [1]
Catatan yang baik hanya berguna jika Anda dapat memulihkan dompet darinya. Sebelum menyimpan dana dalam jumlah besar, periksa prosedur pemulihan yang disarankan produsen pada perangkat tepercaya. Selain urutan kata yang tepat, simpan passphrase yang diperlukan, informasi dompet, serta pengaturan derivasi atau penandatanganan jika ada. Pada dompet biasa dengan satu tanda tangan, pemegang cadangan lengkap dan passphrase yang diperlukan dapat menurunkan kunci tanpa perangkat asal; pada Multisig, persyaratan tentang kunci tambahan dan aturan lainnya tetap harus dipenuhi. Foto, salinan di penyimpanan awan, printer, atau riwayat papan klip dapat membuka rahasia tersebut kepada orang dan layanan lain. Kertas dan logam memiliki keterbatasan fisik yang berbeda; bahan apa pun tidak dengan sendirinya mencegah pencurian. [9] [13] [14]
Demi kompatibilitas, BIP39 sangat menyarankan daftar kata bahasa Inggris: banyak dompet tidak mendukung daftar lain. Menerjemahkan cadangan tidak mempertahankan dompet asal karena frasa itu sendiri menjadi masukan derivasi. Perhatikan pula sistem lain. Electrum menggunakan mekanisme versi tersendiri untuk cadangan bawaannya; kata-kata yang tampak serupa tidak otomatis menjadikannya BIP39. SLIP39 adalah format berbeda dengan daftar 1 024 kata dan aturan tersendiri mengenai jumlah bagian yang diperlukan untuk pemulihan. Ini bukan sekadar memotong cadangan BIP39 menjadi beberapa bagian. Membagi 24 kata ke dalam beberapa amplop tidak menghasilkan Shamir Secret Sharing dan justru dapat melemahkan perlindungan serta kemampuan pemulihan. Anda harus selalu mengetahui format cadangan yang sebenarnya. [1] [11] [12]
Prosesnya dimulai dari entropi, yaitu data acak sepanjang ENT = 128, 160, 192, 224, atau 256 bit. Lalu ditambahkan checksum berupa CS = ENT/32 bit pertama dari hasil SHA-256 atas data awal. Gabungan ini dibagi menjadi kelompok-kelompok 11 bit, dan setiap kelompok menentukan satu kata. Karena itu, rumus MS = (ENT+CS)/11 menghasilkan tepat 12, 15, 18, 21, atau 24 kata. Dua belas kata mewakili 128 bit keacakan dan 4 bit pemeriksaan; jadi, tidak seluruh 132 bit tersebut merupakan rahasia yang independen. Untuk 24 kata, susunannya adalah 256+8 bit. Keandalan cadangan berawal dari pembangkit keacakannya, bukan dari seberapa aneh kata-katanya terlihat. [1]
Setiap kelompok 11 bit memilih satu entri dari daftar terurut yang berisi 2 048 kata. Jadi, kata pertama bukanlah kunci privat pertama: seluruh kata bersama-sama menyatakan data awal dan checksumnya. Dalam daftar bahasa Inggris, empat huruf pertama cukup untuk membedakan setiap kata. Namun, itu bukan aturan umum untuk semua bahasa, dan bukan anjuran untuk memendekkan cadangan sesuka hati saat pemulihan. Mengubah urutan, mengganti kata dengan sinonim, atau menerjemahkannya akan mengubah data masukan. Kadang checksum menjadi tidak valid; kadang terbentuk cadangan lain yang tetap valid. Karena itu, kata-kata dan urutannya harus disimpan persis. [1] [2]
Komputer perlu mengetahui karakter apa yang sebenarnya diterimanya. BIP39 mensyaratkan normalisasi Unicode NFKD, lalu pengodean UTF-8, baik untuk frasa cadangan maupun passphrase. NFKD menyamakan beberapa bentuk penulisan karakter, misalnya dengan menguraikan huruf tertentu yang memiliki tanda diakritik. Dua bentuk penulisan yang berbeda dapat menghasilkan nilai yang sama setelah normalisasi, tetapi kemiripan tampilannya saja tidak menjamin hal itu. Urutan kata, spasi, dan karakter dalam passphrase tetap penting. Metode normalisasi yang berbeda dapat menurunkan seed yang berbeda saat pemulihan. Implementasi acuan dan vektor uji publik membantu memeriksa apakah program mengikuti prosedur yang ditetapkan. [1] [3] [4]
Fungsi PBKDF2 menerima dua masukan terpisah. Masukan password berisi kata-kata cadangan yang sebenarnya. Masukan kedua disebut salt, yaitu parameter tambahan dalam derivasi kriptografis: isinya adalah teks harfiah “mnemonic” yang langsung disambung dengan passphrase tanpa pemisah. Kata-kata cadangan itu sendiri tidak dimasukkan lagi ke bagian ini. Kedua masukan dinormalisasi dengan NFKD dan dikodekan dalam UTF-8. BIP39 menetapkan HMAC-SHA512, 2 048 iterasi, dan hasil sepanjang 512 bit, yaitu 64 byte. Jika passphrase tidak digunakan, salt tetap “mnemonic”; hanya passphrase yang kosong. Perhitungan ini bukan dekripsi kata-kata dan tidak menciptakan keacakan independen yang baru. Karena itu, setelah kata-kata bocor, iterasi saja tidak melindungi passphrase yang mudah ditebak. [1] [10]
BIP39 berakhir pada seed sepanjang 64 byte. Standar berikutnya, BIP32, biasanya menggunakan HMAC-SHA512 dengan kunci tetap “Bitcoin seed” untuk menurunkan kunci privat utama dan chain code sepanjang 32 byte dari seed tersebut. Chain code adalah data tambahan yang digunakan bersama kunci untuk menurunkan kunci-kunci berikutnya. Kedua nilai ini menjadi titik awal pohon kunci. Aturan seperti BIP44, BIP49, BIP84, dan BIP86 menetapkan jalur derivasi dan jenis skrip yang berbeda. Saat pemulihan, Anda bisa memasukkan kata-kata dan passphrase yang benar, tetapi tetap melihat saldo nol jika program mencari akun, cabang, atau jenis alamat yang berbeda. Gap limit juga penting: ini adalah batas jumlah alamat berurutan yang belum digunakan yang masih ditelusuri program saat mencari. Nama dompet asal, informasi akun, jalur derivasi, atau Output Descriptor dapat melengkapi informasi yang tidak terkandung dalam kata-kata itu sendiri. [5] [6] [7] [8] [9] [14]
Passphrase adalah masukan rahasia tambahan untuk menurunkan seed. Ini bukan PIN perangkat, dan BIP39 tidak dapat memberi tahu bahwa Anda memasukkan passphrase yang salah: hasil tetap dihitung untuk nilai lain. Salah ketik yang mengubah masukan setelah normalisasi biasanya mengarah ke dompet lain, sehingga dana Anda tidak terlihat di sana. Sebaliknya, bentuk penulisan berbeda yang menghasilkan nilai NFKD sama akan menurunkan seed yang sama. Orang yang memperoleh kata-kata cadangan beserta informasi untuk mengenali dompet yang dicari dapat mencoba berbagai kandidat passphrase secara offline. Jika Anda menggunakan passphrase, pastikan passphrase itu cukup kuat, dimasukkan dengan cara yang tepercaya, dan memiliki cadangan tersendiri yang andal. Penyimpanan terpisah bertujuan mengurangi risiko keduanya dicuri bersama, bukan menjadikan passphrase rahasia yang hilang bersama Anda. [1] [13]
Checksum membantu mendeteksi salah ketik, tetapi tidak membuktikan siapa pemilik cadangan atau apakah cadangan dibuat dengan aman. Panjangnya 4 bit untuk 12 kata dan 8 bit untuk 24 kata. Karena itu, urutan kata yang dipilih secara acak merata dari daftar yang sesuai akan lolos pemeriksaan dengan peluang masing-masing 1/16 dan 1/256. Banyak kesalahan dapat terdeteksi, tetapi tidak semuanya; checksum juga tidak memperbaiki kesalahan dengan sendirinya. Penyerang dapat membuat cadangan lain dengan checksum yang valid. Spesifikasi mewajibkan peringatan jika checksum tidak cocok dan membedakan pemeriksaan kata-kata dari proses penurunan seed itu sendiri. Karena itu, tangani checksum yang tidak valid sesuai dompet asal dan formatnya, bukan dengan memasukkan cadangan asli ke pemeriksa daring. [1]
Kata-kata, checksum, dan seed
BIP39 menggabungkan 128 bit entropi dengan 4 bit checksum. Hasilnya, 132 bit, dibagi menjadi 12 kelompok berisi 11 bit yang memilih kata-kata dari daftar. Kata-kata cadangan lalu menjadi masukan password untuk PBKDF2-HMAC-SHA512; salt dibentuk dari prefiks harfiah “mnemonic” dan passphrase jika digunakan. Setelah normalisasi NFKD dan pengodean UTF-8, seed 512 bit diturunkan dengan 2 048 iterasi. Checksum tidak menambahkan keacakan.
Untuk gambaran yang lebih utuh, baca entri ini bersama Seed Phrase, HD Wallet, BIP39 passphrase, Trezor, Bitcoin, BIP39 checksum. Entri ini juga dirujuk dari Seed Phrase, HD Wallet, Cold Storage, BIP (Bitcoin Improvement Proposal).
01Apakah BIP 39 merupakan bagian dari konsensus Bitcoin?+
Tidak. Ini adalah konvensi dompet untuk menuliskan keacakan dan menurunkan seed. Node Bitcoin memvalidasi transaksi dan blok tanpa perlu mengetahui apakah kuncinya dibuat menggunakan BIP 39.
02Apakah setiap frasa 12 atau 24 kata kompatibel dengan BIP 39?+
Tidak. Jumlah kata saja tidak cukup: daftar dan urutan kata, checksum, normalisasi NFKD, serta penurunan seed harus sesuai. Untuk memulihkan dompet asal, Anda juga memerlukan passphrase yang benar jika pernah digunakan, serta jalur derivasi dan jenis skrip yang sesuai.