基于椭圆曲线加密算法的数据加密系统的制作方法

文档序号:24744286发布日期:2021-04-20 22:39阅读:161来源:国知局
基于椭圆曲线加密算法的数据加密系统的制作方法

1.本发明涉及加密技术领域,特别涉及一种基于椭圆曲线加密算法的数据加密系统。


背景技术:

2.在2010年,国家密码管理局发布了基于椭圆曲线的sm2算法,该算法不仅拥有明确的规范体制,并且在效率等方面比ecc算法要优良,与rsa算法相比,不仅加解密速度更快,同等密钥长度安全性更高。
3.目前sm2算法一般都利用计算机软件来实现,而通过计算机软件实现sm2算法会消耗较多的cpu资源,效率较低,并且安全性也较差。


技术实现要素:

4.基于上述现有技术的缺点,本申请提供一种基于椭圆曲线加密算法的数据加密系统,通过利用硬件设备实现sm2算法来减少应用这一加密算法时对cpu资源的消耗,并提高安全性。
5.本申请提供一种基于椭圆曲线加密算法的数据加密系统,包括上位机和与所述上位机连接的可编程门阵列;
6.其中,所述可编程门阵列包括模运算层和曲线运算层,所述模运算层用于执行模加、模减、模乘和模逆运算;
7.所述曲线运算层包括:调用所述模运算层执行点加运算的点加运算模块,调用所述模运算层执行倍点运算的倍点运算模块,以及调用所述点加运算模块和所述倍点运算模块执行点乘运算的点乘运算模块;
8.所述上位机用于利用所述可编程门阵列向用户提供基于椭圆曲线加密算法的数据加密和解密,数字签名和密钥交换服务。
9.可选的,所述可编程门阵列的模运算层设置有两个加法器和第一寄存器;
10.其中,所述第一寄存器的状态信号为第一模状态信号时,所述加法器用于执行模逆运算;
11.所述第一寄存器的状态信号为第二模状态信号时,所述加法器用于执行模加运算;
12.所述第一寄存器的状态信号为第三模状态信号时,所述加法器用于执行模减运算;
13.所述第一寄存器的状态信号为第四模状态信号时,所述加法器用于执行模乘运算。
14.可选的,所述曲线运算层设置有第二寄存器;
15.其中,所述第二寄存器的状态信号为第一点状态信号时,所述点加运算模块调用所述模运算层执行点加运算;
16.所述第二寄存器的状态信号为第二点状态信号时,所述倍点运算模块调用所述模运算层执行倍点运算;
17.所述第二寄存器的状态信号为第三点状态信号时,所述点乘运算模块调用所述点加运算模块和所述倍点运算模块执行点乘运算。
18.可选的,所述点乘运算模块用于:
19.获取虚假私钥和目标点,并生成一个随机参数;其中,所述虚假私钥和所述随机参数均为j位二进制数,所述虚假私钥为真实私钥与随机掩码之和;
20.将迭代次数j的值设置为0;
21.读取所述随机参数的自左侧开始的第j+1个二进制位的数值;
22.若读取得到的数值为1,依次调用所述倍点运算模块和所述点加运算模块,基于前一次迭代中所述随机掩码对应的中间运算结果计算得到本次迭代中所述随机掩码对应的中间运算结果;其中,所述随机掩码对应的中间运算结果的初始值为0;
23.依次调用所述倍点运算模块和所述点加运算模块,基于前一次迭代中所述真实私钥对应的中间运算结果计算得到本次迭代中所述真实私钥对应的中间运算结果;其中,所述真实私钥对应的中间运算结果的初始值为0;
24.若读取得到的数值为0,依次调用所述倍点运算模块和所述点加运算模块,基于前一次迭代中所述真实私钥对应的中间运算结果计算得到本次迭代中所述真实私钥对应的中间运算结果;
25.依次调用所述倍点运算模块和所述点加运算模块,基于前一次迭代中所述随机掩码对应的中间运算结果计算得到本次迭代中所述随机掩码对应的中间运算结果;
26.将所述迭代次数递增1,并返回执行所述读取所述随机参数的自左侧开始的第j+1个二进制位的数值,直至所述迭代次数等于n为止;
27.调用点加运算模块对最后一次迭代中所述随机数对应的中间运算结果和所述真实私钥对应的中间运算结果执行点加运算,得到所述虚假私钥和所述目标点的点乘运算结果。
28.可选的,所述点乘运算模块依次调用所述倍点运算模块和所述点加运算模块,基于前一次迭代中所述随机掩码对应的中间运算结果计算得到本次迭代中所述随机掩码对应的中间运算结果时,具体用于:
29.调用所述倍点模块对前一次迭代中所述随机掩码对应的中间运算结果执行倍点运算,得到倍点运算结果;
30.调用所述点加运算模块对所述倍点运算结果和所述目标点执行点加运算,得到点加运算结果;
31.读取所述随机掩码的自左侧开始的第j+1个二进制位的数值;
32.若读取得到的数值为1,将所述点加运算结果确定为本次迭代中所述随机掩码对应的中间运算结果;
33.若读取得到的数值为0,将所述倍点运算结果确定为本次迭代中所述随机掩码对应的中间运算结果。
34.本申请提供一种基于椭圆曲线加密算法的数据加密系统,包括上位机和可编程门阵列;可编程门阵列包括模运算层和曲线运算层,模运算层用于执行模加、模减、模乘和模
逆运算;曲线运算层包括:调用模运算层执行点加运算的点加运算模块,调用模运算层执行倍点运算的倍点运算模块,调用点加运算模块和倍点运算模块执行点乘运算的点乘运算模块;上位机利用可编程门阵列提供基于椭圆曲线加密算法的数据加密和解密,数字签名和密钥交换服务。本方案利用可编程门阵列实现椭圆曲线加密算法所涉及的计算过程,上位机仅需要提供前端的服务,既能够减少实现加密算法所消耗的cpu资源,即使上位机受到攻击,可编程门阵列执行的加密算法也不会被破解,安全性较高。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
36.图1为本申请实施例提供的一种椭圆曲线的示意图;
37.图2为本申请实施例提供的一种基于椭圆曲线加密算法的数据加密系统的结构示意图;
38.图3为本申请实施例提供的模运算层对应的状态机的示意图;
39.图4为本申请实施例提供的模逆运算状态机的示意图;
40.图5为本申请实施例提供的曲线运算层对应的状态机的示意图;
41.图6为本申请实施例提供的点乘运算的流程图。
具体实施方式
42.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
43.本方案所提供的基于椭圆曲线加密算法的数据加密系统(以下简称本系统)的工作原理涉及基于椭圆曲线的点运算,因此,为了便于理解,首先结合图1所示的椭圆曲线示意图对相关的术语进行说明:
44.椭圆曲线,是一种可以用形如:y2=x3+a
×
x+b的二元三次方程描述的平面直角坐标系上的曲线,通过设定上述方程中a和b两个参数的取值可以得到多条不同的椭圆曲线,图1所示的为一条可选的椭圆曲线的示意图。
45.对于任意两个位于椭圆曲线上的点,可以定义点加运算:
46.请参考图1,对于任意两个位于椭圆曲线上的点p(xp,yp)和q(xq,yq),将这两个点连接得到一条直线,这条直线和椭圆曲线相交于第三点g(xg,yg),过g点作垂直于x轴的直线,垂直于x轴的直线将和椭圆曲线相交于第四个点r(xr,yr),r点则被定义为对点p和q执行点加运算后得到的结果,可以记为:p+q=r。
47.换言之,对给定的两个椭圆曲线上的点p和q执行点加运算,相当于根据给定的椭圆曲线和两个点的坐标计算得到一个满足上述条件的r点的坐标。
48.具体的计算可以参考下述公式:
49.x
r
=λ2‑
x
p

x
q
50.y
r
=λ
×
(x
p

x
r
)

y
p
51.其中,当点p和点q是两个不同的点时,有下述公式:
[0052][0053]
特别的,当点p和点q是同一个点时,上述条件中的g点就定义为:过点p做一条椭圆曲线的切线,这条切线和椭圆曲线相交的点记为g点。这种情况下,有下述公式:
[0054][0055]
在上文定义的点加运算的基础上,可以进一步定义基于椭圆曲线的点乘运算:
[0056]
给定任意一个整数m和一个椭圆曲线上的点p,对整数m和点p执行点乘运算的公式可以表示为:r=m*p,基于乘法的定义,m乘p相当于m个p点相加,因此,上述公式可以改写为:
[0057][0058]
基于上述公式,只需要反复执行m

1次点加运算,就可以得到整数m和点p执行点乘运算后的运算结果,即点r。
[0059]
其中,m等于2为最基本的点乘运算,称为倍点运算,即r=2*p=p+p。
[0060]
取模:取模是一种数学运算,可以用mod表示,执行取模运算需要指定一个整数l作为模数,在指定了模数之后,对任意一个实数x取模得到的结果s,可以表示为:s=(x)mod l,当x为整数时,这一公式可以理解为,s等于用x除以l得到的余数,例如,假设l等于10,x等于12,那么用x除以l得到的商为1,余数为2,即s=2。
[0061]
将椭圆曲线上定义的点运算应用于数据加密领域时,在实数域上光滑的椭圆曲线往往不能直接适用数据加密中有限的整数域,因此需要对点加运算的结果取模,即对于p+q=r,定义:
[0062]
x
r
=(λ2‑
x
p

x
q
)modl
[0063]
y
r
=(λ
×
(x
p

x
r
)

y
p
)modl
[0064]
l为预先指定的模数。通过上述公式可以看出,在基于椭圆曲线的加密算法中,涉及点的坐标的计算均需要由对应的模运算代替,例如,上述公式中的xr就等于对λ的平方,xp和xq执行模减运算的结果,也就是将λ的平方,xp和xq的差对l取模,yr的计算过程则是,对xp和xr执行模减运算,然后将运算结果和λ执行模乘运算(即两个数的乘积对l取模),最后再对模乘运算的结果和yp执行模减运算。
[0065]
下面,请参考图2,本申请实施例提供一种基于椭圆曲线加密算法的数据加密系统,本系统可以包括:
[0066]
上位机201,以及和上位机连接的可编程门阵列202(field programmable gate array,fpga)。
[0067]
本系统可以使用verilog硬件描述语言进行算法实现,利用modelsim进行仿真功能测试。
[0068]
其中,可编程门阵列又包括模运算层2021和曲线运算层2022。
[0069]
模运算层用于执行模加、模减、模乘和模逆运算。
[0070]
模运算层是本系统中最基础的单元,上层的功能(包括曲线运算层中基于椭圆曲线的点运算,以及上位机提供的服务)都是需要通过调用模运算层完成,因此模运算层的设计影响本系统的基本性能。
[0071]
曲线运算层包括点加运算模块,倍点运算模块和点乘运算模块,其中,点加运算模块通过调用模运算层执行点加运算,倍点运算模块通过调用模运算层执行倍点运算,点乘运算模块则通过调用点加运算模块和倍点运算模块执行点乘运算。
[0072]
点加、倍点、点乘运算属于椭圆曲线运算层,其中点乘运算占用资源最多,对算法效率影响很大,同时也是抗攻击措施的主要对象,是算法设计的重中之重。
[0073]
上位机用于利用可编程门阵列向用户提供基于椭圆曲线加密算法的数据加密和解密,数字签名和密钥交换服务。
[0074]
上述服务具体由上位机的协议层提供,协议层是与用户直接关联的层次,包含了算法的行为功能和应用场景,为应用服务提供相应的功能。通过协议层的数字签名、加密解密等应用,本系统可以直接与用户关联并为用户实现对应的功能。
[0075]
请参考图3,图3是表示本系统中可编程门阵列的模运算层的工作原理的状态机,通过图3所示的状态机可以实现模运算层的模乘,模加和模减运算。
[0076]
在硬件结构上,本系统中的模运算层可以包括两个加法器和第一寄存器,第一寄存器用于存储状态信号,即图3中的inverse和mode,根据第一寄存器中的状态信号的不同,模运算层的两个加法器可以执行对应的模运算。因此,上层的曲线运算层可以通过调整模运算层的第一寄存器的状态信号的方式,控制模运算层对输入的数值执行相应的模运算。
[0077]
具体的,本系统上电(可以理解为开机)后,模运算层在idle状态(即初始状态)下待机,在第一寄存器的状态信号为第一模状态信号时,模运算层的两个加法器可以用于执行模逆运算(此时模运算层从初始的idle状态切换至inverse状态)。如图3所示,第一模状态信号为inverse等于1。
[0078]
在第一寄存器的状态信号为第二模状态信号时,模运算层的两个加法器用于执行模加运算(此时模运算层从初始的idle状态切换至add状态),其中,第二模状态信号为,inverse等于0,且mode等于2’b10。
[0079]
在第一寄存器的状态信号为第三模状态信号时,模运算层的加法器用于执行模减运算(此时模运算层从初始的idle状态切换至sub状态),其中,第三模状态信号为,inverse等于0,且mode等于2’b11。
[0080]
在第一寄存器的状态信号为第四模状态信号时,模运算层的加法器用于执行模乘运算(此时模运算层从初始的idle状态切换至mult状态),其中,第三模状态信号为,inverse等于0,且mode等于2’b01。
[0081]
模运算层在任意一个状态下完成对应的计算后,会切换至结束状态,并在结束状态(finish)下向调用模运算层的曲线运算层反馈运算结果,然后从结束状态返回初始状态,等待下一次调用。
[0082]
本方案采用硬件实现算法的方法,大大加快算法运算速度,节约硬件资源。在算法实现中采用以两个加法器为核心数据处理(即利用两个加法器实现椭圆曲线加密算法中的
模运算)的方式,极力节约硬件资源,加快硬件运算速度。
[0083]
在上述模运算中,模逆运算的实现较为复杂,需要通过调用如图4所示的一个专门用于实现模逆运算的状态机执行,换言之,当模运算层处于模逆运算状态(即inverse状态),模运算所设置的两个加法器会通过运行如图4所示的模逆状态机执行模逆运算。
[0084]
图4所示的模逆状态机的具体工作原理可以参考相关的现有技术中模逆运算的原理,此处不做限定。
[0085]
曲线运算层设置有第二寄存器,第二寄存器的状态信号记为mode_reg,如图5所示,根据寄存器的状态信号的变化,曲线运算层可以在初始状态(idle),其他状态(other_function),点加运算状态(point_add),点乘运算(point_sub)和倍点运算(point_double)之间切换。
[0086]
第二状态寄存器的状态信号可以由上位机设置,上位机通过这种方式可以调用曲线运算层执行对应的点运算,另外,第二状态寄存器的状态信号也可以由曲线运算层中的点乘运算模块设置,点乘运算模块通过这种方式调用点加运算模块和倍点运算模块。
[0087]
具体的,本系统上电时,曲线运算层处于初始状态(即idle)。
[0088]
第二寄存器的状态信号为第一点状态信号时(即mode_reg等于x10x时),点加运算模块调用模运算层执行点加运算,相当于曲线运算层从idle状态切换至point_add状态。
[0089]
第二寄存器的状态信号为第二点状态信号时(即mode_reg等于x110时),倍点运算模块调用模运算层执行倍点运算,相当于曲线运算层从idle状态切换至point_double状态。
[0090]
第二寄存器的状态信号为第三点状态信号时(即mode_reg等于0111时),点乘运算模块调用点加运算模块和倍点运算模块执行点乘运算,相当于曲线运算层从idle状态切换至point_sub状态。
[0091]
第二寄存器的状态信号为第四点状态信号时(即mode_reg等于x0xx时),曲线运算层切换至other_function状态,曲线运算层可以在此状态下待机或者执行除了上述点加运算,点乘运算和倍点运算以外的其他椭圆曲线的点运算。
[0092]
侧信道攻击,包括spa(differential power analysis,简单功率分析)攻击和dpa(differential power analysis,微分功率分析)攻击,是目前常见的一种针对数据加密设备的攻击方式,该攻击方式主要通过分析加密设备运行过程中消耗的功率随时间的变化,预测出运行加密算法的过程中设备使用的参数,进而达到破解密文的效果。
[0093]
为了防范侧信道攻击,本系统针对曲线运算层执行点乘运算的过程采取了如下的两个措施:
[0094]
措施一:在点乘运算中增加冗余运算,即点乘的每轮运算都进行点加和倍点,降低功耗曲线与密钥的直接相关性。
[0095]
措施二:密钥随机化。在涉及私钥的点乘运算中引入随机掩码,利用随机掩码和真实的私钥组成的虚假私钥进行集散,从而使真实私钥被掩盖。
[0096]
具体的,将真实私钥记为k1,在涉及利用私钥的点乘运算中,首先生成一个随机掩码r,然后计算得到虚假私钥k2=k1+r,后续的点乘运算中使用虚假私钥k2进行,以避免第三方通过侧信道攻击获得真实私钥。
[0097]
需要注意的是,此时使用虚假私钥进行点乘运算时,会分别使用真实私钥和随机
掩码进行点乘运算。为了进一步加强对密钥的保护,防止攻击者能判断出用随机掩码进行点乘运算的时间和用真实私钥进行点乘运算的时间,同时尝试节省资源,点乘运算模块可以生成一个随机参数,根据随机参数在每一个二进制位上的数值决定用随机掩码和真实私钥进行点乘运算的先后顺序。
[0098]
基于上述措施,点乘运算模块执行涉及私钥的点乘运算时,具体的计算流程可以包括如图6所示的步骤:
[0099]
s601、获取虚假私钥k2和目标点p,并生成一个随机参数s。
[0100]
其中,虚假私钥和随机参数均为n位二进制数,虚假私钥为真实私钥k1与随机掩码r之和。一般的,n可以设定为等于椭圆曲线算法中应用的椭圆曲线的阶数。
[0101]
步骤s601中涉及的参数均可以表示为n位二进制数,具体的:
[0102]
k1=(k1
n
‑1,k1
n
‑2,k1
n
‑3…
k1
i

k11,k10);
[0103]
r=(r
n
‑1,r
n
‑2,r
n
‑3…
r
i

r1,r0);
[0104]
s=(s
n
‑1,s
n
‑2,s
n
‑3…
s
i

s1,s0);
[0105]
s602、将迭代次数j的值设置为0。
[0106]
s603、读取随机参数的自左侧开始的第j+1个二进制位的数值。
[0107]
若读取的数值为1,则执行步骤s604,若读取的数值为0,则执行步骤s606。
[0108]
步骤s603,也可以认为是读取n位二进制数s中的s
n
‑1‑
j

[0109]
举例来说,假设当前j等于0,则步骤s603中会读取得到s的左侧第一位,也就是s
n
‑1,若s
n
‑1等于1,则执行步骤s604,反之,若s
n
‑1等于0则执行步骤s606。
[0110]
s604、依次调用倍点运算模块和点加运算模块,基于前一次迭代中随机掩码对应的中间运算结果计算得到本次迭代中随机掩码对应的中间运算结果。
[0111]
其中,随机掩码对应的中间运算结果的初始值为0,也就是说,若当前是第一次迭代,那么步骤s604中的前一次迭代中随机掩码对应的中间运算结果就是初始值0。
[0112]
s605、依次调用倍点运算模块和点加运算模块,基于前一次迭代中真实私钥对应的中间运算结果计算得到本次迭代中真实私钥对应的中间运算结果。
[0113]
其中,真实私钥对应的中间运算结果的初始值为0,与步骤s604类似的,若当前是第一次迭代,则步骤s605中前一次迭代中真实私钥对应的中间运算结果就是初始值0。
[0114]
需要说明的是,真实私钥和随机掩码对应的中间运算结果均为椭圆曲线上的点,因此将中间运算结果的初始值设置为0,实质是设定两个横坐标和纵坐标均为0的点。
[0115]
s606、依次调用倍点运算模块和点加运算模块,基于前一次迭代中真实私钥对应的中间运算结果计算得到本次迭代中真实私钥对应的中间运算结果。
[0116]
s607、依次调用倍点运算模块和点加运算模块,基于前一次迭代中随机掩码对应的中间运算结果计算得到本次迭代中随机掩码对应的中间运算结果。
[0117]
s608、将迭代次数j递增1。
[0118]
也就是说,若执行步骤s608之前迭代次数j等于0,则执行步骤s608之后迭代次数更新为1,以此类推。
[0119]
s609、判断迭代次数是否等于n。
[0120]
若迭代次数小于n,则返回执行步骤s603,若迭代次数等于n,执行步骤s610。
[0121]
s610、调用点加运算模块对最后一次迭代中随机数对应的中间运算结果和真实私
钥对应的中间运算结果执行点加运算,得到虚假私钥和目标点的点乘运算结果。
[0122]
在上述流程中,点乘运算模块依次调用倍点运算模块和点加运算模块,基于前一次迭代中随机掩码对应的中间运算结果计算得到本次迭代中随机掩码对应的中间运算结果的具体过程包括:
[0123]
调用倍点模块对前一次迭代中随机掩码对应的中间运算结果执行倍点运算,得到倍点运算结果;
[0124]
调用点加运算模块对倍点运算结果和目标点执行点加运算,得到点加运算结果;
[0125]
读取随机掩码的自左侧开始的第n+1个二进制位的数值;
[0126]
若读取得到的数值为1,将点加运算结果确定为本次迭代中随机掩码对应的中间运算结果;
[0127]
若读取得到的数值为0,将倍点运算结果确定为本次迭代中随机掩码对应的中间运算结果。
[0128]
点乘运算模块依次调用倍点运算模块和点加运算模块,基于前一次迭代中真实私钥对应的中间运算结果计算得到本次迭代中真实私钥对应的中间运算结果的具体过程包括:
[0129]
调用倍点模块对前一次迭代中真实私钥对应的中间运算结果执行倍点运算,得到倍点运算结果;
[0130]
调用点加运算模块对倍点运算结果和目标点执行点加运算,得到点加运算结果;
[0131]
读取真实私钥的自左侧开始的第n+1个二进制位的数值;
[0132]
若读取得到的数值为1,将点加运算结果确定为本次迭代中真实私钥对应的中间运算结果;
[0133]
若读取得到的数值为0,将倍点运算结果确定为本次迭代中真实私钥对应的中间运算结果。
[0134]
上述计算流程也可以用下述表1中的算法思路表示:
[0135]
表1
[0136][0137][0138]
在上述表1中,表1第一行的输入相当于图6所示的流程中的步骤s601,step3的判断相当于图6所示的流程中的步骤s603,q1相当于每一次迭代中随机掩码对应的中间运算结果,q3相当于每一次迭代中真实私钥对应的中间运算结果,step4到step9的过程相当于图6所示的流程中的步骤s604和步骤s605,step11到step16的过程相当于图6所示的流程中的步骤s606至步骤s607。step17和step18相当于图6所示的流程中的步骤s610,最后计算得到的q就是虚假私钥和目标点的点乘运算结果。
[0139]
进一步的,表1所示的算法思路中,q1=2q1以及q3=2q3的步骤,均表示调用倍点运算模块对前一次迭代中对应的中间运算结果执行倍点运算,q2=q1+p和q4=q3+p的步骤均表示调用点加运算模块将前一次迭代中对应的中间运算结果和目标点p执行点加运算。
[0140]
通过上述计算流程和算法思路可以看出,本系统中点乘运算模块在每一次迭代中所执行的运算步骤均相同,对应的本系统在加密或解密过程中的功耗曲线随时间的波动较小,可以防止攻击者通过分析功耗曲线预测得到对应的私钥。
[0141]
本系统针对sm2国密算法的安全性,做出了针对侧信道攻击中的功耗攻击的相关防护措施,主要是密钥随机化和冗余运算,使得加密算法得以防止spa攻击和dpa攻击。与此
同时,在增加防护措施的同时,利用两个随机数的方式,降低抗攻击所带来的资源损耗以及运算时间增值。
[0142]
本申请提供一种基于椭圆曲线加密算法的数据加密系统,包括上位机和可编程门阵列;可编程门阵列包括模运算层和曲线运算层,模运算层用于执行模加、模减、模乘和模逆运算;曲线运算层包括:调用模运算层执行点加运算的点加运算模块,调用模运算层执行倍点运算的倍点运算模块,调用点加运算模块和倍点运算模块执行点乘运算的点乘运算模块;上位机利用可编程门阵列提供基于椭圆曲线加密算法的数据加密和解密,数字签名和密钥交换服务。本方案利用可编程门阵列实现椭圆曲线加密算法所涉及的计算过程,上位机仅需要提供前端的服务,既能够减少实现加密算法所消耗的cpu资源,即使上位机受到攻击,可编程门阵列执行的加密算法也不会被破解,安全性较高。
[0143]
最后,结合sm2国密算法的具体流程,说明本系统在提供数据加密和解密服务时的工作原理:
[0144]
假设用户a和用户b均持有本系统,用户b需要利用本系统向用户a发送加密数据。
[0145]
需要说明的是,用户a的系统和用户b的系统所使用的是同一条椭圆曲线,这一点可以由双方的上位机预先约定,也可以在开始通信前由一方向另一方发送一条椭圆曲线(具体是指发送可以确定椭圆曲线的一组参数),然后双方共同使用这一条椭圆曲线。
[0146]
首先,用户a可以在上位机中随机生成一个位于椭圆曲线上的基点g,真实私钥k1,以及随机掩码r,然后,上位机将基点g,真实私钥k1和随机掩码r均传输至曲线运算层,同时将曲线运算层的第二寄存器的状态信号设置为第三点状态信号,使得曲线运算层在点乘运算状态下工作,此时,曲线运算层通过执行如图6所示的流程,计算得到虚假私钥k2(由真实私钥k1和随机掩码r相加得到)和目标点(此时目标点为上位机输入的基点g)的点乘运算结果q,并将q反馈给用户a的上位机,然后用户a的上位机将q作为用户a的公钥发送给用户b的上位机,同时向用户b发送基点g。
[0147]
随后,用户b利用上位机将需要发送的明文数据编码为椭圆曲线上的点m,并且生成一个随机数h,在此基础上,用户b的上位机首先调用曲线运算层在点乘运算状态下计算得到随机数h和用户a的公钥q的点乘运算结果,记为hq,此处的hq也是椭圆曲线上的一个点,随后调用曲线运算模块在点加运算状态下计算得到c1=m+hq,最后再调用曲线运算层在点乘运算状态下计算得到h和基点g的点乘运算结果c2=hg,然后用户b的上位机将c1和c2发送至用户a的上位机。
[0148]
用户a的上位机在收到c1和c2之后,将c2作为目标点,调用曲线运算层在点乘运算状态下按如图6所示的流程计算得到虚假私钥k2和c2的点乘运算结果,记为k2*c2,然后调用曲线运算层在点加运算状态下计算c1

k2*c2,得到的计算结果就是用户b的上位机对明文编码得到的点m,由此实现明文数据从b到a的加密传输。
[0149]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排
除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0150]
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0151]
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1