点个关注吧!
CKKS的创新点与难点在于数据编码。CKKS支持实数和负数的计算,能直接应用于机器学习中。
CKKS的消息是 C N / 2 \mathbb{C}^{N/2} CN/2,明文空间为 Z [ x ] / ( x N + 1 ) \mathbb{Z}[x]/(x^N+1) Z[x]/(xN+1)。我们想做的就是将消息编码到明文空间中,将明文解码到消息空间。
令M次分圆多项式 Φ M ( X ) = X N + 1 \Phi_M(X)=X^N+1 ΦM(X)=XN+1, N N N是2的幂次, M = 2 N M=2N M=2N。那么 Φ M ( X ) \Phi_M(X) ΦM(X)有 N N N个本原根 ξ , ξ 3 , . . . , ξ 2 N − 1 \xi,\xi^3,...,\xi^{2N-1} ξ,ξ3,...,ξ2N−1。
一、编码 C N → C [ x ] / ( x N + 1 ) \mathbb{C}^{N}\rightarrow \mathbb{C}[x]/(x^N+1) CN→C[x]/(xN+1),解码 C [ x ] / ( x N + 1 ) → C N \mathbb{C}[x]/(x^N+1)\rightarrow \mathbb{C}^{N} C[x]/(xN+1)→CN
解码:输入多项式
m
(
X
)
m(X)
m(X),定义标准嵌入
σ
(
m
)
=
(
m
(
ξ
)
,
.
.
.
,
m
(
ξ
2
N
−
1
)
)
∈
C
N
\sigma(m)=(m(\xi),...,m(\xi^{2N-1}))\in \mathbb{C}^N
σ(m)=(m(ξ),...,m(ξ2N−1))∈CN。
编码:输入复数向量
z
∈
C
N
z\in \mathbb{C}^N
z∈CN,想求解出一个多项式
∑
a
i
X
i
\sum a_iX^i
∑aiXi使得
(
m
(
ξ
)
,
.
.
.
,
m
(
ξ
2
N
−
1
)
)
=
(
z
1
,
.
.
.
,
z
N
)
(m(\xi),...,m(\xi^{2N-1}))=(z_1,...,z_N)
(m(ξ),...,m(ξ2N−1))=(z1,...,zN),那么就形成了一组方程组:
a
0
+
a
1
ξ
+
.
.
.
,
a
N
−
1
ξ
N
−
1
=
z
1
a_0+a_1\xi+...,a_{N-1}\xi^{N-1}=z_1
a0+a1ξ+...,aN−1ξN−1=z1
.
.
.
...
...
a
0
+
a
1
ξ
2
N
−
1
+
.
.
.
,
a
N
−
1
ξ
(
2
N
−
1
)
(
N
−
1
)
=
z
N
a_0+a_1\xi^{2N-1}+...,a_{N-1}\xi^{(2N-1)(N-1)}=z_N
a0+a1ξ2N−1+...,aN−1ξ(2N−1)(N−1)=zN
即构成了范德蒙矩阵形式:
[
1
ξ
.
.
.
ξ
N
−
1
.
.
.
.
.
.
.
.
.
.
.
.
1
ξ
2
N
−
1
.
.
.
ξ
(
2
N
−
1
)
(
N
−
1
)
]
[
a
0
.
.
.
a
N
−
1
]
=
[
z
1
.
.
.
z
N
]
\begin{bmatrix} 1 & \xi&... &\xi^{N-1} \\ ...&...&...&...\\ 1&\xi^{2N-1} &...&\xi^{(2N-1)(N-1)} \end{bmatrix}\begin{bmatrix} a_0 \\ ...\\ a_{N-1} \end{bmatrix}=\begin{bmatrix} z_1 \\ ...\\ z_N \end{bmatrix}
1...1ξ...ξ2N−1.........ξN−1...ξ(2N−1)(N−1)
a0...aN−1
=
z1...zN
二、考虑 Z [ x ] / ( x N + 1 ) \mathbb{Z}[x]/(x^N+1) Z[x]/(xN+1)的明文空间。
将
Z
[
x
]
/
(
x
N
+
1
)
\mathbb{Z}[x]/(x^N+1)
Z[x]/(xN+1)映射到
C
N
C^N
CN会出现什么?
令
m
(
X
)
∈
Z
[
x
]
/
(
x
N
+
1
)
m(X)\in \mathbb{Z}[x]/(x^N+1)
m(X)∈Z[x]/(xN+1)
首先发现
ξ
\xi
ξ与
ξ
N
−
1
\xi^{N-1}
ξN−1共轭,其余同理。即
ξ
j
=
ξ
−
j
‾
\xi^j=\overline{\xi^{-j}}
ξj=ξ−j。带入
m
(
X
)
m(X)
m(X)中恢复出
C
N
\mathbb{C}^N
CN的向量,会发现
m
(
ξ
j
)
=
m
(
ξ
−
j
)
‾
m(\xi^j)=\overline{m(\xi^{-j})}
m(ξj)=m(ξ−j),因此CKKS的消息空间只在
C
N
/
2
\mathbb{C}^{N/2}
CN/2。
那我们定义一个新的空间 H : { z ∈ C N : z j = z − j ‾ } \mathbb{H}:\{z\in \mathbb{C}^N:z_j=\overline{z_{-j}}\} H:{z∈CN:zj=z−j}。并定义新的同构操作 π : H → C N / 2 \pi:\mathbb{H}\rightarrow \mathbb{C}^{N/2} π:H→CN/2。
感觉我们已经完成了数据编码:收到 C N / 2 \mathbb{C}^{N/2} CN/2的消息,利用 π \pi π将消息扩展到 H H H,然后利用 σ \sigma σ求出 ∑ a i X i \sum a_iX^i ∑aiXi。
但是
H
\mathbb{H}
H中的元素不一定在
σ
(
R
)
\sigma(R)
σ(R)中,因此不能直接进行下一步的的操作!!!
因此需要找到一个方法把
H
\mathbb{H}
H中的元素投影到
σ
(
R
)
\sigma(R)
σ(R)
三、文中采用坐标随机取整的方法,进行映射。同时为了保证数据精度,取整前会先对数据乘上 Δ \Delta Δ然后再进行取整。
那么数据编码的整个过程就是:
z ∈ C N / 2 → π − 1 ( z ) ∈ H → p = ⌊ Δ π − 1 ( z ) ⌉ ∈ σ ( R ) → σ − 1 ( p ) ∈ R → Z [ x ] / ( x N + 1 ) z\in\mathbb{C}^{N/2}\rightarrow\pi^{-1}(z)\in \mathbb{H}\rightarrow p=\left\lfloor \Delta \pi^{-1}(z) \right\rceil \in\sigma(R)\rightarrow \sigma^{-1}(p) \in R\rightarrow \mathbb{Z}[x]/(x^N+1) z∈CN/2→π−1(z)∈H→p=⌊Δπ−1(z)⌉∈σ(R)→σ−1(p)∈R→Z[x]/(xN+1)