Laporan insiden lengkap · 13 sumber · Anzen Lab

Empat baris kode.
Lebih dari 1.596 BTC hilang.

Dua file, empat baris, lima tahun tak disadari. Ini adalah bedah tuntas kegagalan entro. COLDCARD langkah demi langkah — apa cacatnya, bagaimana penyerang menemukan dompet tersebut, apa yang harus dilakukan oleh pemilik yang terdampak — serta empat pemeriksaan yang dijalankan OneKey agar hal serupa tidak terjadi di sini secara diam-diam.

Satu pengaturan yang terabaikan, dalam angka
5 tahun
Cacat tersebut berada dalam kode yang sepenuhnya publik, tanpa disadari1
1.596+ BTC
dipastikan dicuri dari sekitar 7.300 alamat — dan masih terus bertambah7
41 mnt
penarikan tunggal terbesar — 1.083 BTC, sekitar $70 juta pada saat itu9
1 banding satu triliun
peluang yang harus dikalahkan penyerang pada Mk3 — desain aslinya menuntut satu banding angka dengan 78 digit1
Apa yang salah

Pemeriksaan keamanan yang ada, namun tidak melakukan apa pun

Enam langkah, tanpa jargon. Catatan di sebelah masing-masing langkah adalah versi teknis yang presisi, bagi siapa saja yang ingin memeriksa ulang pekerjaannya.

01

Semua perlindungan bertumpu pada satu angka yang tidak bisa ditebak

Dompet perangkat keras menjalankan beberapa fungsi. Perangkat ini menunjukkan apa yang sebenarnya Anda tanda tangani alih-alih meminta Anda memercayai layar komputer yang terinfeksi, serta menjaga kunci Anda tetap berada di dalam chip yang dirancang tahan terhadap upaya pembukaan paksa. Setiap pertahanan tersebut mengasumsikan hal yang sama: bahwa angka asal turunan kunci Anda tidak mungkin dapat ditebak. Jika angka tersebut dapat ditebak, penyerang tidak perlu melewati pertahanan satu pun. Kumpulan (pool) tempat frasa 24 kata seharusnya diambil memiliki kira-kira satu angka untuk setiap seribu atom di alam semesta yang dapat diamati. Intinya bukanlah agar frasa Anda disembunyikan. Intinya adalah agar kumpulan tersebut tidak dapat ditebak atau dicari.

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:

Sangat menggoda untuk menganggapnya sebagai keamanan yang dipangkas menjadi dua pertiga. Padahal bukan. Setiap bit menggandakan pekerjaan, sehingga kehilangan 88 bit tidak memperkecil ukuran pekerjaan dengan faktor tiga — melainkan memperkecilnya dengan faktor 2⁸⁸. Satu triliun tetaplah angka yang besar bagi seseorang; itu bukan angka yang besar bagi seseorang yang menyewa mesin berkinerja tinggi untuk mengerjakannya satu per satu.

Detail teknis

Pembuatan seed beralih 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⁷³·³ — serta menemukan kondisi yang lebih sempit yang menyisakan jauh lebih sedikit.2

Detail teknis

Pembuatan seed beralih 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⁷³·³ — serta menemukan kondisi yang lebih sempit yang menyisakan jauh lebih sedikit.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 tidak dapat diprediksi: kekuatan lemparan, gravitasi, embusan angin dari AC, getaran samar 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. Perangkat lunak tidak memiliki semua itu. Perangkat lunak menjalankan rumus tetap atas segelintir nilai awal dan menghasilkan jawaban tetap — dan di sini nilai awal tersebut adalah nomor seri chip dan sudah berapa lama perangkat dihidupkan. Penyerang yang mengetahui resep dan bahan-bahannya tidak menebak keluarannya. Mereka menghitungnya kembali.

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 dienumerasi secara offline. Coinkite tidak menganggap seed yang dicampur dengan 50 lemparan yang adil dan privat atau lebih 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 dienumerasi secara offline. Coinkite tidak menganggap seed yang dicampur dengan 50 lemparan yang adil dan privat atau lebih berisiko dari masalah ini saja: 50 × log₂6 ≈ 129 bit.3

04

Dan pemeriksaan yang dimaksudkan untuk menghentikannya menanyakan pertanyaan yang salah

Inilah bagian yang layak untuk direnungkan. Ada pengaman dalam proses build, yang ditulis khusus untuk menghentikan firmware dikirimkan tanpa generator perangkat keras. Pengaman tersebut menanyakan apakah sebuah pengaturan itu ada. Pengaman tersebut tidak menanyakan apakah pengaturan itu diaktifkan. Pengaturan tersebut ada, dan posisinya nonaktif. Jadi pengaman tetap diam, proses build tidak melaporkan galat, dan firmware pun dikirimkan.

Detail teknis

#ifndef hanya menguji keberadaan definisi (definedness). Konfigurasi board menentukan MICROPY_HW_ENABLE_RNG sebagai 0 — terdefinisi, dan dinonaktifkan — sehingga #error tidak pernah terpicu dan linker menyelesaikan rng_get() ke perangkat lunak cadangan (software fallback).3

Detail teknis

#ifndef hanya menguji keberadaan definisi (definedness). Konfigurasi board menentukan MICROPY_HW_ENABLE_RNG sebagai 0 — terdefinisi, dan dinonaktifkan — sehingga #error tidak pernah terpicu dan linker menyelesaikan rng_get() ke perangkat lunak cadangan (software fallback).3

Cacat tersebut, dikutip dari sumbernya. Dua file, empat baris, lima tahun.3

05

Tidak ada yang terlihat salah selama lima tahun

Frasa pemulihan yang lemah terlihat persis seperti frasa yang kuat. Dua puluh empat kata biasa, checksum yang benar, perangkat yang berperilaku normal. Tidak ada peringatan di layar, tidak ada galat dalam proses build, tidak ada hal yang perlu dicurigai. Kode sumber tersebut bersifat publik sepanjang waktu. Siapa pun dapat membacanya. Mampu membaca kode tidak sama dengan seseorang yang benar-benar membaca bagian kode tersebut.

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

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

Halaman ini bukanlah sebuah perayaan kemenangan.

Coinkite telah mengungkapkannya secara terbuka, menerbitkan laporan teknis lengkap, dan merilis perbaikan yang tepat. Sifat COLDCARD yang open-source justru menjadi alasan mengapa para peneliti independen dapat menyusun kronologinya secara utuh. Kami menuliskan ini karena kegagalan tersebut layak untuk dipahami secara mendetail: cacat pada kode yang luput dari perhatian, dan tidak adanya pemeriksaan di tahap akhir yang seharusnya dapat mendeteksinya.

Jika Anda memiliki COLDCARD

Baca ini sebelum hal lainnya

Apa yang perlu Anda lakukan bergantung pada perangkat yang Anda gunakan saat frasa pemulihan pertama kali dibuat — bukan perangkat yang Anda pegang hari ini.

Anggap saja ini masih berlangsung. Frasa-frasa tersebut dibuat agar dapat ditebak pada tahun 2021 dan metodenya kini telah dipublikasikan, sehingga siapa pun dapat menjalankan pencarian yang sama — tidak ada patch yang menutupinya dari luar, dan tidak ada alasan bagi penyerang untuk berhenti. Jika Anda terdampak, asumsi yang aman adalah bahwa waktu adalah satu-satunya hal antara 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 frase dibuat pada firmware yang lebih lama dari 5.6.0 — atau 6.6.0X pada versi Edge — perbarui, buat dompet baru pada firmware yang diperbarui, lalu pindahkan dana Anda. Melakukan pembaruan saja tidak memperbaiki frase yang lama.1

Q — sama, batasnya 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 CoinkitePindahkan ke dompet baru pada perangkat yang sudah Anda percayai, dan kirimkan satu transaksi uji kecil sebelum memigrasikan semuanya. Simpan bukti publik — ID transaksi, alamat, stempel waktu — dan jangan pernah menyimpan rahasia. Anggap siapa pun yang menawarkan untuk memulihkan dana Anda sebagai percobaan pencurian kedua yang sedang berlangsung; layanan semacam itu tidak ada. Menentukan perangkat keras apa yang akan dibeli berikutnya dapat menunggu hingga koin Anda aman — kami lebih memilih Anda mengambil keputusan tersebut secara perlahan.
Dan jika Anda memiliki OneKey

Tidak ada perangkat OneKey yang terdampak

Tidak ada satu pun model yang pernah kami kirimkan. Firmware kami tidak memiliki dependensi libngu, Coinkite, COLDCARD, atau CKCC — jalur kode yang mengalami kegagalan tersebut tidak ada untuk dapat diakses, dan Anda dapat memeriksanya sendiri di repositori kami. Pada perangkat keras kami saat ini, kunci berasal dari generator acak murni di dalam elemen aman bersertifikat, bukan dari perangkat lunak pada prosesor utama, dan pergantian itulah yang menjadi inti dari kegagalan ini.

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

Kami juga tidak begitu saja mempercayainya. Saat berita ini merebak, 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 — serta memublikasikan berkas 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 berbeda yang terjadi secara bersamaan. Pada OneKey, tidak ada satu pun dari hal tersebut yang terjadi — dan masing-masing dapat Anda periksa dan buktikan sendiri tanpa harus mempercayai kata-kata kami begitu saja.

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

Menyusul berita COLDCARD, Anzen Lab menelusuri keacakan kami dari awal hingga akhir — dari mana asalnya, apa yang benar-benar memanggilnya, dan pengaturan build yang menentukan versi mana yang berakhir di perangkat Anda — serta mempublikasikan 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 (reproducible), yang berarti Anda dapat menyusun ulang kodenya sendiri dan mengonfirmasi bahwa kode tersebut menghasilkan perangkat lunak yang persis sama dengan 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 mempublikasikan laporannya — terdapat penilaian terpisah untuk OneKey Pro, Classic 1S, dan SDK kami. Praktik keamanan kami bersertifikasi ISO/IEC 27001, dan lini Pro serta Classic 1S bersertifikasi 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 — insinyur keamanan perangkat keras, firmware, dan aplikasi, yang bekerja sama dengan peneliti luar yang bergantian. Tugas mereka adalah merusak dompet perangkat keras, termasuk milik kami, sebelum ada yang dikirimkan. Ketika berita ini muncul, mereka memeriksa ulang keacakan OneKey dari ujung ke ujung dan mempublikasikan secara persis file mana saja 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

Jangan hanya percaya kata-kata kami. Uji dompet yang ada di tangan Anda.

entro.tools adalah alat open-source gratis yang membaca angka acak aktual yang keluar dari dompet perangkat keras dan menjalankan pengujian kesehatan statistik standar pada angka-angka tersebut — langsung di browser Anda, melalui USB, tanpa ada yang diunggah ke mana pun dan tidak 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 (Chrome atau Edge desktop). Perangkat meminta izin untuk mengekspor entropi — sekumpulan angka acak yang baru saja dihasilkannya, tidak pernah 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 atau tidak. 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
Agar adil: "tidak dapat diuji" tidak sama dengan "tidak aman" — elemen aman tertutup mengikuti jalur sertifikasinya sendiri. Dan hasil yang lulus hanya membuktikan bahwa tidak ada cacat statistik yang terdeteksi hari ini; itu tidak dapat membuktikan ketidakpastian kriptografis, dan tidak dapat menjamin keacakan yang digunakan pada hari dompet Anda pertama kali 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.

Sumber terbuka dan dapat direproduksi. Diaudit oleh pihak luar. Diserang oleh lab kami sendiri. Dan dibayar ketika seseorang menemukan celah. Itulah argumennya; inilah perangkat yang dimaksud.

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

Referensi

Segala sesuatu di halaman ini diambil dari sumber-sumber di bawah ini, yang diakses pada 6 Agustus 2026 — pertama-tama dari panduan dan laporan teknis vendor itu sendiri, kemudian dari analisis tingkat sumber independen dan pencatatan on-chain. Angka kerugian masih terus direvisi ke atas: hitungan terkonfirmasi Galaxy Research berada di 1.596 BTC pada 4 Agustus, dengan dugaan kerugian mendekati 2.055 BTC.