国密算法sm2

《SM2密码算法使用规范》规定了数字证书SM2算法的公/私钥及加密签名格式。

1.SM2公钥格式用ASN.1描述如下:

SM2PublicKey::=BIT STRING

SM2公钥是SM2曲线上的一个点,由横、纵坐标两个分量来表示,记为(x,y),简记为Q,每个分量长度为256位。SM2PublicKey内容格式为:04‖X‖Y。其中,X和Y分别表示公钥的x分量和y分量,其长度各为256位。

2.SM2私钥格式用ASN描述如下:

SM2PrivateKey::=INTEGER SM2私钥是一个大于或等于1且小于n-1的整数(n为SM2算法的阶),简记为k,长度为256位。

3.SM2加密数据格式用ASN1描述如下:

SM2Cipher::=SEQUENCE { XCoordinate INTEGER,–x分量 YCoordinate INTEGER,–y分量 HASH  OCTET STRING SIZE(32),–摘要值 CigherText  OCTET STRING    –密文 假设使用SM2公钥Q(SM2PublicKey类型)对明文m(字符串类型)进行加密计算。则XCoordinate和YCoordinate为随机产生的公钥的x分量和y分量。HASH为使用SM3算法对明文数据运算得到的摘要值,其长度为256位,HASH=SM3(x‖m‖y),其中x和y为Q的x分量和y分量。CipherText是与明文等长的密文。 假设使用SM2私钥d(SM2Privatekey类型)对密文c(SM2Cipher类型)进行解密计算,则解密后将获得明文m,其长度等于密文(c→Cipher Text)的长度。

4.SM2签名数据格式用ASN描述如下:

SM2Signature::=SEQUENCE { R  INTEGER,  –签名值的第一部分 S  INTEGER,  –签名值的第二部分 其中,R和S的长度各为256位。 假设使用签名方私钥d(SM2PrivateKey类型)对待签名数据M(字符串类型)进行签名计算。具体计算步骤如下: ①预处理1:使用签名方的用户身份标识ID(字符串类型)和签名方公钥Q(SM2PublicKey类型),通过运算得到Z值(字符串类型)。 Z=SM3(ENTL‖ID‖a‖b‖XG‖yG‖xA‖yA) 其中,ENTL为2字节表示的ID的比特长度。ID为用户身份标识,无特殊约定情况下,长度为16字节,默认值从左至右依次为: 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38。a和b为系统曲线参数。xG和yG为基点,xA和yA为签名方公钥。 ②预处理2:使用预处理1结果Z值(字符串类型)和待签名数据M(字符串类型),通过SM3运算得到摘要值H(字符串类型)。 H=SM3(Z‖M) ③签名:使用预处理2结果H(字符串类型)和签名方私钥d(SM2PrivateKey类型),通过签名计算得到签名结果sign(SM2Signature类型)。 签名验证时,使用预处理2结果H(字符串类型)、签名结果sign(SM2Signature类型)和签名方公钥Q(SM2PublicKey类型),通过验签计算确定签名结果是否通过验证。 在SM2密钥对传递时,需加密保护它。

5.SM2密钥对的保护数据格式用ASN.1描述如下:

SM2EnvelopedKey::=SEQUENCE { symAlgID     Algorithmldentifier,  –对称密钥算法标识 symEncryptedKey  SM2Ciphe          –对称密钥密文 Sm2PublicKey      SM2PublicKey,    –SM2公钥 Sm2EncryptedPrivateKey BIT STRING  –SM2私钥密文 其中,具体的保护方法为: ①产生一个对称密钥。 ②按对称密钥算法标识指定的算法加密SM2私钥,得到私钥密文。若对称算法为分组算法,则其运算模式为ECB。 ③使用外部SM2公钥加密对称密钥得到对称密钥密文。 ④把私钥密文、对称密钥密文封装到密钥对保护数据中。

标签: