Đội ngũ Kỹ thuật và Bảo mật Bitcoin của Block, dẫn đầu bởi kỹ sư Clay Garrett, đã xác định rằng kẻ tấn công đã sử dụng một tài khoản trả phí tại một nhà cung cấp dịch vụ phân tích blockchain nổi tiếng để xác định và truy vấn hiệu quả các địa chỉ ví dễ bị tổn thương . Các mẫu giao dịch trên chuỗi (on-chain) của kẻ tấn công — với tốc độ quét bất thường, tuần tự các địa chỉ có chung điểm yếu — đã cảnh báo cho các nhà điều tra. Block đã xác nhận có bằng chứng kết nối hoạt động của kẻ tấn công trực tiếp với cơ sở hạ tầng của nhà cung cấp dịch vụ đó
.
Garrett mô tả cuộc điều tra có "độ đặc hiệu phi thường, xuống tới cấp độ tài khoản" . Dịch vụ phân tích này đã hoạt động như một công cụ trinh sát đắc lực, cho phép kẻ tấn công nhanh chóng lập bản đồ các địa chỉ được tạo trên firmware dễ bị tổn thương và ưu tiên nhắm vào những mục tiêu giàu có nhất
.
Lỗi này được đưa vào trong một lần cập nhật firmware vào tháng 3 năm 2021 (bắt đầu từ firmware Mk3 phiên bản 4.0.1) trong quá trình chuyển đổi sang sử dụng thư viện libsecp256k1 của Bitcoin Core . Một lỗi macro trong cấu hình build đã khiến firmware bỏ qua bộ sinh số ngẫu nhiên phần cứng (TRNG) STM32 chuyên dụng của thiết bị và thay vào đó, sử dụng bộ sinh số ngẫu nhiên giả (PRNG) Yasmarang có tính xác định của MicroPython
.
Cụ thể, cấu hình bo mạch sản xuất đặt MICROPY_HW_ENABLE_RNG bằng 0 vì Coldcard có một wrapper TRNG riêng. Tuy nhiên, thư viện libngu đã thất bại trong việc gọi wrapper đó một cách chính xác: điều kiện bảo vệ (#ifndef MICROPY_HW_ENABLE_RNG. Bởi vì macro được định nghĩa (dù giá trị là 0), libngu đã âm thầm kết luận rằng đường dẫn phần cứng có sẵn và liên kết tới hàm
rng_get() dựa trên phần mềm của MicroPython .
Điều này làm giảm entropy hiệu quả xuống chỉ còn khoảng 32–40 bit (thay vì 128+ bit như thiết kế ban đầu), đồng nghĩa với việc chỉ có khoảng 4 tỷ giá trị seed khả thi — một con số hoàn toàn có thể brute-force bằng phần cứng hiện đại . Các seed được tạo ra mà không kèm theo việc tung xúc xắc từ người dùng hoặc mật khẩu phụ BIP 39 (BIP 39 passphrase) là hoàn toàn bị lộ
.
CEO của Coinkite, Rodolfo Novak (NVK), sau đó đã thừa nhận sai lầm: "Tôi đã cố tình đặt MICROPY_HW_ENABLE_RNG bằng 0, nghĩ rằng chúng tôi không cần phiên bản nào cả, nhưng đó không phải là những gì nó làm" .
Lưu ý: Coinkite sau đó đã mở rộng cảnh báo tới một số phiên bản firmware nhất định của Mk4, Mk5 và Q sau khi phân tích sâu hơn, đồng thời phát hành các bản cập nhật firmware khẩn cấp cho tất cả các mẫu bị ảnh hưởng .
Vụ khai thác này đã làm lung lay một trong những lời hứa cốt lõi của việc tự lưu ký — rằng yếu tố an toàn (secure element) của ví phần cứng đảm bảo an toàn mật mã bất chấp lỗi phần mềm .
Để xem chi tiết kỹ thuật, vui lòng tham khảo báo cáo kỹ thuật của Block và bài đăng giải thích kỹ thuật của Coinkite
.