2011年至2015年期间生成的加密货币钱包容易受到攻击,该攻击允许威胁者使用暴力破解方法来恢复访问资金的密码。Unciphered的研究人员估计,数以百万计的钱包——其中可能有数亿美元——仍然容易受到攻击。
这个问题与BitcoinJS中一个不再使用的随机化函数有关,BitcoinJS是一个JavaScript库,用于为Web和NodeJS平台构建比特币和其他加密货币应用程序。
一些使用了有漏洞的BitcoinJS库的项目——包括BrainWallet、CoinPunk和QuickCoin——已经不再存在。但其他几个如Blockchain.com、Bitgo、Dogechain.info和Blocktrail仍在活跃。
“Randstorm”漏洞
BitcoinJS中基于开放源代码的脆弱功能,加上当时主流浏览器中存在的伪随机数生成器的弱点,导致为加密钱包生成的密钥不够随机,无法抵御猜测攻击。
Unciphered是一家帮助个人和组织恢复被锁定的加密货币钱包的初创公司,该公司的研究人员在2022年1月帮助一名这样的客户时发现了这个问题。这个人雇佣了Unciphered来帮助他尝试并恢复他2014年在Blockchain.info(现在的Blocking.com)上创建的比特币钱包的访问权限,但他丢失了密码。
Unciphered恢复密码的努力失败,但在寻找检索方法的过程中,该公司的研究人员发现了BitcoinJS漏洞,此后他们将其命名为“Randstorm”。在22个月以来的发现,研究人员一直在与Blockchain.com和其他纳入脆弱的BitcoinJS功能通知受影响的用户有关的威胁。
该公司指出:“我们一直在与多个实体协调披露,因此,数以百万计的用户已经得到了提醒,”Unciphered在本周的一篇博客文章中说。如果个人可能在受影响的钱包中持有资产,则应将其移动到使用可信软件创建的新生成的钱包中”。
Cryptowallet错误是一个先前已知的问题
据Unciphered称,该公司并不是第一家发现BitcoinJS漏洞的公司。早在2018年,一名代号为”氯胺酮”的安全研究人员报告说,在SecureRandom()中发现了多个漏洞,该函数是BitcoinJS中的函数,是问题的根源。研究人员警告说,由于SecureRandom()函数没有启用加密密钥材料所需的随机化程度,多个加密货币产品处于攻击的风险中。
“熵的收集和(随机数发生器)本身都有缺陷,关键材料可以由第三方以中等复杂度恢复,”研究人员警告说。使问题更加复杂的是,当时的主流Web浏览器也不具备生成密码学上很强的随机数的功能,而现在的所有现代浏览器都具有这种功能。
Unciphered说:”比特币私钥应该具有256位的熵;不幸的是,由易受的BitcoinJS(或相关项目)生成的受影响密钥通常使用比所需更少的熵。”本文中的熵指的是用于生成密钥的随机信息位,例如鼠标移动和键盘点击。一般来说,使用的熵位数越大,密钥随机化的程度就越大。
熵不足使加密钱包易受
Unciphered表示,由于该漏洞,其研究人员能够成功恢复加密钱包的密钥,这些钱包生成时的熵要小得多——通常为48位。该公司表示,最容易受到攻击的钱包是那些已经在2012年3月之前产生的。从那时到2015年,基于易受的BitcoinJS库的钱包包含了更多的熵,使它们更难被破解,即使仍然是易受的。
尽管如此,任何受影响钱包的用户都需要过渡到新的选项。
Unciphered说:“这个漏洞已经存在于用该软件创建的钱包中,除非资金被转移到用新软件创建的新钱包中,否则它将永远存在。”“我们所能做的就是试图找出那些在过去活跃于创建钱包的公司,提醒他们注意风险,并要求他们提醒那些他们仍有联系信息的客户。”