LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 本体技术视点|绝招出击巧妙规避随机数重用问题

本体技术视点|绝招出击巧妙规避随机数重用问题

2021-07-22 本体Ontology 来源:区块链网络

本体技术视点 | 绝招出击,巧妙规避随机数重用问题

本体Ontology

2021-07-22 16:27

删除

引言

在本体技术视点 | ECDSA中的随机数重用会导致什么问题?中,我们强调了随机数重用的危害。熵不足是引起随机数重复的原因之一,但更多时候是由于不良工程实现引起的问题。Sony?的 PS3 事件如此,此次?Anyswap?被攻击的原因也是如此。那么,我们是否可以在工程实现中规避随机数重用这样一个问题呢?本次技术视点将接着上次的话题,和大家一起了解确定性?ECDSA 签名算法。

02

随机数的重要性

我们之前的内容屡次提到随机数的重要性。粗略地来看,无论对于签名算法和加密算法,随机数可以看作消息发送方引入的保护待发送消息隐私性等的因子,让攻击者无法从多个消息中推导出有效信息,从而保证无论是签名算法还是加密算法能达到它们所标称的安全特性。

图源网络

在 ECDSA 签名算法中,随机数的重要性也不言而喻:

首先,随机数不能泄漏,泄漏的随机数可以使攻击者从签名结果中推导出签名者私钥;

其次,同一签名者不同签名时随机数不能重用,否则也可以使攻击者从签名结果中推导出签名者私钥;

最后,不同签名者之间也不能重用随机数,否则其中任意一个签名者都能推导出其它签名者的私钥。

03

确定性ECDSA签名算法

在现代密码学应用和区块链实践开发中,产生随机数的熵一般都足够,主要问题都是由于不良实现引起。正因为看到这样一个问题,IETF?在2013年针对 ECDSA 算法,发布了一个确定性签名算法版本,指导如何产生随机数,以规避在工程实现中可能产生的随机数问题。这就是我们在之前技术视点中提到的?RFC 6979。

在讲述确定性 ECDA 签名算法前,我们先简单介绍一个密码学原语:消息认证码(Message Authentication Code, MAC)。我们知道数字签名是非对称密码体制中用来保证消息完整性(消息认证)和不可抵赖性(实体认证)等的工具,而消息认证码就是对称密码体制中用来保证消息完整性的工具。MAC?的基本思想是通信双方 Alice 和 Blob?共享一个密钥,消息发送方 Alice 利用私钥对消息生成消息认证码,并将其和消息一起发送给接收方 Bob。Bob 收到后,利用其手中的密钥根据消息重新计算消息认证码并和 Alice 发送过来的消息认证码进行比对,匹配成功的话则认为消息在传递过程中没有被篡改。

图源网络

哈希函数可以用来构造 MAC 方案,这样的方案我们一般称为?HMAC(Hash-based MAC)。在构造确定性 ECDSA 签名算法中,就用到了 HMAC。假定 HMAC 方案中用到的密钥为 k ,那么我们一般用 HNACk 来表示。

在确定性 ECDSA 算法中,随机数??不再随机产生,而是确定产生。其余过程和普通 ECDSA 算法相同。为了保证安全性,在对不同消息签名时,需要用到不同的随机数,即保证对于不同的消息,产生的随机数不同。同时,方案也不能让外部攻击者产生出签名者用到的随机数。

基于这些认识,RFC 6979?利用 HMAC 算法,使用消息和私钥来共同产生随机数。这其实是一个利用 HMAC 来构造确定性随机比特发生器(Deterministic Random Bit Generator,DRBG)的方法。我们假定 ECDSA 签名中消息??已经经过哈希算法的处理,即 m = h(m1) ,其中 m1 为原始消息,另外,x? 是签名者私钥。随机数产生的过程有如下几步:

图源网络

我们在上述的描述中省略了一些实现过程中的转换,比如数值到字符串的转换等。在实现中,RFC 6979也提到了一些变种,比如利用额外的私密数据代替私钥,在上述第三步中引入额外的数据(比如某个单调递增的量)来使得即使同一消息的签名结果也不同。

04

结语

确定性 ECDSA?算法是规避随机数重用的方法,Bitcoin?等的实现中也采用了确定性 ECDSA 算法。但确定性 ECDSA 算法也可能遭受故障分析等侧信道分析攻击,在?HMAC 私钥计算中引入单调递增的量等来使得即使同一消息的签名结果也不同的作法是缓解这种攻击等方法。在?Anyswap?中,由于采用了 Gennaro 和 Goldfeder 在2020年提出的门限 ECDSA?方法,不太适用 RFC 6979。但我们看到有一些基于多方安全计算的伪随机数生成器(PRG)和伪随机算法(PRF)等出现,这可能适用于门限 ECDSA。有理由相信,我们会看到更多更有性能的算法出现在区块链中,保证区块链的安全。

如有任何问题,可通过 research@ont.io 联络我们。

添加“ontology_2020”并备注【技术】可进行技术探讨或加入社群。

—-

编译者/作者:本体Ontology

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...