本体技术视点 | ECDSA中的随机数重用会导致什么问题?

2021-07-30 11:34:29 浏览数 (1)

北京时间7月12日凌晨,跨链协议 Anyswap 遭受攻击,损失将近800万美元。据 Anyswap 官方透露(https://anyswap.medium.com/anyswap-multichain-router-v3-exploit-statement-6833f1b7e6fb),此次攻击是由于 Anyswap 多链路由 V3 曾签出了两笔具有相同 值(签名结果的一个分量)的交易,从而被推导出私钥,遭受了损失。今天,我们就来看看为什么能从两个具有相同 值的签名结果中推导出私钥

ECDSA简介

数字签名是区块链技术人员耳熟能详的一种密码算法,它包含密钥生成、签名和验证三个步骤。

  • 密钥生成:该算法的输入是一个安全参数,比如签名长度。该算法的输出是一个公私钥对,其中私钥用来签名,公钥用来验证签名(这里我们省略了公开参数的描述);
  • 签名:该算法的输入是消息和私钥,输出是用该私钥对该消息的签名结果;
  • 验签:该算法的输入是消息和公钥,输出是一个比特,用来指示该签名是否通过验证。

签名的过程是这样的:

得到签名(r,s)后,签名验证的过程是这样的:

为了提高效率,以太坊等区块链系统中采用从签名结果中恢复出公钥,并进行比对验证算法。当然,为了能从签名结果中恢复出公钥,还需要存储额外的信息,我们在这里就不再叙述。

关于 ECDSA 的形式化描述可以在网站:http://www.secg.org/ 上找到。

图源网络

随机数重用

另外,如果两个用户使用了同样的随机数,那么我们可以看到,其实对于某一个用户来说,也可以得到另一个用户的私钥,因为在上述等式中也只有另外一个用户的私钥这一未知变量。但对于其它用户来说,则无法推导出这两个用户任意一个的私钥。

结语

在 ECDSA 中,随机数是一个十分重要的量。对于同一个用户,同一个随机数在不同签名中使用,会使得用户私钥暴露。此次 Anyswap 被攻击事件便是由此而来。

著名的2010年 Sony PS3 事件也是由于随机数重用的问题。除此之外,在 ECDSA 中,如果随机数泄露,也将导致私钥泄露。随机数在密码算法中占据了一个重要地位,我们在应用中应认真对待随机数。

0 人点赞