Menambahkan generator pada dirinya sendiri sebanyak tiga belas kali tampaknya memerlukan dua belas penjumlahan. Sebenarnya hanya memerlukan lima. Dan menambahkannya pada dirinya sendiri dengan angka yang memiliki tujuh puluh tujuh digit memerlukan kurang dari empat ratus operasi. Pemangkasan ini yang membuat Bitcoin mungkin — dan ketiadaan pemangkasan yang setara dalam perjalanan kembali yang membuatnya aman.
Metode ini disebut dobel-dan-tambah, dan resepnya adalah membaca angka dalam biner. Tiga belas, dalam biner, adalah 1101. Mulailah dari bit kiri, dengan titik G di tangan. Untuk setiap bit berikutnya, gandakan apa yang Anda miliki; jika bitnya satu, tambahkan G setelah menggandakan. Bit kedua adalah satu: gandakan menjadi 2G, tambahkan menjadi 3G. Bit ketiga adalah nol: gandakan menjadi 6G, dan tidak ada lagi. Bit keempat adalah satu: gandakan menjadi 12G, tambahkan menjadi 13G. Tiga kali dobel, dua kali tambah, dan sampai.
Untuk angka 256 bit, maksimal ada 256 dobel dan, rata-rata, 128 penjumlahan. Kurang dari empat ratus operasi di mana brute force akan memerlukan angka yang tidak muat di halaman ini. Ini adalah ekonomi yang sama dari deret geometri: menggandakan beberapa kali mencapai tempat yang tidak dapat dicapai dengan selalu menambah.

Namun resep ini, ditulis persis seperti ini, memiliki cacat serius — dan itu bukan pada matematika. Bit yang sama dengan satu memerlukan satu dobel dan satu tambah; bit yang sama dengan nol hanya memerlukan dobel. Waktu yang dibutuhkan mesin, oleh karena itu, bergantung pada bit dari kunci pribadi. Siapa pun yang dapat mengukur waktu ini dengan tepat, atau konsumsi energi perangkat saat menghitung, dapat membaca kunci tanpa merusak apa pun.

Oleh karena itu, tidak ada implementasi serius yang menjalankan resep naif. Perpustakaan yang digunakan oleh Bitcoin Core, libsecp256k1, menjalankan urutan operasi yang memakan waktu yang sama persis apa pun kuncinya, melakukan pekerjaan bit nol bahkan ketika itu nol. Ini disebut waktu konstan, dan ini adalah perbedaan antara dompet perangkat keras yang dibuat dengan baik dan hiasan.
Sekarang jalan kembali. Diberikan titik kG dan mengetahui bahwa awalnya adalah G, berapa k? Masalah ini memiliki nama — logaritma diskrit — dan tidak ada solusi umum yang lebih baik dari akar kuadrat ukuran grup. Dua metode yang mencapai akar ini adalah langkah bayi dan langkah raksasa, yang menukar memori dengan waktu, dan rô Pollard, yang hampir tidak menggunakan memori dan dapat diparalelkan dengan baik. Keduanya adalah topik modul berikutnya.
Akar kuadrat dari 2^256 adalah 2^128, yang merupakan 34 diikuti oleh 37 nol. Layak untuk menghitung dengan kemurahan hati yang disengaja. Misalkan semua daya komputasi jaringan Bitcoin, sekitar satu sextillion operasi per detik, dialihkan untuk ini, dan berpura-pura bahwa setiap operasi ini adalah operasi pada kurva — yang salah dengan beberapa urutan besaran, karena operasi pada kurva memerlukan biaya ribuan kali lebih banyak daripada hash. Bahkan dengan keuntungan imajiner ini, pemindaian akan memakan waktu sekitar sepuluh miliar tahun. Dikoreksi untuk perbedaan biaya nyata, akan memakan waktu sekitar 10^14 tahun: hampir sepuluh ribu kali usia alam semesta.

Simpan satu kalimat untuk modul berikutnya, karena itu menghindari kesalahpahaman yang mahal. Perhitungan ini berlaku untuk kunci yang dipilih secara acak di seluruh rentang. Tantangan yang ada di blockchain, dan yang disusun oleh situs ini, tidak menyerang 2^256 atau 2^128: mereka menyerang rentang yang sengaja kecil, dari tujuh puluh atau delapan puluh bit, di mana akar kuadrat yang sama mengembalikan angka yang cocok untuk proyek nyata. Matematikanya tidak menjadi lebih lemah. Rentangnya yang lebih kecil.
Satu bagian lagi yang diperlukan untuk melengkapi kriptografi Bitcoin: bagaimana titik-titik dan angka-angka ini menjadi tanda tangan, dan mengapa verifikasi berfungsi. Pada pelajaran berikutnya, ECDSA dihitung langkah demi langkah.