一种基于制造技术

技术编号:39648941 阅读:6 留言:0更新日期:2023-12-09 11:17
本发明专利技术属于公钥密码技术领域,公开了一种基于

【技术实现步骤摘要】
一种基于GPU并行实现密码技术中大整数乘法的方法


[0001]本专利技术涉及公钥密码
,具体是涉及一种基于
GPU
并行实现密码技术中大整数乘法的方法


技术介绍

[0002]随着云计算时代的到来和云服务需求的不断增加,用户数据的安全性和隐私性成为人们关注的热点

尽管云平台存放的是用户经过加密的数据,但同时密钥被云服务商所获知,不能确保用户数据的安全和隐私

同态加密依据对加密数据进行处理的能力,完美符合隐私计算的计算模式,成为了当前学术研究的热点,受到了广泛的关注;其中
Paillier
复合剩余类难题的公钥加密算法正是最为重要的算法之一

在实际应用当中,
Paillier
密钥的长度需要达到
2048
比特,以此满足大多数应用场景的安全需要


2048
比特的密钥参与到乘法运算中,速度较慢,算法复杂度高,限制了
Paillier
等算法的适用范围;因此,研究一种能够提高加密性能的大数乘法算法在国内外快速发展起来

[0003]基于传统的按位乘法中,需要将一个操作数的每一位乘以另一个操作数据的每一位并累加,算法复杂度达到了
O(N^2)
,使用
CPU
单线程计算大数乘法来说是不可接受的

因此,研究
GPU
并行计算大整数乘法提高密钥运算速度具有重要研究价值与意义

[0004]GPU
起初的设计目的是辅助
CPU
完成图像渲染等计算机图形学功能,而随着硬件及相关软件体系的不断完善,
GPU
的应用已不再局限于计算机图形处理,基于
GPU
的通用并行计算研究引发了广泛的关注

[0005]CUDA
并行计算架构是利用了
GPU
的处理能力,因其大规模

高并行和易开发的特点,逐渐在高性能密码计算中得到广泛应用

利用
CUDA
平台区分高位低位的乘加指令完成两个
w
比特整数的相乘,可以分别获得乘法运算的高
w
比特和低
w
比特,同时利用洗牌指令获取同一个线程束中其他线程的运算产生的长度为
w
比特的进位,完成乘积的高
w
比特或低
w
比特与进位的加法运算

利于
CUDA
平台的各类指令,能够方便通过多个线程实现大整数乘法的并行计算;但现有的
GPU
大整数乘法研究中,均是采用单个线程完成一次大整数乘法,使得算法存在实现复杂度较高

并行度低的问题

[0006]如
CN201610325863
公开了一种利用浮点数计算指令实现大整数乘法计算加速方法,其利用
CUDA
平台的浮点数计算指令实现大整数乘法运算;但是该方法并未对乘法进行拆分,单个线程的计算量依旧很大,整体的计算延时高


技术实现思路

[0007]为解决上述技术问题,本专利技术提供了一种基于
GPU
并行实现密码技术中大整数乘法的方法,将公钥密码计算中的大整数乘法拆分成多个部分分配到多个线程之中,采用多个线程并行完成一次大整数乘法运算,减少了单个线程的计算量,有效提升了公钥密码中乘法操作的性能,降低大整数乘法计算的复杂度,提升计算速度

[0008]本专利技术所述的一种基于
GPU
并行实现密码技术中大整数乘法的方法,包括以下步
骤:
[0009]步骤
1、
数据划分:对在
GPU
平台上进行的公钥密码加解密过程需要进行大整数乘法的数据进行划分,将输入的被乘数记为
A
,乘数记为
B
,对长度为
n
比特的被乘数
A
按照从低到高
(
或从高到低
)
的次序每
w
比特划为一个字,共计
N
个字,长度为
m
比特乘数
B
按照与
A
同样的高低次序每
w
比特划为一个字,共计
M
个字;
[0010]步骤
2、
线程取数:采用
x
个线程并行计算一个大整数乘法,每个线程取对应位置上的被乘数与乘数;
[0011]步骤
3、
乘法运算:对于步骤2中取到的数,在每个线程当中使用区分高位低位的乘加指令,依次计算被乘数与乘数的乘积,将最终结果保存至
Result
,进位保存在
Carry1、Carry2
中;
[0012]步骤
4、
进位运算:通过使用洗牌指令获取其他线程运算产生的进位
Carry1、Carry2
放入
tmp
中,使用加法指令计算
Result

tmp
的和,将新的结果写入
Result
,将新产生的进位保存在
Carry
中;通过循环迭代方式,即使用
CUDA
的束表决函数,判断在一个线程束中,是否有线程存在进位;如果存在,线程束中的所有线程同时累加迭代,直到所有线程不再产生进位;
[0013]步骤
5、
结果写回:将各线程所得到的计算结果
Result
放入最终结果的对应位置并输出结果

[0014]进一步的,对被乘数
A
和乘数
B
划分时,若长度不能被
w
整除,通过高位补0的方式将长度填充至
w
的整数倍

[0015]进一步的,对于步骤1的划分结果,定义以下符号:
A[u]表示
A
的第
u
个字,
B[u]表示
B
的第
u
个字,
A[0:N

1]表示被乘数
A
的第0~
(N

1)

N
个字,
B[0:M

1]乘数
B
的第0~
(M

1)

M
个字

[0016]进一步的,其特征在于,对于步骤1的划分结果:
A

N
个字,
B

M
个字,其中每个线程根据位置从本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于
GPU
并行实现密码技术中大整数乘法的方法,其特征在于,包括以下步骤:步骤
1、
数据划分:对在
GPU
平台上进行的公钥密码加解密过程需要进行大整数乘法的数据进行划分,将输入的被乘数记为
A
,乘数记为
B
,对长度为
n
比特的被乘数
A
按照从低到高或从高到低的次序每
w
比特划为一个字,共计
N
个字,长度为
m
比特乘数
B
按照与
A
同样的高低次序每
w
比特划为一个字,共计
M
个字;步骤
2、
线程取数:采用
x
个线程并行计算一个大整数乘法,每个线程根据位置从被乘数
A
或0中取
k
个字与乘数
B
相乘;步骤
3、
乘法运算:对于步骤2中取到的数,在每个线程当中使用区分高位低位的乘加指令,依次计算被乘数与乘数的乘积,将最终结果保存至
Result
,进位保存在
Carry1、Carry2
中;步骤
4、
进位运算:通过使用洗牌指令获取其他线程运算产生的进位
Carry1、Carry2
放入
tmp
中,使用加法指令计算
Result

tmp
的和,将新的结果写入
Result
,将新产生的进位保存在
Carry
中;通过循环迭代方式,即使用
CUDA
的束表决函数,判断在一个线程束中,是否有线程存在进位;如果存在,线程束中的所有线程同时累加迭代,直到所有线程不再产生进位;步骤
5、
结果写回:将各线程所得到的计算结果
Result
放入最终结果的对应位置并输出结果
。2.
根据权利要求1所述的一种基于
GPU
并行实现密码技术中大整数乘法的方法,其特征在于,对被乘数
A
和乘数
B
划分时,若长度不能被
w
整除,通过高位补0的方式将长度填充至
w
的整数倍
。3.
根据权利要求1或2任一项所述的一种基于
GPU
并行实现密码技术中大整数乘法的方法,其特征在于,对于步骤1的划分结果,定义以下符号:
A[u]
表示
A
的第
u
个字,
B[u]
表示
B
的第
u
个字,
A[0:N

1]
表示被乘数
A
的第0~
(N

1)

N
个字,
B[0:M

1]
乘数
B
的第0~
(M

1)

M
个字
。4.
根据权利要求1或2所述的一种基于
GPU
并行实现密码技术中大整数乘法的方法,其特征在于,对于步骤1的划分结果:
A

N...

【专利技术属性】
技术研发人员:董振江叶青波董建阔亓晋孙雁飞陈滏媛
申请(专利权)人:南京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1