基于同态加密实现的矩阵乘法算法及卷积运算
我是研究隐私计算方向的, 主要学习的领域是应用全同态加密对已有机器学习模型进行重写,即设计基于全同态加密的机器学习算法。在阅读论文的过程中,发现许多大佬应用SIMD型全同态加密技术实现了一系列的密态卷积运算、密态矩阵向量乘法运算和密态矩阵乘法运算),然后也算是随着这些算法的提出而逐渐成长起来的,所以这里对这些算法进行一些总结。本文不介绍这些算法的性能。长期更新中。。。。。。
基于同态加密实现的矩阵乘法算法及卷积运算
前言
我是研究隐私计算方向的, 主要学习的领域是应用全同态加密对已有机器学习模型进行重写,即设计基于全同态加密的机器学习算法。在阅读论文的过程中,发现许多大佬应用SIMD型全同态加密技术实现了一系列的密态卷积运算、密态矩阵向量乘法运算和密态矩阵乘法运算),然后也算是随着这些算法的提出而逐渐成长起来的,所以这里对这些算法进行一些总结。
本文不介绍这些算法的性能,且需要实现掌握CKKS同态加密算法。
长期更新中。。。。。。
1. 符号说明
2. Introduction
隐私保护计算可以在保护数据隐私的同时充分利用数据的价值,是一种格外流行的领域。在众多同态加密支持的隐私保护应用中,矩阵操作和卷积操作成为了核心。
3. 矩阵向量乘法与矩阵乘法
设计密态矩阵(向量)乘法算法的核心即尽量减少同态旋转(自同构)的数量,尽量减少乘法深度的消耗。
3.1 双循环编码下的FHE矩阵乘法算法
本算法来自论文:《Homomorphic Matrix Operations under Bicyclic Encoding》
该论文发表位置: IEEE Transactions on Information Forensics and Security (CCF-A类)
Abstract
同态加密矩阵操作已经被广泛用于各种隐私保护应用。在这种背景下,本文提出了一种新颖的矩阵编码算法,称其为"双循环编码"。基于该编码算法,本文提出两种密态矩阵运算算法,分别称为"BMM-I"和"BMM-II"。且双循环编码的另一个优势即,密态矩阵转置操作完全免费。
1. 双循环编码
(1) 双循环编码
给定矩阵A=(ai,j)∈Rn×mA=(a_{i,j})\in R^{n\times m}A=(ai,j)∈Rn×m。定义映射φR:Rn×m→Rr\varphi_R:R^{n\times m}\rightarrow R^rφR:Rn×m→Rr为φn,m,r(A)=(a[0]n,[0]m,a[1]n,[1]m,...,a[r]n,[r]m)\varphi_{n,m,r}(A)=(a_{[0]_n},[0]_m,a_{[1]_n},[1]_m,...,a_{[r]_n},[r]_m)φn,m,r(A)=(a[0]n,[0]m,a[1]n,[1]m,...,a[r]n,[r]m),其中r≤n⋅mr\leq n·mr≤n⋅m。特别地,当gcd(n,m)=1gcd(n,m)=1gcd(n,m)=1时,取r=1r=1r=1,则称φr=nm\varphi_{r=nm}φr=nm为双循环映射,此时φn,m,nm(A)∈Rn⋅m\varphi_{n,m,nm}(A)\in R^{n·m}φn,m,nm(A)∈Rn⋅m会讲矩阵AAA中的每一个元素遍历到。
双循环映射证明,这里可以通过中国剩余定理(CRT)来证明:若gcd(n,m)=1gcd(n,m)=1gcd(n,m)=1,则有Z/(nmZ)\Z /(nm\Z)Z/(nmZ)与Z/(nZ)⊗Z/(mZ)\Z/(n\Z)\otimes \Z/(mZ)Z/(nZ)⊗Z/(mZ)同构。
我们称φn,m,n⋅m(A)\varphi_{n,m,n·m}(A)φn,m,n⋅m(A)为矩阵AAA的双循环映射,表示为d(A)d(A)d(A)。
(2) 双循环解码
给定一个向量x∈Rlx\in R^lx∈Rl,我们想要将其解码为一个n×mn\times mn×m大小的矩阵gcd(n,m)=1gcd(n,m)=1gcd(n,m)=1,其中l≥n⋅ml\geq n·ml≥n⋅m。定义映射ψl,n,m:Rl→Rn×m\psi_{l,n,m}:R^l\rightarrow R^{n\times m}ψl,n,m:Rl→Rn×m,该映射可将向量x∈Rlx\in R^lx∈Rl映射为一个矩阵X=(Xi,j)X=(X_{i,j})X=(Xi,j),其中Xi,j=xk,k=[i⋅t⋅m+j⋅s⋅n]n⋅mX_{i,j}=x_k,k=[i·t·m+j·s·n]_{n·m}Xi,j=xk,k=[i⋅t⋅m+j⋅s⋅n]n⋅m,(s,t)(s,t)(s,t)是(n,m)(n,m)(n,m)的Bezout系数,即满足s⋅n+t⋅m=1s·n+t·m=1s⋅n+t⋅m=1。特别地,矩阵A∈Rn×mA\in R^{n\times m}A∈Rn×m的双循环编码d(A)d(A)d(A)的解码映射ψn⋅m,n,m(d(A))=A\psi_{n·m,n,m}(d(A))=Aψn⋅m,n,m(d(A))=A,我们称此为双循环解码。
下边,我们介绍双循环编码算法的相关性质:
(1) 在双循环编码中,矩阵A∈Rn×mA\in R^{n\times m}A∈Rn×m的行和列的遍历过程形成了两种不同的循环:行遍历模n,列遍历模m。这也是双循环编码名字的由来。很明显,双循环编码可以很容易推广到d维循环编码算法用于d维张量A∈Rn1×n2×...×ndA\in R^{n_1\times n_2 \times ... \times n_d}A∈Rn1×n2×...×nd,其中n1×n2×...×ndn_1\times n_2 \times ... \times n_dn1×n2×...×nd之间两两互素。
(2) 矩阵的双循环编码算法可以看作为对角线编码算法的一种扩展。其主要区别为对角线编码算法适用于方阵,且对于d-维方阵,需要创建d个对角线向量。而双循环编码算法对于维度互素的矩阵有效,并且,只需要创建一个双循环向量即可。
(3) 对于矩阵A∈Rn×mA\in R^{n\times m}A∈Rn×m,且gcd(n,m)=1gcd(n,m)=1gcd(n,m)=1。默认情况下向量d(A)d(A)d(A)的第一个元素对应于矩阵AAA的第(0,0)(0,0)(0,0)个元素,这里需要指出,实际上,d(A)d(A)d(A)的首元素可以从矩阵AAA的任一元素开始。
2. 双循环编码下的两种矩阵乘法算法
这里我们先描述明文状态下的算法,之后在描述加密状态下对应的算法。
2.1 算法1描述
算法1注意事项:
(1) 在步骤4a和4b中, 旋转操作的步长应该分别模nmnmnm和mpmpmp。
(2) 在步骤4b中,旋转操作的步长表示为i(rm−n)i(rm-n)i(rm−n)而不是ipipip。该表示在证明算法1的正确性时扮演关键的作用。
算法1证明见原论文,这里我证明过确实是可以的。
2.2 算法2描述
在描述算法2之前,需要先引入segment-sum算法
给定向量c=(ci)∈Rnc=(c_i)\in R^nc=(ci)∈Rn和整数kkk,其中k∣nk|nk∣n,则定义向量ccc的k长segment-sum算法为:s=(si)∈Rks=(s_i)\in R^ks=(si)∈Rk,其中si=∑0≤j<n/kcj⋅k+is_i=\sum_{0\leq j < n/k}c_{j·k+i}si=∑0≤j<n/kcj⋅k+i。即长为nnn的向量,k长segment-sum算法,会输出一个k长的向量,其中k∣nk|nk∣n。
下面我们描述算法2:
算法2证明见原文,这里我证明过确实是可以的。
3. 双循环编码下的基础加密矩阵操作
这里描述在双循环编码下的加密矩阵操作,暂时还不会描述加密矩阵乘法操作。
3.1 加密状态下矩阵的双循环编码和行(列)编码的转换
由于行编码和列编码在原理上是相同的,故这里仅描述行编码和双循环编码的转换。对于矩阵A=(ai,j)∈Rn×mA=(a_{i,j})\in R^{n\times m}A=(ai,j)∈Rn×m,其中(n,m)(n,m)(n,m)互素。定义AAA的行编码为r(A)r(A)r(A),定义AAA的双循环编码为d(A)d(A)d(A),则在r(A)r(A)r(A)和d(A)d(A)d(A)之间存在线性变换TTT。满足d(A)=T⋅r(A)d(A)=T·r(A)d(A)=T⋅r(A),且r(A)=T′⋅d(A)r(A)=T'·d(A)r(A)=T′⋅d(A)。
3.2 加密状态下矩阵的双循环编码的转置操作,
很容易证明对于(n,m)(n,m)(n,m)互素的矩阵,其转置的双循环编码d(AT)d(A^T)d(AT)和其本身的双循环编码d(A)d(A)d(A)是完全相同的,即d(A)=d(AT)d(A)=d(A^T)d(A)=d(AT)。故ct.d(A)=ct.d(AT)ct.d(A)=ct.d(A^T)ct.d(A)=ct.d(AT)。
3.3 密文的Repeat操作
3.4 密文的segment-sum操作
4. 基于双循环编码的加密矩阵乘法算法
(1) 现在提出算法1的加密版本:
(2) 算法2的加密版本:
容易看到,BMM-II算法中,两个向量相乘后的结果存储了矩阵相乘结果的全部信息,因此其密文操作数量明显小于BMM-I算法。
(3) 双循环编码算法的改进
很明显,现在的双循环编码算法仅适用于(n,m,p)(n,m,p)(n,m,p)互素的情况,然而为了处理(n,m,p)(n,m,p)(n,m,p)不互素的情况,就成了问题,这里我们可以通过填充0的方式来改进,构造新的矩阵使得其满足(n′,m′,p′)(n',m',p')(n′,m′,p′)互素,从而完整矩阵乘法操作。
代码实现:
3. 卷积运算
3.1 论文:《Encrypted Image Classification with Low Memory Footprint using Fully Homomorphic Encryption》
3.2 论文:《Optimized Privacy-Preserving CNN Inference With Fully Homomorphic Encryption》
更多推荐
所有评论(0)