Tidak suka iklan? Pergi Bebas Iklan Hari ini

Frasa Benih BIP39 Apa yang Sebenarnya Dimaksud dengan 12 Kata Ini dan Cara Penghasilan Dompet HD Berfungsi

Diterbitkan pada

Sebuah daftar kata BIP39 dienkripsi sebagai kata-kata — struktur kriptografi di balik pemulihan dompet. Panduan ini memecah matematika daftar kata, langkah benih PBKDF2, jalur turunan BIP44, mengapa dompet berbeda dalam alamat, dan kegagalan keamanan yang perlu diketahui oleh pengembang.

Frasa Benih BIP39: Apa yang Sebenarnya Dimaksud dengan 12 Kata Ini dan Cara Kerja Penurunan Dompet HD 1
IKLAN · HAPUS?

Sebuah mnemonic BIP39 adalah data acak 128 atau 256 bit, dienkripsi sebagai kata-kata yang dapat dibaca manusia menggunakan daftar kata tetap sebanyak 2048 kata. Itulah trik utamanya. "Keseruan"nya hanyalah bahwa kata-kata lebih mudah ditulis di kertas daripada string heksadesimal — secara kriptografi, tidak ada hal istimewa dalam kata-kata itu sendiri.

Yang menarik dimulai dari tumpukan empat lapisan yang dibangun di atas enkoding tersebut: BIP39 (daftar kata dan enkoding), BIP32 (pengambilan kunci hierarkis deterministik), BIP43 (konvensi bidang tujuan), dan BIP44 (struktur koin/akun/alamat). Penjelasan kebanyakan menggabungkan keempatnya. Penjelasan ini memisahkan keempatnya.

Daftar kata: 11 bit per kata, termasuk checksum

Itu Daftar kata BIP39 bahasa Inggris telah tepat 2048 kata. 211 = 2048, sehingga setiap kata mengandung 11 bit informasi. Frasa 12 kata membawa total 132 bit; frasa 24 kata membawa 264 bit.

Bukan semua bit tersebut adalah entropi. Beberapa bit terakhir dari kata terakhir adalah checksum — bagian pertama ENT/32 dari SHA256(entropy_bytes), di mana ENT adalah panjang entropi dalam bit:

Panjang frasaBit entropi (ENT)Bit checksum (CS = ENT/32)Total bit
12 kata1284132
15 kata1605165
18 kata1926198
21 kata2247231
24 kata2568264

Checksum adalah alasan mengapa frasa yang hampir valid gagal. Ubah satu bit entropi dan byte checksum berubah, membuat frasa tidak valid. Ini menangkap kesalahan transkripsi — khususnya yang terjadi di bit checksum. Wallet yang memvalidasi sebelum menurunkan kunci akan menolak frasa secara keseluruhan. Beberapa tidak memvalidasi; mereka hanya secara diam-diam menurunkan wallet dari entropi yang buruk.

Pemetaan entropi ke kata dalam Python:

import hashlib, os

# Generate 128 bits of entropy
entropy = os.urandom(16)  # 16 bytes = 128 bits

# Compute checksum: first 4 bits of SHA256(entropy)
h = hashlib.sha256(entropy).digest()
checksum_bits = format(h[0], '08b')[:4]  # first 4 bits of SHA256 output

# Combine entropy bits + checksum bits
all_bits = format(int.from_bytes(entropy, 'big'), '0128b') + checksum_bits
# all_bits is now 132 bits

# Split into 11-bit groups -> 12 word indices (0-2047)
word_indices = [int(all_bits[i:i+11], 2) for i in range(0, 132, 11)]
# Look up each index in the BIP39 word list to get the mnemonic

Mnemonic bukan kunci: langkah PBKDF2

Di sini kebanyakan penjelasan salah. 12 kata tersebut bukan kunci pribadi dan tidak digunakan secara langsung untuk penandatanganan. Mereka adalah enkoding sementara. Sebelum bahan kunci ditarik, mnemonic diperpanjang melalui PBKDF2-HMAC-SHA512:

import hashlib

mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
passphrase = ""  # optional; empty string = no passphrase

seed = hashlib.pbkdf2_hmac(
    'sha512',
    mnemonic.encode('utf-8'),                    # password: the mnemonic words
    ('mnemonic' + passphrase).encode('utf-8'),   # salt: always "mnemonic" + passphrase
    2048,                                         # iterations
    dklen=64                                      # 512 bits output
)
# seed is 64 bytes (512 bits) -- this is what actually seeds key derivation

Dua hal yang perlu diperhatikan:

  • Garam selalu berupa string literal "mnemonic" dikonkatenasi dengan kata sandi. Kata sandi kosong berarti garam hanya "mnemonic" — tidak ada mode terpisah "tidak ada kata sandi".
  • Kata sandi benar-benar mengubah hasil seed. 12 kata yang sama dengan kata sandi "A" vs "a" menghasilkan wallet yang sama dengan alamat yang sama. Ini adalah fitur "kata ke-25": kata sandi memungkinkan Anda mempertahankan kemungkinan penyangkalan (dua wallet dari satu frasa), tetapi kehilangan kata sandi adalah permanen, bahkan dengan 12 kata tersebut.

Dari seed ke kunci utama: BIP32

Seed 512-bit dimasukkan ke HMAC-SHA512 dengan string kunci tetap "Bitcoin seed". Output 64 byte dibagi menjadi dua bagian 256 bit:

import hmac, hashlib

master = hmac.new(b'Bitcoin seed', seed, hashlib.sha512).digest()
master_private_key = master[:32]   # left 256 bits: the actual EC private key
master_chain_code  = master[32:]   # right 256 bits: used for all child derivation

Kode rantai adalah alasan HD wallet berfungsi: ini mencegah kunci yang diturunkan ditebak bahkan jika kunci induk diketahui. Tanpa itu, mengetahui kunci publik induk dan kunci privat anak akan mengungkapkan semua kunci anak. Dengan kode rantai, penurunan kunci anak membutuhkan kunci induk dan kode rantai sebagai input — dan untuk penurunan yang diperkuat, kunci privat induk secara langsung.

Secara bersamaan, master_private_key + master_chain_code membentuk kunci privat ekstensi utama, dienkripsi sebagai string Base58Check. Kunci ekstensi publik yang sesuai adalah xprv... — berguna untuk wallet hanya pengamatan yang perlu menurunkan alamat tanpa mengungkapkan materi kunci privat. xpub... Jalur penurunan BIP44: m/44’/60’/0’/0/0 didekripsi

BIP44 menentukan hierarki penurunan lima tingkat. Berikut ini

— jalur alamat pertama Ethereum — dibagi secara komponen per komponen: m/44’/60’/0’/0/0 Indeks heksadesimal

TingkatNilaiKunci akar utamaArti
mTujuan
44'0x8000002CTujuan BIP44. Penurunan yang diperkuat (tanda petik = 0x80000000 + indeks).Tipe koin
60'0x8000003CEthereum, menurutSLIP-0044 . Bitcoin = 0′, Solana = 501′, dll.Akun
0'0x80000000Akun pertama. Naikkan untuk akun terpisah.Perubahan
0Rantai eksternal (0 = alamat penerima, 1 = alamat perubahan). Wallet jarang menggunakan rantai perubahan untuk rantai EVM.0Indeks
0Indeks alamat. Naikkan untuk alamat kedua, ketiga, dll.0Tanda petik menunjukkan

penurunan yang diperkuat . Kunci anak yang diperkuat hanya dapat diturunkan dari kunci privat induk, bukan dari kunci publik induk. Ini penting karena dengan penurunan biasa (bukan diperkuat), kunci anak yang terkompromi ditambah kunci publik induk akan mengungkapkan kunci privat induk dan semua kunci saudara. Untuk tingkat tujuan, tipe koin, dan akun, penurunan yang diperkuat adalah standar.Mengapa frasa yang sama menghasilkan alamat berbeda di wallet yang berbeda

Frasa dan jalur default wallet adalah variabel yang terpisah. Wallet sejarahnya berbeda dalam jalur, dan beberapa perbedaan masih belum terpecahkan.

Untuk Ethereum, perbedaan utama:

MetaMask, Ledger Live, kebanyakan wallet modern:

  • — standar BIP44. m/44'/60'/0'/0/N MyEtherWallet (default lama):
  • — satu tingkat lebih pendek. Wallet yang di-restorasi dari frasa yang sama di MEW dengan jalur lama menghasilkan himpunan alamat yang sama dengan MetaMask. m/44'/60'/0'/N Trezor Suite:
  • Sekarang mengikuti standar BIP44 untuk ETH, tetapi sebelumnya memiliki kekhususan tertentu untuk beberapa koin alternatif. Untuk Bitcoin, perbedaan struktural: BIP44 (

, legacy P2PKH, alamat dimulai dengan 1), BIP49 (m/44'/0'/0', P2SH-P2WPKH, alamat dimulai dengan 3), dan BIP84 (m/49'/0'/0', segwit native P2WPKH, alamat dimulai dengan bc1q) menghasilkan alamat yang berbeda dari seed yang sama. Format alamat menunjukkan jalur yang digunakan, yang merupakan alasan mengapa format alamat penting saat memperbaiki pemulihan.m/84'/0'/0'Jika Anda mengimpor frasa dan "dana tidak ada", periksa jalur penurunan sebelum mengasumsikan frasa salah. Kebanyakan wallet memungkinkan Anda menentukan jalur secara manual saat mengimpor lanjutan.

Mode kegagalan keamanan

Kriptografi di sini bukan titik lemah. Setiap serangan yang berhasil terhadap wallet BIP39 menargetkan sisi manusia dari pipeline tersebut.

Phishing: "masukkan frasa pemulihan untuk melanjutkan"

Serangan dengan volume tertinggi secara signifikan. Antarmuka wallet palsu, ekstensi browser yang diinjeksikan oleh skrip berbahaya, petugas dukungan yang meniru di Discord — semua meminta pengguna mengetikkan 12 kata di suatu tempat. Model mental yang benar: perangkat lunak wallet yang sah tidak pernah meminta frasa seed setelah pengaturan awal. Permintaan frasa adalah serangan, terlepas dari seberapa sah tampilan antarmuka tersebut.

Pemantauan clipboard

Perangkat lunak yang memantau clipboard, mendeteksi urutan 12 atau 24 kata BIP39 yang dikenal, dan mengexfiltrasi. Jendela eksfiltrasi hanya berlangsung dalam milidetik. Menyalin frasa seed ke mana pun — bahkan secara singkat ke editor teks — menciptakan eksposur. Manajer sejarah clipboard (Windows Clipboard History, manajer clipboard macOS, sejarah paste IDE) sangat berisiko.

Screenshot dan sinkronisasi foto cloud

Mengambil screenshot frasa seed di ponsel mengunggahnya ke iCloud Photos atau Google Photos dalam beberapa detik, sebelum kebanyakan orang selesai membaca kembali. Backup tersebut tidak dienkripsi di sisi klien. "Saya mengambil screenshot untuk menjaga keamanannya" adalah jalur eksfiltrasi langsung. Backup kertas di lokasi fisik yang aman bukan rekomendasi yang bisa dianggap sebagai hal yang ringan.

Penghasilan frasa secara server-side

Setiap situs web yang menghasilkan frasa BIP39 secara server-side memiliki salinan entropi. Satu-satunya tempat aman untuk menghasilkannya adalah perangkat yang Anda kendalikan, secara offline saat penghasilan. Perangkat keras, mesin yang terisolasi, atau alat klien yang telah disertifikasi. Situs web bukan salah satu dari hal tersebut — bahkan jika JavaScript tampak benar, Anda tidak bisa memverifikasi bahwa server tidak mencatat output tersebut.

Jika Anda perlu memeriksa atau memverifikasi struktur frasa — memeriksa entropi, melihat seed yang dihasilkan, memverifikasi jalur — maka

berjalan sepenuhnya di browser. Frase tidak pernah meninggalkan mesin Anda, yang merupakan satu-satunya arsitektur yang aman untuk kasus penggunaan ini. Konverter Mnemonic BIP39 Sisi pengembang: Anda hampir pasti tidak seharusnya menangani frasa seed di aplikasi Anda

Jika Anda membangun aplikasi yang berdekatan dengan kripto, kecenderungan untuk "menangani frasa seed" di backend hampir selalu salah. Area serangan:

Pencatatan.

  • Setiap kerangka web mencatat isi permintaan di suatu tempat. Satu baris debug, satu tingkat log yang salah dikonfigurasi, dan setiap frasa yang melewati API akan tersimpan di disk — secara tidak terbatas, di berbagai tujuan log yang tidak Anda audit. Transit.
  • HTTPS melindungi kabel. Namun, ini tidak melindungi load balancer, proses backend, database, atau aggregator log. Setiap bagian adalah permukaan kebocoran terpisah. Memori.
  • Dump proses, laporan kegagalan, file core, dan snapshot heap mencatat string di memori. Frase seed dalam dict Python atau objek JavaScript tidak merupakan zero-copy; kemungkinan besar muncul di beberapa alokasi sebelum dihapus. Kewajiban hukum.
  • Jika backend Anda memproses frasa seed pengguna dan Anda terkena serangan, kerugian adalah permanen. Berbeda dengan kata sandi, tidak ada mekanisme reset. Pengguna yang terkena kerugian kehilangan dana tanpa jalan keluar. Arsitektur yang benar: turunkan apa yang Anda butuhkan di sisi klien dan hanya teruskan outputnya — kunci publik, xpub baca-hanya, transaksi yang ditandatangani. Backend tidak pernah melihat frasa. Library yang melakukan ini dengan benar:

@scure/bip39 (diperiksa, minimal ketergantungan), ethers.js bitcoinjs-libdan . Untuk integrasi perangkat keras, SDK Trezor dan Ledger mengembalikan transaksi yang ditandatangani — kunci tidak pernah meninggalkan perangkat.Rangkaian penurunan lengkap dalam satu pandangan

1. Entropi

MelangkahMemasukkanOperasiKeluaran
128–256 bit acakChecksum SHA256 → kelompok 11 bit12–24 kata mnemonic2. Seed
Kata-kata mnemonic + “mnemonic” + kata sandiPBKDF2-HMAC-SHA512, 2048 putaranSeed 512-bit (64 byte)3. Kunci utama
Byte seedHMAC-SHA512(“Bitcoin seed”, seed)Kunci privat utama (256 bit) + kode rantai (256 bit)4. Kunci akun
Kunci utama + jalur m/44’/60’/0’Penurunan anak BIP32 yang diperkuat × 3Kunci ekstensi akun5. Kunci alamat
Kunci akun + jalur /0/NPenurunan anak BIP32 normal × 2Kunci privat anak → kunci publik secp256k1 → keccak256 → alamatBIP39 benar-benar melaksanakan tugas yang dirancang: membuat entropi yang dapat ditulis dan dipulihkan. Area serangan bukan pada kriptografi — PBKDF2 dengan 2048 putaran, HMAC-SHA512, secp256k1 — semua itu kuat. Serangan ini sepenuhnya operasional: memasukkan frasa di tempat yang tidak seharusnya, menyimpannya secara digital, percaya pada alat yang menghasilkannya secara server-side. Matematikanya baik. Kekuatan manusia adalah titik lemah, yang sebabnya saran pengembang adalah "arsitektur sistem Anda agar frasa tidak pernah menyentuh infrastruktur Anda".

BIP39 berhasil melaksanakan tepat apa yang dirancang: membuat entropi dapat ditulis dan dipulihkan. Area serangan tidak terletak pada kriptografi — PBKDF2 dengan 2048 putaran, HMAC-SHA512, secp25-256k1 — semua itu solid. Serangan ini sepenuhnya bersifat operasional: memasukkan frasa di tempat yang tidak seharusnya, menyimpannya secara digital, atau mempercayai alat yang menghasilkannya di server. Matematikanya baik. Kekuatan lemah terletak pada manusia, yang sebabnya saran pengembang adalah "desain sistem Anda agar frasa tersebut tidak pernah menyentuh infrastruktur Anda."

Ingin bebas iklan? Bebas Iklan Hari Ini

Instal Ekstensi Kami

Tambahkan alat IO ke browser favorit Anda untuk akses instan dan pencarian lebih cepat

Ke Ekstensi Chrome Ke Ekstensi Tepi Ke Ekstensi Firefox Ke Ekstensi Opera

Papan Skor Telah Tiba!

Papan Skor adalah cara yang menyenangkan untuk melacak permainan Anda, semua data disimpan di browser Anda. Lebih banyak fitur akan segera hadir!

IKLAN · HAPUS?
IKLAN · HAPUS?
IKLAN · HAPUS?

Pojok Berita dengan Sorotan Teknologi

Terlibat

Bantu kami untuk terus menyediakan alat gratis yang berharga

Belikan aku kopi
IKLAN · HAPUS?