在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码、打包、SIMD到底有什么关系?
今天看到一篇文章,彻底读懂了SIMD编码,推荐【更新|Cheetah: 精简快速的安全两方DNN推理】
编码
在CKKS方案中,因为明文空间在复数域上,简单的说一个明文就是一个复数向量,那么CKKS是基于RLWE问题,计算是在环上,也就是整数多项式上,所以在加密之前需要进行编码,将一个复数向量编码成一个整数多项式,然后在加密,进而计算。
那如何将一个复数向量编码为了整数多项式?
具体细节请参考:CKKS Part2: CKKS的编码和解码
BGV和BFV方案同样也是,都是基于RLWE问题,计算是在环上,不同的是他们的明文空间在整数域上,所以也需要编码,将其转化为一个整数多项式。
简单点说,CKKS中的编码:
1、首先通过一个映射,将复数向量转成实数多项式
2、然后通过放大实数多项式的系数,然后取整的操作,实现了实数多项式转整数多项式
新的编码技术
由于已知的全同态加密方案一般不支持对有理数进行加密,因而本文需要建立连接有理数与整数的纽带。在不影响有理数精度的情况下,最简单的方法是将有理数乘以一个固定数 B 的幂,例如 \(B^2\),其中 \(B ≥ 2\)。接着,再对处理后的有理数进行加密和同态运算。最后,将解密结果除以 B 的幂即可得到正确运算结果。然而,每经过一次乘法同态则需要一次对解密结果除以 B 的幂操作。
这里和CKKS编码很像,要乘以一个缩放因子,放大有理数;然后进行一次乘法同态后,缩放因子变大,所以每进行一次乘法同态就需要除于一次B的幂,和CKKS中的rescaling(重缩放)很像啊
这里【1】给出了一种新的编码技术,可以将一个有理数编码为环上元素
batch技术
使用了SIMD技术,从而实现了打包,即SIMD编码的过程。从编码上看,就是将一些明文(数
)打包为一个多项式,一次多项式计算,就是多个明文间的计算。能加快计算速度,提升效率!
下面简单的介绍一下:
选择合适的明文模数t,这里有一个环上的同构关系:明文空间\(R_t->Z_t^n\)
举个例子就是,一个常数多项式\(a\in R_t\)对应一个向量\((a_1,a_2,...,a_n)\in Z_t^n\),且这个同构能将多项式之间的加法和乘法映射为向量之间的加法和乘法。
所以使用这个打包技术能减少通信和计算开销。
1、首先将Y个明文以n为一组,划分成向量组
2、然后加密,得到Y/n的密文
待补充.....
SIMD编码
SIMD(Simple Instruction Multiple Data)直接翻译是“单指令多数据”,网上搜索出来的大都是关于SIMD指令集,说该指令集支持向量化的数据并行,一个指令可以同时操作多个数据。听起来有那个打包的意思,但这是指令集,和编码有什么关系呢?
丢一个SIMD指令集在这,可以看看:
都说使用SIMD技术,可以提升效率,那SIMD到底是什么呢?
SIMD的发展
1、Smart 与 Vercauteren [18] 首次利用 SIMD技术将单比特的全同态加密方案扩展为多比特的全同态加密方案,实现了对消息的并行处理。遗憾的是该方案要求主理想范数为素数,使得算法的密钥生成过程过于复杂。
2、2011 年,Gentry 和 Halevi [19] 提出一种运算速度更快的密钥生成算法,该算法抛弃了主理想范数为素数的假设。
3、Scholl 和 Smart [20] 将文献 [19] 的快速密钥生成算法由 2 次幂分圆域扩展到任意分圆域,其算法效率为原先方案的两倍。
4、2014 年,Smart等人 [21] 进一步对文献 [18] 的密钥生成算法进行优化,并介绍了如何进行参数设置以适用 SIMD 技术。
SIMD
大多数全同态加密方案的明文空间为 2。当明文消息很大时,将导致消息的编码时间、加密时间及密文解密时间过长。为提高同态运算效率,可以利用 SIMD 技术 [21]将多个小明文编码-加密成一个密文。
说实话,截止到这里,我还是不太明白,下面内容大佬把SIMD编码介绍的很清楚!(有些小问题:打包的应该是\(a_i\))
总结一下:
SIMD编码就是把一些数变成一个多项式,以上面为例就是:
(4,13)编码为x
(1,2)编码为2x-7
具体怎么编码的呢?
那怎么求f(x)呢?
1、首先分圆多项式\(x^n+1\)通过CRT可以拆分为\((x+a_0)...(x+a_n)mod p\)
这里n=2,p=17,则\(x^2+1=(x-4)(x-13)mod 17\)
2、要对(4,13)编码,就是求f(x):
使用CRT求\(f(x)\):
3、那怎么解码呢?就是有f(x)了,怎么求(4,13)呢?
4、至于加法同态和乘法同态就是将编码后的多项式做相应计算,解码后相当于这些数做相应计算
满足同态性!
应用
BGV方案
参考:云外包密文查询和计算研究
packing1
该小节是论文"A low latency framework for Secure neural network inference"中的一部分,描写SIMD的,在此记录。
(1)描述了一个使用"pack"技术的加法同态方案。"pack"即支持将多个明文数据打包到一个密文中,同态计算有以下操作:SIMDAdd(密文+密文)、SIMDScMult(密文*明文)、Perm(密文旋转)
(2)该方案主要包括以下算法:Enc(加密)、Dec(解密)、Eval(同态计算)。
(3)该方案需要满足两个安全性:IND-CPA安全,即在计算上无法区分两个不同的密文;函数安全,即Eval中的\(f(x)\)只能输出结果信息,不能泄露其他信息。
(4)主要介绍方案的参数:m,是分圆多项式的阶,即\(\Phi_m(X)\);q,密文模数;p,明文模数;\(\chi\),离散高斯分布的标准方差\(\sigma\)
(5)一个打包密文中的slot个数为\(n=\phi(m)\)(欧拉函数),所以一个明文可以看作是长度为n的向量在\(Z_p\)上,密文可以看作是长度为n的向量在\(Z_q\)上;新鲜密文的噪音\(\eta\)来自随机采样的高斯分布,同态计算会导致噪音\(\eta\)增加;Dec(解密)的正确性需要满足$\left|\eta \right| <q/(2p) $。
(6)为了保证安全性,需要使得\(\sigma\)(基于q和n),\(q%m=1\),且\(gcd(p,q)=1\);维数\(r%p=q\)应尽可能小。
(7)同态加法,两个密文(u和v)相加的运行时间为\(n.CostAdd(q)\),其中\(CostAdd(q)\)是\(Z_q=(0,1,2,...,q-1)\)中的两个数相加的时间;增加的噪音最多至\(\eta _u+\eta _v\)。
(8)密文*明文,如果\(p%m=1\),则可以使用SIMD技术,明文v和密文u,输出\([u*v]\),即向量中的元素逐个相乘。运行时间为\(n.CostMult(q)\),其中\(CostMult(q)\)是\(Z_q=(0,1,2,...,q-1)\)中的两个数相乘的时间;噪音为\(\left\|v \right\|_{\infty }'.\sqrt{n}\) ,其中\(\left\|v \right\|_{\infty }\)是向量v得无穷范数,那么如果换成{0,1}向量则噪音为\(p.\sqrt{n}\)。事实上我们会使用bit-decomposing(比特分解)技术,将v转换成{0,1}表示的向量,即\(v=\sum 2^{w_{pt}.k}.v_k\)。
(9)(Perm)密文旋转,给定一个映射\(\pi\) ,能将一个密文\([u]\)转换为\([u_{\pi}]=[u_{\pi(1)},u_{\pi(2)},....,u_{\pi(n)}]\)。旋转依赖于模m的乘法群(\(Z/mZ\),m是素数),\(n=m-1\)个slot。置换群支持slot的循环旋转。模m的乘法群(\(Z/mZ\))同构于阶为n的循环群\(C_n\)。当\(m=2^k,m\geq 8,n=2^{k-1}\)时,置换同构于半循环群\(C_{n*2}*C_2\)。
(10)(密文结构)n指slot得个数;q时密文空间大小,所以一个密文需要\(\left \lceil log_2q\right \rceil\)bit;p是明文空间的大小,所以一个明文需要\(\left \lceil log_2p\right \rceil\)bit;$\eta $是密文的噪音大小。
(11)(密文旋转),这里的旋转映射\(\pi\)将第一个slot和第二个slot旋转,第三个slot和第四个slot旋转;该操作产生的噪音为\(\eta'\approx \eta+\eta_{rot}\),这里的\(\eta_{rot}\approx n.logq.\eta_0\),\(\eta_0\)是"新鲜"噪音。
(12)密文旋转是一个"昂贵"的操作。一个旋转的耗费\(O(n.logn.logq)\)相当于一个\(NTT\)和\(NTT^{-1}\),噪音为\(\eta_{u_{\pi}}=\eta_u+\eta_{rot}\),其中\(\eta_{rot}\)是旋转增加的噪音。
参考
【1 】Manual for using homomorphic encryption for bioinformatics
【18】 Fully homomorphic encryption with relatively small key and ciphertext
sizes
【19】Implementing Gentry’s fully-homomorphic encryption scheme
【20】Improved key generation for Gentry’s fully homomorphic encryption
scheme
【21】Fully homomorphic SIMD operations