SIMD编码

在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码、打包、SIMD到底有什么关系?
今天看到一篇文章,彻底读懂了SIMD编码,推荐【更新|Cheetah: 精简快速的安全两方DNN推理

编码#

在CKKS方案中,因为明文空间在复数域上,简单的说一个明文就是一个复数向量,那么CKKS是基于RLWE问题,计算是在环上,也就是整数多项式上,所以在加密之前需要进行编码,将一个复数向量编码成一个整数多项式,然后在加密,进而计算。

那如何将一个复数向量编码为了整数多项式?
具体细节请参考:CKKS Part2: CKKS的编码和解码

BGV和BFV方案同样也是,都是基于RLWE问题,计算是在环上,不同的是他们的明文空间在整数域上,所以也需要编码,将其转化为一个整数多项式。

简单点说,CKKS中的编码:
1、首先通过一个映射,将复数向量转成实数多项式
2、然后通过放大实数多项式的系数,然后取整的操作,实现了实数多项式转整数多项式

新的编码技术#

由于已知的全同态加密方案一般不支持对有理数进行加密,因而本文需要建立连接有理数与整数的纽带。在不影响有理数精度的情况下,最简单的方法是将有理数乘以一个固定数 B 的幂,例如 B2,其中 B2。接着,再对处理后的有理数进行加密和同态运算。最后,将解密结果除以 B 的幂即可得到正确运算结果。然而,每经过一次乘法同态则需要一次对解密结果除以 B 的幂操作。

这里和CKKS编码很像,要乘以一个缩放因子,放大有理数;然后进行一次乘法同态后,缩放因子变大,所以每进行一次乘法同态就需要除于一次B的幂,和CKKS中的rescaling(重缩放)很像啊

这里【1】给出了一种新的编码技术,可以将一个有理数编码为环上元素

batch技术#

使用了SIMD技术,从而实现了打包,即SIMD编码的过程。从编码上看,就是将一些明文(数
)打包为一个多项式,一次多项式计算,就是多个明文间的计算。能加快计算速度,提升效率!

下面简单的介绍一下:
选择合适的明文模数t,这里有一个环上的同构关系:明文空间Rt>Ztn
举个例子就是,一个常数多项式aRt对应一个向量(a1,a2,...,an)Ztn,且这个同构能将多项式之间的加法和乘法映射为向量之间的加法和乘法。

所以使用这个打包技术能减少通信和计算开销。
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编码介绍的很清楚!(有些小问题:打包的应该是ai

总结一下:
SIMD编码就是把一些数变成一个多项式,以上面为例就是:
(4,13)编码为x
(1,2)编码为2x-7
具体怎么编码的呢?
那怎么求f(x)呢?
1、首先分圆多项式xn+1通过CRT可以拆分为(x+a0)...(x+an)modp
这里n=2,p=17,则x2+1=(x4)(x13)mod17

2、要对(4,13)编码,就是求f(x):
使用CRT求f(x)

3、那怎么解码呢?就是有f(x)了,怎么求(4,13)呢?

4=xmod(x4);13=xmod(x13)

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,是分圆多项式的阶,即Φm(X);q,密文模数;p,明文模数;χ,离散高斯分布的标准方差σ

(5)一个打包密文中的slot个数为n=ϕ(m)(欧拉函数),所以一个明文可以看作是长度为n的向量在Zp上,密文可以看作是长度为n的向量在Zq上;新鲜密文的噪音η来自随机采样的高斯分布,同态计算会导致噪音η增加;Dec(解密)的正确性需要满足|η|<q/(2p)

(6)为了保证安全性,需要使得σ(基于q和n),q,且gcd(p,q)=1;维数r应尽可能小。

(7)同态加法,两个密文(u和v)相加的运行时间为n.CostAdd(q),其中CostAdd(q)Zq=(0,1,2,...,q1)中的两个数相加的时间;增加的噪音最多至ηu+ηv

(8)密文*明文,如果p,则可以使用SIMD技术,明文v和密文u,输出[uv],即向量中的元素逐个相乘。运行时间为n.CostMult(q),其中CostMult(q)Zq=(0,1,2,...,q1)中的两个数相乘的时间;噪音为v.n ,其中v是向量v得无穷范数,那么如果换成{0,1}向量则噪音为p.n。事实上我们会使用bit-decomposing(比特分解)技术,将v转换成{0,1}表示的向量,即v=2wpt.k.vk

(9)(Perm)密文旋转,给定一个映射π ,能将一个密文[u]转换为[uπ]=[uπ(1),uπ(2),....,uπ(n)]。旋转依赖于模m的乘法群(Z/mZ,m是素数),n=m1个slot。置换群支持slot的循环旋转。模m的乘法群(Z/mZ)同构于阶为n的循环群Cn。当m=2k,m8,n=2k1时,置换同构于半循环群Cn2C2

(10)(密文结构)n指slot得个数;q时密文空间大小,所以一个密文需要log2qbit;p是明文空间的大小,所以一个明文需要log2pbit;η是密文的噪音大小。

(11)(密文旋转),这里的旋转映射π将第一个slot和第二个slot旋转,第三个slot和第四个slot旋转;该操作产生的噪音为ηη+ηrot,这里的ηrotn.logq.η0,η0是"新鲜"噪音。

(12)密文旋转是一个"昂贵"的操作。一个旋转的耗费O(n.logn.logq)相当于一个NTTNTT1,噪音为ηuπ=ηu+ηrot,其中η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

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/15928094.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(3798)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-02-23 2019 C笔试题
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu