一个形同虚设的 安全检查
钱包所有的防护,都押在一个猜不到的数字上
硬件钱包有几项工作。它向你展示你实际签署的内容,而不是让你去信任受感染电脑的屏幕,并将你的密钥保留在专为防拆解而设计的芯片中。所有这些防御都假设你密钥所源自的数字是不可能被猜到的。如果能被猜到,攻击者就永远不必突破其中任何一道防线。 24 个单词的助记词所抽取自的密码池,其大小大约相当于可观测宇宙中每千个原子对应一个数字。这样大小的密码池是无法被穷举的。这就是整个安全模型。
12 个单词包含 128 位熵,24 个单词包含 256 位熵,外加基于该熵的 SHA-256 校验和。BIP-39 将其扩展为 BIP-32 主密钥。
12 个单词包含 128 位熵,24 个单词包含 256 位熵,外加基于该熵的 SHA-256 校验和。BIP-39 将其扩展为 BIP-32 主密钥。
COLDCARD 不再从那个数字池里抽数
2021 年的一次固件更新悄然停止了钱包向专用随机数芯片索取该数字的行为,转而让普通软件计算出一个替代数字。对照来看,整个事件的本质如下:
这并不是安全性能打了三折。每个比特都会使工作量翻倍,因此减少 88 个比特意味着将工作量缩减了 2⁸⁸ 倍。对个人而言万亿是个大数字,但对于租用高性能机器来处理这件事情的人来说只是个小数字。
种子生成过程从 ckcc.rng_bytes() 转移到了 ngu.random.bytes()。Coinkite 估计 Mk3 上剩余的搜索空间约为 40 位,在 Mk4/Mk5/Q 上约为 72 位,而目标是 128 位。Block 的独立分析得出了相同数量级(低于 2⁴⁰·⁷ 和低于 2⁷³·³),并发现了剩余空间更小的更严苛条件。2
种子生成过程从 ckcc.rng_bytes() 转移到了 ngu.random.bytes()。Coinkite 估计 Mk3 上剩余的搜索空间约为 40 位,在 Mk4/Mk5/Q 上约为 72 位,而目标是 128 位。Block 的独立分析得出了相同数量级(低于 2⁴⁰·⁷ 和低于 2⁷³·³),并发现了剩余空间更小的更严苛条件。2
因为软件无法做到真正的随机
想想是什么让抛硬币变得不可预测。投掷的力量、重力、空调吹出的气流、地面的微小震动。数十种你能说出的影响和数十种你无法说出的影响。没有人能够计算出轨迹,因此没有人能预言结果。 软件的工作方式则不同。它对少数几个初始值运行固定的公式,并产生固定的答案。在这里,这些值是芯片的序列号以及设备开机运行了多长时间。了解了配方和原料的攻击者会重新计算出输出结果,而不是去猜测它。
在硬件 RNG 被禁用后,rng_get() 链接到了 MicroPython 的 Yasmarang PRNG,该 PRNG 从非机密状态(UID、SysTick、RTC)获取种子,并且在此之后没有收集新的熵,因此候选密码可以在离线状态下被枚举。Coinkite 认为,与 50 次或更多公正、私密的投掷相混合的种子不会因这一问题本身而面临风险:50 × log₂6 ≈ 129 位。3
在硬件 RNG 被禁用后,rng_get() 链接到了 MicroPython 的 Yasmarang PRNG,该 PRNG 从非机密状态(UID、SysTick、RTC)获取种子,并且在此之后没有收集新的熵,因此候选密码可以在离线状态下被枚举。Coinkite 认为,与 50 次或更多公正、私密的投掷相混合的种子不会因这一问题本身而面临风险:50 × log₂6 ≈ 129 位。3
本应拦截此事的检查机制问错了问题
构建版本中曾有一个保护机制,专门用于阻止在没有硬件生成器的情况下发布固件。它检查的是是否存在某个设置,而不是该设置是否已开启。 该设置存在,并且它是关闭的。保护机制保持沉默,构建未报告任何错误,固件随之发布。
#ifndef 仅测试是否已定义。主板配置将 MICROPY_HW_ENABLE_RNG 定义为 0(既已定义又被禁用),因此 #error 从未触发,链接器将 rng_get() 解析为了软件备用方案。3
#ifndef 仅测试是否已定义。主板配置将 MICROPY_HW_ENABLE_RNG 定义为 0(既已定义又被禁用),因此 #error 从未触发,链接器将 rng_get() 解析为了软件备用方案。3
摘自源码的缺陷代码。3
这一切在五年里看起来毫无破绽
脆弱的恢复助记词看起来和强密码完全一样。二十四个普通的词,正确的校验和,一个表现正常的设备。屏幕上没有任何警告,构建过程中也没有任何错误。 源代码自始至终都是公开的。但要阅读它,仍然需要有人去打开那个特定的文件。
弱 PRNG 的输出长度、非零性和非重复性检查均可通过,因此常规的冒烟测试也无法发现它。
弱 PRNG 的输出长度、非零性和非重复性检查均可通过,因此常规的冒烟测试也无法发现它。
本页并非幸灾乐祸。
Coinkite 披露了该漏洞,发布了技术报告并推送了修复程序。外部研究人员能够还原发生的事情,是因为 COLDCARD 是开源的。
关于估算数据的一个提醒:它们描述的是在当前假设下攻击者面临的破解难度,而不是倒计时秒表。没有人能告诉你破解某个特定钱包具体需要多长时间。2
在进行任何操作前请先阅读
你需要做什么取决于你最初创建恢复助记词时使用的是哪款设备,而不是你今天手里拿的是哪款。
假设这种情况仍在发生。这些助记词在 2021 年变得可预测,现在该方法已经公开,因此任何人都可以运行相同的搜索。没有任何补丁能从外部封堵这个漏洞,攻击者也没有理由停手。如果你受到了影响,最稳妥的假设就是:时间是你和他们之间唯一的缓冲。
Mk2 和 Mk3:立即转移你的币
受影响的固件版本范围为 4.0.1 至 4.1.9。4.2.0 版本修复了新助记词的生成方式,但任何更新都无法为已经存在的助记词补足随机性。请在信任的设备上创建一个新钱包,并将资金转移过去。1
Mk4 和 Mk5:检查固件版本
如果助记词是在低于 5.6.0(或 Edge 构建版本的 6.6.0X)的固件上创建的,请更新固件,在更新后的固件上创建一个全新的钱包,然后转移你的资金。单纯更新固件并不能修复旧的助记词。1
Q:同样,分水岭是 1.5.0Q
请更新至 1.5.0Q 或更高版本(Edge 构建版为 6.6.0QX),创建一个新钱包,抄写并测试备份,发送一笔小额测试交易,然后再转移其余资金。1
更新 COLDCARD 固件能修复我现有的恢复秘钥吗?
我该如何查明我的 COLDCARD 恢复秘钥是在哪个固件版本下创建的?
如何检查我的地址是否受此事件影响?
掷骰子或设置密码短语(passphrase)能保护 COLDCARD 的助记词吗?
Coinkite 的公告是否涵盖了所有受影响的 COLDCARD?
所有 OneKey 设备均未受影响
在我们发布过的任何一款型号中都没有。我们的固件不包含任何 libngu、Coinkite、COLDCARD 或 CKCC 依赖项,因此导致失败的代码路径根本不存在,你可以在我们的代码库中亲自核实这一点。在我们当前的硬件上,密钥来自经认证的安全芯片内部真正的随机生成器,绝不来自主处理器上的软件。正是这种替换导致了此次故障。
我们对此也没有盲目信任。当消息传出时,Anzen Lab 对我们的随机性进行了端到端追踪(它来自哪里、什么调用了它、以及决定哪个版本能到达你设备的构建设置),并发布了他们检查的具体文件。12
阅读 Anzen Lab 的重新核查报告这会发生在 OneKey 身上吗?
此次故障需要同时满足三个独立的条件。在 OneKey 上这三个条件全都不成立,你可以亲自检查所有这三点。
那么 OneKey 的 随机数来自哪里?
在 EAL 6+ 认证芯片内部生成
您的密钥在专用的防篡改芯片中生成并存储,而非运行其他业务的通用处理器。EAL 6+ 是支付卡和身份卡所采用的安全保障级别。
具备自检机制的随机数
该芯片利用真实的物理噪声生成随机数,并持续测试自身的输出。如果随机性开始出现异常,芯片会注意到这一点,而不是默默地继续运行。
我们对自身产品进行了重新核查
在 COLDCARD 的消息传出后,Anzen Lab 对我们自己的随机性进行了全流程追踪(它来自哪里、实际调用了什么、以及决定哪个版本最终到达你设备的构建设置),并发布了他们查看的确切文件。11


每一台 OneKey 都要过四重检查, 而每一重都不盲目信任其他三重
任何单一检查都可能有遗漏,关键在于四重检查同时遗漏同一问题的概率微乎其微——而 COLDCARD 的教训恰恰是,只要一个没人复核的构建设置就足以酿成事故。
真正可验证的开源
我们的固件和应用程序在 GitHub 上公开,并且我们的构建是可复现的,这意味着你可以亲自重新构建代码,并确认它产生的就是运行在你设备上的精确软件。这就是能够捕获“代码正确、版本错误”问题的步骤。
GitHub 上的 OneKey专职寻找自家产品漏洞的团队
Anzen Lab 是我们由硬件、固件和应用安全工程师组成的内部安全团队,并与轮换的外部研究人员合作。他们的工作是在任何产品发布之前破解硬件钱包,包括我们自己的。当这个消息爆发时,他们重新审查了 OneKey 自身的随机性端到端流程,并精确发布了他们检查的文件。11
阅读 Anzen Lab 分析报告我们付费邀请外部人员寻找我们的错误
任何人都可以通过我们在 BugRap 上的公开项目或直接发送邮件至 [email protected] 私下向我们报告漏洞,并获得漏洞赏金。严重程度决定了基于 CVSS 评分的赏金数额。核心目的在于让漏洞披露比公开出售更有价值。15
BugRap 上的 OneKey测试你手里的钱包
哪些钱包支持检查
外部人员是否能够读取设备原始随机数。这是一个狭窄的维度。请参阅其下方的说明。
这件事给整个行业留下的思考
OneKey 是否受到 COLDCARD 熵值故障的影响?
COLDCARD 熵值故障会影响哪些硬件钱包?
我可以测试自己钱包的随机性吗?
如何判断一个硬件钱包是否值得信赖?
参考资料
以下来源检索于 2026 年 8 月 6 日。首先是 Coinkite 自身的公告和技术报告,其次是独立的源码级分析和链上核算。损失数字仍在向上修正:Galaxy Research 在 8 月 4 日确认了 1,596 枚 BTC,并估计疑似损失接近 2,055 枚 BTC。
- 1. Coinkite · COLDCARD Mk3 Seed Generation Security Advisory
- 2. Coinkite · Technical Deep Dive into the Entropy Issue
- 3. Block Engineering · Predictable RNG Fallback and 32-Bit Reseed in COLDCARD Firmware
- 4. CoinDesk · Bitcoin cold-wallet attack spreads to 4,500 addresses as losses near $89 million
- 5. CoinDesk · Major bitcoin wallet flaw drains 594 BTC in 25-minute sweep
- 6. Crypto Briefing (Galaxy Research) · Galaxy Research identifies 1,367 BTC drained in attacks on Coldcard addresses
- 7. The Crypto Times (Galaxy Research) · Coldcard hack losses hit $100M with 1,596 BTC stolen in ongoing attack
- 8. The Crypto Times (Galaxy Research) · 15 attackers exploit ongoing Coldcard hack as losses approach $130M
- 9. The Hacker News · Coldcard Hardware Wallet Flaw Linked to $70 Million Bitcoin Theft in 41 Minutes
- 10. Bitcoin Magazine · Coinkite Releases Fixed Firmware After Coldcard Bug
- 11. OneKey Anzen Lab · The COLDCARD Entropy Failure: How a Silent RNG Fallback Cost Users $38 Million
- 12. OneKey · Statement: OneKey devices are not affected by this issue
- 13. OneKey · OneKey has passed a security audit by SlowMist — separate reports cover the Pro, the Classic 1S and the SDK
- 14. SlowMist · SlowMist Audit Report — OneKey Pro
- 15. BugRap · OneKey Bug Bounty Program
- 16. entro.tools · Entropy Check — verify your hardware wallet's randomness (device support matrix)









