SM2密码算法数据结构已经在GM/T 0009规范中详细定义了,为巩固加深理解,本节内容为学习笔记,仅摘抄记录。
1.1 SM2公钥
SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来标识,记为(x, y),简记为Q,每个分量的长度为256位。
1.2 SM2私钥
SM2私钥是一个大于或等于1且小于n-1的整数(n为SM2算法的阶,其值详见GM/T 0003),简记为k,长度为256位。
2.1 密钥数据格式
SM2算法的私钥数据格式的ASN.1定义为:
SM2PrivateKey::=INTEGER
SM2算法公钥数据格式的ASN.1定义为:
SM2PublicKey::=BIT STRING
SM2PublicKey为BIT STRING类型,结构为04||X||Y,其中X,Y分别表示公钥额x分量和y分量,其长度各为256位。
2.2 加密数据格式
SM2算法加密后的数据格式的ASN.1定义为:
SM2Cipher:: = SEQUENCE{
XCoordinate INTEGER, --x分量
YCoordinate INTEGER, --y分量
HASH OCTET STRING SIZE(32), --杂凑值
CipherText OCTET STRING, --密文
}
其中,HASH为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位。
CipherText是与明文数据等长的密文。
2.3 签名数据格式
SM2算法签名数据格式的ASN.1定义为:
SM2Cipher:: = SEQUENCE{
R INTEGER, --签名值的第一部分
S INTEGER, --签名值的第二部分
}
R和S的长度各为256位。
2.4 密钥对保护数据格式
在SM2密钥对传递时,需要对SM2密钥对进行加密保护。具体的保护方法为:
- 产生一个对称密钥。
- 按对称密码算法标识指定的算法对SM2私钥进行加密,得到私钥的密文。若对称算法为分组算法,则其运算模式为ECB。
- 使用外部SM2公钥加密对称密钥得到对称密钥密文。
- 将私钥密文、对称密钥密文封装到密钥对保护数据中。
SM2EnvelopeKey:: = SEQUENCE{
symAlgID AlgorithmIdentifier, --对称算法标识
symEncryptedKey SM2Cipher, --对称密钥密文
Sm2PublicKey SM2PublicKey --SM2公钥
Sm2EncryptedPrivateKey BIT STRING --SM2私钥密文
}
上述密钥对保护数据格式实际上就是一个SM2加密信封的数据格式,SM2公钥仅仅是封装在信封内部,依然是裸公钥。
此时有A和B双方进行密钥对传递,B先将自己的SM2公钥传递给A;
A此时要把自己的非对称密钥对安全地传递给B,做法如下:
- A产生一对SM2密钥对,然后A又产生一个对称算法密钥(假定算法为SM4)symK;
- A用symK加密自己的私钥,得到SKCipher,
- A用B的公钥去加密自己的symK,得到对称密钥密文symKCipher;
- A将上述数据封装成一个SM2的加密信封EnvelopA,然后将EnvelopA传递给B。
B收到A发过来的EnvelopA数据后,解开信封过程如下:
- B用自己的私钥解密EnvelopA数据,获取到信封里边的数据。
- B用自己的私钥去解开EnvelopA数据中的对称密钥密文后,拿到对称密钥明文symPlainKey
- B用对称密钥明文数据解开SM2私钥密文,拿到A的私钥明文。
- B拿到了A的SM2公钥/私钥密钥对。
最后,A将自己的SM2密钥对安全传递给B。当然上述传递方式是最基础的,在不同的应用场景下或许有更为复杂的传递方式设计。
预处理过程详见0009规范。
4.1 生成密钥
SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥。其中,私钥的长度为256位,公钥的长度为512位(x和y分量)。
输入: 无
输出: k SM2PrivateKey SM2私钥
Q SM2PublicKey SM2公钥
详细的计算过程见GM/T 0003
4.2 加密
SM2加密是指使用指定公开密钥对明文进行特定的加密计算,生成相应密文的过程。该密文只能由该指定公开密钥对应的私钥解密。
输入: Q SM2PublicKey SM2公钥
m 字节串 待加密的明文数据
输出: c SM2Cipher 加密密文
其中:
输出参数C的格式在2.2中定义了。
输出参数C的XCoordinate、YCoordinate为随机产生的公钥的x分量和y分量
输出参数C中的HASH计算公式为:
HASH = SM3(x||m||y)
其中,x,y为Q的x分量和y分量;
输出参数c中CipherText为加密密文,其长度等于明文的长度。
详细的计算过程见GM/T 0003和GM/T 0004。
4.3 解密
SM2解密是指使用指定私钥对密文进行解密计算,还原对应明文的过程。
输入: d SM2PrivateKey SM2私钥
c SM2Cipher 密文
输出: m 字节串 与密文对应的明文
m为SM2Cipher经过解密运算得到的明文,该明文的长度与输入参数c中CipherText的长度相同。详细的计算过程见GM/T 0003。
4.4 数字签名
SM2签名是指使用0009规范8.2预处理结果2与签名者私钥,通过签名计算得到签名结果的过程。
输入: d SM2PrivateKey 签名者私钥
H 字节串 预处理2的结果
输出: sign SM2Signature 签名值
详细的计算过程见GM/T 0003。
4.5 签名验证
SM2签名验证是指使用0009规范8.2预处理结果2、签名值和签名者公钥,通过验证计算确定签名是否通过验证的过程。
输入: d SM2PrivateKey 签名者私钥
sign SM2Signature 签名值
Q SM2PublicKey 签名者公钥
输出: 为“真”表示“验证通过”,为“假”表示“验证不通过”
详细的计算过程见GM/T 0003。
4.6 密钥协商
密钥协商是在两个用户之间建立一个共享秘密密钥的协商过程,通过这种方式能够确定一个共享秘密密钥的值。
设密钥协商双方为A、B,其密钥对分别为(dA,QA)和(dB,QB),双方需要获得的密钥数据的比特长度为klen。密钥协商协议分为两个阶段。
具体过程见GM/T 0009。
热门文章
- 宠物店一个月能卖多少狗粮和狗粮 宠物店一个月能卖多少狗粮和狗粮呢
- 狗狗免费领养中心临汾(临汾狗狗收容站)
- 「4月24日」最高速度20.2M/S,2025年Clash/SSR/Shadowrocket/V2ray每天更新免费机场订阅链接
- 「4月8日」最高速度20.1M/S,2025年Clash/V2ray/Shadowrocket/SSR每天更新免费机场订阅链接
- 2021公务员考试国考报名条件及流程(公务员国考报考指南)
- 狗粮品牌哪个好(国产十大放心狗粮品牌排行榜)
- 按值致电与按引用致电之间的区别
- 「4月23日」最高速度20.1M/S,2025年Shadowrocket/SSR/V2ray/Clash每天更新免费机场订阅链接
- 「4月20日」最高速度20.4M/S,2025年V2ray/SSR/Shadowrocket/Clash每天更新免费机场订阅链接
- etcd分布式键值数据库安装(单机版)