menu Witchery_Lab Coldcard熵漏洞蒸发1.3亿美元:5年固件把128位降成40位,没钓鱼没碰设备币照样被扫走(核查)
文章开始
文章结尾
~/blog/₿ 加密货币 Crypto/Coldcard熵漏洞蒸发1.3亿美元:5年固件把128位降成40位,没钓鱼没碰设备币照样被扫走(核查)

Coldcard熵漏洞蒸发1.3亿美元:5年固件把128位降成40位,没钓鱼没碰设备币照样被扫走(核查)

Coldcard熵漏洞蒸发1.3亿美元

视频来源:Coin Bureau 频道(主播 Lewis)《$100M DRAINED From Crypto's Safest Wallet!》,约 16.9 分钟,2026 年 8 月上旬发布(事件发生后第一周)。核查立场:Coin Bureau 是头部加密科普频道,本集无第三方赞助、无返佣链接,利益结构干净。但事件报道的数字随时间滚动,本文把视频里的可验证断言逐条对上 Coinkite 官方公告、Block 与 Wizardsardine 的根因分析、Galaxy Research/Elliptic 的链上统计、Kraken CISO 的公开评论:核心事实基本成立,4 处数字口径需要修正(视频把几波损失合并表述了),另有一段「厂商没法通知用户」的说法只对了一半。逐条见第五、六节。

直接回答标题:钱确实不是被「偷」走的——没有钓鱼、没有碰你的设备、没有木马,是硬件钱包在生成助记词的那一步出了问题。这类纯技术攻击其实是少数派——更多丢币案走的是攻人路线(深伪视频、假客服、杀猪盘),手法全景见加密货币骗局识别核查。Coldcard 固件里一个编译器宏判断错误,让种子生成的随机数走了软件伪随机发生器(Yasmarang),Mk2/Mk3 的有效熵从 128 位塌到约 40 位,Mk4/Mk5/Q 约 72 位。攻击者在本地机器上穷举候选种子、对公链查余额、直接扫币。2026 年 7 月 30 日到 8 月上旬,至少 1,596 BTC(高置信口径)至多约 2,055 BTC(约 1.3 亿美元,含未完全确认波次)被多波自动脚本扫走,受害者平均持币 3.18 年没动过。真正保命的不是「放得久、放得深」,而是当时多在设置里多花的那十分钟:掷 50 次骰子、加一句 passphrase、或者用多签。


⚡ 一、结论速览:四档评级

视频主张核查结论
2026 年 7 月 30 日 1:31-1:56 UTC,约 500 个单签钱包被扫走 594 BTC(约 3,800 万美元),25 分钟【有证据】同晚更宽的攻击面:1,196 个地址、1,082.65 BTC(约 7,020 万美元),41 分钟窗口(Galaxy Research 口径,The Hacker News 引用)
到 8 月 3 日累计约 1,816 BTC,5,200-7,300 个地址【有证据·口径需修正】Galaxy 8 月 4 日的高置信口径是 1,596 BTC / 约 7,300 地址(三波大攻击 + 14 起小事件);链上观测累计 1,815.75 BTC / 5,294 地址(四波)。视频把「链上观测数」和「确认受害数」混在一句里,取用时注意区分
总损失超过 1 亿美元,最高估到约 1.3 亿美元【有证据】高置信 1,596 BTC(案发币价约 1 亿美元以上);若计入疑似第四波,合计约 2,055 BTC / 约 1.3 亿美元。Elliptic 联合创始人 Tom Robinson 对 TechCrunch 表示该估计「大致正确」。截至 8 月 7 日约 90% 赃币未移动
受害者币龄平均 3 年以上——全是「做对了每一步」的长期持有者【有证据】Galaxy:被扫前平均休眠 3.18 年;Alex Thorn 原话:这些人「正是按比特币玩家多年教导的方式在储蓄」。另有统计称被扫币中 88% 至少一年未动,报告中位休眠 3.5 年
受害者 Jonathan Goodman 18.25 BTC(约 160 万加元)存在银行保管箱,7 分钟内被扫,设备没离开过金库【有证据】Bloomberg 报道确认;当事人自述设备在保险箱、从未触网
根因:2021 年 3 月固件迁移到 libngu 库,库只检查宏是否存在、没检查值,种子生成走了 Yasmarang 软件伪随机发生器【有证据】Block 与 Wizardsardine 的根因分析与 pinned 源码一致:两个缺陷叠加——宏被定义为 0(厂商故意,本意是强制走自己的硬件 RNG),libngu 用 #ifndef(测试「是否定义」而非「是否为真」)导致该拦的 #error 没触发
Yasmarang 用芯片序列号和开机时序播种,之后不再收新熵【有证据】Wizardsardine 拆解:状态由 UID_low32 与 SysTick 计数器混入,XOR 后与第二个用公开常量播种的 Yasmarang 实例再次 XOR;XOR 不创造熵,输出完全可复现
Mk2/Mk3 有效熵约 40 位(约一万亿种),普通笔记本几小时可穷举;Mk4/Mk5/Q 约 72 位【部分支持】Coinkite 官方口径 40 位 / 约 72 位;Block 给出更严上限 2^40.7 与 2^73.3。但「笔记本几小时」低估了工具化程度:Wizardsardine 建模指出 UID 低 32 位里只有约 12-14 位携带信息(晶圆坐标),Mk3 实际候选空间可低到约 2^22(约 450 万),租 GPU 约 0.25 美元算完。反过来 Mk4 系列的 72 位也不是「睡得安稳」的位数
这是「史上最大硬件钱包事故」,自托管模式被证伪【与主流相悖】规模属实(最大硬件钱包相关资金损失),但结论反了:Block、Trezor、Ledger 均确认自身设备不受该缺陷影响;Tapsigner/Opendime/Satscard 走的是不同代码库;多签与 passphrase 用户在攻击中被证明完好。这是一家厂商的构建错误,不是品类崩塌,更不是「托管更安全」的论据
三个免死金牌:掷骰子 ≥50 次、强 BIP39 passphrase、多签【有证据·有一条要补】前三波攻击中确无多签、无 taproot 地址被扫。补两点:① Coinkite 口径是 50-98 次公平独立私密骰子贡献 ≥128 位、99 次以上约 256 位;② 骰子只救主种子——靠同一坏发生器出密钥的功能(纸钱包、克隆、Key Teleport 等)掷了骰子也照坏,见第五节

🧨 二、48 小时时间线:自动脚本怎么扫走 1,596 BTC

原文观点:7 月 30 日晚,攻击者在 25 分钟内扫掉约 500 个钱包的 594 BTC;随后几波继续扩大;Galaxy 的 Alex Thorn 一边盯 mempool 一边发实时更新。

核查:时间线与公开报道一致,按 Galaxy Research 的口径整理如下(四波互相有重叠统计,取用时先分清「链上观测」和「确认受害」两个口径):

  • · 7 月 30 日 01:31-01:56 UTC(第一波):约 500 个单签地址、594.5 BTC(按案发币价约 3,820 万美元)。当晚攻击面扩大到 1,196 个地址、1,082.65 BTC(约 7,020 万美元),41 分钟窗口
  • · 7 月 31 日-8 月 2 日(第二、三波):攻击者开始扫更小余额地址;Galaxy 累计确认 1,367 BTC / 4,585 地址(约 8,860 万美元),并把约 600 个疑似攻击者地址报给美国联邦执法与合规机构
  • · 8 月 3-4 日(第四波,疑似):约 709 个潜在受害地址、448.7 BTC。Galaxy 8 月 4 日定稿:高置信 1,596 BTC / 约 7,300 地址 / 至少 15 个独立攻击者;若第四波坐实,合计约 2,055 BTC(约 1.3 亿美元)
  • · 赃币动向:截至 8 月 7 日约 90% 被扫走的 BTC 未再移动——攻击者把币搬进自己搭的多签库位里「窖藏」,典型的等风头过再处理

视频把这四波的数字压缩进了一段叙述,听众很容易把「1,816 BTC」和「1,596 BTC」当成同一个口径。修正用法:写「被扫走」,用 Galaxy 高置信的 1,596 BTC / 约 1 亿美元以上;写「最高估」,用约 2,055 BTC / 约 1.3 亿美元,并注明含未完全确认波次。

🔧 三、根因:一个 #ifndef,把种子路引进软件随机数

原文观点:C 语言里检查一个开关,「它存在吗」和「它开着吗」是两个问题。Coldcard 板级配置把 MICROPY_HW_ENABLE_RNG 设为 0(关掉),因为厂商自己包了硬件随机数;但库只检查了「这个宏存在吗」,于是放行。

核查:完全正确,而且比视频说的更值得拆开看——这里叠加了两个缺陷,不是一个。Block、Wizardsardine 对照 pinned 源码给出的链条:

  • · 缺陷一(值设错):mpconfigboard.h 里 #define MICROPY_HW_ENABLE_RNG (0),注释写着「我们有自己的版本」。Coldcard 确实有——一个包装 STM32 硬件 RNG、带 10ms 超时和硬失败的 rng_get_or_fault()。厂商本意是:禁用 MicroPython 自带的,强制走自己这条
  • · 缺陷二(守卫测试错属性):libngu 的 ngu/random.c 用 #ifndef MICROPY_HW_ENABLE_RNG + #error "get a HW TRNG plz" 守门。#ifndef 测「是否被定义」,不测值。宏被定义成 0,守卫静默放行,#error 永远不触发,链接器把 rng_get() 绑到 MicroPython 的软件兜底实现 Yasmarang 上
  • · 可复现的种子:Yasmarang 只播种一次,原料是芯片 UID 低 32 位 ^ SysTick 计数器(开机毫秒级寄存器)+ RTC 寄存器;然后 libngu 再把这条流与第二条用公开常量(pad=0x0a8ce26f 等)播种的 Yasmarang 流 XOR。XOR 不增加熵——两个可复现的流异或出来还是可复现
  • · 本该拦住的最后一道关也没拦:generate_seed() 对 32 字节输出做了 SHA256d,断言只是「出现超过 4 种不同字节值」。这就是熵类缺陷最残忍的地方:输出看起来和强种子一模一样,用户界面、显示屏、BIP39 校验和全部正常
  • · 为什么五年没人发现:硬件 RNG 在固件别处是活的、在的、配置正确的;内部评审确认了它的存在,但没有人端到端验证「生成助记词这条代码路径实际调用的是谁」。时间账:2021 年 3 月 1 日缺陷进源码,3 月 17 日 v4.0.0 发布,2026 年 7 月 31 日修复——在源码里躺了 1,978 天,在用户手里 1,962 天

视频没说错但要补的一句:这不是密码学原语被攻破(secp256k1、SHA-256、BIP39 全是好的),是构建与链接层面的审计失败。厂商自己的硬件真随机数发生器从头到尾都正常,坏的是「谁在实际产种子」这一环没人验。链级过滤是另一回事:Aptos 的交易过滤规则可以按公钥匹配,换地址不换私钥一样会被拦。

📉 四、40 位是什么概念:从 128 位塌到「可以列清单」

原文观点:助记词的安全全押在随机池足够大;256 位时,可观测宇宙的原子的不够一人分一颗;bug 把 Mk2/Mk3 砍到约 40 位、Mk4/Mk5/Q 约 72 位。

核查:数字层面与 Block/Coinkite 口径一致,补两个更硬的参照:

  • · 40 位(2^40 ≈ 1.1 万亿):视频说「笔记本离线几小时」。这个说法两头都不够准——比它乐观:Wizardsardine 指出 UID 低 32 位实际只携带约 12-14 位信息(晶圆坐标编码),Mk3 现实候选空间可压到约 2^22(约 450 万),租 GPU 约 0.25 美元扫完;Mk2/Mk3 的 RTC 那一项直接归零(振荡器根本没启)。比它悲观:72 位那档,通用暴力破解确实还不现实——但 72 位是「不及格线上的分数」,不是安全分数(BIP39 的目标是 128 位,NIST 把 112 位以下都算淘汰)
  • · Mk4/Mk5/Q 的 72 位是怎么来的:安全元件确实参与了 reseed,但早期固件只把 4 个字节传进 reseek(),即安全元件最多贡献 2^32 位。Block 的严格上限 2^73.3。「有认证安全元件」≠「种子的代码路径被验证过」——这正是 Kraken CISO 那次的论点(见第六节)
  • · 攻击成本结构:整个攻击不需要联网碰设备、不需要 PIN、不需要木马。攻击者在本地跑一条脚本:穷举种子 → 派生地址 → 对公链查余额 → 命中就扫。正因为 88% 的赃币休眠一年以上、中位 3.5 年,攻击者可以从大到小排队扫,「测试—观察—再扫」几乎零风险

🛡️ 五、谁活下来了:三个可选动作,全是可以被跳过的

原文观点:骰子党、passphrase 党、多签党三类人毫发无伤;前三波里没有一个多签钱包、没有一个 taproot 地址被扫。而这些保护全是设置流程里可跳过的「额外步骤」——活下来的人靠的是平时就有的偏执,不是默认设置。

核查:前半完全成立,且这是整个事件最有信息量的部分。Coinkite 官方公告与多方报道的细节:

  • · 掷骰子(≥50 次):官方口径——50 到 98 次公平、独立、私密的掷骰贡献 ≥128 位熵,99 次以上约 256 位;这类种子不在本次缺陷影响范围内。前提是掷骰结果从未拍照、未上云、未暴露
  • · 强 BIP39 passphrase:passphrase 不在设备里,猜中弱种子也拿不到资产;但 Coinkite 仍建议迁移,并且提醒设备 PIN 不是 passphrase
  • · 多签:前三波确无多签命中,攻击脚本的范围窄。但有一条视频没讲的坑:2-of-3 里三把钥匙全在同一批受污染固件上生成,等于仍是单一故障域。多签的保护前提是钥匙来自不同厂商、不同熵源
  • · 活下来的真正原因:不是更贵的设备、更深的保险箱,而是「多加一步」的习惯。这跟本站此前两篇核查的结论同向:硬件钱包的种子可信吗讲信任只能转移不能归零、大额应自供熵;冷钱包神话破产讲「单设备+一张纸」本身就是最大单点故障

☢️ 六、波及面不止主种子:掷了骰子也可能中的功能

原文观点:同一条坏随机数流不只喂种子,还喂纸钱包私钥、SeedXOR 分片掩码、克隆密钥、USB 加密密钥、Key Teleport 临时密钥、Web2FA 秘密和 Secure Notes 密码。

核查:【有证据】,Block 与 Wizardsardine 的枚举一致,且这是全事件最被低估的一节。按公开分析,以下功能直接向坏发生器要字节,与你的主种子怎么来的无关——掷了骰子、导入的种子,也一样中:

  • · 设备端纸钱包:私钥就是发生器输出本身,除非用纯骰子路径;2021 年以来 Coldcard 生成的所有纸钱包都应视为可枚举
  • · 设备克隆(Clone):microSD 上的密钥交换临时密钥由坏流生成,拿到克隆文件的人可重放交换、明文还原助记词
  • · Key Teleport:传输口令本来就是 40 位设计,还从坏流里取
  • · SeedXOR 随机拆分模式、CCC 联签策略键 C、HSM 模式 2FA 秘密、Secure Notes 密码生成器、microSD 2FA
  • · 从属派生:BIP-85 派生的 Nostr 密钥、Lightning 节点种子、SSH 密钥、生成密码,trick PIN 对应的 duress 钱包——子密钥值多少,取决于父种子;父种子烂,整棵子树烂
  • · 不受影响的:ECDSA nonce(RFC 6979 确定性派生)、备份加密、纯骰子路径;Tapsigner / Opendime / Satscard 走独立代码库;Block、Trezor、Ledger 均公开确认自家设备不共享该缺陷

实操含义:如果你只用过「生成助记词 + 转账」这两个功能,风险面就是种子本身;如果你用过上面任何一项,风险面比你以为的大一圈。

🛠️ 七、自查与迁移 SOP(照官方口径整理)

原文观点:升级固件不修种子;弱点跟着助记词走,不跟设备走;换到别的钱包软件导入同一组词也没用。

核查:【有证据】,Coinkite 原话:「安装此更新不会让已存在的脆弱种子变安全」。受影响判定看的是生成种子的那一刻跑的是什么固件,不是今天装什么:

  • · 受影响:Mk2/Mk3 固件 4.0.1-4.1.9;Mk4 5.0.0-5.5.x;Mk5 至 5.5.1;Q 0.0.3Q-1.4.1Q。修复版:Mk2/Mk3 4.2.0;Mk4/Mk5 5.6.0(推荐 5.6.1);Q 1.5.0Q / 1.5.1Q;Edge 线 6.6.0X / 6.6.0QX
  • · 不受影响:Mk1 全部;Mk2/Mk3 固件 ≤3.2.2(走的是 ckcc.rng_bytes 直连硬件 RNG);2021 年 3 月前生成的种子;从别处导入的种子(但上节那些功能仍可能中)
  • · 修复版做了什么:开机自检 RNG 调用是否真的落到硬件路径(不落就停机);Yasmarang 换成 NIST SP 800-90A 的 SHA-256 Hash_DRBG,安全元件改为完整 256 位摘要喂入;并且强制用户注入熵——50 次掷骰、128 次抛硬币、或 65 次计时按键(Peter Todd 的按键 RNG 思路)至少选一,否则不生成新种子
  • · 迁移动作(记不住当时掷没掷骰子、固件哪个版本,就按受影响处理):① 干净离线环境装最新固件;② 生成一组全新种子(新固件会强制你注熵,照做);③ 核对钱包指纹;④ 小额测试转账确认整条链;⑤ 全额转入;⑥ 旧助记词、旧纸备份全部作废销毁;⑦ 保留旧备份直到全流程确认无误
  • · 别做的事:不要把旧助记词导入新设备/新软件「碰运气」;不要在联网电脑、网页工具里输入任何与旧种子有关的内容;迁移前不要在网络监控网站反复查地址(链上观察者多得是)

顺带一句:这次漏洞的本质是「单设备单固件」单点风险。迁到新种子之后,如果想从结构上再分散一层,可以评估多签——但它不是免费午餐:签名只要两把钥匙,恢复却要凑齐全部 xpub,适用边界见多签钱包什么时候才该用(核查)。

🧾 八、厂商应对:快、直接,但有两处要摆事实

原文观点:CEO Rodolfo Novak(NVK)第一时间公开道歉,直说「如果你在 Coldcard 上生成过种子,先转移资产再看别的」;停售、销毁库存、急发补丁;但公司按隐私政策 120 天清档,没法邮件通知五年来的买家。

核查:道歉、停售、销毁库存、急发补丁全部有公开记录,口径基本准确。两处需要摆平:

  • · 「没法通知用户」只对一半:120 天清档造成的通知悖论是真的(Jameson Lopp 也点了这个悖论);但公司随后说明,其购买邮箱自 2019 年起就作为登录验证字段保留(理由之一是加拿大法律要求企业记录保存八年),事发后已尽可能给所有能触达的购买邮箱发了警告;8 月 6 日又宣布暂停自动清档以保全诉讼相关记录,想按原隐私政策处理的用户可申请豁免。所以事实是「触达面受限 + 隐私承诺与现实有落差」,不是「完全没有通知能力」
  • · 首份公告曾漏了新型号:7 月 30 日的首份公告只点名 Mk3,Mk4/Q/Mk5 被告知「不受影响」,第二天才扩订正——而攻击当时正在跑。Samson Mow 后来建议大家不分型号一律迁移。视频没提这个细节,但它对「厂商公告也要自己复核」很有教育意义

🏛️ 九、行业层面:认证盖了元件,没人验代码路径

原文观点:引 Kraken 首席安全官 Nick Percoco——这是对整个硬件钱包行业的 wake-up call;Mk4/Mk5/Q 有认证安全元件,种子还是只有约 72 位,因为认证盖的是元件,没人验证实际跑的是哪条代码路径。

核查:【有证据】,Cointelegraph 等报道一致。Percoco 的完整论点更锋利,值得原样传达:

  • · 「消费者被要求信任厂商对系统里最关键的那一个功能的实现,却没有任何独立验证能确认获批的熵路径就是生产固件实际执行的那一条」
  • · 别的行业这早已是标配:支付行业不让 PIN 输入设备没有独立实验室检测就出厂;美国政府不接受未做熵源验证的密码模块;NIST SP 800-90B、BSI AIS-31 就是为此而写的标准
  • · 而硬件钱包这边,只有安全元件的 Common Criteria、零星的 CSPN 和厂商赞助的审计,没有一套流程系统性地强制端到端验证。原话收尾:「数字资产自托管不该是例外」
  • · 顺带一个行业注脚:这不是孤立事件。Milk Sad(CVE-2023-39910,2023 年):Libbitcoin Explorer 的 bx seed 用 32 位时间戳给 MT19937 播种,22.7 万+ 地址、超 90 万美元被扫。随机性是加密行业反复翻车的同一个点——因为坏随机数没有任何可见症状

✅ 可采纳 / ❌ 不可自行采纳

  • ✅ 复盘自己的助记词是在哪台设备、哪个固件版本、哪一天生成的——判定看的是那一刻,不是现在
  • ✅ 记不清就按受影响处理:装最新固件、强制注熵(掷骰/抛硬币/按键)、生成全新种子、小额测试后全额迁移
  • ✅ 今后新种子一律带用户自供熵;新固件已强制,老固件手动开
  • ✅ 多签要做「跨厂商钥匙」;同品牌同批次的多签只是心理安慰
  • ✅ 迁移全程离线、旧备份妥善销毁;迁移后旧地址不再回访
  • ✅ 把这套判定逻辑迁移到别的设备:问厂商要的是「熵源端到端验证」证据,不是「我们有安全元件」这句话
  • ❌ 不要「升级固件就当修完了」——种子里的弱熵不随固件升级消失
  • ❌ 不要把同一组旧助记词倒进新钱包新软件就以为安全了
  • ❌ 不要因为这件事把币搬回交易所:托管把风险从「厂商构建错误」换成「交易所被黑/冻结/跑路」,前文 CEX 和 DEX 怎么分工 复盘过五起交易所灾难
  • ❌ 不要自己改装备份方案(比如把助记词按词位拆开)——DIY 拆分会把 256 位砍到 80 位,详见 助记词拆分保存更安全?错了

❓ FAQ

Q:我怎么知道自己的 Coldcard 生种子时跑的是哪个固件?
设备上能看当前固件版本,但那是今天的版本。真正相关的是生成种子那天的版本——只有你记得当时的状态(买来开箱即固件、某年升级过、某天重置过)。记不清就按最坏打算处理,迁移成本远低于被扫成本。

Q:币已经放了三年没动,设备也在保险箱,为什么还会被扫?
因为弱点不在设备和网络,在助记词数学本身。熵塌了之后,你的种子在攻击者的候选清单上;他们本地派生地址、对公链查你有多少钱——这不需要碰你任何东西。休眠久反而是最理想的受害画像:没人盯着地址,攻击者可以从大到小慢慢扫。

Q:当时掷了骰子就完全没风险了吗?
对主种子,按 Coinkite 口径 ≥50 次公平、独立、私密的掷骰可以排除本次缺陷影响。但有两个前提:① 掷骰结果从未记录/拍照/上云;② 你没用过纸钱包、克隆、Key Teleport、SeedXOR 这类直接向坏发生器要字节的功能——那类功能掷了骰子也不免疫。

Q:升级到最新固件再重新生成一个种子,旧资产怎么办?
两步:新固件 → 强制注熵 → 新种子 → 小额测试 → 全额转入。旧种子控制的资产必须搬走,搬完旧助记词和旧纸备份作废。仅升级不动资产,等于站在敞开的门前。

Q:这次事件说明自托管不如托管吗?
不能这么读。受影响的是一个厂商五年前的一个构建错误;同一时期托管侧的事故(交易所被黑、冻结、内部人作恶)一样在发生,而且用户对托管侧毫无处置权。正确读法是:自托管省不掉「亲手验证」的功课——熵源、备份、多签、定期复核,一个都不能外包给默认设置。

Q:非 Coldcard 用户需要做什么?
三件事:① 确认你的设备不在受影响清单(Block/Trezor/Ledger 已公开确认不共享该缺陷);② 新设置一律加用户注熵或 passphrase;③ 把「厂商如何验证熵源端到端」变成你以后选设备时会问的问题。

📚 参考来源

免责声明:本文为公开视频内容的科普整理与事件核查,不构成投资建议(not financial advice);受影响判定、固件版本与迁移步骤以 Coinkite 官方安全公告与各厂商最新公告为准。加密资产波动极大,只用你能承受全部损失的钱参与。

← 返回博客列表 返回首页