Spesifikasi BIP-39 terutama menjelaskan algoritma dan proses untuk menghasilkan dompet deterministik berdasarkan mnemonik (seperangkat kata yang mudah diingat).
Spesifikasinya terdiri dari dua bagian utama:
Cara menghasilkan mnemonik.
Cara mengubah mnemonik yang dihasilkan menjadi benih biner.
Berikut ini adalah cara membuat dompet deterministik dengan terlebih dahulu menjelaskan masing-masing dua bagian tersebut.
Membuat mnemonik
Proses algoritmik untuk menghasilkan mnemonik adalah sebagai berikut:
Prosesnya adalah sebagai berikut:
Buat urutan acak (entropi) 128 hingga 256 bit (ukuran langkah 32 bit)
Jalankan SHA256 pada urutan acak yang dihasilkan pada langkah sebelumnya untuk menghasilkan nilai Hash, dan ambil N bit pertama dari nilai Hash (panjang entropi / 32, misalnya 128 bit, maka N = 4) sebagai Checksum dari urutan acak.
Tambahkan Checksum pada akhir rangkaian acak yang dihasilkan pada langkah pertama, sehingga misalnya pada gambar rangkaian acak dengan Checksum adalah 128 + 4 = 132 bit.
Pisahkan barisan acak dari langkah sebelumnya dengan segmen 11-bit (split), sehingga untuk barisan dengan panjang entropi 128-bit, dihasilkan 12 segmen (132/11 = 12).
Pada titik ini memetakan setiap nilai yang berisi segmen 11-bit ke kamus yang telah ditentukan sebelumnya yang terdiri dari 2048 kata.
Kelompok kata terakhir yang dihasilkan berdasarkan urutan pemotongan adalah mnemonik.
Pembuatan benih dari mnemonik
Setelah pembuatan mnemonik kita dapat menghasilkan benih dengan menggunakan algoritma fungsi pembangkitan kunci PBKDF2.
PBKDF2 memerlukan dua parameter: mnemonik dan garam. Tujuan dari garam adalah untuk mempersulit proses cracking, dan di BIP-39 kita dapat memperkenalkan frasa sandi sebagai faktor keamanan tambahan untuk melindungi benih.
“PBKDF2 adalah bagian dari seri Standar Kriptografi Kunci Publik (PKCS) Laboratorium RSA, khususnya PKCS #5 v2.0, juga diterbitkan sebagai RFC 2898 Satuan Tugas Rekayasa Internet.”
Mengikuti pembuatan mnemonik di atas, diagram berikut menunjukkan algoritma pembuatan benih.
Parameter pertama PBKDF2 adalah mnemonik yang dihasilkan di atas.
Parameter kedua PBKDF2 adalah garam, yang umumnya terdiri dari string dan rangkaian opsional string sandi yang disediakan pengguna.
PBKDF2 menggunakan algoritma HMAC-SHA512 yang menggunakan 2048 hash untuk menghasilkan nilai 512-bit sebagai seed.
Menghasilkan dompet HD dari seed
Seed yang dihasilkan di atas akan digunakan sebagai Root Seed dari dompet HD, dan Root Seed dari dompet HD mana pun dapat membuat ulang seluruh dompet HD.
Memasukkan Root Seed ke dalam algoritma HMAC-SHA512 menghasilkan hash 512-bit, 256 bit kiri digunakan sebagai Master Private Key dan 256 bit kanan sebagai Master Chain Code. Setelah itu, Master Public Key (264 bit) dapat dihasilkan oleh Master Private Key m.
Seperti yang Anda lihat dari gambar di atas, kunci HD dihasilkan dengan parameter berikut.
Kunci Pribadi Induk atau Kunci Publik Induk; (keduanya merupakan kunci ECDSA 256 bit yang tidak terkompresi).
Kode Rantai Induk 256 bit.
Nomor indeks bilangan bulat 32-bit.
Selain itu, proses di atas bersifat rekursif dan Child Private Key pada diagram dapat digunakan sebagai Parent Private Key di tingkat berikutnya.
Dengan memasukkan (Kunci Publikk Induk, Kode Rantai Induk, Nomor Indeks) ke dalam algoritma HMAC-SHA512, kita dapat menghasilkan subkuncinya, dan kita dapat menyesuaikan Nomor Indeks untuk menghasilkan beberapa subkunci pada tingkat yang sama.
Tentang Kunci yang Diperluas
Karena fungsi derivasi kunci ini bersifat searah, semua subkunci tidak dapat digunakan untuk memperoleh kunci induk atau kunci saudaranya pada tingkat yang sama, hanya kunci induk dan kode rantai induk (yang dihasilkan dari kunci tingkat Induk dan kode rantai Induk) yang dapat digunakan untuk memperoleh semua subkunci dan kode subrantai, dan selanjutnya menghasilkan kunci dan alamat subpublik yang sesuai untuk menandatangani transaksi.
Kombinasi Kode Kunci dan Rantai disebut kunci yang diperluas, dan kunci yang diperluas dapat digunakan untuk menghasilkan semua cabang dari sana ke bawah.
Kunci yang disediakan dalam kunci yang diperluas dapat berupa kunci pribadi atau kunci publik, dikombinasikan dengan kode rantai yang masing-masing disebut Kunci Pribadi yang Diperluas dan Kunci Publik yang Diperluas, dan masing-masing dicatat sebagai (k, c) dan (K, c), dengan kunci publik K = titik(k).
Kita dapat memperoleh kunci publik yang diperluas dari kunci pribadi yang diperluas dan bukan sebaliknya, sehingga untuk beberapa skenario transaksi (misalnya, e-commerce), kunci publik dan alamat baru dapat dibuat untuk setiap transaksi untuk menerima pembayaran, sedangkan kunci pribadi yang diperluas dapat disimpan dalam dompet kertas atau dompet perangkat keras untuk penandatanganan transaksi offline yang aman. Seperti yang bisa kita lihat, keamanan kunci publik yang diperluas relatif tinggi, dan diagram berikut menunjukkan mekanisme transmisi kunci publik induk yang diperluas untuk mendapatkan kunci privat anak dan menghasilkan kunci publik anak:




