Lanjutan Pelajaran 5 Baca 4 menit

Di mana ECDSA gagal: nonce yang diulang dan kunci yang dipulihkan

Matematika itu solid; implementasinya tidak selalu. Sebuah nonce yang digunakan kembali mengungkapkan kunci pribadi dengan aljabar sekolah.

Matematika dari pelajaran sebelumnya tidak pernah gagal. Yang sering gagal, dengan keteraturan yang menyedihkan, adalah pengundian dari baris ketiga — dan ketika itu gagal, kunci pribadi muncul dalam empat baris aljabar yang dapat diikuti oleh siswa sekolah menengah mana pun.

Misalkan ada dua tanda tangan yang dibuat dengan kunci yang sama dan nonce k yang sama, pada pesan yang berbeda. Karena r adalah koordinat x dari titik k kali G, dan k adalah sama, maka r dari keduanya identik — dan ini terlihat di blockchain, gratis, bagi siapa saja yang melihat.

Tuliskan keduanya: s1 adalah kebalikan dari k kali jumlah dari z1 dengan r kali d; s2 adalah kebalikan dari k kali jumlah dari z2 dengan r kali d. Kurangi satu dari yang lain. Bagian dengan r kali d saling membatalkan, karena identik, dan tersisa bahwa s1 dikurangi s2 adalah kebalikan dari k kali z1 dikurangi z2. Isolasi: k sama dengan z1 dikurangi z2 dibagi dengan s1 dikurangi s2. Dengan k di tangan, kembali ke persamaan pertama dan isolasi d, yang adalah s1 kali k dikurangi z1, dibagi dengan r.

Selesai. Dua pengurangan, dua pembagian, dan kunci pribadi ada di layar. Tidak ada kekuatan kasar, tidak ada tabel, tidak ada perangkat keras khusus — dan tidak ada pertahanan setelah fakta, karena kedua tanda tangan sudah dipublikasikan dan tidak ada yang bisa menghapusnya.

Lembar blok digunakan sekali. Digunakan dua kali, mengungkapkan segalanya.

Kasus terkenal pertama bukan di Bitcoin. Pada 27 Desember 2010, di kongres Chaos Computer Club di Berlin, grup fail0verflow menunjukkan bahwa Sony menandatangani perangkat lunak PlayStation 3 selalu menggunakan k yang sama — nilai konstan, ditulis dalam kode. Dua tanda tangan apa pun sudah cukup. Kunci yang mengotorisasi semua perangkat lunak konsol dideduksi di depan umum, di atas panggung.

Di Bitcoin, bencana yang setara terjadi pada Agustus 2013. Kesalahan dalam generator angka acak Android membuat aplikasi menerima benih keacakan yang sama, dan dompet yang menandatangani lebih dari satu transaksi mengulangi nonces tanpa ada indikasi masalah. Pada 11 Agustus, situs bitcoin.org menerbitkan peringatan. Mereka yang menyisir blockchain mencari nilai r yang berulang sudah mengosongkan alamat yang terkena dampak.

Dan masalah ini bukan hanya sejarah. Peneliti yang memeriksa seluruh blockchain mencari r yang berulang terus menemukan kejadian, hampir selalu dari dompet buatan sendiri dan program improvisasi.

Pertahanannya elegan dan menjadi standar sejak 2013: berhenti mengundi. Norma RFC 6979 menjelaskan cara menguraikan k secara deterministik, menerapkan HMAC pada kunci pribadi dan ringkasan pesan. K tetap tidak dapat diprediksi oleh orang luar, karena bergantung pada kunci pribadi, tetapi tidak lagi bergantung pada kualitas generator acak mesin. Kunci yang sama menandatangani pesan yang sama selalu menghasilkan tanda tangan yang sama — yang, selain aman, juga nyaman untuk diuji.

Mengganti pengundian dengan template: hasil yang sama, selalu, tanpa bergantung pada keberuntungan.

Ada juga versi yang lebih halus dari masalah yang sama, dan itu cukup indah untuk layak mendapatkan paragraf terakhir. Tidak perlu mengulangi seluruh nonce. Cukup jika sedikit bocor — misalnya, jika bit pertama dapat diprediksi, karena generatornya bias. Setiap tanda tangan kemudian memberikan sepotong informasi. Mengumpulkan beberapa ratus dari mereka, teknik pengurangan kisi-kisi memulihkan seluruh kunci pribadi dari potongan-potongan ini, tanpa ada nonce yang pernah diulang.

Setiap tanda tangan memberikan sepotong. Beberapa ratus cukup untuk menyusun potret.

Perhatikan apa yang semua pelanggaran ini miliki kesamaan: tidak ada satupun yang menyerang kurva. Secp256k1 tetap utuh, logaritma diskrit tetap tanpa solusi, dan yang jatuh selalu merupakan potongan kode yang ditulis dengan buruk atau generator yang cacat.

Namun, ada seluruh keluarga serangan yang langsung menuju matematika — bukan karena percaya bahwa itu rapuh, tetapi karena memilih interval di mana akar kuadrat dari ruang tidak lagi menakutkan. Inilah yang membuat tantangan blockchain mungkin, dan ini adalah topik modul berikutnya.