《XMK-CKKS: Extended Multiple Key Homomorphic Encryption over CKKS》 中科院2区
总结
提出了xMK-CKKS,一种多密钥同态方案。客户端使用聚合公钥加密梯度,解密的时候需要所有客户端提供解密份额,协助服务器解密总和。基于FadAvg和XMK-CKKS提出一个ppfl模型。在半诚实模型下可以防止n-1个客户端和服务器的勾结。
xMK-CKKS
### setup
给定安全参数 λ \lambda λ,输出公共安全参数 ( n , q , χ , ψ , ϕ , a ) (n,q,\chi,\psi,\phi,a) (n,q,χ,ψ,ϕ,a)
keygen
对每个客户端 d i d_i di,采样私钥$s_{i}\leftarrow\chi ,公钥 ,公钥 ,公钥b_i=-s_i\cdot a+e_i\pmod q$
定义聚合公钥为: b ~ = ∑ i = 1 N b i = − ( ∑ i = 1 N s i ) ⋅ a + ∑ i = 1 N e i ( m o d q ) \widetilde{b}=\sum_{i\operatorname{=}1}^Nb_i=-\left(\sum_{i\operatorname{=}1}^Ns_i\right)\cdotp a+\sum_{i\operatorname{=}1}^Ne_i\quad\mathrm{(mod~}q) b =∑i=1Nbi=−(∑i=1Nsi)⋅a+∑i=1Nei(mod q)
enc
d i d_i di对明文 m i m_i mi进行加密: c t i = ( c i 0 , c i 1 ) = ( v i ⋅ b ~ + m i + e 0 d i , v i ⋅ a + e 1 d i ) ( m o d q ) ct_{i}=(c_{i0},c_{i1})=(v_{i}\cdot\tilde{b}+m_{i}+e_{0}^{d_i},v_{i}\cdot a+e_{1}^{d_i})\quad\mathrm{(mod~}q) cti=(ci0,ci1)=(vi⋅b~+mi+e0di,vi⋅a+e1di)(mod q)
add
C s u m = ∑ i = 1 N c t i ≜ ( C s u m 0 , C s u m 1 ) = ( ∑ i = 1 N c 0 d i , ∑ i = 1 N c 1 d i ) = ( ∑ i = 1 N v d i ⋅ b ~ + m i + e 0 d i ) , ∑ i = 1 N ( v d i ⋅ a + e 1 d i ) ) ( m o d q ) \begin{aligned}\boldsymbol{C}_{\boldsymbol{sum}}&=\quad\sum_{i=1}^{N}\boldsymbol{ct}_{\boldsymbol{i}}\triangleq(C_{sum_{0}},C_{sum_{1}})\\&=\quad\left(\sum_{i=1}^{N}c_{0}^{d_{i}},\sum_{i=1}^{N}c_{1}^{d_{i}}\right)\\&=\quad\left(\sum_{i=1}^{N}v^{d_{i}}\cdot\widetilde{b}+m_{i}+e_{0}^{d_{i}}),\sum_{i=1}^{N}(v^{d_{i}}\cdot a+e_{1}^{d_{i}})\right)\mathrm{~(mod~}q)\end{aligned} Csum=i=1∑Ncti≜(Csum0,Csum1)=(i=1∑Nc0di,i=1∑Nc1di)=(i=1∑Nvdi⋅b +mi+e0di),i=1∑N(vdi⋅a+e1di)) (mod q)
dec
对每个客户端 d i d_i di,计算自己的解密份额 D i D_i Di
D i = s i ⋅ C s u m 1 + e i ∗ = s i ⋅ ∑ i = 1 N ( v i ⋅ a + e 1 d i ) + e i ∗ ( mod q ) \begin{aligned}D_i&=\quad s_i\cdot C_{sum_1}+e_i^*\\&=\quad s_i\cdot\sum_{i=1}^N(v_i\cdot a+e_1^{d_i})+e_i^*\left(\operatorname{mod}q\right)\end{aligned} Di=si⋅Csum1+ei∗=si⋅i=1∑N(vi⋅a+e1di)+ei∗(modq)
明文和可以被恢复,公式如下:
C s u m 0 + ∑ i = 1 N D i m o d q = C s u m 0 + ∑ i = 1 N s i ⋅ C s u m 1 + ∑ i = 1 N e i ∗ m o d q \begin{array}{rcl}C_{sum_{0}}+\sum_{i=1}^{N}D_{i}\mathrm{~mod~}q&=&C_{sum_{0}}+\sum_{i=1}^{N}s_{i}\cdot C_{sum_{1}}+\sum_{i=1}^{N}e_{i}^{*}\mathrm{~mod~}q\end{array} Csum0+∑i=1NDi mod q=Csum0+∑i=1Nsi⋅Csum1+∑i=1Nei∗ mod q
基于xmk-ckk的联邦学习流程
以fedavg算法为基础,在每轮训练中所有设备均参与。
setup
对所有客户端,生成各自的私钥。将聚合公钥广播给所有客户端。
本地训练
对每个客户端来说,在本地数据上进行训练,得到更新后的梯度w。将其编码为明文m。使用聚合公钥将其加密为ct发送到服务器。
聚合密文
服务器收到所有密文后计算 c s u m c_{sum} csum,将c1发给各客户端进行计算。
解密份额上传
每个客户端使用自己的si计算di,发给服务器。
服务器解密并更新模型
∑ i = 1 N m i ≈ C s u m 0 + ∑ i = 1 N D i ( mod q ) \sum_{i=1}^Nm_i\approx C_{sum_0}+\sum_{i=1}^ND_i\left(\operatorname{mod}q\right) ∑i=1Nmi≈Csum0+∑i=1NDi(modq)
服务器计算m并将其作为下一轮的w。