一、引言
在国家的十四个五年规划和2035年远景目标纲要中的第五篇《加快数字化发展 建设数字中国》中第二节中提出培育壮大人工智能、大数据、区块链、云计算、网络安全等新兴数字产业:区块链部分明确要求通过推动区块链的技术创新,进一步为区块链服务平台和金融科技,供应链管理,政务服务等应用方案做好基础服务,并进一步完善管理机制。最新的《“十四五”数字经济发展规划》提到,“构建基于区块链的可信服务网络和应用支撑平台”。作为数字经济时代重要底层技术之一,区块链对推动企业数字化转型,促进产业数字化发展,推进数字中国建设都起着强大支撑作用。当前,政策叠加效应深度释放,我国区块链产业发展驶入“快车道”,已经成为驱动数字经济高质量发展的重要引擎。
签名算法是区块链的重要技术之一,签名算法同时也是区块链安全的重要研究点之一,区块链的地址,公钥,私钥,钱包管理等都和签名算法相关。区块链的交易系统中使用了一个假名,但是如何允许用户和多个机构使用不同的假名在匿名条件下进行交互,且用户和机构之间共谋不能识别出其他用户是否是同一个用户?私钥是证明用户拥有数字资产的唯一凭证,所以私钥的安全性对于区块链来说尤为重要,现有的区块链公链中,有利用多签机制或者阈值签名机制来解决用户部分私钥丢失的问题。区块链中私钥的生成,存储,恢复,销毁等全生命周期的在用户端完成,在保证用户端能抵御私钥的丢失和被盗的风险同时又保证用户对账户中的数字资产拥有完全的控制权。但是在用户端完全控制数字资产和解决私钥丢失问题上没有一个完美的解决办法。下面通过进一步分析签名算法,和大家一起探索适合各种应用场景的区块链如何选择合适的签名算法。
二、区块链地址的生成过程
区块链的所有权是通过私钥、区块链地址和数字签名来实现的。私钥只有用户自己拥有,只存储在用户端,管理用户私钥的软件或者硬件我们一般称他为钱包,钱包并行与区块链网络,钱包的管理如私钥生成,签名过程等都不需要网络连接。钱包的构建不需要任何第三方信任机构,所有权的认证和管理都是基于密码学可证明的安全模型,因此也可以说区块链的信任是建立在密码学的可证明安全基础上的。
以比特币为例,比特币的数字资产存放在和私钥相关的地址上,只有通过此私钥签名的交易才是一个有效的交易,只有有效的交易才会经过节点验证后写入区块中上链。比特币采用的是椭圆区块签名算法,私钥是一个数字,通常随机产生,此处需要注意,需要产生一个熵比较大的随机数推荐采用密码算法中的随机数生成算法,有些钱包设计中采用了一般语言的随机数生成,这样就会很容易被爆破,也就是我们所说的短地址攻击。比特币的地址生成如图所示。
三、Schnorr签名算法和DSA
数字签名由公钥密码发展而来,数字签名能够使验证者相信消息的完整性,签名者的不可伪造性,同时也说明的签名者对签名的不可抵赖性。
- Schnorr签名算法
- DSA签名算法
DSS(Digital Signature Standard)是由美国NIST 1991年公布的一种签名技术,也称为DSA(Digital Signature Algorithm),随后美国政府对其做了一些修改,现已成为一个应用广泛的国际标准。
四、基于椭圆曲线的签名算法
大部分区块链项目使用的是椭圆曲线算法ECDSA(Elliptic Curve Digital Signature Algorithm),使用椭圆曲线离散对数问题构建的签名算法,是对数字签名算法DSA的模拟,只是使用的数学困难问题不同。ECDSA在1998年被ISO接收,1999年成为ANSI标准,并于2000年成为NIST和IEEE标准。椭圆曲线离散对数问题与普通的离散对数问题和大数分解不同,没有亚指数时间的解决方法。
- ECDSA算法
- 区块链的签名算法选择
椭圆曲线签名算法只是给出了一种算法,可是椭圆曲线的参数选择是多样的。一般而言,椭圆曲线被分为两类,“伪随机曲线”和Koblitz曲线,NSA在椭圆曲线签名算法中提出的secp256r1是随机数参数:
这个随机参数来自于一个种子,但是这个种子怎么来的,为何这个种子不是一个单纯的数字?另外根据斯诺登揭露美国国家安全局密码标准的消息中,一个很重要的点是说这个种子是以某种方式精心选择的,NSA知道这条曲线的弱化方法。因此绝大多数区块链都没有选择这条曲线,而是选择了Koblitz曲线,secp256k1(a=0,b=7),如果传闻为真,如果NSA掌握了secp256r1的弱化方法,那么区块链的曲线参数的选择使他们躲过了NSA的陷阱。
- 区块链中签名算法的安全问题
2014年2月24日,Mt. Gox暂停交易并下线。最终,人们发现 Mt. Gox 的基础设施在几年内多次被攻击者利用,他们通过操纵部分交易数据(一种称为交易延展性的特征)慢慢抢劫了其比特币的交易所,这导致了 Mt. Gox 的攻击。这个持续的慢慢抢劫最后具统计超过 744,000 个比特币被盗,当时价值约 3500 万美元,现在价值近 300 亿美元。
那么什么是椭圆曲线ECDSA的延展性,攻击者如何利用ECDSA的延展性进行攻击的呢?我们可以看到上面的椭圆曲线签名算法,整个计算过程中和验证过程中可以在用户签名基础上,消息不变的情况下,可以构造另一个签名(r,-s)这样验证也可以通过。
如下图所示是区块链延展性攻击的节点网络结构。
具体的攻击步骤如下:
- 攻击者启动一批攻击节点包围交易所节点;
- 攻击者发起一笔提现请求,交易所构造交易TX(包含签名)并发送到区块链网络中;
- 攻击者截取TX后不转发TX,而是将交易的签名的(r,s)更改为(r,-s),交易改变为TX’;
- 攻击者把TX’发送到区块链网络中,诚实节点转发TX’到整个区块链网络中,矿工节点验证通过后将交易TX’写入区块链中完成交易,数字资产转入了攻击者账户;
- 交易所查询交易TX,发现没有写入区块,用户提币没有成功,用户在交易所的数字资产还在交易所的账本上,完成攻击;
- 攻击者再次进行提币交易重复上述过程。
经过了大量的安全事件后,比特币改进协议中提出隔离验证,来规避ECDSA签名的交易延展性攻击。现在隔离验证已被比特币主网使用。另外比特币改进协议也有提出适用Schnorr签名算法替代ECDSA,这是因为Schnorr具有线性关系,可以构建区块链签名的特殊需求。
- 国密SM2替代
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,其中包含5个部分,总则、数字签名算法、密钥交换协议、公钥加密算法、参数定义。
- SM2的参数选择
SM2选择的曲线方程和参数如下:
- SM2签名算法
使用上面SM2椭圆曲线公钥密码算法推荐参数,提出了SM2签名算法可满足多种密码应用中的身份鉴别和数据完整性、真实性的安全需求。同时使用了SM3密码杂凑算法,国家密码管理局批准的随机数发生器。具体SM2签名算法如下:
- SM2和ECDSA的应用于区块链的比较
SM2和ECDSA都是使用椭圆曲线的签名算法,其思想来源都是来自于DSA,但是由于算法的设计不同,其特性还是有一些差异,下面对ECDSA和SM2进行比较。
相同点:
- 都是以r,s为签名(来源于DSA的启发)
- 都是随机签名算法(利用了随机数k通过椭圆曲线上的点产生r)
- 安全性在同一个级别
不同点:两者在算法和特征上还是有些许不同的
- 签名的生成r不同;
- 签名生成的s不同
- 签名的hash内容不同
- SM2数字签名增加了合理性检查,检查r+k是否等于n
- SM2数字签名的s具有线性关系,可以构造特殊需求的签名
综合以上分析SM2签名算法与ECDSA算法相比较,虽然安全性在同一个级别上,但是SM2算法具有更好的合理性检查提高了安全性,并且可以更高效的计算。SM2在区块链项目中替代现有的ECDSA,是一个可行的且可以提高区块链安全性的选择。而且由于SM2的签名参数s具有线性关系,可以结合区块链实际应用进行一些特殊需求的签名算法设计,满足区块链特殊的需求。
五、总结
区块链的签名算法是区块链应用和区块链安全的重要研究点之一,通过对区块链的需求和签名算法的了解可以更好的选择适用自身业务需求签名算法,这样在安全性和效率方面都会事半功倍;另外通过对通用密码算法在区块链中的了解使得开发者在国密替代做一个基础。
区块链虽然天然具有匿名性,但是其匿名性是通过假名实现的,可以通过对交易数据的启发式聚类分析,把用户的地址关联起来,这样弱化了区块链的匿名性,如何增强区块链的匿名性?区块链滋生了很多违法活动,因此,区块链的监管问题同时也是一个棘手的问题。如何实现既保护用户的身份隐私又实现交易的不可链接性,同时对监管又友好的区块链交易系统是一个值得深入探讨的问题,下一篇将通过环签名和群签名介绍,进一步讨论其在区块链系统中的应用。
参考文献
- 《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》公布[J];都市快轨交通;2021年02期
- 杨波. 现代密码学 : 第4版[M]. 清华大学出版社, 2017.
- Antonopoulos A M. Mastering Bitcoin: Programming the Open Blockchain. 2017.
- Hankerson D, Hernandez J L, Menezes A. Software Implementation of Elliptic Curve Cryptography over Binary Fields[C]// International Workshop on Cryptographic Hardware & Embedded Systems. Springer, Berlin, Heidelberg, 2000.
- GB/T 32918.2-2016 信息安全技术 SM2椭圆曲线公钥密码算法[S].
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。