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

一种全同态加密GPU高性能实现方法与流程

2021-10-24 04:29:00 来源:中国专利 TAG:同态 高性能 加密 方法 信息安全

一种全同态加密gpu高性能实现方法
技术领域
1.本发明涉及信息安全领域,具体是指一种全同态加密gpu高性能实现方法。


背景技术:

2.fv同态加密方案,该方案的安全性是基于rlwe问题,能够实现在密文域上的乘法和加法运算,cuda并行计算框架,能够使用英伟达图形处理器(graphics processing unit,gpu)执行并行计算任务,基于此,现有的基于cuda的在gpu上实现的高性能fv算法的rns变体方案一般包括密钥生成算法、加密算法、解密算法、同态加法算法和同态乘法算法。
3.但是现有技术存在如下缺陷:
4.(1)在密钥生成过程中,密钥生成过程计算得到a*sk的值后,使用一个cuda流执行重线性化密钥计算过程中的sk平方及扩展任务,另一个cuda流执行公钥计算任务,当两个流的任务均执行完之后,由cpu进行流同步,之后提交dgt变换计算任务,完成密钥生成,在该过程中,cpu提交的新任务需要gpu重新进行资源分配后才能真正启动,因此,在该过程中gpu存在较长的负载空窗期,造成gpu计算资源的严重浪费;
5.(2)在同态乘法过程中,同态乘法过程中需要生成多个cuda流来执行不同任务之间的并发,在cuda流同步操作之后,cpu提交的新任务需要gpu重新进行资源分配后才能真正启动,因此,在该过程中gpu存在较长的负载空窗期,造成gpu计算资源的严重浪费。


技术实现要素:

6.基于以上问题,本发明提供了一种全同态加密gpu高性能实现方法,解决了密钥生成算法和同态乘法算法在同步过程中,cuda流需要等待cpu提交新的计算任务,并针对提交的计算任务进行新的gpu资源初始化,从而导致任务执行过程中对gpu资源利用率低的问题。
7.为解决以上技术问题,本发明采用的技术方案如下:
8.一种全同态加密gpu高性能实现方法,包括如下步骤:
9.步骤1、利用cuda curand在gpu上生成密钥所需的随机多项式;
10.步骤2、构造密钥生成的cuda实例化图,执行密钥生成的cuda实例化图,最后将cuda实例化图的输出内存中的数据拷贝至保存密钥的对象中;
11.步骤3、加密时,输入需加密的明文多项式m∈r
t
,其中t为明文多项式模数,r为模x
n
1的系数为整数的多项式构成的多项式环,再输入用于加密的公匙集合pk,从r
q
中均匀采集一个多项式u,其中q为密文多项式模数,计算密文集合ct,计算公式为:
12.ct=(ct0,ct1)=([δm pk0*u e1]
q
,[pk1*u e2]
q
),
[0013]
其中,ct0,ct1分别为密文集合ct中的两个密文,δm为将明文多项式乘以δ=q/t后的结果,,pk0,pk1分别为公匙集合pk中的公匙,且,e1,e2为生成的两个误差多项式,
[0014]
步骤4、解密时,输入需要解密的密文集合ct,使用私钥集合sk以及冗余模数γ,首先对j∈{t,γ}计算s
(j)
,计算公式为:
[0015]
s
(j)
=fastbconv(|γt*(ct[0] ct[1]*sk)|
q
,q,j)*|

q
‑1|
j
(modj),
[0016]
其中,s
(j)
为对j进行计算的结果,j分别依次取为为t或γ,fastbconv()为快速基转换函数,(modj)表示所有运算均在模j下进行;
[0017]
然后将s
(γ)
转化至绝对最小剩余最后计算m
(t)
,计算公式为:
[0018][0019]
其中m
(t)
为解密出的明文多项式;
[0020]
步骤5、输入两个密文ct0,ct1,计算ct
add
,计算公式为:
[0021]
ct
add
=([ct0[0] ct1[0]]
q
,[ct0[1] ct1[1]]
q
),
[0022]
其中ct
add
为进行同态加法运算后得到的密文;
[0023]
步骤6、计算同态乘法过程中需要扩充的模数集合b以及两个额外的冗余模数
[0024]
步骤7、构造同态乘法的cuda实例化图,将需要进行乘法运算的密文拷贝至同态乘法的cuda实例化图的输入内存中,执行同态乘法的cuda实例化图,最后将cuda实例化图的输出内存中的数据拷贝至保存乘法结果的对象中。
[0025]
进一步,所述步骤1中,生成密钥所需的随机多项式的方法具体为:
[0026]
确定三个分布,分别为x2,x
q
,x
err
,其中,x2,x
q
为均匀分布,x
err
为高散截断高斯分布;
[0027]
在x2中采样一个随机多项式时,在gpu上启动n个线程,其中n是多项式的次数,每个线程从curand均匀随机数生成器取模2采样一个数字;
[0028]
在x
q
中采样一个随机多项式时,在gpu上启动r*n个线程,划分为r组,每一组对应一个单精度模数q
i
,i∈r,每个线程生成1个模q
i
的均匀随机数;
[0029]
在x
err
中采样一个随机多项式时,在gpu上启动n个线程,每个线程使用curand中的正态分布随机数生成器,生成一个正态分布随机数,并判断该随机数绝对值是否小于截断上限,若大于则重新生成,否则输出该随机数。
[0030]
进一步,所述步骤2中,构造密钥生成的cuda实例化图的方法具体为:
[0031]
步骤21、预先分配密钥生成过程中用于存储各阶段的中间计算结果的gpu内存空间;
[0032]
步骤22、预分配用于存放密钥生成过程中输出的gpu内存空间;
[0033]
步骤23、创建一个空白的cuda图;
[0034]
步骤24、创建若干个空白的cuda图节点;
[0035]
步骤25、配置密钥生成过程中各个计算任务的gpu核函数的启动参数,并将配置好的gpu核函数的启动参数与一个空白的cuda图节点绑定,加入到cuda图中;
[0036]
步骤26、为cuda图中的节点配置依赖关系;
[0037]
步骤27、将配置好后的cuda图实例化,得到cuda实例化图。
[0038]
进一步,所述步骤25中,密钥生成过程中各个计算任务的gpu核函数的启动参数包括函数参数、指向函数参数的指针列表、指向指向函数参数的指针列表的指针、核函数block的维数、核函数grid的维数、指向核函数的函数指针、核函数使用的共享内存字节数和核函数额外参数。
[0039]
进一步,所述步骤6中,计算同态乘法过程中需要扩充的模数集合b以及两个额外的冗余模数m
sk
,的具体方法为:
[0040]
步骤61、输入需进行乘法的两个密文以及重线性化密钥,将输入的密文通过快速基转换函数fastbconv转换至模数集合所表示的域中;
[0041]
步骤62、通过小蒙哥马利算法,将密文由转换至b
sk
中,以消除快速基转换函数带来的溢出误差;
[0042]
步骤63、将密文在q∪b
sk
中进行环乘法;
[0043]
步骤64、将q域中的乘法结果通过快速基转换至b
sk
中并执行余数系统(rns)下的地板运算;
[0044]
步骤65、使用shenoy

kumaresan算法利用冗余模数m
sk
将步骤64的结果转换回q域,并执行重线性化操作。
[0045]
进一步,所述快速基转换函数fastbconv的计算公式为:
[0046][0047]
其中,x表示要进行快速基转换的元素,x
i
表示x在模q
i
下的剩余,mod b表示所有运算均在模b下进行。
[0048]
进一步,所述步骤7中,构造同态乘法的cuda实例化图的方法具体为:
[0049]
步骤71、预先分配同态乘法过程中用于存储各阶段的中间计算结果的gpu内存空间;
[0050]
步骤72、预分配用于存放同态乘法过程中输出及输入的gpu内存空间;
[0051]
步骤73、创建一个空白的cuda图;
[0052]
步骤74、创建若干个空白的cuda图节点;
[0053]
步骤75、配置同态乘法过程中各个计算任务的gpu核函数的启动参数,并将配置好的同态乘法过程中各个计算任务的gpu核函数的启动参数与一个空白的cuda图节点绑定,加入到cuda图中;
[0054]
步骤76、为cuda图中的节点配置依赖关系;
[0055]
步骤77、将配置好后的cuda图实例化,得到cuda实例化图。
[0056]
进一步,所述步骤75中,同态乘法过程中各个计算任务的gpu核函数的启动参数包括函数参数、指向函数参数的指针列表,指向指向函数参数的指针列表的指针、核函数block的维数、核函数grid的维数、指向核函数的函数指针、核函数使用的共享内存字节数和核函数额外参数。
[0057]
与现有技术相比,本发明的有益效果是:
[0058]
(1)缩短设备(cpu和gpu)启动时间:在现有技术中使用cuda流组织密钥生成以及同态乘法过程中可并发执行的计算任务,gpu在执行每一个计算任务前,需要进行该任务的初始化操作,令任务在gpu上的初使化操作耗时为t
init
,任务的执行时间为t
work
,则以cuda流的方式在gpu上执行一个任务学需要的时间为t
init
t
work
,本技术中使用cuda图的方式来组织任务,cuda图在实例化时会将图中计算任务进行部分初始化,而执行实例化后的cuda图时,图中的计算任务初始化时间为t
init

,且有t
init

<t
init
,gpu完成图中的一个计算任务所
需的时间为t
init

t
work
,因此,密钥生成和同态乘法过程中gpu完成一个计算任务所需的时间比原有方案更少;
[0059]
(2)现有技术中,在需要进行cuda流同步时,需要cpu对gpu发出同步指令,cuda流中任务在到达同步点后将等待cpu提交新的任务,而在本技术中,由于cuda图中定义好了各个计算任务的依赖关系,因此在两个并发的任务完成同步后,gpu将自动执行下一个满足依赖关系的计算任务而无需等待cpu进行任务提交,这使得本技术在执行密钥生成以及同态乘法运算时具有更快的运行速度。
[0060]
(3)现有技术中,每执行一次密钥生成运算或同态乘法运算,都需要cpu完成对应运算中全部计算任务的提交,而本技术中,由于事先将对应的cuda图完成了实例化,因此在执行密钥生成运算或同态乘法运算时,cpu只需要提交一次对应的cuda实例化图即可,该操作的时延远小于cpu进行全部计算任务提交所需要的时间。
附图说明
[0061]
图1为本实施例的流程图;
[0062]
图2为本实施例的密钥生成过程中的cuda图;
[0063]
图3为本实施例的同态乘法过程中的cuda图。
具体实施方式
[0064]
下面结合附图对本发明作进一步的说明。本发明的实施方式包括但不限于下列实施例。
[0065]
如图1所示,一种全同态加密gpu高性能实现方法,包括如下步骤:
[0066]
步骤1、利用cuda curand在gpu上生成密钥所需的随机多项式。
[0067]
其中,生成密钥所需的随机多项式的方法具体为:
[0068]
确定三个分布,分别为x2,x
q
,x
err
,其中,x2,x
q
为均匀分布,x
err
为高散截断高斯分布;
[0069]
在x2中采样一个随机多项式时,在gpu上启动n个线程,其中n是多项式的次数,每个线程从curand均匀随机数生成器取模2采样一个数字;
[0070]
在x
q
中采样一个随机多项式时,在gpu上启动r*n个线程,划分为r组,每一组对应一个单精度模数q
i
,i∈r,每个线程生成1个模q
i
的均匀随机数;
[0071]
在x
err
中采样一个随机多项式时,在gpu上启动n个线程,每个线程使用curand中的正态分布随机数生成器,生成一个正态分布随机数,并判断该随机数绝对值是否小于截断上限,若大于则重新生成,否则输出该随机数。
[0072]
步骤2、构造密钥生成的cuda实例化图,执行密钥生成的cuda实例化图,最后将cuda实例化图的输出内存中的数据拷贝至保存密钥的对象中。
[0073]
其中,构造密钥生成的cuda实例化图的方法具体为:
[0074]
步骤21、预先分配密钥生成过程中用于存储各阶段的中间计算结果的gpu内存空间;
[0075]
步骤22、预分配用于存放密钥生成过程中输出的gpu内存空间;
[0076]
步骤23、创建一个空白的cuda图;
[0077]
步骤24、创建若干个空白的cuda图节点;
[0078]
步骤25、配置密钥生成过程中各个计算任务的gpu核函数的启动参数,包括函数参数、指向函数参数的指针列表、指向指向函数参数的指针列表的指针、核函数block的维数、核函数grid的维数、指向核函数的函数指针、核函数使用的共享内存字节数和核函数额外参数,并将配置好的gpu核函数的启动参数与一个空白的cuda图节点绑定,加入到cuda图中;
[0079]
步骤26、为cuda图中的节点配置依赖关系,配置好后的cuda图如图2所示,其中各节点的计算任务分别为:root,空节点,不进行任何操作,另外,本实施例中每个节点的含义如下:
[0080]
(1)1号节点表示生成误差多项式e;
[0081]
(2)2号节点表示生成均匀随机多项式a;
[0082]
(3)3号节点和4号节点表示将私钥集合sk以及均匀随机多项式a进行dgt变换;
[0083]
(4)5号节点表示将变换后的sk以及a多项式相乘,计算sk*a以及sk*sk;
[0084]
(5)6号节点和7号节点表示将相乘后的sk*a结果进行dgt逆变换;
[0085]
(6)8号节点表示计算a*sk e的值;
[0086]
(7)9号节点表示,计算其中,p
rns,q
()表示在余数系统下的基数分解的逆过程,s2表示私钥的平方,q表示密文多项式模数,k表示密文模数集合中单精度模数的个数;
[0087]
(8)10号节点表示将9号节点的计算结果扩展成r个完整的crt表示下的多项式,其中,r表示单精度模数的个数;
[0088]
(9)11号节点表示9号节点的计算结果减去a*sk e,以及0

(a*sk e)的值;
[0089]
(10)12号节点和13号节点表示将计算出的密钥进行dgt变换。
[0090]
步骤17、将配置好后的cuda图实例化,得到cuda实例化图。
[0091]
步骤3、加密时,输入需加密的明文多项式m∈r
t
,其中t为明文多项式模数,r为模x
n
1的系数为整数的多项式构成的多项式环,再输入用于加密的公匙集合pk,从r
q
中均匀采集一个多项式u,其中q为密文多项式模数,计算密文集合ct,计算过程为:
[0092]
(1)生成两个误差多项式e1,e2和均匀随机多项式u;
[0093]
(2)计算δm的值;
[0094]
(3)将多项式u进行dgt变换;
[0095]
(4)将变换后的u分别与pk0,pk1相乘;
[0096]
(5)将相乘后的结果执行dgt逆变换;
[0097]
(6)将逆变换后的结果分别与δm和多项式相加;
[0098]
(7)将相加后的结果分别与e1,e2相加;
[0099]
其具体计算公式为:
[0100]
ct=(ct0,ct1)=([δm pk0*u e1]
q
,[pk1*u e2]
q
),
[0101]
其中,ct0,ct1分别为密文集合ct中的两个密文,δm为将明文多项式乘以δ=q/t后的结果,pk0,pk1分别为公匙集合pk中的公匙,e1,e2为生成的两个误差多项式。
[0102]
步骤4、解密时,输入需要解密的密文集合ct,使用私钥集合sk以及冗余模数γ,首
先对j∈{t,γ}计算s
(j)
,计算公式为:
[0103]
s
(j)
=fastbconv(|γt*(ct[0] ct[1]*sk)|
q
,q,j)*|

q
‑1|
j
(modj),
[0104]
其中,s
(j)
为对j进行计算的结果,j分别依次取为为t或γ,fastbconv()为快速基转换函数,(modj)表示所有运算均在模j下进行;
[0105]
然后将s
(γ)
转化至绝对最小剩余最后计算m
(t)
,计算公式为:
[0106][0107]
其中m
(t)
为解密出的明文多项式;
[0108]
步骤5、输入两个密文ct0,ct1,计算ct
add
,计算公式为:
[0109]
ct
add
=([ct0[0] ct1[0]]
q
,[ct0[1] ct1[1]]
q
),
[0110]
其中ct
add
为进行同态加法运算后得到的密文;
[0111]
步骤6、计算同态乘法过程中需要扩充的模数集合b以及两个额外的冗余模数
[0112]
其中,计算同态乘法过程中需要扩充的模数集合b以及两个额外的冗余模数的具体方法为:
[0113]
步骤61、输入需进行乘法的两个密文以及重线性化密钥,将输入的密文通过快速基转换函数fastbconv转换至模数集合所表示的域中,快速基转换函数fastbconv的计算公式为:
[0114][0115]
其中,x表示要进行快速基转换的元素,x
i
表示x在模q
i
下的剩余,mod b表示所有运算均在模b下进行。
[0116]
步骤62、通过小蒙哥马利算法,将密文由转换至b
sk
中,以消除快速基转换函数带来的溢出误差;
[0117]
步骤63、将密文在q∪b
sk
中进行环乘法;
[0118]
步骤64、将q域中的乘法结果通过快速基转换至b
sk
中并执行余数系统(rns)下的地板运算;
[0119]
步骤65、使用shenoy

kumaresan算法利用冗余模数m
sk
将步骤64的结果转换回q域,并执行重线性化操作。
[0120]
步骤7、构造同态乘法的cuda实例化图,将需要进行乘法运算的密文拷贝至同态乘法的cuda实例化图的输入内存中,执行同态乘法的cuda实例化图,最后将cuda实例化图的输出内存中的数据拷贝至保存乘法结果的对象中。
[0121]
其中,构造同态乘法的cuda实例化图的方法具体为:
[0122]
步骤71、预先分配同态乘法过程中用于存储各阶段的中间计算结果的gpu内存空间;
[0123]
步骤72、预分配用于存放同态乘法过程中输出及输入的gpu内存空间;
[0124]
步骤73、创建一个空白的cuda图;
[0125]
步骤74、创建若干个空白的cuda图节点;
[0126]
步骤75、配置同态乘法过程中各个计算任务的gpu核函数的启动参数,包括函数参
数、指向函数参数的指针列表,指向指向函数参数的指针列表的指针、核函数block的维数、核函数grid的维数、指向核函数的函数指针、核函数使用的共享内存字节数和核函数额外参数,并将配置好的同态乘法过程中各个计算任务的gpu核函数的启动参数与一个空白的cuda图节点绑定,加入到cuda图中;
[0127]
步骤76、为cuda图中的节点配置依赖关系,配置好后的cuda图如图3所示,其中各节点的计算任务分别为:root,空节点,不进行任何操作,另外,本实施例中每个节点的含义如下:
[0128]
(1)0号节点表示将摸p下的密文转换到扩展模数下;
[0129]
(2)1号节点表示在额外模数下对转换后的密文执行小蒙哥马利模乘;
[0130]
(3)2号节点和3号节点表示对密文模数部分下的密文进行dgt变换;
[0131]
(4)4号节点和5号节点表示对额外模数下的密文进行dgt变换;
[0132]
(5)6号节点表示计算密文模数下的ct0[0]*ct1[0]和ct0[1]*ct1[1];
[0133]
(6)7号节点表示计算额外模数下的ct0[0]*ct1[0]和ct0[1]*ct1[1];
[0134]
(7)8号节点表示计算密文模数下的ct0[0]*ct1[1];
[0135]
(8)9号节点表示计算密文模数下的ct0[1]*ct1[0];
[0136]
(9)10号节点表示计算额外模数下的ct0[0]*ct1[1];
[0137]
(10)11号节点表示计算额外模数下的ct0[1]*ct1[0];
[0138]
(11)12号节点和14号节点表示将密文模数下的运算结果进行dgt逆变换;
[0139]
(12)13号节点和15号节点表示将扩展模数下的运算结果进行dgt逆变换;
[0140]
(13)16号节点表示将密文模数下的ct0[0]*ct1[1]和ct0[1]*ct1[0]相加;
[0141]
(14)17号节点表示将扩展模数下的ct0[0]*ct1[1]和ct0[1]*ct1[0]相加;
[0142]
(15)18号节点表示将密文模数下的计算结果乘以t,t是明文模数;
[0143]
(16)19号节点表示将额外模数下的计算结果乘以t,t是明文模数;
[0144]
(17)20号节点表示将密文模数下的计算结果进行快速基转换到额外模数;
[0145]
(18)21号节点表示运行fastrnsfloor算法计算得到c0,c1,c2;
[0146]
(19)22号节点表示将fastrnsfloor计算的结果的b基模数下的部分快速基转换至m
sk
模数下;
[0147]
(20)23号节点表示计算α
sk,x
=[(fastbconv(x,b,{m
sk
})

x
sk
)m
‑1]
msk
,其中,α
sk,x
表示由b基转换至模m
sk
下的x,m
‑1表示b基中所有元素的连乘积在模m
sk
下的逆元;
[0148]
(21)24号节点表示将fastrnsfloor计算的结果的b基模数下的部分快速基转换至密文模数下;
[0149]
(22)25号节点表示计算fastbconvsk(x,b
sk
,q),计算公式为:
[0150]
fastbconvsk(x,b
sk
,q)=(fastbconv(x,b,q)

α
sk,x
m)mod q=xmod q,
[0151]
其中,fastbconvsk()表示将b
sk
基下的x转换至q基,并利用x在模m
sk
下的分量消除误差;
[0152]
(23)26号节点表示计算计算公式为:
[0153][0154]
其中,表示25号节点的计算结果;
[0155]
(24)27号节点表示将26号节点计算结果中的每一个单精度模数下的分量扩展为独立的密文模数crt表示下的完整多项式;
[0156]
(25)28号节点和29号节点表示将扩展后的多项式进行dgt变换;
[0157]
(26)30号节点表示将变换后的结果乘以重线性化密钥的第一部分;
[0158]
(27)31号节点表示将变换后的结果乘以重线性化密钥的第二部分;
[0159]
(28)32号节点和33号节点表示将30号节点和31号节点的结果进行dgt逆变换,分别得到c
10
,c
11
,其中,c
10
,c
11
分别表示与重现性化密钥第一、第二部分进行相乘的结果;
[0160]
(29)34号节点将c
10
与c0相加;
[0161]
(30)35号节点将c
11
与c1相加;
[0162]
步骤77、将配置好后的cuda图实例化,得到cuda实例化图。
[0163]
如上即为本发明的实施例。上述实施例以及实施例中的具体参数仅是为了清楚表述发明人的发明验证过程,并非用以限制本发明的专利保护范围,本发明的专利保护范围仍然以其权利要求书为准,凡是运用本发明的说明书及附图内容所作的等同结构变化,同理均应包含在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献

  • 日榜
  • 周榜
  • 月榜