594 BTC. 500 địa chỉ. 4 block liên tiếp. Một buổi sáng tháng Bảy, các nhà phân tích on-chain của Atlas21 nhìn thấy một điều bất thường: hàng loạt địa chỉ ví lạnh cùng lúc bị quét sạch. Không phải hacker tấn công sàn giao dịch, không phải lừa đảo signature. Nạn nhân vẫn nắm private key của họ trong tay… nhưng ai đó đã sao chép được chúng. Kẻ trộm không cần phá khóa, không cần lừa ai. Kẻ trộm chỉ cần đoán — và đoán trúng.
Coldcard, đứa con cưng của cộng đồng Bitcoin maxi, được mệnh danh là "chiếc ví lạnh dành cho người hoang tưởng". Không Bluetooth, không USB, không camera. Mỗi thao tác phải bấm bằng tay trên một màn hình OLED đen trắng. Coinkite, công ty đứng sau nó, luôn tự hào về mã nguồn mở và khả năng kiểm toán. Nhưng tháng 7 vừa qua, lỗ hổng không nằm ở khả năng cách ly mạng, mà nằm ở cách các firmware cũ tạo ra entropy — nguồn ngẫu nhiên để sinh private key. Theo công bố của Coinkite, các thiết bị Mk3 từ firmware 4.0.1 (tháng 3/2021) trở đi, Mk4/Mk5 trước 5.6.0, và Q trước 1.5.0Q đều có thể tạo ra seed chỉ với khoảng 72 bit entropy. Con số đáng lẽ phải là 128 bit. Và 72 bit, nếu không thực sự ngẫu nhiên, sẽ trở thành một mật mã mà kẻ tấn công có thể tái tạo.
72 bit là bao nhiêu? Nếu là 72 bit ngẫu nhiên thực sự, vũ trụ này sụp đổ trước khi kẻ tấn công brute-force thành công. Nhưng sự thật kỹ thuật đau đớn hơn: khi một thiết bị sinh ra entropy thấp, private key không chỉ nằm trong một không gian nhỏ hơn, mà còn tuân theo một cấu trúc có thể dự đoán được. Kẻ tấn công không cần thử từng khả năng. Kẻ tấn công cần tìm ra thuật toán — hoặc một phần trạng thái khởi tạo — và tái tạo toàn bộ chuỗi. Bằng chứng nằm ở tốc độ: 500 địa chỉ bị dò và rút trong 4 block liên tiếp. Nếu đây là brute-force thông thường, thời gian sẽ tính bằng tháng, không phải bằng phút. Một pipeline quét khối lượng lớn, so sánh với cơ sở dữ liệu về các private key yếu, rồi ký và phát đi trong vài giây. Tôi từng thấy những vụ tấn công kiểu này trong smart contract — nhưng không bao giờ nghĩ mình sẽ thấy nó trên một thiết bị được quảng cáo là "không thể bị xâm phạm". Dựa trên kinh nghiệm audit của tôi, lỗi RNG thuộc loại khó phát hiện nhất, vì nó không thể hiện trong quá trình test thông thường. Bạn kiểm tra được firmware, bạn đọc được mã nguồn, bạn xác minh được chữ ký… nhưng con số ngẫu nhiên được tạo ra bên trong chip bảo mật thì bất khả tri.
Điều thú vị hơn là ranh giới ảnh hưởng. TAPSIGNER, OPENDIME, SATSCARD không bị ảnh hưởng vì dùng codebase khác. Điều này cho thấy lỗi không nằm ở chip bảo mật của toàn bộ hãng, mà nằm ở một nhánh firmware cụ thể. Coinkite khuyến nghị người dùng nâng firmware, tạo seed mới, thêm BIP-39 passphrase, gửi một giao dịch nhỏ để kiểm tra rồi mới chuyển toàn bộ tài sản. Nghe có vẻ đơn giản… nhưng tôi đã chứng kiến quá nhiều người làm sai bước cuối cùng: chuyển tiền vào địa chỉ cũ sau khi đã tạo seed mới. Con người luôn vội vã khi mất tiền. Theo thống kê từ Atlas21, số dư trung bình của các ví bị tấn công chỉ là 0.41 BTC. 110 nạn nhân mất hơn 1 BTC. Nạn nhân lớn nhất mất 29.9 BTC. Con số không lớn như những vụ hack sàn, nhưng nó lại đáng sợ hơn: đây là những người làm đúng mọi thứ — mua ví lạnh, không kết nối internet, không ký bất kỳ giao dịch lạ nào. Họ bị đánh cắp ngay tại lớp an toàn cuối cùng. Người ta thường nói "không có private key thì không có tiền", nhưng vụ này chứng minh một điều khác: có private key, nhưng entropy sinh ra nó không đủ tốt, thì private key chỉ là một bài toán mà kẻ khác đã có đáp án.
Câu chuyện này dễ bị hiểu sai thành "Coldcard kém chất lượng, hãy dùng ví khác". Tôi không mua câu chuyện đó. Vì sự thật còn đáng lo hơn: bạn không bao giờ có thể kiểm tra được chất lượng entropy của một thiết bị trước khi nó phát hành. Nếu Coldcard — một công ty được cộng đồng "paranoid" tin tưởng nhất — vẫn có thể sai ở điểm này, thì niềm tin vào "không đụng internet là an toàn" chỉ là một câu thần chú. Cái nghịch lý nằm ở chỗ: thị trường tăng đang khiến ai cũng vội vã mua thêm ví, chuyển tiền về self-custody, và khoe "not your keys, not your coins". Nhưng càng nhiều người tự lưu trữ, càng nhiều người trở thành mục tiêu mà không hề biết. Đám đông chạy về hướng an toàn, trong khi kẻ tấn công đã đứng sẵn ở cửa sau. Năm ngoái tôi viết một câu hỏi về NFT: "NFT: bản sắc hay là trò chơi đố vui?" Hôm nay, câu hỏi ấy ám ảnh tôi theo một cách khác. Bản sắc của một chiếc ví lạnh không nằm ở thương hiệu, mà nằm ở thứ bạn không nhìn thấy — entropy. Và entropy, một khi biến thành trò chơi đố vui, thì trò chơi đó đã kết thúc.
594 BTC đã bốc hơi, và thị trường gần như không phản ứng. BTC vẫn giao dịch quanh 64.000 USD, như thể không có chuyện gì xảy ra. Nhưng với những ai đang ôm một chiếc ví lạnh, cơn ác mộng này không kết thúc khi Coinkite phát hành bản vá. Nó kết thúc khi bạn tự trả lời được câu hỏi: entropy từ đâu ra, và ai có thể tái tạo nó? Bản sắc hay là trò chơi đố vui — câu hỏi năm xưa dành cho NFT, giờ đây đang gõ cửa từng chiếc ví lạnh.