搜索

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

2021-07-22 16:28:53
358 0 0


引言

本体技术视点 | 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”并备注【技术】可进行技术探讨或加入社群。


热门回帖
热帖推荐
牛头大哥
牛头大哥
管理员 船龄 1.9年
【提问有奖】Neo 从2.0到N3,是版本迭代还是蜕变飞跃?
2020年,我们迎来了“DeFi之夏”;2021年,我们见证了NFT出圈。与此同时,DAO、存储、DID等领域也产生了许多落地应用,让市场逐渐看到了区块链的价值。区块链从早期的炒作阶段到如今的落地盛年,底层基础设施公链也随之不断迭代、升级和创新。除了要支撑大规模交易量外,链上应用对公链的功能特性要求越来越高。为了保证去中心化和安全性,链上治理也成为了当下公链的探索方向。关于Neo:Neo是一个由社区驱动的开源平台。利用区块链技术与数字身份,开发者可以通过智能合约实现资产管理数字化与自动化。Neo致力于通过分布式网络建设下一代互联网基础设施,为区块链技术大规模落地奠定基础,以实现智能经济的宏大愿景。自2016年上线至今,Neo主网已稳定运行超过四年。NeoN3预期于2021年发布,将提供更高吞吐量、更强稳定性与安全性,并带来优化的智能合约系统及功能丰富的基础设施集合,旨在赋能开发者并加速企业级区块链创新。Neo官网:https://neo.org本期嘉宾:王佳超,Neo生态拓展总监毕业于澳大利亚MonashUniversity,曾任埃森哲战略咨询顾问,多次成功创业经历,2017年加入Neo,目前主要负责NEO生态发展相关工作。AMA时间:7月29日,周四,下午3点简而言之,N3版本在原来的基础上做了哪些升级?存储、预言机为、DID放在N3的第一层还是第二层?为什么这样考虑?N3网络上线之后,生态发展的重点方向是哪里?Defi?NFT?还是存储?任何与NEO有关的问题,欢迎来聊!提问有奖:AMA结束后嘉宾将选取“优质提问奖”10名,奖励为每人100元微信现金红包。如何参与AMA?在本主题帖下直接回帖提问即可参与,嘉宾将在活动开始后上线回答,欢迎大家围观讨论!如何进群交流?微信扫下方二维码添加小助手(微信号:ljdwudi5520),回复“AMA”,小助手直接邀请进群,快进群跟小伙伴们一起交流探讨吧!
1 天前 | AMA 86917 93
比特币中本聪聪
比特币中本聪聪
副船长 船龄 2.2年
从1000万两周陪到2万是什么体验
前一段时期我经历了人生最大的考验!这时候我天天上班,对单位非常不满,天天气急败坏,用手打墙,五年从没玩过合约,急功近利赌气玩了一周币币合约,想顺势干到7000万,我做多了。小仓位爆仓了,拿现货去补从1000万陪的就剩2万了!最多519那天赔了650万。519当天手一直发抖多少次心如死灰,多少次感觉醉生梦死,多少次想一觉睡死。这种感觉持续了好长时间,幸好这这1000万是我这四年挣的,也没借高利贷,实际本金只有100万。我媳妇也没当回事,一句没责怪我,说就当买个教训了。给大家晒晒图其中有我玩fil3从5万最多到530万,回调到370万提现的图。最后我搞了50万的子弹,这波子弹我能通过我的经验,在这波牛顶能达到500万最低。最低的!拭目以待。还有我这辈子不会玩合约了!
10 小时前 | 区块链社区 27679 51 0
400刀买的bsv
400刀买的bsv
水手 船龄 1个月
涨得太急了
很明显这只是爆一波空军,马上跌回来了
11 小时前 | 区块链社区 34599 26 0