2026 年 8 月 8 日 · 自托管与密钥安全观察
七月三十日凌晨,攻击者开始从 Coldcard 硬件钱包里转走比特币。第一波在二十五分钟内从约 500 个钱包搬走 594 枚 BTC,当时价值约 3800 万美元。[1] Galaxy Research 把这批清空动作定位在 UTC 时间 1:10 到 1:51 的 41 分钟窗口内,分散在九个区块。[5]
那只是开始。截至 8 月 5 日,TRM Labs 引用 Galaxy 的追踪数据,四波攻击累计约 1,816 枚 BTC 被转出,涉及 5,200 多个地址,按当时价格接近 1.16 亿美元。[1] 这是 2026 年第三大规模的加密攻击事件,也让今年被盗总额越过 12 亿美元、涉及 276 起事件。[1]
攻击者从未接触过任何一台设备。[5]
## 出问题的地方不是设备,是随机数
硬件钱包的核心承诺是私钥永不离开设备。这次的漏洞绕过了这个承诺——因为它攻击的不是密钥的存放,而是密钥的生成。
2021 年 3 月 1 日的一次代码改动,让固件在生成种子时静默回退到软件随机数生成器,而不是设备的硬件熵源。[6] Coinkite 官方公告确认,受影响的是 Mk2/Mk3 的 4.0.1 到 4.1.9 版本固件。[4]
Block 工程团队的技术分析把根因定位得更具体:编译配置里 `MICROPY_HW_ENABLE_RNG` 被设为 0,因为 Coldcard 自己实现了硬件 RNG 封装;但依赖库 libngu 用 `#ifndef` 检查这个宏,只验证宏"是否存在"而不验证"是否启用"。[6] 于是编译顺利通过,实际绑定到的却是 MicroPython 的 Yasmarang 软件生成器,其初始化输入是芯片 UID 和定时器寄存器——固定的设备标识和可观测的时序状态,不是密码学熵源。[6] libngu 还把这个输出与另一个用公开常量初始化的 Yasmarang 生成器做 XOR,但正如 Block 的报告所说,XOR 不创造熵:两个可复现的输入,异或结果同样可复现。[6]
关于 Mk3 上的有效强度,两家口径不同。按二手报道,有效搜索空间坍缩到约 40 比特。[5] Block 的分析则指出,Mk2/Mk3 v4 路径上没有加入任何密码学熵,在 UID、定时器状态和调用历史已知的前提下,钱包生成是确定性的。[6] 对 Mk4/Q/Mk5,Coinkite 称实际熵约 72 比特而非设计的 128 比特;[4] Block 的说法是安全元件重播种只替换一个 32 位状态字,候选输出流上限为 2^32。[6] 这两个描述不能互相替代,本文把两边都列出。
不管取哪个口径,结论都一样:这不是程度差别。128 比特是算不出来,几十比特是租点云算力就能穷举。攻击者不需要突破任何东西——离线重新生成可能的种子,推导地址,然后检查哪些地址里有钱。[5] Block 也提醒了一句该有的克制:这不意味着任何远程攻击者都能立刻恢复任何种子,实际成本取决于 UID 信息、启动时序和派生开销,报告本身没有给出端到端的穷举基准。[6]
Coinkite 的公告里有一句最要紧的话:更新固件不会改变或修复已经生成的种子。[4] 也就是说,补丁只保护未来创建的钱包。2021 年 3 月之后在受影响固件上生成过种子的人,那串助记词从生成的那一刻起就是弱的,而且一直是弱的。
## 暴露面比损失面宽
已确认的攻击集中在 Mk2 和 Mk3。但 Coinkite 的公告把范围划得更大:Mk4、Mk5 和 Q 设备在修复版本之前生成的种子,实际熵约为 72 比特,而非设计的 128 比特。[4] 这远好于 40 比特,本轮也没有被利用,但仍然低于标准。
两类人不在风险内:创建种子时额外投掷了至少 50 次独立骰子的,因为那部分外部熵不会被固件缺陷抹掉;以及给钱包设了强而唯一的 BIP-39 口令的。[4] Coinkite 同时提醒,口令降低即时暴露,但不修复受影响的种子,这类用户也应尽快迁移。[4]
## 值得记下来的两件事
第一件,审计没抓到它。Coinkite 表示公司在攻击前几周做过一次固件的 AI 审查,那次审查没有发现这个 bug,也没发现其他严重问题。这个 bug 在代码里躺了五年多。TRM 的评论说得比较直接:开源和审计改善安全,但不构成保证。[1]
第二件,钱还没动。TRM 的追踪显示大部分被盗资金汇集在少数几个攻击者地址上,洗钱动作到 8 月 4 日为止只有一笔 64.9 BTC 存入 Wasabi、200 ETH 存入 Tornado Cash。[1] 相比朝鲜 TraderTraitor 这类专业团伙在数小时内就开始激进洗钱,这更像还没想好怎么处理一笔这么显眼的钱。[1] TRM 也因为各波次交易构造方式不同,判断可能存在多个攻击者,目前不归因到特定组织。[1]
## 这件事说明的问题
TRM 在报告里有一句总结值得抄下来:自托管是转移风险,而不是消除风险。钱包的可信度上限,等于生成它密钥的那个过程的可信度。[1]
这句话的适用范围比 Coldcard 大得多。任何把资产安全压在单一密钥载体上的方案——不管那个载体是一台断网的设备、一张纸、还是一个加密文件——都共享同一个结构性问题:只要生成、存储、备份这条链上任何一环出错,就没有第二道防线。这次出错的环节恰好是最不容易被检查的那一环,因为熵的质量不像固件版本号那样能看一眼就确认。
TRM 给出的方向是组合独立设计的设备和独立生成的熵,用互相不依赖的实现来构成纵深防御。[1]
但这里有个限定条件,Block 的报告里写得很清楚,值得单独拎出来:如果一个多签方案里所有设备都是受影响型号,漏洞的影响依然存在;要防住这个问题,需要的是"一组安全设备构成的法定人数"。[6]
这句话把重点从"份额数量"移到了"份额独立性"上。分散签名权本身不构成防护——三个份额如果由同一套有缺陷的实现生成,它们会一起弱。真正提供纵深的是各份额的生成过程互相独立:不同的实现、不同的熵源、不同的信任假设。门限签名和密钥分片方案在这一点上和多签面对同样的检验标准,值得按这个标准去问任何一个声称"拆分密钥"的产品。
## 如果你或者你身边的人用 Coldcard
Coinkite 已经为所有受影响型号发布了修复固件:Mk2/Mk3 升到 4.2.0 及以上,Mk4/Mk5 标准版 5.6.0 及以上,Q 标准版 1.5.0Q 及以上,Edge 轨道另有对应版本。[4] 注意标准版和 Edge 是两条独立的发布轨道,不要因为 Edge 的版本号数字更大就假定它已修复。[4]
迁移步骤按官方公告执行,其中有两处容易出事:先确认旧种子的书面备份和钱包指纹再动手,以及先发一笔小额测试交易确认新钱包可用,之后再转移剩余资金。[4] Coinkite 自己也提醒,仓促迁移造成的风险可能比原问题更即时。[4]
数据说明:本文中被盗规模为截至 8 月 5 日的追踪数据。TRM 明确表示应视为初步数字——资金仍在移动,第四波在其评估时还在内存池中,受害者往往在数月甚至数年间才陆续发现被盗。[1]
作者在做一款无助记词的 MPC 钱包,所以在这个题材上有立场。数据都给了出处,判断请自己做。
https://cowallet.ai/en?pid=jingle