Lanjutan Pelajaran 2 Baca 4 menit

Kurva secp256k1: titik, penjumlahan, dan titik di tak terhingga

y² = x³ + 7 di atas tubuh hingga. Pelajaran ini menjumlahkan dua titik dengan penggaris, jangka, dan kemudian dengan rumus.

A imagem que todo orang sudah lihat — kurva halus dan simetris yang naik lembut ke kanan — bukanlah kurva Bitcoin. Itu adalah gambar dari persamaan yang sama pada bilangan real, dan berfungsi untuk menjelaskan. Pada tubuh terbatas dari pelajaran sebelumnya, yang ada adalah awan titik-titik yang tersebar, tanpa kurva sama sekali, namun semua aturan tetap berlaku.

Persamaan tersebut adalah y² = x³ + 7. Dalam istilah umum di mana kurva-kurva ini ditulis, koefisien a bernilai nol dan b bernilai tujuh — dan nol ini bukanlah detail: itu mempersingkat rumus-rumus yang akan datang dan merupakan salah satu alasan mengapa secp256k1 cepat.

Sepasang angka adalah titik dari kurva jika, setelah melakukan perhitungan modulo p, kedua sisi persamaan memberikan sisa yang sama. Karena setiap x yang berfungsi menghasilkan dua akar y, satu genap dan satu ganjil, awan tersebut simetris: untuk setiap titik ada cerminnya, yang disebut sebagai negatifnya.

Penjumlahan dua titik memiliki definisi geometris yang berasal dari bilangan real dan bertahan dari perubahan medan. Tarik garis melalui dua titik tersebut, temukan di mana garis itu memotong kurva untuk ketiga kalinya, cerminkan perpotongan itu. Hasilnya adalah penjumlahan. Pada tubuh terbatas tidak ada garis untuk digambar, tetapi ada rumus yang dihasilkan garis, dan itu berfungsi sama.

Penjumlahan dua titik adalah konstruksi dengan penggaris, dan itu tidak pernah keluar dari kurva.

Penting untuk menuliskan rumusnya, karena itu singkat. Untuk dua titik yang berbeda, hitung kemiringan s sebagai selisih y dibagi dengan selisih x — dan ingat bahwa membagi, di sini, adalah mengalikan dengan invers, persis seperti yang ditunjukkan pelajaran sebelumnya. Kemudian x dari hasilnya adalah s kuadrat dikurangi dua x asli, dan y dari hasilnya adalah s kali selisih antara x lama dan baru, dikurangi y asli. Tiga baris, dan tidak satupun dari mereka keluar dari tubuh.

Menambahkan satu titik pada dirinya sendiri adalah kasus khusus, karena tidak ada garis yang melewati satu titik saja. Gunakan garis singgung, dan kemiringannya menjadi tiga kali x kuadrat dibagi dua kali y. Di sinilah a sama dengan nol muncul: dalam rumus umum akan ada satu suku tambahan, yang pada secp256k1 tidak ada.

Ada satu kasus yang belum, dan itu memaksa kita untuk menemukan sesuatu. Tambahkan satu titik ke cerminnya. Garis yang melewati keduanya adalah vertikal, dan garis vertikal tidak memotong kurva untuk ketiga kalinya. Tidak ada jawaban di dalam awan. Solusinya adalah menyatakan bahwa ada satu titik di sana, di tempat di mana garis vertikal menunjuk: titik di tak terhingga.

Di mana garis tidak menemukan apa-apa lagi, standar menempatkan satu titik — dan itulah yang menyelesaikan perhitungan.

Ini bukan tambalan. Dengan elemen tambahan ini, kumpulan tersebut memenuhi empat sifat yang mendefinisikan sebuah grup: menambahkan dua titik selalu menghasilkan titik dalam kumpulan, urutan tanda kurung tidak penting, ada elemen netral yang jika ditambahkan ke titik mana pun mengembalikannya utuh, dan setiap titik memiliki lawan yang meniadakannya. Titik di tak terhingga adalah elemen netral ini — nol dari aritmetika ini. Karena keberadaannya, masuk akal untuk berbicara tentang mengalikan satu titik dengan angka.

Parameter tepat dari secp256k1 telah dipublikasikan sejak tahun 2000 dan tidak berubah: bilangan prima p, nol, tujuh, dua koordinat dari generator G yang ditulis dengan enam puluh empat karakter masing-masing, dan angka n, yang merupakan berapa banyak titik G yang dicapai sebelum kembali ke titik di tak terhingga.

Standar terikat pada meja kerja, dan siapa pun dapat mengukur terhadapnya.

Tentang n, ada satu pengamatan yang memiliki konsekuensi praktis. Itu adalah bilangan prima, dan total titik pada kurva adalah tepat n — yang oleh matematikawan ditulis dengan mengatakan bahwa kofaktornya adalah satu. Pada kurva di mana ini tidak terjadi, ada subgrup kecil tersembunyi, dan dengan mereka seluruh keluarga serangan di mana implementasi ditipu untuk bekerja di bagian kecil dari ruang. Pada secp256k1, jenis serangan ini tidak memiliki tempat untuk dimulai.

Anda sudah tahu cara menjumlahkan titik dan menggandakan titik. Mengalikan satu titik dengan angka 256 bit adalah mengulangi dua operasi ini, dan pelajaran berikutnya menunjukkan bagaimana hal ini dilakukan dalam kurang dari tiga ratus langkah — dan mengapa membatalkannya tetap memerlukan biaya 2^128.