GB_T 41389-2022 信息安全技术 SM9密码算法使用规范.pdf
- 文档部分内容预览:
新规范
GB/T413892022
C1 SM9KeyBlobl, 密文第一部分C,(符合GB/T38635.2一2020) C3 OCTETSTRING,一密文杂凑值 C2 OCTETSTRING 一密文 EnType为加密的方式,内容为0代表M④K1序列密码加密,内容为1、2、4、8分别代表ECB CBC、OFB、CFB分组密码算法工作模式,分组密码算法工作模式和初始值IV遵守GB/T17964的规定 分组密码加密的算法按照GB/T32907。 C1在GB/T38635.2—2020的9.2中被称为C1。 C3在GB/T38635.2一2020的9.2中被称为C3,为按照GB/T32905算法对明文数据运算得到的 杂凑值,其长度固定为256位。 C2在GB/T38635.2一2020的9.2中被称为C2,为加密密文
6.1.6密钥封装数据格式
用户A将一个随机数封装成C后,并传递给用户B,以便计算出密钥K。 密钥封装数据格式的ASN.1定义为: SM9KeyPackage::=SEQUENCE K OCTETSTRING, 一生成的密钥 C SM9KeyBlobl 一封装的交换密文 K作为用户A保留的密钥。C作为交换密文传递给B用户,B用户利用C可以生成K。
线材标准6.2.1预处理杂漆函数H
6.2.2预处理杂漆函数H
6.2.3预处理对运算1
预处理对运算1是指使用KGC的签名主公钥和G,的生成元P,点,计算G中的元素g1。 用于SM9数字签名。 预处理对运算1应按GB/T38635.1一2020附录A规定的双线性对进行计算
P, SM9P1 一生成元P, Ppub SM9SignMasterPublicKey 一签名主公钥 输出: gi 比特串 群G↑中元素,长度为3072位 计算公式为: g: = e (Pi , Ppubrs) 双线性对e的详细计算过程按照GB/T38635.1一2020中C.6
6.2.4预处理对运算2
6.2.5预处理用户验签公钥Om
预处理用户验签公钥Qp是指将身份标识字符串变换为群G2上的点QD,该结果用于数字签名验 正计算过程中。 预处理用户验签公钥Qp应按GB/T38635.2一2020中6.4的B5和B6进行计算。 输人: ID 字节串 用户身份标识 hid 整型 KGC私钥生成函数识别符,取值为1 N 整型 循环群G1、G2和GT的阶 P SM9P2 生成元P2 Ppub SM9SignMasterPublicKey 一签名主公钥 输出: QD SM9KeyBlob2 一群G2上的点 计算公式为: Qn=[hlP,+Pmulk
6.2.6预处理用户加密公钥Q
预处理用户加密公钥Qr是指将身份标识ID字符串变换为群G1上的点QE,该结果用于密钥 密钥封装和加密的计算过程中 预处理用户加密公钥Qe应按GB/T38635.2—2020中7.2的B1(或GB/T38635.2—2020中8 A1.或GB/T38635.2—2020中9.2的A1)进行计算
密钥生成是指生成SM9算法的主私/公钥、用户私钥的过程, )主私钥生成 SM9签名主私钥和加密主私钥是由KGC产生的随机数生成,并且大于或等于1且小于N,其 中N为群GI、G2和G的阶。 KGC产生的随机数应符合GB/T32915的要求。 输人: 无 输出: kSM9PrivateKey SM9主私钥,如果为签名主私钥标识为ks,加密主私钥标识为k ) 主公钥生成 SM9签名主公钥和加密主公钥分别由相对应的主私钥与生成元P,和P2的点乘生成。 签名主公钥生成过程应为: 输人: ks SM9SignMasterPrivateKey 签名主私钥 P2 SM9P2 群G的生成元 输出: Ppab SM9SignMasterPublicKey 一签名主公钥 加密主公钥生成过程应为: 输人: ke SM9EncryptMasterPrivateKey 加密主私钥 P SM9P1 群G的生成元 输出: Ppubre SM9EncryptMasterPublicKey 加密主公钥 详细的计算过程见GB/T38635.2一2020中9.1。 用户私钥生成 用户私钥生成是指生成用户私钥的过程,用户私钥分用户签名私钥和用户加密私钥,分别与相 对应的主私钥与G的生成元P,和G2的生成元P。有关。 用户签名私钥生成过程应为:
详细的计算过程按照GB/T38635.2一2020中
SM9签名是指使用预处理对运算1的结果和签名者私钥,通过签名计算得到签名结果的过程。 数字签名过程应为: 输人: 名 比特串 预处理对运算1的结果 N 整型 循环群G、G和GT的阶 M 比特串 一 待签名数据 ds SM9SignPrivateKey 一签名者私钥 输出: sign SM9Signature 签名值 详细的计算过程按照GB/T38635.2 2020中6.2
SM9签名验证是指使用预处理对运算1的结果、签名者标识、签名值、被签名数据,通过验签计算 确定签名是否通过验证的过程。 签名验证过程应为: 输人: ID 字节串 签名者标识 hid 整型 私钥生成函数标识符 N 整型 循环群G,、G和GT的阶 81 比特串 预处理对运算1的结果 Q SM9KeyBlob2 预处理用户验签公钥QD的结果 M 比特串 被签名数据 sign SM9Signature 签名值
输出: 为“真”表示“验证通过”,为“假”表示“验证不通过” 详细的计算过程按照GB/T38635.2—2020中6.4
GB/T413892022
SM9密钥解封装是指用户收到封装密文后,对密文进行解封装的计算过程。 密钥解封装过程应为: 输: ID 字节串 解封装方身份标识 d SM9EncryptPrivateKey 一解封装方加密私钥 C SM9KeyBlobl 一封装密文 输出: Key 比特串 密钥 详细的计算过程按照GB 2020中8.4
SM9加密是指使用指定公开密钥对明文进行特定的加密计算,生成相应密文的过程。该密文只能 由该指定公开密钥对应的私钥解密。 加密过程应为: 输入: M 字节串 明文 EnType整型 加密方式,见6.1.5 82 比特串 一 预处理对运算2的结果 Q SM9KeyBlobl 一对方的预处理用户加密公钥QE的结果 输出: C SM9Cipher 一密文
解密是指使用指定私钥对密文进行解密计算,还质
GB/T41389—2022 解密过程应为: 输人: ID 字节串 解密方身份标识 EnType整型 加密方式,见6.1.5 d。 SM9EncryptPrivateKey 解密方加密私钥 C SM9Cipher 密文 输出: M 字节串 明文 详细的计算过程按照GB/T38635.2—2020中9.4。 6.3.8密钥交换 密钥交换是在两个用户之间建立一个共享秘密密钥的协商过程,通过这种方式能够确定一个共享 秘密密钥的值。 设密钥交换双方身份标识为ID、IDB,分别计算预处理用户加密Qe的结果为QEA和QB,其用户 私钥分别为d和ds,双方需要获得的密钥数据的比特长度为klen。密钥交换协议分为两个阶段。 密钥交换过程应为: 第一阶段:产生临时密钥对 用户A: 输人: QB SM9KeyBlobl 用户B的预处理用户加密公钥Q的结果 输出: RA SM9KeyBlobl 用户A的临时公钥 用户B: 输人: QEA SM9KeyBlobl 用户A的预处理用户加密公钥Q的结果 输出: RB SM9KeyBlobl 一用户B的临时公钥 详细的计算过程按照GB/T38635.2一2020中7.1。 第二阶段:计算共享秘密密钥 用户B: 输人: RA SM9KeyBlobl 用户A的临时公钥 RB SM9KeyBlobl 用户B的临时公钥 IDA 字节串 用户A的身份标识 IDB 字节串 用户B的身份标识 Ppub SM9EncryptMasterPublicKey 加密主公钥 P2 SM9P2 生成元P, d SM9EncryptPrivateKey 用户B加密私钥 klen 整型 需要输出的密钥数据的比特长度 输出: S 比特串 可选项,校验值,用于用户A校验S S 比特串 可选项,用于对比S的校验值 SKB 比特串 位长为klen的密钥数据
解密过程应为: 输人: ID 字节串 解密方身份标识 EnType整型 加密方式,见6.1.5 d. SM9EncryptPrivateKey 解密方加密私钥 c SM9Cipher 一密文 输出: M 字节串 一明文
GB/T413892022
详细的计算过程按照GB/T38635.2—2020中7.2 用户A: 输人: RA SM9KeyBlobl A临时密钥 RB SM9KeyBlob1 B临时密钥 IDA 字节串 一A的身份标识 IDB 字节串 一 B的身份标识 Pputre SM9EncryptMasterPublicKey 加密主公钥 P2 SM9P2 生成元P da SM9EncryptPrivateKey 用户A加密私钥 klen 整型 需要输出的密钥数据的比特长度 输出: SA 比特串 可选项,校验值,用于用户B校验S S; 比特串 可选项,用于对比S的校验值 SKA 比特串 位长为klen的密钥数据
详细的计算过程按照GB/T38635.2—2020中7
7.1.1生成元数据结构
G,上的生成元P,点和Gz上的生成元P,点数据结构按GB/T16262.1一2006进行编码, 2的测试用例测试通过
7.1.2密钥数据结构
签名主私钥数据结构、签名主公钥数据结构、加密主私钥数据结构、加密主公钥数据结构、用户 钥数据结构和用户加密私钥数据结构按GB/T16262.1一2006进行编码,使用A3的测试用例测 过。
7.1.3签名数据结构
7.1.4加密数据结构
1.1.5密钥封装数据结格
里杂漆函数H.按GB/T38635.2—2020中5.3.2.
GB/T413892022
计算实例见GB/T38635.2—2020中A.2
7.2.2预处理杂漆函数H
预处理杂漆函数H2按GB/T38635.2一2020中5.3.2.3进行计算。 计算实例见GB/T38635.2—2020中A.2。
预处理杂凑函数H2按GB/T38635.2—2020中5.3.2.3进行计算。 计算实例见GB/T38635.2—2020中A.2。
7.2.3预处理对运算
预处理对运算1计算按GB/T38635.1一2020中A.1和C.6.2进行计算 计算实例见GB/T38635.2—2020中A.2
7.2.4预处理对运算2
预处理对运算2计算按GB/T38635.1一2020中A.1和C.6.2进行计算。 计算实例见GB/T38635.22020中A.3、A.4或A.5
7.2.5预处理用户验签公钥Qm
7.2.6预处理用户加密公钥Q
预处理用户加密公钥Q按GB/T38635.2—2020中7.2的B1(或GB/T38635.2—2020中8.2的 A1,或GB/T38635.2一2020中9.2的A1)进行计算。 计算实例见GB/T38635.2—2020中A,3、A.4或A,5
生成密钥包括主密钥生成、主公钥生成和用户私钥生成。 a)主私钥生成 KGC的随机数发生器按照GB/T32915进行验证 签名主私钥生成按GB/T38635.2一2020中6.1进行计算,计算实例见GB/T38635.2—2020 中A.2。 加密主私钥生成按GB/T38635.2一2020中7.1、8.1或9.1进行计算,计算实例见 GB/T 38635.2—2020 中 A,3、A,4或 A,5。 b)主公钥生成 签名主公钥生成按GB/T38635.2一2020中6.1进行计算,计算实例见GB/T38635.2一2020 中A.2。 加密主公钥生成按GB/T38635.2一2020中7.1、8.1或9.1进行计算,计算实例见 GB/T 38635.2—2020 中A.3、A.4或A.5。 用户私钥生成 用户签名私钥生成按GB/T38635.2一2020中6.1进行计算,计算实例见GB/T38635.2 2020中A.2 用户加密私钥生成按GB/T38635.2一2020中7.1、8.1或9.1进行计算,计算实例见 GB/T38635.22020中A.3、A.4或A,5,
GB/T413892022
签名验证按GB/T38635.2一2020中6.4进行计算,计算实例见GB/T38635.22020中
,计算实例见GB/T38635.2一2020中A.4。
解密按GB/T38635.2一2020中9.4 十算实例见GB/T38635.2一2020中A.5。
密钥交换按GB/T38635.2—2020中7.2进行计算,计算实例见GB/T38635.2—2020中A.3
附录A (规范性) 数据格式编码测试用例
群G的牛成元P,=(xP,Jp,) 坐标XP:93DF051D62RF718FF5FD0704487D01D6F1F4086909DC3280F8C4F4817C66 坐标JP:21IFL8DA4F21L607631065125C395BBC1C1C00CI3FA6024350C464CD70A3L 样G的生成元P2=(αP2,Jp2) 坐标Xp:(85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D880 3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82T 坐标yP2: (17509B092E845C1266RA0D262CBFF6ED0736A96FA347C8RD856DC76R84FF A7CF28D519BE3DA653170153D278I217EI1BA98A71A08116215BBA5C999 11的编码如下。 0342: BITSTRINC : 00 04 93DF051D 62BF718F F5ED 07 04487D : 01 D6 F1 F4 08 69 09 DC 32 80 F8 C4 F4 81 7C 66 DD DI)21IE8DDA41:21L6 076310 65125C 39 : 5BBCICIC00CBFA6024350C464CD70A3E : A616 P的编码如下。 038182: BTT STRTNG : 00 01 85 AE F3D0 78 610C9859 713 60 27B141 : A0IFF1DD 2C 19OF5E93C454806C11 D880 : 61413722755292130B 08 D2AA B97F D34E : C1 20 FE 26 59 48 D1 9C 17 AB F9 B7 21 3B AF 82 : D6 5B17 50 9R 09 2F84 5C 1266 BA OD 26 2CBF : E6 EI) 07 36 A9 6F A3 47 C8 I) 85 6) C7 6B 81 EB EB96A7 CF28 15 19 BE 3D A6 5F 31 70 15 3ID 27 : 8F F2 47 EF BA 98 A7 1A 0811 6215 BB A5 C9 99 : A7C7
A.3密钥数据格式编码测试用例
GB/T413892022
建筑施工图集· B6866C50457CFC7AA2A4AD65C3168FF7 4210 : 用户签名私钊的编码如下。 0312: BIT STRTVG : 0004A5702H05CF1315305E2D6EB64BOD : EB923DB1AOBCF0 CAFF90523AC8754AA6 ; 982078559A844411F9825C 109F5EF3F5 : 2D720DD01785392A727BB1556952B2B0 : 13D3 用加密私钥的编码如下。 038182; BTT STRTVG : 00011C5EC9C8CA8DEBA238CC3E500158 : F5 14 79 11 F2 25 1A4B DO AA90 3BB5F8D5FD : 23 B4 03 60 DB BD D6 9A 057307 75 BB3F 8AD7 99CC57 1D CB 88 3D 41 7R8D239302RD9009 7C 6B 21 F0 5A 64 F6 59 28 74 00 F2 D2 02 72 32 : 9F2A80EB60 767C9F F9D23CE8 04 6A F5 C9 : 50DO68 AF FF D5 03 C7 68 A7 65 73 1F 62FC3C : R7 B7 70 54 56 D4 08 30 F8 68 CC 17 A7 F9 51 85 : 5678
A.4签名数据格式编码测试用例
: 823C4B21E4BD2DFE1ED92C606653E996 : 668563152FC33F55D7BFBB9BD9705ADB 0342; BTT STRTNG ; 00 0173BF96923C E5 8B 6A DO E1 3E9613A4 06 D8 LB 98 41 7C 50 LF1B29CEF9ADB48B6D 598C 85 6712 F1 C2 2EO968AB7 769F42A995 : 86AFD139D5B8B3E15891827C C2ACED9B AA05
A.5加密数据格式编码测试用例
GB/T413892022
GB/T413892022
42 91 97 BC AB 70 B2 5A FE E3 7A 2B 9D B9 F3 6 0414: OCTET STRTNG : 1B5F5BOE951189682F3E61E1378CDD51 : A9 51 31 1C
42 91 97 BC AB 70 B2 5A FE E3 7A 2B 9D B9 F3 67 0414: OCTET STRTAG 1B5F5BOE951189682F3E61E1378CDD5D A9 51 331C
楼梯标准规范范本密钥封装数据格式编码源
....- 相关专题: