GB/T 38635.2-2020
基本信息
标准号:
GB/T 38635.2-2020
中文名称:信息安全技术 SM9标识密码算法 第2部分:算法
标准类别:国家标准(GB)
标准状态:现行
出版语种:简体中文
下载格式:.zip .pdf
下载大小:9285995
相关标签:
信息安全
技术
标识
密码
算法
标准分类号
关联标准
出版信息
相关单位信息
标准简介
GB/T 38635.2-2020.Information security technology-Identity-based cryptographic algorithms SM9-Part 2 : Algorithms.
1范围
GB/T 38635的本部分规定了SM9标识密码算法中数字签名算法、密钥交换协议、密钥封装机制和加密算法。
GB/T 38635.2适用于SM9标识密码算法工程化的实现,指导SM9标识密码算法相关产品的研制和检测。
2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 17964信息安全技术 分组 密码算法的工作模式
GB/T 32905信息安全技术 SM3 密码杂凑算法
GB/T 32907信息安全技术SM4分组密码算法
GB/T 32915信息安全技术 二 元序列随机性检测规范
GB/T 38635.1-2020信息安全技术 SM9 标识密码算法第1部分:总则
3术语和定义
GB/T 38635.1-2020界定的以及下列术语和定义适用于本文件。为了便于使用,以下重复列出了GB/T 38635.1-2020中的一些术语和定义。
3.1
加密主密钥 encryption master key
处于标识密码密钥分层结构最顶层的密钥,内容为加密主私钥和加密主公钥,其中加密主公钥公开,加密主私钥由密钥生成中心(KGC)秘密保存。KGC用加密主私钥和用户的标识生成用户的加密私钥。在标识密码中,加密主私钥一般由KGC通过随机数发生器产生,加密主公钥由加密主私钥结合系统参数产生。
3.2
标识 identity
由实体无法否认的信息组成,如实体的可识别名称、电子邮箱、身份证号、电话号码、街道地址等,可唯一确定一个实体的身份。
[GB/T 38635.1-2020,定 义3.1]
3.3
发起方 initiator
在一个协议的操作过程中发送首轮交换信息的用户。
标准内容
ICS35.040
中华人民共和国国家标准
GB/T38635.2—2020
信息安全技术
SM9标识密码算法
第2部分:算法
Information security technology-Identity-based cryptographic algorithms SM9-Part 2:Algorithms
2020-04-28发布
国家市场监督管理总局
国家标准化管理委员会
2020-11-01实施
1范围
规范性引用文件
术语和定义
算法参数与辅助函数
系统参数组
辅助函数
数字签名生成和验证算法及流程6.1
系统签名主密钥和用户签名密钥的产生数字签名生成算法
数字签名生成算法流程
数字签名验证算法
数字签名验证算法流程
密钥交换协议及流程
系统加密主密钥和用户加密密钥的产生密钥交换协议
密钥交换协议流程
8密钥封装机制及流程
系统加密主密钥和用户加密密钥的产生密钥封装算法
密钥封装算法流程
解封装算法·
解封装算法流程
加密算法及流程·
系统加密主密钥和用户加密密钥的产生加密算法
加密算法流程
解密算法
解密算法流程
附录A(资料性附录)
算法示例
GB/T38635.2—2020
GB/T38635《信息安全技术
SM9标识密码算法》分为两个部分:第1部分:总则;
第2部分:算法。
本部分为GB/T38635的第2部分
本部分按照GB/T1.1—2009给出的规则起草。GB/T38635.2—2020
请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。本部分由全国信息安全标准化技术委员会(SAC/TC260)提出并归口。本部分起草单位:国家信息安全工程技术研究中心、北京国脉信安科技有限公司、深圳奥联信息安全技术有限公司、中国科学院软件研究所、武汉大学、中科院信息工程研究所。本部分主要起草人:陈晓、程朝辉、张振峰、叶顶峰、胡磊、陈建华、季庆光、袁文恭、刘平、马宁、袁峰,李增欣、王学进、杨恒亮、张青坡、马艳丽、浦雨三、唐英、孙移盛、安萱、封维端、张立圆。用
GB/T38635.2—2020
A.Shamir在1984年提出了标识密码(Identity-basedcryptography)的概念,在标识密码系统中,用户的私钥由密钥生成中心(KGC)根据主密钥和用户标识计算得出,用户的公钥由用户标识唯一确定,由标识管理者保证标识的真实性。与基于证书的公钥密码系统相比,标识密码系统中的密钥管理环节可以得到适当简化。
1999年,K.Ohgishi、R.Sakai和M.Kasahara在日本提出了用椭圆曲线对(pairing)构造基于标识的密钥共享方案;2001年,D.Boneh和M.Franklin,以及R.Sakai、K.Ohgishi和M.Kasahara等人独立提出了用椭圆曲线对构造标识公钥加密算法。这些工作引发了标识密码的新发展,出现了一批用椭圆曲线对实现的标识密码算法,其中包括数字签名算法、密钥交换协议、密钥封装机制和公钥加密算法等椭圆曲线对具有双线性的性质,它在椭圆曲线的循环子群与扩域的乘法循环子群之间建立联系,构成了双线性DH、双线性逆DH、判定性双线性逆DH、t-双线性逆DH和t-GaP-双线性逆DH等难题,当椭圆曲线离散对数问题和扩域离散对数问题的求解难度相当时,可用椭圆曲线对构造出安全性和实现效率兼顾的标识密码。
HiiKaeeiKAca
1范围
信息安全技术
SM9标识密码算法
第2部分:算法
GB/T38635.2—2020
GB/T38635的本部分规定了SM9标识密码算法中数字签名算法、密钥交换协议、密钥封装机制和加密算法。
本部分适用于SM9标识密码算法工程化的实现,指导SM9标识密码算法相关产品的研制和检测。规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T17964信息安全技术分组密码算法的工作模式,信息安全技术SM3密码杂凑算法
GB/T32905
信息安全技术SM4分组密码算法1GB/T32907
GB/T32915
信息安全技术二元序列随机性检测规范GB/T38635.1-2020信息安全技术SM9标识密码算法第1部分:总则Kae
3术语和定义
GB/T38635.1一2020界定的以及下列术语和定义适用于本文件。为了便于使用,以下重复列出了GB/T38635.1—2020中的一些术语和定义。3.1
加密主密钥
encryptionmasterkey
处于标识密码密钥分层结构最顶层的密钥,内容为加密主私钥和加密主公钥,其中加密主公钥公开,加密主私钥由密钥生成中心(KGC)秘密保存。KGC用加密主私钥和用户的标识生成用户的加密私钥。在标识密码中,加密主私钥一般由KGC通过随机数发生器产生,加密主公钥由加密主私钥结合系统参数产生。
标识identity
由实体无法否认的信息组成,如实体的可识别名称、电子邮箱、身份证号、电话号码、街道地址等,可唯一确定一个实体的身份。
[GB/T38635.1—2020.定义3.1]3.3
发起方initiator
在一个协议的操作过程中发送首轮交换信息的用户。3.4
初始向量/值
直initializationvector/initializationvalue;Iv在密码变换中,为增加安全性或使密码设备同步而引人的用于数据变换的起始数据。1
GB/T38635.2—2020
从A到B的密钥确认keyconfirmationfromAtoB使用户B确信用户A拥有特定秘密密钥的保证。3.6
签名消息signedmessage
由消息以及该消息的数字签名部分所组成的一组数据元素。3.7
签名密钥signaturekey
在数字签名生成过程中由签名者专用的秘密数据元素,即签名者的私钥3.8
签名主密钥:signaturemasterkey系统的签名根密钥,内容为签名主私钥和签名主公钥,其中签名主公钥公开,签名主私钥由KGC秘密保存。KGC用签名主私钥和用户的标识生成用户的签名私钥。在标识密码中,签名主私钥一般由KGC通过随机数发生器产生,签名主公钥由签名主私钥结合系统参数产生。3.9
密钥交换keyexchange
在通信实体之间安全地交换密钥的方案,可以使通信双方在非安全通信线路上为信息传送安全地交换密钥。
密钥协商keyagreement
多个用户之间建立一个共享秘密密钥的过程,其中的任何一个用户都不能预先确定该密钥的值。3.11
密钥派生函数keyderivationfunction通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密密钥的函数。3.12
响应方
responder
在一个协议的操作过程中不是发送首轮交换信息的用户。3.13
秘密密钥secretkey
在密码体制中收发双方共同拥有的而第三方不知道的一种密钥。3.14
message authentication code;MAC消息认证码
-种认证算法作用于特定的密钥和消息比特串所得出的一段码字,以用来鉴别数据的来源和检验数据的完整性。用于求取消息认证码的函数称作消息认证码函数。4符号
下列符号适用于本文件。
A,B:使用标识密码系统的两个用户。cf:椭圆曲线阶相对于N的余因子。cid:用一个字节表示的曲线的识别符,其中0x10表示F。(素数p>2191)上常曲线(即非超奇异曲线),0x11表示F,上超奇异曲线,0x12表示F,上常曲线及其扭曲线,dsA:用户A的签名私钥。
e:从GIXG2到G的双线性对
GB/T38635.2—2020
eid:用一个字节表示的双线性对e的识别符,其中0x01表示Tate对,0x02表示Weil对,0x03表示Ate对,0x04表示R-Ate对。
GT:阶为素数N的乘法循环群。
G1:阶为素数N的加法循环群。
G2:阶为素数N的加法循环群。
g\.乘法群G中元素g的u次幂,即g\=g·g··g,u是正整数。个
H,():密码杂函数
H.(),H2():由密码杂凑函数派生的密码函数。hid:用一个字节表示的签名私钥生成函数识别符.由KGC选择并公开。(h,S):发送的签名。
(h,S')):收到的签名。
IDA:用户A的标识,可以唯一确定用户A的公钥。ks:签名主私钥。
M:待签名消息。
M':待验证消息。
modn:模n运算。
示例1:23mod7=2。
N:循环群G、Gz和G的阶,为大于2191的素数。iKaeei
Pput:签名主公钥。
P1:群G的生成元。
P2:群G2的生成元。
P):由元素P生成的循环群。
[u]P:加法群Gi、G中元素P的u倍「:顶函数,不小于α的最小整数示例2:7 |=7./8.3|=9。
[]:底函数,不大于的最大整数
示例3:17|=718.3=8.
ay:与y的拼接,和y是比特串或字节串,[a,y]:不小于且不大于的整数的集合。β:扭曲线参数。
5算法参数与辅助函数
5.1概述
第6章规定了一个用椭圆曲线对实现的基于标识的数字签名算法。该算法的签名者持有一个标识和一个相应的签名私钥,该签名私钥由密钥生成中心通过签名主私钥和签名者的标识结合产生。签名者用自身签名私钥对数据产生数字签名,验证者用签名者的标识验证签名的可靠性。在签名的生成和验证过程之前,应用密码杂凑函数对待签消息M和待验证消息M'进行杂凑计算。第7章规定了一个用椭圆曲线对实现的基于标识的密钥交换协议。参与密钥交换的发起方用户A和响应方用户B各自持有一个标识和一个相应的加密私钥,加密私钥均由密钥生成中心通过加密主私钥和用户的标识结合产生。用户A和B通过交互的信息传递,用标识和各自的加密私钥来商定一个只3
GB/T38635.2—2020
有他们知道的秘密密钥,用户双方可以通过可选项实现密钥确认。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。在现代密码系统中,密钥是控制密码变换的重要参数,而且密码的安全性极大地依赖于对密钥的安全保护。密钥封装机制使得封装者可以产生和加密一个秘密密钥给目标用户,而唯有目标用户可以解封装该秘密密钥,并把它作为进一步的会话密钥第8章规定了一个用椭圆曲线对实现的基于标识的密钥封装机制。解封装用户持有一个标识和一个相应的加密私钥,该加密私钥由密钥生成中心通过加密主私钥和解封装用户的标识结合产生。封装者利用解封装用户的标识产生并加密二个秘密密钥给对方,解封装用户则用相应的加密私钥解封装该秘密密钥。
第9章规定了一个用椭圆曲线对实现的基于标识的公钥加密算法。该公钥加密算法是上述密钥封装机制和消息封装机制的结合,消息封装机制包括基于密钥派生函数的序列密码以及结合密钥派生函数的分组密码算法两种类型,该算法可提供消息的机密性。在基于标识的加密算法中,解密用户持有个标识和一个相应的加密私钥,该加密私钥由密钥生成中心通过加密主私钥和解密用户的标识结合产生。加密用户用解密用户的标识加密数据,解密用户用自身加密私钥解密数据,附录A给出了数字签名算法、密钥交换协议、密钥封装机制和公钥加密算法示例5.2
系统参数组
系统参数组包括曲线识别符cid;N椭圆曲线基域F,的参数椭圆曲线方程参数a和b;扭曲线参数β(若cid的低4位为2);曲线阶的素因子N和相对于N的余因子cf;曲线E(F,)相对于N的嵌人次数k;E(F)(d整除k)的N阶循环子群G的生成元Pi;EF)(dz整除k)的N阶循环子群G的生成元Pz;双线性对e的识别符eid;(选项)G,到G的同态映射。双线性对e的值域为N阶乘法循环群GTI系统参数的详细描述见GB/T38635.1—2020中的附录A。1
5.3辅助函数
5.3.1概述
本部分规定基于标识的密码算法计算中涉及辅助函数。5.3.2密码杂凑函数
5.3.2.1密码杂凑函数H,()
密码杂凑函数H()的输出是长度恰为比特的杂凑值。本部分规定使用国家密码管理部门批准的密码杂凑函数,见GB/T32905。5.3.2.2密码函数H,()
密码函数H,(Z,n)的输人为比特串Z和整数n,输出为一个整数hE[1,n-。H,(Z,n)需要调用密码杂凑函数H。()。关于密码杂凑函数H。(),应符合5.3.2.1的规定。密码函数Hi(Z,n):
输入:比特串Z,整数n。
输出:整数hieLl,n-l:
计算步骤为:
a)初始化一个32比特构成的计数器ct=0x00000001。b)计算hlen=8×[(5×(log2n))/32l。4
c)对i从lhlen/执行:
1)计算Ha;=H,(0x01Zlct);
2)ct++。
若hlen/u是整数,令Ha!|a/==Haaa/u,d)
否则令Ha![rten/为Ha[rlen/最左边的(hlen一(uX_hlen/u」))比特GB/T38635.2—2020
令Ha=Ha1lHa2ll.Hauea/]-1lHa!mm/]按照GB/T38635.1—2020中7.2.4和e)
7.2.3给出的细节将Ha的数据类型转换为整数f)
计算hi=(Hamod(n-1))+1。
密码函数H2()
密码函数H(Z,n)的输入为比特串Z和整数n.输出为一个整数hE1,n1。H(Z,n)需要调用密码杂凑函数H,()。关于密码杂凑函数H,(),应符合5.3.2.1的规定。密码函数H,(Z,n):
输入:比特串Z.整数n。
输出:整数hzE[1,n-1]。
计算步骤为:
a)初始化一个32比特构成的计数器ct一0x00000001。b)计算hlen=8×|(5×(log2n))/32l。c)对i从1~hlen/执行:
1)计算Ha,=H,0x02Zct);
2)ct++。
d)若hlen/u是整数,令Ha![men=Haate/],否则令Ha!ena|为Hanta/最左边的(hlen一(uXhlen/u|))比特令Ha=HaiIlHa2ll..Hane/--lHa!nau/.按照GB/T38635.1—2020中7.2.4和e
7.2.3给出的细节将Ha的数据类型转换为整数f)
计算hz=(Hamod(n-1))+1。
5.3.3随机数发生器
应使用符合GB/T32915的随机数发生器。5.3.4分组密码算法
分组密码算法包括加密算法Enc(K,m)和解密算法Dec(Ki,c)。Enc(K,m)表示用密钥K,对明文m进行加密,其输出为密文比特串c:Dec(K1,c)表示用密钥K对密文c进行解密,其输出为明文比特串m或\错误”。密钥K的比特长度记为Ki_len。应使用符合国家密码管理部门批准的分组密码算法5.3.5消息认证码函数
消息认证码函数MAC(K,Z)的作用是防止消息数据Z被非法篡改,它在密钥K,的控制下,产生消息数据比特串Z的认证码,密钥K,的比特长度记为K_len。在本部分的基于标识的加密算法中,消息认证码函数使用密钥派生函数生成的密钥对密文比特串求取消息认证码,从而使解密者可以鉴别消息的来源和检验数据的完整性。消息认证码函数需要调用密码杂漆函数。设密码杂凑函数为H。(),其输出是长度恰为比特的杂凑值。消息认证码函数MAC(K,Z),其中:5
GB/T38635.2—2020
输入:比特串K(比特长度为K,_len的密钥),比特串Z(待求取消息认证码的消息)。输出:长度为的消息认证码数据比特串K。K=H(ZIlK,)。5.3.6密钥派生函数
密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。
密钥派生函数需要调用密码杂凑函数。设密码杂凑函数为H(),其输出是长度恰为比特的杂凑值。密钥派生函数KDF(Z,klen),其中:输入:比特串Z(双方共享的数据),整数len表示要获得的密钥数据的比特长度,要求该值小于(238-1)。
输出:长度为klen的密钥数据比特串K。计算步骤为:
a)初始化一个32比特构成的计数器ct=0x00000001。b)对i从1~[klen/u执行:
1)计算Ha=H,(Zllct);
2)ct++。
c)若klen/u是整数,令Ha![elen/=Ha[e/],否则令Ha!xlen/a|为Hasen/最左边的(klen一(uXlklen/))比特。d) 令K=Haill Ha ll.. l Ha[rt/-ill Ha [/]6数字签名生成和验证算法及流程6.1
系统签名主密钥和用户签名密钥的产生KGC产生随机数ksE[1,N一1]作为签名主私钥,计算Gz中的元素Pputr=[ks]P.作为签名主公钥,则签名主密钥对为(ks,Ppul-)。KGC秘密保存ks,公开Ppal-sKGC选择并公开用二个字节表示的签名私钥生成函数识别符hid用户A的标识为IDA,为产生用户A的签名私钥dsA,KGC首先在有限域F上计算tI=H(IDAIlhid,N)十ks,若ti=0则需重新产生签名主私钥,计算和公开签名主公钥,并更新已有用户的签名私钥;否则计算t,=k·t-1,然后计算dsA-t]P1。6.2数字签名生成算法
设待签名的消息为比特串M,为了获取消息M的数字签名(h,S),作为签名者的用户A应实现以下运算步骤:
Al:计算群Gr中的元素g=ePi,P);A2:产生随机数rE1,N-1:
A3:计算群G中的元素w=g,按照GB/T38635.1—2020中7.2.6和7.2.5给出的细节将w的数据类型转换为比特串;
A4:计算整数h=H,(MIlw,N);
A5:计算整数l=(r一h)modN,若1=0则返回A2;A6:计算群G,中的元素S=[]dsA;A7:按照GB/T38635.1一2020中7.2.2给出的细节,将h的数据类型转换为字节串,按照GB/T38635.1一2020中7.2.8给出的细节将S的数据类型转换为字节串,消息M的签名为(h,S)。
6.3数字签名生成算法流程
数字签名生成算法流程如图1所示。用广A的原始数期
(系统舒数,效名公,消总和名密第1步:计算g—()
第2步;产生随机数-[1,A-]
第3步:计算—户
第4步:计算h-H(a rA)
第5步: 计筑i-(r-h)mnd N
第6步:计算e5,
第7步:确定数字签名(1,S)
输山消其数字签名(:S)
数字签名生成算法流程
数字签名验证算法
GB/T38635.2—2020
为了检验收到的消息M'及其数字签名(h,S).作为验证者的用户B应实现以下运算步骤:B1:按照GB/T38635.1一2020中7.2.3给出的细节将h的数据类型转换为整数.检验hE厂1:N一1是否成立,若不成立则验证不通过;B2:按照GB/T38635.1—2020中7.2.9给出的细节将S的数据类型转换为椭圆曲线上的点,按GB/T38635.1—2020中5.5给出的细节检验S°EG是否成立,若不成立则验证不通过;B3:计算群Gr中的元素g=e(P,Ppub);B4:计算群G-中的元素t=g;
B5:计算整数hi=H(IDAllhid,N);B6:计算群G2中的元素P=[hi]P2+P;B7:计算群G-中的元素u=e(S,P);B8:计算群G中的元素w=u·t.按照GB/T38635.1—2020中7.2.6和7.2.5给出的细节将w的数据类型转换为比特串;
B9:计算整数h,=H,(M\Ilw,N),检验h2=h是否成立,若成立则验证通过;否则验证不通过。免费标准下载网bzxz
GB/T38635.2—2020
5数字签名验证算法流程
数字签名验证算法流程如图2所示。用广B的原始数掂
「系绕参数、签名1公销识别符乃、标认、消息\及共数字签名()第I步:检验,N—川足否成文
'F[1, A1]?
第2步:检验是否成议
第3步:计算—()
第4步:计筑—
第5步:计算=H,(,)
第6步:计[
第7步:计算—((S)
第8岁:算—
第9步:计算h=H,()
验证通过
图2数字签名验证算法流程
驳证不通
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。