ICS35.040
中华人民共和国国家标
GB/T32918.2—2016
信息安全技术
SM2圆曲线公钥
密码算法第2部分:数字签名算法Information security technology--Public key cryptographic algorithm SM2based on elliptic curves-Part 2.Digital signature algorithm2016-08-29发布
中华人民共和国国家质量监督检验检疫总局中国国家标准化管理委员会
2017-03-01实施
GB/T32918.2—2016
1范围
规范性引用文件
3术语和定义
4符号和缩略语
5数字签名算法
5.2椭圆曲线系统参数
5.3用户密钥对
5.4辅助函数
5.5用户其他信息
6数字签名的生成算法及流程
6.1数字签名的生成算法
6.2数字签名生成算法流程
7数字签名的验证算法及流程
7.1数字签名的验证算法
Www.bzxZ.net7.2数字签名验证算法流程
附录A(资料性附录)数字签名与验证示例A.1综述
A.2F,上的椭圆曲线数字签名
A.3F2上的椭圆曲线数字签名
参考文献
GB/T32918《信息安全技术
第1部分:总则;
SM2椭圆曲线公钥密码算法》分为5个部分:第2部分:数字签名算法;
一第3部分:密钥交换协议;
第4部分:公钥加密算法;
—第5部分:参数定义。
本部分为GB/T32918的第2部分。本部分按照GB/T1.1一2009给出的规则起草。本部分由国家密码管理局提出。本部分由全国信息安全标准化技术委员会(SAC/TC260)归口。GB/T32918.2—2016
本部分起草单位:北京华大信安科技有限公司、中国人民解放军信息工程大学、中国科学院数据与通信保护研究教育中心。
本部分主要起草人:陈建华、祝跃飞、叶顶峰、胡磊、裴定一、彭国华、张亚娟、张振峰。I
HiKAoNhiKAca
GB/T32918.2—2016
N.Koblitz和V.Miller在1985年各自独立地提出将椭圆曲线应用于公钥密码系统。椭圆曲线公钥密码所基于的曲线性质如下:有限域上椭圆曲线在点加运算下构成有限交换群,且其阶与基域规模相近:类似于有限域乘法群中的乘幂运算,椭圆曲线多倍点运算构成一个单向函数。在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。对于一般椭圆曲线的离散对数问题,自前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的密钥规模要小得多。SM2是国家密码管理局组织制定并提出的椭圆曲线密码算法标准。GB/T32918的主要目标如下:
GB/T32918.1定义和描述了SM2椭圆曲线密码算法的相关概念及数学基础知识,并概述了该部分同其他部分的关系。
-GB/T32918.2描述了一种基于椭圆曲线的签名算法,即SM2签名算法。GB/T32918.3描述了一种基于椭圆曲线的密钥交换协议,即SM2密钥交换协议。-GB/T32918.4描述了一种基于椭圆曲线的公钥加密算法,即SM2加密算法,该算法需使用GB/T32905一2016定义的SM3密码杂凑算法。GB/T32918.5给出了SM2算法使用的椭圆曲线参数,以及使用椭圆曲线参数进行SM2运算的示例结果。
本部分为GB/T32918的第2部分,描述了基于椭圆曲线的数字签名算法。I
HiiKAoNhiKAca
1范围
信息安全技术SM2椭圆典线公钥
密码算法第2部分:数字签名算法GB/T32918.2—2016
GB/T32918的本部分规定了SM2圆曲线公钥密码算法的数字签名算法,包括数字签名生成算法和验证算法,并给出了数字签名与验证示例及其相应的流程本部分适用于商用密码应用中的数字签名和验证,可满足多种密码应用中的身份鉴别和数据完整性、真实性的安全需求。
2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T32918.1一2016信息安全技术SM2圆曲线公钥密码算法第1部分:总则GB/T32905—2016信息安全技术SM3密码杂漆算法3术语和定义
下列术语和定义适用于本文件。3.1
message
任意有限长度的比特串。
signed message
签名消息
由消息以及该消息的签名部分所组成的一组数据项。3.3
月signature key
签名密钥
在数字签名生成过程中由签名者专用的秘密数据项,即签名者的私钥。3.4
签名生成过程signaturegenerationprocess输人消息、签名密钥和椭圆曲线系统参数,并输出数字签名的过程。3.5
可辨别标识distinguishing identifier可以无歧义辨别某一实体身份的信息。4符号和缩略语
下列符号和缩略语适用于本文件。A,B使用公钥密码系统的两个用户。1
HiKAoNhi KAca
GB/T32918.2—2016
dA用户A的私钥。
E(F。)F。上椭圆曲线E的所有有理点(包括无穷远点O)组成的集合。e密码杂凑算法作用于消息M的输出值。e”密码杂凑算法作用于消息M\的输出值。F。包含q个元素的有限域。
G椭圆曲线的一个基点,其阶为素数。H。()消息摘要长度为比特的密码杂凑算法。IDA用户A的可辨别标识。
M待签名消息。
M待验证消息。
modn模n运算。例如,23mod7=2。n基点G的阶(n是#E(F。)的素因子)。0椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。PA用户A的公钥。
q有限域F中元素的数目。
a,bF。中的元素,它们定义F。上的一条椭圆曲线E。y工与y的拼接,其中工可以是比特串或字节串。ZA关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。(r,s)发送的签名。
(r\,s')收到的签名。
[]P椭圆曲线上点P的倍点,即,[]P=P+P++P,k是正整数。灵个
[,]大于或等于工且小于或等于y的整数的集合。5数字签名算法
5.1综述
数字签名算法由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性。每个签名者有一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。在签名的生成过程之前,要用密码杂凑算法对M(包含ZA和待签消息M)进行压缩;在验证过程之前,要用密码杂凑算法对M\(包含ZA和待验证消息M\)进行压缩。5.2椭圆曲线系统参数
椭圆曲线系统参数包括有限域F,的规模q(当q=2\时,还包括元素表示法的标识和约化多项式);定义椭圆曲线E(F。)的方程的两个元素abeF。E(F)上的基点G=(tGyc)(GO),其中工c和yG是F,中的两个元素;G的阶n及其他可选项(如n的余因子h等)。圆曲线系统参数及其验证应符合GB/T32918.1一2016第5章的规定。5.3用户密钥对
用户A的密钥对包括其私钥dA和公钥PA=[dAJG=(aAyA)。用户密钥对的生成算法与公钥验证算法应符合GB/T32918.1一2016第6章的规定。2
HiiKAoNiKAca
5.4辅助函数
5.4.1概述
GB/T32918.2—2016
在本部分规定的椭圆曲线数字签名算法中,涉及两类辅助函数:密码杂凑算法与随机数发生器。5.4.2密码杂凑算法
本部分规定使用国家密码管理局批准的密码杂凑算法,如SM3密码杂凑算法。5.4.3随机数发生器
本部分规定使用国家密码管理局批准的随机数发生器。5.5用户其他信息
作为签名者的用户A具有长度为entlenA比特的可辨别标识IDA,记ENTLA是由整数entlenA转换而成的两个字节,在本部分规定的椭圆曲线数字签名算法中,签名者和验证者都需要用密码杂凑算法求得用户A的杂凑值ZA。按GB/T32918.1一2016中4.2.6和4.2.5给出的方法,将椭圆曲线方程参数a、b、G的坐标工G、YG和PA的坐标工A、A的数据类型转换为比特串,ZA=H256(ENTLAIIDAIaBII XG ll yG ll ZA Il yA).
6数字签名的生成算法及流程
6.1数字签名的生成算法
设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
Ai:置M=ZAllM;
Az:计算e=H,(M),按GB/T32918.1一2016中4.2.4和4.2.3给出的方法将e的数据类型转换为整数;
A::用随机数发生器产生随机数kE[1,n一1]A:计算椭圆曲线点(z1,y1)=[]G,按GB/T32918.1—2016中4.2.8给出的方法将工的数据类型转换为整数:
As:计算r=(e十a)modn,若r=o或r十k=n则返回AgAs:计算s=((1十d)-I·(k一r·dA))modn,若s=o则返回AA7:按GB/T32918.1一2016中4.2.2给出的细节将r、s的数据类型转换为字节串,消息M的签名为(r,s)。
注:数字签名生成过程的示例参见附录A。6.2数字签名生成算法流程
数字签名生成算法流程见图1。
HiKAoNniKAca
GB/T32918.2—2016
7数字签名的验证算法及流程
7.1数字签名的验证算法
用户A的原始数据
(糖圈曲线系统参数ZA、M、PA、dA)第1步,置M=ZAIIM
第2步:计算e=H(M)
第3步:产生随机数kE[1,n-1]
第4步:计算椭圆曲线点(,y,)=[JG第5步:计算r=(e+x)modn
=0或r+k=n?
第6步:计算s=(1+d)\.(k-rda)modn是
第7步:确定数字签名(r,3)
输出消息M及其数字签名(r,s)图1数字签名生成算法流程
为了检验收到的消息M\及其数字签名(rs),作为验证者的用户B应实现以下运算步骤:B:检验r\E[1,n一1]是否成立,若不成立则验证不通过;Bz:检验s'E[1,n一1]是否成立,若不成立则验证不通过;HiiKAoNiKAca
Ba置M'=ZAIlM;
GB/T32918.2—2016
B:计算e=H,(M\),按GB/T32918.1一2016中4.2.4和4.2.3给出的方法将e的数据类型转换为整数;
Bs:按GB/T32918.1一2016中4.2.3给出的方法将、s的数据类型转换为整数,计算t=(r+s)modn,若t=o,则验证不通过:
B:计算圆曲线点(i+yi)=[sG+[t]PABr:按GB/T32918.1一2016中4.2.8给出的方法将工1的数据类型转换为整数,计算R=(e+工1)modn,检验R=r是否成立,若成立则验证通过,否则验证不通过。注:如果ZA不是用户A所对应的杂读值,验证自然通不过。数字签名验证过程的示例参见附录A。2数字签名验证算法流程
数字签名验证算法流程见图2。
HiKAoNhiKAca
GB/T32918.22016
用户B的原始数据
【糖圆曲线系统参数ZA、PA、M'、(r',s\)]第1步:检验r\e[1,n一1]是否成立r'e [1,n-i]?
第2步:检验se【1,n一1]是否成立s'e[1,n-1]?
第3步:置M=ZAllM\
第4步:计算e=H(M\)
第5步:计算(=(r+s)modn
第6步:计算圆曲线点
(X, X)=[s\]G+[]PA
第7步:计算R=(e'+xi)modn
验证通过
数字签名验证算法流程
验证不通过
A.1综述
附录A
(资料性附录)
数字签名与验证示例
GB/T32918.2—2016
本附录选用GB/T32905一2016给出的密码杂凑算法,其输人是长度小于26的消息比特串,输出是长度为256比特的杂凑值,记为H25()。本附录中,所有用16进制表示的数,左边为高位,右边为低位。本附录中,消息采用GB/T1988给出的编码。设用户A的身份是:
[email protected]。用GB/T1988给出的编码IDA:414C494345313233405941484F4F2E434F4D。ENTLA=0090。A.2F,上的圆曲线数字签名
椭圆曲线方程为:y=十ar十b
示例1:F,-256
素数:8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3
系数a:787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498系数6:63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA
基点G=(c,yc),其阶记为n。
27C5249A
坐标G:421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C14
7FEDD43D
坐标yG:0680512BCBB42C07D47349D2153B70C4
阶n:8542D69E4C044F18E8B92435待签名的消息M:messagedigestBF6FF7DD
私钥dA:128B2FA8BD433C6C
068C8D80
公钥PA=(A+YA):
坐标工A:0AE4C779
8AA0F119
坐标yA:7C0240F88F1CD4E1
471BEE11
E5D7FDFC
29772063
BFA36EA1
A85841B9 E46E09A2
0485628D
5AE74EE7
3DFF7979
2A519A55
C32E79B7
171B1B65
OC23661D
15897263
4DF2548A
825BE462
02BB79E2
A5844495H
E97C04FF
17B7F16F07353E53A176D684A9FE0C6BB798E8576352A73C
杂漆值ZA-H25(ENTLAIIDAlaSTGG工AyA).ZA:F4A38489E32B45B6
F876E3AC2168CA392362DC8F
23459C1D1146FC3D
BFB7BC9A
签名各步骤中的有关值:
F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A6D65737361676520646967657374
密码杂漆函数值e=H25s(M):
B9EFFE76
B524F552CD82B8B028476E005C377FB19A87E6FC682D48BB5D42E3D9
产生随机数:6CB28D99385C175C94F94E934817663F计算椭圆曲线点(TIy=[G:
C176D925
DD72B727
坐标工1:110FCDA57615705D5E7B9324AC4B856D23E6D9188B2AE477
坐标y1:1C65D68A4A08601DF24B431EOCAB4EBE
084772B3
9E09DCEF
计算r=(e+)modn:40F1EC59
F793D9F4
C4E755D1
(1+dA)-.79BFCF30
52C80DA7
B939E0C6
817E8581
49130D41
914A18CB
B2D96D85
260DBAAE
59514657
1A8510B2
94F79FB1
55256E83
1FB2F96F
CE25D112
DF7ECA1A
EED2CAA5
5BACDB49
122743A7
D4F5F956
GB/T32918.2—2016
计算s=((1+dA)-1(k-r*dA))modn:6FC6DAC32C5D5CF10C77DFB20F7C2EB667A45787
2FB09EC56327A67EC7DEEBE7
消息M的签名为(r,s):
值r:40F1EC59F793D9F49E09DCEF49130D4194F79FB1EED2CAA55BACDB49C4E755D1值$:6FC6DAC32C5D5CF10C77DFB20F7C2EB667A457872FB09EC56327A67EC7DEEBE7验证各步骤中的有关值:
密码杂凑算法值e=Hz5s(M'):B524F552CD82B8B028476E005C377FB19A87E6FC682D48BB
5D42E3D9B9EFFE76
计算t=(+s')modn:2B75F07ED7ECE7CCC1C8986B991F441AD324D6D6
19FE06DD
63ED32E0 C997C801
计算椭圆曲线点(,y=[sG:
坐标:7DEACE5FD121BC385A3C63172249F413D28C17291A60DFD83
92D22BOA
B835A453
坐标y:2E49D5E5279E5FA91E71FD8F计算椭圆曲线点(,y)=[]PA:坐标:1657FA75BF2ADCDC3C1F6CF0693A64A3
5AB7B45E
坐标yoo:19F0115F21E16D2F5C3A485F8575A128计算椭圆曲线点(ri,yi)=[s']G+[]P:坐标i:110FCDA57615705D5E7B9324C4A94611
15A4FC9D
79F34EDC
04D3ACBE
BBCDDF80
AC4B856D
坐标yi:1C65D68A4A08601D
F24B431E
OCABAEBE
计算R=(e+)modn:40F1EC59
5BACDB49C4E755D1
A.3Fz上的椭圆曲线数字签名
F793D9F4
椭圆曲线方程为:y十ay=十a十b示例2:F2m-257
基域生成多项式:2257+a12+1
系数a:0
23E6D918
084772B3
9E09DCEF
8E4085CF
8BDDEBD0
A669CB25
296A62F6
AC2EB842
8B2AE477
817E8581
49130D41
59514657
1A8510B2
94F79FB1
64F17A9F
DD058E50
CE25D112
DF7ECA1A
EED2CAA5
系数6:00E78BCD09
746C202378A7E72B12BCE00266B9627ECB0B5A25367AD1AD
4CC6242B
基点G=(TG,yG)其阶记为n。
坐标G:00CDB9CA7F1E6B0441 F658343F4B10297C0EF9B6491082400A62E7A7485735FADD坐标G:013DE74DA65951C4D76DC89220D5F7777A611B1C38BAE260B175951DC8060C2B3E阶:7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC972CF7E6B6F900945B3C6A0CF6161D待签名的消息M:messagedigest私钥dA:771EF3DBFF5F1CDC32B9C572930476191998B2BF7CB981D7F5B39202645F0931公钥PA-(TAYA):
坐标A:01
65961645
坐标YA:01
68652213
281A8626
OD590FB8
607B917F
DE635D8F
657D7E93
82F1EA5CD931F40F
6627F357
CA715CC6
542653B2
BF3DO5BE
D5434544
F3F75DA5
杂凌值Z=H25(ENTLAlIDAalblTllyGllyA)。ZA:26352AF8
2EC19F20
签名各步骤中的有关值:
M=ZAIM
26352AF8 2EC19F20
7BBC6F94
7BBC6F94
61676520 64696765 7374
74E11E90
74E11E90
CEOF7DDA
CEOF7DDA
密码杂漆算法值e=H255(M):AD673CBDA3114171
46C17C6F
A0AA3B12
产生随机数:36CD79FC
CE03B27F
CE03B27F
801817E8
801817E8
29A9EAA5
F9ABIAAI
48166612
97A81FD5
97A81FD5
6D657373
633AD477
18A84DFD
46D454C397703D6498158C605399B3418E24B7357A8A7B4A
ADA186D6
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。