Dalam artikel ini, kita akan berbicara tentang dompet deterministik, pembuatan kunci hierarkis, dan bagaimana cara kerjanya secara matematis dan dalam hal mana nyaman untuk dipraktikkan. Materi ini akan berguna bagi spesialis yang kegiatannya terkait dengan gateway pembayaran, dompet Bitcoin, dan toko koin lainnya. Selain itu, materi akan menarik bagi mereka yang tertarik dalam kriptografi elips dan skema penyebaran kunci tanda tangan elektronik.
Dompet deterministik
Pertama-tama, mari kita definisikan apa itu dompet deterministik. Ketika kita berbicara tentang pembuatan kunci, kita sering menggunakan kata "dompet", karena dalam konteks cryptocurrency, memiliki kunci pribadi adalah bukti kepemilikan koin, dan dalam hal ini, dompet dan kunci memiliki arti yang sama.
Dompet deterministik adalah dompet di mana semua kunci pribadi yang digunakan dihasilkan dari satu rahasia bersama oleh semua kunci. Keunikannya adalah bahwa dimungkinkan dari satu rahasia untuk menghasilkan sejumlah pasangan kunci untuk tanda tangan elektronik. Anda dapat menggunakan alamat baru untuk setiap pembayaran masuk dan mengubah.
Dengan mudah, kunci dompet seperti itu dapat dengan mudah ditransfer ke perangkat lain, membuat salinan cadangan dan kemudian dipulihkan, karena pada kenyataannya Anda hanya perlu memesan satu rahasia utama. Selain itu, semua kunci pribadi yang dihasilkan dari rahasia utama tidak saling terhubung. Tidak mungkin untuk melacak koneksi antara alamat yang dihasilkan (untuk menentukan bahwa mereka semua milik satu pengguna), dan memiliki kunci pribadi yang dihasilkan, Anda tidak dapat mengembalikan rahasia bersama.
Encoding Rahasia Dasar
Sekarang mari kita bicara tentang penyandian rahasia utama. Ada beberapa pendekatan standar yang didefinisikan dalam BIP39. Inilah yang disebut pengkodean Periksa Pengkodean dari rahasia utama menjadi frasa mnemonik - sekumpulan kata yang mudah ditulis di atas kertas dan, jika perlu, ingat. Saat masuk, dimungkinkan untuk memeriksa checksum, yaitu, untuk mengidentifikasi kesalahan, jika ada, dengan probabilitas yang agak tinggi.

Bagaimana cara kerjanya? Bahkan, Anda memiliki rahasia utama (Entropy) - data dari mana semua kunci pribadi dompet diperluas. Rahasia ini dapat memiliki panjang yang berbeda. Adapun checksum: untuk setiap 32 bit Entropy ada 1 bit checksum, yaitu, Checksum dihitung dengan rumus sebagai panjang Entropi dalam bit dibagi dengan 32.
Entropy digabungkan dengan checksum, yang dihitung sebagai hash ganda SHA-256 (SHA-2 dengan panjang 256 bit), setelah itu jumlah bit yang diperlukan terpotong. Data gabungan ditransfer ke sistem angka lain: dari biner ke sistem angka pada basis 2048 (seperti yang Anda lihat, 2048 adalah
) Dan jika Anda menambahkan panjang bit Entropy dan checksum, Anda mendapatkan kelipatan 11. Jadi, kita mendapatkan jumlah kata dalam frasa mnemonik keluaran.
Bahkan, data "diiris" dalam bagian 11-bit. Ada kamus 2048 kata (
) dimana persyaratan tertentu berlaku. Bahasa default kamus adalah bahasa Inggris, tetapi siapa pun dapat menggunakannya. Kata-kata tidak boleh melebihi panjang tertentu (biasanya batas hingga 7 karakter). Semuanya harus dikodekan dalam UTF-8 dengan normalisasi semua karakter. Wajib adalah keunikan setiap kata dalam empat karakter pertama.
Empat karakter pertama secara unik mengidentifikasi kata dalam kamus, dan karakter yang tersisa digunakan untuk melengkapi kata ini dalam bentuk yang nyaman untuk membaca, menghafal, dll. Dengan demikian, setiap bagian data yang terdiri dari 11 bit menerima kecocokan yang jelas dalam bentuk kata dari kamus. Jika Entropi rahasia Anda adalah 256 bit, maka data untuk penyandian akan menjadi 264 bit, dan frasa mnemonik Anda akan berisi 24 kata. Ini adalah pendekatan utama untuk mengenkripsi rahasia dompet di BIP39, yang paling sering digunakan dalam praktik.
Untuk membuat salinan cadangan di kemudian hari dan menggunakannya, Anda diundang untuk menulis frasa ini pada media eksternal. Kertas yang akan Anda simpan di tempat yang aman adalah yang terbaik. Jadi, Anda dapat memulihkan akses penuh ke semua kunci Anda.
Jenis Dompet Deterministik
Dompet deterministik datang dalam dua jenis. Pertimbangkan perbedaan utama mereka.
Yang pertama adalah yang paling sederhana. Rahasia utama di sini adalah digabungkan dengan indeks kunci anak yang ingin kita dapatkan, setelah itu data yang digabungkan di-hash. Paling sering ini terjadi menggunakan fungsi hash SHA-256.
Tipe kedua termasuk dompet deterministik hirarkis, dompet HD, prinsip-prinsip yang didefinisikan dalam BIP32, dan merupakan pendekatan yang sangat umum untuk pembangkitan kunci hirarkis.
Generasi deterministik
Pertimbangkan perbedaan antara jenis dompet ini dalam diagram.

Dompet deterministik biasa memiliki sejumlah benih, yang darinya sejumlah besar kunci privat dihasilkan secara langsung. Jumlah mereka hanya dapat dibatasi oleh dimensi indeks, yang disatukan dengan rahasia sebelum hashing. Biasanya 4 byte, yaitu, ruang opsi yang memungkinkan memungkinkan sekitar 4 miliar kunci dompet deterministik unik. Dalam praktiknya, ini harus cukup untuk situasi apa pun.
Generasi deterministik yang hierarkis
Mari kita beralih ke dompet deterministik hirarkis, skema penyebaran kunci yang disajikan dalam bentuk yang disederhanakan sejauh ini. Ada seed, dari mana sepasang kunci utama diperoleh secara langsung. Jika dalam dompet deterministik biasa kita mendapatkan kunci pribadi, maka di sini kita mendapatkan sepasang kunci. Selain itu, ada tingkat hierarki, di mana masing-masing kami menghitung indeks untuk menghasilkan kunci anak. Kami juga dapat membangun cabang kunci publik dan cabang kunci pribadi.
Tingkat hirarki
Mengenai dompet HD, perlu dicatat bahwa menurut aturan BIP32 di setiap level hierarki, node pemijahan memiliki tiga objek: kunci privat, kunci publik, dan kode rantai yang digunakan untuk menelurkan level hierarki berikutnya.
Skema generasi hierarkis
Mari kita pertimbangkan secara lebih rinci skema pembuatan kunci untuk BIP32.

Semuanya dimulai dengan seed, juga disebut seed master, dari mana tingkat nol hierarki dihitung - sepasang kunci master dan kode rantai.
Sejumlah besar pasangan kunci dengan indeks spesifik dapat dihasilkan dari sepasang kunci utama. Tingkat hierarki baru sedang dibentuk, yang digunakan untuk menghasilkan akun. Misalkan satu pengguna memiliki seed dan ingin membuat beberapa alamat yang akan berbeda satu sama lain. Koin-koin dari alamat-alamat ini tidak akan dicampur, tidak akan dipublikasikan bersama-sama, dan dalam transaksi yang sudah selesai di antara mereka tidak akan mungkin untuk menemukan koneksi. Kunci-kunci ini akan digunakan sepenuhnya secara terpisah satu sama lain. Di salah satu akun, grup utama akan digunakan untuk anggaran kerja, di akun lain untuk anggaran pribadi, dan akun lain untuk pembukuan hitam. Koin tidak akan saling bercampur.
Level hierarki berikutnya mendefinisikan rantai generasi kunci yang berbeda. Paling sering, rantai dengan indeks 0 dan 1. Rantai dengan indeks 0 akan menghasilkan kunci akhir untuk membentuk alamat untuk pembayaran yang masuk, dan rantai dengan indeks 1 akan menghasilkan dompet untuk koin yang dikirim oleh pengguna untuk diri mereka sendiri, yaitu perubahan. Ini diperlukan agar dompet di tingkat program membedakan pembayaran yang dikirim dari luar dari perubahan, menghitung perubahan dalam saldo setiap transaksi dan menyusun daftar visual dengan riwayat semua pembayaran. Ini menyederhanakan pengembangan dompet dan penggunaannya untuk pembayaran sehari-hari.
Kode otentikasi pesan berbasis hash
Sekarang mari kita beralih ke komponen matematika dari proses pembuatan kunci hirarkis. Untuk mulai dengan, pertimbangkan kode otentikasi pesan berbasis hash. Ini adalah kelas yang berbeda untuk menghitung fungsi hash. Ini berbeda karena dibutuhkan dua nilai pada input, dan bukan satu. Nilai pertama adalah kunci pribadi, dan yang kedua adalah pesan itu sendiri.
K adalah kuncinya
m - pesan
opad, ipad - beberapa nilai konstan yang diperlukan untuk menghasilkan kunci berbeda satu sama lain pada tahap hashing yang berbeda.
Sebagai fungsi hash, SHA-512 digunakan.
Kekhasannya adalah bahwa untuk menggunakan HMAC, Anda harus memiliki kunci rahasia untuk mendapatkan nilai hash yang benar dari pesan tersebut.
Jadi, untuk menghitung nilai hash HMAC, nilai kunci XOR adalah dengan nilai konstanta ipad, setelah itu hasilnya hash. Pesan disatukan dengan nilai ini, setelah itu kunci XOR dihitung dengan nilai konstan, disatukan dengan nilai hash, dan kemudian di hash lagi. Hasilnya, kami mendapatkan 512 bit dari nilai hash.
Fungsi Derivasi
Mari kita lihat beberapa fungsi yang digunakan dalam menghitung kunci hirarkis.

Pertama-tama, kami tertarik untuk mengubah master seed menjadi sepasang master key. Setelah itu, Anda perlu mendapatkan kunci pribadi anak dan kunci publik anak dari kunci induk pribadi. Dalam kasus kedua, fungsi yang sama persis digunakan seperti pada yang pertama, tetapi penggandaan angka dengan titik dasar ditambahkan, oleh karena itu tidak akan dianggap secara terpisah. Langkah selanjutnya adalah mendapatkan anak publik dari kunci induk publik. Perlu dicatat bahwa tidak mungkin untuk mendapatkan anak pribadi dari kunci publik orang tua. Keterbatasan ini disebabkan oleh sifat-sifat tertentu yang melekat pada dompet HD, yang akan kami pertimbangkan lebih lanjut.
Jadi, mari kita melihat masing-masing fungsi pembangkitan secara terpisah.

Untuk mendapatkan kunci master dari master sid, fungsi HMAC digunakan, di mana string konstan "Bitcoin seed" ditransmisikan sebagai kunci, dan data rahasia utama itu sendiri sebagai pesan. Dengan demikian, nilai hash 512 bit diperoleh, yang kami anggap sebagai dua bagian: kiri dan kanan. Sisi kiri adalah kunci privat master, dan sisi kanan adalah kode rantai. Selanjutnya, nilai-nilai ini akan digunakan untuk menghasilkan tingkat kunci anak berikutnya.
Untuk mendapatkan master publik, cukup gandakan nilai dari titik dasar dengan nilai kunci pribadi master. Seperti yang Anda lihat, ini terjadi dengan analogi dengan kunci biasa dalam sekelompok titik pada kurva elips.
Sekarang mari kita lihat bagaimana kunci privat anak berasal dari private parent.

Kami akan menggunakan fungsi HMAC lagi. Sebagai kunci, kami meneruskan kode rantai tingkat hierarki saat ini, dan sebagai pesan, rangkaian, di mana bagian pertama akan menjadi kunci induk pribadi dikalikan dengan titik dasar. Bahkan, ini merupakan gips ke titik dan serialisasi dari titik ini. Penggabungan terjadi dengan indeks kunci anak yang ingin kami terima, berseri pada 32 bit, yaitu, 4 byte.
Berdasarkan hasil fungsi HMAC, kami mendapatkan nilai I, dan sekali lagi kami mempertimbangkannya secara terpisah: bagian kiri dan kanan dari nilai output adalah 256 bit. Kemudian kunci pribadi anak
kami menghitung dengan menambahkan ke nilai output kiri
nilai kunci pribadi induk. Penambahan dilakukan modulo n, di mana n adalah urutan titik dasar dari kurva elips, sehingga tidak melebihi nilai maksimum kunci privat. Jadi, kami menerima kunci pribadi anak.
Dengan demikian, kode rantai anak akan sama dengan nilai output yang tepat dari fungsi HMAC, yaitu
. Jika kami ingin menemukan kunci publik anak dari kunci induk pribadi, kami mengalikan nilainya
oleh nilai titik dasar pada kurva elips. Jadi kami mendapatkan kunci publik
.
Bagaimana kita menghitung kunci publik anak dari kunci induk publik?

Di sini perhitungannya akan sedikit berbeda. Kami melewati hierarki rantai level hirarki saat ini sebagai kunci ke fungsi HMAC, setelah itu kami membuat serial kunci publik induk dan menyatukannya dengan indeks yang diinginkan secara serial menjadi 32 bit. Data input diperoleh dengan cara yang persis sama seperti pada kasus sebelumnya. Untuk menghitung kunci publik, kami mengambil sisi kiri nilai output dari fungsi HMAC, dan menganggapnya sebagai 256 bit yang diambil modulo urutan titik dasar, membawanya ke titik pada kurva eliptik, yaitu, kalikan dengan titik dasar, dan kemudian tambahkan hasilnya dengan kunci publik induk . Hasil penambahan juga akan menjadi poin, dan itu akan menjadi kunci anak publik. Kode rantai untuk kunci ini akan menjadi sisi kanan dari nilai output dari fungsi HMAC.
Kunci yang cocok satu sama lain
Ini dapat menimbulkan pertanyaan logis tentang bagaimana kunci privat dan publik yang diperoleh dengan cara yang berbeda akan saling berhubungan. Apakah benar-benar mungkin untuk mendapatkan nilai yang sama persis dari kunci publik yang dihasilkan oleh cara publik dengan mengambil kunci pribadi yang diperoleh dengan cara lain dan mengalikannya dengan titik dasar? Ini mudah diverifikasi.

Jika kita mengingat bagaimana kita menghitung kunci anak pribadi, dan mengalikannya dengan titik dasar, yaitu, mengarah ke fungsi titik, dan kemudian mengingat perhitungan kunci publik anak dan membandingkan perhitungan ini, kita akan melihat bahwa jika kita menganggap kunci publik induk sebagai produk dari induk pribadi kunci ke titik dasar, maka kita akan melihat bahwa perhitungan yang sama dilakukan, hanya dalam urutan yang berbeda.
Dalam satu kasus, kami menambahkan kunci pribadi dan dikalikan dengan titik dasar, dan dalam kasus kedua, kami pertama kali mengalikan nilai dengan titik dasar, lalu menambahkannya dan mendapatkan hasilnya. Berdasarkan fakta bahwa operasi penambahan titik pada kurva eliptik adalah aditif, kita dapat mengatakan bahwa kedua nilai ini sama - kita akan mendapatkan kunci publik yang sama dihitung dengan dua cara.
Contoh Kunci Publik
Demi kepentingan, kita dapat melihat contoh kunci publik yang diperoleh untuk nilai tes dan perhitungan BIP32. Jika Entropi kami terdiri dari 128 bit, maka dalam sistem bilangan heksadesimal akan terlihat seperti gambar di bawah ini.

Nilai yang sama dikodekan dalam frasa mnemonik BIP39 akan terlihat seperti 12 kata yang ditampilkan. Jika Anda menggunakan frase mnemonik ini sebagai master seed untuk pembuatan kunci hierarkis, Anda akan mendapatkan kunci privat master dengan kode rantai 256-bit yang sesuai.
Diperpanjang kunci
Ada juga konsep-konsep seperti kunci publik diperluas dan kunci pribadi diperluas. Bagaimana ini digunakan? Untuk lebih memahami, kami menggambarkan situasi visual.
Katakanlah kita memiliki pengguna tertentu dan beberapa layanan. Layanan mentransfer pembayaran, misalnya dalam bitcoin, ke pengguna dengan frekuensi tertentu. Baik pengguna dan layanan tertarik untuk menggunakan alamat baru untuk setiap pembayaran, untuk mempersulit pengamat eksternal untuk menetapkan fakta dan membingungkan sejarah interaksi satu sama lain.
Dalam kasus paling sederhana, akan terlihat seperti ini: pengguna untuk setiap pembayaran masuk menghasilkan pasangan kunci baru, menghitung alamat yang dilewatinya ke layanan, setelah itu layanan dapat menghasilkan transaksi dan melakukan pembayaran. Namun, ini tidak nyaman bagi salah satu pihak jika intensitas pembayaran ini tinggi.
Kunci publik yang diperluas
Dalam situasi yang sama, kunci publik yang diperluas (xPubKey) membantu menghilangkan ketidaknyamanan. Pengguna dapat mengaktifkan layanan pihak ketiga untuk menghasilkan alamat alih-alih sendiri yang akan diketahui oleh layanan, tetapi hanya pengguna yang akan memiliki kunci pribadi. Layanan ini dapat menghasilkan sejumlah alamat tanpa sepengetahuan pengguna dan mengirim dana kepada mereka, dan pengguna dapat, dengan nyamannya, menggunakan kunci pribadi dan mendapatkan akses ke salah satu alamat ini.
Bagaimana cara kerjanya? Pengguna perlu membuat akun baru di level kedua hirarki kunci, menghitung untuknya kunci publik dan kode rantai untuk level saat ini. Setelah itu, Anda perlu mentransfer kode kunci dan kode publik ke layanan. Untuk kenyamanan, Base58Check Encoding diperkenalkan, yang kami bicarakan (ada versi khusus di sini). Selanjutnya, kunci publik, kode rantai, dan checksum disatukan. Ini semua dikodekan dalam sistem angka dasar 58 dan kami mendapatkan kunci publik diperluas sudah dikodekan sesuai dengan standar tertentu. Dimulai dengan karakter "xpub", yang mudah dikenali. Ini akan terlihat seperti yang ditunjukkan pada gambar.

Suatu layanan dapat menerima kunci semacam itu dan menggunakan kunci publik untuk pengguna melalui BIP32, menerima alamat dari mereka dan membayarnya. Namun, hanya pengguna yang dapat menghitung kunci pribadi yang sesuai.
Derivasi yang mengeras
Dalam pembuatan kunci secara hierarkis, ada yang namanya derivasi yang diperkeras. Ini adalah pendekatan yang tidak memungkinkan perhitungan kunci publik anak dari kunci publik induk yang sesuai. Ini berbeda dari generasi normal karena di dalamnya kami menggunakan rangkuman titik berseri sebagai kunci publik induk sebagai pesan ke fungsi HMAC, dan dalam derivasi yang diperkeras kami menggunakan serialisasi kunci privat induk.
Selain itu, perhitungan indeks berbeda. Indeks dalam generasi normal secara langsung diserialisasi ke 32 bit, dan dalam derivasi mengeras itu sedikit dikonversi: nilai konstan ditambahkan ke dalamnya
yang menetapkan bit paling signifikan menjadi 1 (menjadi mudah untuk membedakan antara tipe derivasi). Dengan demikian, ruang varian kunci yang mungkin sama untuk generasi normal dan derivasi yang diperkeras, dan sama dengan
.
Dengan demikian, memiliki kunci publik induk dan derivasi yang diperkeras, tidak mungkin untuk menghitung kunci publik anak. Jika penyerang menerima kunci publik induk, maka ia tidak akan dapat menghitung kunci anak. Oleh karena itu, ia tidak akan dapat menghitung alamat dan hubungannya dengan kunci induk yang diterima. Dalam kasus derivasi normal, yaitu, dalam biasa, fungsi seperti itu dapat digunakan dan melacak hubungan alamat di antara mereka sendiri.Jalur generasi
Mari kita bicara tentang cara kunci bisa dibuat.
Pada setiap tingkat hierarki, ada indeks spesifik yang mendefinisikan aspek-aspek dari generasi kunci. Jalur dari kunci Master ke kunci akhir dapat ditulis melalui garis miring sebagai indeks. Jika kita berbicara tentang kunci pribadi, maka rekaman dimulai dengan "m" kecil, dan jika kita berbicara tentang menghasilkan kunci publik, maka dengan "M" besar. Jika indeks ditunjukkan oleh tanda kutip, maka harus dipahami bahwa kita berbicara tentang derivasi yang diperkeras, tanpa tanda kutip - derivasi normal.Pertimbangkan salah satu jalur pembuatan kunci populer yang digunakan dalam BIP32, di mana kunci hierarkis ditentukan.
Ini menggunakan jalur di mana kunci master adalah tingkat nol dari hierarki. Berikut ini adalah indeks akun yang menunjuk pengguna yang sama, diikuti oleh rantai di mana ada rantai alamat yang diterbitkan di luar untuk menerima pembayaran yang masuk, dan dengan indeks 1, rantai itu akan dibuat di mana pengguna mengirimkan pembayaran kepada dirinya sendiri (lebih sering semua ini adalah penyerahan diri). Indeks akhir akan digunakan untuk menghasilkan kunci dari mana alamat akan dihitung.Untuk menghitung kunci pertama dengan indeks 0 sesuai dengan standar BIP32, kita akan memiliki m, 0 dengan generasi yang dikeraskan, rantai - 0, indeks - 0 (m / 0 '/ 0/0). Jadi kita mendapatkan jalur untuk kunci yang dihasilkan secara hierarkis.Ada saran untuk meningkatkan Bitcoin, itu disebut BIP43, yang melibatkan penulisan ke tingkat pertama hierarki angka peningkatan, yang menawarkan jalur spawn baru (m / bip_number '/ *).
Dengan demikian, BIP44 muncul, yang menggunakan fitur kalimat sebelumnya, yaitu, indeks 44 ditulis untuk tingkat hierarki pertama, dan mengusulkan peningkatan berikut: dalam indeks tingkat hierarki kedua, catat nilai tertentu yang akan sesuai dengan jenis koin yang kami gunakan untuk dompet ini. Sekarang, kunci untuk mata uang yang berbeda dapat digunakan dan digunakan dalam satu dompet.
Untuk Bitcoin, jalannya akan terlihat seperti "m / 44 '/ 0' / 0 '/ 0/0", untuk Bitcoin testnet - "m / 44' / 1 '/ 0' / 0/0", untuk Litecoin - "m / 44 '/ 2' / 0 '/ 0/0 ", untuk Dash -" m / 44' / 5 '/ 0' / 0/0 ". Menariknya, Ethereum menggunakan kurva elips yang persis sama untuk menghitung kunci dan menandatangani secara digital dan untuk dompetnya jalan akan terlihat seperti "m / 44 '/ 60' / 0 '/ 0/0".Ada peningkatan lain - BIP45. Perbaikan ditujukan untuk menentukan aturan untuk menghasilkan kunci jika digunakan dalam dompet multisignature dan pembentukan alamat menggunakan BIP16, yaitu P2SH. Ini termasuk kalimat BIP43 dan menunjukkan indeks 45 di tingkat pertama hierarki, pada tingkat kedua hirarki, itu memerlukan indikasi penandatangan (cosigner).
Misalnya, ada aturan 3-dari-5 multi-tanda tangan. Karena itu, ada 5 penandatangan, tetapi untuk menghabiskan koin, Anda memerlukan setidaknya 3 tanda tangan. Dengan demikian, masing-masing penandatangan akan memiliki dompet HD dengan seed master sendiri, dan akan menunjukkan nomor seri di jalurnya. Itu dapat dihitung sebagai indeks ketika menyortir kunci yang dihasilkan pada tingkat pertama hirarki setiap pengguna. Misalkan, pada tingkat pertama, setiap pengguna membuat kunci, mereka saling bertukar, mengurutkan dan mencari tahu siapa yang memiliki indeks untuk tingkat kedua hierarki. Ini diperlukan untuk lebih menghilangkan kebutuhan untuk berinteraksi dengan cara ini, dan segera menghasilkan alamat dengan benar dan mengetahui nomor seri Anda.Artinya, Anda dapat menukar kunci publik yang diperluas satu kali sehingga Anda dapat secara independen, terlepas dari anggota grup lainnya, membentuk alamat multisignature dan menerima pembayaran.Pertanyaan
Mari beralih ke pertanyaan umum.- Bagaimana benih induk berbeda dalam koin yang berbeda?Seed adalah angka yang dihasilkan secara acak, beberapa urutan bit, atau itu adalah frase mnemonik yang dihasilkan, misalnya, menurut BIP39, yang digunakan untuk menghasilkan kunci. Ini dapat digunakan untuk satu koin dan untuk koin lainnya - tidak perlu menggunakan frasa mnemonik yang berbeda untuk mata uang yang berbeda. Selain itu, ada BIP44, yang mendefinisikan aturan untuk menghasilkan kunci untuk mata uang yang berbeda dari frasa mnemonik yang sama. Kunci pribadi ini tidak akan berpotongan satu sama lain, tetapi akan digunakan untuk alamat berbeda dari mata uang yang berbeda.- Kamus dari BIP39, di mana 2048 kata untuk frasa mnemonik distandarkan? Bisakah saya menggunakannya di semua dompet dan aplikasi?Faktanya adalah bahwa standar ini dijelaskan untuk BIP39. Untuk BIP39 terdapat kamus: Inggris, dua Jepang, Cina, Italia, Rusia, Ukraina, dll. Yaitu, jika beberapa aplikasi mengklaim bahwa ia menggunakan BIP39 dan memungkinkan untuk mengimpor dan mengekspor frasa mnemonik, itu artinya BIP39 juga menggunakan serangkaian kata-kata. sama. Namun, ada dompet yang tidak menggunakan BIP39, tetapi modifikasi sendiri. Anda perlu melihat deskripsi dompet dan menggunakan standar, atau pengembangan Anda sendiri, atau pengembangan layanan yang ditawarkan dompet.- Pada pertukaran dan penyimpanan terpusat seperti Coinbase, apakah kunci dompet untuk semua pengguna dihasilkan dari frasa umum yang sama untuk semua atau tidak?Sulit dikatakan karena mereka tidak membuka struktur internal mereka, tetapi layanan baru yang muncul dapat membuat kunci secara terpisah, baik menggunakan standar BIP32, atau menggunakan versi modifikasi. Layanan-layanan yang ada sebelum standar untuk pembuatan kunci hirarkis muncul, kemungkinan besar, terus menghasilkan hanya kunci pribadi yang terpisah. Mungkin ini adalah cara mereka lebih mudah dikelola jika ada pergantian semua kunci yang besar."Apakah kuncinya adalah titik pada kurva elips, yaitu, dua angka X dan Y yang sangat besar?"Kunci publik - ya, ini adalah titik pada kurva elips, dan kunci pribadi adalah angka alami yang menunjukkan berapa kali Anda perlu menambahkan titik dasar dengan diri Anda sendiri. Kunci publik itu sendiri terdiri dari dua nilai - ini adalah koordinat X dan Y, yang masing-masing memiliki ukuran 256 bit.- Apa itu "cast to point" dan serialisasi titik dan indeks?Pengurangan ke titik berarti ada nomor alami, yang kami anggap sebagai kunci pribadi. Kami menambahkan titik basis dengan diri kami berkali-kali, yaitu, dalam kelompok titik pada kurva eliptik, hanya operasi penambahan yang ditentukan, maka kami dapat mengalikan titik dengan angka alami. Serialisasi suatu titik berarti merekam dengan cara tertentu dua koordinat. Ini mungkin catatan terkompresi, tetapi tidak perlu. Dikompresi dalam arti bahwa salah satu koordinat, yaitu Y, diubah menjadi tanda, maka data disubstitusikan ke dalam persamaan dan melihat di mana titiknya adalah: di atas atau di bawah. Dalam hal serialisasi indeks, Anda perlu memahami bahwa angka reguler, yang, tergantung pada ukurannya, dapat ditulis dalam byte atau bit. Semakin besar angkanya, semakin banyak data yang dibutuhkan. Dalam hal perhitungan yang kami periksa,sejumlah panjang tertentu diperlukan. Anda harus membuat cerita bersambung hingga panjang tertentu - 4 byte. Sebagai hasilnya, ini merujuk pada casting indeks ke nomor 4-byte. Jika nilai-nilai senior tetap kosong di sana, maka mereka akan menjadi nol.- Siapa yang membuat perhitungan ini untuk fungsi derivasi dari dompet HD? Mengapa rumus seperti itu di mana ada pembenaran dan di mana Anda dapat membaca lebih lanjut tentang ini?Anda dapat membaca lebih lanjut di BIP32, jika Anda tertarik pada frasa mnemonik, kemudian di BIP39, dll. Anda dapat membuka GitHub dan menemukan pengguna dengan nama panggilan Bitcoin. Dia memiliki repositori Bitcoin tempat kode sumber Bitcoin disimpan, dan ia memiliki repositori BIP (sumber), di mana semua saran untuk meningkatkan Bitcoin dicatat.Mereka datang dengan ide melakukan perhitungan dengan cara ini, karena terikat pada sekelompok titik kurva elips. Ketika mereka ingin mencapai fungsionalitas yang memungkinkan penghitungan secara terpisah cabang-cabang kunci publik dan pribadi, sambil mempertahankan korespondensi mereka satu sama lain, ini adalah opsi implementasi yang paling mudah. Bahkan, para pengembang menggunakan opsi paling sederhana, yang memungkinkan Anda untuk mencapai properti menarik menggunakan kriptografi yang telah diuji oleh waktu. Penulis perbaikan yang diusulkan banyak. Komunitas Bitcoin, para partisipan yang menawarkan semacam pengembangan peningkatan dan transformasi matematika, cukup besar.- Derivasi yang dikeraskan selalu hanya di tingkat kedua hierarki?Itu semua tergantung situasi. Dalam hal menghasilkan kunci untuk multi-signature, masuk akal untuk melakukan derivasi yang diperkeras hanya pada tingkat pertama hierarki. Dalam BIP44, derivasi yang diperkeras diterapkan pada tiga level pertama: pada level pertama adalah jumlah BIP itu sendiri, yang kedua adalah nomor akun yang relevan, yang ketiga adalah nomor mata uang, di mana juga masuk akal. Misalkan Anda tidak akan menyukainya jika Anda memposting kunci publik, dan melaluinya orang dapat melacak semua alamat Anda dalam Bitcoin. Jika Anda menggunakan akun untuk menerima pembayaran dari layanan tertentu, maka Anda dapat mengungkapkan kunci ini dan Anda tidak perlu derivasi yang diperkeras di sini.- Di mana dimungkinkan untuk menerapkan pembuatan kunci hierarkis?Anda dapat menerapkannya saat bekerja dengan pertukaran sehingga pertukaran selalu membayar Anda ke alamat yang berbeda. Meskipun dalam hal ini lebih baik mengatur semua ini secara manual. Ini paling relevan untuk dompet digital sehari-hari, karena ini adalah proses yang sangat sederhana untuk membuat cadangan kunci pribadi dan mengembalikan dompet. Generasi kunci untuk mata uang yang berbeda juga didukung, dan standar itu sendiri sudah digunakan dalam implementasi dompet digital yang berbeda. Kunci antara dompet ini nyaman untuk ditransfer menggunakan frasa mnemonik yang sama.Topik ini dibahas dalam salah satu kuliah kursus blockchain online " Hierarchical Key Generation ".