骰子生成助记词安全吗?熵、校验与验证

 / 
3

用骰子生成助记词,安全性取决于你怎么掷、怎么转、怎么验。物理骰子本身是可靠的熵源,但把它变成 BIP39 助记词的过程中,每一步都可能引入错误或偏差。2026 年 Coldcard 硬件钱包的低熵漏洞导致超过 1 亿美元被盗,恰恰是因为设备内部的随机数生成器出了问题,而用足够次数物理骰子自行生成熵的用户避开了这次漏洞。这件事说明骰子方案的价值,也说明"用骰子"不等于"自动安全"。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

先算清楚:你需要掷多少次

BIP39 助记词的熵值要求是:12 词对应 128 位熵,24 词对应 256 位熵。一个六面骰子每次掷出的结果提供 log₂(6) ≈ 2.585 位熵,但前提是骰子公平、每次独立。

按这个上限算,128 位需要至少 50 次掷骰,256 位需要至少 100 次。库币的安全公告在 Coldcard 事件后给出的判断标准是:使用 100 次公平、独立且私密的骰子掷骰生成助记词的用户不被视为有风险,50 次以上"似乎也安全"。这个数字可以作为底线参考,但要注意:50 次只是 128 位的理论下限,实际熵值会因骰子偏差、记录错误、转换过程中的取整而降低。如果你要生成 24 词助记词,按 100 次以上来准备,不要卡着理论值走。

如果你只有普通骰子,没有更精密的熵源,掷 100 次以上是更稳妥的选择。Coldcard 事件后社区讨论中提到的常见做法也是"掷骰子 100 次以上以获得生成 24 词助记词所需的熵值"。

骰子到助记词:偏差与错误发生在哪里

骰子本身是物理过程,不存在算法后门。问题出在转换环节。

一个六面骰子的结果空间是 6^n,而 BIP39 的熵是 2 的整数次幂。两者不能整除,所以任何"直接映射"都会引入偏差或需要拒绝采样。开源工具 analog-seed-entropy 的处理方式是:掷两枚骰子,如果出现双 1 到双 4(共 4 种结果)就重掷,这样 36 种结果中保留 32 种,两次这样处理得到 1024 种,再掷一枚骰子分高低得到 2 倍,最终 2048 种结果对应一个 BIP39 词。这种拒绝采样消除了偏差,代价是你需要多掷一些次数。

如果你用的工具没有做拒绝采样,而是把骰子结果直接当数字用,偏差就可能存在。更隐蔽的问题是记录和输入错误:掷 100 次骰子,手动记录或输入时漏掉一个、写错一个,你的熵值就偏离了预期。iancoleman/bip39 工具的 issue 讨论中曾提到,某些实现里数字 6 的处理方式存在不一致。这不是说那个工具不能用,而是提醒你:转换逻辑必须透明可查,你不能把一个黑盒工具的输出当作唯一依据。

校验:你拿到的助记词是否合法

BIP39 助记词的最后几个词包含校验和。24 词助记词的构造是:256 位熵 + 8 位校验和 = 264 位,分成 24 组 11 位,每组对应词表中的一个词。校验和的作用是检测输入错误,不是检测熵是否安全。

开源工具 Roll2Mnemonic 的 README 里写了一句值得注意的话:"有效的 BIP39 校验和不能证明原始熵是安全的;弱、可预测、被复用或被操纵的熵可以产生一个攻击者能够重现的短语。" 这意味着,即使你掷骰子得到的助记词通过了校验,如果骰子本身有偏差、或者你掷的次数不够,安全性仍然不足。校验和只能告诉你"这串词在格式上是合法的",不能告诉你"这串词背后的随机性足够"。

验证你的骰子方案是否可靠,需要做两件事:第一,用同一个输入(同一串骰子结果)在两个独立的工具里生成助记词,看结果是否一致。如果不一致,说明至少有一个工具的实现有问题。第二,检查你用的工具是否公开了从骰子结果到熵的转换逻辑,而不是只接受"随机性"输入。iancoleman/bip39 和 Coldcard 的 rolls.py 都被社区用来交叉验证骰子到助记词的转换。

冷钱包场景:骰子真正的用武之地

如果你只是在手机 App 里生成一个热钱包,用骰子没有太大意义,因为手机本身的操作系统、输入法、剪贴板都是攻击面。骰子方案的价值在于冷生成:在一台从不联网的设备上(或者完全离线地用纸笔加计算器)完成骰子到助记词的转换,然后把助记词导入硬件钱包或离线签名设备。

Coldcard 事件中,韩国比特币社区避损的原因被分析为"习惯通过掷骰子和掷硬币等实体方式,独立产生助记词所需的熵,绝不依赖供应商提供的随机性"。他们的做法是:掷骰子或硬币 128 到 256 次,用硬件计算器而非手机做二进制转换,对照印刷版 BIP39 词表,只用 SeedSigner 等离线工具计算校验和。

如果你要复制这个流程,关键约束是:生成过程中,助记词不能出现在任何联网设备的屏幕上,不能经过剪贴板,不能拍照。骰子结果本身不需要保密(它只是熵的原料),但转换后的助记词一旦形成,就等同于私钥。

一个可以照做的判断流程

如果你的目标是给硬件钱包生成一个新种子:先确认硬件钱包本身没有已知的熵漏洞(Coldcard 的特定固件版本需要排除)。然后用物理骰子掷 100 次以上,在一台离线设备上用经过交叉验证的工具(比如同一串输入在两个独立实现中结果一致)转换成 24 词助记词。导入硬件钱包后,核对钱包指纹和第一个收款地址,再发一笔小额测试交易。这个流程的每一步都有可核验的节点,不依赖单一设备的"信任我"声明。

如果你只是好奇骰子生成是什么:不需要用真钱去验证。用 iancoleman/bip39 的离线页面或类似工具,输入一串骰子结果,观察它生成的助记词。然后换一个工具输入同样的结果,看是否一致。这个练习能让你理解转换环节的风险,而不涉及真实资产。

如果你的骰子本身来路不明(比如二手骰子、赌场骰子、有明显配重嫌疑),换一套。物理熵的前提是骰子公平,有偏差的骰子会系统性地缩小你的熵空间。你不需要用实验室级别的骰子,但至少要用一套看起来正常、你没有理由怀疑被做过手脚的骰子。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. HTX·Bitcoiners turn to dice throws as self-custody setups are re-evaluated,页面发布或更新日期:2026-08-06;核查日期:2026-10-19。
  2. Digital Today·Coldcard曝低熵漏洞,比特币用户重新审视助记词生成方式,页面发布或更新日期:2026-08-07;核查日期:2026-10-19。
  3. KuCoin·重要安全更新:僅依賴 ColdCard 裝置產生隨機性的使用者,可能面臨一項安全漏洞風險,页面发布或更新日期:2026-07-31;核查日期:2026-10-19。
  4. GitHub·analog-seed-entropy,页面发布或更新日期:2026-08-16;核查日期:2026-10-19。
  5. GitHub·Is Dice6 entropy calculated wrong? · Issue #636 · iancoleman/bip39,页面发布或更新日期:2023-07-06;核查日期:2026-10-19。
  6. Dart packages·MNEMONIC_ENTROPY_BITS_24_WORDS constant,页面发布或更新日期:页面未标明更新日期;核查日期:2026-10-19。
  7. GitHub·Roll2Mnemonic,页面发布或更新日期:2026-08-02;核查日期:2026-10-19。
  8. GitHub·make dice seed generation verifiable outside seedsigner · Issue #104,页面发布或更新日期:2021-10-01;核查日期:2026-10-19。
  9. Gate·韓國比特幣持有者利用擲骰子產生的熵,規避 $130M Coldcard 漏洞,页面发布或更新日期:2026-08-05;核查日期:2026-10-19。
  10. Digital Today·Coldcard hardware wallet flaw shakes trust, renews call to roll the dice,页面发布或更新日期:2026-08-07;核查日期:2026-10-19。