SM2密码算法使用规范.docx
12页ICs 35.040 L 80 备案号:38307--2013BM 中华人民共和国密码行业标准GM/T 0009—2012SM2密码算法使用规范SM2 cryptography algorithm application specification2012-1 1—22发布 2012—1 1-22实施国家密码管理局发布GM/T 0009--20 12目次前言 · · .Bl言-·-·....-...· - . -.--..1范围 · ·- - . IⅡ12规范性引用文件- - . 13术语和定义· l4符号和缩略语· · · 一 15SM2的密钥对· . I5.1SM2私钥l5.2SM2公钥26数据转换26.1位串到8位字节串的转换· · . . 26.28位字节串到位串的转换 · -· . . 2 6.3整数到8位字节串的转换 ·· · · 26.48位字节争劭整数的转换 . 27数据格式 . ... 37.1密钥数据格式· ·· · - 3 7.2加密数据格式. . 一 37.3签名数据格式 · ··· . 37.4密钥对保护数据格式· · 38预处理 · · ·· - 48.1预处理1· 4 8.2预处理2· . 49计算过程 - · · ·· .-. 49.1生成密钥. . 一 49.2女Ⅱ密--- ······- ·-···..59.3解密 ·-· · ·- . . 59.4数字签名 .. . .. 59.5签名验证 ·· ·· 59.6密钥协商 .. . -- 610用户身份标识ID的默认值· . 7GM/T 0009—2012前言本标准按照GB/T 1.1—2009给出的规则起草。
请注意本文件的某些内容可能涉及专利本文件的发布机构不承担识别这些专利的责任 本标准由国家密码管理局提出并归口 本标准起草单位:北京海泰方圆科技有限公司、卫士通信息产业股份有限公司、无锡江南信息安全工程技术中心、兴唐通信科技股份有限公司、山东得安信息技术有限公司、上海格尔软件股份有限公司 本标准主要起草人:刘平、蒋红字、柳增寿、曾宇波、李元正、徐强、谭武征、孔凡玉、王妮娜GM/T 0009—2012引言SM2椭圆曲线密码算法(以下简称SM2)是国家密码管理局批准的一组算法,其中包括$M2-I椭 圆曲线数字签名算法、SM2—2椭圆曲线密钥协商协议、SM2—3椭圆曲线加密算法 本标准的目标是保证SM2使用的正确性,为SM2密码算法的使用制定统一的数据格式和使用 方法 本标准中涉及的SM3算法是指国家密码管理局批准的SM3密码杂凑算法 本标准仅从算法应用的角度给出SM2密码算法的使用说明,不涉及SM2密码算法的具体编制细节HGM/T 0009--2012SM2密码算法使用规范1范围 本标准定义了SM2密码算法的使用方法,以及密钥、加密与签名等的数据格式本标准适用于SM2密码算法的使用,以及支持SM2密码算法的设备和系统的研发和检测2规范性引用文件 下列文件对于本文件的应用是必不可少的。
凡是注El期的引用文件,仅注日期的版本适用于本文件凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件 GM/T 0003(所有部分)SM2椭圆曲线公钥密码算法GM/T 0004SM3密码杂凑算法3术语和定义 下列术语和定义适用于本文件1算法标识algorithm identifier用于标明算法机制的数字化信息3.2SM2密码算法SM2 algorithm 一种椭圆曲线密码算法,密钥长度为256比特3.3 SM3算法SM3 algorithm 一种杂凑算法,输出长度为256比特4符号和缩略语 下列缩略语适用于本文件:ECB电码本模式 ECC椭圆曲线密码算法(Elliptic Curve Cryptography)ID 用户身份标识(Identity)5SM2的密钥对5.1SM2私钥 SM2私钥是一个大于或等于1且小于n一1的整数(n为SM2算法的阶,其值参见GM/T 0003)简记为k,长度为256位CoM/T 0009--20 125.2SM2公钥 SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来表示,记为(x,y),简记为Q,每 个分量的长度为256位。
6数据转换在SM2算法的使用中将涉及8位字节串(Octet String)和位串(Bit String)之间的转换,主要包括 以下四种形式6.1位串到8位字节串的转换 位串长度若不是8的整数倍,需先在它的左边补0,以保证它的长度为8的倍数,然后构造8位字节串,转换过程如下: 输入:一个长度为blen的位串B 输出:一个长度为mlen的字节串M,其中mien的取值为(blen+7)/8的整数部分 动作:将位串B—EoB- B‰一转换到8位字节串M=MoM Mm采用如下方法: 从0≤i≤mlen一1,设置:MBb【曲一B 8(d—l)Bbl一7—8(mk一1) BbI一1 8cml一l o对于M最左边8-blen%8位设置为0,右边设置为BOB, B8—8bkn一 输出M6.28位宇节串到位串的转换8位字节串到位串转换过程如下: 输人:一个长度为mien的8位字节串M 输出:一个长度为blen=(8mien)的位串B动作:将8位字节串M=M Mm转换到位串B=BB, B采用如下方法: 从o≤i≤mlen1,设置:B“B8B阱7一M,输出B6.3整数到8位字节串的转换 一个整数转换为8位字节串,基本方法是将其先使用二进制表达,然后把结果位串再转换为8位字节串。
以下是转换流程:输入:一个非负整数X,期望的8位字节串长度mien基本限制为:28‘”1’>x输出:一个长度为mien的8位字节串M 动作:将基于28盅256的X值x—x如2“甜一”+Xmkn 2 2“耐一”+ +X128+Xo转换为一个8位字节串M=M一,采用如下方法: 从o≤i≤mlen一1,设置:M—x岫 ; 输出M6.48位字节串到整数的转换 可以简单地把8位字节串看成以256为基表示的整数,转换过程如下: 输入:一个长度mien的8位字节串M2GM/'1 0009--20}2 输出:一个整数X动作:将一个8位字节串M--MMt M“一转换为整数x方法如下 将M;看作[o~255]中的一个整数酬en--1 x一∑28‘“一1一’M. 120 输出X7数据格式7.1密钥数据格式 SM2算法私钥数据格式的ASN.1定义为:SM2PrivateKey::=INTEGER SM2算法公钥数据格式的ASN 1定义为:SM2PublicKey::=BIT STR】NG SM2PublicKey为BIT STRING类型,内容为04II xII Y,其中,x和Y分别标识公钥的x分量和Y 分量,其跃度各为256位。
7.2加密数据格式 SM2算法加密后的数据格式的ASN.1定义为: SM2Cipher::一SEQENCE(XCoordinateINTEGER, 一x分量 YCoordinate INTEGER, 一y分量 HASH OCTET STRING SIZE(32), 一杂凑值 CipherText OCTET STRING 一密文) 其中,HASH为使用SM3算法对明文数据运算得到的杂凑值,其长度固定为256位 是与明文等长的密文7.3签名数据格式 SM2算法签名数据格式的ASN.1定义为: 掩 舭m=ⅢR INTEGER 签名值的第一部分 INTEGER签名值的第二部分o, R和S的长度各为256位7.4密钥对保护数据格式 在SM2密钥对传递时,需要对SM2密钥对进行加密保护具体的保护方法为: a)产生一个对称密钥 b)按对称密码算法标识指定的算法对SM2私钥进行加密,得到私钥的密文。
若对称算法为分组 算法,则其运算模式为ECBc)使用外部SM2公钥加密对称密钥得到对称密钥密文 d)将私钥密文、对称密钥密文封装到密钥对保护数据中3GM/T 0009--2012SM2密钥对的保护数据格式的ASN.1定义为SM2EnvelopedKey::--SEQUENCE(symAlgID Algorithmldentifier,一对称密码算法标识 symEncryptedKeySM2Cipher, 一对称密钥密文 Sm2PublicKey SM2PublicKey,-SM2公钥 Sm2EncryptedPrivateKey BIT STRING一sM2私钥密文8预处理8.1预处理1 预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到z值的过程z值用于预 处理2,也用于SM2密钥协商协议输入:ID字节串 用户身份标识 QSM2PublicKey 用户的公钥 输出:z字节串 预处理l的输出 计算公式为: Z=SM3(ENTLID|1 a||bI|】【GylI yA)其中: ENTL为由2个字节表示的D的比特长度{ ID 为用户身份标识;a、b 为系统曲线参数;】【G、YG为基点;x“、Y“ 为用户的公钥。
详细的计算过程参见GM/T 0003和GM/T 00048.2预处理2 预处理2是指使用z值和待签名消息,通过SM3运算得到杂凑值H的过程杂凑值H用于SM2数字签名 输入:z字节串 预处理2的输人 M字节串 待签名消息 输出:H字节串 杂凑值 计算公式为: H—SM3(Z||M) 详细的计算过程见GM/T 0003和GM/T 00049计算过程9.1生成密钥 SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥其中 私钥的长度为256位,公钥的长度为512位 输入:无4GM/T 0009—2012 输出:k SMZPrivateKey SM2私钥 QSM2PublicKey SM2公钥 详细的计算过程见GM/T 00039.2加密 SM2加密是指使用指定公开密钥对明文进行特定的加密计算,生成相应密文的过程该密文只能由该指定公开密钥对应的私钥解密 输入:QSM2PublicKey SM2公钥ITI字节串 待加密的明文数据 输出:C SM3Cipher 密文其中: 输出参数c的格式在7.2中定义; 输出参数c的XCoordinate、YCoordinate为随机产生的公钥的x分量和y分量; 输出参数c中的HASH的计算公式为: HAsH—SM3(x||m||y) 其中,x,Y为Q的x分量和Y分量; 输出参数C中CipherText为加密密文,其长度等于明文的长度。
详细的计算过程见GM/T 0003和GM/T 00049.3解密 SM2解密是指使用指定私钥对密文进行解密计算,还原对应明文的过程 输入:d SM2PrivateKeySM2私钥C SM2Cipher密文输出:m字节串 与密文对应的明文 ITI为SMZCipher经过解密运算得到的明文,该明文的长度与输人参数C中CipherText的长度相同 详细的计算过程见GM/T 00039.4数字签名 SM2签名是指使用预处理2的结果和签名者私钥,通过签名计算得到签名结果的过程 输入:d SM2PrivateKey签名者私钥 H字节串 预处理2的结果 输出:sign SM2Signature 签名值 详细的计算过程见GM/T 00039.5签名验证 SM2签名验证是指使用预处理2的结果、签名值和签名者的公钥,通过验签计算确定签名是否通过验证的过程 输人:H字节串 预处理2。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


