Galois 自同构在同态加密中的应用

Use of Galois Automorphisms in Homomorphic Encryption

SEAL (Simple Encrypted Arithmetic Library) 使用 Galois 自同构实现批处理计算(即,在一个单独的操作中并行地对许多密文进行加法和乘法)。

批处理过程在 SEAL 2.3.1 manual5.6 Galois 自同构 7.4 CRT 批处理 部分中进行了描述。

特别是,以上两节指出以下环是同构的。

\prod_{i=0}^{n} \mathbb{Z}_t \cong \prod_{i=0}^{n} \mathbb{Z}_t[\zeta^{2i+1}] \cong \mathbb{Z}_t[x]/(x^n+1)

其中 \zeta 是模 t 的原始 2n 次单位根。

可以找到上面等式的图像here(Whosebug 暂时不允许我显示图像)

相同的部分还指出,可以使用 Galois Automorphims 将 \prod_{i=0}^{n} \mathbb{Z}_t 中的明文元组映射到 \mathbb{Z}_t[x]/(x^n+1)

更准确地说,一个 n 维 \mathbb{Z}_t 向量明文可以被认为是一个 2×(n/2) 矩阵,伽罗瓦自同构对应于列的旋转和该矩阵的行。

对明文向量(行列旋转)应用伽罗瓦自同构后,可以得到\mathbb{Z}_t[x]/(x^n+1)中对应的一个元素,用于批量计算。

我的问题如下。

1- 为什么 \mathbb{Z}_t[\zeta^{2i+1}]\mathbb{Z}_t 同构?

2- 伽罗华自同构如何精确地将 n 维 \mathbb{Z}_t 向量明文映射到 \mathbb{Z}_t[x]/(x^n+1) 中的元素? 或者换句话说,Compose 操作是如何工作的?以及如何使用 Galois 自同构(行和列旋转)来计算它?

============================================= ===========================

  1. 同构只是对单位根处的多项式求值,得到Zt的一个元素。请注意,这是有效的,因为相关的统一根本身就在 Zt 中。整个批处理系统只是一个古老的大中国剩余定理:批处理槽是明文多项式模 x-zeta2i+1 对不同 i 的约简。回去需要标准的 CRT 重建。

  2. 实际上,CRT 是通过数论变换(有限域上的 FFT)及其逆来实现的。伽罗瓦自同构作用于单位根,通过排列它们,形成两条轨道。如果我们以这样的方式对明文矩阵槽进行排序,即对应于原根的下一个伽罗华共轭的批处理槽值始终位于对应于该原根的槽值的左侧(或右侧),那么伽罗瓦操作将置换矩阵的行循环。两个轨道也可以互换,对应于列旋转(swap)。

海豹突击队使用的 NTT 算法导致所谓的 "bit reversed" 输出顺序,使事情变得更加复杂。在执行任何 NTT 或反向 NTT 之前确定批处理值的正确排序时,需要考虑这一点。