Menengah Pelajaran 6 Baca 4 menit

Format kunci: WIF, hex, terkompresi dan tidak terkompresi

Kunci yang sama muncul dalam empat cara berbeda, dan membingungkan mereka membuat dompet terlihat kosong tanpa ada yang hilang.

Salah satu pesan yang paling sering muncul di forum dukungan selalu dimulai dengan cara yang sama: saya mengimpor kunci saya ke dompet baru dan saldonya menjadi nol. Hampir tidak pernah ada yang hilang. Yang berubah adalah kemasan dari angka yang sama, dan dompet melihat di tempat yang salah.

Kunci pribadi, seperti yang sudah Anda ketahui, adalah angka 256 bit. Bentuk paling dasar untuk menuliskannya adalah dalam heksadesimal: enam puluh empat karakter, dari 0 hingga 9 dan dari a hingga f, setiap dua di antaranya bernilai satu byte. Itu adalah angka dan tidak lebih — tanpa versi, tanpa pemeriksaan, tanpa peringatan kesalahan jika Anda mengubah satu karakter.

Itulah mengapa ada WIF, atau Wallet Import Format. Ini adalah resep yang sama dengan alamat, diterapkan pada kunci pribadi: menambahkan satu byte versi di depan, menghitung checksum empat byte dengan SHA-256 dua kali, mengonversi semuanya ke basis 58. Hasilnya adalah rangkaian yang dimulai dengan angka 5 dan memiliki lima puluh satu karakter, atau dimulai dengan K atau L dan memiliki lima puluh dua. Perbedaan antara kedua kasus ini adalah topik dari sisa pelajaran.

Ini adalah logam yang sama dalam tiga kemasan. Hanya kertasnya yang berubah.

Kembali ke kurva sejenak. Kunci publik adalah sebuah titik, dan sebuah titik memiliki dua koordinat, x dan y. Menuliskan keduanya secara lengkap menghasilkan enam puluh lima byte: satu byte penanda dan tiga puluh dua untuk setiap koordinat. Ini adalah bentuk tidak terkompresi, satu-satunya yang ada ketika Bitcoin lahir.

Namun, persamaan kurva memungkinkan penghematan setengah dari itu. Diberikan x, persamaan y² = x³ + 7 mengembalikan y kuadrat, dan siapa yang tahu kuadratnya tahu nilainya kecuali satu detail: ada dua akar, satu genap dan satu ganjil. Jadi cukup menyimpan x secara lengkap dan satu bit tunggal yang menunjukkan mana yang benar. Kunci publik terkompresi memiliki tiga puluh tiga byte dan dimulai dengan 02 atau 03 — persis bit itu. Yang tidak terkompresi dimulai dengan 04.

Mengetahui ketinggian, tersisa dua kemungkinan. Satu bit saja yang menunjukkan mana yang benar.

Inilah seluruh jebakannya. Kedua bentuk tersebut menggambarkan titik yang sama, tetapi merupakan urutan byte yang berbeda — dan alamat, seperti yang ditunjukkan Pelajaran 3, adalah hash dari urutan byte. Hash yang berbeda, alamat yang berbeda. Kunci pribadi yang sama, oleh karena itu, mengontrol dua alamat yang tidak mirip sama sekali, dan uang yang ada di satu tidak muncul di yang lain.

WIF memberi tahu dompet mana yang harus dirakit. Ketika kunci pribadi akan digunakan dalam bentuk terkompresi, ditambahkan satu byte 01 di akhir sebelum menghitung checksum, dan byte ekstra inilah yang mendorong hasil dari lima puluh satu menjadi lima puluh dua karakter dan mengubah 5 awal menjadi K atau L. Karakter pertama dari WIF bukanlah hiasan: itu adalah instruksi tentang cara membaca sisanya.

Perubahan ini terjadi pada tahun 2012, ketika Bitcoin Core mulai menghasilkan kunci terkompresi secara default. Penghematan ini nyata: tiga puluh dua byte lebih sedikit di setiap entri transaksi, diulang untuk miliaran transaksi. Kunci sebelum ini tetap berlaku, dan itulah mengapa dompet yang serius, saat mengimpor, memeriksa kedua jalur alih-alih memilih satu.

Kunci yang sama membuka dua pintu. Apa yang Anda cari ada di balik yang lain.

Masih ada dua kemasan yang muncul sesekali. Kunci yang dienkripsi oleh standar BIP-38 dimulai dengan 6P dan hanya menjadi kunci yang sebenarnya setelah sebuah kata sandi — itulah yang dicetak oleh koin fisik Mike Caldwell, Casascius, di bawah hologram antara 2011 dan 2013. Dan format mini, tiga puluh karakter yang dimulai dengan S, muat di ruang sempit koin yang sama.

Tidak ada yang mengubah kunci. Heksadesimal, WIF, terkompresi, dienkripsi: ini adalah cara menulis, menyimpan, dan mengangkut angka yang sama, dengan lebih atau kurang perlindungan terhadap kesalahan pengetikan. Membingungkan kemasan dengan isi adalah yang membuat saldo tampak hilang — dan memeriksa karakter pertama biasanya menyelesaikan kejutan dalam sepuluh detik.

Namun, dompet yang sebenarnya tidak menyimpan kunci. Menyimpan benih, dari mana ribuan kunci dihasilkan secara berurutan, semuanya dapat dipulihkan dari dua belas kata. Bagaimana trik ini bekerja, dan mengapa itu mengubah cara membuat cadangan, adalah topik modul berikutnya.