作者 | 秦晓峰

据security evaluators消息,独立安全评估机构(ISE)近日发布了一份名为Ethercombing的新研究,该研究主要针对以太坊钱包私钥的安全性。

ISE发现,目前在以太坊区块链上有732个私钥由于随机性不高,存在被盗风险。此外,自去年开始,一个名为“Blockchainbandit”黑客组织便通过低安全性的私钥进行盗币活动,一度达到37926个ETH(当时价值5400万美元)。直到今天,该组织仍未停手。

私钥随机性不高

以太坊公钥和地址的生成依赖私钥,有了私钥就能生成公钥和地址,就能够花费对应地址上面的以太币(ETH)。

而私钥本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值:0或者1。所以私钥的总数是将近2^(8*32)=2^256个,破解私钥的概率是1/2^256。

ISE研究员 Adrian Bednarek 表示,虽有理论上还是存在概率,但实际上想要强行破解私钥的是不可能的。即使我们使用的计算资源可以让我们每秒产生100万亿个密钥,也需要大约几年的时间,实际上我们根本没有这样的计算资源。

不过,ISE 却在实验中发现,由于一些生成私钥的钱包软件编码存在错误,导致产生的私钥随机性不高,容易被计算机暴力破解(枚举所有的可能性)。

ISE举例说,本来一个256位的私钥应该是:

  • 0x47579DA2BEA463533DBFAD6FCF8E90876C2FE9760DC1162ACC4059EE37BDDB5C

由于代码存在问题,私钥的完整性在输出时被截断为32位,产生结果如下:

  • 0x0000000000000000000000000000000000000000000000000000000037BDDB5C

对于计算机而言,破解32位的私钥难度远远低于破解256位的私钥难度。

除了钱包编码错误,内存参考问题、内存损坏、随机设备错误、随机种子重复使用、对象混淆、堆栈损坏、输入混淆、熵错误、堆损坏或未检查的预编译编码错误都可能导致私钥不够随机,安全性降低。

ISE 研究人员在实验中发现,目前以太坊区块链上共有732个私钥随机性不强,存在泄漏风险;当前这些私钥仍出于活跃状态,并与链上的49,060笔交易相关联。

为了测试所发现的低安全性私钥,ISE 研究人员向其中一个地址转入了价值 1 美元的ETH,结果几秒钟后这笔 Token 便被转走。

ISE 跟踪发现,Token 最终流向了一个名为“Blockchainbandit”的黑客组织钱包。该组织从2018年1月起便开始盗窃一些安全性较弱的私钥,最高峰时该地址余额达到 37,926 个ETH的余额,当时价值 5400 万美元。直到今天,该组织仍未停手。

以太坊本身没有问题

私钥出现问题,是不是意味着以太坊区块链本身技术存在漏洞?以太坊研究人员胡靖宇向Odaily星球日报表示,目前出现的低安全性私钥,主要是钱包的问题,和以太坊本身没有关系。以太坊核心开发者陳昶吾也认为以太坊本身的算法并没有问题。

陳昶吾补充说,除了随机数,签名过程中要用到的K值也会影响私钥的安全性。“产生签名的过程中会用到一个秘密的K值,目前BTC和ETH都用 RFC6979 产生这个值,这个K值必须随机且唯一。但一些对密码学算法编程不够熟悉的程序员很可能会忽视这些细节,导致私钥外泄。”

在报告最后,ISE也向开发人员和用户给出了建议:

针对开发人员:

  • 使用比较知名的库或特定平台的模块生成随机数;

  • 使用加密安全的伪随机数生成器;

  • 审计源代码和生成的编译代码,以验证随机生成的密钥不会被截断;

  • 使用多个熵源;

  • 利用AMD / Intel提供的NIST兼容硬件随机数生成指令(RDRAND / RDSEED)*

  • 查看有关加密随机数生成的NIST / FIPS指南

  • 审查并使用NIST统计测试套件(NIST SP 800-22)

针对使用钱包的用户:

  • 不要使用可能获取私钥的不可信软件;

  • 私钥应该是完全随机的,因此使用可信的软件和硬件钱包生成私钥;

  • 不要生成基于某种密码的私钥,因为更容易被破解。

此前,私钥总被认为是不可攻破的,但从目前的情况来看,坚固的堡垒却先从内部瓦解。

另外,根据 IBM 研究中心的负责人 Arvind Krishna 所言,量子计算机可分分钟破解如今最强大的安全技术保护的加密敏感数据,包括私钥。