Coldcard 黑客事件后,骰子熵可能成为新的黄金标准

鉴于 Coldcard 硬件钱包中的灾难性低熵错误(与 7 月 30 日开始公开观察到的盗窃事件有关),比特币持有者已开始重新评估其硬件钱包设置中的信任假设。

Coldcard 的熵缺陷是如何运作的

Coldcard 设备配备了功能明显的 STM32“真随机数生成器”(TRNG),它依靠物理过程来生成不可猜测的种子短语。

然而,在 Coldcard 创建者 NVK 决定启动固件重写以从 GPL 许可的自由软件模型切换到只读模型后,似乎引入了一个严重的漏洞。

从 2021 年 3 月发布的固件版本 4.0.1 开始,该设备使用 MicroPython 的 Yasmarang PRNG,而不是正确使用 STM32 硬件 RNG。

随机数生成是计算机科学中一个无法解决的问题,这就是为什么安全、不可猜测的私钥的生成总是在一定程度上依赖于外部物理过程的原因。

Yasmarang PRNG 的使用被该领域的分析师广泛描述为预编程的后备方案。然而,Coinkite 现在在最近的 X 帖子中对这种描述提出了质疑:

关于 Coldcards 被编程默认为一种明显不安全的种子生成方法的猜想也引发了 X 的猜测,即这是否是故意放置的后门。

比特币调查记者 Hodlnaut 推测,该错误源于粗心的开发实践以及通过随机更改来抑制错误的努力。

Coinkite 估计 Mk2 和 Mk3 设备生成的种子具有 40 位熵,而 Mk4、Mk5 和 Q 则达到约 70 位。两者都远远低于安全 12 字种子短语所需的 128 位。

从那时起,攻击者就成功地暴力破解了私钥,窃取了价值超过 1 亿美元的 BTC。找到钱包的可能性取决于是否添加了额外的骰子熵,或者是否使用了 BIP-39 密码和非标准路径。

从那时起,James O’Beirne 建立了一个名为 cktripwire 的蜜罐地址网站,以估计攻击者正在有效扫荡哪些类型的钱包。

由 cktripwire 跟踪的蜜罐。资料来源:cktripwire.com

物理熵如何拯救一些钱包

Coldcard 漏洞再次痛苦地让我们明白了社区的核心原则之一:不要信任,要验证。

那些不依赖不透明的工程来为过程中最安全的关键部分生成熵,而是使用了足够数量的骰子投掷的用户,从漏洞中拯救了他们的硬币。

掷骰子是一个简单、明显透明的过程,普通用户可以自我审核并直观地理解。另一方面,验证 TRNG 需要对电子设备进行详细的物理检查并检查固件。

虽然有些人以最近发生的事件为借口,宣布自我监管结束,但遵循这一最佳实践,远程攻击者几乎没有什么选择。

如果种子短语是通过物理熵生成的,而不依赖于硬件钱包的安全性,那么钱包生成中唯一真正的单点故障就被消除了。

从种子导出的 xpub 和接收地址可以通过将其导入其他设备来交叉检查。

通过检查两个设备在给定相同的未签名交易时是否生成相同的符合 RFC 6979 的签名,也可以捕获通过气隙进行的 Nonce 泄露。

因此,安全的熵生成是安全钱包的绝对先决条件。自从 Coldcard 漏洞被公开以来,生成它的各种方法和提案一直在 X 上流传。

最流行的方法是交叉检查设备通过应用 SHA-265 哈希将模具面正确转换为 BIP-39 种子短语的能力。使用 100 次以上的骰子投掷就足以生成 24 字种子的熵。

简单的纸质方法,例如 Bitbox 发布的表格,对 BIP-39 种子词的空间进行划分,以便六个掷骰子和投硬币的组合可以直接分配种子词,而无需使用电子设备。

更复杂的模板(例如 codex32 骰子去偏工作表)使用范诺依曼提取器,即使在骰子有偏差的情况下,也可以手动计算该提取器来生成安全的种子短语。

掷骰子的另一种方法是打印出 BIP-39 种子词,将它们切成相同大小的小纸片,彻底洗牌,然后随机抽取 24 个单词。 Seedsticks 或 Entropia 等产品使这一过程变得更加方便和强大。

Frostsnap 等专用硬件尝试在设备之间可验证地分配熵生成。

一些用户已经开始设计自己的物理熵设备,该设备可以像电子硬件一样快速地生成助记词。