【技术实现步骤摘要】
一种基于GPU快速数论转换的全同态加密门自举方法
[0001]本专利技术涉及一种基于GPU的快速数论转换的实现方法,特别是一种应用于全同态加密的门自举过程的快速数论转换实现方法。
技术介绍
[0002]同态加密(Fully Homomorphic Encryption,FHE)是指一种允许在密文上进行计算的加密方式,即通过对密文进行运算,将该运算结果解密所得的结果与对明文进行同样的运算结果一样。为了保证密文的安全性,同态加密的密文一般会引入噪声,由于在同态加密运算的过程中,密文的噪声会不断增大,在一定次数的运算之后会增大到使密文解密得不到正确结果。因此,全同态加密为了能够支持无限次数的运算,需要一个能够刷新密文噪声的过程,称为自举(bootstrapping)。自举可以通过对带有噪声的密文进行处理,从而得到一个新密文,并且新密文的噪声被重置。自举算法是全同态加密中耗时最长的部分。
[0003]Chillotti等人于2016年在文献“Faster fully homomorphic encryption:Bootst ...
【技术保护点】
【技术特征摘要】
1.一种基于GPU快速数论转换的全同态加密门自举方法,其特征在于:包括以下步骤:步骤1:初始化:构造初始中间密文c=(A0,A1,...,A
K
‑1,A
K
)∈T
N
(x)
K+1
,其中A
j
=0(j=0,1,...,K
‑
1),A
K
=(1+x+...+x
N
‑1)
·
x
N/2
·
μ
′
,其中令C
′
d
为最接近2N
·
C
d
的整数,其中d=0,1,...,K
′
,然后令将ACC0存储在全局内存中;其中T
N
(x)表示系数在[0,1)范围内且最大次数为N
‑
1的多项式,N为2的整数幂;K为正整数;C
d
为TLWE密文C=TLWE
s
(μ)中的参数:C=(C0,C1,...,C
K
′‑1,C
K
′
)∈T
K
′
+1
,C
d
∈T,d=0,1,...,K
′
,T表示区间[0,1),TLWE明文μ={μ0,μ1},K
′
为正整数;步骤2:gadget分解:令对ACC进行gadget分解,其中分解基H∈T
N
(x)
(K+1)L
×
(K+1)
,得到分解结果dec
H
(ACC)=(A1,A2,...,A
(K+1)L
),其中L为正整数,j
′
=(K+1)j+q,c
ijq
∈[
‑
B
g
/2,B
g
/2),且c
ijq
为整数,i=0,1,...,N
‑
1,j=0,1,...,K,q=1,2,...,L,j
′
=1,2,...,(K+1)L;步骤3:将存储在共享内存x
i
(i=0,1,...,N
‑
1)中作为输入,通过以下过程进行快速数论转换,其中W为模数p的一个本原根;步骤3.1:对于大整数N,N=2
q
,q为正整数,N点NTT的输入为x
i
(i=0,1,...,N
‑
1),输出为X
i
(i=0,1,...,N
‑
1);根据公式将N点NTT计算分解为t个n点NTT和n个t点NTT,其中N=t
·
n,n以及t为正整数,且为2的幂;i=ti2+i1,为n点NTT的旋转因子,且为n点NTT的旋转因子,且为t点NTT的旋转因子,且为t点NTT的旋转因子,且部分通过n点NTT来计算,其输入为对于N个点共有t个n点NTT,然后将t个n点NTT的结果再分别乘以N点NTT的旋转因子作为内部计算结果将内部结果作为输入,对于通过t点NTT来计算,对于N个点共有n个t点NTT,计算得到的结果即为N点NTT的最终结果具体计算过程如以下步骤3.2~步骤3.6:
步骤3.2:在GPU上进行线程分配,共需N个线程;在计算n点NTT时,分为t个分组,将每个分组称为一个块,每个块有一个唯一确定的i1(i1=0,1,...,t
‑
1),以i1的值为每个块的序号,每个块包括n个线程,计算对应的一个n点NTT,对于i1确定的块,其n个输入为每个块中的每个线程的k2值各不相同,以k2的值来定义每个块中线程的顺序,对于每个块中的第k(k=0,1,...,n
‑
1)个线程,有k2=k;之后为每个线程分配计算任务;步骤3.3:n点NTT合并预处理:对于第k(k=0,1,...,n
‑
1)个线程,当k为奇数时,对于m=0,1,...,n/2
‑
1,根据公式进行合并预处理;当k为偶数时,对于m=0,1,...,n/4
‑
1,n/2,...,3n/4
‑
1,根据公式进行合并预处理;其中modp(a)表示整数a对p取模,令modsub(a,b)=modp(a
‑
b)表示2个64比特无符号数a和b模p的减法;步骤3.4:将步骤3.3得到的每个x
″
m
扩充为三个无符号64比特数,这三个无符号数从高位到低位分别使用a
m
,b
m
,c
m
来表示:a
m
=0,b
m
=0,c
m
=x
″
m
,用移位运算来代替乘法运算,得到192比特的结果;再将得到的n/2个192比特数进行有进位的加法,得到NTT运算结果的192比特形式s;步骤3.5:计算s对p取模,得到计算结果X
′
k
;每个线程计算一个X
′
k
(k=0,1...,n
‑
1),对于第k(k=0,1,...,n
‑
1)个线程,其计算的结果为所有的n个线程进行相同的计算就可以得到这个块的结果;步骤3.6:共分了t个块,每个块有唯一确定的i1,对于一个确定i1的块,这个块的每个线程有确定的k2,该线程计算的结果为每个线程需要乘以对应的N点NTT的旋转因子得到将每个线程得到的结果分别返回到存储中间结果的共享内存的第t
·
k2+i1个单元用于下一步计算:其中k2=0,1,...,n
‑
1,i1=0,1,...,t
‑
1;如果t=4,8,16,32,则对进行n个t点NTT的计算,将GPU分成n个块,每个块有t个线程,进行一个t点NTT计算,每个块的输入为输出为输出为如果t仍然大于32,则对于每个t点NTT,分解成t/n个n点NTT和n个t/n点NTT两部分进行计算。如果t/n仍然大于32,那么计算t/n点NTT时继续分解,以此类推,直到全部分解为以4
点,8点,16点,32点的NTT为基计算;步骤4:将所有的都进行快速数论转换得到NTT(A
j
′
),对所有的KS
0j
′
j
也进行快速数论转换得到NTT(KS
0j
′
j
),然后计算NTT(A
j
′
)与NTT(KS
0j
′
j
)的乘法,再进行逆快速数论变换,将逆变换得到的结果相加得到其中j=0,1,...,K,然后将所有ACC
1j
组成的向量再减去ACC,得到:ACC1=(ACC
10
,ACC
11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。