密码学是区块链的基础,区块链使用了大量的密码算法,包括对称加密、非对称加密、单向散列算法、数字签名等技术。
为了实现密码技术的自主控制,我国也制定了自己的国家保密标准。2020年央行发布的《金融分布式账簿技术安全规范》明确要求国内区块链技术必须支持国家秘密算法。奥群区块链现在已经完成了对国家机密算法的支持,该算法符合中央银行安全条例的所有要求。
本文首先介绍了对称加密、非对称加密和数字签名的基本概念,然后重点介绍了椭圆曲线密码在非对称加密算法中的应用,最后阐述了国家秘密算法在区块链奥群中的应用。针对openssl国家秘密算法签名验证性能低的问题,Ultrain优化了算法实现,实现了3~4倍的性能提升。相关优化代码已提交给openssl Github
(https://github . com/OpenSSL/OpenSSL/issues/11992).
01
对称加密和非对称加密
1.1对称加密
对称加密是指在加密和解密中使用相同密钥的方式。对称密钥有很多别名,如公钥密码、传统密码、私钥密码、共享密钥密码等。图1和图2分别是对称密码加密和解密过程。加密和解密使用同一个密钥,所以称为对称加密。
图1。对称密码加密
图2。对称加密解密
1.2不对称加密
不对称加密在加密和解密中使用不同的密钥,也称为公钥加密。它们通常是一对密钥:公钥和私钥。用公钥加密的密文可以用私钥解密。用私钥加密的密文可以用公钥解密。公钥是从私钥派生的,并且是公共的。非对称加密解决了对称加密过程中加密密钥的分配问题。一般公钥用于加密,私钥用于解密。私钥用于加密时,本质上是数字签名,即用公钥解密可以验证信息确实是私钥加密的结果。目前,公钥密码主要有以下几种:
RSA(Ron Rivest, Adi Shamir和Leonard Adleman的姓氏的首字母组成),该算法利用大质因数分解的困难度。EIGamal,由Taher EIGamal设计,与RSA不同,它是利用mod N下求离散对数的困难度。Rabin,由M.O.Rabin设计的公钥算法。Rabin方式求平方根的困难度椭圆曲线密码(Elliptic Curve Cryptography, ECC),今天,我们重点介绍密码算法,它是通过将椭圆曲线上的一个特定点相乘来实现的。它利用了这个乘法算法的逆运算非常困难的事实。
公钥算法比对称加密算法慢,所以数据加密采用对称加密算法,而公钥密码算法更多用于数字签名场景。
1.3数字签名
一天,爱丽丝给鲍勃发了一封电子邮件:“嗨,鲍勃,给我打100万元。账号是6214 6576 8789 8987。帐户名是爱丽丝”。在现实生活中,鲍勃可能会打电话给爱丽丝,确认邮件是否是伪造的;还要确认内容是否被篡改,防止收款账号和金额被恶意修改;当然也有鲍勃给爱丽丝钱的场景,但是爱丽丝否认发了这封邮件。
能够防止伪造、篡改和否认等上述威胁的技术是上述数字签名。通常消息比较长,我们只签消息的哈希值,所以爱丽丝的邮件流程如下:
1.Alice使用单向哈希函数计算邮件内容的哈希值;
2.爱丽丝用私钥对哈希值进行加密,得到的密文就是爱丽丝在这个哈希值上的签名。由于只有爱丽丝持有自己的私钥,所以除了爱丽丝本人,没有人能生成同样的密文,签名爱丽丝也不能否认;
3.爱丽丝将消息和签名发送给鲍勃;;
4.鲍勃用爱丽丝的公钥将收到的签名解密成哈希值;
5.Bob将4中得到的哈希值与Alice直接发送的消息的哈希值进行比较。如果一致,则签名验证成功,否则验证失败。
图3。数字签名和签名验证
02
椭圆曲线加密算法详解
以上,我们了解了对称加密和非对称加密的基本概念。在这一部分,我们主要讨论椭圆曲线技术在非对称加密算法中的数字签名。
基本概念2.1.1阿贝尔群
在数学中,群是由集合和二元运算+组成的代数结构,满足以下条件:
1.结束。集合中的两个数进行二进制运算,结果仍然在集合中。
2.组合。a+b+c = a+(b+c)
3.单位元。有单位元素0,所以a+0 = 0+a = a。
4.逆元素。每个元素都有一个相反的数字。对于任何A,必须有B,这样a+b=0
5.交换法。a+b+c = a+c+b
2.1.2椭圆曲线方程
图4。椭圆曲线[1]
在密码学中,素数域GFp中定义的椭圆曲线方程为:
E: y2 = x3+ax+b,其中a,b∈GFp和(4a3+27b2) mod p!= 0
除了p,a,b定义曲线外,通常还需要x,y,n来定义一条椭圆曲线。因此,描述有限域上的椭圆曲线,有6个变量:T = (p,a,b,x,y,n)。
P-素数域的点数,P越大越安全,但随着计算量的增加。
a,b曲线系数
x,y-G点的x,y轴坐标
n-是素数,是G点的阶。在椭圆曲线上的一个点p处,存在最小的正整数,使得NP = 0∩(原点或无穷远点,下面的无穷远点用0表示),那么n就称为p的阶;如果n不存在,我们说p是无穷大。在素数域上,椭圆曲线的所有点的阶都存在。
2.1.3椭圆曲线上的点运算
素域上椭圆曲线上的点也是阿贝尔群。单位元素是无穷远点0。椭圆曲线上p点的逆元是x轴对称的点。
P和Q分别是素域GFp上椭圆曲线的两点,它们的连线在第三点R与椭圆曲线相交(见图5中的情况1),P+Q+R = 0有一个无穷远点。有几种特殊情况,即下图中的2、3、4。第二种情况,直线与Q相切,可以认为Q和Q在P点与椭圆曲线相连相交,即Q+Q+P = 0;;第三个P、Q点平行于y轴,因为两条平行线在无穷远处相交,所以有P+Q+0 = 0;第四种情况,P和P是连通的,在无穷远处相交。
图5。椭圆曲线运算[1]
根据以上情况,我们得出以下结论:
Q+Q+P = 0表示Q+Q = -P,(Q+Q)+(Q+Q) = (-P)+(-P),即以P -P的对称点为切点,以此类推,可以快速得到2n*Q个点,n∈0,+∞。用椭圆曲线加密时,私钥是一个大整数,公钥是椭圆曲线上的点G和私钥的乘积。我们通过私钥的二进制表示来快速计算公钥。
2.2算法应用
椭圆曲线主要用于数字签名。以下是实现数字签名和签名验证的数学计算过程。
2.2.1数字签名和签名验证
数字签名主要需要消息m的哈希值(抽象)h和私钥kA生成最终结果{r,s };签名验证主要使用公钥p和消息摘要h,以下是签名生成和签名验证的计算过程。
生成签名,即计算r和s的过程私钥为大数kA,公钥为私钥与G点相乘的点,P = kAG生成随机数小k,计算与基点的乘积K=kG,K点的x轴坐标Kx对椭圆曲线阶n的模Kx(mod n)为r,即r = Kx (mod n)计算k基于曲线阶的乘法逆元k-1(mod n)r已经在第2步中生成,s=k-1(h+kAr)(mod n)签名验证计算s基于椭圆曲线阶n的逆元s-1计算u1 = hs-1计算u2 = rs-1计算点Q=u1G+u2*P取点Q的x轴坐标Qx,若Qx等于r,即签名过程中K点的x轴坐标Kx,则验证通过。证明为什么在验证签名过程中有这个特性?根据签名计算可知,s=k-1(h+kAr)(mod n),两边乘k有sk=(h+kAr)(mod n)。点Q=u1G+u2*P,又P=KAG,有Q=u1G+u2KAG把u1和u2代入,Q=hs-1G+rs-1KAG=(h+rkA)s-1G把步1公式代入步骤3中,Q=sk*s-1G = kG,所以,假如{r,s}, h正确,点K和点P有相同的x轴坐标 2.2.2 椭圆曲线与RSA技术对比优势之前我们讲过非对称密码体制RSA,State Secret推荐椭圆曲线加密,因为椭圆曲线比RSA有一定的优势:
更安全。椭圆曲线基于离散对数困难度,计算复杂度是指数级的,求解难度大。而RSA算法是大质因数分解困难度,计算复杂度是亚指数级的。更短的密钥。同等安全程度要求下,椭圆曲线算法比其他公钥算法需要的密钥长度小很多。128bit椭圆曲线算法拥有1024bit RSA算法相同的安全程度。 2.3 常用几种椭圆曲线 secp256k1. 在比特币和以太坊网络中,用的是secp256k1,p是256位的素数,k代表Koblitz。a=0,b=7。曲线方程即y2=x3+7。Koblitz椭圆曲线具有一些特殊属性,可以更有效地实现组操作。secp256r1. secp256k1的姊妹曲线。p也是256位的素数,但值和secp256k1曲线是不一样的,r代表随机。"随机"选择的参数更安全,然而,有些人怀疑随机系数可能已经被选择来提供后门。因此,比特币网络并没有选择它,而是选择了更高效的secp256k1。SM2曲线。SM2是基于前人对ECC研究的基础上,中国推荐的标准曲线。GB/T 35276-2017定义了SM2算法的具体实现。03
国家秘密算法在Ultrain中的应用
除了SM2椭圆曲线,区块链Ultrain还应用sm3和sm4来支持国家秘密算法对。
SM3 散列算法,生成256bit的散列值,主要用于替换SHA256算法。SM4 对称加密算法,Ultrain钱包公私钥加密用SM4取代了aes128。 3.1 国密算法实现详解上面,我们解释了椭圆曲线的原理,而SM2曲线也是基于它,但它也有自己的特点:
3 . 1 . 1 SM2氢值的计算
在secp256k1中,h是报文的哈希值,而在SM2,h值的计算比较复杂,需要分两步计算:
1.通过sm3算法计算z值:
z = SM3(ENTL | | ID | | a | | b | | xG | | yG | | Xa | | Ya)
标识:用户标识的字符串
用两个字节表示的标识的位长
a、b:曲线参数
XG,yg:g点坐标的x,y轴
XA,yA:公钥坐标的x轴和y轴
2.使用Z和要签名的消息,计算哈希值h到sm3,其中h=SM3(Z||M)
3.2国家秘密算法优化3.2.1性能问题3.2.1 openssl SM2曲线
我们开发了基于openssl的SM2实现,但是发现签名和验证的速度非常慢。在Macbook Pro上,每10秒签名22496次,每10秒验证24374次。到EC_POINT_mul的位置比较慢。看openssl的源代码,并没有预先缓存2n*G,n∈n/0,256这类点(私钥256位长)。比如私钥二进制是1000 1100,它的公钥是27*G+23*G+22*G,2*G,22*G,23*G...2256*G都是已知的,所以只需要椭圆曲线上三点的+运算,不需要每次重新计算。另外,一些核心功能需要编译,优化后性能提升3-4倍,如下表所示。
表1 .性能优化前后的比较
我们已经向openssl Github提交了相应的优化代码。
图6。优化代码提交到openssl Github
3.2.2 SM2签名和消息不能恢复公钥
在secp256k1中,我们可以根据签名{r,s}和消息恢复公钥,但是SM2不能通过签名和消息恢复公钥,因为我们在计算SM2的h值的过程中使用了公钥的坐标,所以我们必须知道公钥,这与只有签名和消息恢复公钥相矛盾。因为SM2不能通过签名和消息恢复公钥,所以在交易验证过程中,我们总是取出公钥进行验证。但是,在我们的系统中,一个账户可以有多个公钥,因此需要遍历账户的公钥来验证交易,这导致多个公钥账户的交易执行性能较低。幸运的是,我们统计系统中99%的账户只有一对公钥和私钥,所以理论上不会影响系统的整体性能。
04
结论
本文首先介绍了对称加密和非对称加密的基本概念,然后详细介绍了非对称加密技术中的椭圆曲线加密技术。最后阐述了区块链对国家秘密算法的支持,对椭圆曲线加密的理解需要较高的数学基础。区块链的分散信任是基于密码学的,而密码学是基于数学的。因此,在数学中,我们信任。
参考文献:
[1].https://encyclopedia.thefreedictionary.com/elliptic+curve
1.《阿贝尔群 技术科普 | 国密算法在Ultrain区块链中的运用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《阿贝尔群 技术科普 | 国密算法在Ultrain区块链中的运用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1113046.html