实例介绍
SM2密码算法使用规范 GBT 35276-2017 信息安全技术 SM2密码算法使用规范
B/T35276-2017 前言 本标准按照GB/T1.1—209给出的规则起草。 请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。 本标准由全国信息安全标准化技术委员会(SAC/TC260)提出并归口。 本标准起草单位:北京海泰方圆科技股份有限公司、卫士通信息产业股份有限公司、无锡江南信息 安全工程技术中心、兴唐通信科技股份有限公司、山东得安信息技术有限公司,上海格尔软件股份有限 公司 夲标准主要起草人:刘平、蒋红宇、柳増寿、李元正、徐强、谭武征、孔凡玉、王妮娜。 GB/T35276-2017 引言 SM椭圆曲线公钥密码算法(以下简称SM2)是由GB/T32918给出的一组非对称算法,其中包括 sM2-1椭圆曲线数宇签名算法、SM2-2椭圆曲线密钥协商协议、SM23椭圆曲线加密算法。 本标准的目标是保证SM2使用的正确性,为SM2密码算法的使用制定统一的数据格式和使用 方法 本标准中涉及的SM3算法是指GB/T32905给出的一种密码杂凑算法。 本标准仅从算法应用的角度给出SM2密码算法的使用说明.不涉及SM2密码算法的具体编制 细节 B/T35276-2 信息安全技术SM2密码算法使用规范 1范围 本标准规定了SM2密码算法的使用方法,以及密钥、加密与签名等的数据格式。 本标准适用于SM2密码算法的使用,以及支持SM2密码算法的设各和系统的研发和检测。 2规范性引用文件 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文 件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件 GB/T32905—2016信息安全技术SM3密码杂凑算法 GB/T32918.1—2016信息安全技术SM2椭圆曲线公钥密码算法第1部分:总则 GB/T32918.2—2016信息安全技术SM2椭圆曲线公钥密码算法第2部分:数宇签名算法 GB/T32918.3—2016信息安全技术SM2椭圆曲线公钥密码算法第3部分:密钥交换协议 GB/T32918.4—2016信息安全技术SM2椭圆曲线公钥密码算法第4部分:公钥加密算法 GB/T32918.52017信息安全技术SM2椭圆曲线公钥密码算法第5部分:参数定义 3术语和定义 下列术语和定义适用于本文件 算法标识 algorithm identifier 用于标明算法机制的数字化信息 3.2 SM2密码算法SM2 cryptographic algorithn 由GB/T32918(所有部分)定义的一种算法 3.3 SM3密码算法SM3 cryptographic algorithm 由GB/T32905-2016定义的一种算法 4缩略语 下列缩略语适用于本文件 FCR:电码本模式( Electronics code book) ECC:椭圆曲线密码算法( Elliptic Curve Cryptography) 5SM2的密钥对 5.1SM2私钥 SM2私钥是大于1且小于m-1的整数(n为SM2算法的阶,其值见GB/T32918.5-2017的第2 GB/T35276-2017 章),简记为k,长度为256位 5.2SM2公钥 SM2公钥是SM2曲线上的一个点,由横坐标和纵坐标两个分量来表示,记为(x,y),简记为Q,每 个分量的长度为256位。 6数据转换 6.1位串到8位字节串的转换 位串长度若不是8的整数倍,需先在它的左边补0,以保证它的长度为8的倍数,然后构造8位字 节串,转换过程如下 输入;一个长度为blen的位串B。 输出:一个长度为mlen的字节串M,其中mlen的取值为(blen+7)/8的整数部分。 动作:将位串B=B3B1…B-1转换到8位字节串M=MM1……Mmn-1采用如下方法: 从1≤i≤mlen-1,设置: M:=B blen-8-8Cmlem-I 对于M,最左边8-blen%8位设置为0,右边设置为BB 8-8(men+ blen-I v 偷出M。 628位字节串到位串的转换 8位字节串到位串转换过程如下 输入:一个长度为mlen的8位字节串M 输出:一个长度为blen-(8mlen)的位串B 动作;将8信字节串M-MM1………Mn-1转换到位串B-BB1……B1-1采用如下方法: 从0≤i≤mlen-1,设置:B3B3;+1…Bs+=M 输出B 6.3整数到8位字节串的转换 一个整数转换为8位字节串,基本方法是将其先使用二进制表达,然后扫结果位串再转换为8位字 节串。以下是转换流程 输入:一个非负整数x,期望的8位字节串长度mlen。基本限制为 输出:一个长度为mlen的8位字节串M。 动作:将基于2=256的x值x=xmn-128mkn-1)+.xmm-2mm2)+……+x128+x0转换为一个 8位字节串M=MM1……Mn-1采用如下方法: 从0≤i≤mlen-1,设置:M,=xmn-1 输出M 648位字节串到整数的转换 可以简单地把8位字节串看成以256为基表示的整数,转换过程如下 输入:一个长度mlen8位字节串M。 输出:一个整数x。 B/T35276-2 动作:将一个8位字节串M=MM1……Man-1转换为整数x方法如卜: 将M;看作[0~255中的一个整数 输出 7数据格式 7,1密钥数据格式 SM2算法私钥数据格式的ASN.1定义为: SM2 PrivateKey ::= INTEGER SM2算法公钥数据格式的ASN.1定义为 SM2 PublicKey :: BIT STRING SM2 Publickey为 BIT STRING类型,内容为04X‖Y,其中,X和Y分别标识公钥的x分量和y 分量,其长度各为256位。 7.2加密数据格式 SM2算法加密后的数据格式的ASN.1定义为: SM2 Cipher SEQENCE XCoordinate INTEGER x分量 COordinate INTEGER. y分量 HASH OCTET STRING SIZE(32) 杂凑值 Ciphertext OCTET STRING 密文 其中,HASH为使用SM3算法对明文数据运算得到的杂凑值,其长度圖定为256位。 Ciphertext 是与明文对应的密文 73签名数据格式 SM2算法签名数据格式的ASN.1定义为 SM2 Signature ::= SEQUENCEI R INTEGER. 一签名值的第一部分 INTEGER 签名值的第二部分 7.4密钥对保护数据格式 在SM2密钥对传递时,需要对SM2密钥对进行加密保护。具体的保护方法为 a)产生一个对称密钥; b)按对称密码算法标识指定的算法对SMε私钥进行加密,得到私钥的密文。若对称算法为分组 算法,则其运算模式为ECB; c)使用外部SM2公钥加密对称密钥得到对称密钥密文; d)将私钥密文、对称密钥密文封装到密钥对保护数据中 SM2密钥对的保护数据格式的ASN.1定义为 SM2EnvelopedKey ::-SEQUENCE( GB/T35276-2017 svmAlgId Algorithmldentifier 对称密碼算法标识 sym EncryptedKey SM2 Cipher 对称密钥密文 Sm2 PublicKey SM2 PublicKey SM2公钥 Sm2 EncryptedPrivateKey BIT STRING SM2私钥密文 8预处理 8.1预处理1 预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到Z值的过程。Z值用于预 处理2,也用于SM2密钥协商协议。 输入:I 字节串 用户身份标识 SM2 PublicKey用户的公钥 输出:Z 字节串 预处理1的输出 计算公式为 Z=SM3(ENTL‖ID‖a‖b‖x;‖yl‖xA‖yA) 式中: ENTI 为由2个宇节表示的ID的比特长度 为用户身份标识 为系统曲线参数; 为基点 为用户的公钥。 详细的计算过程见GB/T32918.2-2016的5.5和GB/T32905—2016的第5章 8.2预处理2 预处理2是指使用Z值和待签名消息,通过SM3运算得到杂凑值H的过程。杂凑值H用于SM2 数字签名 输入:Z 字节串 预处理2的输入 字节串 待签名消息 输出:H字节串 杂凑值 计算公式为 I=SⅥ3(Z‖M) 详细的计算过程见GB/T32918.2-2016的6.1和GB/T32905-2016的第5章。 9计算过程 9.1生成密钥 SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥 输入:无 输出:k SM2 PrivateKey SM2私钥 SM2 PublicKey SM2公钥 详细的计算过程见GBT32918,1—2016的6.1。 4 B/T35276-2 9.2加密 SM2加密是指使用指定公开密钥对明文进行特定的加密计算,生成相应密文的过程。该密文只能 由该指定公开密钥对应的私钥解密。 输入:Q SM2 PublicKey SM2公钥 字节串 待加密的明文数据 输出 密文 其中 输出参数c的格式由本规范7.2中定义 输出参数c的 XCoordinate、 COordinate为随机产生的公钥的x分量和y分量。 输出参数c中的HASH的计算公式为 HASH-sM3(x‖m‖y) 式中 Q的x分量和y分量 输出参数c中 Ciphertext为加密密文,其长度等于明文的长度 详细的计算过程见GB/T32918,42016的6,1。 9.3解密 SM2解密是指使用指定私钥对密文进行解密计算,还原对应明文的过程。 输入:d SM2Privatekey SM2私钥 SM2Cipher 密文 输出:m 字节串 与密文对应的明文 m为 SM2 Cipher经过解密运算得到的明文,该明文的长度与输入参数c中 Cipher text的长度 相同 详细的计算过程见GB/T32918.4-2016的7.1。 94数字签名 SM2签名是指使用预处理2的结果和签名者私钥,通过签名计算得到签名结果的过程 输入:d SM2PrivateKey 签名者私钥 字节串 预处理2的结果 输出:sign SM2Signature 签名值 详细的计算过程见GiB/T329182-2016的6.1 9.5签名验证 SM2签名验证是指使用预处理2的结果、签名值和签名者的公钥,運过验签计算确定签名是否通 过验证的过程 输入:H 字节串预 处理2的结果 SM2Signature 答名值 PublicKey 签名者的公钥 输出:为“真”表示“验证通过”,为“假”表示“验证不通过” 详细的计算过程见GB/T32918.2—2016的7.1 96密钥协商 密钥协商是在两个用户之间建立一个共享秘密密钥的协商过程,通过这种方式能够确定一个共享 GB/T35276-2017 秘密密钥的值。 设密钥协商双方为A、B,双方的密钥对分别为(d,Q、)和(d3,Q1),双方需要获得的密钥数据的 比特长度为klen。密钥协商协议分为两个阶段。 第一阶段:产生临时密钥对 用户A 调用生成密钥算法产生临时密钥对(rA,RA),将RA和用户A的用户身份标识IA发送给用户B 用户B 调用生成密钥算法产生临时密钥对(rB,RB),将Ra和用户B的用户身份标识IDa发送给用户A 第二阶段:计算共亨秘密密钥 用户A 输入参数: SM2PublicKey 用户A的公钥 SM2PublicKey 用户B的公钥 R SM2 PublicKey 用户A的临时公钥 OCTET STRING用户A的用户身份标识 R SM2PublicKey 用户B的临时公钥 ID OCTET STRING用户B的用户身份标识 SM2PrivateKey 用户A的私钥 r SM2 Private 用户A的临时私钥 klen INTEGER 需要输出的密钥数据的比特长度 输出参数: OCTET STRING位长为klen的密钥数据 步骤: a)用ID和Q作为输入参数,调用预处理1得到Z; b)用ID1和Q3作为输入参数,调用预处理1得到Z; c)以klen、Z、、Z、d、rA、RA、Q3、R为输入参数,进行运算得到K 用户B: 输入参数: SM2 Publickey 用户B的公钥 SM2 PublicKey 用户A的公钥 R SM2 Publice 用户B的临时公钥 O) CTET STRING用户B的用户身份标识 SM2PublicKey 用户A的临时公钥 IDA OCTET STRING用户A的用户身份标识 SM2PrivateKey 用户B的私钥 SM2PrivateKey 用户B的临时私钥 klen INTEGER 需要输出的密钥数据的比特长度 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论