Blockchain/Tahap II · Mekanisme/2.1 Kriptografi/Pelajaran 2
HASH160: SHA-256 kemudian RIPEMD-160
Hash berganda yang memendekkan kunci, dan kelemahan yang disembunyikannya
BahanPenjelajah blok (block explorer) seperti blockstream.info atau blockchain.comSatu set sampel alamat BitcoinEditor teks atau hamparan elektronik
Ingin tahu
- Mengapa Bitcoin menggunakan dua fungsi hash yang berbeza secara berturut-turut?
- Apa yang ditawarkan oleh hash 160-bit yang tidak dimiliki oleh hash 256-bit?
- Bagaimanakah hash sepanjang 20 bait boleh menjadi selamat dan terdedah pada masa yang sama?
Teroka
- Kunci awam mentah dalam Bitcoin bersaiz 33 bait apabila dimampatkan. Saiz ini terlalu panjang untuk digunakan dengan cekap dalam transaksi. Untuk mengecilkannya tanpa menjejaskan integriti kriptografi, Bitcoin menggunakan proses dua langkah: SHA-256 diikuti oleh RIPEMD-160. Gabungan ini dikenali sebagai HASH160 dan menghasilkan output 160 bit (20 bait), cukup padat untuk pengekodan alamat.
- RIPEMD-160, yang direka pada tahun 1996 oleh Hans Dobbertin, Antoon Bosselaers, dan Bart Preneel, menghasilkan output yang lebih pendek berbanding SHA-256 dan berasal daripada proses reka bentuk akademik yang terbuka. SHA-256 digunakan terlebih dahulu pada kunci awam (atau, untuk P2SH, skrip tersebut), kemudian RIPEMD-160 digunakan pada output SHA-256. Urutan ini memberikan keseimbangan antara keselamatan dan kecekapan, dan ia digunakan dalam format output Pay-to-PubKey-Hash (P2PKH), Pay-to-Script-Hash (P2SH), serta Pay-to-Witness-PubKey-Hash (P2WPKH).
- Penggunaan dua fungsi hash yang berbeza menambah satu lapisan pertahanan berlapis (defense in depth). Penyarangan ini terutamanya membantu menentang serangan preimage, kerana mencari kunci yang sepadan dengan hash tertentu bermakna perlu mengalahkan kedua-dua fungsi; ia tidak membantu menentang perlanggaran, kerana setiap perlanggaran SHA-256 juga merupakan perlanggaran HASH160. Namun, output 160 bit membawa maksud rintangan perlanggaran kira-kira 80 bit, yang boleh diterima bagi output alamat berasaskan kunci tunggal. Ia menjadi masalah dalam skrip bersama yang melibatkan sumbangan beberapa pihak, dan itulah sebabnya SegWit dan Taproot menggunakan nilai 32 bait untuk skrip natif.
- Satu dakwaan lazim ialah hashing kunci melindungi koin daripada komputer kuantum pada masa hadapan. Perlindungan ini hanya separa. Perbelanjaan mendedahkan kunci awam, jadi perlindungan itu hanya meliputi output yang kuncinya belum pernah didedahkan; penggunaan semula alamat menghapuskannya; dan output Taproot meletakkan kunci awam secara terus on-chain. Komputer kuantum yang berkemampuan akan mengancam sebarang kunci yang terdedah.
- Untuk membina alamat Bitcoin daripada kunci awam, HASH160 digunakan, kemudian hasilnya diberi awalan pengenal rangkaian (0x00 untuk mainnet P2PKH), diikuti oleh checksum 4 bait yang diterbitkan daripada SHA-256 berganda. Jujukan 25 bait ini kemudian dikodkan dengan Base58 untuk menghasilkan alamat yang boleh dibaca oleh manusia. Pengekodan ini membuang aksara yang mengelirukan dan menyertakan checksum untuk mengesan ralat transkripsi.
- Untuk melihatnya secara praktikal, buka penjelajah blok dan cari transaksi P2PKH. Cari medan scriptPubKey, yang sepatutnya mengandungi hash 20 bait. Bandingkan dengan kunci awam yang didedahkan apabila output itu dibelanjakan. Anda akan melihat bahawa kunci awam lebih panjang, manakala hash ialah versi yang dipendekkan dan dikodkan yang digunakan dalam alamat.
Fakta utama
- HASH160 ialah gabungan SHA-256 diikuti oleh RIPEMD-160.
- Hasil HASH160 ialah 160 bit (20 bait).
- RIPEMD-160 direka pada tahun 1996 oleh Hans Dobbertin, Antoon Bosselaers, dan Bart Preneel.
- HASH160 digunakan dalam skrip output P2PKH, P2SH dan P2WPKH.
- Output hash 160 bit memberikan rintangan perlanggaran kira-kira 80 bit.
- Hashing menyembunyikan kunci awam hanya sehingga ia dibelanjakan; output Taproot memaparkan kunci secara langsung.
Latihan sembilan, enam, tiga, satu
9KumpulSenaraikan 9 alamat Bitcoin. Catatkan formatnya (bermula dengan 1, 3, bc1q, bc1p, dll.) dan panjangnya dalam aksara.
6KelompokkanKumpulkan 9 alamat tersebut kepada 6 kumpulan berdasarkan jenis pengekodan dan jenis skripnya (contohnya, Base58, Bech32, SegWit, dll.).
3SaringKurangkan 6 kumpulan tersebut kepada 3 prinsip yang menjelaskan mengapa Bitcoin menggunakan format alamat yang berbeza.
1KristalkanTulis satu ayat yang menerangkan mengapa Bitcoin menggunakan dua fungsi hash untuk mencipta alamat.
Semakan fakta
Tarikh, angka dan dakwaan telah disemak berbanding dengan sumber yang diterbitkan yang disenaraikan di bawah.