Ketika keacakan gagal: bug entropi Coldcard dan apa yang diubah dua perangkat

·6 mnt baca·Oleh SSP Editorial Team
Sampul SSP Academy: bug entropi Coldcard dan arsitektur dua perangkat

Ketika keacakan gagal: bug entropi Coldcard dan apa yang diubah dua perangkat

Pada akhir Juli 2026, penyerang mulai menguras bitcoin dari ribuan dompet perangkat keras yang tak berbuat salah apa pun. Pemiliknya sudah menuruti nasihat. Mereka membeli perangkat khusus untuk menandatangani, menyimpan benihnya luring, tak pernah mengetiknya di situs web mana pun. Semua itu tak ada gunanya, sebab benih yang dihasilkan perangkat-perangkat itu tak pernah seacak penampakannya.

Sekitar 1.816 BTC meninggalkan lebih dari 5.200 alamat dalam empat gelombang. Ia menjadi eksploitasi dompet perangkat keras terbesar tahun ini.

Tulisan ini bukan putaran kemenangan. Bug yang terlibat termasuk jenis yang bisa menimpa hampir semua dompet, termasuk milik kami, dan pertanyaan menariknya bukan siapa yang merilisnya, melainkan apa yang dilakukan arsitektur sebuah dompet ketika hal itu terjadi.

Apa yang sebenarnya keliru

Satu commit saja, pada Maret 2021.

Rancangan Coldcard menghendaki benih dihasilkan dari pembangkit bilangan acak perangkat keras — cip khusus yang menarik entropi dari proses fisik. Itulah cara yang benar. Namun sebuah perubahan pada firmware 4.0.1 mengalihkan pembangkitan benih lewat pembangkit pseudoacak perangkat lunak yang dibenihi dari konstanta publik yang tertanam di kode.

PRNG bersifat deterministik menurut definisinya. Diberi nilai awal yang sama, ia menghasilkan urutan yang sama selamanya. Jadi benih yang dihasilkan begitu bukanlah bilangan yang tak bisa ditebak siapa pun — ia bilangan yang diambil dari himpunan yang cukup kecil untuk ditelusuri, memakai konstanta yang selama ini tergeletak di firmware yang sudah diterbitkan.

Perangkatnya tetap berperilaku normal. Menampilkan dua puluh empat kata, orang mencatatnya, ia menurunkan alamat yang benar, menandatangani transaksi yang sah. Tak ada layar di dompet mana pun yang menunjukkan berapa banyak entropi masuk ke benih Anda. Setiap pengguna terdampak memegang perangkat yang tampak dan berperilaku persis seperti yang berfungsi, hingga lima tahun lamanya.

Jendelanya membentang dari firmware 4.0.1 pada Maret 2021 sampai 4.1.9 pada Juli 2026. Memperbarui firmware memperbaiki pembangkitan sejak saat itu dan sama sekali tak berbuat apa-apa bagi benih yang sudah dibuat: kunci-kunci itu memang sudah lemah, dan tak ada pembaruan yang bisa menambahkan keacakan secara surut pada bilangan yang sudah tertulis di sebuah kartu dalam brankas seseorang. Pengguna terdampak harus membuat benih baru dan memindahkan koinnya.

Mengapa keacakan lemah adalah kerugian total yang senyap

Perlu dijelaskan dengan tepat mengapa kelas bug ini begitu berat, sebab ia tidak intuitif.

Benih BIP-39 dua puluh empat kata mewakili 256 bit entropi. Menebaknya bukan sekadar sulit, melainkan tak terbayangkan: tak ada komputer, sekarang maupun kelak, yang menyisir ruang itu dengan gaya kasar. Inilah fondasi tempat seluruh model swakelola bertumpu: kunci Anda aman karena ia satu dari sekian kemungkinan yang besarnya tak terpahami.

Jaminan itu bukan sifat dari kata-katanya. Ia sifat dari proses yang memilih kata-kata itu. Dua puluh empat kata dari pembangkit lemah tampak identik dengan dua puluh empat kata dari pembangkit kuat. Keduanya lolos setiap checksum, menghasilkan alamat sah, dan pulih sempurna di dompet mana pun. Satu-satunya beda: orang lain juga bisa sampai ke sana.

Jadi kegagalannya tak terlihat dari dalam, dan ia utuh. Bukan "penyerang bisa mencuri dari Anda kalau Anda berbuat salah" — tak ada kesalahan untuk dihindari, tak ada tautan phishing untuk ditolak, tak ada dialog konfirmasi untuk dibaca cermat. Uangnya bisa diambil kapan pun penyerang berkenan, dan tanda pertama bahwa ada yang salah adalah uang itu sudah lenyap.

Apa yang diubah dua perangkat

Bug yang sama, dua arsitektur

Inilah bagian yang penting secara arsitektural, dan saya ingin menyatakannya dengan tepat alih-alih dengan bahasa pemasaran.

SSP adalah multisig 2-of-2. Dana berada di alamat yang dikendalikan dua kunci mandiri, dihasilkan di dua perangkat mandiri — satu di ekstensi peramban, satu di aplikasi ponsel SSP Key — dan sebuah transaksi menuntut kedua tanda tangan. Susunan dua-dari-dua adalah seluruh dasar dompet ini.

Sekarang jalankan skenario Coldcard terhadap struktur itu. Andaikan pembangkitan benih di ekstensi punya cacat yang sama, dan penyerang bisa menurunkan kunci peramban Anda sepenuhnya.

Ia tetap tak bisa membelanjakan apa pun. Ia memegang satu dari dua tanda tangan yang diperlukan. Alamat itu tak melepas dana untuk satu kunci, milik siapa pun dan diperoleh bagaimanapun. Untuk memindahkan koin Anda, ia harus pula membobol, secara mandiri dan serentak, kunci di ponsel Anda — aplikasi lain, sistem operasi lain, sumber entropi lain, dihasilkan pada saat yang lain.

Itulah bedanya secara struktural. Pada dompet berkunci tunggal, benih lemah berarti kerugian total. Pada 2-of-2, benih lemah adalah masalah serius yang, dengan sendirinya, bukan kerugian.

Catatan pembatas, dikatakan terang-terangan

Mudah saja berhenti di sini dan membiarkan Anda menyimpulkan bahwa SSP kebal terhadap ini. Ia tidak, dan berpura-pura sebaliknya di tengah insiden orang lain justru saat yang paling keliru untuk itu.

Kedua aplikasi SSP memakai implementasi BIP-39 yang sama — @scure/bip39, dipatok pada versi yang sama di keduanya. Cacat pada pustaka itu sendiri akan mengenai kedua kunci. Kemandirian yang diberikan SSP itu nyata tetapi spesifik: dua benih terpisah, dihasilkan pada waktu berbeda di perangkat berbeda, menarik entropi dari sumber sistem operasi yang berbeda — Web Crypto peramban di satu sisi, CSPRNG platform ponsel di sisi lain. Ini bukan kemandirian dua basis kode yang sepenuhnya tak berkaitan.

Yang dibeli oleh itu adalah perlindungan terhadap mode kegagalan yang benar-benar terjadi di Coldcard: kekeliruan implementasi khas perangkat dalam cara satu produk membangkitkan benihnya. Ia tak akan melindungi dari cacat pada primitif kriptografis bersama yang ada di bawah keduanya.

Itu klaim yang jauh lebih lemah daripada "ini tak mungkin terjadi pada kami", dan itulah yang benar. Siapa pun yang memberi tahu Anda bahwa dompetnya kebal secara kategoris terhadap kegagalan entropi sedang bercerita tentang pemasarannya, bukan tentang arsitekturnya.

Apa yang perlu dibawa pulang

Kalau Anda memegang Coldcard dari jendela firmware itu, satu-satunya asumsi aman adalah benihnya sudah bocor, entah dana sudah berpindah atau belum. Buat benih baru pada firmware yang sudah ditambal dan pindahkan. Perangkat yang belum dikuras bukanlah perangkat yang aman.

Kalau Anda memakai dompet berkunci tunggal apa pun, inilah risiko yang Anda pikul, dan lebih baik disadari ketimbang dicemaskan. Dompet perangkat keras tetap jauh lebih baik daripada alternatifnya bagi kebanyakan orang. Pelajarannya bukan bahwa ia buruk; pelajarannya adalah satu kunci berarti satu titik gagal, dan setiap bagian riwayat kunci itu — termasuk saat ia lahir, bertahun lalu, di firmware yang tak Anda baca — adalah bagian dari model ancaman Anda.

Dan secara umum, utamakan arsitektur yang satu hal keliru saja tidak cukup. Prinsip itulah sebabnya SSP menuntut dua perangkat, sebabnya sebagian operasi menuntut tanda tangan ulang bahkan ketika Anda sudah terautentikasi, dan sebabnya apa yang sebenarnya menghentikan transaksi adalah pertanyaan yang layak diajukan kepada dompet mana pun yang Anda percayai. Jawabannya tak pernah boleh "satu rahasia, dan harapan bahwa ia dibangkitkan dengan benar".

Untuk perbandingan pilihan yang lebih luas dan apa yang sungguh dilindungi masing-masing, membandingkan pilihan swakelola membahas pertukarannya.

Bagikan artikel ini

Artikel terkait