返回博客列表

COLDCARD 熵漏洞暴露的真正风险:离线钱包为何仍会因随机数失守?

COLDCARD 多代硬件钱包的部分固件在生成种子和私钥时,没有按预期使用硬件随机数生成器,而是进入了由芯片标识符和计时寄存器初始化的软件伪随机数回退路径。Coldcard 受害者被盗 17 枚 BTC 转入离岸投注平台,平台拒绝冻结。

一、这次事件发生了什么?

2026 年 7 月底,部分 COLDCARD 用户报告钱包资产被异常转走,Block 的比特币工程与安全团队与其他研究人员随后检查固件代码,并将问题定位到随机数生成器的集成逻辑。

COLDCARD 原本拥有独立的硬件随机数读取实现,但在 2021 年的一次固件架构调整后,部分密钥生成代码改为调用 ngu.random。相关组件在判断硬件随机数功能是否可用时,只检查配置宏是否存在,却没有检查它的值是否为零,结果程序虽然能够正常编译和运行,实际调用的却不是预期的 STM32 硬件随机数生成器,而是 MicroPython 提供的软件回退生成器。

这个回退生成器使用芯片 UID、系统计时器和实时时钟寄存器初始化。它产生的输出看起来可能很随机,也能够通过简单的重复值检测,但这些输入不是专门采集的密码学随机源,其中一部分是固定设备信息,另一部分则与开机时间和程序执行顺序有关。

只要攻击者能够确定或有效缩小设备标识、启动时间和随机数调用历史,就可能在自己的计算机上复现候选随机数流,并通过受害钱包公开的地址或扩展公钥验证候选种子。

这不是从区块链中“反推出私钥”,也不是比特币的椭圆曲线密码被破解,而是钱包在最初生成私钥时可能只从一个远小于预期的候选集合中进行选择。


二、什么是熵,为什么它决定钱包安全?

在密码学中,熵可以简单理解为攻击者无法预测的不确定性。

一个正常生成的 256 位随机种子拥有极其庞大的候选空间,攻击者即使拥有现代计算集群,也无法逐个尝试所有可能结果。比特币私钥之所以安全,并不是因为地址本身隐藏了某种神秘信息,而是因为私钥应当从一个大到无法穷举的随机空间中生成。

如果生成器表面上输出 256 位数据,真实输入却只有几十位不确定性,那么私钥长度虽然没有变化,实际安全性却已经大幅下降。

可以把它理解成一个密码箱标称拥有数百位组合,但工厂实际上只在几百万种预设密码中选择。密码看起来依然很长,也可能包含复杂字符,然而攻击者只需要遍历那个有限的预设集合,而不需要尝试理论上的全部组合。

COLDCARD 事件最重要的技术教训,正是输出长度不等于熵的大小。

对低熵输入进行 SHA-256 哈希,可以让结果看起来分布均匀,却不能创造原本不存在的随机性。假设最初只有约 2³² 种可能输入,那么经过一次、两次甚至更多次哈希后,最终仍然最多只有约 2³² 个可能结果。

BIP-39 校验位同样不能增加随机性,因为它只是根据已有数据计算出来的校验信息。

因此,“生成了 24 个助记词”“使用了 SHA-256”“私钥最终有 256 位”都不能单独证明钱包种子真正拥有 256 位安全强度,关键始终是最初的不可预测信息来自哪里,以及其中究竟包含多少有效熵。


三、哪些 COLDCARD 设备和种子可能受到影响?

这次风险取决于生成种子时使用的设备型号和固件版本,而不是用户现在运行的版本,也不是硬件的购买日期。

根据 Block 与 Coinkite 当前披露的信息,风险范围可以保守整理如下:

设备生成种子时使用的固件当前判断
Mk1已公开发行版本不属于此次随机数回退问题
Mk2 / Mk33.2.2 及更早版本使用原硬件随机数路径,不属于此次回退问题
Mk2 / Mk34.0.0 至 4.1.9应保守视为可能受影响
Mk4 / Mk5早于标准版 5.6.0受到熵不足问题影响
Q早于标准版 1.5.0Q受到熵不足问题影响
Mk4 / Mk5 Edge早于 6.6.0X受到影响
Q Edge早于 6.6.0QX受到影响

Block 将 Mk2、Mk3 的 4.0.0 至 4.1.9 列为脆弱路径,Coinkite 的初步公告则明确点名 4.0.1 至 4.1.9。由于两个公开报告在起始版本上存在一个小版本差异,使用 4.0.0 生成种子的用户不应依据这一差异继续冒险,最稳妥的处理方式仍然是按照受影响钱包迁移。

Mk2 和 Mk3 的情况最严重,因为相关版本没有加入密码学安全的重新播种材料。在设备 UID、计时状态和调用顺序已知时,生成过程可能完全确定;即使部分状态未知,搜索空间也可能远低于正常钱包安全水平。

Mk4、Q 和 Mk5 在启动时会从安全元件读取随机材料,但固件将材料哈希后只取四个字节,也就是 32 位,传递给软件生成器的 reseed() 接口,并且该接口只替换内部状态中的一个 32 位字段。

Coinkite 在面向用户的公告中将这些新设备生成种子的有效熵描述为大约 72 位;Block 则指出,在固定软件回退状态和调用历史后,安全元件重新播种最多只能区分 2³² 条输出流,实际整体搜索难度还取决于计时器、设备信息和执行路径能够被攻击者缩小到什么程度。

这两种表述并不完全相同,但结论一致:它们没有达到用户对现代硬件钱包种子应有的安全预期,仍然需要迁移。


四、这是否意味着所有 COLDCARD 都能被远程破解?

不能这样理解。

Block 在报告中明确表示,其团队根据代码和当前事件完成了根因分析,但尚未对所有型号、硬件状态和真实使用流程进行完整的端到端实验,因此没有声称任何互联网攻击者都能立即恢复任何一台设备的种子。

实际攻击成本取决于攻击者掌握多少信息,包括设备 UID 的可获得程度、种子生成时的大致开机时间、随机数生成前调用过多少次相关函数,以及受害人是否使用了骰子熵或独立 Passphrase。

然而,这并不意味着用户可以继续观望,因为已有异常资产转移报告,Block 也明确表示正在发生主动利用。

安全事件中的“并非所有钱包都能立即破解”,不能被误解成“我的钱包大概率没事”。只要种子候选空间已经从密码学上不可穷举,下降到有可能被专业攻击者搜索的范围,继续把资金保留在旧地址中,就等于把是否失窃交给攻击者的资源、信息和目标筛选策略。

攻击者通常也不会平均攻击所有钱包,而会优先处理余额较高、长期未移动、公开信息较多或已经能够缩小候选范围的目标。

媒体初步统计称,大约 500 个钱包、594 BTC 被转走,并有大量资金被归集到少数地址,但最终受害范围仍有待 Coinkite、Block 和链上研究人员继续确认。


五、为什么升级固件不能修复旧钱包?

这是本次事件中最容易被误解,也最重要的一点。

固件更新可以修正未来生成随机数的过程,却无法改变过去已经生成的种子。助记词一旦确定,由它派生的私钥、扩展公钥和全部地址也随之确定,后来升级设备并不会为旧种子补充新的随机性。

假如旧种子原本只来自一个较小的候选集合,那么无论它后来被导入另一台 COLDCARD、Ledger、Trezor、软件钱包还是离线电脑,其脆弱性都会跟随种子继续存在。

硬件钱包只是保存和使用种子的设备,真正控制资产的是种子及其派生私钥。

因此,受影响用户需要完成的是密钥轮换,而不只是软件升级:

先安装修复固件,再生成一个完全不同的新种子,核对新钱包指纹与收款地址,通过小额交易测试无误后,将全部资产从旧钱包转移到新钱包。

只有当资金完成链上转移并得到确认后,风险才真正从旧种子中移除。


六、骰子和 BIP-39 Passphrase 为什么能够降低风险?

COLDCARD 允许用户在生成种子时加入实体骰子投掷结果,这些由用户独立提供的随机输入并不依赖出现问题的设备随机数路径。

根据 Coinkite 当前说明,如果用户在最终生成助记词之前加入了至少 50 次公平、独立且没有被记录或泄露的六面骰投掷,骰子输入本身可以提供至少约 128 位熵;99 次或更多投掷则接近 256 位。

这里的条件缺一不可。骰子必须是真实随机投掷,顺序必须保持私密,不能使用自己随意编写的数字,也不能把投掷结果拍照、上传云端或输入联网设备。

如果用户不确定自己投了多少次、是否使用了最终显示的那组助记词,或者骰子记录曾被保存,就不应假设自己属于安全例外,而应直接迁移。

强而独立的 BIP-39 Passphrase 也可以增加另一道障碍,因为攻击者即使恢复了低熵种子,还需要继续猜出 Passphrase,才能访问对应的隐藏钱包。

但这里说的是 BIP-39 Passphrase,而不是设备解锁 PIN。

简短单词、名言、生日、固定格式和重复使用的密码都可能被字典攻击猜中。即使使用了真正强大的 Passphrase,Coinkite 仍建议迁移,因为 Passphrase 只是把即时风险降低,并没有修复种子本身的随机性缺陷。


七、影响并不只限于主钱包助记词

Block 的代码分析显示,存在问题的 ngu.random 还被多个功能调用,包括临时钱包种子、纸钱包私钥、随机 Seed XOR 掩码、设备克隆、USB 加密、Key Teleport、Web2FA 密钥、自动生成的 Secure Notes 密码,以及部分 HSM 本地认证材料。

这并不代表这些功能都已遭受相同规模的实际攻击,也不代表使用过其中任何功能就一定已经泄露秘密,因为每个协议向外暴露的验证信息和攻击条件并不相同。

但它说明这不是一个只影响“新建钱包”按钮的局部缺陷,而是一项底层随机数能力被多个安全功能共同依赖后形成的系统性风险。

例如,纸钱包会直接把随机数输出作为私钥使用,公开地址可以帮助攻击者测试候选私钥;设备克隆和临时加密功能则可能向外暴露公钥或加密数据,使候选随机状态具备可验证条件。

安全团队在修复这类问题时,不能只修改最明显的主钱包生成流程,还需要建立调用关系清单,追踪所有依赖同一随机源的功能,并判断每个场景是否需要撤销、迁移或重新生成秘密。


八、“离线”和“安全芯片”为什么没有阻止这次问题?

硬件钱包最常见的安全叙事,是私钥离线保存、安全芯片阻止提取、签名过程与联网电脑隔离。

这些能力确实能够抵御大量现实攻击,但它们保护的是已经生成的私钥不被轻易读取,并不能保证私钥最初生成时拥有足够随机性。

如果私钥从一开始就在一个攻击者可以搜索的有限集合中,那么攻击者根本不需要偷走设备、破解 PIN、攻击安全芯片或感染用户电脑,只需要在自己的设备上计算候选种子,再利用公开地址找到匹配结果。

这次事件说明,硬件钱包的安全链条至少包含随机数生成、固件构建、密钥存储、交易显示、签名实现、更新机制和备份流程,而不是只取决于有没有安全芯片。

任何一层失守,都可能绕过其他层提供的保护。

安全芯片可以防止读取正确生成的种子,却无法让低熵种子自动变得随机;气隙可以阻止网络直接连接设备,却无法阻止攻击者在离线环境中枚举候选私钥;开源代码可以帮助外部审查,但只有在代码真正被持续审计、构建结果可以验证,并且关键安全假设得到测试时,开放源代码才会转化为现实保护。


九、为什么这个错误能够存在五年?

根据目前公开时间线,脆弱路径在 2021 年 3 月进入固件,直到 2026 年 7 月发生疑似实际盗窃并展开集中调查后,问题才被定位。

从代码层面看,错误并不复杂:一个条件编译判断检查配置宏是否“存在”,而不是检查其值是否“启用”,随后符号解析又把随机数调用导向了一个能够正常运行的软件回退实现。

这类错误之所以危险,正是因为程序没有崩溃,生成的数据也没有出现明显重复,简单随机性测试甚至可能认为输出分布正常。

密码学随机数的质量不能只通过“看起来够乱”判断。一个完全确定的伪随机生成器同样可以通过大量统计测试,只要攻击者能够重建初始状态,所有后续输出仍然可以预测。

这说明安全审计不能只寻找内存越界、签名绕过和明文泄露,也需要检查每一个秘密究竟从哪里产生、熵如何流入系统、经过哪些压缩和截断,以及异常情况下系统是安全失败还是继续运行。

对于密钥生成设备来说,随机数架构应当拥有专门的设计文档、单元测试、构建期断言和运行时自检,而不应依赖多个组件之间隐含的命名与编译约定。


十、硬件钱包厂商需要承担什么责任?

自托管意味着用户最终控制资产,却不意味着厂商可以把所有风险归咎于用户保管不慎。

当设备负责生成助记词、展示地址和签署交易时,厂商实际上承担了极高的安全责任,因为普通用户没有能力自行验证随机数源、固件构建和密码学实现。

此次事件发生后,Coinkite迅速发布公告和修复固件,并提供迁移建议,这是必要的第一步,但后续仍需要一份完整技术复盘,解释漏洞为何没有在代码审查、自动化测试和产品安全评估中被发现,不同型号的真实熵上限如何通过硬件测试确认,以及已发生损失的用户将获得什么支持。

安全透明度不能只体现在源代码可以公开查看,也应体现在风险发生后准确界定影响、承认不确定性、保存技术证据,并持续更新处置建议。

对于不可逆转的加密资产来说,披露速度尤其重要,因为延迟一天就可能意味着更多地址被攻击者扫描和清空。


十一、用户现在应该怎么做?

使用 COLDCARD 的用户应先确认种子是在什么设备、什么固件版本下生成,而不是只查看设备目前安装的版本。

受影响用户应从官方渠道安装对应修复固件:

设备修复版本
Mk2 / Mk34.2.0 或更高版本
Mk4 / Mk5 标准版5.6.0 或更高版本
Q 标准版1.5.0Q 或更高版本
Mk4 / Mk5 Edge6.6.0X 或更高版本
Q Edge6.6.0QX 或更高版本

更新后不要继续沿用旧种子,也不要简单把旧助记词导入新设备。

正确的处理方式,是在修复后的设备或另一台可信设备上生成全新种子,离线记录并验证备份,在硬件钱包屏幕上核对新地址,先发送小额测试资金,确认能够正常恢复和支出后,再转移剩余余额。

迁移过程中需要保持冷静,因为仓促操作、抄错助记词、发送到错误地址、把 Passphrase 输入网络页面,可能造成比漏洞本身更加直接的损失。

任何自称能够帮助“检测助记词是否受影响”的网站、机器人和客服,都不应获得用户的助记词或 Passphrase。判断风险只需要设备型号、生成时固件版本和是否加入足够的私密骰子熵,不需要向任何人提交秘密。


十二、多重签名能否解决这种问题?

多重签名能够减少单一设备、单一厂商或单一密钥失守造成的风险,但前提是参与签名的密钥来自真正独立的安全来源。

如果一个 2-of-3 钱包的三个种子都由相同受影响型号、相同固件和相同随机数缺陷生成,那么攻击者仍可能恢复足够多的密钥并达到签名门槛。

更合理的多重签名架构,应当使用不同厂商、不同代码库和不同密钥生成方式,使一次供应链问题或实现缺陷难以同时影响法定数量的签名设备。

其中一个种子可以由经过审计的硬件钱包生成,另一个通过独立设备结合骰子产生,第三个则由另一套实现保管,同时将备份和设备放置在不同物理位置。

多重签名的价值不是让配置看起来更复杂,而是主动分散信任。

如果多个签名器共享同一个厂商、同一种芯片、同一个随机数库和同一个升级渠道,那么表面上的三把钥匙,可能仍然只有一个真正的失效点。


十三、365VPN 安全团队如何看待这次事件?

我们认为,COLDCARD 熵漏洞最值得关注的并不是某一家硬件钱包“翻车”,而是它再次揭示了安全产品中一个常被忽视的事实:安全能力不是功能名称,而是一条必须能够被验证的完整链路。

用户看到“离线”“安全芯片”“开源固件”“24 个助记词”和“空气隔离”时,很容易把这些标签叠加成绝对安全感,但任何标签都只覆盖特定威胁。

VPN 也遵循相同规律。

365VPN 可以保护用户设备到 VPN 节点之间的网络连接,降低公共 Wi-Fi 监听、DNS 泄露和本地网络篡改风险,却无法修复硬件钱包内部的低熵种子,也不能阻止用户把助记词输入钓鱼网站。

反过来,硬件钱包可以隔离私钥,却无法保护用户访问假冒固件下载页面时的网络环境,也不能代替账号安全、设备更新和供应链验证。

真正可靠的隐私与安全体系,需要明确每一项工具保护什么、不保护什么,并避免把全部资产和信任集中在单一产品中。


十四、随机数应该成为安全产品的一级资产

在许多产品中,随机数仍然被当作底层库提供的一项普通功能,开发者只要调用一个名字包含 random 的接口,就默认获得了密码学安全输出。

此次漏洞说明,这种假设非常危险。

安全产品应当明确区分普通伪随机数与密码学安全随机数,不允许密钥生成代码静默回退到非密码学生成器,更不应该在硬件随机数失效时继续生成看似正常的秘密。

正确原则应当是:没有足够熵,就拒绝生成密钥。

系统还应在构建阶段验证硬件随机数配置,在运行阶段执行健康检查,并通过完整状态注入,而不是把高质量随机材料压缩成一个过小的重新播种参数。

更重要的是,厂商需要测试熵的来源与上限,而不仅是检查输出是否通过统计随机性测试。


十五、自托管不应建立在盲目信任之上

加密资产行业经常使用“不是你的私钥,就不是你的币”强调自托管价值,但 COLDCARD 事件提醒我们,拥有助记词并不自动意味着拥有可靠生成的私钥。

用户从交易所托管转向硬件钱包,只是把信任从交易所转移到了设备、固件、随机数源、供应链和自己的操作流程。

这种转移通常仍然有价值,但不能被描述成彻底消除了信任。

成熟的自托管应当具备可验证的固件来源、独立备份、定期恢复测试、密钥轮换能力、厂商多样性和明确的事故迁移预案。

对于大额资产,用户还应考虑多重签名,而不是把全部资金永久交给一组由单台设备生成、从未轮换过的助记词。

区块链交易不可撤销,因此传统金融中的冻结、退款和账户恢复机制通常不存在。一旦种子被恢复,攻击者不需要入侵任何中心服务器,也不需要继续控制硬件钱包,就可以直接转走资产。

这意味着,自托管系统必须把低概率、高损失事件当作正常设计条件,而不是把“过去几年没有出事”当作安全证明。


十六、365VPN 安全团队的最终见解

COLDCARD 熵漏洞不是比特币协议失败,也不是现代密码学被攻破,而是一个安全产品在最关键的密钥生成环节,把应当来自硬件随机数的不可预测性,错误地交给了可重建的软件伪随机数状态。

它揭示了三个值得整个安全行业长期反思的问题。

第一,输出看起来随机,不等于拥有足够熵;24 个助记词、256 位数据和多次哈希,都不能弥补最初随机输入不足。

第二,安全硬件只能保护已经正确生成的秘密,不能修复一个从诞生时就可预测的私钥。离线、气隙和安全芯片不是相互叠加后便能形成绝对安全的营销标签,而是各自承担有限职责的防线。

第三,软件更新不能修复已经暴露的身份和密钥。发现密钥生成问题后,真正有效的补救必须包括重新生成秘密、验证新环境并完成资产迁移,而不是只安装补丁后继续使用原地址。

对普通用户而言,现在最重要的是核对种子生成时的固件版本,对受影响钱包完成谨慎迁移,并拒绝任何索取助记词的所谓检测工具。

对硬件钱包行业而言,这起事件意味着随机数架构、可复现构建、独立审计、故障关闭和跨厂商多重签名不应再被视为高级选项,而应成为大额自托管的基本要求。

对所有安全产品而言,COLDCARD 事件再次说明,真正危险的漏洞往往不是让程序立即崩溃的错误,而是那些让系统继续正常运行、界面继续显示安全、用户继续放心存入资产,却悄悄削弱了底层安全假设的错误。

安全最怕的不是明确失败,而是一个已经失败,却仍然看起来一切正常的系统。

© 2025 365VPN All rights reserved.