简要
- 一个固件错误导致Coldcard钱包从软件伪随机数生成器生成种子,而不是从专门用于此任务的硬件芯片生成。
- 该错误实际上将旧型号的搜索空间从128位缩小到大约40位。
- 以下是这一切意味着什么,以及它如何导致超过1.3亿美元的比特币被盗。
有人一直在清空那些本不应被访问的比特币钱包。
这些币存放在Coldcard设备上——来自加拿大制造商Coinkite的硬件钱包,这种钱包从不接触互联网。没有钓鱼链接,没有恶意软件,没有被盗的笔记本电脑。攻击者只是算出了私钥。
Galaxy Research现已追踪到超过1,596枚比特币在三个已确认的攻击波次中被盗,另有一个疑似第四波,将使总数升至约2,055枚比特币——按当前价格计算约为1.3亿美元。其中一次扫荡在41分钟内转移了7000万美元。Coinkite表示至少有15个独立的攻击者参与其中。
该公司于8月1日发布了一份技术背景说明,解释了问题所在。这是一份异常坦诚的文件,简而言之,钱包在八年间一直在掷灌铅骰子,却无人察觉。
零仍然是某种东西
2021年,Coinkite将Coldcard的密码学迁移到libsecp256k1,这是比特币核心使用的同一个库。明智的决定。但集成过程却出了问题。
迁移悄悄地将种子生成从Coldcard自己的硬件随机数生成器转移到了MicroPython的软件回退方案上——一个名为Yasmarang的小算法,专为没有随机数芯片的设备而存在。
🚨COLDCARD黑客攻击损失超过1亿美元
高置信度:1,596枚比特币已从约7,300个地址被盗,涉及3个已确认的攻击波次,另有14起较小事件。
如果加上疑似(但未确认)的,总额将膨胀至1.3亿美元(2,000枚比特币)。
更多详情见下方帖子👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) 2026年8月3日
Coldcard有一个随机数芯片。只是它不再被询问了。
原因小到几乎令人难以置信。一个构建守卫使用了 #ifndef,它检查的是某个设置是否存在,而不是它是否被开启。Coinkite 已将该设置定义为零,意为“关闭”。因为零仍然算作已定义,安全检查通过了,构建也完成了。两个版本的函数具有相同的签名,所以看起来一切正常。
“COLDCARD 上的大部分随机性来自一个我并不知道实际上存在于源代码库中的 PRNG,”Coinkite 写道,这里指的是伪随机数生成器——一种软件,它产生的数字看起来是随机的,但遵循从起始值开始的固定配方。
用相同的起始值喂给这个配方,你会得到相同的输出。每次都是如此。
在运行固件 4.0.1 至 4.1.9 的 Mk2 和 Mk3 设备上,该起始值来自芯片的序列号和时钟。Coinkite 估计由此产生的搜索空间约为 40 位。较新的型号混合了一些安全元件熵,将其提升到大约 72 位。
两者都不是 128,而 128 才是目标。
差距比看起来更重要。位是指数。128 位的搜索空间包含的组合比可观测宇宙中的原子还多,没有人会去搜索它。40 位大约是 1 万亿——一台像样的笔记本电脑就能轻松处理。每减少一位,工作量就减半。
Block 的工程团队发布了他们自己的分析,将较新设备的有效安全元件搜索空间定为 2^32 个候选,平均约 2^31 次尝试。他们对旧版主板的评估更为直白:对于已知的设备 ID、定时器状态和调用历史,钱包生成是确定性的。
而确定性与随机性相反,随机性对密码学至关重要。
不是“弱”。是可预测。
Coinkite 怀疑这是被机器发现的。“我们必须假设有人使用 AI 审查了我们之前版本的固件,并偶然发现了这个问题,”该公司写道,并补充说他们最近用最好的可用 AI 模型之一审查了相同的代码,但一无所获。“攻击者和防御者拥有相同的 AI 工具,但今天它没有帮助我们,只帮助了坏人。”
所有受影响型号的修复固件已发布。它不会修复现有的种子;这些钱包必须重新生成,资金必须转移。Decrypt 已经报道了气隙存储在这样一次利用之后如何变化,并追踪了损失攀升超过1.14 亿美元。
熵到底是什么
熵是衡量攻击者不知道多少的度量。
换句话说,它基本上就是不确定性,以比特为单位。一比特相当于抛一次硬币:有两种结果,猜测者有一半的概率猜对。十比特就是1024种结果。每增加一比特,猜测者的工作量就翻倍。
比特币钱包是一个保密的非常大的数字。人们发送硬币的地址是由它数学推导出来的,而且推导是单向的——你可以从密钥得到地址,但永远不能反过来。
所以每个钱包的安全性都取决于一个问题:攻击者需要尝试多少个数字?
如果这个数字是用128比特的熵挑选的,答案是“超过物理定律允许的范围”。如果是用40比特挑选的,答案是“给我一些时间”。
这也是让量子计算威胁值得争论的特性——量子机器会攻击连接密钥和地址的数学。Coldcard的漏洞从来不需要这样做。它让密钥在数学介入之前就变得可猜测。
这就是词汇变得模糊的地方。伪随机生成器产生的输出能通过随机性统计测试,所以基本上电子表格不会标记任何东西。那个输出仍然完全由其种子值决定。它看起来随机,但实际上不是。
统计随机性和密码学上的不可预测性是不同的属性,而Coldcard的输出本可以通过第一个测试,但在第二个测试上完全失败。
真正的随机性必须来自物理噪声:电路中的电抖动、热波动、放射性衰变。这就是Coldcard上硬件芯片的用途。那就是构建标志断开的芯片。
然后Luke Dashjr提到了骰子
当用户们争先恐后地重新生成种子时,许多人求助于明显的低技术解决方案。Coldcard允许你掷物理骰子并将结果作为熵输入。Coinkite自己的指南认为,使用至少50次独立、私密的骰子掷出的种子不受此漏洞影响。
这听起来可能很愚蠢,但该公司实际上出售一袋“100个可爱的小骰子”来让整个过程对你来说更容易。
7月31日,比特币核心开发者Luke Dashjr 发布警告:“不少人建议/使用骰子来缓解Coldcard漏洞。请注意,普通骰子并非为密码学安全而设计。如果你打算这样做,或许应该购买精密赌场骰子。即便如此,也还需要另一个熵源。”
比特币推特对此并不平静。
“哈哈,现在连骰子都不能掷了,”一位用户写道。“自我托管完了……”另一位问道,他是否应该雇一个帕金森患者来掷骰子。(不太友善。)
我应该雇一个帕金森患者来掷骰子吗?
— Murern (@Bitcoin_Murern) 2026年7月31日
也许最有用的回复附带计算。开发者Justin Sharp精确计算了一个坏骰子会损失多少:
“过度担忧。一个完美的d6每次掷出提供2.585比特。一个明显有偏的骰子,例如一个面出现概率为20%而非16.7%,仍然提供约2.55比特。在99次掷骰中,这相当于约256比特和约252比特熵的差别。”
256比特中的4比特。这就是一个明显不公平骰子的全部代价。
Dashjr说廉价骰子有可测量的偏差并没有错——注塑成型的点数从每个面去除的塑料量略有不同,这正是赌场使用平填精密骰子的原因。他对物理学的看法是对的,但对风险的评估是错的。从256比特中损失4比特,你还有252比特。Coldcard的漏洞让用户只剩下40比特。
然而,他的建议中隐藏着一个更尖锐的论点,与制造公差无关。那就是不要信任任何单一来源。Coldcard的失败不在于其熵略有偏差——而在于一个组件悄悄停止贡献,而没有任何东西发现。
该怎么办
如果你在没有掷骰子(真的)或没有强BIP-39密码短语的情况下,在受影响的Coldcard上生成了种子,那么该种子已受损。
更新固件,生成新种子,验证指纹,发送测试交易,然后转移所有资产。Coinkite的公告逐型号说明了操作步骤。导出的种子会携带缺陷——将坏种子转移到另一个钱包应用并不能解决任何问题。
对于其他人来说,要点不在于硬件钱包有问题或骰子是个陷阱。
而在于“随机”是一种声明,而声明需要核查。Coldcard的源代码一直是公开的。预期的硬件随机数生成器就在二进制文件中。审查者确认它存在,但从未确认种子生成器实际调用了它。
八年的审计查看了正确的代码。没有人检查它是否运行。







