一种基于SM2的具有可重随机性的公钥加解密方法

文档序号:32393720发布日期:2022-11-30 09:23阅读:52来源:国知局
一种基于SM2的具有可重随机性的公钥加解密方法
一种基于sm2的具有可重随机性的公钥加解密方法
技术领域
1.本发明属于信息安全技术领域,涉及一种公钥加解密方法,具体涉及一种基于sm2的具有可重随机性的公钥加解密方法。


背景技术:

2.长期以来,公钥加解密方法作为密码技术的一个重要组成部分,在网络安全等领域发挥着至关重要的作用。实际情况表明大部分的密码技术应用仍然以国外公钥加解密方法为核心。为实现公钥加解密方法的自主可控,国家密码管理局于2010年12月颁布了《sm2椭圆曲线公钥密码算法》规范,正式提出了一系列国产商用sm2椭圆曲线公钥密码方法。其中,第四部分于2012年3月被公布,并作为一项行业标准(行标号:gm/t 0003.4-2012;标准名称:sm2椭圆曲线公钥密码算法第4部分:公钥加密算法;完成单位:北京华大信安科技有限公司、北京华大信安科技有限公司、中国人民解放军信息工程大学、中国科学院数据与通信保护研究教育中心;发布日期:2012年3月21日),提出了一个sm2椭圆曲线公钥加解密方法;该方法被认为具有优于其他椭圆曲线加解密方法以及国外公钥加解密方法的安全性,并在效率上具备显著的优势。
3.在sm2公钥加解密方法当中,密文为在sm2公钥加解密方法当中,密文为其中t=kdf(x2||y2,klen)、(x2,y2)=[k]pb。根据倍乘计算的性质,假设p=[k]g和新的随机数k

,可以得到p

=[k

]p=[k

][k]g=[k

k]g,由此可见密文的第一元素c1是可以具有重随机性的;对密文进行重随机的操作通常部署在第三方,而第三方只能知道公钥、公开信息和密文,并不知道被加密的明文信息m,因此在第二元素c2中,第三方无法计算原始用于密文计算的临时第三变量t,从而无法利用的方式进行重随机,其中t

=kdf(x
′2||y
′2,klen)和重随机的[k

]pb=(x
′2,y
′2);对于第三元素c3,第三方由于缺少被加密的明文信息m,即使能够计算得到[k

]pb=(x
′2,y
′2),也无法计算与密文的第一元素c1相适应的、合适的h(x
′2||m||y
′2)。综上所述,sm2公钥加解密方法的密文无法支持可重随机。
[0004]
2014年后,受斯诺登事件的影响,学术界对算法替代攻击及其相关领域展开了一系列的研究;为了抵抗这类攻击带来的破坏力,多种防护手段被提出,其中对密文进行重随机保护是目前已有研究中可行且有效的一种防护手段。不仅如此,在匿名通信领域中,生成的密文不应该告诉对手任何有关底层公钥的信息,这种特性在面向隐私的应用中是至关重要的,这类应用要求密文具有可重随机性。总的来说,能够支持密文可重随机的加解密方法在许多领域都有着不可或缺的重要性。尽管,诸多具有可重随机性的公钥加解密方法已被提出,但均以国外加解密方法为基础,我国自主可控的sm2公钥加解密方法也在上述讨论中被证明了不支持可重随机性。为满足我国密码技术自主可控的需求,在国产商用加解密方法的基础上设计具有可重随机性的公钥加解密方法是亟待解决的重要问题。
[0005]
针对上述问题,本发明以国产商用的sm2椭圆曲线公钥加解密方法为基础,设计一种具有可重随机性的公钥加解密方法,旨在实现支持可重随机的国产公钥加解密方法以及
该类方法的自主可控。


技术实现要素:

[0006]
有鉴于此,本发明的目的在于提供一种基于sm2的具有可重随机性的公钥加解密方法,解决sm2公钥加解密方法的密文无法实现可重随机的问题,实现可重随机公钥加解密方法的国内自主可控。
[0007]
本发明采用的技术方案是:
[0008]
s1:构建公钥加解密系统。该系统中有三个角色,分别为发送方、接收方和可信第三方。加解密系统包括密钥生成模块、加密模块、解密模块和重随机模块;其中密钥生成模块和解密模块部署在接收方,加密模块部署在发送方加密模块,而重随机模块部署在可信第三方。
[0009]
s2:接收方运行密钥生成模块生成公钥pk和私钥sk,将公钥pk以及公开信息params通过公开安全信道发送给发送方和可信第三方。具体流程如下:
[0010]
s2.1输入安全参数1
λ
,1
λ
表示长度为λ的比特串,意味着λ比特的安全强度;在特征为q的有限域fq中基于非奇异椭圆曲线e(fq):y2≡x3+ax+b mod q确定一个n阶的椭圆曲线循环群群中的元素为椭圆曲线上点的坐标(x,y),其中n,q为大素数;根据美国国家标准与技术研究院标准(nist recommendat ions(2020);网址:https://www.keylength.com/en/4/):当n的数量级达到2
160
时,对应加解密方法能达到的安全性等级为80比特,此时解密方至少需要进行2
80
次的运算才能够破解,即输入安全参数1
λ
中的λ=80时使用的n阶椭圆曲线群中的n需要达到2
160
数量级;
[0011]
s2.2从集合[1,n-1]中选取两个随机数db和dc;
[0012]
s2.3计算公钥第一元素pb=[db]p,公钥第二元素pc=[dc]p,[d]p表示椭圆曲线循环群中生成元p的d倍点,即为d-1次p与p的点加法,公式化表示为其中d为正整数,点加法的具体过程如下:
[0013]
s2.3.1令椭圆曲线上的坐标元素g1=(x1,y1)和g2=(x2,y2);
[0014]
s2.3.2计算g1和g2之间的斜率k
12
。若g1=g2,则其中a为s2.1中椭圆曲线的参数,该斜率为经过g1与椭圆曲线相切的切线的斜率;若g1≠g2,则k
12
=(y
1-y2)/(x
1-x2);
[0015]
s2.3.3计算g1和g2相加之后的横坐标g1和g2相加之后的纵坐标y3=k
12
(x
1-x3)-y1;
[0016]
s2.3.4返回点加法结果(x3,y3)。
[0017]
s2.4构造三个映射函数三个映射函数的输入与输出均为群中的元素,且映射关系均为满射,构造过程如下:
[0018]
s2.4.1选择一个输出大于等于256比特的杂凑函数h(*),杂凑函数的输入为任意比特串,其中的三个映射函数选择的杂凑函数分别是sha-512函数、sha-256函数、sha-384函数(均为美国标准与技术研究所nist公布);
[0019]
s2.4.2输入群中的元素g=(x,y),计算临时哈希值h=h(x||y)mod q;
[0020]
s2.4.3计算临时变量yy≡h3+ah+b mod q;
[0021]
s2.4.4利用拉格朗日定理判断二次剩余,其中拉格朗日定理为:若q是一个素数,计算如果计算结果为1,为二次剩余,反之则为二次非剩余;
[0022]
s2.4.5若yy为q的二次剩余,则计算转s2.4.6;若yy为q的二次非剩余,计算新的临时哈希值h

≡h(h)mod q,令h=h

,转s2.4.3;
[0023]
s2.4.6输出映射结果为点g=(h,y)。
[0024]
s2.5将(db,dc)组成私钥sk,将(pb,pc)组成公钥pk,将组成公开信息params;
[0025]
s2.6将公钥pk以及公开信息params通过公开安全信道发送给发送方和可信第三方。
[0026]
s3:发送方使用公钥pk和公开信息params,运行加密模块将需加密的消息生成原始密文,并将原始密文发送给可信第三方。具体流程如下:
[0027]
s3.1输入需加密的信息
[0028]
s3.2从群中随机选取一个元素r;
[0029]
s3.3利用第一个映射函数计算临时第一变量
[0030]
s3.4利用第二个映射函数计算临时第二变量
[0031]
s3.5利用第三个映射函数计算临时第三变量
[0032]
s3.6从集合[1,n-1]中选取一个随机数w;
[0033]
s3.7计算原始密文第一元素原始密文第二元素原始密文第三元素
[0034]
s3.8将组成原始密文并将原始密文发送给可信第三方。
[0035]
s4:可信第三方使用公开信息params运行重随机模块,对s3生成的原始密文进行重随机,将得到的新密文发送给接收方。具体流程如下:
[0036]
s4.1将原始密文解析成
[0037]
s4.2从集合[1,n-1]中选取一个随机数w


[0038]
s4.3计算新密文第一元素新密文第二元素新密文第二元素新密文第三元素
[0039]
s4.4将组成新密文将新密文发送给接收方。
[0040]
s5:接收方使用解密模块,通过私钥sk和公开信息params对收到的新密文进行解密获取明文,并逆转换得到最终的消息。具体流程如下:
[0041]
s5.1将新密文解析成
[0042]
s5.2计算临时第四变量
[0043]
s5.3计算临时第五变量
[0044]
s5.4利用第三个映射函数计算临时第六变量
[0045]
s5.5利用第二个映射函数计算临时第七变量
[0046]
s5.6利用第一个映射函数计算明文结果
[0047]
s5.7判断计算明文结果m

是否等于初始明文m,若不相等,则密文不合法,输出“密文不合法”消息,转s6;若相等,则解密结果为m,转s6。
[0048]
s6:公钥加解密系统结束运行。
[0049]
采用本发明可以得到如下效果:
[0050]
1.本发明由于s4.2和s4.3的存在,保证了公钥加解密方法的可重随机性,可信第三方仅需要原始密文信息以及加解密系统的公开信息即可使用重随机模块对原始密文进行重随机。可重随机性具体表现为:在s4.2中,可信第三方将为新的密文从集合[1,n-1]中随机选取一个随机数w

;在s4.3中,可信第三方利用该随机数w

,重新计算新密文中的三个元素,第一元素第二元素第三元素相比于原sm2公钥加密方法,本发明通过密钥生成方法和加密方法的修改,使得密文具备了可重随机性。
[0051]
2.本发明由于s4.3和s5.2、s5.3的存在,保证了公钥加解密方法对于重随机后的新密文的正确解密,体现新密文的有效性。有效性具体表现为:在s4.3中,根据s3.7和s4.3的计算公式,第一元素可表示为第二元素可表示为第三元素可表示为第三元素可表示为在s5.2中,计算在s5.2中,计算在s5.3中,计算在s5.3中,计算由此看出,新旧密文虽然发生了形式上的变化,但仍然能计算出正确的u和t用于后续s5.4-s5.7的计算当中,不影响解密的正确性,使得本发明的可重随机性在运算过程中是正确的。
[0052]
本发明的密文可以通过本身的元素以及加解密系统的公开信息进行重随机运算,而不改变密文的有效性以及其底层中的明文。在实际应用中,该特性使得运行重随机模块的可信第三方不需要提前进行配置即可对收到的密文进行重随机处理;但为了能实现可重随机性,在本发明中增加了椭圆曲线上的点的操作数,导致部分性能上的缺失。
附图说明
[0053]
图1是本发明构建的加解密系统的逻辑结构图;
[0054]
图2是本发明的流程图。
具体实施方式:
[0055]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0056]
在本实施例中,采用的符号及定义,具体如下:
[0057]
q,n:大素数。
[0058]fq
:特征为q的有限域。
[0059]
e(fq):在有限域fq中由定义的一条椭圆曲线。
[0060]
集合{1,2,

,n}中与元素q互素的元素构成子集合。
[0061]
a,b:集合中的元素,用于确定椭圆曲线。
[0062]
阶为n的椭圆曲线循环群。
[0063]
p:群中随机选取的某个生成元。
[0064]
[d]p:椭圆曲线循环群中元素p的d倍点;公式化表示为中元素p的d倍点;公式化表示为其中d为正整数。
[0065]
x||y:数值x和数值y的转化成二进制比特串的拼接。
[0066]
三个输入输出均为群中元素的映射函数。
[0067]
params:全局公开信息。
[0068]
pk:接收方的公钥。
[0069]
sk:接收方的私钥。
[0070]
m:群中的某个元素,由消息转化得到。
[0071]
发送方使用公钥以及加密模块生成的密文。
[0072]
经过可信第三方重随机后,接收方想要解密的密文。
[0073]
如图2所示为一种基于sm2的具有可重随机性的公钥加解密方法的流程图。
[0074]
在windows 10家庭中文版(64位)、英特尔酷睿i7-8750h处理器,12g内存、python 3.6.15的环境下,基于tinyec.ec的代码库使用本发明与sm2公钥加解密方法分别处理大小为1kb(1kb=1024b)的明文,其中明文采用的是随机生成的比特串。其中,椭圆曲线使用的参数为sm2推荐参数(行标号:gm/t 0003.5-2012;标准名称:sm2椭圆曲线公钥密码算法第5部分:参数定义;完成单位:北京华大信安科技有限公司、北京华大信安科技有限公司、中国人民解放军信息工程大学、中国科学院数据与通信保护研究教育中心;发布日期:2012年3月21日):a=0xfffffffeffffffffffffffffffffffffffffffff00000000fffffffffffffffc,b=0x28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93,素数q=0xfffffffeffffffffffffffffffffffffffffffff00000000ffffffffffffffff,n=0xfffffffeffffffffffffffffffffffff7203df6b21c6052b53bbf40939d54123,生成元p=(x
p
,y
p
)=(0x32c4ae2c1f1981195f9904466a39c9948fe30bbff2660be1715a4589334c74c7,0xbc3736a2f4f6779c59bdcee36b692153d0a9877cc62a474002df32e52139f0a0)。产生的对比效果如表1所示:
[0075]
表1.sm2公钥加解密方法与本发明方法的对比效果
[0076][0077]
其中加密、解密和重随机时间均为分别重复运行1000次后取平均值得到的。
[0078]
从上表中可以看出,相比于sm2公钥加解密方法,虽然本发明公钥大小为原方法的两倍,但在密文大小方面具有一定程度的优势(本发明的密文大小减小了12.8%);在加密模块操作数方面,sm2公钥加解密方法有2次倍乘和2次函数处理,本发明有3次倍乘、5次点加法以及3次函数处理,而对于解密模块,sm2公钥加解密方法仅仅需要1次倍乘和2次函数处理,本发明需要2次倍乘、5次点加法以及3次函数处理,导致整体的加密时间和解密时间约为原方法的两倍,但是本发明拥有sm2公钥加解密方法不具备的可重随机性,可以看出本发明为了可重随机性牺牲了一部分原本sm2公钥加解密方法具备的性能优势。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1