CKKS EXPLAINED, PART 2: FULL ENCODING AND DECODING   Introduction  在之前的文章《解析CKKS:第一部分,基本编码和解码》中,我们了解到为了在加密的复数向量上进行计算,我们必须首先构建一个编码器和一个解码器,将我们的复数向量转化为多项式。
 编码器和解码器的步骤是必要的,因为加密、解密和其他机制都是基于多项式环进行的。因此,我们需要一种将实值向量转化为多项式的方法。
 我们还了解到,通过使用规范嵌入σ X N + 1 C N C [ X ] / ( X N + 1 ) Z [ X ] / ( X N + 1 ) 
 因此,在本文中,我们将探讨如何实现原始论文《用于近似数算术的同态加密》中使用的编码器和解码器,这将是我们从头开始实现CKKS的第一步。
 让我们以一个具体的例子来说明通过规范嵌入建立同构映射的概念。 
 假设我们有一个复数向量空间C 3 ( a , b , c ) a , b , c C [ X ] / ( X 3 + 1 ) 
 首先,我们需要选择一个规范嵌入σ X 3 + 1 X 3 + 1 ω 1 , ω 2 , ω 3 
 现在,我们可以使用规范嵌入σ ( a , b , c ) C [ X ] / ( X 3 + 1 ) 
 将复数向量的每个元素分别与根ω 1 , ω 2 , ω 3 σ ( a ) , σ ( b ) , σ ( c ) 
使用这些求值结果构建一个多项式,例如p ( X ) = σ ( a ) X 2 + σ ( b ) X + σ ( c ) 
将多项式p ( X ) X 3 + 1 C [ X ] / ( X 3 + 1 ) 
通过这个过程,我们将复数向量( a , b , c ) C [ X ] / ( X 3 + 1 ) C 3 C [ X ] / ( X 3 + 1 ) 
 在CKKS方案中,这样的同构映射使得我们可以在复数向量空间中进行方便的计算,然后将结果转换回多项式环中的同余类,从而实现在加密状态下对复数向量进行计算。
  CKKS encoding  与上一篇文章的不同之处在于,编码多项式的明文空间现在是R = Z [ X ] / ( X N + 1 ) C [ X ] / ( X N + 1 ) C N 
 为了解决这个问题,让我们来看一下规范嵌入σ R 
 因为R  :
 。 σ ( R ) ⊆ H = z ∈ C N : z j = z − j ― . 。 回想一下之前的图像,当M = 8 
 
 在这张图片上,我们可以看到ω 1 = ω 7 ― ω 3 = ω 5 ― X N + 1 m ( X ) ∈ R m ( ξ j ) = m ( ξ − j ) ― = m ( ξ − j ― ) . 
 因此,σ ( R ) N / 2 N N / 2 
 ==这个操作,将H C N / 2 π 
 现在,我们可以从z ∈ C N / 2 π − 1 π π − 1 π − 1 ( z ) ∈ H 
 我们面临的一个问题是,我们不能直接使用σ : R = Z [ X ] / ( X N + 1 ) → σ ( R ) ⊆ H H σ ( R ) σ R σ ( R ) σ ( R ) H R σ ( R ) H C N / 2 
 这个细节很重要,因为它意味着我们必须找到一种将π − 1 ( z ) σ ( R ) x ⌊ x ⌋ ⌊ x ⌋ + 1 x ⌊ x ⌋ ⌊ x ⌋ + 1 
 这个想法很简单:R Z -basis  1 , X , … , X N − 1 σ σ ( R ) Z -basis  β = ( b 1 , b 2 , … , b N ) = ( σ ( 1 ) , σ ( X ) , … , σ ( X N − 1 ) ) z ∈ H β 
 z = ∑ i = 1 N z i b i ,with z i = < z , b i > | | b i | | 2 ∈ R . 因为基是正交的(但不一定是标准正交的),我们有z i = ⟨ z , b i ⟩ ∥ b i ∥ 2 < x , y >= ∑ i = 1 N x i y i ― H H R N H 
 最后,一旦我们得到了坐标z i σ ( 1 ) , σ ( X ) , … , σ ( X N − 1 ) σ ( R ) 
 一旦我们投影到σ ( R ) σ − 1 R 
 为了保持精度,在舍入过程中我们引入一个缩放因子Δ > 0 Δ Δ 1 / Δ x = 1.4 0.25 Δ = 4 1 / Δ = 0.25 ⌊ Δ x ⌋ = ⌊ 4 × 1.4 ⌋ = ⌊ 5.6 ⌋ = 6 Δ 6 / 4 = 1.5 x = 1.4 0.25 
 因此,最终的编码过程如下:
 取一个元素z ∈ C N / 2 
将其扩展为π − 1 ( z ) ∈ H 
将其乘以Δ 
将其投影到σ ( R ) ⌊ Δ . π − 1 ( z ) ⌉ σ ( R ) ∈ σ ( R ) 
使用σ m ( X ) = σ − 1 ( ⌊ Δ ⋅ π − 1 ( z ) ⌉ σ ( R ) ) ∈ R 
解码过程则简单得多,对于多项式m ( X ) z = π ∘ σ ( Δ − 1 ⋅ m )