安全

一个固件漏洞潜伏五年,持币者却毫无察觉?COLDCARD 风波让助记词随机性成为焦点

助记词由 12 或 24 个单词组成,理论上几乎不可能被猜中。但如果生成它的“随机数”其实并不随机,再长的助记词也可能在几小时内被破解。这类漏洞往往潜伏多年,直到资产被盗才被发现。

围绕 COLDCARD 固件随机数的讨论,最近在币圈社群里持续发酵。有人担心自己的助记词“不够随机”,有人连夜更换钱包,也有人认为这是过度恐慌。

由于具体的技术细节和受影响范围,应当以厂商 Coinkite 的官方公告和独立安全研究为准,本文不复述未经证实的说法。但这场风波确实把一个长期被忽视的问题推到了台前:助记词的安全,取决于它生成时是否足够随机。

而历史已经证明,随机数漏洞可以潜伏好几年,持币者却毫无察觉。

要点速览

  • 助记词本质上是一串随机数的“翻译”,12 个单词对应 128 位熵,24 个单词对应 256 位熵。
  • 如果随机数生成器有缺陷,实际的熵可能远低于理论值,攻击者可以批量暴力破解。
  • Milk Sad、Trust Wallet 浏览器插件、Profanity 等真实案例,都造成了实际资产损失。
  • 遇到相关公告时,先查官方说明,确认受影响的型号、固件版本和生成时间,再决定是否需要更换助记词。

助记词为什么必须足够随机

助记词的安全,本质上是一场概率游戏
助记词的安全,本质上是一场概率游戏

钱包生成助记词时,会先产生一串随机数(称为“熵”),再按照 BIP39 标准转换成单词。

助记词长度熵的位数可能的组合数量
12 个单词128 位约 3.4 × 10^38
24 个单词256 位约 1.2 × 10^77
有缺陷的生成器(举例)32 位约 43 亿

128 位熵意味着,即使动用全世界所有的计算机,也几乎不可能猜中一组助记词。想了解详细的计算,可以阅读 有人能猜中你的 12 个助记词吗。

但这一切有个前提:随机数必须是真正随机的。 如果生成器有缺陷,比如只用了 32 位的种子,那么无论最终输出的助记词看起来有多长,实际的可能性只有约 43 亿种。对一台普通电脑来说,遍历 43 亿种可能可能只需要几个小时到一天。

真实发生过的随机数漏洞

时间事件问题后果
2022 年Profanity 靓号地址生成器生成私钥时使用的随机种子空间太小做市商 Wintermute 损失约 1.6 亿美元
2022–2023 年Trust Wallet 浏览器插件某个版本的随机数生成方式存在缺陷部分在该期间创建的钱包被盗,损失约 17 万美元
2023 年Milk Sad(Libbitcoin Explorer)命令行工具用 32 位系统时间作为随机种子漏洞存在多年,被大规模利用后损失超过 90 万美元
2023 年Randstorm(早期 BitcoinJS)2011–2015 年间部分网页钱包的随机数较弱研究人员提醒这期间创建的钱包存在风险

说明:以上数据来自公开的安全研究和报道,损失金额为当时统计的约数。

Milk Sad 是最典型的“潜伏型”漏洞。问题代码在 2016 年左右就已存在,直到 2023 年攻击者开始大规模清空钱包,安全研究人员才追查到根源。几年里,用户一直以为自己的助记词安全无虞。

这些案例的共同点是:漏洞都出在软件的随机数生成环节,而不是助记词标准本身。 用户既看不出来,也无法通过“看起来很乱”的单词判断是否安全。

硬件钱包是怎么生成随机数的

一行有缺陷的代码,可能让无数助记词暴露在风险之中
一行有缺陷的代码,可能让无数助记词暴露在风险之中

主流硬件钱包通常会使用芯片内置的真随机数发生器,有些设备还会混合多个来源的熵,降低单一来源出错的风险。

COLDCARD 一类的设备还提供了 掷骰子生成助记词 的功能:用户亲手掷骰子,把结果输入设备,作为熵的来源之一。这样即使设备的随机数发生器出现问题,只要你掷的次数足够多,助记词依然足够随机。

熵的来源优点局限
芯片真随机数发生器方便,无需用户操作用户无法验证,依赖厂商实现
多来源混合单一来源出错时仍有保障依然依赖固件实现正确
用户掷骰子用户自己掌控随机性,可独立验证操作繁琐,次数不够时熵不足

提示:以 6 面骰子为例,每掷一次约提供 2.58 位熵。要达到 256 位熵,大约需要掷 99 次;只掷十几次,熵远远不够。

听到漏洞消息时,该怎么做

  1. 先看官方公告:确认受影响的型号、固件版本和助记词生成时间段。不要轻信社群里的截图和转述。
  2. 判断自己是否在范围内:回忆钱包是何时、用什么设备、什么固件版本创建的。
  3. 如果确认受影响:在一台确认安全的设备上生成全新的助记词,尽快把资产转移过去。旧助记词不要导入新设备。
  4. 警惕借机诈骗:漏洞消息一出,冒充官方的“紧急迁移”邮件和假网站往往随之而来。任何要求你输入助记词的“修复工具”都是骗局。
  5. 加上密码短语:密码短语不在助记词里,即使助记词的随机性出了问题,攻击者也需要额外破解密码短语。

常见问题

我怎么知道自己的助记词够不够随机?

单凭肉眼无法判断,看起来再杂乱的单词,也可能来自有缺陷的生成器。可靠的方法是关注官方公告和独立安全研究,确认你的设备和固件版本是否受影响。

自己随便想 12 个单词当助记词,是不是更随机?

恰恰相反。人类挑选的单词往往有规律可循,熵远低于随机生成的助记词,而且不符合校验规则。千万不要自己编助记词。

掷骰子生成助记词,安全吗?

如果设备支持、操作正确、掷的次数足够,掷骰子能让你独立掌控随机性。但要在私密环境中进行,不要拍照或录像,结束后妥善处理记录。

换了新钱包,旧钱包里的币还安全吗?

如果旧助记词确实存在随机性缺陷,资产随时可能被盗。确认受影响后,应尽快把全部资产转移到新钱包,包括不同链上的资产。

小结

一个随机数漏洞可以潜伏多年,因为 用户永远无法从助记词的外表判断它是否安全。COLDCARD 这次风波,与其说是某个品牌的问题,不如说是对所有持币者的提醒:关注官方安全公告、了解熵的来源、必要时用掷骰子补充随机性,并为助记词再加一道密码短语。

想了解密码短语如何提供额外保护,可以阅读 第 25 个密码就能救命?;想了解被篡改设备的风险,可以阅读 硬件钱包居然能藏额外电路板?。

需要提醒的是,中国大陆对虚拟货币相关业务有明确的限制性规定,请务必遵守所在地的法律法规。本文仅为知识科普,不构成任何投资建议。

相关阅读