同态加密:CKKS原理之旋转(Rotation)

这篇文章主要介绍了CKKS算法的数学基础,并且基于这个基础讲了一下CKKS算法中的旋转操作。

一些记号

我们记整数环为 Z \mathbb{Z} Z,有理数环为 Q \mathbb{Q} Q,实数域为 R \mathbb{R} R,复数域为 C \mathbb{C} C

对正整数 m m m,记 Z m \mathbb{Z}_{m} Zm 为模 m m m剩余类。记 Z m ∗ \mathbb{Z}_{m}^{*} Zm Z m \mathbb{Z}_{m} Zm 里有模乘法逆元的元素,则 Z m ∗ \mathbb{Z}_{m}^{*} Zm 是乘法群。

Z m ∗ \mathbb{Z}_{m}^{*} Zm 里的元素,都是一些和 m m m 互素的元素,并且 ∣ Z m ∗ ∣ = ϕ ( m ) \left|\mathbb{Z}_{m}^{*}\right|=\phi(m) Zm=ϕ(m),其中 ϕ \phi ϕ 是欧拉计数函数, ϕ ( m ) = l e n ( { k : 1 ≤ k ≤ m , g c d ( k , m ) = 1 } ) \phi(m) = len(\{k: 1 \leq k \leq m, gcd(k, m) = 1\}) ϕ(m)=len({ k:1km,gcd(k,m)=1})

[ m ] = { 0 , … , m − 1 } , m > 0 [m] = \{0, \ldots, m-1\}, m > 0 [m]={ 0,,m1},m>0。注意一个事儿: Z m \mathbb{Z}_{m} Zm [ m ] [m] [m] 可不是一个东西啊!

单位原根和分圆多项式

单位根
m m m 是正整数, F F F 是域。 如果 ω ∈ F , ω m = 1 \omega \in F, \omega^{m}=1 ωF,ωm=1,那么 ω \omega ω 叫做 m m m 次单位根,等价于 ω \omega ω X m − 1 ∈ F [ X ] X^{m}-1 \in F[X] Xm1F[X] 的根。 如果没有比 ω \omega ω 更小的 m m m 次单位根,那么 m m m 次单位根 ω \omega ω 叫单位原根。

ω \omega ω m m m 次单位根。那么,如果 k ≡ ℓ (   m o d   m ) k \equiv \ell(\bmod m) k(modm),则 ω k = ω ℓ \omega^{k}=\omega^{\ell} ωk=ω。则可以引出 m m m 次单位根的等价类。

ω \omega ω m m m 次单位原根,则可以知道原根的构造:

  • 单位根都可以写成 ω j , j ∈ Z m \omega^{j}, j \in \mathbb{Z}_{m} ωj,jZm

  • 单位原根都可以写成 ω j , j ∈ Z m ∗ \omega^{j}, j \in \mathbb{Z}_{m}^* ωj,jZm

在复数域 C \mathbb{C} C 上看这个事, ω : = e 2 π i / m ∈ C \omega:=e^{2 \pi \mathbf{i} / m} \in \mathbb{C} ω:=e2πi/mC m m m 次单位原根。则多项式
Φ m ( X ) : = ∏ j ∈ Z m ∗ ( X − ω j ) ∈ C [ X ] \Phi_{m}(X):=\prod_{j \in \mathbb{Z}_{m}^{*}}\left(X-\omega^{j}\right) \in \mathbb{C}[X] Φm(X):=jZm(Xωj)C[X]
m m m 次分圆多项式。显然 m m m 次分圆多项式首一且度为 ϕ ( m ) \phi(m) ϕ(m)

几个结论:

  • Φ m ( X ) ∈ Z [ X ] \Phi_{m}(X) \in \mathbb{Z}[X] Φm(X)Z[X]
  • Φ m ( X ) \Phi_{m}(X) Φm(X) Q \mathbb{Q} Q上不可约。
  • X m − 1 = ∏ d ∣ m Φ d ( X ) X^{m}-1=\prod_{d \mid m} \Phi_{d}(X) Xm1=dmΦd(X)

第三个结论给了 Φ m ( X ) \Phi_{m}(X) Φm(X) 的迭代形式。 Φ 1 ( X ) = X − 1 \Phi_{1}(X)=X-1 Φ1(X)=X1。对于 m > 1 m>1 m>1,有

Φ m ( X ) = X m − 1 ∏ d ∣ m , d < m Φ d ( X ) \Phi_{m}(X)=\frac{X^{m}-1}{\prod_{ {d \mid m , d<m}} \Phi_{d}(X)} Φm(X)=dm,d<mΦd(X)Xm1

分圆环 A , A q , A Q \mathcal{A}, \mathcal{A}_{q}, \mathcal{A}_{\mathbb{Q}} A,Aq,AQ, A R \mathcal{A}_{\mathbb{R}} AR

m > 1 m>1 m>1 为整数。记 Φ m ( X ) ∈ Z [ X ] \Phi_{m}(X) \in \mathbb{Z}[X] Φm(X)Z[X] m m m 阶分圆多项式。
我们将要考虑商环 A : = Z [ X ] / ( Φ m ( X ) ) \mathcal{A}:=\mathbb{Z}[X] /\left(\Phi_{m}(X)\right) A:=Z[X]/(Φm(X)),即整系数多项式环模 Φ m ( X ) \Phi_{m}(X) Φm(X).

m > 1 m>1 m>1 为整数。考虑商环 A q = Z q [ X ] / ( Φ ˉ m ( X ) ) \mathcal{A}_{q}=\mathbb{Z}_{q}[X] /\left(\bar{\Phi}_{m}(X)\right) Aq=Zq[X]/(Φˉm(X)),其中 Φ ˉ m ( X ) \bar{\Phi}_{m}(X) Φˉm(X) Φ m ( X ) \Phi_{m}(X) Φm(X) 塞到 Z q [ X ] \mathbb{Z}_{q}[X] Zq[X] 里的像,即把 Φ m ( X ) \Phi_{m}(X) Φm(X) 的系数在 Z q \mathbb{Z}_{q} Zq 里取模。

有时假设 q q q m m m互素。此时, X m − 1 X^{m}-1 Xm1 Z ‾ q \overline{\mathbb{Z}}_{q} Zq 上有 m m m 个不同的根,其中 Z ‾ q \overline{\mathbb{Z}}_{q} Zq Z q \mathbb{Z}_{q} Zq的代数闭包,此时 Φ ˉ m ( X ) ∈ Z q [ X ] \bar{\Phi}_{m}(X) \in \mathbb{Z}_{q}[X] Φˉm(X)Zq[X] 同理,在 Z ‾ q \overline{\mathbb{Z}}_{q} Zq ϕ ( m ) \phi(m) ϕ(m) 个不同的 m m m 次原根。

有时也会考虑 A Q : = Q [ X ] / ( Φ m ( X ) ) \mathcal{A}_{\mathbb{Q}}:=\mathbb{Q}[X] /\left(\Phi_{m}(X)\right) AQ:=Q[X]/(Φm(X)) A R : = R [ X ] / ( Φ m ( X ) ) \mathcal{A}_{\mathbb{R}}:=\mathbb{R}[X] /\left(\Phi_{m}(X)\right) AR:=R[X]/(Φm(X)). 和 A \mathcal{A} A 类似。只不过把系数一换。

自然(canonical)嵌入和相关的无穷范数

ω : = e 2 π i / m ∈ C \omega:=e^{2 \pi \mathbf{i} / m} \in \mathbb{C} ω:=e2πi/mC m m m 次单位原根,也是 Φ m ( X ) \Phi_{m}(X) Φm(X) 的根。
考虑两个多项式 f ( X ) , g ( X ) ∈ Z [ X ] f(X), g(X) \in \mathbb{Z}[X] f(X),g(X)Z[X] ,使得 f ( X ) ≡ g ( X ) (   m o d   Φ m ( X ) ) f(X) \equiv g(X)\left(\bmod \Phi_{m}(X)\right) f(X)g(X)(modΦm(X))

再考虑 ω j \omega^{j} ωj, j ∈ Z m ∗ j \in \mathbb{Z}_{m}^{*} jZm,则 ω j \omega^{j} ωj Φ m ( X ) \Phi_{m}(X) Φm(X)的根,则必有 f ( ω j ) = g ( ω j ) f\left(\omega^{j}\right)=g\left(\omega^{j}\right) f(ωj)=g(ωj)。这就有了一个等价类。不妨找个代表元 a \boldsymbol{a} a,使得 a ( ω j ) : = f ( ω j ) \boldsymbol{a}\left(\omega^{j}\right):=f\left(\omega^{j}\right) a(ωj):=f(ωj)

那么 a ∈ A \boldsymbol a \in \mathcal{A} aA 就是多项式(函数) a a a 在所有单位原根下的(函数)值。可以把这个映射过程写作(注意,这个 j j j 是有序的!):
canon ⁡ ( a ) : = ( a ( ω j ) ) j ∈ Z m ∗ \operatorname{canon}(\boldsymbol{a}):=\left(\boldsymbol{a}\left(\omega^{j}\right)\right)_{j \in \mathbb{Z}_{m}^{*}} canon(a):=(a(ωj))jZm
定义无穷范数:
∥ a ∥ : = ∥ canon ⁡ ( a ) ∥ ∞ \|\boldsymbol{a}\|:=\|\operatorname{canon}(\boldsymbol{a})\|_{\infty} a:=canon(a)
i.e.
∥ a ∥ = max ⁡ { ∣ a ( ω j ) ∣ : j ∈ Z m ∗ } , \|\boldsymbol{a}\|=\max \left\{\left|\boldsymbol{a}\left(\omega^{j}\right)\right|: j \in \mathbb{Z}_{m}^{*}\right\}, a=max{ a(ωj):jZm},
这个东西 ∥ ⋅ ∥ \|\cdot\| 叫自然范数。

范数的几样性质:正定、齐次、三角不等式,这里还有次乘性:

  • ∥ a + b ∥ ≤ ∥ a ∥ + ∥ b ∥ \|\boldsymbol{a}+\boldsymbol{b}\| \leq\|\boldsymbol{a}\|+\|\boldsymbol{b}\| a+ba+b ∀ a , b ∈ A \forall \boldsymbol{a}, \boldsymbol{b} \in \mathcal{A} a,bA (三角不等式)
  • ∥ c a ∥ = ∣ c ∣ ∥ a ∥ \|c \boldsymbol{a}\|=|c|\|\boldsymbol{a}\| ca=ca ∀ a ∈ A , c ∈ Z \forall \boldsymbol{a} \in \mathcal{A}, c \in \mathbb{Z} aA,cZ(齐次)
  • ∥ a b ∥ ≤ ∥ a ∥ ∥ b ∥ \|a b\| \leq\|a\|\|b\| abab ∀ a , b ∈ A \forall \boldsymbol{a}, \boldsymbol{b} \in \mathcal{A} a,bA。(次乘)

A Q \mathcal{A}_{\mathbb{Q}} AQ A R \mathcal{A}_{\mathbb{R}} AR 上有类似的结论。以后就用 ∥ a ∥ = ∥ \|\boldsymbol{a}\|=\| a= canon ( a ) ∥ ∞ (\boldsymbol{a}) \|_{\infty} (a) 来指代 A Q \mathcal{A}_{\mathbb{Q}} AQ A R \mathcal{A}_{\mathbb{R}} AR a \boldsymbol{a} a 的范数。

标准 & powerful基

下面需要先做一个符号上的区分:

符号(变量) X X X 和这玩意在 Φ m ( X ) \Phi_{m}(X) Φm(X) 上的像 x : = \boldsymbol{x}:= x:= [ X   m o d   Φ m ( X ) ] \left[X \bmod \Phi_{m}(X)\right] [XmodΦm(X)] ,其中 x ∈ A = Z [ X ] / ( Φ m ( X ) ) \boldsymbol x \in \mathcal{A}=\mathbb{Z}[X] /\left(\Phi_{m}(X)\right) xA=Z[X]/(Φm(X))

实际上, A \mathcal{A} A 也可以写成 A = { f ( x ) : f ( X ) ∈ Z [ X ] } \mathcal{A}=\{f(\boldsymbol{x}): f(X) \in \mathbb{Z}[X]\} A={ f(x):f(X)Z[X]}

x ∈ A \boldsymbol{x} \in \mathcal{A} xA 满足 Φ m ( x ) = 0 \Phi_{m}(\boldsymbol{x})=0 Φm(x)=0(因为模都给你模完了)。此外, A \mathcal{A} A 中每个元素均可唯一表示成 f ( x ) f(\boldsymbol{x}) f(x),其中 f ( X ) ∈ Z [ X ] f(X) \in \mathbb{Z}[X] f(X)Z[X] 的度数小于 ϕ ( m ) \phi(m) ϕ(m)

立即推出对于任意的 a ∈ A \boldsymbol{a} \in \mathcal{A} aA 都可以唯一地表示成:
a = ∑ i ∈ [ ϕ ( m ) ] a i x i . \boldsymbol{a}=\sum_{i \in[\phi(m)]} a_{i} \boldsymbol{x}^{i} . a=i[ϕ(m)]aixi.
于是
{ x i } i ∈ [ ϕ ( m ) ] \left\{\boldsymbol{x}^{i}\right\}_{i \in[\phi(m)]} { xi}i[ϕ(m)]
构成了 A \mathcal{A} A 的一个 Z \mathbb{Z} Z-基底, 称为 A \mathcal{A} A 的标准基底。

m = m 1 ⋯ m k m=m_{1} \cdots m_{k} m=m1mk m m m 的素分解。考虑一个新的商环
B : = Z [ Y 1 , … , Y k ] / ( Φ m 1 ( Y 1 ) , … , Φ m k ( Y k ) ) \mathcal{B}:=\mathbb{Z}\left[Y_{1}, \ldots, Y_{k}\right] /\left(\Phi_{m_{1}}\left(Y_{1}\right), \ldots, \Phi_{m_{k}}\left(Y_{k}\right)\right) B:=Z[Y1,,Yk]/(Φm1(Y1),,Φmk(Yk))

对于 t = 1 , … , k t=1, \ldots, k t=1,,k, 记 y t \boldsymbol{y}_{t} yt Y t Y_{t} Yt B \mathcal{B} B 的像。 于是有 B = Z [ y 1 , … , y k ] \mathcal{B}=\mathbb{Z}\left[\boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{k}\right] B=Z[y1,,yk]. 那么,每个 B \mathcal{B} B 中元可以唯一写成 g ( y 1 , … , y k ) g\left(\boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{k}\right) g(y1,,yk) 的形式,其中 g ( Y 1 , … , Y k ) ∈ Z [ Y 1 , … , Y k ] g\left(Y_{1}, \ldots, Y_{k}\right) \in \mathbb{Z}\left[Y_{1}, \ldots, Y_{k}\right] g(Y1,,Yk)Z[Y1,,Yk], 其中 Y t Y_{t} Yt 的度数小于 ϕ ( m t ) \phi\left(m_{t}\right) ϕ(mt) for t = 1 , … , k t=1, \ldots, k t=1,,k。则
{ y 1 i 1 ⋯ y k i k } i 1 ∈ [ ϕ ( m 1 ) ] , … , i k ∈ [ ϕ ( m k ) ] \left\{\boldsymbol{y}_{1}^{i_{1}} \cdots \boldsymbol{y}_{k}^{i_{k}}\right\}_{i_{1} \in\left[\phi\left(m_{1}\right)\right], \ldots, i_{k} \in\left[\phi\left(m_{k}\right)\right]} { y1i1ykik}i1[ϕ(m1)],,ik[ϕ(mk)]
构成 B \mathcal{B} B Z \mathbb{Z} Z-基底。

A \mathcal{A} A B \mathcal{B} B 实际上是同构的。 记 x t : = x m / m t ∈ A \boldsymbol{x}_{t}:=\boldsymbol{x}^{m / m_{t}} \in \mathcal{A} xt:=xm/mtA t = 1 , … , k t=1, \ldots, k t=1,,k. 则有从 g ( y 1 , … , y k ) ∈ B g\left(\boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{k}\right) \in \mathcal{B} g(y1,,yk)B g ( x 1 , … , x k ) ∈ A g\left(\boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{k}\right) \in \mathcal{A} g(x1,,xk)A g ( Y 1 , … , Y k ) ∈ Z [ Y 1 , … , Y k ] g\left(Y_{1}, \ldots, Y_{k}\right) \in \mathbb{Z}\left[Y_{1}, \ldots, Y_{k}\right] g(Y1,,Yk)Z[Y1,,Yk] 的同构映射。

这个同构映射为 A \mathcal{A} A 定义了另一个 Z \mathbb{Z} Z-基底:
{ x 1 i 1 ⋯ x k i k } i 1 ∈ [ ϕ ( m 1 ) ] , … , i k ∈ [ ϕ ( m k ) ] . \left\{\boldsymbol{x}_{1}^{i_{1}} \cdots \boldsymbol{x}_{k}^{i_{k}}\right\}_{i_{1} \in\left[\phi\left(m_{1}\right)\right], \ldots, i_{k} \in\left[\phi\left(m_{k}\right)\right]} . { x1i1xkik}i1[ϕ(m1)],,ik[ϕ(mk)].
叫它 A \mathcal{A} A的 powerful basis。

除了基于规范嵌入的范数之外, A \mathcal{A} A 上其他的范数可以根据上述基底定义。

Galois自同构

A = Z [ X ] / ( Φ m ( X ) ) \mathcal{A}=\mathbb{Z}[X] /\left(\Phi_{m}(X)\right) A=Z[X]/(Φm(X)) ,然后 A = Z [ x ] \mathcal{A}=\mathbb{Z}[\boldsymbol{x}] A=Z[x] ,其中 x : = [ X   m o d   Φ m ( X ) ] \boldsymbol{x}:=\left[X \bmod \Phi_{m}(X)\right] x:=[XmodΦm(X)] 是未定元 X X X A \mathcal{A} A 中的像。

对于 j ∈ Z m ∗ j \in \mathbb{Z}_{m}^{*} jZm ,第 j j j 个 Galois自同构 θ j \theta_{j} θj 是环同构:
θ j : A ⟶ A f ( x ) ⟼ f ( x j ) (  for  f ( X ) ∈ Z [ X ] ) \begin{aligned} \theta_{j}: \mathcal{A} & \longrightarrow \mathcal{A} \\ f(\boldsymbol{x}) & \longmapsto f\left(\boldsymbol{x}^{j}\right) \quad(\text { for } f(X) \in \mathbb{Z}[X]) \end{aligned} θj:Af(x)Af(xj)( for f(X)Z[X])
θ j \theta_{j} θj 是well-defined,因为在 Z [ X ] \mathbb{Z}[X] Z[X]上, Φ m ( X j ) \Phi_{m}\left(X^{j}\right) Φm(Xj) 可被 Φ m ( X ) \Phi_{m}(X) Φm(X)整除。考虑它们的根,如果 ω : = e 2 π i / m ∈ C \omega:=e^{2 \pi i} / m \in \mathbb{C} ω:=e2πi/mC 是原根, 那么 ω j \omega^{j} ωj 也是。所以 ω \omega ω Φ m ( X j ) \Phi_{m}\left(X^{j}\right) Φm(Xj) 的根。又因为 Φ m ( X ) \Phi_{m}(X) Φm(X) 的最小性,所以 Φ m ( X j ) \Phi_{m}\left(X^{j}\right) Φm(Xj) 可被 Φ m ( X ) \Phi_{m}(X) Φm(X)整除。此即若 f ( x ) = g ( x ) f(\boldsymbol{x})=g(\boldsymbol{x}) f(x)=g(x),则 f ( x j ) = g ( x j ) f\left(\boldsymbol{x}^{j}\right)=g\left(\boldsymbol{x}^{j}\right) f(xj)=g(xj),良定性得证。

对于 j , j ′ ∈ Z m ∗ j, j^{\prime} \in \mathbb{Z}_{m}^{*} j,jZm,有
θ j ∘ θ j ′ = θ j j ′ = θ j ′ ∘ θ j \theta_{j} \circ \theta_{j^{\prime}}=\theta_{j j^{\prime}}=\theta_{j^{\prime}} \circ \theta_{j} θjθj=θjj=θjθj
j ′ = j − 1 ∈ Z m ∗ j^{\prime}=j^{-1} \in \mathbb{Z}_{m}^{*} j=j1Zm,则 θ j ′ \theta_{j^{\prime}} θj θ j \theta_{j} θj的逆,于是 θ j \theta_{j} θj 是双射。

对任意 a ∈ A \boldsymbol{a} \in \mathcal{A} aA,可以注意到 canon ⁡ ( θ j ( a ) ) \operatorname{canon}\left(\theta_{j}(\boldsymbol{a})\right) canon(θj(a)) 就是 canon ( a ) (\boldsymbol{a}) (a) 的置换,因此 ∥ θ j ( a ) ∥ = ∥ a ∥ \left\|\theta_{j}(\boldsymbol{a})\right\|=\|\boldsymbol{a}\| θj(a)=a.

A q 、 A Q \mathcal{A}_{q}、 \mathcal{A}_{\mathbb{Q}} AqAQ A R \mathcal{A}_{\mathbb{R}} AR上的Galois自同构同理可得。

明文上的一些代数学

回忆一下我写过的CKKS文章,消息叫做message(是向量或者矩阵),明文叫做plaintext(是多项式),密文叫做ciphertext(是一对多项式)。

A = Z [ X ] / ( Φ m ( X ) ) \mathcal{A}=\mathbb{Z}[X] /\left(\Phi_{m}(X)\right) A=Z[X]/(Φm(X))。于是CKKS中的明文可以被视为环 A P \mathcal{A}_{P} AP 的元素,其中 P = p r P=p^{r} P=pr 是素数的幂,且 p p p 不整除 m m m

A P \mathcal{A}_{P} AP 实际上是一个 Z P \mathbb{Z}_{P} ZP-代数(有加法和乘法的线性空间),意味着在这个环里有一个 Z P \mathbb{Z}_{P} ZP 的同构拷贝作为子环。

首先考虑一下 r = 1 r=1 r=1 的情况,于是 P = p P=p P=p 是素数, Z p \mathbb{Z}_{p} Zp 是一个域。

此时 A p \mathcal{A}_{p} Ap 是一个 Z p \mathbb{Z}_{p} Zp-代数并且包含域 Z p \mathbb{Z}_{p} Zp 作为子域,所以可以自然地把 A p \mathcal{A}_{p} Ap 看成 Z p \mathbb{Z}_{p} Zp 下的向量空间。

下面先回忆一下 A p \mathcal{A}_{p} Ap 的定义, A p = Z p [ X ] / ( Φ ˉ m ( X ) ) \mathcal{A}_{p}=\mathbb{Z}_{p}[X] /\left(\bar{\Phi}_{m}(X)\right) Ap=Zp[X]/(Φˉm(X)),其中 Φ ˉ m ( X ) \bar{\Phi}_{m}(X) Φˉm(X) 是分圆多项式 Φ m ( X ) \Phi_{m}(X) Φm(X) 的系数模 p p p 的结果,是 Z p [ X ] \mathbb{Z}_{p}[X] Zp[X] 的元素。我们假设 p p p 不整除 m m m

我们还定义了 x : = [ X   m o d   Φ ˉ m ( X ) ] \boldsymbol{x}:=\left[X \bmod \bar{\Phi}_{m}(X)\right] x:=[XmodΦˉm(X)], 于是 A p = Z p [ x ] \mathcal{A}_{p}=\mathbb{Z}_{p}[\boldsymbol{x}] Ap=Zp[x], 意味着对 A p \mathcal{A}_{p} Ap 中的所有元素,都有一个 f ( X ) ∈ Z p [ X ] f(X) \in \mathbb{Z}_{p}[X] f(X)Zp[X] 和它对应。

一些常见结论:

  • 把多项式 Φ ˉ m ( X ) ∈ Z p [ X ] \bar{\Phi}_{m}(X) \in \mathbb{Z}_{p}[X] Φˉm(X)Zp[X] 完全因式分解成
    Φ ˉ m ( X ) = F 1 ( X ) ⋯ F n ( X ) \bar{\Phi}_{m}(X)=F_{1}(X) \cdots F_{n}(X) Φˉm(X)=F1(X)Fn(X)
    其中 F i ( X ) ∈ Z p [ X ] F_{i}(X) \in \mathbb{Z}_{p}[X] Fi(X)Zp[X] 是不同的不可约多项式,每个多项式都有度数 d d d; 于是 ϕ ( m ) = n d \phi(m)=n d ϕ(m)=nd.
  • d d d p p p m m m 的阶数,此即 d d d p d ≡ 1 (   m o d   m ) p^{d} \equiv 1(\bmod m) pd1(modm) 成立的最小整数。

于是由中国剩余定理的多项式版本,可以搞出来一个 Z p \mathbb{Z}_{p} Zp-代数的同构
A p ⟶ Z p [ X ] / ( F 1 ( X ) ) × ⋯ × Z p [ X ] / ( F n ( X ) ) f ( x ) ⟼ ( [ f ( X )   m o d   F 1 ( X ) ] , … , [ f ( X )   m o d   F n ( X ) ] ) (  for  f ( X ) ∈ Z p [ X ] ) \begin{aligned} \mathcal{A}_{p} & \longrightarrow \mathbb{Z}_{p}[X] /\left(F_{1}(X)\right) \times \cdots \times \mathbb{Z}_{p}[X] /\left(F_{n}(X)\right) \\ f(\boldsymbol{x}) & \longmapsto\left(\left[f(X) \bmod F_{1}(X)\right], \ldots,\left[f(X) \bmod F_{n}(X)\right]\right) \quad\left(\text { for } f(X) \in \mathbb{Z}_{p}[X]\right) \end{aligned} Apf(x)Zp[X]/(F1(X))××Zp[X]/(Fn(X))([f(X)modF1(X)],,[f(X)modFn(X)])( for f(X)Zp[X])

还可以这么看 A = Z p [ X ] / Φ m ( X ) \mathcal{A} = \mathbb{Z}_{p}[X]/\Phi_{m}(X) A=Zp[X]/Φm(X)。记 E = Z p [ X ] / ( F 1 ( X ) ) E=\mathbb{Z}_{p}[X] /\left(F_{1}(X)\right) E=Zp[X]/(F1(X))。则可以在 Φ ˉ m ( X ) \bar{\Phi}_{m}(X) Φˉm(X) 里的不可约因子里任选一个 F 1 ( X ) F_{1}(X) F1(X)。记 η : = [ X   m o d   F 1 ( X ) ] ∈ \eta:=\left[X \bmod F_{1}(X)\right] \in η:=[XmodF1(X)] E E E

现在 F 1 ( X ) F_{1}(X) F1(X) 不可约,则 E E E 是一个基数为 p d p^{d} pd 的有限域。我们也有 E = Z p [ η ] E=\mathbb{Z}_{p}[\eta] E=Zp[η],意味着 E E E 中每个元素都可以写成 f ( η ) f(\eta) f(η) 的形式,其中 f ( X ) ∈ Z p [ X ] f(X) \in \mathbb{Z}_{p}[X] f(X)Zp[X]。这样 Z p \mathbb{Z}_{p} Zp 自然成了 E E E 的子域。根据定义, η \eta η F 1 ( X ) F_{1}(X) F1(X) 的根, η ∈ E \eta \in E ηE 也是 m m m 次单位原根。

现在考虑群 Z m ∗ \mathbb{Z}_{m}^{*} Zm。易知 Φ ˉ m ( X ) \bar{\Phi}_{m}(X) Φˉm(X) E E E 上有 ϕ ( m ) \phi(m) ϕ(m) 个根 η j \eta^{j} ηj for j ∈ Z m ∗ j \in \mathbb{Z}_{m}^{*} jZm。因此这 ϕ ( m ) \phi(m) ϕ(m) 个根需要被分配到 Φ ˉ m ( X ) \bar{\Phi}_{m}(X) Φˉm(X) 的不可约因子上。于是,每个不可约因子 F i ( X ) F_{i}(X) Fi(X) E E E 上都有 d d d 个根。

上面说的这些个根是怎么分配的呢?考虑由 p ˉ : = [ p   m o d   m ] ∈ Z m ∗ \bar{p}:=[p \bmod m] \in \mathbb{Z}_{m}^{*} pˉ:=[pmodm]Zm 生成的 Z m ∗ \mathbb{Z}_{m}^{*} Zm 的乘法子群 H H H。这个子群有 d d d 个不同元素 1 ‾ , p ˉ , … , p ˉ d − 1 \overline{1}, \bar{p}, \ldots, \bar{p}^{d-1} 1,pˉ,,pˉd1。考虑商群 Z m ∗ / H \mathbb{Z}_{m}^{*} / H Zm/H,有 n = ϕ ( m ) / d n=\phi(m) / d n=ϕ(m)/d 个不同的陪集,每个陪集长这样:

k H = { k h : h ∈ H } ⊆ Z m ∗ k H=\{k h: h \in H\} \subseteq \mathbb{Z}_{m}^{*} kH={ kh:hH}Zm
k k k 是陪集代表。

现在从每个陪集里面找一个代表,得到一串数 k 1 , … , k n ∈ Z m ∗ k_{1}, \ldots, k_{n} \in \mathbb{Z}_{m}^{*} k1,,knZm。则 H H H Z m ∗ \mathbb{Z}_{m}^{*} Zm 里的所有陪集是:
k 1 H , … , k n H .  k_{1} H, \ldots, k_{n} H \text {. } k1H,,knH
每个 Z m ∗ \mathbb{Z}_{m}^{*} Zm 中的元素都在一个陪集中。

下面我们要把多项式域的结果扔到向量空间上了。首先看一个结果:

  • 对于任意的代表集 k 1 , … , k n ∈ Z m ∗ k_{1}, \ldots, k_{n} \in \mathbb{Z}_{m}^{*} k1,,knZm of H H H in Z m ∗ \mathbb{Z}_{m}^{*} Zm, 可以把它组织成下面的形式,使得对 i = 1 , … , n i=1, \ldots, n i=1,,n,多项式 F i ( X ) F_{i}(X) Fi(X) E E E 上有 d d d 个根,即 η k \eta^{k} ηk for k ∈ k i H k \in k_{i} H kkiH.

因此,对 i = 1 , … , n i=1, \ldots, n i=1,,n 我们都有 Z p \mathbb{Z}_{p} Zp-代数的同构:
Z p [ X ] / ( F i ( X ) ) ⟶ E [ f ( X )   m o d   F i ( X ) ] ⟼ f ( η k i ) (  for  f ( X ) ∈ Z p [ X ] ) . \begin{aligned} \mathbb{Z}_{p}[X] /\left(F_{i}(X)\right) & \longrightarrow E \\ {\left[f(X) \bmod F_{i}(X)\right] } & \longmapsto f\left(\eta^{k_{i}}\right) \quad\left(\text { for } f(X) \in \mathbb{Z}_{p}[X]\right) . \end{aligned} Zp[X]/(Fi(X))[f(X)modFi(X)]Ef(ηki)( for f(X)Zp[X]).

因为 E E E 中每个元素都可以写成 f ( η ) f(\eta) f(η) 的形式,其中 f ( X ) ∈ Z p [ X ] f(X) \in \mathbb{Z}_{p}[X] f(X)Zp[X]。于是有 Z p \mathbb{Z}_{p} Zp-代数的同构:

A p ⟶ E n f ( x ) ⟼ ( f ( η k 1 ) , … , f ( η k n ) ) (  for  f ( X ) ∈ Z p [ X ] ) . \begin{aligned} \mathcal{A}_{p} & \longrightarrow E^{n} \\ f(\boldsymbol{x}) & \longmapsto\left(f\left(\eta^{k_{1}}\right), \ldots, f\left(\eta^{k_{n}}\right)\right) \quad\left(\text { for } f(X) \in \mathbb{Z}_{p}[X]\right) . \end{aligned} Apf(x)En(f(ηk1),,f(ηkn))( for f(X)Zp[X]).
我们不妨称 E E E 为槽(slot)代数。 A p ⟶ E n \mathcal{A}_{p} \longrightarrow E^{n} ApEn 这个自同构允许我们在 E n E^{n} En 做逐元素的加法和乘法,并且可以对应到 A p \mathcal{A}_{p} Ap 上。

比如 a ∈ A p \boldsymbol{a} \in \mathcal{A}_{p} aAp 对应 ( α 1 , … , α n ) ∈ E n \left(\alpha_{1}, \ldots, \alpha_{n}\right) \in E^{n} (α1,,αn)En b ∈ A p \boldsymbol{b} \in \mathcal{A}_{p} bAp 对应 ( β 1 , … , β n ) ∈ E n \left(\beta_{1}, \ldots, \beta_{n}\right) \in E^{n} (β1,,βn)En,则 a + b \boldsymbol{a}+\boldsymbol{b} a+b 对应 ( α 1 + β 1 , … , α n + β n ) ∈ E n \left(\alpha_{1}+\beta_{1}, \ldots, \alpha_{n}+\beta_{n}\right) \in E^{n} (α1+β1,,αn+βn)En a ⋅ b \boldsymbol{a} \cdot \boldsymbol{b} ab 对应 ( α 1 ⋅ β 1 , … , α n ⋅ β n ) ∈ \left(\alpha_{1} \cdot \beta_{1}, \ldots, \alpha_{n} \cdot \beta_{n}\right) \in (α1β1,,αnβn) E n E^{n} En.

在计算上实现这个自同构也比较简单。

Galois自同构和向量内数据的移动

有了 A p ⟶ E n \mathcal{A}_{p} \longrightarrow E^{n} ApEn 这个自同构,我们就可以对向量(或者说多项式),弄一些SIMD操作。但是,在向量内部移动数据也是有用的一批。这个事可以通过上一篇文章介绍的 A p \mathcal{A}_{p} Ap 上的Galois自同构实现。

回忆杀:对于 j ∈ Z m ∗ j \in \mathbb{Z}_{m}^{*} jZm,第 j j j 个 Galois 自同构 θ j \theta_{j} θj Z p \mathbb{Z}_{p} Zp-代数的自同构:
θ j : A p ⟶ A p f ( x ) ⟼ f ( x j ) (  for  f ( X ) ∈ Z p [ X ] ) \begin{aligned} \theta_{j}: \mathcal{A}_{p} & \longrightarrow \mathcal{A}_{p} \\ f(\boldsymbol{x}) & \longmapsto f\left(\boldsymbol{x}^{j}\right) \quad\left(\text { for } f(X) \in \mathbb{Z}_{p}[X]\right) \end{aligned} θj:Apf(x)Apf(xj)( for f(X)Zp[X])
A p ⟶ E n \mathcal{A}_{p} \longrightarrow E^{n} ApEn 这个自同构
f ( x ) ∈ A p ⟷ ( f ( η k 1 ) , … , f ( η k n ) ) ∈ E n f(\boldsymbol{x}) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{k_{1}}\right), \ldots, f\left(\eta^{k_{n}}\right)\right) \in E^{n} f(x)Ap(f(ηk1),,f(ηkn))En
我们可以得到
θ j ( f ( x ) ) ∈ A p ⟷ ( f ( η j k 1 ) , … , f ( η j k n ) ) ∈ E n \theta_{j}(f(\boldsymbol{x})) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{j k_{1}}\right), \ldots, f\left(\eta^{j k_{n}}\right)\right) \in E^{n} θj(f(x))Ap(f(ηjk1),,f(ηjkn))En
因此, θ j \theta_{j} θj 在向量上做的置换比较特殊。通过精心选取 k 1 , … , k n k_{1}, \ldots, k_{n} k1,,kn就可以用特定的Galois自同构来做一些有用的映射。

Frobenius自同构

映射
σ : E ⟶ E f ( η ) ⟼ f ( η p ) (  for  f ( X ) ∈ Z p [ X ] ) . \begin{aligned} \sigma: \quad E & \longrightarrow E \\ f(\eta) & \longmapsto f\left(\eta^{p}\right) \quad\left(\text { for } f(X) \in \mathbb{Z}_{p}[X]\right) . \end{aligned} σ:Ef(η)Ef(ηp)( for f(X)Zp[X]).
Z p \mathbb{Z}_{p} Zp-代数的自同构,称为 Frobenius自同构。Frobenius自同构在有限域中十分重要。

一个结论是, ∀ α ∈ E \forall \alpha \in E αE σ ( α ) = α p \sigma(\alpha)=\alpha^{p} σ(α)=αp.

另一个结论是 ∀ α ∈ E \forall \alpha \in E αE
α ∈ Z p ⟺ σ ( α ) = α . \alpha \in \mathbb{Z}_{p} \Longleftrightarrow \sigma(\alpha)=\alpha . αZpσ(α)=α.
在自同构 A p ⟶ E n \mathcal{A}_{p} \longrightarrow E^{n} ApEn
f ( x ) ∈ A p ⟷ ( f ( η k 1 ) , … , f ( η k n ) ) ∈ E n f(\boldsymbol{x}) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{k_{1}}\right), \ldots, f\left(\eta^{k_{n}}\right)\right) \in E^{n} f(x)Ap(f(ηk1),,f(ηkn))En
下,我们有
θ p ˉ ( f ( x ) ) ∈ A p ⟷ ( f ( η p k 1 ) , … , f ( η p k n ) ) = ( σ ( f ( η k 1 ) ) , … , σ ( f ( η k n ) ) ) ∈ E n , \theta_{\bar{p}}(f(\boldsymbol{x})) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{p k_{1}}\right), \ldots, f\left(\eta^{p k_{n}}\right)\right)=\left(\sigma\left(f\left(\eta^{k_{1}}\right)\right), \ldots, \sigma\left(f\left(\eta^{k_{n}}\right)\right)\right) \in E^{n}, θpˉ(f(x))Ap(f(ηpk1),,f(ηpkn))=(σ(f(ηk1)),,σ(f(ηkn)))En,
其中 p ˉ = [ p   m o d   m ] ∈ Z m ∗ \bar{p}=[p \bmod m] \in \mathbb{Z}_{m}^{*} pˉ=[pmodm]Zm。因此,映射 θ p ˉ \theta_{\bar{p}} θpˉ 是逐元素的。

在超方体(hypercube)上做旋转

我们已经知道自同构 θ p ˉ \theta_{\bar{p}} θpˉ 做了一个Frobenius映射,映射到向量中每一个元素上,但是目前为止这个映射并没有完成类似于CKKS的旋转操作。现在我们看一下怎么用 θ j \theta_{j} θj 做旋转。

首先是一些简单的例子:

一维旋转(!!!!!!!!!!!!)

g ∈ Z m ∗ g \in \mathbb{Z}_{m}^{*} gZm 并且假设 1 , g , g 2 , … , g n − 1 1, g, g^{2}, \ldots, g^{n-1} 1,g,g2,,gn1 H H H Z m ∗ \mathbb{Z}_{m}^{*} Zm 上的所有的陪集代表。. 那么必然有 g n ∈ H g^{n} \in H gnH

为什么?注意到对于某个 e ∈ { 0 , … , n − 1 } e \in\{0, \ldots, n-1\} e{ 0,,n1} 和某个 h ∈ H h \in H hH,必有 g n = g e h g^{n}=g^{e} h gn=geh 。此外,必有 e = 0 e=0 e=0 ,否则 g n − e ∈ H g^{n-e} \in H gneH,意味着两个不同的陪集代表在 H H H 里,而这不可能。所以有 g n = h ∈ H g^{n}=h \in H gn=hH

假设 g n = 1 g^{n}=1 gn=1,则对于自同构 A p ⟶ E n \mathcal{A}_{p} \longrightarrow E^{n} ApEn,我们用上 Z m ∗ \mathbb{Z}_{m}^{*} Zm 中所有的 H H H 的陪集代表 1 , g , … , g n − 1 ∈ Z m ∗ 1, g, \ldots, g^{n-1} \in \mathbb{Z}_{m}^{*} 1,g,,gn1Zm,于是有:
f ( x ) ∈ A p ⟷ ( f ( η 1 ) , f ( η g ) , … , f ( η g n − 2 ) , f ( η g n − 1 ) ) ∈ E n f(\boldsymbol{x}) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{1}\right), f\left(\eta^{g}\right), \ldots, f\left(\eta^{g^{n-2}}\right), f\left(\eta^{g^{n-1}}\right)\right) \in E^{n} f(x)Ap(f(η1),f(ηg),,f(ηgn2),f(ηgn1))En
做映射 θ g \theta_{g} θg 便有:
θ g ( f ( x ) ) ∈ A p ⟷ ( f ( η g ) , f ( η g 2 ) , … , f ( η g n − 1 ) , f ( η g n ) ) ∈ E n \theta_{g}(f(\boldsymbol{x})) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{g}\right), f\left(\eta^{g^{2}}\right), \ldots, f\left(\eta^{g^{n-1}}\right), f\left(\eta^{g^{n}}\right)\right) \in E^{n} θg(f(x))Ap(f(ηg),f(ηg2),,f(ηgn1),f(ηgn))En
由于我们假设了 g n = 1 g^{n}=1 gn=1,所以
θ g ( f ( x ) ) ∈ A p ⟷ ( f ( η g ) , f ( η g 2 ) , … , f ( η g n − 1 ) , f ( η 1 ) ) ∈ E n \theta_{g}(f(\boldsymbol{x})) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{g}\right), f\left(\eta^{g^{2}}\right), \ldots, f\left(\eta^{g^{n-1}}\right), f\left(\eta^{1}\right)\right) \in E^{n} θg(f(x))Ap(f(ηg),f(ηg2),,f(ηgn1),f(η1))En
于是我们最终做到了旋转这件事。

对于 e = 1 , … , n − 1 e=1, \ldots, n-1 e=1,,n1,做映射 θ g e \theta_{g^{e}} θge 可以做到“向左”旋转 e e e 位。

现在假设 g n ∈ H g^{n} \in H gnH ,但是 g n ≠ 1 g^{n} \neq 1 gn=1。这意味着 g n = p ˉ s ∈ Z m ∗ g^{n}=\bar{p}^{s} \in \mathbb{Z}_{m}^{*} gn=pˉsZm ,其中 s ∈ { 1 , … , d − 1 } s \in\{1, \ldots, d-1\} s{ 1,,d1}。此时我们有:
θ g ( f ( x ) ) ∈ A p ⟷ ( f ( η g ) , f ( η g 2 ) , … , f ( η g n − 1 ) , σ s ( f ( η 1 ) ) ) ∈ E n . \theta_{g}(f(\boldsymbol{x})) \in \mathcal{A}_{p} \longleftrightarrow\left(f\left(\eta^{g}\right), f\left(\eta^{g^{2}}\right), \ldots, f\left(\eta^{g^{n-1}}\right), \sigma^{s}\left(f\left(\eta^{1}\right)\right)\right) \in E^{n} . θg(f(x))Ap(f(ηg),f(ηg2),,f(ηgn1),σs(f(η1)))En.
于是对向量 a \boldsymbol{a} a θ g \theta_{g} θg 确实是旋转了,但是在最后一个地方加了点扰动(伪旋转)。

更一般的结论是,对于 e = 1 , … , n − 1 e=1, \ldots, n-1 e=1,,n1 ,映射 θ g e \theta_{g^{e}} θge 向左旋转了 e e e 位,同时把最后的 e e e 位扰动了。向右旋转同理。

如果向量里真有不在 Z p \mathbb{Z}_{p} Zp 里的元素的话,我们仍然可以做旋转。如下所示:

对于 a ∈ A p \boldsymbol{a} \in \mathcal{A}_{p} aAp,我们可以用一个掩码 M e \boldsymbol{M}_{e} Me,它对应的是
M e ∈ A p ⟷ ( 1 , … , 1 ⏟ n − e 1 ′ s , 0 , … , 0 ⏟ e 0 ′ s ) ∈ E n . \boldsymbol{M}_{e} \in \mathcal{A}_{p} \longleftrightarrow(\underbrace{1, \ldots, 1}_{n-e 1^{\prime} \mathrm{s}}, \underbrace{0, \ldots, 0}_{e 0 ' s}) \in E^{n} . MeAp(ne1s 1,,1,e0s 0,,0)En.
我们也有
1 − M e ∈ A p ⟷ ( 0 , … , 0 ⏟ n − e 0 ′ s , 1 , … , 1 ⏟ e 1 ′ s ) ∈ E n 1-\boldsymbol{M}_{e} \in \mathcal{A}_{p} \longleftrightarrow(\underbrace{0, \ldots, 0}_{n-e 0^{\prime} s}, \underbrace{1, \ldots, 1}_{e 1^{\prime} s}) \in E^{n} 1MeAp(ne0s 0,,0,e1s 1,,1)En

如果
a ∈ A p ⟷ ( α 0 , … , α n − 1 ) ∈ E n \boldsymbol a \in \mathcal{A}_{p} \longleftrightarrow\left(\alpha_{0}, \ldots, \alpha_{n-1}\right) \in E^{n} aAp(α0,,αn1)En
那么
M e ⋅ θ g e ( a ) ∈ A p ⟷ ( α e , … , α n − 1 , 0 , … , 0 ⏟ e 0 ′ s ) ∈ E n M_{e} \cdot \theta_{g^{e}}(\boldsymbol{a}) \in \mathcal{A}_{p} \longleftrightarrow(\alpha_{e}, \ldots, \alpha_{n-1}, \underbrace{0, \ldots, 0}_{e 0 ' s}) \in E^{n} Meθge(a)Ap(αe,,αn1,e0s 0,,0)En
并且
( 1 − M e ) ⋅ θ g e − n ( a ) ∈ A p ⟷ ( 0 , … , 0 ⏟ n − e 0 ′ s , α 0 , … , α e − 1 ) ∈ E n \left(1-\boldsymbol{M}_{e}\right) \cdot \theta_{g^{e-n}}(\boldsymbol{a}) \in \mathcal{A}_{p} \longleftrightarrow(\underbrace{0, \ldots, 0}_{n-e 0^{\prime} s}, \alpha_{0}, \ldots, \alpha_{e-1}) \in E^{n} (1Me)θgen(a)Ap(ne0s 0,,0,α0,,αe1)En
于是有
M e ⋅ θ g e ( a ) + ( 1 − M e ) ⋅ θ g e − n ( a ) . M_{e} \cdot \theta_{g^{e}}(\boldsymbol{a})+\left(1-M_{e}\right) \cdot \theta_{g^{e-n}}(\boldsymbol{a}) . Meθge(a)+(1Me)θgen(a).

它便是旋转的结果。

更高效的做法是这样:
θ g ∗ ( ( 1 − M n − e ) ⋅ a ) + θ g k − n ( M n − e ⋅ a ) \theta_{g^{*}}\left(\left(1-\boldsymbol{M}_{n-e}\right) \cdot \boldsymbol{a}\right)+\theta_{g^{k-n}}\left(\boldsymbol{M}_{n-e} \cdot \boldsymbol{a}\right) θg((1Mne)a)+θgkn(Mnea)

猜你喜欢

转载自blog.csdn.net/weixin_43466027/article/details/123978751