Spesifikasi BIP-39 terutamanya menghuraikan algoritma dan proses untuk menjana dompet deterministik berdasarkan mnemonik (satu set perkataan yang mudah diingat).
Spesifikasi ini terdiri daripada dua bahagian utama:
Cara menjana mnemonik.
Cara menukar mnemonik yang dijana kepada benih binari.
Berikut ialah cara menjana dompet deterministik dengan menerangkan setiap dua bahagian ini terlebih dahulu.
Penjanaan Mnemonik
Proses algoritma untuk menjana mnemonik adalah seperti berikut:
Prosesnya adalah seperti berikut:
Cipta urutan rawak (entropi) sebanyak 128 hingga 256 bit (langkah 32 bit)
Lakukan SHA256 pada urutan rawak yang dijana pada langkah sebelumnya untuk menjana nilai Hash, dan ambil N bit pertama daripada nilai Hash (panjang entropi / 32, contohnya 128 bit, kemudian N = 4) sebagai Kod Semak bagi urutan rawak.
Tambahkan Kod Semak pada penghujung urutan rawak yang dijana pada langkah pertama, jadi untuk contoh dalam rajah, urutan rawak dengan Kod Semak ialah 128 + 4 = 132 bit.
Pisahkan urutan rawak daripada langkah sebelumnya mengikut segmen 11-bit (belah), jadi untuk urutan sepanjang 128 bit entropi, 12 segmen dihasilkan (132 / 11 = 12).
Pada ketika ini, petakan setiap nilai yang mengandungi segmen 11-bit kepada kamus yang telah ditetapkan sebanyak 2048 perkataan.
Kumpulan perkataan akhir yang dijana mengikut urutan pemotongan ialah mnemonik.
Penjanaan Benih daripada Mnemonik
Selepas penjanaan mnemonik, kita boleh menjana benih dengan menggunakan fungsi penjanaan kunci algoritma PBKDF2.
PBKDF2 memerlukan dua parameter: satu mnemonik dan satu garam (salt). Tujuan garam adalah untuk menyukarkan penyahsulitan, dan dalam BIP-39 kita boleh memperkenalkan frasa laluan sebagai faktor keselamatan tambahan untuk melindungi benih.
"PBKDF2 adalah sebahagian daripada siri Piawaian Kriptografi Kunci Awam (PKCS) RSA Laboratories,
khususnya PKCS #5 v2.0, turut diterbitkan sebagai RFC 2898 Internet Engineering Task Force."
Mengikuti penjanaan mnemonik di atas, rajah berikut menunjukkan algoritma untuk penjanaan benih.
Parameter pertama PBKDF2 ialah mnemonik yang dijana di atas.
Parameter kedua PBKDF2 ialah garam, yang umumnya terdiri daripada rentetan dan gabungan pilihan rentetan sifer yang dibekalkan pengguna.
PBKDF2 menggunakan algoritma HMAC-SHA512, yang menggunakan 2048 hash untuk menghasilkan nilai 512-bit sebagai benih.
Penjanaan Dompet HD daripada Benih
Benih yang dijana di atas akan digunakan sebagai Benih Akar bagi dompet HD, dan Benih Akar bagi mana-mana dompet HD boleh mencipta semula keseluruhan dompet HD.
Memasukkan Benih Akar ke dalam algoritma HMAC-SHA512 menghasilkan hash 512-bit, di mana 256 bit kiri digunakan sebagai Kunci Peribadi Induk (Master Private Key) dan 256 bit kanan sebagai Kod Rantai Induk (Master Chain Code). Selepas itu, Kunci Awam Induk (Master Public Key) (264 bit) boleh dijana oleh kunci peribadi induk m.
Seperti yang anda lihat daripada rajah di atas, kunci HD dijana dengan parameter berikut.
Kunci Peribadi Induk atau Kunci Awam Induk; (kedua-duanya ialah kekunci ECDSA 256 bit tidak termampat).
Kod Rantai Induk 256 bit.
Nombor indeks integer 32-bit.
Selain itu, proses di atas adalah rekursif dan Kunci Peribadi Anak dalam rajah boleh digunakan sebagai Kunci Peribadi Induk pada peringkat seterusnya.
Dengan memasukkan (Kunci Awam Induk, Kod Rantai Induk, Nombor Indeks) ke dalam algoritma HMAC-SHA512, kita boleh menjana subkunci, dan kita boleh melaraskan Nombor Indeks untuk menjana berbilang subkunci pada peringkat yang sama.
Mengenai Kunci Lanjutan (Extended Key)
Oleh kerana fungsi terbitan kunci ini adalah sehala, semua subkunci tidak boleh digunakan untuk menerbitkan kunci induk atau kunci saudari mereka pada peringkat yang sama, hanya kunci induk dan kod rantai induk (yang dijana daripada kunci induk ibu bapa dan kod rantai) boleh digunakan untuk menerbitkan semua subkunci dan subkod rantai, dan seterusnya menjana subkunci awam dan alamat yang sepadan untuk menandatangani urus niaga.
Gabungan Kunci dan Kod Rantai dipanggil kunci lanjutan, dan kunci lanjutan boleh digunakan untuk menjana semua cawangan dari situ ke bawah.
Kunci yang disediakan dalam kunci lanjutan boleh sama ada kunci peribadi atau kunci awam, digabungkan dengan kod rantai yang dipanggil Kunci Peribadi Lanjutan dan Kunci Awam Lanjutan, masing-masing, dan dinyatakan sebagai (k, c) dan (K, c), masing-masing, di mana kunci awam K = point(k).
Kita boleh menerbitkan kunci awam lanjutan daripada kunci peribadi lanjutan dan bukannya sebaliknya, jadi untuk beberapa senario urus niaga (cth. e-dagang), kunci awam baharu dan alamat boleh dijana untuk setiap urus niaga bagi menerima bayaran, manakala kunci peribadi lanjutan boleh disimpan dalam dompet kertas atau dompet perkakasan untuk menandatangani urus niaga luar talian yang selamat. Seperti yang kita lihat, keselamatan kunci awam lanjutan agak tinggi, dan rajah berikut menunjukkan mekanisme penghantaran kunci awam induk lanjutan untuk menerbitkan kunci peribadi anak dan menjana kunci awam anak:



