CKKS加密-编码解码

点个关注吧!

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,...,ξ2N1

一、编码 C N → C [ x ] / ( x N + 1 ) \mathbb{C}^{N}\rightarrow \mathbb{C}[x]/(x^N+1) CNC[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(ξ2N1))CN
编码:输入复数向量 z ∈ C N z\in \mathbb{C}^N zCN,想求解出一个多项式 ∑ 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(ξ2N1))=(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ξ+...,aN1ξN1=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ξ2N1+...,aN1ξ(2N1)(N1)=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ξ...ξ2N1.........ξN1...ξ(2N1)(N1) a0...aN1 = 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} ξN1共轭,其余同理。即 ξ 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:{zCN:zj=zj}。并定义新的同构操作 π : H → C N / 2 \pi:\mathbb{H}\rightarrow \mathbb{C}^{N/2} π:HCN/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) zCN/2π1(z)Hp=Δπ1(z)σ(R)σ1(p)RZ[x]/(xN+1)

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅逼码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值