GM-T0009-2023 SM2密码算法使用规范.docx
ICS35.030CCS1.80中华人民共和国密码行业标准GM/T00092023代GMT()0092012SM2密码算法使用规范SM2cryptographya1.gorithmapp1.icationspecification2023-12-04发布2024-06-01实施国家密码管理局发布目次向UnI1.1.1苑困I2规范性引用文件I3术语和定义I4缩略语I5SM2密钥对I6数据折换27IMe格式38预处理49fWJiS5W用户身WWIDfiW1.值7本文件按照GBJT1.12020标求化工作导则第1部分:林优化文件的结构和起草观其心的规定起草.本文件代昔GM?TOOo92012£SM2密码算法使用双范:K'GMT(X)O92012相比,除结构训整和编班性改动外,主要技术变化如下:a)更改了SM2私钥(见5.1,2012年版的5.D;b)更改了SM2公桃(见5.2,2012年版的5.2);O更改了SM2公钥格式(见7.1,2012年版的7.I):d)更改了密钥对保护数据格式(见7.4,2012年版的7.4):c)更改了预处理1(见8.1.2012年版的8.D.请注意木文件的某些内容可能涉及专刑.本文件的发布机构不承担识别C利的诜任,本文件由密码行业标准化技术委员会提出弁白口.本文件起草单位:北京海泰方圆科技股份有限公用、北京佑安世纪科技股份有限公司'北京小雷科技有限公司、中电科网络安全科技股份有限公司、北京国味信安科技有限公司、无锡江南信息安全工程技术中心、兴购通信科技有限公司、山东得安信息技术有限公司、格尔软件股份有限公司、山东大学.本文件主要起取人:刘平,蒋红宇、柳指寿、普宇波、袁峰'李元正、徐强、谭武征、孔凡玉、土妮娜、汪宗斌、安晓江、罗俊、徐明翼、郑强、马洪富.本文件及其所代替文件的历次版本发布情况为:2012年首次发布为GMfT00092012:本次为第一次修订.SM2密码算法使用规范1范围本文件定义/SM2密:码算法的使用方法,也定义了相关的数据格式.本文件适用于SM2密码算法的使用,也适用于支持SM2密码兑法的设备和系统的研发和检测.2规范慢引用文件下列文件中的内容通过文中的规慈性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件:不注日期的引用文件,其及新版本(包括所有的修改单)适用于本文件。GB/T32905-2016信息安全技术SM3密码杂凑算法GB,T32918.1-2016信息安全技术SM2惭阳曲线公物密研算法第1部分:总则GB.32918.22016信息安全技术SM2椭阳曲线公纲密印,算法第力.;分:数,格算法GB.T32918.3-2016信息安全技术SM2桶网曲殴公钢密码宓法第3部分:宓钥交换称议GB,T32918.4-2016信息安全技术SM2椭网曲线公钥密码鸵法第4部分:共钥加浙算法GBT32918.52017倍息安全技术SM2椭画曲线公的密码算法第5郃分:参故定义GMT0006密码应用标识现范GMzZ4001名同术语3术语和定义GMZ4001界定的术语和定义适用于本文件.4缩略语下列缩略谱适用于本文件.ECB电码本模式(EkC1.nmiCCodebook)ECC椭IM1.曲城缗码飘法(EI1.iPtiCCurveC11ptRraphy)ID用户身份标双(Identity)5SM2密铜对5.1 SM2私朝SM2私初是大于或等于1且小于n-1的整数(n为SM2尊法的阶,其值见GBjT32918.52017),简记为d.5.2 SM2公钥SM2公的是SM2曲线上的一个点,山横坐标和以坐标两个分地来表示,记为(x.y).简记为Q公钥值由其时应的私钊d与G进行点乘计算得到(G为SM2椭妣曲线的基点,G的取值见GB"3291852017).6数据转换6.1位串到8位字节事的转换位邢长度若不是8的整数倍,应先在它的左边补0,以保证它的长度为8的倍数,然后构造8位字节审,转换过程如下:情入:一个长度为的位串B.输出:一个长度为mien的字节申M,其中mien的取值为(b1.en+7N8的整数部分,动作;将位申B=BoBiBbienJ转换到8位字节M=M°MiMmIen采用如下方法:从OWjI,设徨.:M=Bbicn-8-X(-1-;Bbcn-7-8(-1.-).Bbcn-1.-8(mkn-1-0.对于M.,故左边8-b1.en%8位设置为0,右边设置为B°B,.B?+bcn-8m1.e,其中%示模运算.输出M.6.28位字节串到位串的转换8位字节串到位串转换过程如下:输入:一个长度为mien的8位字节中M.输出:一个长度为b1.en=(8*a1.en)的位串B.动作;将8位字节申M=MoM1.Mm1.en/转换到位/B=BoB1.Bben-I采用如下方法:从OWiWmICnI,设置:Bg;Bgi+I.Bsi+7=M.输出B.63整数到8位字节串的转换一个整数转换为8位字节中,基本方法是将此先使用二进制表达,然后把结果位中再转换为8位字节串。以下是犯换流程:输入:一个非负整数X,期望的8位字节小长度mien.基本限制为:28(px.输出:一个长度为mien的8位字节*M动作:将法于2'=256的X伯X=XmIen-128(1.en-D+xm1.e228Gn1.E-2)十+x2+x,转换为一个8位字节中M=MoM1.Mmen-I采用如下方法:¼0im1.enI.设置:Nk=Xinkn-1.-i.输出M.6 .48位字节串到整数的转换可把8位字节中看成以256为基表示的整数,转换过程如下:输入:一个长度mJen的8位字节中M,输出:一个整数工动作:将一个8位字节即M=MOMIMmIen-I转换为整数X方法如卜:物乂看作0255中的-个整数.则:,'M输出X.7 f1.格式8 .evm三M<SM2算法私钥数据楙式的ASN.1定义为:SM2PriVaIeKey;=INTEGERSM2算法公包数据格式的ASN.1定义为:SM1.Pub1.icKey:=BITSTRINGSM2Pub1.icKey为B1.TSTR1.NG类型,内容为0411XY.02IIX或者Q3X.其中X和丫均为256位.分别为公司的X分fit和y分fit.04XY为SM2反法公用数掘非压缩格式.02X和03X均为SM2算法公用数据东绵格式.当该公钥的y分心的最低位为。时,该公钢压缩格式为02X,当该公物的y分量的髭低位为1时,该公的压用格式为03X,SM2公的格式应符合GBjT32918.12016中A.5的规定。9 .2加宙敷格式SM2算法加密后的数抠格式的ASN.I定义为:SM2Cipher:=SEQUENCE(XCoon1.inwcINTEGER.一一X分加CoordinateINTEGER.y分fhashOCTETSTRINGSIZE(32).一朵溪值CipherTextOCTETSTRING密文10 3筌名敷格式SM2算法签名数据格式的ASN.I定义为,SM2SignatureSFQUENCE一签名值的第I部分-签名值的第2部分rINTEGER,sINTEGER)11 4击对保护我格式在SM2密钥对传递时,应对SM2淤钥对进行加密保护.具体的保护方法如Ka)产生个对称密钥.b)按对称密码算法标识指定的办法对SM2私钥明文进行加密,得到私包的密文.私钥明文为高字节在第的8位字节申,其长度固定为32字节,由私钥整数的二进制形式进行K比特补0至256比特后找找得到。若对称尊法为分如算法,则其运算模式为EeBC)使用外部SM2公初加密对称帝钥得到对称容用密文.d)珞私钥密文、对称密钥密文豺装到密钥时保护数据中。SM2密钥对的保护数据格式的ASN.1定义为:一对称常码算法标识一对林密钊化文-SM2公初SM2Envc1.opcdKcy:=SEQUENCESymA1.gIDAIgOri1.hmIdentincr.SymEncrypcedKeySM2Cipber.sm2Pub1.icKe>'SM1.PubIicKey,GMZT0<M)92023-SM2私胡需文sm2EncotedPrivaieKeyBITSIRING其中对称密码算法标识为SGD_SMkECB.应符合GMJTOOO6中的规定.81M预处理1是指使用篮名方的用户身份标识和签名方公钥.通过运算得到Z值的过程.Z使用于偿处理2,也用于SM2密钥协商协议。输入:IDQ输出:Z计笄公式为:字节串用户身份标识SM2Pub1.icKcy用户的公物字节串隙处理1的输出Z=SM3(1.Sip1.1.a1.1.b1.xgI1.yg1.1.xA1.1.ya)式中:Z预处理1的输出;1.用户身份标识的长度(比特:Sp一用户身价标识:a一SM2瓢即曲找参数;b一SM2椭圆曲线参数;XG基点的横坐标:yG基点的纵坐标:XA用户公饱的横坐标:y用户公钥的纵坐标.1.1.h其盛数值的二进制形式进行高比特补。至16比特后转换得到.a.b.xg,YG,XA和ya分别由其整数值的二进制形式进行高比特补0至256比特后转换得到.详细的计算过程应符合GB.T32918.22016中5.5和GB.T329052016中第5点的规定。8.292预处掰2是指使用Z值和待签名消息,通过SM3运算得到杂凑IgH的过程。杂凑值H用于SM2数字签名.输入:Z字节由一处埋1的输出M字节中待签名消息输H字节串杂淡值计算公式为:H三SM3(ZM)式中:H杂凄值:Z预处理1的输出:M带签名的消息.详细的计算过程应符合GB“329052016中第5章的规定.9计It过程9.1 生JEJSM2密钢生成是指生成SM2犯法的密阴对的过程,该密钥对包括私钥和与之对应的公钥.我表示方法见71.输入:无输H1.:kSM2PrivaeKeySM2私钥QSM2Pub1.icKcySM2公钮详细的计克过程应符合GB.T32918.12016中第6章的规定.9.2 加宙SM2加密是指使用指定公开密钥对明文进行特定的加密计算.生成相应密文的过程.该密文只能由该指定公开密钢对应的私钥解密。输入:QSMZPuNicKeySM2公旬m字节事待加密的明文数据输出:CSM2Cipher密文大中:输出参数C的格式应符合7.2中定义;怆出参数C的XCoOrdinatc、VCoordinatc为随机产生的公用的X分fit和y分量.:输出参数C中的HASH的计算公式为:HASH=SM3(QxnQ.)其中,Qx、Q,分别为Q的X分垃和y分业的长度为32字节的8位字帝申衣示;粕出参数C中。PherTeX1.为加玄密文,其长度等于明文的长度。详细的计算过程应符合GB.T32918.42016中第6瘠的规定.9.3 部宙SM2密密是指使用指定私物对密文进行密密计舞,还原对应明文的过程。输入:dSM2Priva1.eKeySM2私钢CSM2Ciphcr密文输出:m字节即与密文对应的明文m为SM2Ciphcr经过解密运算得到的明文,谖明文的长度与输入参数C中CiPhBTCXt的长度m,详细的计算过程应符合GBjT32918.42016中第7章的规定.9.4 字筌SM2绘名足指使用预处理2的结果和卷名拧私钊,通过笠名计算得到签名结果的过程.怆入:dSMZPrivaicKcy签名否,私包H字节:|;预处理2的结果输出:signSM1.Signaiure签名位详细的计电过样应符合GBjT32918.22016中第6章的规定.9.5SM2笠名验证是指使用预处理2的结果、笠名饮和茶N者的公的,通过唳笑计克偷定筌名是,育通过脸近的过程。输入;H字节事预处理2的结果SignSM2Signaturc拓名优QPub1.kKcy签名者的公物输出:为一文”表示“验证通过”.为“假”我示”验证不通过”详掴的计算过程应付i>GB门1.32918.220)6中第7章的规定.9.6««»«淅钥协麓是在两个用户之间建立一个共享秘主定钥的治倘过程,通过这种方式能鲂烧定一个共享秘密佬钠的俄.设诙钥协商双方为A、B.其楞钊而分别为3A.QA)和(1.QB.双方应获得的密切故舜的比特长度为k1.en.密钠协商协议分为两个阶段-第一阶段I产生临时密的对用户A:调用生成密钥算.法产生临时格初对(r.RA).将RA和用户A的用户身份标识IDA发送给用户B.用户B:调用生成密切算法产生临时密钥对(rgRgh将Rp和用户B的用户身份标识IDg发送给用户A.第二阶段:计津共享秘密宙包用户A:粕人分数XQASM2Pub1.kKc>用户A的公用QPSM2Pub1.icKty用户B的公钥RASM1.PuNtcKey用户A的用时公钥IDAOCTETSTRING用户A的用户身份标识RBSM2Pub!icKey用户B的临时公钊IDBOCTETS1.KING用户B的用户身份标识dASM2PtivaieKe>用户A的私钥rASM2PivaieKey用户A的临时私物k1.enINrrEGER霜要输I1.1.的密包数据的比特长哎(比特)输出叁数:KOCTCTSTRING佗长为的他的数据步我:a)BJIDA和QA作为输入参数,调用预处理1物到ZA;b)用IDS和QP作为输入参数,调用例处理1得到Zp:C)以k1.en、2Zp、<1A、rA、RA.Qp,RP为输入卷数,进行运到JK.用户B:输入参数IQBSM2PubbcKey用户B的公钩QASM1.PubIicKey用户A的公钥RPSM2PubbcKey用户B的临时公钥IDKOCTETSTRING用PB的用户身份标识RASM2Pub1.icKey用PA的临时公钥IDAOCTETSTRING用户A的用户身份标识dBSM1.PrivateKey用户B的私饱IBSM2hrivateKey用户B的临时私的R1.enINTEGER需要输出的蜜物数据的长度(比特)输出整数:KOCTTCTSTRING位长为Iden峋密钥数据步骤.a)用IDA和QA作为酶人参数,明川值处理1犯到ZA;b)用IDg和QS作为缭入卷数,调用预处理I得到Zp;O以Mai.ZA、邛、血、甲、Rp.Q.RA为验入参歆,进行运JnJ到K,详细的H绿过程应符合GB132918.32016中笫6章的规定.10用户身份标仅ID的默认值无特以约定的情况卜;用户身份标识ID为字节申,其长度为16字节其我认他从左至右依次为0x31.0x32.0x33.0x4.0x35.0x36.0x37.0x38.31.0x32.0x33.0x34.0x35.0x36.0x37.0x38.