CKKS Encoding

  • ベクトルを多項式表現に変換する方法

  • 整数係数でないと準同型暗号に用いることが出来ない.

    • 複素ではなく, 整数係数多項式 から複素数にマップする
      • 整数係数なので共役とっても同じ
      • ので

実装

z = [3.0 + 4.0im, 2.0 - 1.0im]
# pi(z)
zz = [3.0 + 4.0im, 2.0 - 1.0im, 2.0 + 1.0im, 3.0 - 4.0im]
Δ = 64
scaled_πz = [192.0 + 256.0im, 128.0 - 64.0im, 128.0 + 64.0im, 192.0 - 256.0im]
 
β =
4×4 Matrix{ComplexF64}:
 1.0+0.0im   0.707+0.707im   0.0+1.0im  -0.707+0.707im
 1.0+0.0im  -0.707+0.707im  -0.0-1.0im   0.707+0.707im
 1.0+0.0im  -0.707-0.707im   0.0+1.0im   0.707-0.707im
 1.0+0.0im   0.707-0.707im  -0.0-1.0im  -0.707-0.707im
 
coord = [160.0, 90.0, 160.0, 45.0]
b = [191.81 + 255.45im, 128.18 - 64.54im, 128.18 + 64.54im, 191.81 - 255.45im]
p.coeffs = [159.9 + 7.1e-15im, 90.0 - 7.10e-15im, 160.0 + 7.9e-15im, 45.0 + 1.0e-14im]
rounded_coeffs = [160, 90, 160, 45]
p = 160.0 + 90.0 x^1 + 160.0 x^2 + 45.0 x^3
  • todo なんか本家実装と違う?

参考文献