
Ai đó đã và đang rút sạch các ví Bitcoin lẽ ra không thể truy cập được.
Số tiền này nằm trên các thiết bị Coldcard—ví cứng từ nhà sản xuất Canada Coinkite, loại ví không bao giờ kết nối internet. Không có liên kết lừa đảo. Không có mã độc. Không có máy tính xách tay bị đánh cắp. Kẻ tấn công chỉ đơn giản là tìm ra các khóa riêng tư.
Galaxy Research hiện đã theo dõi hơn 1.596 BTC bị đánh cắp qua ba đợt được xác nhận, với một đợt thứ tư bị nghi ngờ có thể nâng tổng số lên khoảng 2.055 BTC—khoảng 130 triệu USD theo giá hiện tại. Một vụ càn quét đã di chuyển 70 triệu USD trong 41 phút. Coinkite cho biết ít nhất 15 kẻ tấn công riêng biệt đã tham gia.
Công ty đã công bố một tài liệu kỹ thuật vào ngày 1 tháng 8 giải thích về những gì đã xảy ra. Đây là một tài liệu thẳng thắn bất thường, và tóm tắt lại là chiếc ví đã "tung xúc xắc gian lận" suốt tám năm mà không ai nhận ra.
Vào năm 2021, Coinkite đã chuyển mật mã của Coldcard sang libsecp256k1, thư viện mà Bitcoin Core sử dụng. Một quyết định đúng đắn. Việc tích hợp chính là nơi mọi thứ sụp đổ.
Việc di chuyển đã âm thầm chuyển hướng việc tạo seed khỏi bộ tạo số ngẫu nhiên phần cứng của Coldcard sang giải pháp phần mềm dự phòng của MicroPython—một thuật toán nhỏ có tên Yasmarang tồn tại cho các thiết bị hoàn toàn không có chip ngẫu nhiên.
🚨LOSSES FROM COLDCARD HACK EXCEED $100M
High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.
If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).
More in the thread below 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard có một chip ngẫu nhiên. Nó chỉ đơn giản là không còn được yêu cầu sử dụng nữa.
Lý do gần như không thể tin được. Một "build guard" đã sử dụng #ifndef, kiểm tra xem một cài đặt có tồn tại hay không, thay vì kiểm tra xem nó có được bật hay không. Coinkite đã định nghĩa cài đặt đó là zero, tức là "tắt". Vì zero vẫn được coi là "đã định nghĩa", kiểm tra an toàn đã vượt qua và quá trình xây dựng hoàn tất. Cả hai phiên bản của hàm đều có chữ ký giống hệt nhau, nên không có gì trông có vẻ sai.
Coinkite viết: "Phần lớn tính ngẫu nhiên trên COLDCARD đến từ một PRNG mà tôi không biết thực sự có trong cơ sở mã nguồn", đề cập đến một bộ tạo số giả ngẫu nhiên—phần mềm tạo ra các số trông có vẻ ngẫu nhiên nhưng tuân theo một công thức cố định từ một giá trị khởi đầu.
Cung cấp cùng một giá trị khởi đầu cho công thức và bạn sẽ nhận được cùng một kết quả đầu ra. Mọi lúc.
Trên các thiết bị Mk2 và Mk3 chạy firmware từ 4.0.1 đến 4.1.9, giá trị khởi đầu đó đến từ số serial của chip và đồng hồ của nó. Coinkite ước tính không gian tìm kiếm kết quả là khoảng 40 bit. Các mẫu mới hơn đã trộn thêm một chút entropy từ phần tử bảo mật, nâng chúng lên khoảng 72 bit.
Cả hai đều không đạt 128, mục tiêu đặt ra.
Khoảng cách này quan trọng hơn vẻ ngoài của nó. Bit là số mũ. Một không gian tìm kiếm 128 bit chứa nhiều kết hợp hơn số nguyên tử trong vũ trụ quan sát được, và không ai tìm kiếm nó. Bốn mươi bit là khoảng một nghìn tỷ—một con số mà một chiếc laptop tốt có thể xử lý. Mỗi bit bạn mất đi sẽ giảm một nửa công việc.
Đội ngũ kỹ thuật của Block, đã công bố phân tích riêng của họ, cho biết không gian tìm kiếm hiệu quả của phần tử bảo mật trên các thiết bị mới hơn là 2^32 ứng cử viên, trung bình khoảng 2^31 lần thử. Đánh giá của họ đối với các bo mạch cũ hơn thì thẳng thắn hơn: với một ID thiết bị, trạng thái hẹn giờ và lịch sử cuộc gọi đã biết, việc tạo ví là có tính xác định.
Và tính xác định là đối lập với tính ngẫu nhiên, điều vốn rất cần thiết cho mật mã.
Coinkite nghi ngờ lỗi này được phát hiện bởi máy móc. Công ty viết: "Chúng tôi phải giả định rằng ai đó đã sử dụng AI để xem xét các phiên bản firmware trước đây của chúng tôi và tình cờ phát hiện ra vấn đề này", đồng thời cho biết họ gần đây đã chạy một trong những mô hình AI tốt nhất hiện có trên cùng mã nguồn nhưng không tìm thấy gì. "Cả kẻ tấn công và người phòng thủ đều có cùng công cụ AI, nhưng hôm nay nó đã không giúp ích cho chúng tôi, mà chỉ giúp đỡ những kẻ xấu."
Firmware đã được sửa lỗi đã có sẵn cho mọi mẫu bị ảnh hưởng. Nó không sửa chữa các seed hiện có; những ví đó phải được tạo lại và chuyển tiền đi. Decrypt đã đưa tin về cách lưu trữ air-gapped thay đổi sau một cuộc tấn công như thế này và theo dõi các khoản lỗ đã vượt quá 114 triệu USD.
Entropy là thước đo lượng thông tin mà kẻ tấn công không biết.
Nói cách khác, về cơ bản đó là sự không chắc chắn, được tính bằng bit. Một bit là một lần tung đồng xu: hai kết quả, và người đoán sẽ đúng một nửa số lần. Mười bit là 1.024 kết quả. Mỗi bit sẽ tăng gấp đôi khối lượng công việc của người đoán.
Một ví Bitcoin là một con số rất lớn được giữ bí mật. Địa chỉ mà mọi người gửi tiền được suy ra từ nó bằng toán học, và quá trình suy luận chỉ diễn ra một chiều—bạn có thể đi từ khóa đến địa chỉ, nhưng không bao giờ ngược lại.
Vì vậy, bảo mật của mỗi ví phụ thuộc vào một câu hỏi: Kẻ tấn công sẽ phải thử bao nhiêu con số?
Nếu con số được chọn với 128 bit entropy, câu trả lời là "nhiều hơn vật lý cho phép." Nếu nó được chọn với 40, câu trả lời là "hãy cho tôi chút thời gian."
Đây là cùng một thuộc tính khiến mối đe dọa từ điện toán lượng tử đáng để tranh luận—một máy lượng tử sẽ tấn công vào phép toán liên kết khóa với địa chỉ. Lỗi của Coldcard không cần đến điều đó. Nó đã khiến các khóa có thể đoán được trước khi phép toán đó được áp dụng.
Đây là lúc từ vựng trở nên khó hiểu. Một bộ tạo số giả ngẫu nhiên tạo ra đầu ra vượt qua các kiểm tra thống kê về tính ngẫu nhiên, vì vậy về cơ bản không có gì mà một bảng tính sẽ gắn cờ. Đầu ra đó vẫn hoàn toàn được xác định bởi giá trị seed của nó. Nó trông có vẻ ngẫu nhiên nhưng không phải.
Tính ngẫu nhiên thống kê và tính không thể đoán trước về mật mã là những thuộc tính khác nhau, và đầu ra của Coldcard sẽ vượt qua bài kiểm tra đầu tiên trong khi thất bại hoàn toàn ở bài kiểm tra thứ hai.
Tính ngẫu nhiên thực sự phải đến từ nhiễu vật lý: nhiễu điện trong mạch, dao động nhiệt, phân rã phóng xạ. Đó là mục đích của chip phần cứng trên Coldcard. Đó là con chip mà cờ build đã ngắt kết nối.
Khi người dùng vội vã tạo lại seed, nhiều người đã tìm đến giải pháp công nghệ thấp rõ ràng. Coldcard cho phép bạn tung xúc xắc vật lý và đưa kết quả vào làm entropy. Hướng dẫn của Coinkite coi các seed được tạo bằng ít nhất 50 lần tung xúc xắc độc lập, riêng tư là không gặp rủi ro từ lỗi này.
Nghe có vẻ ngớ ngẩn, nhưng công ty thực sự bán một túi "100 viên xúc xắc nhỏ nhắn và dễ thương" để giúp toàn bộ quá trình trở nên dễ dàng hơn cho bạn.
Vào ngày 31 tháng 7, nhà phát triển Bitcoin Core Luke Dashjr đã đăng một cảnh báo: "Khá nhiều người gợi ý/sử dụng xúc xắc để giảm thiểu lỗ hổng của Coldcard. Lưu ý rằng xúc xắc thông thường không được thiết kế để bảo mật mật mã. Nếu bạn định làm điều này, bạn có lẽ nên mua xúc xắc casino chính xác. Và ngay cả khi đó, hãy có một nguồn entropy khác."
Cộng đồng Bitcoin trên Twitter đã không đón nhận điều đó một cách bình tĩnh.
Một người dùng viết: "lol giờ bạn thậm chí không thể tung xúc xắc được nữa". "Tự quản lý đã kết thúc…" Một người khác hỏi liệu anh ta có nên thuê một người mắc bệnh Parkinson để ném chúng không. (Không hay chút nào.)
should I hire someone with parkinsons to throw the dice?
— Murern (@Bitcoin_Murern) July 31, 2026
Có lẽ câu trả lời hữu ích nhất đến từ phép toán. Nhà phát triển Justin Sharp đã tính toán chính xác một viên xúc xắc không tốt sẽ tốn của bạn bao nhiêu:
“Quá đáng. Một viên xúc xắc d6 hoàn hảo cho 2,585 bit mỗi lần tung. Một viên xúc xắc có độ lệch rõ rệt, ví dụ với một mặt xuất hiện 20% thời gian thay vì 16,7%, vẫn cho khoảng 2,55 bit. Qua 99 lần tung, đó là sự khác biệt giữa ~256 bit và ~252 bit entropy.”
Bốn bit trong số 256. Đó là toàn bộ tổn thất đối với một viên xúc xắc mất cân bằng rõ rệt.
Dashjr không sai khi nói rằng xúc xắc rẻ tiền có độ lệch đo được—các chấm được đúc phun loại bỏ một lượng nhựa hơi khác nhau từ mỗi mặt, đó chính là lý do tại sao các sòng bạc sử dụng xúc xắc chính xác được lấp đầy. Anh ấy đúng về vật lý và sai về rủi ro. Mất bốn bit từ 256 vẫn để lại bạn ở mức 252. Lỗi của Coldcard đã khiến người dùng chỉ còn 40.
Tuy nhiên, có một lập luận sắc bén hơn ẩn sâu trong lời khuyên của anh ấy, và nó không phải về dung sai sản xuất. Đó là về việc không tin tưởng bất kỳ nguồn duy nhất nào. Thất bại của Coldcard không phải là do entropy của nó hơi bị lệch—mà là do một thành phần đã ngừng đóng góp một cách âm thầm và không ai phát hiện ra.
Nếu bạn đã tạo một seed trên một Coldcard bị ảnh hưởng mà không dùng xúc xắc (thật sự) hoặc một cụm mật khẩu BIP-39 mạnh, seed đó đã bị xâm phạm.
Cập nhật firmware, tạo seed mới, xác minh dấu vân tay, gửi giao dịch thử nghiệm, sau đó chuyển mọi thứ đi. Hướng dẫn của Coinkite sẽ chỉ dẫn chi tiết từng mẫu. Các seed đã xuất mang theo lỗ hổng—việc chuyển một seed bị lỗi sang ứng dụng ví khác không giải quyết được vấn đề gì.
Đối với những người khác, bài học rút ra không phải là ví cứng bị hỏng hay xúc xắc là một cái bẫy.
Mà là "ngẫu nhiên" chỉ là một tuyên bố, và các tuyên bố cần được kiểm tra. Mã nguồn của Coldcard đã công khai trong suốt thời gian đó. Bộ tạo số ngẫu nhiên phần cứng (RNG) dự định nằm ngay trong binary. Các nhà đánh giá đã xác nhận nó tồn tại nhưng chưa bao giờ xác nhận rằng bộ tạo seed thực sự đã gọi nó.
Tám năm kiểm toán đã xem xét đúng mã. Không ai kiểm tra xem nó có hoạt động hay không.