COLDCARD RNG 事件:弱熵如何演变为链上事件
面向开发者的完整报告,将公开固件根因与可复核的链上证据连接起来,同时不公开助记词恢复工具、受害者地址或任何私密材料。

直接结论
事件根因是一条固件控制路径:硬件 RNG 被设为禁用,但预处理条件仍选择了确定性的备用生成器。较新设备加入了硬件材料,但最终只有一个 32 位派生值进入重新播种路径。固件更新能修复之后的生成流程,却不能增强此前已经生成的助记词。
第一波公开归集地址簇
第一波图关联源输入
后续观测图关联源输入
引用的一手技术通告
技术方法:逐步解释
以下内容足以帮助固件和钱包开发者审查这类缺陷,但在可操作的密钥恢复之前明确停止。

配置值表示“禁用”
主板配置把 RNG 功能定义为 0。语义上它是禁用值,但从预处理器角度看,该符号仍然“已定义”。
条件检查了是否定义,而不是值
条件编译因此选择了备用路径。最终链接到的 rng_get 是确定性软件生成器,而非硬件熵源。
备用生成器由可约束设备状态初始化
初始化混合设备标识与计时寄存器。这些值会变化,但不等同于彼此独立的密码学熵,并可能被设备行为与调用顺序约束。
哈希不能创造缺失的熵
后续哈希和 BIP-39 校验和可以扩散已有不确定性,却不能凭空补足生成器状态中缺少的熵。
较新设备截断了重新播种值
后续设备会读取硬件 RNG 并进行哈希,但只有摘要中的四个字节被解包为重新播种值,因此直接贡献受限于 32 位,同时仍受更广泛执行上下文影响。
公开地址成为验证预言机
若攻击者能枚举合理内部状态,就可以派生公钥或地址,并与公开区块链进行比较。这解释了风险模型,但不是端到端性能基准,也不表示所有助记词同样容易恢复。
四个安全片段展示控制流错配
这些片段解释根因,但不包含钱包恢复循环。
#define MICROPY_HW_ENABLE_RNG (0)#ifndef MICROPY_HW_ENABLE_RNGpad = UID_low32 ^ SysTick->VALreseed = SHA256d(rng1 || rng2)[0:4]
受影响固件与行动边界
下表依据 Coinkite 的公开通告。发布渠道可能变化,采取行动前应再次核对厂商当前说明。
| 设备系列 | 受影响范围 | 修复版本 | 修复的含义 |
|---|---|---|---|
| Mk2 / Mk3 | 4.0.1 至 4.1.9 | 4.2.0 或更高 | 新种子走修复后的路径;旧种子不会自动增强。 |
| Mk4 / Mk5 | 标准渠道低于 5.6.0 | 5.6.0 或更高 | 修复版本阻止以后通过受影响路径生成。 |
| COLDCARD Q | 标准渠道低于 1.5.0Q | 1.5.0Q 或更高 | 先更新,再创建新种子并迁移。 |
| Edge 渠道 | 低于 6.6.0X / 6.6.0QX | 6.6.0X / 6.6.0QX 或更高 | 使用与设备对应的已修复 Edge 版本。 |
固件更新不会追溯性地给旧种子增加熵。防御措施是:在修复后的软件上生成新种子,验证备份,然后完成迁移。
公开链上数据表明了什么
我们从公开报告的归集标签和 Blockstream 公开地址、交易接口复现了一个受限快照。该表只能证明资金路径,不能证明操作者身份,也不是最终受害者数量或损失总额。

第一波关联源输入金额
1,082.58680432 BTC
可复现图快照;标签来自公开事件报告,不代表身份归属。
后续波次关联源输入金额
76.09142381 BTC
可复现图快照;标签来自公开事件报告,不代表身份归属。
公开报告的归集地址
| 波次 | 首次观测 | 地址 | 快照时累计接收 | 地址交易数 |
|---|---|---|---|---|
| 波次 1 | 2026-07-30 | bc1qnk4zh9qcnap2mycp56qjrgza3cc8ylrh8fecp0 | 594.47727254 BTC | 506 |
| 波次 1 | 2026-07-30 | bc1qc779m8gec84k3t0ffvu0pps94zheht7lr7ueyn | 398.48587857 BTC | 492 |
| 波次 1 | 2026-07-30 | bc1qdaarag7729c2n4l2wnyt3hkhfpcs66n98z7uuh | 88.85045709 BTC | 101 |
| 波次 1 | 2026-07-30 | bc1qh0l7q0mca3ln7wsl9luwns0jc9jhgrtft025l4 | 0.77324382 BTC | 105 |
| 波次 2 | 2026-07-31 | bc1qsjrf5ze5tmulz7y2x4pc7qaex2a35sanp3rqlx | 45.90666052 BTC | 1217 |
| 波次 2 | 2026-08-07 | bc1qmd5m5ktv7m5ffujxv4248fxv36myvdx79n8jp6 | 30.18478329 BTC | 96 |
“累计接收”是 2026 年 8 月 12 日观察到的地址统计。不要把这些数值与下游归集输出相加,也不要把总和描述为已经确认的被盗金额。
代表性归集交易
| 观测时间 | 输入数 | 单一输出 | 交易 |
|---|---|---|---|
| 2026-07-30 01:43 UTC | 491 | 398.47573857 BTC | 14edd9ee8445… |
| 2026-07-30 01:43 UTC | 204 | 89.62327890 BTC | 4b50d61a3d6e… |
| 2026-07-30 01:51 UTC | 341 | 562.01962301 BTC | 0c6bf853a645… |
| 2026-07-31 09:22 UTC | 1212 | 45.90251994 BTC | ba119968ec4b… |
| 2026-08-07 03:35 UTC | 93 | 30.18461329 BTC | 93df0d26e08c… |
可复现的链上方法
- 01仅从事件报告已经公开的归集标签开始;公开页面排除用户自行报告的受害者地址。
- 02查询公开地址与交易接口,保存交易 ID、确认时间、输入数、输出值和核验日期。
- 03从整数聪重新计算 BTC 数值,不依赖格式化截图或美元估值。
- 04按交易 ID 去重,并在汇总前区分源节点、第一阶段和第二阶段节点。
- 05绝不把归集输出与为它提供资金的源输入再次相加;两者是同一流转的不同阶段。
- 06把图标签视为观测关系。链上路径本身不能证明所有权、意图、设备型号或法律责任。
不使用真实钱包的防御性复现
独立的本地测试工具使用 1,000 个确定性合成钱包,验证 BIP-39 校验和、预期地址重新派生和测试向量唯一性。1,000 个向量全部重新派生成功,五次有界恢复冒烟测试通过。数据集不包含真实钱包材料,也不会公开,因为目标是工程验证,而不是提供可操作恢复能力。
重要限制
- 官方来源和本报告都没有宣称适用于所有设备的端到端暴力破解时间。
- 观察到 32 位重新播种,不等于完整种子安全性必然恰好为 32 位;调用历史和备用状态仍然重要。
- 归集地址可能收到无关或后续资金,因此当前地址总额不是冻结的损失账本。
- 公开资金图不能识别行为者,也不能独立证明每个源输入都来自同一个固件缺陷。
- FRB Agent 不是比特币硬件钱包,本报告也不声称 FRB 可以阻止此类事件。
可能受影响用户的防御操作
阅读 Coinkite 当前通告,确认准确设备型号与固件渠道。
在生成替代材料之前更新到已修复版本。
通过修复后的流程创建新种子;如果使用人工熵,请遵循厂商的骰子说明。
验证新备份后,迁移受影响种子派生的所有钱包,包括口令派生钱包。
不要在支持帖子或公开检查器中发布助记词、xprv、私钥或疑似受害者地址。
为什么执行系统开发者应当关注
该事件提醒我们:“本地”和“非托管”只是架构边界,并不是自动安全证明。熵源、签名器固件、密钥生命周期、更新来源、模拟和人工核验仍是独立控制。FRB 安全页面说明的是自身本地签名边界,不能替代钱包固件审查。
一手来源与实时证据
来源核验于 2026 年 8 月 12 日。地址继续收款或花费时,浏览器状态会变化。
常见问题
更新固件能修复旧种子吗?
不能。更新只修复之后的种子生成。通过受影响路径创建的种子必须替换,并将资金迁移到由新材料派生的地址。
这是远程控制设备的漏洞吗?
公开分析中的问题发生在种子生成阶段。攻击模型利用受约束候选状态和公开区块链作为验证预言机,不需要之后远程控制硬件钱包。
32 位重新播种是否意味着每个种子都能立即恢复?
不是。它限制了重新播种路径中的一项贡献,但实际可利用性还取决于备用状态、调用顺序、观测信息、派生目标和实现细节。本文不提供统一时间结论。
为什么公开归集地址而不公开受害者地址?
归集地址已经是公开事件标签,可帮助研究者独立验证流转。受害者地址会增加隐私风险,对解释技术根因和图方法没有必要。
为什么不公开恢复代码?
页面目标是帮助开发者审计熵源并帮助用户安全迁移。可执行的助记词恢复管线会增加滥用风险,却不会增强公开根因证据。