Laporan insiden lengkap · 16 sumber · Anzen Lab

Empat baris kode.
Lebih dari 1.596 BTC hilang.

Pada Maret 2021, sebuah versi firmware COLDCARD berhenti meminta angka acak dari chip perangkat keras dan menggunakan software biasa untuk membuatnya. Tidak ada yang mengetahuinya selama lima tahun. Pada Juli 2026, para penyerang menghitungnya dan mulai menguras dompet-dompet tersebut.

Biaya dari pengaturan tersebut
5 tahun
Cacat tersebut berada dalam kode yang sepenuhnya publik, tanpa disadari1
1.596+ BTC
dikonfirmasi dicuri dari sekitar 7.300 alamat, dan masih terus bertambah7
41 mnt
pencurian tunggal terbesar: 1.083 BTC, sekitar $70 juta pada saat itu9
1 banding satu triliun
peluang yang harus dikalahkan penyerang pada Mk3. Desain aslinya membutuhkan satu kesempatan dalam angka dengan 78 digit1
Apa yang salah

Pemeriksaan keamanan yang ada, namun tidak melakukan apa pun

01

Semua perlindungan bertumpu pada satu angka yang tidak bisa ditebak

Sebuah hardware wallet melakukan beberapa tugas. Perangkat ini menunjukkan apa yang sebenarnya Anda tandatangani alih-alih meminta Anda mempercayai layar komputer yang terinfeksi, dan menjaga kunci Anda tetap berada di dalam chip yang dirancang untuk tahan terhadap pembongkaran. Setiap pertahanan tersebut mengasumsikan angka tempat asal kunci Anda tidak dapat ditebak. Jika angka itu bisa ditebak, penyerang tidak perlu melewati pertahanan apa pun. Kumpulan kata tempat frasa 24 kata diambil memiliki kira-kira satu angka untuk setiap seribu atom di alam semesta yang dapat diamati. Kumpulan sebesar itu tidak mungkin untuk dicari. Itulah keseluruhan model keamanannya.

Detail teknis

12 kata membawa 128 bit entropi, 24 kata membawa 256, ditambah checksum dari SHA-256 dari entropi tersebut. BIP-39 merentangkan hasilnya menjadi master key BIP-32.

Detail teknis

12 kata membawa 128 bit entropi, 24 kata membawa 256, ditambah checksum dari SHA-256 dari entropi tersebut. BIP-39 merentangkan hasilnya menjadi master key BIP-32.

02

COLDCARD berhenti mengambil dari kumpulan angka tersebut

Perubahan firmware tahun 2021 secara diam-diam menghentikan dompet untuk meminta chip keacakan khususnya untuk mendapatkan angka tersebut, dan alih-alih meminta perangkat lunak biasa untuk menghitungnya. Jika berdampingan, inilah keseluruhan insiden tersebut:

Itu bukan keamanan yang berkurang dua pertiga. Setiap bit melipatgandakan pekerjaan, jadi 88 bit yang lebih sedikit memperkecil ukuran pekerjaan dengan faktor 2⁸⁸. Satu triliun adalah angka yang besar bagi seseorang dan angka yang kecil bagi seseorang yang menyewa mesin berkinerja tinggi untuk mengerjakannya.

Detail teknis

Pembuatan seed berpindah dari ckcc.rng_bytes() ke ngu.random.bytes(). Coinkite memperkirakan sekitar 40 bit ruang pencarian yang tersisa pada Mk3 dan sekitar 72 pada Mk4/Mk5/Q, terhadap target 128-bit. Analisis independen oleh Block mencapai tingkat yang sama (di bawah 2⁴⁰·⁷ dan di bawah 2⁷³·³) dan menemukan kondisi yang lebih sempit di mana jauh lebih sedikit ruang yang tersisa.2

Detail teknis

Pembuatan seed berpindah dari ckcc.rng_bytes() ke ngu.random.bytes(). Coinkite memperkirakan sekitar 40 bit ruang pencarian yang tersisa pada Mk3 dan sekitar 72 pada Mk4/Mk5/Q, terhadap target 128-bit. Analisis independen oleh Block mencapai tingkat yang sama (di bawah 2⁴⁰·⁷ dan di bawah 2⁷³·³) dan menemukan kondisi yang lebih sempit di mana jauh lebih sedikit ruang yang tersisa.2

Kumpulan angka yang seharusnya diambil untuk 24 kata
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
Kumpulan angka yang benar-benar diambil oleh COLDCARD
1,099,511,627,776
03

Karena perangkat lunak tidak bisa menjadi acak

Pikirkan tentang apa yang membuat lemparan koin menjadi tidak dapat diprediksi. Kekuatan lemparan, gravitasi, embusan angin dari AC, getaran halus di tanah. Puluhan pengaruh yang dapat Anda sebutkan dan puluhan yang tidak dapat Anda sebutkan. Tidak seorang pun dapat menghitung lintasannya, sehingga tidak seorang pun dapat menebak hasilnya. Software bekerja dengan cara yang berbeda. Software menjalankan rumus tetap pada segenggam nilai awal dan menghasilkan jawaban yang tetap. Di sini nilai-nilai tersebut adalah nomor seri chip dan berapa lama perangkat telah dinyalakan. Penyerang yang mempelajari resep dan bahan-bahannya akan menghitung ulang hasilnya alih-alih menebaknya.

Detail teknis

Dengan RNG perangkat keras yang dinonaktifkan, rng_get() terhubung ke Yasmarang PRNG milik MicroPython, diberi seed dari status non-rahasia (UID, SysTick, RTC) dan tidak mengumpulkan entropi baru setelah itu, sehingga kandidat dapat dientukan secara offline. Coinkite tidak menganggap seed yang dicampur dengan 50 atau lebih lemparan yang adil dan privat berisiko dari masalah ini saja: 50 × log₂6 ≈ 129 bit.3

Detail teknis

Dengan RNG perangkat keras yang dinonaktifkan, rng_get() terhubung ke Yasmarang PRNG milik MicroPython, diberi seed dari status non-rahasia (UID, SysTick, RTC) dan tidak mengumpulkan entropi baru setelah itu, sehingga kandidat dapat dientukan secara offline. Coinkite tidak menganggap seed yang dicampur dengan 50 atau lebih lemparan yang adil dan privat berisiko dari masalah ini saja: 50 × log₂6 ≈ 129 bit.3

04

Dan pemeriksaan yang dimaksudkan untuk menghentikannya menanyakan pertanyaan yang salah

Ada pengaman dalam proses build, yang ditulis khusus untuk menghentikan firmware dikirimkan tanpa generator perangkat keras. Pengaman tersebut menanyakan apakah sebuah pengaturan ada, bukan apakah pengaturan tersebut diaktifkan. Pengaturan itu ada, dan dalam keadaan mati. Pengaman tetap diam, proses build tidak melaporkan adanya kesalahan, dan firmware pun dikirimkan.

Detail teknis

#ifndef hanya menguji apakah sesuatu telah didefinisikan. Konfigurasi board mendefinisikan MICROPY_HW_ENABLE_RNG sebagai 0, didefinisikan dan dinonaktifkan, sehingga #error tidak pernah terpicu dan linker mengarahkan rng_get() ke fallback software.3

Detail teknis

#ifndef hanya menguji apakah sesuatu telah didefinisikan. Konfigurasi board mendefinisikan MICROPY_HW_ENABLE_RNG sebagai 0, didefinisikan dan dinonaktifkan, sehingga #error tidak pernah terpicu dan linker mengarahkan rng_get() ke fallback software.3

Cacat tersebut, dikutip dari kode sumber.3

05

Tidak ada yang terlihat salah selama lima tahun

Frasa pemulihan yang lemah terlihat persis seperti yang kuat. Dua puluh empat kata biasa, checksum yang benar, dan perangkat yang beroperasi secara normal. Tidak ada peringatan di layar dan tidak ada galat pada build. Kode sumber tersebut bersifat publik sepanjang waktu. Membacanya tetap mengharuskan seseorang membuka file tertentu itu.

Detail teknis

Panjang keluaran, non-nol, dan non-pengulangan semuanya lulus pada PRNG yang lemah, sehingga uji kesehatan (smoke test) biasa tidak dapat mendeteksinya juga.

Detail teknis

Panjang keluaran, non-nol, dan non-pengulangan semuanya lulus pada PRNG yang lemah, sehingga uji kesehatan (smoke test) biasa tidak dapat mendeteksinya juga.

06

Lalu seseorang melakukan perhitungan aritmatika

Mereka tidak pernah menyentuh satu perangkat pun. Mereka menghasilkan kemungkinan frasa di mesin mereka sendiri, mencari tahu alamat Bitcoin mana yang akan dihasilkan oleh masing-masing frasa, dan memeriksa alamat tersebut terhadap blockchain publik. Setiap alamat yang memiliki saldo dikosongkan. Dompet yang dibiarkan tercabut di laci sejak 2022 sama rentannya dengan dompet yang digunakan sehari-hari.

Detail teknis

Kandidat diturunkan secara offline melalui BIP-39/BIP-32; hanya pencarian saldo akhir yang menyentuh jaringan, sehingga tidak ada sinyal di sisi korban sebelumnya.3

Detail teknis

Kandidat diturunkan secara offline melalui BIP-39/BIP-32; hanya pencarian saldo akhir yang menyentuh jaringan, sehingga tidak ada sinyal di sisi korban sebelumnya.3

Halaman ini bukanlah sebuah perayaan kemenangan.

Coinkite mengungkapkan kerentanan tersebut, menerbitkan laporan teknis, dan merilis perbaikan. Peneliti independen dapat merekonstruksi apa yang terjadi karena COLDCARD bersifat open source.

Satu peringatan mengenai perkiraan: angka-angka tersebut menggambarkan seberapa banyak tebakan yang dihadapi penyerang berdasarkan asumsi saat ini, bukan stopwatch. Tidak seorang pun dapat memberi tahu Anda berapa lama waktu yang dibutuhkan untuk meretas dompet tertentu.2

Jika Anda memiliki COLDCARD

Baca ini sebelum hal lainnya

Apa yang perlu Anda lakukan tergantung pada perangkat mana yang Anda gunakan saat frasa pemulihan pertama kali dibuat, bukan perangkat yang Anda pegang hari ini.

Asumsikan hal ini masih terjadi. Frasa tersebut dibuat agar mudah ditebak pada tahun 2021 dan metodenya sekarang sudah bersifat publik, sehingga siapa pun dapat menjalankan pencarian yang sama. Tidak ada patch yang menutup celah ini dari luar, dan tidak ada alasan bagi penyerang untuk berhenti. Jika Anda terdampak, asumsi amannya adalah waktu adalah satu-satunya hal yang memisahkan Anda dan mereka.

Mk2 dan Mk3: pindahkan koin Anda sekarang

Rentang yang terdampak adalah firmware 4.0.1 hingga 4.1.9. Versi 4.2.0 memperbaiki cara pembuatan frase baru, tetapi tidak ada pembaruan yang dapat kembali dan menambahkan keacakan pada frase yang sudah ada. Buat dompet baru di perangkat yang Anda percayai dan pindahkan dana Anda.1

Mk4 dan Mk5: periksa versi firmware

Jika frasa dibuat pada firmware yang lebih lama dari 5.6.0 (atau 6.6.0X pada build Edge), perbarui, buat dompet baru pada firmware yang diperbarui, lalu pindahkan dana Anda. Memperbarui saja tidak memperbaiki frasa yang lama.1

Q: sama, batasannya adalah 1.5.0Q

Perbarui ke 1.5.0Q atau yang lebih baru, atau 6.6.0QX pada versi Edge, buat dompet baru, catat dan uji cadangan, kirim satu transaksi uji coba kecil, lalu pindahkan sisanya.1

Apakah memperbarui firmware COLDCARD memperbaiki frase pemulihan yang sudah saya miliki?

Bagaimana cara mengetahui firmware mana yang membuat frase pemulihan COLDCARD saya?

Bagaimana cara memeriksa apakah alamat saya terlibat dalam masalah ini?

Apakah lemparan dadu atau passphrase melindungi frase pemulihan COLDCARD?

Apakah pengumuman Coinkite mencakup setiap COLDCARD yang terdampak?

Pemberitahuan teknis resmi CoinkitePindah ke dompet baru di perangkat yang sudah Anda percayai, dan kirimkan satu transaksi uji coba kecil sebelum memigrasikan semuanya. Simpan bukti publik (ID transaksi, alamat, stempel waktu) dan jangan pernah membagikan rahasia. Siapa pun yang menawarkan untuk memulihkan dana Anda adalah penipuan susulan yang sedang berjalan, dan layanan semacam itu tidak ada. Perangkat keras apa yang harus dibeli selanjutnya dapat menunggu hingga koin Anda aman.
Dan jika Anda memiliki OneKey

Tidak ada perangkat OneKey yang terdampak

Bukan satu pun model yang pernah kami kirimkan. Firmware kami tidak memiliki dependensi libngu, Coinkite, COLDCARD, atau CKCC, sehingga jalur kode yang gagal tersebut tidak ada untuk dijangkau, dan Anda dapat memeriksanya sendiri di repositori kami. Pada perangkat keras kami saat ini, kunci berasal dari generator acak murni di dalam secure element bersertifikat, tidak pernah dari software pada prosesor utama. Subtitusi semitulah yang menjadi inti kegagalan ini.

Tidak terdampak
OneKey Pro
OneKey Classic 1S
OneKey Classic 1S Pure
OneKey Touch
OneKey Classic
OneKey Mini

Kami juga tidak begitu saja mempercayainya begitu saja. Ketika berita ini muncul, Anzen Lab menelusuri keacakan kami dari ujung ke ujung (dari mana asalnya, apa yang memanggilnya, dan pengaturan build yang menentukan versi mana yang sampai ke perangkat Anda) dan menerbitkan file persis yang mereka periksa.12

Baca pemeriksaan ulang Anzen Lab
Pertanyaan yang sebenarnya ingin Anda ajukan

Bisakah ini terjadi pada OneKey?

Kegagalan ini memerlukan tiga hal terpisah untuk terjadi secara bersamaan. Pada OneKey, tidak ada satu pun dari hal tersebut yang terjadi, dan Anda dapat memeriksa ketiga hal tersebut sendiri.

Dari mana sumber milik kami

Jadi, dari mana asal keacakan OneKey?

Dibuat di dalam chip bersertifikasi EAL 6+

Kunci Anda dibuat dan disimpan di dalam chip khusus yang tahan gangguan, alih-alih prosesor serbaguna yang menjalankan fungsi lainnya. EAL 6+ adalah tingkat jaminan yang digunakan untuk kartu pembayaran dan identitas.

Keacakan yang memantau dirinya sendiri

Chip tersebut menghasilkan keacakan dari derau fisik nyata, dan terus-menerus menguji keluarannya sendiri. Jika keacakan tersebut mulai berperilaku tidak normal, chip akan menyadarinya alih-alih terus berjalan secara diam-diam.

Kami memeriksa ulang milik kami

Setelah berita COLDCARD muncul, Anzen Lab menelusuri keacakan kami sendiri secara menyeluruh (dari mana asalnya, apa yang sebenarnya memanggilnya, dan pengaturan build yang menentukan versi mana yang berakhir di perangkat Anda) dan menerbitkan file persis yang mereka lihat.11

OneKey Pro's EAL 6+ certified secure element
EAL 6+ Badge
Setiap transaksi, diamankan oleh chip bersertifikasi EAL 6+
Tempat keacakan dibuat
Elemen pengaman
THD89
Tingkat jaminan
Bersertifikasi EAL 6+
Sumber entropi
TRNG perangkat keras, pengujian mandiri
Keluaran bersertifikasi terhadap
BSI AIS 20 / 31
Diaudit ulang setelah insiden ini
Anzen Lab, sumber dipublikasikan
Cara OneKey dibuat, dan siapa yang memeriksanya

Empat lapis pemeriksaan pada setiap OneKey, dan tidak satupun yang saling mempercayai

Setiap lapisan dapat melewatkan sesuatu. Intinya adalah keempatnya harus melewatkan hal yang sama. COLDCARD tidak memiliki perlindungan cadangan seperti itu: satu pengaturan build yang tidak diperiksa sudah cukup.

01

Open-source yang benar-benar dapat Anda verifikasi

Firmware dan aplikasi kami bersifat publik di GitHub, dan build kami dapat direproduksi, yang berarti Anda dapat membangun ulang kodenya sendiri dan mengonfirmasi bahwa kode tersebut menghasilkan persis software yang berjalan di perangkat Anda. Itulah langkah yang mendeteksi masalah "kode benar, versi salah".

OneKey di GitHub
02
SlowMist

Pihak luar memeriksa kami, secara resmi

Perusahaan keamanan SlowMist mengaudit kami dan menerbitkan laporannya. Penilaian terpisah mencakup OneKey Pro, Classic 1S, dan SDK kami. Praktik keamanan kami bersertifikat ISO/IEC 27001, dan lini Pro serta Classic 1S bersertifikat terhadap EN 18031 oleh badan yang ditunjuk Uni Eropa. Semuanya dipublikasikan, tidak ada yang dinilai sendiri.13

Baca ringkasan audit SlowMist
03

Tim yang dibayar untuk merusak produk kami sendiri

Anzen Lab adalah tim keamanan internal kami yang terdiri dari para insinyur keamanan perangkat keras, firmware, dan aplikasi, yang bekerja sama dengan sekelompok peneliti luar yang berotasi. Tugas mereka adalah meretas hardware wallet, termasuk milik kami, sebelum ada yang dikirimkan. Ketika berita ini muncul, mereka memeriksa ulang keacakan OneKey sendiri dari ujung ke ujung dan menerbitkan file persis yang mereka periksa.11

Baca analisis Anzen Lab
04

Kami membayar orang luar untuk menemukan kesalahan kami

Siapa pun dapat melaporkan celah kepada kami secara pribadi, melalui program publik kami di BugRap atau langsung ke [email protected], dan mendapatkan bayaran untuk itu. Tingkat keparahan menentukan pembayaran, dinilai berdasarkan CVSS. Intinya adalah membuat pelaporan kepada kami lebih menarik daripada menjualnya.15

OneKey di BugRap
entro.tools · Dibangun oleh pendiri kami

Uji dompet di tangan Anda

entro.tools adalah alat sumber terbuka gratis yang membaca angka acak aktual yang keluar dari hardware wallet dan menjalankan pengujian kesehatan statistik standar pada angka tersebut, di browser Anda, melalui USB, tanpa ada yang diunggah ke mana pun dan tanpa memerlukan pembaruan firmware.

Alat ini berfungsi pada Trezor dan KeepKey serta pada perangkat kami sendiri, sehingga Anda dapat membandingkannya berdampingan alih-alih mempercayai klaim satu vendor saja.
Cara kerjanya
Di browser Anda, melalui WebUSB
Pengujian yang diterapkan
FIPS 140-2, NIST SP 800-22 / 90B
Data Anda
Tidak pernah meninggalkan halaman
Pembaruan firmware
Tidak diperlukan
Pemeriksaan Entropi

Menjalankan pengujian kesehatan FIPS 140-2, NIST SP 800-22, dan SP 800-90B secara lokal melalui WebUSB (desktop Chrome atau Edge). Perangkat meminta untuk mengekspor entropi, sekumpulan angka acak yang baru saja dihasilkannya, dan tidak pernah meminta frasa pemulihan Anda.16

Uji universal Maurer memerlukan setidaknya 387.840 bit; di bawah itu laporan menandainya sebagai dilewati, bukan menghilangkannya diam-diam.16

Dompet mana saja yang dapat diperiksa

Apakah pihak luar dapat membaca angka acak mentah suatu perangkat secara keseluruhan. Ini adalah satu dimensi yang sempit. Lihat catatan di bawahnya.

OneKey
Dapat diverifikasi sendiri
Semua model, firmware bawaan16
Trezor
Dapat diverifikasi sendiri
Semua model, protokol kabel bersama16
KeepKey
Dapat diverifikasi sendiri
Keluarga protokol kabel Trezor16
Ledger
Percayai vendor
Elemen pengaman tertutup; tidak ada perintah host yang mengekspos angka acak mentah16
BitBox02
Percayai vendor
Permintaan angka acak protokol dihapus oleh vendor16
Blockstream Jade
Percayai vendor
Host hanya dapat menambahkan entropi; tidak ada cara untuk membaca kembali sumbernya16
COLDCARD
Percayai vendor
Memiliki USB, tetapi protokolnya sama sekali tidak berisi perintah entropi16
Keystone
Percayai vendor
Terisolasi secara udara (air-gapped) berdasarkan desain; USB hanya membawa info perangkat dan pembaruan firmware16
"Tidak dapat diuji" dan "tidak aman" adalah dua klaim yang berbeda. Secure element tertutup mengikuti jalur sertifikasinya sendiri. Hasil yang lulus hanya membuktikan bahwa tidak ada cacat statistik yang muncul hari ini. Hal itu tidak dapat membuktikan ketidakpastian kriptografis, dan tidak mengatakan apa pun tentang keacakan yang digunakan pada hari dompet Anda dibuat.
Masih bertanya-tanya

Pertanyaan yang muncul bagi yang lainnya

Apakah OneKey terdampak oleh kegagalan entro COLDCARD?

Dompet perangkat keras mana saja yang terdampak oleh kegagalan entro COLDCARD?

Bisakah saya menguji keacakan dompet saya sendiri?

Bagaimana cara menilai apakah sebuah dompet perangkat keras dapat dipercaya?

Keamanan yang dapat Anda periksa, bukan keamanan yang diminta untuk Anda percaya.

Open source dan dapat direproduksi, diaudit oleh pihak luar, diuji oleh lab kami sendiri, dan diberi imbalan ketika seseorang menemukan celah. Inilah perangkat-perangkat yang dibicarakan dalam argumen tersebut.

Cold Storage Weeks
Hingga $50 dalam bentuk Bitcoin untuk setiap perangkat, berlaku hingga 17 Agustus.

Referensi

Sumber di bawah ini, diambil pada 6 Agustus 2026. Saran dan laporan teknis Coinkite sendiri berada di urutan pertama, diikuti oleh analisis tingkat sumber independen dan akuntansi on-chain. Angka kerugian masih terus direvisi ke atas: Galaxy Research mengonfirmasi 1.596 BTC pada 4 Agustus dan memperkirakan dugaan kerugian mendekati 2.055 BTC.