SM2椭圆曲线公钥密码算法

 

1      类型


SM2属于非对称加密方式,其实现方式有素域和二元扩域两种方式,我们只介绍素域的情况,二元扩域涉及到多项式运算,理解更困难。

 

2      原理


有限域上的椭圆曲线在点加运算下构成一个有限交换群,且其多倍点运算构成一个单项函数。


2.1     椭圆曲线


椭圆曲线并不是椭圆,之所以成为椭圆曲线,是因为它们与计算椭圆周长的方程相似,也使用三次方程来表示的,一般椭圆曲线的三次方程如下:

 

y ² + axy + by = x ³+ cx ² + dx + e

 

其中a, b, c, d和e是实数,x和y是在实数集上取值,不是所有的椭圆曲线都能用于加密算法,一般情况下,椭圆曲线加密算法取如下方程用于实际应用:

 

y ² = x ³+ ax + b

 

2.2     有限素域

元素个数为素数的有限域称为有限素域,记做F(q),其中q为素数。我们取整数素域F(q),元素包括{0,1,2…p-1,p}。

 

2.3     模n同余

 

假设a mod n ==b mode n, 则成a和b模n同余。

 

2.4     有限域上的椭圆曲线

 

连续的椭圆曲线并不能用于加密,为了将椭圆曲线变成离散的点,我们将椭圆曲线的系数以及变元(即x,y)取值限制在有限域上,执行模p操作,则成此曲线为有限域上的曲线,记做Ep(a,b),根据a和b的取值不同,曲线也就不同,所以Ep(a,b)是一个曲线集合,曲线公式如下:

y ² mod p = (x ³+ ax + b) mod p

 

例如,有整数有限素域为F(23),取a=1,b=1,x=9,y=7,计算结果如下:

 

y ² mod p = (x ³+ x + 1) mod p

49 mod 23 = (729 + 9+ 1) mod 23

3 = 3

 

其中系数和变元均取自有限素域。

 

下图是在F(23)上取值a=1和b=1,即y² mod 23 = (x ³ + x + 1) mod 23的点的坐标,记做E23(1,1):

 

如下表,是曲线中所有的点坐标:

 

 

阿贝尔群,即交换群。

 

2.5     加法


假设椭圆曲线上有三个点P,Q,R在同一直线上,椭圆曲线的加法定义为P+Q+R=O(O是加法中的单位元,类似于实数加法中的0),其几何描述为一条直线上的三个点的和为O,即 P + Q = O - R。

 椭圆曲线多倍点记做P =[k]Q,表示k个Q点相加的结果为P。

 

2.6     椭圆曲线公钥算法加密

 

多倍点记做P=[k]Q,则使用k作为私钥,P作为公钥,对于多倍点运算而言,反向取K得值是数学难题。

 

3      优缺点

 

相比较其他公钥算法,椭圆曲线使用更短的密钥串就能实现比较牢固的加密强度,同时由于密钥串相对较短,加密速度也就相对较快。

 

 

4      应用场景

SM2算法规定了三个应用场景,分别是数字签名,密钥交换和加密解密。

 

4.1     数字签名

数字签名还需要SM3杂凑算法的辅助实现,SM3算法是一种摘要算法。

大致描述如下:

主要采用的方式是签名方对A用户的身份信息和需要进行签名的信息做哈希算法,将生成的hash串与私钥关联。

 验证方则通过公钥信息对签名串进行验证。

 

4.2     密钥交换


 密钥交换实际上是利用公钥和私钥的属性,双方协商密钥的过程,具体参照国密局文档。


4.3     加密解密


加密解密的过程实际上是在密钥交换的基础上进行的(虽然方式不同),最终两方协商可以得到同一个加密密钥,后续进行的实际上是对称加解密的内容,具体请参照国密局文档。

 

5      参考文档

  1. http://kssd.pediy.com/pediy06/pediy6014.htm
  2. 《密码编码学与网络安全:原理与实践》
  3. 国密局sm2算法文档

阅读更多

更多精彩内容