GB/T 32918.4-2016
基本信息
标准号:
GB/T 32918.4-2016
中文名称:信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法
标准类别:国家标准(GB)
标准状态:现行
出版语种:简体中文
下载格式:.rar .pdf
下载大小:4383KB
相关标签:
信息安全
技术
椭圆
曲线
公钥
密码
算法
标准分类号
关联标准
出版信息
相关单位信息
标准简介
GB/T 32918.4-2016 信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法
GB/T32918.4-2016
标准压缩包解压密码:www.bzxz.net
标准内容
ICS35.040
中华人民共和国国家标准
GB/T32918.4—2016
信息安全技术
SM2椭圆曲线公钥密
码算法第
第4部分:公钥加密算法www.bzxz.net
Information security technologyPublic key cryptographicalgorithm SM2 based on elliptic curves-Part 4:Public key encryption algorithm2016-08-29发布
中华人民共和国国家质量监督检验检疫总局中国国家标准化管理委员会
2017-03-01实施
1范围
规范性引用文件
术语和定义
符号缩略语
算法参数与辅助函数
椭圆曲线系统参数
用户密钥对
辅助函数
密码杂凑算法
密钥派生函数
随机数发生器
加密算法及流程
加密算法
6.2加密算法流程
7解密算法及流程
解密算法
7.2解密算法流程
附录A(资料性附录)
A.1综述.
消息加解密示例
A.2F,上椭圆曲线消息加解密
A.3F2m上椭圆曲线消息加解密
参考文献
GB/T32918.4—2016
Hii KAoi KAca
Hii KAoi KAca
SM2椭圆曲线公钥密码算法》分为5个部分:GB/T32918《信息安全技术
第1部分:总则;
一第2部分:数字签名算法;
第3部分:密钥交换协议;
一第4部分:公钥加密算法;
一第5部分:参数定义。
本部分为GB/T32918的第4部分。本部分按照GB/T1.1一2009给出的规则起草。本部分由国家密码管理局提出。本部分由全国信息安全标准化技术委员会(SAC/TC260)归口。GB/T32918.4—2016
本部分起草单位:北京华大信安科技有限公司,中国人民解放军信息工程大学,中国科学院数据与通信保护研究教育中心。
本部分主要起草人:陈建华、祝跃飞、叶顶峰、胡磊、裴定一、彭国华、张亚娟、张振峰。日
iiKAoNiKAca
GB/T32918.4—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的第4部分,规定了SM2椭圆曲线密码系统的加密解密过程。IN
HiiKAoNiKAca
1范围
信息安全技术SM2圆曲线公钥密
码算法第4部分:公钥加密算法
GB/T32918.4-2016
GB/T32918的本部分规定了SM2椭圆曲线公钥密码算法的公钥加密算法,并给出了消息加解密示例和相应的流程。
本部分适用于商用密码应用中的消息加解密,消息发送者可以利用接收者的公钥对消息进行加密接收者用对应的私钥进行解密,获取消息。2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T32918.1一2016信息安全技术SM2椭圆曲线公钥密码算法第1部分:总则GB/T32905—2016信息安全技术SM3密码杂凑算法3术语和定义
下列术语和定义适用于本文件。3.1
秘密密钥
secretkey
在密码体制中收发双方共同拥有的、而第三方不知道的一种密钥。3.2
消息message
任意有限长度的比特串。
tkey derivation function
密钥派生函数
通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密密钥的函数。4符号缩略语
下列符号和缩略语适用于本文件A,B使用公钥密码系统的两个用户。dB用户B的私钥。
E(F。)F。上椭圆曲线E的所有有理点(包括无穷远点O)组成的集合。F。包含q个元素的有限域。
G椭圆曲线的一个基点,其阶为素数。Hash()密码杂凑算法。
H,()消息摘要长度为比特的密码杂凑算法。1
HiiKAoNiKAca
GB/T32918.4—2016
KDF)密钥派生函数。
h余因子,h=#E(F)/n,其中n是基点G的阶。M待加密的消息。
M”解密得到的消息。
n基点G的阶(n是#E(F,)的素因子)。O圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。PB用户B的公钥。
q有限域F。中元素的数目。
a,bF,中的元素,它们定义F上的一条椭圆曲线E。工y工与y的拼接,工、y是比特串或字节串。[k]P椭圆曲线上点P的k倍点,即,[k]P=P+P++P,k是正整数。员个
[工,]大于或等于工且小于或等于的整数的集合。「1顶函数,大于或等于的最小整数。例如「77=7,「8.3=9。Ly」底函数,小于或等于的最大整数。例如,[7=7L8.3J=8。#E(F,)E(F,)上点的数目,称为椭圆曲线E(F)的阶。5算法参数与辅助函数
5.1综述
公钥加密算法规定发送者用接收者的公钥将消息加密成密文,接收者用自已的私钥对收到的密文进行解密还原成原始消息。
5.2椭圆曲线系统参数
椭圆曲线系统参数包括有限域F。的规模q(当9=2时,还包括元素表示法的标识和约化多项式);定义椭圆曲线E(F)的方程的两个元素a、beF。E(F。)上的基点G=(c,c)(G≠O),其中Tc和yc是F。中的两个元素;G的阶n及其他可选项(如n的余因子h等)。圆曲线系统参数及其验证应符合GB/T32918.1一2016第5章的规定。5.3用户密钥对
用户B的密钥对包括其私钥d.和公钥P=[dBJG。用户密钥对的生成算法与公钥验证算法应符合GB/T32918.1一2016第6章的规定。5.4辅助函数
5.4.1概述
本部分规定的椭圆曲线公钥加密算法涉及三类辅助函数:密码杂凑算法、密钥派生函数和随机数发生器。这三类辅助函数的强弱直接影响加密算法的安全性。5.4.2密码杂凑算法
本部分规定使用国家密码管理局批准的密码杂凑算法,如SM3密码杂凑算法。2
HiiKAoNiKAca
5.4.3密钥派生函数
GB/T32918.4—2016
密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。
密钥派生函数需要调用密码杂凑算法。设密码杂凑算法为H,,其输出是长度恰为U比特的杂值,密钥派生函数KDF(Z,klen):输人:比特串Z,整数klem【表示要获得的密钥数据的比特长度,要求该值小于(232一1)u]。输出:长度为klen的密钥数据比特串K。a)初始化一个32比特构成的计数器ct=0x00000001:b】对i从1到「elen/u执行:
1)计算Ha,=H,(Zlct)
2)ct++:
c)若klen/u是整数,令Ha!rmen/o=Harlen/,否则令Ha!「ean/为Haram/u最左边的(klen一(uXLklen/uD比特:d)令K-Hai ll Ha2 ll..lHaren/uhi llHa![ulen/u5.4.4随机数发生器
本部分规定使用国家密码管理局批准的随机数发生器。6加密算法及流程
6.1加密算法
设需要发送的消息为比特串M,klen为M的比特长度。为了对明文M进行加密,作为加密者的用户A应实现以下运算步骤:A:用随机数发生器产生随机数kE1,n一17A2:计算椭圆曲线点C,=[kJG=(T1,1),按GB/T32918.1—2016中4.2.9和4.2.5给出的方法,将C的数据类型转换为比特串:A:计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出;A4:计算椭圆曲线点[k]Pz=(工2,2),按GB/T32918.1—一2016中4.2.6和4.2.5给出的方法,将坐标2.y2的数据类型转换为比特串;As:计算t=KDF(r,lly,klen),若t为全比特串,则返回AA6:计算C=Mt;
A计算C=Hash(My)
As:输出密文C=C,lCallC2。
注:加密过程的示例参见附录A。6.2加密算法流程
加密算法流程见图1。
HiiKAoNiKAca
GB/T32918.4—2016
7解密算法及流程
7.1解密算法
用户A的原始数据
(椭圈曲线系统参数、长度为len比特的消息M、公钥P.)第1步:产生随机数ke[1,n-1]
第2步:计算椭曲线点C,=[]G=(1,J1】第3步:计算椭圈曲线点S=[h]Ps是
第4步:计算【】P=(12,J2)
第5步:计算1=KDF(x2llye,klen)是
设klen为密文中C,的比特长度。↑是否全0
第6步:计算C2M@1
第7步:计算Cg=Hash(x2lMIJ2)第8步:输出密文C=C,llCsllCz
图1加密算法流程
报错并退出
为了对密文C=C,IC。IC,进行解密,作为解密者的用户B应实现以下运算步骤:GB/T32918.4—2016
B1:从C中取出比特串C,,按GB/T32918.1一2016中4.2.4和4.2.10给出的方法,将C,的数据类型转换为椭圆曲线上的点,验证C,是否满足椭圆曲线方程,若不满足则报错并退出;B2:计算椭圆曲线点S=[hJC,,若S是无穷远点,则报错并退出;B3:计算[dJC,=(2,y2),按GB/T32918.1—2016中4.2.6和4.2.5给出的方法,将坐标±2y2的数据类型转换为比特串;
B4:计算t=KDF(,ly2,klen),若t为全O比特串,则报错并退出;B5:从C中取出比特串Cz,计算M=C2t;B6:计算u=Hash(工zllM'lly2),从C中取出比特串Cs,若u≠C3,则报错并退出;B7:输出明文M'。
注:解密过程的示例参见附录A。7.2解密算法流程
解密算法流程见图2。
GB/T32918.4—2016
用户B的原始数据
(精圆曲线系统参数、密文C=C,llCsllCg、私钥dg)第1步:从密文中取出C
验证Ci是否满足曲线方程
第2步:计算椭圆曲线点S=[h]C
第3步:计算[dgCi=(2,J2)
第4步计算I=KDF(2lly2len)
t是否全0
第5步:计算M=Cz7
第6步:计算u=Hash(x2lM\ly2)M=C.?
第7步,输出明文M\
解密算法流程
报错并退出
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。