由于Coldcard硬件钱包出现灾难性的低熵漏洞,且该漏洞与7月30日起公开报道的盗窃事件相关,比特币持有者开始重新审视他们对硬件钱包设置的信任假设。
Coldcard设备原本搭载了外观正常的STM32“真随机数生成器”(TRNG),其依赖物理过程生成不可猜测的助记词。
然而,在Coldcard创始人NVK决定重写固件,将原本GPL许可的自由软件模式改为只读模式后,一个严重漏洞似乎被引入。
从2021年3月发布的固件4.0.1版本开始,该设备使用了MicroPython的Yasmarang伪随机数生成器,而不是正确使用STM32硬件随机数生成器。
随机数生成是计算机科学中一个无解的问题,这就是为什么安全、不可猜测的私钥生成始终需要在一定程度上依赖外部物理过程。
该领域的分析师普遍将Yasmarang PRNG的使用描述为预编程的备用方案。然而,Coinkite现在在最近的一条X帖子中对此描述提出了异议。
关于Coldcard被编程为默认使用一种明显不安全的种子生成方法的猜测,也在X上引发了这是否是故意设置后门的讨论。
调查性比特币记者Hodlnaut推测,该漏洞源于粗心的开发实践以及试图通过随机更改来压制错误。
Coinkite估计,Mk2和Mk3设备生成的种子具有40比特的熵,而Mk4、Mk5和Q达到了约70比特。两者都远低于安全12词助记词所需的128比特。
自那以后,攻击者一直成功地对私钥进行暴力破解,窃取了价值超过1亿美元的BTC。一个钱包被发现的可能性取决于是否添加了额外的骰子熵,或者是否使用了BIP-39密码短语和非标准路径。
此后,James O'Beirne建立了一个名为cktripwire的蜜罐地址网站,用于评估攻击者有效扫荡了哪些类型的钱包。
Honeypots tracked by cktripwire.
Coldcard漏洞再次痛苦地印证了社区的核心原则之一:不要信任,要验证。
那些没有依赖不透明的工程手段来生成最安全关键部分的熵,而是通过足够多次掷骰子生成助记词的用户,成功保护了他们的币免受漏洞影响。
掷骰子是一个简单、可见透明的过程,普通用户可以自行审计并直观理解。而验证TRNG则需要详细检查电子设备的物理结构和固件。
尽管有些人将最近的事件作为借口宣称自我托管的终结,但遵循这一最佳实践会让远程攻击者几乎无计可施。
如果助记词是通过物理熵生成的,而不依赖于硬件钱包的安全性,那么钱包生成中唯一真正的单点故障就被消除了。
从种子派生的扩展公钥和接收地址可以通过将其导入其他设备来进行交叉验证。
通过检查两台设备在给定相同未签名交易时是否生成相同的符合RFC 6979的签名,也可以发现通过气隙进行的临时随机数泄露。
因此,安全的熵生成是安全钱包的绝对前提。自Coldcard漏洞公开以来,各种生成熵的方法和建议在X上流传。
最流行的方法是通过应用SHA-256哈希来交叉验证设备将骰子面正确转换为BIP-39助记词的能力。使用超过100次掷骰子就足以生成24词助记词所需的熵。
简单的纸质方法,例如Bitbox发布的表格,将BIP-39助记词空间划分,使得六次掷骰子和一次抛硬币的组合可以直接分配一个助记词,而无需使用电子设备。
更复杂的模板,如codex32骰子去偏工作表,使用冯·诺依曼提取器,可以手动计算,即使在有偏的骰子下也能生成安全的助记词。
掷骰子的替代方案是打印出BIP-39助记词,将它们剪成大小相等的纸条,彻底打乱,然后随机抽取24个词。Seedsticks或Entropia等产品使这一过程更加方便和可靠。
专用硬件如Frostsnap试图以可验证的方式将熵生成分布在多个设备上。
一些用户已经开始设计自己的物理熵设备,其生成助记词的速度几乎与电子硬件一样快。