同态加密-CKKS-旋转操作(Rotation)
Rotation
rotation操作的论文出处:
1. “Homomorphic encryption for arithmetic of approximate numbers", Sec3.4 p423, Permutations over the Plaintext Slots.
2. "Bootstrapping for approximate homomorphic encryption" Sec4.2
参考资料:
同态加密:CKKS原理之旋转(Rotation)_PenguinLeee的博客-CSDN博客(包含数学上的说明)
问:在ckks中的bootstrapping中的打包编码,为什么要选取本原根的 \(5^i\) 次方呢?就是选取的本原根为\(\xi^{5^i}\),好像是为了旋转操作用的,但是具体有什么作用呢?
答:在编码中,为了实现旋转操作,自然嵌入的根\(\xi\)的排列会有一些讲究。(详见上述链接)
旋转密钥的处理一些说明。
在密文情况下,因为 $c_0 ( x ) + c_1 ( x ) s ( x ) = m ( x ) $ ,所以做旋转的时候有\(c_0(x^5) + c_1(x^5)s(x^5) = m(x^5)\)。这意味着,我们需要为每一个旋转步数生成一个转换密钥,目的是把 \(s(x^k)\) 弄成 \(s(x)\)。为了简便起见,我这里直接称为旋转密钥。在SEAL库的实现中,他们依据 \(2\) 的幂来进行生成旋转密钥:比如生成旋转 \(1, 2, 4, 8,\dots\)位的密钥,在旋转具体步数时再进行拆分。
数学问题
-
22:45 The CKKS (a.k.a. HEAAN) FHE Scheme 伽罗瓦群 同构于 由 5 和 -1 生成的乘法群。即,
Based on the evaluation of automorphism \(X \mapsto X^{k}\) in \(\operatorname{Gal}(K / \mathbb{Q}) \approx \mathbb{Z}_{2 n}^{\times}=\langle 5,-1\rangle\)
If \(c_{0}(X)+c_{1}(X) \cdot s(X)=\mu(X)\), then \(c_{0}\left(X^{k}\right)+c_{1}\left(X^{k}\right) \cdot s\left(X^{k}\right)=\mu\left(X^{k}\right)\)
\(k=5\) : rotation on \(\left\langle\zeta^{5}\right\rangle=\left\{\zeta, \zeta^{5}, \ldots, \zeta^{2 n-3}\right\}\) (as well as plaintext slots)
\(k=-1\) : complex conjugate
示例
rotation key的生成
-
对于与CKKS中 \(\Phi_M\) 的 \(M\) 互素的 \(k\) ,有环 \(\mathcal{P}=\mathbb{R}[X]/(X^N+1)\) 上自同构映射 \(\kappa_k:m(X)\mapsto m(X^k) (\mod \Phi_M(X))\)
- 对于 使用 \(\texttt{sk}=(1,s)\) 加密多项式 \(m\) 得到的密文 \(\texttt{ct}\) ,\(\kappa_k(\texttt{ct})\) 表示对密文向量的每个分量都做 \(\kappa_k\) 映射。
- 利用 key-switching 技术,可以使用原始的 密钥 \(\texttt{sk}\) 解密密文 \(\kappa_k(ct)\) 得到 \(\kappa_k(m)\)
- 本段参考论文 Bootstrapping for approximate homomorphic encryption, p10
-
rotation 用到的公钥 \(pk\) 有 \(\texttt{rk}_r\gets \texttt{KSGen}_\texttt{sk}(\kappa_{5^r}(\texttt{sk}))\)
i.e. \(pk_\texttt{leftRot,r} = (-a_0\cdot s + e_0 + p\cdot s(x^k), a_0) (\text{mod } p\cdot q_l)\)
-
取定 \(\Delta\) 和 方案的乘法深度 \(L\) 后,有 \(Q=\Delta^L\)。
然后,基于 安全参数 \(\lambda\) 和 LWE parameter estimator 我们得到多项式次数 \(N\)。
-
\(a_0\) uniformly sampled from \(\mathcal{R}_{p\cdot q_l}\)
-
\(r\) 表示 rotate 的位数减\(1\)。(参考前文示例可知,\(r=1,k=5\) 时,左旋转两位)
-
left rotation 有 \(k=5^r \mod 2N\)
-
right rotation 有 \(k=5^{-r} \mod 2N\)
-
conjugation 有 \(k=2N-1 \mod 2N\)
-
以上主要参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第五页
-
\(p\) 是一个和 \(Q^L\) 有相同位宽的大整数(参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第四页)
-
\(q_l\) 是指,我们此时考虑一个在 level \(l\) 的 \(\texttt{ct}=(c_0,c_1)\)
-
计算 ct'=rotation (ct)
前文的 \(pk_\texttt{leftRot,r}\) 即为下文中的 \({\texttt{rk}_r}\),记号 \(p, k,r\) 的意义与前文相同。
验证正确性
对于上述 \(\texttt{ct'}\) 和 \(\texttt{sk}=(1,s)\),代入解密流程,有 \(Dec(\texttt{ct'},sk)=\kappa_k(m)\)
对密文的某一部分进行rotation操作
问题:利用SEAL库对密文的某一部分进行rotation操作
答案:
- 利用 mask 向量先提取原密文要操作的部分并进行旋转;
- 再利用 mask' 提取原密文不需要操作的部分,
- 将两部分密文结果相加即可
注:
-
第二步的 mask’ 即为 第一步的 mask 取反(或者说取补)。
-
思路来源Operations for rotations in ciphertext using SEAL - Stack Overflow