[发明专利]二元扩域上SM2加密算法的实现方法在审
申请号: | 201710378190.4 | 申请日: | 2017-05-25 |
公开(公告)号: | CN107147495A | 公开(公告)日: | 2017-09-08 |
发明(设计)人: | 刘珊珊;熊晓明 | 申请(专利权)人: | 广东工业大学 |
主分类号: | H04L9/30 | 分类号: | H04L9/30;H04L9/08;H04L9/06 |
代理公司: | 广东广信君达律师事务所44329 | 代理人: | 杨晓松 |
地址: | 510062 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 二元 扩域上 sm2 加密算法 实现 方法 | ||
技术领域
本发明具体涉及二元扩域F2m上SM2椭圆曲线公钥密码算法的公钥加密算法实现。
背景技术
椭圆曲线密码算法的快速实现一直是椭圆曲线密码体制研究的重点,基于有限域上的椭圆曲线可以实现数据加密等密码方案。
二元扩域上椭圆曲线可以用仿射坐标、标准射影坐标、Jacobian加重射影坐标以及Lopez&Dahab射影坐标表示,根据椭圆曲线特点和坐标的具体形式对点加和倍点运算进行优化,通过对几种情况下的优化,由图1得到Lopez&Dahab射影坐标下的点加和倍点运算的运算速度最快。
多倍点运算是椭圆曲线密码算法的核心运算。对于多倍点运算的实现方式有很多种,其中,基于k的有符号二进制展开的滑动窗口算法的实现速度最快。
椭圆曲线公钥加密算法中涉及到的杂凑函数使用SM3模块来实现,这个模块主要包括顶层模块、controller控制器、消息扩展模块、消息压缩模块以及结果读取。降低了电路开销,总体上提升了整个算法流程的速度。
发明内容
本发明所要解决的技术问题是:针对上述存在的问题,提供了一种二元扩域F2m上SM2椭圆曲线公钥密码算法的公钥加密算法实现方法,通过提高点乘和杂凑函数等的计算速度来有效的提升SM2公钥加密算法的性能。
为解决上述技术问题,本发明的SM2公钥加密算法的实现方法,包括如下步骤:
步骤一:用随机数发生器产生随机数k∈[1,n-1];
步骤二:计算椭圆曲线点C1=[k]G=(x1,y1),将C1的数据类型转换为比特串,其中G为椭圆曲线的一个基点;
步骤三:计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出,其中PB为用户B的公钥;
步骤四:计算椭圆曲线点S1=[k]PB=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
步骤五:计算t=KDF(x2∥y2,klen),若t为全0比特串,则返回步骤一,其中KDF(Z,klen)为密钥派生函数,x∥为x与y的拼接;
步骤六:计C2=M⊕t,其中⊕为长度相等的两个比特串按比特的异或运算;
步骤七:计算C3=Hash(x2∥M∥y2),其中Hash()为密码杂凑函数;
步骤八:输出密文C=C1∥C2∥C3。
本发明在二元扩域上使用LD投影坐标运算,对于点乘运算采用快速的基于k的有符号的二进制展开的滑动窗口算法以及使用集成的SM3模块计算杂凑值,可以提升SM2公钥加密算法的性能。
附图说明
下面结合附图与具体实施方式对本发明作进一步详细的说明:
图1是所述SM2公钥加密算法的实现方法的流程图;
图2是计算C1=[k]G=(x1,y1)的流程图。
图3是SM3模块的端口设计图。
具体实施方式
二元扩域F2m上SM2椭圆曲线公钥密码算法的公钥加密算法实现方法如图1所示。
步骤一:用随机数发生器产生随机数k∈[1,n-1];
步骤二:在LD坐标下计算椭圆曲线点C1=[k]G=(x1,y1),将C1的数据类型转换为比特串;
对于步骤二,通过如下步骤来实现:
步骤(1):设需要存储的点的个数r>1,G1=G,G2=[2]G1;
步骤(2):i从1增加到r-1计算G2i+1=C2i-1+G2,(i为控制循环的中间计算量,)步骤(3):NAF(k)=(ki-1,,ki-2,k1,k0);(其中Ki为随机数k的从右数第i+1位,正整数k的宽度为w的);
步骤(4):令j=l-1,C1=O;当j≥0时;
(1)若Kj=0,则C1=[2]C1,j=j-1;
(2)否则:
(2.1)令t是使且kt=1或k=-1的最小整数;
(2.2)
(2.3)如果hj>0,否则
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广东工业大学,未经广东工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710378190.4/2.html,转载请声明来源钻瓜专利网。