SEAL(简单加密算术库)使用伽罗瓦自同构来实现批量计算(即,在一次操作中并行地添加和乘法许多密文)。
批处理过程在SEAL 2.3.1 手册的5.6 伽罗瓦自同构和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 次根。
可以在此处找到上述等式的图像(Stackoverflow 暂时不允许我显示图像)
相同的部分还指出,可以使用 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操作是如何工作的?你如何使用伽罗瓦自同构(行和列旋转)来计算它?
==================================================== =======================