Lanjutan Pelajaran 1 Baca 4 menit

Aritmetika pada jam angka prima

Menjumlah, mengalikan, dan membagi dalam suatu himpunan terbatas. Itulah aritmetika di mana Bitcoin benar-benar beroperasi.

Pukul sepuluh, Anda menunggu lima jam, dan menjadi pukul tiga. Bukan lima belas. Tidak ada yang merasa aneh dengan itu, tidak ada yang perlu mempelajari aturan baru, dan semua orang melakukan perhitungan ini sejak kecil. Inilah aritmetika yang digunakan Bitcoin, dari perhitungan pertama hingga terakhir, dan ini memiliki nama: aritmetika modular.

Sebuah himpunan terbatas adalah kumpulan dengan jumlah elemen terbatas di mana empat operasi matematika berfungsi dan tidak pernah menghasilkan sesuatu di luar himpunan tersebut. Dalam kasus Bitcoin, elemen-elemennya adalah bilangan bulat dari nol hingga p dikurangi satu, dan aturannya sederhana: lakukan perhitungan seperti biasa dan ambil sisa dari pembagian dengan p.

Sambungan melewati titik yang sama dan penghitungan dimulai kembali. Ini adalah satu-satunya aritmetika yang dikenal Bitcoin.

Penjumlahan, pengurangan, dan perkalian tidak memiliki misteri. Dalam himpunan dengan modulus 7, lima ditambah empat menghasilkan dua, karena sembilan dibagi tujuh menyisakan dua. Tiga kali lima menghasilkan satu, karena lima belas menyisakan satu. Pengurangan adalah penjumlahan dengan lawan: minus tiga sama dengan empat, karena tiga ditambah empat menutup satu putaran penuh.

Pembagian yang memerlukan ide baru, dan ini adalah ide terpenting dalam pelajaran ini. Tidak ada koma dalam himpunan terbatas, jadi membagi dengan a tidak bisa berarti membagi menjadi bagian-bagian. Ini berarti mengalikan dengan invers dari a — angka yang, ketika dikalikan dengan a, menghasilkan satu. Dalam modulus 7, invers dari tiga adalah lima, karena lima belas menyisakan satu. Membagi dengan tiga, di sana, adalah mengalikan dengan lima.

Sekarang pertanyaan yang memberikan jawaban pada judul: mengapa p harus bilangan prima? Karena hanya dengan cara itu setiap elemen memiliki invers. Cobalah pada jam dengan modulus dua belas: angka empat, ketika dikalikan dengan angka apa pun, hanya menghasilkan kelipatan empat, dan tidak ada satupun yang menyisakan satu. Empat tidak memiliki invers, pembagian dengan empat tidak mungkin, dan himpunan tersebut tidak lagi menjadi himpunan tertutup. Ini terjadi pada setiap angka yang memiliki pembagi bersama dengan modulus — dan modulus prima tidak memiliki pembagi bersama dengan angka di bawahnya.

Pada jam prima, setiap bagian memiliki pasangan. Pada jam komposit, ada bagian yang tidak berpasangan.

Menghitung invers dalam praktik dilakukan dengan dua cara. Teorema kecil Fermat, dari tahun 1640, menjamin bahwa a dipangkatkan dengan p dikurangi satu menyisakan satu; jadi a dipangkatkan dengan p dikurangi dua adalah inversnya, dan satu eksponensiasi menyelesaikannya. Lebih cepat lagi adalah algoritma Euclides yang diperluas, serangkaian pembagian yang sudah dikenal oleh orang Yunani dan yang mengembalikan invers dalam beberapa langkah. Setiap dompet di dunia menjalankan salah satu dari dua cara ini, ribuan kali per detik, tanpa ada yang menyadarinya.

p dari Bitcoin adalah ini: 2 dipangkatkan dengan 256, dikurangi 2 dipangkatkan dengan 32, dikurangi 977. Sebuah bilangan prima dengan tujuh puluh delapan digit desimal. Pilihan ini bukan dekoratif — ia ditempatkan dekat dengan pangkat dua dengan sengaja, karena mengurangi bilangan modulus yang sangat dekat dengan 2^256 dilakukan dengan pergeseran dan penjumlahan, tanpa pembagian sama sekali. Ini adalah perbedaan antara operasi yang mahal dan yang murah, yang diulang miliaran kali.

Dipilih dekat dengan pangkat dua: hampir tanpa celah, dan karena itu cepat untuk dipasang.

Satu perhatian terakhir, yang menghindari kebingungan yang sering terjadi ke depan. Ada dua angka besar dalam cerita ini, dan mereka berbeda. p adalah ukuran himpunan, jam di mana koordinat titik-titik berada. Ada juga n, jumlah titik yang dapat dicapai generator, dan itulah jam di mana kunci pribadi dan angka dalam tanda tangan berada. Keduanya adalah bilangan prima, keduanya memiliki 256 bit, dan keduanya sangat dekat satu sama lain — tetapi membingungkan mereka menghasilkan perhitungan yang tampak benar tetapi hasilnya tidak sesuai.

Dengan jam yang terpasang, tinggal menempatkan kurva di atasnya. Dalam pelajaran berikutnya, y² = x³ + 7, titik-titik yang memenuhi persamaan ini dan aturan yang menjumlahkan dua dari mereka untuk menghasilkan yang ketiga.