一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于多重随机加扰实现SM2加解密防信息篡改的方法与流程

2022-11-19 11:27:24 来源:中国专利 TAG:

一种基于多重随机加扰实现sm2加解密防信息篡改的方法
技术领域
1.本发明涉及数据加解密技术领域,尤其涉及一种基于多重随机加扰实现sm2加解密防信息篡改的方法。


背景技术:

2.sm2算法是中国国家密码管理局基于椭圆曲线设计的一种非对称加密算法,包括密钥生成,加密,解密,签名和验签等运算流程。以上运算流程,加密和验签均只使用公钥进行计算,不存在私钥信息泄漏问题。但密钥生成,解密和签名,是有私钥da参与运算的过程,如果没有保护,外部可通过spa,dpa,相关性分析等攻击手段推测私钥da的值,进而导致sm2签名信息被篡改,或导致加密数据被解密引发信息泄露。
3.sm2算法作为椭圆曲线算法的一种,其核心是点乘计算的实现。一般没有做防攻击设计的点乘使用二进制展开法,私钥da直接参与运算,根据私钥da的各比特位不同,算法流程不同,使用侧信道分析,很容易反推da的值。一旦私钥da泄漏,很容易伪造签名,篡改加密数据,存在致命的安全风险。
4.密钥生成和解密的风险点都在点的标量乘法运算过程中。签名的风险点在点的标量乘法和后面的签名结果中s计算过程中。点乘算法一般防攻击算法主要采用的是brip和montgomery ladder。其中,brip使用随机点实现椭圆曲线标量乘法过程的平均化和随机化,具有抗一阶dpa,zpa,rpa等攻击的能力,但无法抵抗二阶dpa相关性分析。montgomery ladder:蒙哥马利阶梯,可实现椭圆曲线标量乘法运算过程的功耗均衡,具有抗spa功能,但无法抵御dpa。
5.因此,本技术针对上述技术问题提出了一种能够基于多重随机加扰实现sm2加解密防信息篡改的方法,可以抵抗高阶dpa分析攻击。


技术实现要素:

6.本发明的目的在于提供一种基于多重随机加扰实现sm2加解密防信息篡改的方法,从而解决现有技术中存在的前述问题。
7.为了实现上述目的,本发明采用的技术方案如下:
8.一种基于多重随机加扰实现sm2加解密防信息篡改的方法,在采用sm2算法进行数据加解密过程中,采用带标量随机掩码的点乘过程,所述带标量随机掩码的点乘过程包括以下步骤:
9.选择输入标量d1和曲线上任意点p进行标量乘法获得[d1]p:首先验证p点坐标是否符合sm2算法的椭圆曲线方程,再由硬件物理的真随机数生成单元生成真随机数m1,使用montgomery ladder算法,计算生成随机点m1=[m1]p;通过brip流程,以m1为随机点计算q1=[t1]p,t1=d
1-m1,计算完成q1点坐标后,再用点q1减去随机点m1,结果即是点[d1]p=q
1-m1。
[0010]
优选的,采用的椭圆曲线方程为:
[0011]
模值p,用于限定椭圆曲线上点的坐标和参数的取值范围;a,b是椭圆曲线的参数。
[0012]
优选的,使用montgomery ladder算法,计算生成随机点m1=[m1]p,具体包括:
[0013]
输入:坐标p,u位整数且m
1(u-1)
=1,
[0014]
输出:点坐标m1=[m1]p。
[0015]
优选的,通过brip流程,以m1为随机点计算q1=[t1]p,具体包括:
[0016]
输入:u位整数点坐标p;
[0017]
输出:点坐标q1=[t1]p;
[0018]
计算流程:
[0019]
1),使用montgomery ladder算法,生成随机坐标点r;
[0020]
2),计算t0=r,t1=-r,t2=p-r;
[0021]
3),j从u-1下降到0执行:
[0022]
t0=[2]t0
[0023]
若t1第j位=0则
[0024]
t0=t0 t1
[0025]
否则
[0026]
t0=t0 t2
[0027]
4),输出q1=t0 t1。
[0028]
优选的,其特征在于,密钥生成流程包括以下步骤:
[0029]
生成真随机数k1,采用所述带标量随机掩码的点乘过程计算p1点坐标,p1=[k1]g,确定计算得到的p1点坐标是否有效,若有效,则获得密钥对(k1,p1)并存储该密钥对;否则返回重新生成真随机数k1,重复计算p1点坐标。
[0030]
优选的,sm2加解密过程中的签名过程具体包括以下过程:
[0031]
根据sm2标准流程计算e,然后产生真随机数k2和k3,使用所述带标量随机掩码的点乘过程计算(x1,y1)=[k2]g,其中g为椭圆曲线基点;判断(x1,y1)点坐标是否有效,若是,则再次计算r=(e x1)mod n;判断r=0或r k1=n,若符合,则错误退出该签名过程;若不符合,则进一步计算f=k2*da(mod n),s=((k3 f)*(k3*k
2-r*f))(mod n),再次判断s是否大于等于1且小于n;若是,则确定数字签名为(r,s),否则签名过程错误,退出该签名过程。
[0032]
本发明的有益效果是:
[0033]
本发明提供了一种基于多重随机加扰实现sm2加解密防信息篡改的方法,该方法在所有标量乘法过程中均采用标量的随机化掩码方法,签名过程中计算s时的随机掩码处理方法,使得整个加解密过程均可防spa,dpa,zpa,以及高阶dpa攻击,防止信息篡改。
附图说明
[0034]
图1是实施例1中所采用的带有标量随机掩码的点乘流程图;
[0035]
图2是实施例1中所采用的密钥生成流程示意图;
[0036]
图3是实施例1中提供的签名流程示意图;
具体实施方式
[0037]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
[0038]
实施例
[0039]
本实施例提供了一种基于多重随机加扰实现sm2加解密防信息篡改的方法,包括生成密钥、签名、验签、加密以及最后的解密过程,其中,采用带标量随机掩码的点乘过程,该过程具体包括:
[0040]
选择输入标量d1和曲线上任意点p进行标量乘法获得[d1]p:首先验证p点坐标是否符合sm2算法的椭圆曲线方程,再由硬件随机数生成单元生成真随机数m1,使用montgomery ladder算法,计算生成随机点m1=[m1]p;通过brip流程,以m1为随机点计算q1=[t1]p,t1=d
1-m1,计算完成q1点坐标后,再用点q1减去随机点m1,结果即是点[d1]p。
[0041]
基于上述特殊的点乘方法,本实施例给出了一个完整的加解密过程,每一步的具体过程分别为:
[0042]
密钥生成流程:
[0043]
输入:首先输入一个有效的fq(q=p且p为大于3的素数,或q=2m)上椭圆曲线系统参数的集合。以椭圆曲线参数(a,b,c,d,p)的形式表示。
[0044]
输出:与椭圆曲线系统参数相关的一个密钥对(d2;p)。
[0045]
1)用随机数发生器产生整数d2∈[1;n-2];
[0046]
2)g为基点,使用带有标量随机掩码的点乘流程,计算点p=(x
p
;y
p
)=[d2]g;
[0047]
3)密钥对是(d2;p),其中d2为私钥,p为公钥。
[0048]
签名流程:
[0049]
设待签名的消息为m,为了获取消息m的数字签名(r,s),作为签名者的用户a应实现以下运算步骤:
[0050]
a1:设置m=za||m;
[0051]
a2:计算e=hv(m),将e的数据类型转换为整数;
[0052]
a3:用随机数发生器产生随机数k∈[1,n-1];
[0053]
a4:使用带有标量随机掩码的点乘流程,计算椭圆曲线点(x1,y1)=[k]g,将x1,y1的数据类型转换为整数;
[0054]
a5:计算r=(e x1)modn,若r=0或r k=n则返回a3;
[0055]
a6:计算f=k3*da(mod n),s=((k3 f)*(k3*k
2-r*f))(mod n),若s=0则返回a3,否则进入步骤a7;
[0056]
a7:按sm2算法规范中记载的字节转换技术内容将r、s的数据类型转换为字节串,获得消息m的签名为(r,s)。
[0057]
验签流程:
[0058]
为了检验收到的消息m

及其数字签名(r',s'),作为验证者的用户b应实现以下运算步骤:
[0059]
b1:检验r'∈[1,n-1]是否成立,若不成立则验证不通过;
[0060]
b2:检验s'∈[1,n-1]是否成立,若不成立则验证不通过;
[0061]
b3:设置m'=za||m';
[0062]
b4:计算e'=hv(m'),将e

的数据类型转换为整数;
[0063]
b5:将r'、s'的数据类型转换为整数,计算t=(r' s')mod n,若t=0,则验证不通过;
[0064]
b6:使用带有标量随机掩码的点乘流程,计算椭圆曲线点(x1';y1')=[s

]g [t]pa;
[0065]
b7:将x1'的数据类型转换为整数,计算r=(e' x1')mod n,检验r=r'是否成立,若成立则验证通过;否则验证不通过。
[0066]
加密流程:
[0067]
设需要发送的消息为比特串m,k
len
为m的比特长度。
[0068]
为了对明文m进行加密,作为加密者的用户a应实现以下运算步骤:
[0069]
a1:用随机数发生器产生随机数k∈[1,n-1];
[0070]
a2:计算椭圆曲线点c1=[k]g=(x1,y1),将c1的数据类型转换为比特串;
[0071]
a3:计算椭圆曲线点s=[h]pb,若s是无穷远点,则报错并退出;
[0072]
a4:计算椭圆曲线点[k]pb=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
[0073]
a5:计算t=kdf(x2||y2,klen),若t为全0比特串,则返回a1;
[0074]
a6:计算
[0075]
a7:计算c3=hash(x2||m||y2);
[0076]
a8:输出密文c=c1||c3||c2。
[0077]
解密流程:
[0078]
设k
len
为密文中c2的比特长度。
[0079]
为了对密文c=c1||c3||c2进行解密,作为解密者的用户b应实现以下运算步骤:
[0080]
b1:从c中取出比特串c1,将c1的数据类型转换为椭圆曲线上的点,验证c1是否满足椭圆曲线方程,若不满足则报错并退出;
[0081]
b2:计算椭圆曲线点s=[h]c1,若s是无穷远点,则报错并退出;
[0082]
b3:使用带有标量随机掩码的点乘流程,计算[db]c1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
[0083]
b4:计算t=kdf(x2||y2,k
len
),若t为全0比特串,则报错并退出;
[0084]
b5:从c中取出比特串c2,计算
[0085]
b6:计算u=hash(x2||m'||y2),从c中取出比特串c3,若u≠c3,则报错并退出;
[0086]
b7:输出明文m'。
[0087]
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
[0088]
本发明提供了一种基于多重随机加扰实现sm2加解密防信息篡改的方法,该方法在所有标量乘法过程中均采用标量的随机化掩码方法,签名过程中计算s时的随机掩码处理方法,使得整个加解密过程均可防spa,dpa,zpa,以及高阶dpa攻击,防止信息篡改。
[0089]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献