Block的比特币工程和安全团队在工程师Clay Garrett的带领下,发现了攻击者的一个关键破绽。他们确认,攻击者使用了一家知名区块链数据服务商的付费账户,来高效地识别和查询那些使用存在漏洞的固件生成的地址。攻击者在链上留下的痕迹——异常快速且连续地扫描具有相同弱点的地址——引起了调查人员的警觉。Block掌握了确凿的证据,将攻击者的活动与该服务商的底层基础设施直接联系起来
。Garrett形容这种关联具有“非同寻常的精确度,甚至精确到了账户级别”
。这家数据分析服务实际上充当了攻击者的侦察工具,让他能快速绘制出脆弱钱包的地图,并优先攻击那些最富有的目标
。
简单来说,Coldcard设备本应使用其专用硬件随机数生成器(TRNG)来生成加密安全的种子。但生产板卡配置将MICROPY_HW_ENABLE_RNG这个宏设置为了0,因为Coldcard有自己的硬件RNG封装。关键问题出在名为libngu的密码学支持库上:它的条件检查指令是#ifndef MICROPY_HW_ENABLE_RNG。因为宏被定义了(即便值被设置为0),
libngu库便错误地认为硬件路径可用,并绑定到了MicroPython基于软件的rng_get()函数上。
这个错误导致设备在生成种子时,使用的不是硬件TRNG,而是MicroPython中一个确定性的Yasmarang软件随机数生成器。结果,有效熵值从预期的128比特以上骤降至大约32到40比特,这意味着可能的种子值只有约40亿个,对于现代硬件来说,暴力破解几乎不费吹灰之力
。只有那些没有添加用户掷骰子或BIP 39密码短语的种子才会完全暴露
。
| 受影响 | 未受影响(最初评估) |
|---|---|
| Coldcard Mk3,固件版本4.0.1至5.0.3 | Mk4, Q, Mk5(根据Coinkite初步分析) |
| 未使用用户手动掷骰子或BIP 39密码短语生成的种子 | 使用了用户手动掷骰子或密码短语生成的种子 |