ICS35.040
中华人民共和国国家标准
GB/T32918.3—2016
信息安全技术
SM2椭圆曲线公钥
密码算法第3部分:密钥交换协议Information security technologyPublic key cryptographic algorithmSM2 based on elliptic curves-Part 3:Key exchange protocol2016-08-29发布
中华人民共和国国家质量监督检验检疫总局中国国家标准化管理委员会
2017-03-01实施
1范围
规范性引用文件
3术语和定义
4符号和缩略语
算法参数与辅助函数
椭圆曲线系统参数
免费标准bzxz.net用户密钥对
辅助函数
5.5用户其他信息
6密钥交换协议及流程
6.1密钥交换协议
6.2密钥交换协议流程
附录A(资料性附录)
A.1综述
密钥交换及验证示例
A.2F,上圆曲线密钥交换协议
A.3F2上椭圆曲线密钥交换协议
参考文献
GB/T32918.3—2016
Hii KANni KAca
HiiKAoNniKAca
GB/T32918《信息安全技术
SM2椭圆曲线公钥密码算法》分为5个部分:第1部分:总则;
第2部分:数字签名算法;
一第3部分:密钥交换协议;
—第4部分:公钥加密算法;
一第5部分:参数定义。
本部分为GB/T32918的第3部分。本部分按照GB/T1.1一2009给出的规则起草。本部分由国家密码管理局提出。本部分由全国信息安全标准化技术委员会(SAC/TC260)归口。GB/T32918.3—2016
本部分起草单位:北京华大信安科技有限公司、中国人民解放军信息工程大学,中国科学院数据与通信保护研究教育中心。
本部分主要起草人:陈建华、祝跃飞、叶顶峰、胡磊、裴定一、彭国华、张亚娟、张振峰Ⅲ
HiiKANni KAca
GB/T32918.3—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的第3部分,规定了SM2椭圆曲线密码系统的密钥交换过程。IV
HiiKAONniKAca
1范围
信息安全技术SM2椭圆曲线公钥
密码算法第3部分:密钥交换协议GB/T32918.3—2016
GB/T32918的本部分规定了SM2圆曲线公钥密码算法的密钥交换协议,并给出了密钥交换与验证示例及其相应的流程。
本部分适用于商用密码应用中的密钥交换,可满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T32918.1一2016信息安全技术SM2椭圆曲线公钥密码算法第1部分:总则GB/T32905—2016信息安全技术SM3密码杂凑算法3术语和定义
下列术语和定义适用于本文件。3.1
从A到B的密钥确认keyconfirmationfromAtoB使用户B确信用户A拥有特定秘密密钥的保证3.2
密钥派生函数key derivation function通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密密钥的函数。3.3
发起方initiator
在一个协议的操作过程中发送首轮交换信息的用户。3.4
响应方responder
在一个协议的操作过程中不是发送首轮交换信息的用户。3.5
可辨别标识distinguishingidentifier可以无歧义辨别某一实体身份的信息。4符号和缩略语
下列符号适用于本文件
A,B使用公钥密码系统的两个用户。1
HiiKAoNiKAca
GB/T32918.3—2016
dA用户A的私钥。
dB用户B的私钥。
E(F)F。上椭圆曲线E的所有有理点(包括无穷远点O)组成的集合。F。包含9个元素的有限域。
G椭圆曲线的一个基点,其阶为素数。Hash()密码杂凑算法。
H()消息摘要长度为比特的密码杂凑算法。h余因子,h=#E(F)/n,其中n是基点G的阶。IDA,IDB用户A和用户B的可辨别标识。K,KA,K=密钥交换协议商定的共享秘密密钥。KDF()密钥派生函数。
modn模n运算。例如,23mod7=2。n基点G的阶(n是#E(F)的素因子)。0椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。PA用户A的公钥。
P:用户B的公钥。
q有限域F。中元素的数目。
a,bF。中的元素,它们定义F。上的一条圆曲线E。rA密钥交换中用户A产生的临时密钥值。rB密钥交换中用户B产生的临时密钥值。l工与y的拼接,其中y可以是比特串或字节串。ZA关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。ZB关于用户B的可辨别标识、部分椭圆曲线系统参数和用户B公钥的杂凑值。#E(F。)E(F。)上点的数目,称为椭圆曲线E(F)的阶。[]P椭圆曲线上点P的k倍点,即,[]P=P+P++P,k是正整数。个
[,]大于或等于且小于或等于的整数的集合。「α1顶项函数,大于或等于的最小整数。例如,[7=7,[8.3=9。[工」底函数,小于或等于的最大整数。例如,[7]=7,[8.3」=8。&两个整数的按比特与运算。
5算法参数与辅助函数
5.1综述
密钥交换协议是两个用户A和B通过交互的信息传递,用各自的私钥和对方的公钥来商定一个只有他们知道的秘密密钥。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。
5.2椭圆曲线系统参数
椭圆曲线系统参数包括有限域F。的规模q(当=2\时,还包括元素表示法的标识和约化多项式):定义椭圆曲线E(F)的方程的两个元素αbEF:E(F)上的基点G=(rG,yc)(G≠O),其中工G和yG是F。中的两个元素G的阶n及其他可选项(如n的余因子h等)。椭圆曲线系统参数及其验证应符合GB/T32918.1一2016第5章的规定。2
HiiKANni KAca
5.3用户密钥对
GB/T32918.32016
用户A的密钥对包括其私钥dA和公钥PA=[dAJG=(TA*yA),用户B的密钥对包括其私钥dB和公钥P-[dJG=(工By)。
用户密钥对的生成算法与公钥验证算法应符合GB/T32918.1一2016第6章的规定。5.4辅助函数
5.4.1概述
在本部分规定的椭圆曲线密钥交换协议中,涉及三类辅助函数:密码杂凑算法,密钥派生函数与随机数发生器。这三类辅助函数的强弱直接影响密钥交换协议的安全性。5.4.2密码杂凑算法
本部分规定使用国家密码管理局批准的密码杂凑算法,如SM3密码杂凑算法。5.4.3密钥派生函数
密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。
密钥派生函数需要调用密码杂凑算法。设密码杂凑算法为H,(),其输出是长度恰为比特的杂凑值。密钥派生函数KDF(Z,klen):输人:比特串Z,整数klen[表示要获得的密钥数据的比特长度,要求该值小于(232一1)]。输出:长度为klen的密钥数据比特串K。a)初始化一个32比特构成的计数器ct=0x00000001;b)对i从1到klen/执行:
1)计算Ha.=H(zlct);
2)ct++
c)若klen/u是整数,令Ha![t=Ha[mn/],否则令Ha![im/为Ha[aim/a最左边的(klen一(u×Lklen/J))比特;d)令K=Ha ll Ha l . Ha[ im/-Il Ha![a/]。5.4.4随机数发生器
本部分规定使用国家密码管理局批准的随机数发生器。5.5用户其他信息
用户A具有长度为entlenA比特的可辨别标识IDA,记ENTLA是由整数entlenA转换而成的两个字节,用户B具有长度为entlenB比特的可辨别标识IDB,记ENTLB是由整数entlen转换而成的两个字节。在本部分规定的椭圆曲线密钥交换协议中,参与密钥协商的A,B双方都需要用密码杂凑算法求得用户A的杂凑值ZA和用户B的杂凑值ZB。按GB/T32918.1一2016中4.2.5和4.2.6给出的方法,将椭圆曲线方程参数a、b、G的坐标TG、c和PA的坐标工A、YA的数据类型转换为比特串,ZA=H256(ENTLAIDlabllyGAyA)按GB/T32918.1—2016中4.2.5和4.2.6给出的方法,将椭圆曲线方程参数ab,G的坐标工G、G和Ps的坐标工B、yB的数据类型转换为比特串,Z=H256(ENTLBllIDlalbllTGllyGlTBlly)。3
HiiKAoNhiKAca
GB/T32918.3—2016
6密钥交换协议及流程
6.1密钥交换协议
设用户A和B协商获得密钥数据的长度为klen比特,用户A为发起方,用户B为响应方。用户A和B双方为了获得相同的密钥,应实现如下运算步骤:记w=[([log(n)/2)-1。
用户A:
Ai:用随机数发生器产生随机数rAE[1,n一]A2:计算椭圆曲线点RA=[rAJG=(a1,y1);A:将RA发送给用户B;
用户B:
B:用随机数发生器产生随机数rE[1,n一1];Bz2:计算椭圆曲线点R=[rJG=(2,y2)B:从RB中取出域元素工2按GB/T32918.1一2016中4.2.8给出的方法将工2的数据类型转换为整数,计算2=2十(工2&(2一1))B:计算t=(d+2r)modn;
Bs:验证RA是否满足椭圆曲线方程,若不满足则协商失败,否则从R中取出域元素工1,按GB/T32918.1一2016中4.2.8给出的方法将的数据类型转换为整数,计算至,=2*十(z&(2—1));
B:计算椭圆曲线点V=[h·t]PA十[TJRA)=(Tvyv),若V是无穷远点,则B协商失败;否则按GB/T32918.1一2016中4.2.6和4.2.5给出的方法将工v.Vv的数据类型转换为比特串;B:计算K=KDF(TylyvlZAZB,klen)Bg:(选项)按GB/T32918.1一2016中4.2.6和4.2.5给出的方法将RA的坐标工1y和R的坐标zyz的数据类型转换为比特串,计算S=Hash(Ox02IllHash(IlZlZllly2 ll))
B:将RB(选项SB)发送给用户A:用户A:
A4:从RA中取出域元素工1,按GB/T32918.1一2016中4.2.8给出的方法将工1的数据类型转换为整数,计算工1=2十(1&(2\-1));As:计算tA=(dA+T*rA)modn;
A:验证R是否满足椭圆曲线方程,若不满足则协商失败:否则从R中取出域元素工2,按GB/T32918.1一2016中4.2.8给出的方法将工2的数据类型转换为整数,计算工2=2十(工2&(20—1)):
A?:计算椭圆曲线点U=[h·tAJ(P十[T,]R)=(Tuyu),若U是无穷远点,则A协商失败:否则按GB/T32918.1一2016中4.2.6和4.2.5给出的方法将3u-yu的数据类型转换为比特串;A:计算KA=KDF(aullyuZAllZB,klen);Ag:(选项)按GB/T32918.1—2016中4.2.6和4.2.5给出的方法将RA的坐标1*yi和R的坐标T2y的数据类型转换为比特串,计算S,=Hash(Ox02lyulHash(uZAIlZly工2y)),并检验S,=S是否成立,若等式不成立则从B到A的密钥确认失败;A1o:(选项)计算S=Hash(Ox03lyullHash(TulZAllZlyillT2ly2)),并将SA发送给用户B。
用户B:
GB/T32918.3—2016
Bo:(选项)计算S=Hash(Ox03IlvlHash(lZAlZllyllxly2)),并检验S=SA是否成立,若等式不成立则从A到B的密钥确认失败。注:如果Z,Z不是用户A和B所对应的杂凑值,则自然不能达成一致的共享秘密值。密钥交换协议过程的示例参见附录A。
6.2密钥交换协议流程
密钥交换协议流程见图1。
发起方用户A的原始数据
(椭圆曲线系统参数Z、Zg、da、Pa、Pa)第1步:产生随机数rE[1,n-1]
第2步:计算R=[r]G(x)
第3步:将RA发送给用户B
第4步:取=2-+(x&(2\-1))
第5步:计算=(da+x,r)modn
Ra是否满足曲线方程?
第6步:计算=2*+(,&(21))
第7步:计算圆曲线点
U=[hA] (Pa+[,]Rs)=(, yu)
第8步:计算KA=KDF(xullyullZAllZe,klen)第9步:(选项)计算
S,=Hash(ox02ll yullHash(xull zall all xllyll xallya))香
第10步:(选项)计算
S-Hah(x3lyllHahlZlZlllly)
并将SA发送给用户B
A协商失败
协商失败
响应方用户B的原始数据
(椭圆曲线系统参数ZA、Zz、dg、Pg、PA)第1步:产生随机数E[1,n-1]
第2步:计算Ra=[]G=(xy)
第3步:取-2+&(2--1))
第4步,计算g=(dg+,g)modn
RA是否满足曲线方程?
第5步:计算=2+(x&(2\-1))第6步:计算圆曲线点
V=[h\T] (PA+[,]R)=()
第7步:计算Kg=DF(xllyllZllZg,klen)第8步:(选项)计算
S=Hash(ox02llyrllHashCrrll zallZallr,llyillxallya)第9步:将R:(选项Sg)发送给用户A第10步:(选项)计算
S=Hsh(3|llHh(l//llll/xl))
S,=SA?
从A到B的密钥确认成功
B协商失败
密钥交换协议流程
GB/T32918.3—2016
A.1综述
附录A
(资料性附录)
密钥交换及验证示例
本附录选用GB/T32905一2016给出的密码杂凑算法,其输人是长度小于26的消息比特串,输出是长度为256比特的杂凑值,记为H25s()。本附录中,所有用16进制表示的数,左边为高位,右边为低位。设用户A的身份是:
[email protected]。用GB/T1988编码记IDA:414C49434531
3233405941484F4F2E434F4D。ENTLA=0090。设用户B的身份是:
[email protected]。用GB/T1988编码记IDB:423536405941484F4F2E434F4D。ENTL=0088。A.2F,上椭圆曲线密钥交换协议椭圆曲线方程为:y=t\十ar十b示例1:F-256
494C4C34
素数P:8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3系数:787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498系数6:63E4C6D3B23B0C849CF84241484BFE48F61D59A5 B16BA06E6E12D1DA27C5249A余因子h:1
基点G=(cye),其阶记为n。
坐标G:421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D坐标yG:0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2阶n:8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7用户A的私钥dA:6FCBA2EF9AE0AB902BC3BDE3FF915D44BA4CC78F88E2F8E7F8996D3B8CCEEDEE
用户A的公钥PA=(ZA.YA):
坐标A:3099093BF3C137D8FCBBCDF4A2AE50F3B0F216C3122D79425FE03A45DBFE1655坐标A:3DF79E8DAC1CF0ECBAA2F2B49D51A4B387F2EFAF482339086A27A8E0 5BAED98B用户B的私钥d:5E35D7D3F3C54DBAC72E61819E730B019A84208CA3A35E4C2E353DFCCB2A3B53
用户B的公钥P=(工B+ye):
坐标B:245493D446C38D8CC0F118374690E7DF633A8A4BFB3329B5ECE604B2B4F37F43坐标yB:53C0869F4B9E17773DE68FEC45E14904E0DEA45BF6CECF9918C85EA047C60A4C杂漆值ZA-H2s(ENTLAIIDAlIlbTGIyGTAIyA)。ZA:E4D1D0C3CA4C7F11BC8FF8CB3F4C02A78F108FA098E51A668487240F
75E20F31
杂凌值Z-H25(ENTLllIDa6工Glyl工ly)。ZB:6B4B6D0E276691BD4A11BF72F4FB501AE309FDAC
密钥交换A~A步骤中的有关值:B72FA6CC
336E6656
119ABD67
产生随机数rA:83A2C9C8B96E5AF70BD480B4327257F1
72409A9A
EBB73F5B
073354B248668563
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。