自选
我的自选
查看全部
市值 价格 24h%
  • 全部
  • 产业
  • Web 3.0
  • DAO
  • DeFi
  • 符文
  • 空投再质押
  • 以太坊
  • Meme
  • 比特币L2
  • 以太坊L2
  • 研报
  • 头条
  • 投资

免责声明:内容不构成买卖依据,投资有风险,入市需谨慎!

Coldcard比特币漏洞深度解析:熵、密钥生成机制与比特位的重要性

2026-08-05 03:49:18
收藏

有人一直在清空那些本不该被触及的比特币钱包

这些币存放在Coldcard设备上——来自加拿大制造商Coinkite的硬件钱包,这类钱包从不接触互联网。没有钓鱼链接,没有恶意软件,没有笔记本电脑被盗。攻击者只是算出了私钥。

Galaxy Research现已追踪到超过1,596枚比特币被盗,分三个确凿的袭击波次,且疑似还有第四波,若计入,总损失将升至约2,055枚比特币——按当前价格计算约1.3亿美元。其中一次转移在41分钟内卷走了7,000万美元。Coinkite表示,至少有15个不同的攻击者介入。

该公司于8月1日发布了一份技术背景说明,解释问题所在。这份文件异常坦诚,简而言之,这款钱包在八年间一直在用“灌铅骰子”生成随机数,却无人察觉。

2021年,Coinkite将Coldcard的加密逻辑迁移到libsecp256k1(比特币核心使用的同一库)。这本身是个合理的决定。但问题就出在集成过程上。

这次迁移悄然将种子生成路径从Coldcard自有的硬件随机数生成器,转移到了MicroPython的软件备用方案——一个名为Yasmarang的小型算法,该算法原本是为完全没有随机数芯片的设备准备的。

Coldcard本身有随机数芯片。只是它不再被调用了。

原因小到几乎令人难以置信。一个构建防护使用了“#ifndef”,该指令检查的是某个设置项是否存在,而非是否开启。Coinkite已经将该设置项定义为0,表示“关闭”。但由于0仍然算作“已定义”,安全检查通过了,构建也顺利完成。两个版本的函数签名完全相同,因此看起来一切正常。

“Coldcard上大部分的随机性来自一个我根本不知道居然存在于源码中的伪随机数生成器,”Coinkite写道,这里指的是一个软件算法,它产生的数字看起来随机,实则根据一个固定配方从初始值生成。

给配方相同的初始值,就会得到相同的输出。每次都是如此。

在运行固件4.0.1至4.1.9的Mk2和Mk3设备上,这个初始值来自芯片的序列号和时钟。Coinkite估计,由此产生的搜索空间约为40比特。较新型号混入了一点安全元件熵,将其提升到约72比特。

两者都未达到128比特的目标值。

这个差距比看上去严重得多。比特是指数级的。128比特的搜索空间所含的组合数比可观测宇宙中的原子还多,没人能搜索完。40比特大约是1万亿——一台像样的笔记本电脑就能处理完。每减少一个比特,工作量就减半。

Block的工程团队发布了其分析报告,将较新设备有效安全元件的搜索空间定为2^32个候选值,平均需要约2^31次尝试。他们对旧款主板的评估则更为直白:对于已知的设备ID、定时器状态和调用历史,钱包生成是确定性的。

而确定性正是随机性的反面,而随机性对加密技术至关重要。

Coinkite怀疑问题是被机器发现的。“我们必须假设有人用AI审查了我们之前版本的固件,并偶然发现了这个问题,”该公司写道,并补充说他们最近也用最好的AI模型扫描了相同代码,但一无所获。“攻击者和防御者拥有相同的AI工具,但今天它没有帮到我们,只帮了坏人。”

针对所有受影响型号的修复固件已发布。它无法修复已有的种子;这些钱包必须重新生成,并将资金转移。

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

换句话说,它基本上就是不确定性,以比特计量。1比特相当于抛一次硬币:两种结果,猜测者有一半概率猜对。10比特是1,024种结果。每增加一比特,猜测者的工作量就翻倍。

比特币钱包本质上是一个保密的巨大数字。人们用来接收币的地址是由该数字数学推导出来的,而且推导是单向的——你可以从密钥算出地址,但永远无法反向推导。

因此,每个钱包的安全性都取决于一个问题:攻击者需要尝试多少个数?

如果这个数是用128比特熵选出的,答案是“物理定律不允许”。如果它只有40比特熵,答案是“给我点时间”。

这与量子计算威胁值得争论的性质相同——量子机器会攻击连接密钥和地址的数学关系。而Coldcard的漏洞根本不需要走到那一步。它在数学介入之前就让密钥变得可猜测了。

这里的措辞容易让人混淆。伪随机数生成器产生的输出能通过随机性的统计检验,所以基本上不会被电子表格标记出来。但该输出完全由其种子值决定。它看起来随机,实则不然。

统计随机性和加密不可预测性是两种不同的性质。Coldcard的输出能轻松通过第一个测试,却完全通不过第二个。

真正的随机性必须来自物理噪声:电路中的电抖动、热波动、放射性衰变。这正是Coldcard上硬件芯片的用途。也正是那个被构建标志断开的芯片。

当用户争相重新生成种子时,许多人选择了最显而易见的低技术方案。Coldcard允许你投掷实体骰子,并将结果作为熵输入。Coinkite自己的指南认为,使用至少50次独立、私密的骰子投掷生成的种子不受该漏洞影响。

听起来可能有点蠢,但该公司实际上销售一款装有“100颗可爱小骰子”的袋子,让整个过程更方便。

7月31日,比特币核心开发者Luke Dashjr发布警告:“不少人建议/使用骰子来缓解Coldcard漏洞。请注意,普通骰子并非设计为加密安全。如果你打算这样做,可能应该购买精密赌场骰子。即便如此,也要有另一个熵来源。”

比特币推特圈对此反应激烈。

“哈哈,现在连骰子都不能扔了,”一位用户写道。“自我保管完蛋了……”另一位用户问道,他是否应该雇一个帕金森患者来投掷骰子。(这不太礼貌。)

最有用的一条回复可能附带算术。开发者Justin Sharp精确计算了一个劣质骰子会带来多少损失:

“过度担心了。完美的六面骰每次投掷给出2.585比特。一个明显偏倚的骰子,例如某一面出现概率为20%而非16.7%,仍然给出约2.55比特。在99次投掷中,这相当于约256比特和约252比特熵之间的差异。”

256比特中少了4比特。这就是一个肉眼可见不公的骰子带来的全部代价。

Dashjr说廉价骰子存在可测量的偏差,这没错——注塑成型的点数从每个面移除了不同量的塑料,这恰恰是赌场使用平填充精密骰子的原因。他对物理学的判断正确,但对风险程度的判断错误。从256比特中损失4比特,你还有252比特。而Coldcard的漏洞让用户只剩下40比特。

不过,他的建议中隐藏着一个更尖锐的论点,而且并非关乎制造公差。它关乎不要信任任何一个单一来源。Coldcard的失败并不在于它的熵略微偏倚——而在于一个组件悄然停止贡献,且没有任何东西捕获到这一点。

如果你在没有使用骰子投掷(真的没有)或强BIP-39密码短语的情况下,在受影响的Coldcard上生成了种子,那么该种子已被攻破。

更新固件,生成新种子,验证指纹,发送一笔测试交易,然后转移所有资金。Coinkite的指南按型号逐一说明了步骤。导出后的种子会携带该缺陷——将坏种子转移到不同的钱包应用程序解决不了任何问题。

对于其他人而言,结论并非硬件钱包有缺陷,也不是骰子是个陷阱。

而是“随机”是一个声明,而声明需要验证。Coldcard的源代码一直是公开的。预期的硬件随机数生成器就存在于二进制文件中。审查者确认了它的存在,却从未确认种子生成器实际调用了它。

八年的审计都在看对的代码。但没有人检查它是否真的运行了。

展开阅读全文
更多新闻