你的助记词到底有多难猜?ColdCard 又是怎么让它变好猜的

FelixFelix
/更新于 2026年8月6日
你的助记词到底有多难猜?ColdCard 又是怎么让它变好猜的

要点总结

• ColdCard 的一次固件错误更新,让钱包从硬件随机数发生器静默退回到了软件伪随机数生成器

• 这使可能的助记词总数从 2^256 缩小到约 2^40(约 1.1 万亿),Mk2/Mk3 受影响最重,Mk4/Mk5/Q 约为 2^72

• 攻击者从未破解设备本身,只是猜中了那些不再难猜的助记词

• 一套正常生成的 24 词 BIP-39 助记词发生碰撞的概率,比下一秒遭遇灭绝级伽马射线暴还要小约 5×10^60 倍

• 真随机数发生器取自物理噪声,即使攻击者掌握设备型号、序列号、启动时间和全部源代码也无从推算

本文以科普为主,为了便于理解,部分技术细节做了简化和类比处理,可能与实际实现存在出入。如涉及具体的资产安全处置,请以官方公告为准,并咨询专业人士。

2026 年 7 月 30 日,比特币链上发生了一起异常的集中转账事件:短短 15 分钟,500 个地址先后向同一个地址转入约 594.48 枚比特币(约合 3800 万美元)。随后,其中约 562 枚比特币又被集中转往另一个地址。这显然不是正常的转账事件,后经证实,这是黑客盗取比特币资产之后转移赃款的手段。链上记录

500 个来源地址 → 同一个归集地址(约 594.48 BTC / 约 3800 万美元) → 另一个地址(约 562 BTC)

随着受害者陆续发声,一个共同点逐渐浮出水面:他们都用过 Coldcard 硬件钱包。当天,Coldcard 的厂商 Coinkite 发布了安全警告,他们的官方调查和独立技术分析都确认,确实是 ColdCard 钱包出了问题。问题出在随机数生成环节,这导致攻击者并不需要破解 Coldcard,只需要猜中用户的助记词就可以盗取资产。

到底是怎么一回事呢?

这次安全事故,问题出在了生成助记词这个环节。

举个例子,正常情况下,硬件钱包生成助记词,就像从一座近乎无穷大的钥匙库里随机抽出一把交给你,用这把钥匙打开只属于你的保险箱。但 Coldcard 的程序出了问题,抽钥匙的范围从整座钥匙库缩成了一个小抽屉。只要把抽屉里的钥匙一把一把地试过去:试开一把,就搬空一个。

当然,这个比喻并不准确——但原理就是这样。更准确点说,是 ColdCard 固件团队的一次错误更新,使得钱包在生成助记词时无法调用更安全的硬件随机数生成器,而是用了"伪随机"的软件随机数生成器,使得生成的"密码"——也就是助记词——的安全性不足,最终导致了这场事故。

看到这里,你可能会疑惑:为什么我的助记词和随机数有关呢?黑客是怎么找到保险箱对应的密码的呢?随机数生成器又是个啥?别着急,听我慢慢道来。

助记词背后究竟是什么?

助记词为什么能证明资产属于你?

在说助记词的来源之前,我们先要搞懂一个东西:你的资产、钱包和助记词的关系。

助记词其实并不是很像保险箱钥匙。在区块链的底层设计中,你的资产其实一直公开在区块链上,就像放在银行里的现金,现金本身没有印上所有者的姓名,所有人都能看见,理论上所有人都有权处置任何资产。但事实显然不是所有人都能无限量地取钱,这是因为在进行转账等操作前,区块链会要求你出具"凭证",证明你有这么多资产,这笔资产是属于你的,而这个"凭证"就是助记词。

也就是说,不管是谁,只要在区块链上输入助记词,查询到这串助记词对应的资产就是谁的,哪怕背后操作人不是你,因为区块链只会看到有人提交了证明资产的"凭证"。

有人发起一笔转账 → 区块链要求出示凭证 → 用助记词生成的签名 → 验证通过,资产可动

链只认凭证,不认人。

所以,助记词的性质比较像"房产证",或者一枚带有"特殊数字标记"的公章。公章本身很容易仿造,真正起到防伪作用的是它携带的特殊"数字"——按照助记词的设计,这串数字几乎不可能被别人猜中。

所以问题的关键就聚焦在这串"数字"上了,它是怎么来的?又怎么保证资产安全呢?

助记词是怎么从数字变成单词的?

我们都知道,计算机使用的是二进制。无论是文字、图片还是密码,到了计算机内部,最终都会变成一串由 0 和 1 组成的代码。助记词当然也不例外。

比如,它在计算机里可能长成这样:

010101000010

但你可能会问了:助记词明明是一个个英文单词,又不是数字,它到底是怎么从这串 0 和 1 里变出来的呢?

其实没有那么复杂。我们可以先准备一本"字典",规定每一段数字分别对应哪个单词。为了方便理解,先随便做一本只有 16 个单词的小字典:

二进制英文单词二进制英文单词
0000apple1000umbrella
0001book1001candle
0010moon1010river
0011pocket1011star
0100coffee1100bread
0101squirrel1101forest
0110train1110clock
0111ocean1111window

接下来,我们把刚才那串代码切成三部分:

0101 | 0100 | 0010

然后拿着这三段数字去查字典:

0101 → squirrel
0100 → coffee
0010 → moon

这样,一串原本看起来很难读的二进制代码,就变成了三个容易记录的词:

squirrel coffee moon

这就是助记词最核心的原理:它并不是凭空冒出来的一组单词,而是把一串数字切成很多小段,再按照固定词表,把每一段翻译成对应的单词。

当然,真实的助记词会比这个例子复杂一些:它使用的词表更大、数字更长,还会加入校验信息。但核心逻辑并没有变——助记词只是那串数字更方便人类抄写、保存和恢复的另一种表达方式。

24 个单词到底有多难猜?

理解了这个之后,我们就可以说到真正的助记词了。现在生成助记词的标准有很多,可以简单理解为那本"字典"有很多本,我们以最常用的那"本"——BIP-39 为例,讲一讲助记词的安全性到底来源于什么。

BIP-39 这本字典,内部足足有 2048 个单词,比我们刚才例子中使用的字典大得多,但本质差不多,它也是由一串很长的二进制代码切割出来的。具体来说,它是由一个长 264 位的代码切割出来的,每 11 位表示一个单词,每个单词有 2^11 也就是 2048 种可能,刚好对应字典中的 2048 个单词。

但是计算机使用的是二进制,生成的随机数只能是 2 的倍数,不能直接生成 264 位随机数,因此我们可以让它先生成一个 256 位的随机数,再把前 8 位数字挪到末尾,这样就有 264 位随机数了,可以生成 24 位助记词。

还记得我们前面讨论过的吗?助记词这个"公章"的安全性,来源于一串特殊的数字,这个数字就是助记词背后对应的随机数。同时我们也说过,"公章"之所以安全,就是因为别人猜不到上面的数字是多少,猜一个错的数字去声明一笔资产属于自己肯定是不可能的吧。那么这串数字到底有多难猜呢?关键就在随机数的位数:256 位随机数足足有 2^256 种可能性,就是对应 2^256 串助记词,也可以是 2^256 个钱包地址。

这个数字到底有多大呢?常见的可观测宇宙基本粒子数量大约 10^80,而 2^256 ≈ 10^77,也就是说,我们几乎可以给宇宙中所有的可观测粒子一个钱包地址!而地球上的总人口才大约 2^33,每个人也能分到约 2^223 个——也就是 1 后面跟着 67 个零那么多:

10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000

所以黑客想要猜到你的助记词,就像从这么多地址中精准捕捉到一个有余额的地址,这个难度非常非常大。

但是这个时候有人可能就会问了:可不可能计算机会偶然生成两个一模一样的钱包地址呢?这样后来者就可以偷走前面人的资产了啊?好问题,而且这个可能确实存在,不过现实生活中这不可能发生。对于两套独立、正常生成的 24 词 BIP-39 助记词,完全相同的概率是 1 / 2^256 ≈ 8.6 × 10^-78。

而据权威论文估算,下一秒地球遭遇一次足以引发大规模物种灭绝的伽马射线暴的概率,大约是 4.4 × 10^-17。也就是说,助记词撞车的概率比物种大灭绝的概率还要小约 5 × 10^60 倍。

可想而知,助记词到底有多难猜。

ColdCard 究竟犯了什么错?

从 2 的 256 次方缩小到 2 的 40 次方

理解了助记词背后究竟是什么,就可以理解 ColdCard 究竟犯了什么错了。

ColdCard 团队的一次错误的更新,使得生成助记词时,本来应该有 2^256 种可能的助记词,实际却只剩下 2^40 种,相差了巨大的数量级。当然你可能会问 40 位随机数是怎么生成 24 个助记词的,但是不用纠结这个,只需要知道,这个错误让 ColdCard 生成的钱包地址被猜中的可能性大幅上升。

生成的钱包地址只有约而正常生成的可能性有
2^40 = 1,099,511,627,776 个2^256 = 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 个

需要说明的是,不同型号受到的影响程度并不一样:本文提到的约 40 位主要针对 Mk2/Mk3,Mk4/Mk5/Q 的估算约为 72 位。

这样一对比,答案就呼之欲出了:用 ColdCard 生成的助记词总共只有 1,099,511,627,776 串。对黑客来说,只要动用高性能计算机一个一个地试,就有机会盗取资产。虽然仍然费力,但这已经不再是人类现阶段无法处理的数量级了。

事情到这里,还不算太糟糕,毕竟 1,099,511,627,776 这个数字也挺大了,叠加网络波动,黑客或许需要试好几年才查到一个有余额的地址。

但非常遗憾的是,ColdCard 的失误还导致连生成这些可能值的计算方法都有迹可循,这大幅降低了破解难度。

软件随机数为什么会被猜中?

这是因为 ColdCard 生成助记词随机数使用的是一个"软件随机数生成器",这类生成器严格意义上来说都是"伪随机",其算法都是有迹可循的。为什么这么说呢?

先想象一下什么是随机。假设我们正在抛一枚硬币,我们一般说硬币正反面朝上的可能性是均等的 50%,随机出现正面或者反面。这是因为我们在抛硬币的时候,硬币在空中翻转,运动轨迹受到多重因素影响,比如:我们抛掷的力度、地球的重力、房间里空调的风力风向、地转偏向力,甚至地壳运动微小的震动等等我们能想到的、甚至想不到的因素。这些因素叠加,导致我们不可能计算硬币在空中的轨迹,从而无法判断结果,所以我们相信抛硬币的结果是"随机"的。

但是"软件随机数生成器"生成随机数的算法是固定的。一般来说,会根据某几个初始条件,经过固定的算法,算出固定的随机数;换言之,我们只需要知道它生成随机数的这几个初始条件,就知道它生成的随机数是什么,也就是助记词。

好巧不巧的是,生成的初始条件,大家一般用的都是以下几个:生成时的时间戳、设备开机的时间戳、设备序列号等等。这意味着黑客只需要推测一下这些数字,就可以设计算法来攻破 ColdCard 生成的助记词。也就是说,黑客根本不需要乱猜,因为助记词的生成方式本身就有规律可循。

硬件随机数生成器到底怎样保证安全?

一切一切的根源,其实是 ColdCard 没有使用"真随机数发生器",也就是 SE 芯片的硬件随机数发生器。就像上面说的,普通软件 PRNG 是一个确定公式:

设备编号 + 时间 + 算法 → 随机数

如果攻击者能枚举设备编号和时间,就能重新计算所有结果。

而真随机数发生器则利用物理现象,例如:

  • 电路热噪声;
  • 振荡器抖动;
  • 晶体管亚稳态;
  • 雪崩噪声;
  • 某些设备中的量子噪声;
  • 宇宙射线导致的随机内存错误。

等等来生成助记词,就像抛硬币的过程中有很多人类无法预测的干扰因素一样。过程变成:

不可预测的物理噪声 → 采样并数字化 → 整理、哈希 → 用于初始化密码学安全 PRNG → 生成助记词

即使攻击者知道设备型号、序列号、启动时间和全部源代码,也无法倒推出当时电路噪声的具体波形。这才是真正可靠的随机性。

衡量随机性的参数——"熵"

什么是熵?

"熵"听起来很复杂,其实可以简单理解成:在答案揭晓之前,一件事究竟有多少种可能。

比如,一枚正常的硬币有正面和反面两种可能。抛一次硬币,就相当于产生了 1 位熵,因为 2^1 = 2。连续抛两次,就有 4 种可能:正正、正反、反正、反反,相当于 2 位熵,因为 2^2 = 4。以此类推,连续抛 256 次,就会有 2^256 种不同的结果,这就相当于产生了 256 位随机性。

但熵的关键,不只是结果看起来杂乱,更重要的是别人不能提前知道结果。如果一枚硬币被做了手脚,每次都会落在正面,那么即使抛 256 次,它产生的熵仍然是 0,因为结果早就可以被预测。

如果连真随机数发生器也不相信呢?

如果你连硬件钱包里的真随机数发生器也不相信,还有一个更加朴素的办法:自己抛硬币,亲手制造随机数。

你可以把正面记为 0,反面记为 1,连续抛 256 次,并把每一次结果记录下来。这样就得到了一串 256 位的二进制数字。然后,在完全离线的环境中,按照 BIP-39 标准为这串数字计算校验码,再把它转换成 24 个英文单词,这就是一套完整的助记词。

抛 256 次硬币 → 记录正面和反面 → 得到 256 位二进制数字 → 按 BIP-39 计算校验码 → 转换成 24 个助记词 → 导入硬件钱包

这里要注意:硬币只能替代"生成随机数"这一步,不能替代硬件钱包。之后的钱包保管、地址生成和交易签名,仍然应该在硬件钱包的隔离环境中完成。联网设备只负责观察和广播交易,不应该接触你的助记词。

不要把真实的硬币结果输入联网网页,也不要凭感觉随便编一串 0 和 1。只有每一次结果都确实来自不可预测的抛掷,这串数字才真正具有随机性。

常见问题

没有。设备本身并未被攻破。固件缺陷导致助记词从一个小得多的取值范围中生成,因此攻击者可以直接暴力穷举猜出助记词,而不需要攻击硬件。

不同型号受影响程度不同。本文讨论的约 40 位随机性主要针对 Mk2 和 Mk3,Mk4、Mk5 和 Q 的估算约为 72 位。确切影响范围请以 Coinkite 官方公告为准。

软件生成器是一套固定算法,输入是时间戳、设备序列号等少数初始条件,任何人只要能猜到这些输入就能重算出它的输出。硬件生成器采集电路热噪声、振荡器抖动等不可预测的物理噪声,无法从公开信息中重算出来。

24 词 BIP-39 助记词背后是一个 256 位随机数,共有 2^256 种可能,约合 10^77,接近可观测宇宙的基本粒子总数。

可以。把正面记为 0、反面记为 1,连续抛 256 次,然后在离线环境中按 BIP-39 计算校验码并转换成 24 个单词。但硬币只能替代生成随机数这一步,钱包保管和交易签名仍应在硬件钱包中完成,且结果绝不能输入联网网页。

使用 OneKey 保护您的加密之旅

View details for 选购 OneKey选购 OneKey

选购 OneKey

全球最先进的硬件钱包。

View details for 下载 App下载 App

下载 App

只需邮箱, 即可快速开始全球资产交易。

View details for OneKey SifuOneKey Sifu

OneKey Sifu

即刻咨询,扫除疑虑。

继续阅读