近日,加拿大硬件钱包制造商 Coinkite 旗下产品 Coldcard 被曝出现严重安全漏洞,攻击者在无需网络、无需钓鱼、无需恶意软件的情况下,直接计算出了部分钱包的私钥,并成功盗取资金。Galaxy Research 追踪显示,至少 1,596 枚比特币已在三波确认的攻击中被盗,疑似第四波攻击会将总损失推升至约 2,055 枚比特币,按当前价格计算约合 1.3 亿美元。其中一次攻击在 41 分钟内卷走了价值 7000 万美元的资产。
Coinkite 在 8 月 1 日发布了一份罕见的技术说明文档,承认漏洞源于 2021 年的一次加密库迁移。当时 Coldcard 将密码学实现切换到 libsecp256k1(比特币 Core 同款库),但集成过程中,种子生成悄然从硬件随机数发生器切换到了 MicroPython 的软件回退方案——一个名为 Yasmarang 的伪随机数生成器。Coldcard 原本配备随机数芯片,但构建系统中的 #ifndef 检查逻辑未能识别“定义为 0”即关闭的状态,导致两个签名相同的函数版本被错误选择,随机数芯片从未被调用。
受影响的 Mk2 和 Mk3 设备(固件 4.0.1 至 4.1.9)的种子生成仅依赖芯片序列号和时钟,估算搜索空间约为 40 位。较新型号混入了部分安全元件熵,提升至约 72 位,但仍远低于 128 位的安全目标。Block 工程团队分析指出,较新设备有效安全元件搜索空间约为 2^32 候选,而旧版设备在已知设备 ID、定时器状态和调用历史的情况下,钱包生成完全确定性,即“可预测”而非“弱随机”。
Coinkite 怀疑攻击者使用人工智能审计固件历史版本并发现此问题。公司称曾尝试用当前最好的 AI 模型审查同样代码,却未发现异常。“攻击者和防御者拥有相同的 AI 工具,但今天它没有帮助我们,只帮助了坏人。”目前,Coinkite 已为所有受影响型号发布修复固件,但现有种子无法修复,用户必须重新生成钱包并转移资产。
此次事件再次凸显熵在加密货币中的核心地位。熵衡量攻击者未知的信息量,以比特计数。1 比特相当于抛一次硬币,每增加 1 比特,攻击者尝试次数翻倍。比特币钱包本质上是一个保密的超大数字,地址由它单向推导而来,安全强度完全取决于攻击者需要尝试多少数字。128 位熵意味着“物理上不可能”的搜索量,而 40 位熵只需一台不错的笔记本电脑即可破解。
伪随机数生成器(PRNG)的输出能通过统计随机性测试,但完全由种子决定。统计学随机不等于密码学不可预测,Coldcard 的问题正是如此。真正的随机性必须来自物理噪声,如电路抖动、热波动或放射性衰变,这正是硬件随机数芯片存在的意义。
事故发生后,不少用户转向物理骰子生成新种子。Coinkite 自己甚至出售 100 颗骰子套装。然而,Bitcoin Core 开发者 Luke Dashjr 警告普通骰子并非密码学安全设计,建议使用精密赌场骰子并引入其他熵源。开发者 Justin Sharp 则以数学回应:即使一颗有明显偏差的骰子(例如某面出现概率 20% 而非 16.7%),每掷一次仍提供约 2.55 比特熵,相比完美骰子的 2.585 只损失 0.035 比特;掷 99 次总计损失约 4 比特,从 256 比特降至 252 比特,影响微乎其微。Dashjr 的物理观点正确,但风险量化值得商榷。更核心的教训在于不应信任单一熵源,Coldcard 的失败不是熵略微有偏,而是一个组件静默失效且未被发现。
对于受影响的用户,操作建议是:若在受影响固件上生成的种子未使用实体骰子或强 BIP-39 助记词短语,则该种子已泄露。应立即升级固件、生成新种子、验证指纹、发送测试交易,然后转移全部资金。导出种子会连带风险,将受损种子迁移到其他钱包应用无济于事。此次事件并非证明硬件钱包不可用,而是提醒所有人:“随机”是一种声明,声明需要验证。Coldcard 源代码始终公开,硬件 RNG 明明存在,审计者也确认了它存在,却没有人确认种子生成器真正调用了它。八年的代码审计看向正确的代码,却无人检查它是否运行。
