Menengah Pelajaran 3 Baca 4 menit

Bagaimana sebuah alamat dibangun, byte demi byte

Kunci publik, dua hash, satu byte versi, dan satu checksum. Alamat adalah akhir dari resep singkat yang dapat diulang dan diperiksa oleh siapa saja.

Sebuah alamat bitcoin terlihat seperti kode sistem: serangkaian karakter yang tampak tidak berarti yang dihasilkan oleh aplikasi dan Anda salin dengan hati-hati agar tidak salah. Namun, sebenarnya tidak demikian. Alamat tersebut adalah hasil dari serangkaian langkah yang singkat, publik, dan dapat diverifikasi, dan setiap langkahnya ada karena alasan yang dapat dijelaskan dalam satu kalimat.

Titik awalnya adalah kunci publik dari pelajaran sebelumnya. Kunci ini dimasukkan sepenuhnya ke dalam SHA-256, dan hasil dari langkah pertama ini dimasukkan ke dalam fungsi hash kedua, yaitu RIPEMD-160 — yang diterbitkan pada tahun 1996 oleh Hans Dobbertin dan dua rekannya dari laboratorium COSIC, di Leuven, Belgia. Fungsi ini menghasilkan 160 bit, atau dua puluh byte. Hasil dari dua fungsi ini memiliki nama: hash160.

Dua fungsi dari keluarga yang berbeda, secara berurutan, menyelesaikan dua hal sekaligus. Mereka memperpendek alamat, karena dua puluh byte jauh lebih sedikit dibandingkan dengan kunci publik. Dan mereka menyembunyikan kunci publik: yang Anda publikasikan ketika meminta pembayaran bukanlah kunci tersebut, melainkan ringkasannya. Kunci hanya muncul pada hari Anda membelanjakan koin tersebut.

Label menunjukkan kotak tanpa mengungkapkan isinya.

Pada hash160 ditambahkan satu byte di depan, yaitu byte versi. Nol untuk alamat umum, lima untuk yang dimulai dengan 3. Byte inilah yang membuat setiap alamat dari jenis tertentu selalu dimulai dengan karakter yang sama — ini bukan dekorasi, melainkan awalan yang memberi tahu dompet resep mana yang harus diterapkan di sisi lain.

Kemudian datanglah checksum. Versi ditambah hash160 diambil, SHA-256 diterapkan dua kali, dan empat byte pertama dari hasilnya ditempelkan di akhir. Totalnya ada dua puluh lima byte: satu byte versi, dua puluh byte hash, dan empat byte untuk verifikasi.

Langkah terakhir adalah penulisan. Angka dua puluh lima byte dikonversi ke basis 58, sebuah alfabet yang Satoshi buat dengan menghapus empat huruf dari set enam puluh dua: angka nol, huruf O besar, huruf i besar, dan huruf L kecil. Alasan penghapusan ini tertulis dalam kode sumber asli, dalam komentar: karakter-karakter ini adalah yang mudah tertukar ketika seseorang membacanya dari layar atau menyalinnya secara manual.

Dan di sinilah checksum bekerja. Dengan mengubah satu karakter dari sebuah alamat, empat byte terakhir tidak lagi cocok dengan hasil perhitungan, dan dompet menolak sebelum membentuk transaksi apa pun. Peluang sebuah alamat yang salah ketik tetap lolos adalah sekitar satu banding empat miliar.

Kesalahan ditolak sebelum uang keluar, bukan sesudahnya.

Alamat yang dimulai dengan bc1 mengikuti penulisan lain, bech32, yang diusulkan pada tahun 2017 oleh pengembang Belgia Pieter Wuille. Semua hurufnya kecil, yang membuatnya muat dalam kode QR yang jauh lebih kecil, dan checksum-nya berasal dari keluarga yang lebih kuat: selain mendeteksi kesalahan, ia dapat menunjukkan posisi kesalahan tersebut. Sebuah dompet modern tidak hanya mengatakan bahwa alamatnya salah — ia menyoroti karakter yang salah.

Alamat baru tidak hanya menolak: ia menunjukkan di mana letak kesalahan.

Penting untuk jelas tentang apa yang tidak dilakukan oleh semua perlindungan ini. Checksum memeriksa integritas alamat, bukan niat dari orang yang menulisnya. Alamat milik orang lain adalah alamat yang sepenuhnya valid, dan uang yang dikirim ke sana akan sampai, dengan semua perhitungan yang sesuai. Ada malware yang menunggu alamat muncul di clipboard untuk menggantinya dengan alamat lain saat Anda menempelkannya. Terhadap hal ini, checksum tidak dapat berbuat apa-apa: hanya memeriksa karakter pertama dan terakhir dengan mata, seperti yang direkomendasikan oleh pelajaran pemula.

Perhatikan apa yang tidak ada dalam resep ini. Tidak ada pendaftaran, tidak ada server, tidak ada langkah di mana seseorang perlu memberikan izin. Ada tiga fungsi hash, satu byte versi, dan satu konversi basis — dan siapa pun yang memiliki kunci publik dapat mencapai alamat yang sama dengan yang dihasilkan oleh dompet Anda, dengan cara yang sama, tanpa bertanya kepada siapa pun.

Alamat menunjukkan ke mana uang akan pergi. Yang kurang adalah setengah lainnya: bukti bahwa orang yang mengirim memiliki hak untuk mengirim, diberikan tanpa menunjukkan kunci kepada siapa pun. Pada pelajaran berikutnya, tanda tangan digital.