
1. Preliminaries
N=2k,M=2Nm,ΦM(X)=XN+1
データ
z∈C2N
を多項式の形
m(X)∈Z[X]/XN+1
へ変換する必要がある.
2. Vanilla encoding
σ:C[X]/(XN+1)→CN を見つける
decoding
ΦM(X) の N個の根 ζ,ζ3,⋯ζ2N−1 を多項式に代入する
σ(m)=(m(ζ),m(ζ3),⋯,m(ζ2N−1))∈CN
(σ は全単射なので複素数と多項式が1対1対応)
encoding
σ(m)=(m(ζ),m(ζ3),⋯,m(ζ2N−1))=(z1,⋯,zN)
となるような
m(X)=∑i=0N−1αiXiを見つける(αiは係数)
つまり、
∑j=0N−1αj(ζ2i−1)j=zi for i=1,⋯,N
ヴァンデルモンド行列 A を用いて
Aα=z⇔α=A−1z
Example
M=8,N=4,ΦM(X)=X4+1,ω=e82iπ の時

根として ζ=ω≃0.707+0.707i を選ぶと
メッセージ a=[1,2,3,4] は
p:=σ−1(a)≃(2.5+4E−16i)+(−5E−16+0.7i)x+(−3E−16+0.5)x2+(−8E−16+0.7i)x3
もう一度 σ に通すと
σ(p)≃[1−1E−16i,2−4E−16i,3+2E−17i,4+2E−16i]
ほぼもとの値となっている
3. CKKS encoding
違うポイント
- 整数多項式環 R=Z[X]/(XN+1) の多項式に変換
- decoder τ は要素が半分になるので共役を反転してくっつける