Coldcard 漏洞细节曝光:私钥可被推算,失窃比特币已超 1596 枚

Coldcard 漏洞细节曝光:私钥可被推算,失窃比特币已超 1596 枚

N
News Editor
2026-08-04 19:11:36
Galaxy Research 追踪显示,Coldcard 硬件钱包漏洞已在 3 轮确认攻击中造成超过 1596 枚 BTC 被盗,若计入疑似第 4 轮,总额接近 2055 枚 BTC。Coinkite 8 月 1 日发布技术说明称,问题出在种子生成流程错误切换到软件伪随机数生成器,导致部分设备熵不足。受影响钱包需重新生成种子并转移资金,单纯升级固件无法修复已有种子。

本应无法被触达的比特币钱包,还是被人清空了。

Coldcard 漏洞细节曝光:私钥可被推算,失窃比特币已超 1596 枚 2

这些资金存放在 Coldcard 设备中。这是加拿大厂商 Coinkite 推出的硬件钱包,设计上不接触互联网。没有钓鱼链接,没有恶意软件,也不是电脑失窃。攻击者直接算出了私钥。

Galaxy Research 目前追踪到 3 轮已确认攻击,共有超过 1596 枚 BTC 从约 7300 个地址被盗,另有 14 起更小规模事件。若再算上一个尚未确认、但被怀疑相关的第 4 轮,失窃总量将升至约 2055 枚 BTC,按当前价格约合 1.3 亿美元。其中一次集中转移在 41 分钟内扫走了 7000 万美元。Coinkite 表示,至少有 15 名不同攻击者已经参与其中。

Coinkite 在 8 月 1 日发布了一份技术背景说明,解释问题出在哪里。按照这份文件的说法,简化来看,Coldcard 的钱包在过去 8 年里一直像是在“掷了被动过手脚的骰子”,而外界一直没有发现。

问题起点:随机数芯片存在,但种子生成没有调用它

2021 年,Coinkite 将 Coldcard 的加密实现迁移到 libsecp256k1,也就是 Bitcoin Core 使用的同一套库。这个决定本身没有问题,真正出错的是集成过程。

迁移后,种子生成流程在没有明显提示的情况下,不再使用 Coldcard 自身的硬件随机数发生器,而是切换到了 MicroPython 的软件后备方案。这个方案名为 Yasmarang,是一种伪随机数生成器,原本用于没有随机数芯片的设备。

Coldcard 并不是没有随机数芯片,而是程序后来不再去调用它。

原因非常细小。构建保护使用了 #ifndef,这个条件检查的是某个设置是否存在,而不是该设置是否被启用。Coinkite 当时把这个设置定义为 0,也就是“关闭”。但在 C 语言预处理逻辑里,0 依然算“已定义”,因此检查通过,构建继续完成。由于两个版本的函数签名完全一致,表面上看不出异常。

Coinkite 在说明中写道:“COLDCARD 上的大部分随机性来自一个 PRNG,而我此前并不知道这段代码实际上存在于源码库中。”这里的 PRNG 指伪随机数生成器,也就是一套会生成“看起来随机”数字的软件算法,但它遵循固定规则,并从一个起始值开始运行。

只要给这套算法相同的起始值,它每次都会输出同样的结果。

受影响设备的搜索空间远低于目标值

在运行 4.0.1 到 4.1.9 固件的 Mk2 和 Mk3 设备上,这个起始值来自芯片序列号和时钟。Coinkite 估计,这带来的搜索空间大约只有 40 bit。较新的设备会混入少量安全元件熵,搜索空间提高到约 72 bit。

这两者都达不到 128 bit 这一目标。

这个差距比表面看起来更关键。bit 代表指数级增长。128 bit 的搜索空间,其组合数量超过可观测宇宙中的原子数,几乎不存在被穷举的现实可能。40 bit 则大约是一万亿种组合,一台性能不错的笔记本电脑就可以尝试。每少 1 bit,攻击所需工作量就减半。

Block 的工程团队也发布了自己的分析。该团队认为,较新设备中安全元件的有效搜索空间约为 2^32 个候选值,平均需要大约 2^31 次尝试。对于旧版主板,他们的结论更直接:在已知设备 ID、计时器状态和调用历史的情况下,钱包生成过程是确定性的。

确定性,正好与密码学要求的随机性相反。

这不只是“较弱”,而是“可预测”。

Coinkite:攻击者可能借助 AI 发现问题

Coinkite 认为,这个漏洞可能是被机器发现的。公司写道:“我们必须假设,有人使用 AI 审查了我们此前版本的固件,并偶然发现了这个问题。”它还补充说,团队最近也曾用当下可获得的一个顶级 AI 模型检查同一段代码,但没有找出问题。

Coinkite 写道:“攻击者和防守方拥有同样的 AI 工具,但这一次它没有帮到我们,只帮到了坏人。”

目前,所有受影响型号的修复版固件已经发布。但固件更新并不能修复已经生成的旧种子,这些钱包必须重新生成种子并把资金转走。Decrypt 此前也曾跟进过这次事件,报道过漏洞发生后离线存储应如何处理,以及失窃金额如何突破 1.14 亿美元。

什么是熵,为什么它决定钱包安全

熵,衡量的是攻击者不知道多少信息。

换句话说,它就是不确定性的大小,用 bit 计量。1 bit 相当于抛一次硬币,只有两种结果,猜中概率是二分之一。10 bit 对应 1024 种结果。每增加 1 bit,猜测者的工作量翻倍。

比特币钱包本质上是一个必须保密的大数字。用户接收比特币的地址,是通过数学方法从这个数字推导出来的,而且这个推导是单向的:可以从私钥推出地址,但不能从地址反推出私钥。

所以,每个钱包的安全性最终都落在一个问题上:攻击者需要尝试多少个数字?

如果这个数字是用 128 bit 熵选出来的,答案就是“超出物理条件所允许的范围”。如果只有 40 bit,答案就变成“给我一点时间”。

这也是量子计算威胁之所以值得讨论的原因之一。量子机器试图攻击的是私钥与地址之间的数学关系,而 Coldcard 这次漏洞根本不需要走到那一步。它在数学关系介入之前,就已经让私钥变得可猜。

这里也容易混淆概念。伪随机数生成器产出的结果,可能通过统计学层面的随机性测试,表面上看不出规律,普通表格工具也未必能发现问题;但这些输出仍然完全由种子值决定。它只是“看起来随机”,并不具备密码学所要求的不可预测性。

统计随机性和密码学不可预测性,是两种不同属性。Coldcard 的输出很可能通过前者,却完全无法满足后者。

真正的随机性通常来自物理噪声,比如电路抖动、热波动或放射性衰变。Coldcard 上的硬件芯片本来就是为此存在,而被构建标志意外断开的,正是这个组件。

关于骰子输入熵,争议集中在偏差而不是根本风险

用户开始紧急重新生成种子后,很多人选择最直接的低技术方案:掷实体骰子,并把结果作为额外熵输入。Coldcard 支持这种做法。按照 Coinkite 的指引,只要种子是在至少 50 次彼此独立且不被外界知晓的掷骰结果基础上生成,就不在这次漏洞影响范围内。

Coinkite 甚至销售一袋“100 个可爱又很小的骰子”,方便用户完成这一流程。

7 月 31 日,Bitcoin Core 开发者 Luke Dashjr 发出提醒:“不少人在建议或使用骰子来缓解 Coldcard 漏洞。需要注意,普通骰子并不是为密码学安全设计的。如果你要这么做,可能应该购买高精度赌场骰子。即便如此,也最好再加入另一种熵来源。”

这番话在比特币社区引发明显反弹。

有用户写道:“lol,现在连掷骰子都不行了。自托管算完了……” 还有人讽刺地问,自己是不是该找一位帕金森病患者来帮忙掷骰子。

开发者 Justin Sharp 随后给出了更有操作性的计算。他写道:“没必要这么夸张。一个完美的六面骰每次投掷可提供 2.585 bit 熵。即使是存在明显偏差的骰子,例如某一面出现概率为 20%,而不是 16.7%,每次投掷仍可提供大约 2.55 bit。掷 99 次后,这意味着总熵约为 256 bit 与约 252 bit 的差别。”

也就是说,一个肉眼可见存在偏差的骰子,在 256 bit 水平上造成的损失只有 4 bit。

Dashjr 关于廉价骰子存在可测偏差的说法并没有错。注塑工艺中的凹点会让各面的塑料去除量略有差异,这也正是赌场使用高精度平面填充骰子的原因。但问题不在于这个物理事实,而在于风险级别。252 bit 与 256 bit 之间的差异,与这次漏洞让用户只剩 40 bit 搜索空间,完全不是一个量级。

不过,Dashjr 的建议里仍有一个更尖锐的核心:不要把安全性押在单一熵来源上。Coldcard 的失败不在于熵存在轻微偏差,而在于某个组件悄悄停止贡献熵后,没有任何机制发现这一点。

受影响用户需要重新生成种子并转移资产

如果用户在受影响的 Coldcard 设备上生成过种子,且没有使用掷骰输入熵,也没有使用强 BIP-39 密码短语,那么这个种子已经失守。

处理顺序是:更新固件,生成新种子,核对指纹,发送一笔测试交易,然后再转移全部资产。Coinkite 的公告按不同型号给出了具体步骤。已经导出的种子同样带有这一缺陷,把问题种子导入其他钱包应用,并不能解决问题。

对其他用户来说,这次事件的结论并不是“硬件钱包失效了”,也不是“骰子方案不可信”。

真正暴露出来的是,“随机”本身只是一个需要被验证的声明。Coldcard 的源代码一直是公开的,预期中的硬件随机数发生器也一直存在于二进制文件里。审查者确认了它“存在”,却没有确认种子生成器“实际调用了它”。

过去 8 年的审计,看的是正确的代码,但没人核实它是否真的在运行。

本文最初由 Bit.Fan 发布。 欲了解更多加密货币新闻与市场洞察,请访问 www.bit.fan.
580

免责声明:

本平台展示的市场信息、项目资料与第三方内容仅用于行业信息分享,不构成任何形式的投资建议或收益承诺。

加密资产交易具有较高风险,用户应充分评估自身风险承受能力并独立作出决策,相关盈亏及法律责任由用户自行承担。