Penjelasan Standar BIP-39: Cara Kerja Frasa Seed Mnemonik
BIP-39 (Bitcoin Improvement Proposal 39) mendefinisikan standar untuk menghasilkan kalimat mnemonik — urutan 12 atau 24 kata yang umum dikenal — yang mengenkode entropy yang digunakan untuk menurunkan kunci wallet cryptocurrency. Dipublikasikan pada 2013 oleh Marek Palatinus, Pavol Rusnak, Aaron Voisine, dan Sean Bowe, BIP-39 telah menjadi standar dominan untuk backup wallet di hampir semua cryptocurrency utama.
Memahami BIP-39 pada tingkat teknis memberi Anda keyakinan bahwa backup frasa seed Anda andal dan membantu Anda mengevaluasi properti keamanan dari berbagai implementasi wallet.
Gambaran Umum BIP-39
BIP-39 menentukan dua proses:
- Pembuatan mnemonik — Mengubah entropy acak menjadi urutan kata yang bisa dibaca manusia.
- Derivasi seed — Mengubah kata mnemonik (ditambah passphrase opsional) menjadi seed biner 512-bit yang dapat digunakan dengan BIP-32 untuk pembuatan kunci deterministic hierarkis.
Kedua proses ini sengaja dipisahkan. Mnemonik adalah representasi yang ramah manusia; seed adalah input kriptografis untuk derivasi kunci.
Langkah 1: Pembuatan Entropy
Proses dimulai dengan blok data acak yang aman secara kriptografis (entropy). BIP-39 mendukung lima ukuran entropy:
| Entropy (bit) | Checksum (bit) | Total (bit) | Kata |
|---|---|---|---|
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
Dalam praktiknya, hampir semua wallet menggunakan 128 bit (12 kata) atau 256 bit (24 kata). Ukuran lain valid sesuai spesifikasi tetapi jarang diimplementasikan.
Kualitas sumber entropy sangat krusial. Jika generator angka acak bias, dapat diprediksi, atau memiliki entropy yang tidak memadai, frasa seed yang dihasilkan bisa ditebak penyerang. Lihat panduan Entropy dan Randomness kami untuk pembahasan rinci topik ini.
Sumber Entropy
- Hardware random number generators (HRNG) — Digunakan oleh hardware wallet seperti Ledger dan Trezor. Perangkat ini mengambil sampel fenomena fisik (thermal noise, shot noise) untuk menghasilkan keacakan sejati.
- CSPRNG sistem operasi —
/dev/urandompada Linux/macOS,CryptGenRandompada Windows, ataucrypto.getRandomValues()di browser. Ini adalah cryptographically secure pseudo-random number generators (CSPRNG) yang di-seed dari sumber entropy hardware. - Lemparan dadu — Beberapa pengguna menghasilkan entropy secara manual menggunakan dadu kualitas kasino, memetakan hasil lemparan ke biner atau indeks kata. Ini menghilangkan kepercayaan pada RNG software atau hardware mana pun.
Langkah 2: Perhitungan Checksum
Setelah entropy dihasilkan, checksum ditambahkan:
- Hitung hash SHA-256 dari byte entropy.
- Ambil
ENT / 32bit pertama dari hash (di mana ENT adalah panjang entropy dalam bit). - Tambahkan bit checksum ini ke entropy.
Untuk entropy 256-bit, ini menghasilkan 8 bit checksum, sehingga total menjadi 264 bit.
Checksum berfungsi sebagai mekanisme deteksi kesalahan: saat Anda memasukkan frasa seed ke wallet untuk pemulihan, wallet menghitung ulang checksum. Jika ada kata yang salah atau urutan kata salah, checksum akan gagal dan wallet menolak mnemonik tersebut. Ini melindungi dari kesalahan pencatatan tetapi tidak memperbaikinya — hanya mendeteksi bahwa ada yang salah.
Implikasi Checksum
Karena kata terakhir mnemonik mengenkode bit checksum, tidak semua kata valid sebagai kata terakhir untuk urutan tertentu. Untuk mnemonik 24 kata, kata terakhir mengenkode 3 bit entropy dan 8 bit checksum, jadi hanya 8 dari 2.048 kata yang mungkin valid untuk 23 kata pertama tertentu. Inilah alasan Anda tidak bisa bebas memilih kata terakhir.
Langkah 3: Pemetaan ke Kata
Bit gabungan entropy + checksum dibagi menjadi kelompok 11 bit. Setiap kelompok 11 bit merepresentasikan indeks dari 0 sampai 2.047, yang sesuai dengan sebuah kata di daftar kata BIP-39.
264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words
Daftar Kata Bahasa Inggris
Daftar kata BIP-39 bahasa Inggris berisi tepat 2.048 kata. Daftar ini dikurasi dengan cermat dengan properti berikut:
- Prefiks empat huruf unik — Tidak ada dua kata yang berbagi empat karakter pertama yang sama. Artinya
abandondapat diidentifikasi secara tegas sebagaiaban, berguna untuk backup logam yang ringkas. - Kosakata umum — Kata-kata sederhana dan dikenal luas dalam bahasa Inggris. Tanpa jargon, nama diri, atau istilah yang tidak umum.
- Menghindari kata yang mirip — Kata yang mudah tertukar (misalnya "woman" dan "women") dihindari jika memungkinkan.
- Panjang karakter — Semua kata memiliki panjang 3 sampai 8 karakter.
Daftar Kata Bahasa Lain
BIP-39 mendefinisikan daftar kata dalam sembilan bahasa:
| Bahasa | Status | Catatan |
|---|---|---|
| Inggris | Standar referensi | Dukungan paling luas |
| Jepang | Distandardisasi | Menggunakan katakana; spasi ideografis (U+3000) |
| Korea | Distandardisasi | |
| Spanyol | Distandardisasi | |
| Tionghoa (Sederhana) | Distandardisasi | |
| Tionghoa (Tradisional) | Distandardisasi | |
| Prancis | Distandardisasi | |
| Italia | Distandardisasi | |
| Ceko | Distandardisasi | |
| Portugis | Distandardisasi |
Catatan kompatibilitas penting: Mnemonik yang dihasilkan dari satu daftar kata tidak dapat dipulihkan menggunakan daftar kata bahasa lain. Indeks kata berbeda antarbahasa. Selalu catat bahasa yang digunakan saat membuat backup.
Langkah 4: Derivasi Seed (PBKDF2)
Kalimat mnemonik tidak dipakai langsung sebagai kunci kriptografis. Sebaliknya, ia melalui key stretching menggunakan PBKDF2-HMAC-SHA512:
PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)
Ini menghasilkan seed 512-bit yang menjadi input untuk derivasi kunci deterministic hierarkis BIP-32.
Properti Utama PBKDF2 pada BIP-39
Key stretching — 2.048 iterasi PBKDF2 menambah biaya komputasi untuk serangan brute-force. Walau 2.048 iterasi tergolong rendah menurut standar hashing password modern, keamanan utama berasal dari entropy mnemonik itu sendiri (128 atau 256 bit), bukan dari faktor key-stretching.
Dukungan passphrase — Salt mencakup passphrase opsional ("kata ke-25"). Jika passphrase tidak diberikan, salt hanya string "mnemonic". Jika passphrase diberikan, salt menjadi "mnemonic" + passphrase. Artinya setiap passphrase berbeda menghasilkan seed yang sepenuhnya berbeda — dan karena itu set kunci serta alamat yang berbeda — dari mnemonik yang sama.
Tidak ada validasi passphrase — Berbeda dengan checksum mnemonik, tidak ada checksum untuk passphrase. Passphrase apa pun dianggap valid. Memasukkan passphrase yang salah tidak menimbulkan error; sistem diam-diam menghasilkan wallet (kosong) yang berbeda. Ini fitur untuk plausible deniability tetapi berbahaya bagi pengguna yang lupa passphrase.
Normalisasi Unicode — Mnemonik dan passphrase dinormalisasi menggunakan UTF-8 NFKD (Normalization Form Compatibility Decomposition) sebelum diteruskan ke PBKDF2. Ini memastikan derivasi seed konsisten antarimplementasi, terlepas dari cara sistem operasi merepresentasikan karakter secara internal.
Langkah 5: Dari Seed ke Kunci (BIP-32)
Seed 512-bit dari PBKDF2 digunakan sebagai input ke BIP-32 (Hierarchical Deterministic Wallets):
- Seed diproses melalui HMAC-SHA512 dengan kunci "Bitcoin seed".
- 256 bit kiri menjadi master private key.
- 256 bit kanan menjadi master chain code.
- Keduanya membentuk master extended private key (xprv).
Dari sini, jalur derivasi BIP-44 mendefinisikan struktur pohon standar untuk menurunkan kunci dan alamat spesifik koin.
Contoh Praktis
Mari telusuri BIP-39 dengan contoh sederhana menggunakan 128 bit entropy (mnemonik 12 kata):
1. Hasilkan 128 bit entropy
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
(Ini entropy semua nol — hanya untuk ilustrasi. Jangan pernah digunakan dalam praktik.)
2. Hitung hash SHA-256
SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb
3. Ambil 4 bit pertama hash sebagai checksum
Byte pertama: 0x37 = 00110111. Empat bit pertama: 0011.
4. Tambahkan checksum ke entropy
128 bit nol + 0011 = total 132 bit.
5. Bagi menjadi kelompok 11 bit
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"
Hasil: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
Ini adalah test vector terkenal untuk entropy semua nol. Kata terakhir adalah "about" (bukan "abandon") karena bit checksum.
6. Turunkan seed dengan PBKDF2
PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)
Ini menghasilkan seed 512-bit yang digunakan untuk derivasi BIP-32.
Gunakan SafeSeed Seed Phrase Generator untuk melihat BIP-39 bekerja secara langsung. Hasilkan frasa seed dan lihat entropy, checksum, serta pemetaan kata secara real-time. Jalankan alat ini secara offline untuk keamanan maksimal.
Analisis Keamanan BIP-39
Keamanan Entropy
Untuk mnemonik 24 kata (256 bit entropy):
- Ruang pencarian adalah 2^256, sekitar 1.16 x 10^77 kemungkinan.
- Bahkan pada laju satu triliun (10^12) percobaan per detik, pencarian menyeluruh akan memakan sekitar 3.67 x 10^57 tahun — jauh lebih lama daripada usia alam semesta (1.38 x 10^10 tahun).
Untuk mnemonik 12 kata (128 bit entropy):
- Ruang pencarian adalah 2^128, sekitar 3.4 x 10^38 kemungkinan.
- Pada satu triliun percobaan per detik, pencarian menyeluruh akan memakan sekitar 10^19 tahun.
Keduanya tidak layak secara komputasi dengan komputasi klasik.
Pertimbangan PBKDF2
PBKDF2 dengan 2.048 iterasi menambah faktor konstan pada serangan brute-force, tetapi bukan penghalang keamanan utama. Beberapa peneliti keamanan mencatat bahwa 2.048 iterasi rendah dibanding fungsi derivasi kunci modern seperti Argon2 atau bcrypt. Namun, karena entropy mnemonik (128 atau 256 bit) adalah faktor dominan, ini menjadi kekhawatiran kecil dalam praktik.
Batasan Checksum
Checksum menangkap sebagian besar kesalahan pencatatan tetapi:
- Mendeteksi, bukan memperbaiki, kesalahan.
- Untuk mnemonik 12 kata, hanya ada 4 bit checksum, artinya kira-kira 1 dari 16 modifikasi acak akan lolos checksum.
- Checksum tidak melindungi dari pengurutan ulang kata yang kebetulan menghasilkan checksum valid.
Risiko Passphrase
Fitur passphrase sangat kuat tetapi menambah risiko:
- Jika Anda lupa passphrase, dana tidak dapat dipulihkan (tidak ada mekanisme "reset").
- Passphrase tidak divalidasi — string apa pun menghasilkan wallet valid.
- Penyerang yang memperoleh mnemonik tetapi tidak passphrase harus melakukan brute-force passphrase, yang memberi keamanan tambahan sebanding dengan entropy passphrase.
Kritik terhadap BIP-39
BIP-39 bukan tanpa kritik di komunitas pengembang Bitcoin.
Tanpa Versi
BIP-39 tidak menyertakan byte versi, artinya proses derivasi terkunci selamanya. Jika perbaikan masa depan membutuhkan fungsi derivasi kunci atau parameter berbeda, itu tidak bisa ditandai dalam format mnemonik. Karena itu beberapa wallet (terutama Electrum) menggunakan skema mnemonik mereka sendiri dengan versioning.
Keterikatan Ketat pada Daftar Kata
Mnemonik bergantung pada daftar kata yang persis sama. Jika daftar kata pernah diubah, mnemonik yang ada tidak bisa dipulihkan. Daftar kata telah dibekukan sejak distandardisasi, tetapi kekakuan ini dianggap batasan desain oleh sebagian pihak.
Key Stretching Lemah
Seperti disebutkan, 2.048 iterasi PBKDF2 dianggap lemah menurut standar modern. Walaupun ini tidak berdampak material pada keamanan mnemonik ber-entropy tinggi, ia memberi perlindungan lebih rendah untuk passphrase pendek atau yang dipilih pengguna.
Alternatif Electrum
Wallet Electrum menggunakan skema mnemonik sendiri yang mencakup versioning dan tidak bergantung pada daftar kata tetap. Mnemonik Electrum tidak kompatibel dengan BIP-39. Artinya frasa seed Electrum tidak bisa dipulihkan di wallet BIP-39, begitu juga sebaliknya. Selalu pahami standar yang digunakan wallet Anda.
Implementasi BIP-39
BIP-39 diimplementasikan di hampir semua wallet utama:
| Wallet | BIP-39 | Jumlah Kata | Catatan |
|---|---|---|---|
| Ledger | Yes | 24 | Hardware, secure element |
| Trezor | Yes | 12/24 | Juga mendukung SLIP-39 (Shamir) |
| Coldcard | Yes | 24 | Hardware khusus Bitcoin |
| MetaMask | Yes | 12 | Ekstensi browser |
| Trust Wallet | Yes | 12 | Mobile |
| Exodus | Yes | 12 | Desktop/mobile |
| Electrum | No | 12 | Menggunakan skema sendiri |
| BlueWallet | Yes | 12/24 | Mobile berfokus Bitcoin |
Pengujian dan Verifikasi
Test Vector Resmi
Spesifikasi BIP-39 menyertakan test vector — nilai entropy yang diketahui beserta kata mnemonik dan seed turunannya. Ini digunakan untuk memverifikasi bahwa implementasi sudah benar.
Anda dapat memverifikasi implementasi BIP-39 wallet Anda dengan memeriksa test vector resmi yang dipublikasikan di:
Memverifikasi Frasa Seed Anda
Untuk memverifikasi bahwa Anda telah mencatat frasa seed dengan benar:
- Hasilkan frasa seed di hardware wallet Anda.
- Tulis dengan cermat.
- Reset hardware wallet ke pengaturan pabrik.
- Pulihkan dari frasa seed yang Anda tulis.
- Verifikasi bahwa alamat yang sama dihasilkan.
- Konfirmasikan wallet dapat menandatangani transaksi.
Proses ini memastikan backup Anda benar sekaligus memastikan implementasi BIP-39 wallet bekerja seperti yang diharapkan.
FAQ
Apa arti BIP-39?
BIP adalah singkatan dari Bitcoin Improvement Proposal. BIP-39 adalah proposal nomor 39 yang mendefinisikan standar untuk membuat representasi mnemonik (yang dapat dibaca manusia) dari entropy kriptografis. Standar ini diperkenalkan pada 2013 dan telah diadopsi oleh hampir semua wallet cryptocurrency utama.
Apakah semua frasa seed 12 kata itu BIP-39?
Tidak. Beberapa wallet (terutama Electrum) menggunakan skema mnemonik sendiri yang berbeda dari BIP-39. Meski sama-sama menghasilkan frasa 12 kata dari daftar kata, proses encoding, daftar kata, dan derivasinya berbeda. Frasa BIP-39 tidak bisa digunakan pada skema Electrum dan sebaliknya. Selalu cek dokumentasi wallet Anda.
Bisakah saya membuat frasa seed BIP-39 sendiri dengan memilih kata?
Sebaiknya tidak. Meski secara teknis Anda bisa memilih 23 kata dan menghitung kata ke-24 yang valid (untuk memenuhi checksum), pemilihan kata oleh manusia tidak menghasilkan entropy yang cukup. Keamanan BIP-39 bergantung pada kata yang diturunkan dari data acak berkualitas tinggi, bukan dari pilihan manusia. Biarkan CSPRNG menghasilkan entropy.
Mengapa kata "mnemonic" digunakan sebagai salt PBKDF2?
String "mnemonic" adalah salt tetap yang ditentukan BIP-39. Saat passphrase digunakan, passphrase ditambahkan ke salt ini (misalnya, "mnemonicMyPassphrase"). Menggunakan salt tetap yang diketahui memastikan derivasi seed konsisten di semua implementasi tanpa memerlukan informasi tambahan selain mnemonik dan passphrase opsional.
Apakah BIP-39 hanya digunakan untuk Bitcoin?
Tidak. BIP-39 digunakan di hampir semua cryptocurrency utama, termasuk Ethereum, Litecoin, Cardano, Solana, dan banyak lainnya. Proses pembuatan mnemonik dan derivasi seed identik; yang berbeda hanya jalur derivasi kunci setelahnya (ditentukan oleh tipe koin BIP-44) antar chain.
Apa perbedaan BIP-39 dan SLIP-39?
BIP-39 menghasilkan satu mnemonik yang merepresentasikan seluruh secret. SLIP-39 (Satoshi Labs Improvement Proposal 39) mengimplementasikan Shamir's Secret Sharing, membagi secret menjadi beberapa share (misalnya, 3-dari-5). Jumlah share sesuai ambang dapat merekonstruksi secret, tetapi share yang kurang dari ambang tidak mengungkapkan informasi. SLIP-39 menggunakan daftar kata dan encoding yang berbeda dari BIP-39.
Berapa banyak mnemonik BIP-39 yang valid?
Untuk mnemonik 24 kata: 2^256 (sekitar 1.16 x 10^77). Untuk mnemonik 12 kata: 2^128 (sekitar 3.4 x 10^38). Angka ini merepresentasikan ruang entropy. Checksum membatasi kombinasi kata tetapi tidak mengurangi entropy — ini hanya berarti tidak setiap urutan acak 24 kata BIP-39 membentuk mnemonik valid.