目录
1. 摘要
SM2椭圆曲线公钥密码算法(elliptic curve cryptography,ECC),简称 SM2算法,是我国公钥密码算法标准(2010年12月首次公开发布,2012年成为中国商用密码标准,2016年成为中国国家密码标准),本文详细描述了SM2算法的主要内容,包括数字签名算法、密钥交换协议和公钥加密算法。
2. SM2系统参数
SM2系统参数为有限域上的椭圆曲线及相关参数,包括:有限域的规模;定义椭圆曲线方程()的2个元素;上的基点,和是中的2个元素;的阶及其他可选项(如的余因子等)。
3. SM2数字签名算法
作为签名者的用户A的密钥对包括私钥和公钥,用户A具有位长的标识,记是整数转换而来的数据,签名者和验证者都用SM3密码杂凑算法计算A的杂凑值。
3.1 数字签名生成算法
签名者用其私钥生成消息的数字签名,具体步骤如下:
(1)计算,其中为A的杂凑值;
(2)计算,并将转换为整数,其中为密码杂凑函数;
(3)生成随机数,其中为椭圆曲线基点的阶;
(4)计算椭圆曲线上的点,并将转换为整数;
(5)计算,若或则返回步骤(3);
(6)计算,若则返回步骤(3);
(7)将,转换为字节串,即为消息的签名。
3.2 数字签名验证算法
用和表示验证者B接收到的A的消息及签名,签名验证步骤如下:
(1)检验是否成立,若不成立则验证不通过;
(2)检验是否成立,若不成立则验证不通过;
(3)计算,其中为A的杂凑值;
(4)计算,并将转换为整数,其中为密码杂凑函数;
(5)将,转换为整数,计算,若,验证不通过;
(6)计算椭圆曲线上的点;
(7)将转换为整数,计算,检验是否成立,若成立则验证通过;否则验证不通过。
4. SM2密钥交换协议
用户A和B进行密钥协商,用户A的密钥对包括其私钥和公钥,用户B的密钥对包括其私钥和公钥;用户A具有位长的标识,记是由整数转换而来的数据,用户B具有位长的标识,记是由整数转换而来的数据;A和B都用SM3密码杂凑算法计算双方的杂凑值、。
4.1. 密钥派生函数
SM2密钥交换协议中使用的密钥派生函数的输入为比特串(共享的秘密)、整数(输出的密钥数据位长),输出位长为的密钥数据比特串,具体如下:
(1)初始化1个由32数据构成的计数器;
(2)计算,,为密码杂凑函数;
(3)计算,若的值为整数,则,否则为最左边的比特数据;
(4),即为根据共享秘密派生出的密钥数据。
4.2 密钥交换协议
记。
- 用户A
(1)生成随机数;
(2)计算;
(3)将发送给用户B。
- 用户B
(1)生成随机数;
(2)计算;
(3)从中提取出元素,将其转换为整数,计算;
(4)计算;
(5)验证是否满足椭圆曲线方程,若不满足则协商失败;否则从中提取出元素,将其转换为整数,计算;
(6)计算,若为无穷远点则协商失败;否则将、转换为比特串;
(7)计算;
(8)(选项)将的坐标、和的坐标、转换为比特串,计算;
(9)将将,(选项)发送给用户A。
- 用户A
(4)从中提取出元素,将其转换为整数,计算;
(5)计算;
(6)验证是否满足椭圆曲线方程,若不满足则协商失败;否则从中提取出元素,将其转换为整数,计算;
(7)计算,若为无穷远点则协商失败;否则将、转换为比特串;
(8)计算;
(9)(选项)将的坐标、和的坐标、转换为比特串,计算,检验是否成立,若等式不成立,则从B到A的密钥确认失败;
(10)(选项)计算,并将发送给用户B。
- 用户B
(10)(选项)计算,检验是否成立,若等式不成立,则从A到B的密钥确认失败。
5. SM2公钥加密算法
设待加密消息的位长为,A为加密者,B为解密者。
5.1 加密算法
(1)生成随机数;
(2)计算,将转换为比特串;
(3)计算,若为无穷远点,则报错并退出;
(4)计算,将坐标、转换为比特串;
(5)计算,若为全0比特串,则返回步骤(1);
(6)计算;
(7)计算;
(8)输出密文。
5.2 解密算法
设用户B接收到的数据为。
(1)从中提取出比特串,将转换为椭圆曲线上的点,验证是否满足椭圆曲线方程,若不满足,则报错并退出;
(2)计算,若为无穷远点,则报错并退出;
(3)计算,将坐标、转换为比特串;
(4)计算,若为全0比特串,则报错并退出;
(5)从中提取比特串,计算;
(6)计算,从中提取比特串,若则报错并退出;
(7)输出明文。
6. 参考文献
[1]汪朝晖,张振峰. SM2椭圆曲线公钥密码算法综述 [J]. 信息安全研究, 2016, 2 (11): 972-982.