Coldcard 的存在意义,就是让私钥永远不必碰网络。加拿大创业家 Jonathan Goodman 照着这套规则做到极致:存放私钥的 Coldcard 从未连过网,锁进银行保险箱;种子助记词另外放进第二个保险箱,从没让任何人看过。但 7 月 29 日,他的钱包仍被一扫而空,损失 18.25 枚比特币,以当时币价计超过 117 万美元。「也许最难受的是,我做对了所有事。」他 8 月 1 日在 X 上写道。
Goodman 不是唯一一个。研究机构 Galaxy Research 表示,高度信心认为约有 1,596 枚比特币、价值逾 1 亿美元,从约 7,300 个地址在连串攻击中被窃走;该机构研究主管 Alex Thorn 于 8 月 4 日估计,至少 15 组不同攻击者利用了同一个漏洞,而且没有任何一组需要实际碰触设备。
问题不在硬件,在种子怎么被生出来
Block 的调查指出,这起事件的关键不是 Coldcard 设备本身被入侵,而是保护资金的种子助记词在生成阶段就出了错。比特币钱包的随机性(entropy)决定了种子有多难被猜中,每多一比特,可能的组合就翻一倍。Coldcard 原本应从设备内置的硬件乱数产生器取得随机性,却因组态错误改用较简单的软件产生器,这套软件依赖设备信息与时间戳,并非完全随机、可被缩小范围甚至重现。

受影响程度并不一致。Mk2 与 Mk3 设备在这个流程中完全没有取得安全随机性;Mk4、Q 与 Mk5 虽有取得一部分,软件却只保留其中一小段。Coinkite 估计,这些较新设备实际只产出 72 比特随机性,远低于设计目标的 128 比特,等于把种子的可能组合缩减到原本的 2 的 56 次方分之一以下。
藏了四年的错误,来自固件 4.0.0
这个缺陷是 2021 年 3 月 17 日随固件 4.0.0 一起进入 Coldcard 的,Coinkite 当时的版本说明写着「All New Code, Same Great Features」,并在致谢名单感谢一个名为「switck」的帐号提供新的源代码函数库。比特币开发者 James O'Beirne 在审计中比对了 58 处以「switck」帐号发布的代码变更,发现这些变更带有 Coinkite 共同创办人 Peter Gray 以本名发布时所使用的同一组密码学签名,等于指认 switck 就是 Gray 本人。switck 开发的 libngu 程序库被集成进用户设备的 Coldcard 固件,其中一项工作正是协助产生创建钱包所需的随机性。
O'Beirne 说他今年 5 月审计时就对这套流程提出质疑,向 Coinkite 反映可能存在缺陷,得到的回复是「如果真有问题,大概早就被发现了」。Coinkite 事后表示,公司自己做的 AI 辅助审查在事发前也没抓出这个错误;漏洞曝光后再用多个主流 AI 模型测试,同样没能揪出问题。
Coinkite 已对所有受影响型号与发行轨道发布修正固件,但修正只对「未来」生成的种子有效,无法补救已经用有缺陷软件产生出来的旧种子。受影响用户必须安装修正固件、重新生成新的种子,再把比特币转移到新地址——Goodman 这类把私钥与助记词分开锁进不同保险箱的用户,防的是实体层的窃取,却挡不住种子在诞生那一刻就已经不够随机。






