本节讲了SM2算法的推荐参数和加解密过程, 可以看出加密过程跟secp256k1不同点
最近又有不少新关注的朋友,建议从前往后阅读,学习曲线相对平滑。大牛除外 !
上一节讲了secp256k1公钥恢复实现,从本节起介绍下我们国家推出的国密标准算法:sm2.
国内从事区块链研发的项目出于合规的要求,尤其是联盟链项目,多数会采用国密标准。国内标准是一套体系,不仅包括加密算法,还有摘要算法,密钥交换等。由于前面讲了椭圆曲线的原理和secp256k1实例, 现在来看SM2算法就比较容易了。
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。
随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,这一点在RSA安全性文章中说过。我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。
SM2椭圆曲线方程:y2≡x3+as+b mod p
下面是具体推荐参数信息:
素数p:
FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
系数a:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
系数b:
28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
基点G=G(x,y),其阶为n。
坐标Gx:32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7
坐标Gy:BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0
阶n :FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123
h: 1
这个角度,可以看到与secp256k1的区别是,使用的参数不同(secp256k1参数),但方程式一致。
加密过程:
符号设定: 设消息为比特串M ,klen 为 M 的比特长度, PB 接收者公钥
作为加密者的用户 A 应实现以下运算步骤:
注意步骤3中h=1,所以也可以省略。3中的结果检查可以和2一起做。流程图表示如下:
图中省略步骤3.
解密者用户B对密文C做如下运算步骤:设klen为密文中 C2 的比特长度
从C中取出 C1,将C1转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,
计算 S=[h]C1 ,如果S是无穷远点,出错退出;
计算椭圆曲线点 dB∗C1=(x2,y2) (h=1,可以直接这么写,严格来说是 dB∗S=(x2,y2));
计算 t=KDF(x2∣y2,klen),若t为全0比特串,则报错并退出;
从C中取出比特串 C2,计算 M′=C2⨁t;
计算 u=Hash(x2∣M′∣y2),从C中取出比特串C3,若 u!=C3 ,则报错退出;
得到明文M′。
流程图如下:
为什么这样解密可得到原文?
用户A持有B 的公钥 PB=dB∗G,用户 B 持有私钥dB
关键是证明解密第二步得到的(x2,y2)等于加密过程步骤4 ,
这样后面算出来的t也相等,进而 M′=C2⨁t=M⨁t⨁t=M
那么 (x2,y2)是否相等呢?
(x2,y2)=dB∗C1 ,而 C1=k∗G,则可以推导:
dB∗C1=dB∗k∗G=k∗PB
还有,显然u==C3 。
本节讲了SM2算法的推荐参数和加解密过程, 可以看出加密过程跟secp256k1不同点。这个过程中用到了KDF(key derive function)下次再说。
下一篇继续说SM2的签名过程。
欢迎关注公众号:blocksight
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!