Introduce
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,国家密码管理局公告(第 21 号)。
SM2算法和RSA算法都是公钥密码算法SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。
SM2 算法密钥位长为 m(m=256)。SM2 算法包涵:系统参数、密钥对生成、数字签名算法(SM2-1)、密钥交换协议(SM2-2)
和加密算法(SM2-3)共五个部分。
算法说明:
算法 | 说明 | 用途 |
---|---|---|
SM2-1 | 椭圆曲线数字签名算法 | 数字签名 |
SM2-2 | 椭圆曲线密钥交换协议 | 密钥协商 |
SM2-3 | 椭圆曲线公钥加密算法 | 数据加密 |
对象标识符:
对象标识符 | 名称 | OID |
---|---|---|
ECC | ECC算法标识 | 1.2.840.10045.2.1 |
SM2 | SM2算法标识 | 1.2.156.10197.1.301 |
SM3withSM2 | SM3的SM2签名 | 1.2.156.10197.1.501 |
SHA1withSM2 | SHA1的SM2签名 | 1.2.156.10197.1.502 |
SHA256withSM2 | SHA256的SM2签名 | 1.2.156.10197.1.503 |
Basic
椭圆曲线算法是什么原理?
上图为方程:的曲线。
- P点为基点;
- 通过P点做切线,交与点 2P点,在2P’点做竖线,交与2P点,2P点即为P点的2倍点;
- 进一步,P点和2P点之间做直线,交与3P’点,在3P’点做竖线,交与3P点,3P点即为P点的3倍点;
- 同理,可以计算出P点的4、5、6、… 倍点;
- 如果给定图上Q点是P的一个倍点,请问Q是P的几倍点呢?
- 直观上理解,正向计算一个倍点是容易的,反向计算一个点是P的几倍点则困难的多。
在椭圆曲线算法中,将倍数d做为私钥,将Q做为公钥。当然,椭圆曲线算法还有更严格的计算过程,相对图示要复杂的多。
SM2算法采用的椭圆曲线方程为:
在SM2算法标准中,通过指定a、b系数,确定了唯一的标准曲线。同时,为了将曲线映射为加密算法,SM2标准中还确定了其它参数,供算法程序使用。
SM2系统参数
SM2 算法使用固定的域,系统参数如下:
- 域的特征p,p是m比特长度的素数;
- 中的两个元素a和b,它们定义曲线E的方程:,a、b满足。
- 基点,(O为无穷远点)。
- 基点G的阶n,n是m比特长度的素数。
说明:
- 、、、、和均为比特长度的大整数,也可以看作m/8字节长度的字符串。
- G可以看作一个有序整数对,也可以看作一个m/4+1字节长度的字符串。
- 无穷远点O是一个理想点,不能用有序整数对(x, y)即仿射坐标表示。
SM2 系统参数作为公共参数,可以在所有的平台和系统之间公开共享。
推荐使用素数域256位椭圆曲线。
椭圆曲线方程:y ^ 2 = x ^ 3 + ax + b。
曲线参数:
p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF
a = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC
b = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93
n = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123
Gx = 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7
Gy = BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0
SM2密钥对生成
SM2的密钥对包括私钥(记为)和公钥(记为),其中为小于的一个随机的正整数,为曲线上的一个非无穷远点且满足(即连续个点“相加”,简称为“点乘”)。
输入参数:
无
输出参数:
:私钥
:公钥
说明:
- 上的两个点“相加”是一个较复杂的运算过程(与普通的整数加法不同),与上的任意点P“相加”结果仍为P,“相加”是一个可结合、可交换的运算。
- ,可以看作一个有序整数对。
SM2 系统参数作为公共参数,可以在所有的平台和系统之间公开共享。
SM2加解密
SM2加密算法
SM2加密同样使用接收方公钥加密,公钥由一个曲线坐标点组成,在X.509证书中的公钥表示为04标记开始的2个32byte的BigInteger,即曲线点P(x,y)。SM2公钥加密算法比RSA相对复杂,加密结果由3个部分组成,SM2加密过程中使用了随机数,因此同样的明文数据每一次加密结果都不一样。SM2加密算法流程如下图所示。
根据国密推荐的SM2椭圆曲线公钥密码算法,首先产生随机数计算出曲线点C1,2个32byte的BigInteger大数,即为SM2加密结果的第1部分。第2部分则是真正的密文,是对明文的加密结果,长度和明文一样。第3部分是杂凑值,用来效验数据。按国密推荐的256位椭圆曲线,明文加密结果比原长度会大96byte。
SM2解密算法
SM2解密算法是加密逆运算。首先需要从密文中取出加密结果的3部分值,然后通过私钥计算出 M'明文值,最后效验数据。SM2解密算法流程如下图所示。
Reference
- h
t - SM2 (国密的一种算法)t p : / / b a i k e . b a i d u . c o m / s u b v i e w / 1 8 7 9 9 9 / 1 4 9 7 0 2 9 9 . h t m - h
t - 金融领域国产密码算法应用介绍t p : / / w w w . c a s h w a y t e c h . c o m / n e w s / i n f o . a s p ? i d = 8 6 1 - h
t - SM2非对称算法加解密t p : / / w w w . j o n l l e n . c o m / j o n l l e n / w o r k / 1 6 4 . a s p x - h
t - SM2国密算法证书解析t p : / / w w w . j o n l l e n . c o m / j o n l l e n / w o r k / 1 7 4 . a s p x - h
t - 可信计算密码支撑平台功能与接口规范t p : / / w w w . o s c c a . g o v . c n / U p F i l e / F i l e 6 4 . P D F - h
t - SM2椭圆曲线公钥密码算法t p : / / w w w . w o s i g n . c o m / S M 2 / S M 2 . h t m - h
t - Standards for Efficient Cryptography Groupt p : / / w w w . s e c g . o r g / - h
t - openssl_1.0.0n_ExSM2t p s : / / g i t h u b . c o m / T h r e e Z h i W a n g / o p e n s s l _ 1 . 0 . 0 n _ E x S M 2