GB/T 35276-2017 信息安全技术 SM2密码算法使用规范.pdf
- 文档部分内容预览:
6.48位字节串到整数的转换
可以简单地把8位字节串看成以256为基表示的整数,转换过程如下: 输入:一个长度mlen的8位字节串M。 输出:一个整数。
GB/T352762017
SM2算法私钥数据格式的ASN.1定义为: SM2PrivateKey::=INTEGER SM2算法公钥数据格式的ASN.1定义为: SM2PublicKey : := BIT STRING SM2PublicKey为BITSTRING类型,内容为04IIXIIY配电网标准规范范本,其中,X和Y分别标识公钥的x分量和y 分量,其长度各为256位
SM2算法加密后的数据格式的ASN.1定义为: SM2Cipher::=SEQENCE XCoordinate INTEGER, 一x分量 YCoordinate INTEGER, y分量 HASH OCTET STRING SIZE(32), 一杂凑值 CipherText OCTET STRING 密文
其中,HASH为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位。C 是与明文对应的密文
SM2算法签名数据格式的ASN.1定义为: SM2Signature::=SEQUENCE( R INTEGER, S INTEGER
7.4密钥对保护数据格式
签名值的第一部分 签名值的第二部分
在SM2密钥对传递时,需要对SM2密钥对进行加密保护。具体的保护方法为: a)产生一个对称密钥; D 按对称密码算法标识指定的算法对SM2私钥进行加密,得到私钥的密文。若对称算法为分组 算法,则其运算模式为ECB; 使用外部SM2公钥加密对称密钥得到对称密钥密文; d)将私钥密文、对称密钥密文封装到密钥对保护数据中。 SM2密钥对的保护数据格式的ASN.1定义为:
预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到乙值的 处理2,也用于SM2密钥协商协议, 输入:ID 字节串 用户身份标识 Q SM2PublicKey 用户的公钥 输出:Z 字节串 预处理1的输出 计算公式为: Z=SM3(ENTL Il IDIl a Ilb Il xG Il yG Il xA Il yA) 式中: ENTL 为由2个字节表示的ID的比特长度; ID 为用户身份标识; α、b 为系统曲线参数; XG·yG 为基点; XAyA 为用户的公钥,
详细的计算过程见GB/T32918.2—2016的5.5和GB/T32905—2016的第5章
预处理2是指使用Z值和待签名消息,通过SM3运算得到杂漆值H的过程。杂漆值H用于SM2 数字签名。 输入:Z 字节串 预处理2的输人 M 字节串 待签名消息 输出:H 字节串 杂凑值 计算公式为
SM2密钥生成是指 输入:无 输出:k SM2PrivateKey SM2私钥 Q SM2PublicKey SM2公钥 详细的计算过程见GB/T32918.1 2016的6.1
GB/T352762017
加密是指使用指定公开密钥对明文进行特定的加密计算,生成相应密文的过程。该 公开密钥对应的私钥解密。 Q SM2PublicKey SM2公钥 m 字节串 待加密的明文数据 C SM2Cipher 密文 输出参数c的格式由本规范7.2中定义; 输出参数c的XCoordinate、YCoordinate为随机产生的公钥的x分量和y分量 输出参数c中的HASH的计算公式为: HASH = SM3(x Il m Il y) Q的x分量和y分量; 输出参数c中CipherText为加密密文,其长度等于明文的长度。 的计算过程见GB/T32918.4一2016的6.1。
x,y Q的x分量和y分量; 输出参数c中CipherText为加密密文,其长度等于明文的长度。 详细的计算过程见GB/T32918.4—2016的6.1
SM2解密是指使用指定私钥对密文进行解密计算,还原对应明文的过程。 输入:d SM2PrivateKey SM2私钥 SM2Cipher 密文 输出:m 字节串 与密文对应的明文
m为SM2Cipher经过解密运算得到的明文,该明文的长度与输人参数c中CipherText的长度 目同。 详细的计算过程见GB/T32918.4一2016的7.1
SM2签名是指使用预处理2的结果和签名者私钥,通过签名计算得到签名结果的过程。 输入:d SM2PrivateKey 签名者私钥 H 字节串 预处理2的结果 输出:sign SM2Signature 签名值
SM2签名验证是指使用预处理2的结果、签名值和签名者的公钥,通过验签计算确定签名是否通 金证的过程。 输入:H 字节串预 处理2的结果 sign SM2Signature 签名值 Q PublicKey 签名者的公钥 输出:为“真”表示“验证通过”,为“假”表示“验证不通过”。 详细的计算过程见GB/T32918.2一2016的7.1。
SM2签名验证是指使用预处理2的结果、签名值和签名者的公钥,通过验签计算确定签 过验证的过程。
字节串预 SM2Signature PublicKey
密钥协商是在两个用户之间建立一个共享秘密密钥的协商过程,通过这种方式能够确定一个共
GB/T35276—2017
密钥的值。 设密钥协商双方为A、B,双方的密钥对分别为(da,Q^)和(d,Qs),双方需要获得的密钥 寺长度为klen。密钥协商协议分为两个阶段。 第一阶段:产生临时密钥对 用户A: 调用生成密钥算法产生临时密钥对(rA,RA),将RA和用户A的用户身份标识IDA发送给月 用户B: 调用生成密钥算法产生临时密钥对(rB,Rs),将R和用户B的用户身份标识ID发送给用 第二阶段:计算共享秘密密钥 用户A: 输入参数: Q SM2PublicKey 用户A的公钥 Q SM2PublicKey 用户B的公钥 RA SM2PublicKey 用户A的临时公钥 IDA OCTET STRING 用户A的用户身份标识 RB SM2PublicKey 用户B的临时公钥 IDB OCTETSTRING 用户B的用户身份标识 dA SM2PrivateKey 用户A的私钥 IA SM2PrivateKey 用户A的临时私钥 klen INTEGER 需要输出的密钥数据的比特长度 输出参数: K OCTETSTRING 位长为klen的密钥数据 步骤: a) 用ID和Q作为输入参数铝合金标准规范范本,调用预处理1得到ZA; b 用ID和Q:作为输人参数,调用预处理1得到Z; 以klen、ZA、ZB、dA、IA、RA、Q、RB为输入参数,进行运算得到K。 用户B: 输入参数: Q SM2PublicKey 用户B的公钥 Q SM2PublicKey 用户A的公钥 RB SM2PublicKey 用户B的临时公钥 IDB OCTETSTRING 用户B的用户身份标识 RA SM2PublicKey 用户A的临时公钥 IDA OCTET STRING 用户A的用户身份标识 dB SM2PrivateKey 用户B的私钥 B SM2PrivateKey 用户B的临时私钥 klen INTEGER 需要输出的密钥数据的比特长度
秘密密钥的值。 设密钥协商双方为A、B,双方的密钥对分别为(da,Q^)和(ds,Qs),双方需要获得的密钥数据白 比特长度为klen。密钥协商协议分为两个阶段。 第一阶段:产生临时密钥对 用户A: 调用生成密钥算法产生临时密钥对(rA,RA),将RA和用户A的用户身份标识IDA发送给用户B。 用户B: 调用生成密钥算法产生临时密钥对(rB,R),将R和用户B的用户身份标识IDs发送给用户A。 第二阶段:计算共享秘密密钥 用户A:
GB/T 35276=2017
K OCTET STRING 位长为klen的密钥数据 步骤: 用ID和Q作为输入参数,调用预处理1得到Z^; b)用IDs和Q:作为输人参数,调用预处理1得到Zs; c)以klen、ZA、ZB、d、IB、RB、Qa、R为输人参数,进行运算得到K。 详细的计算过程见GB/T32918.3一2016的6.1
10用户身份标识ID的默认值
下建筑软件、计算,用户身份标识ID的长度为16字节,其默认 0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,
....- 相关专题: 信息安全