同态加密-CKKS-旋转操作(Rotation)

Rotation

rotation操作的论文出处:

1. “Homomorphic encryption for arithmetic of approximate numbers", Sec3.4 p423, Permutations over the Plaintext Slots.

2. "Bootstrapping for approximate homomorphic encryption" Sec4.2

参考资料:

同态加密:CKKS原理之旋转(Rotation)_PenguinLeee的博客-CSDN博客(包含数学上的说明)

问:在ckks中的bootstrapping中的打包编码,为什么要选取本原根的 5i 次方呢?就是选取的本原根为ξ5i,好像是为了旋转操作用的,但是具体有什么作用呢?

答:在编码中,为了实现旋转操作,自然嵌入的根ξ的排列会有一些讲究。(详见上述链接)

旋转密钥的处理一些说明。

在密文情况下,因为 c0(x)+c1(x)s(x)=m(x) ,所以做旋转的时候有c0(x5)+c1(x5)s(x5)=m(x5)。这意味着,我们需要为每一个旋转步数生成一个转换密钥,目的是把 s(xk) 弄成 s(x)。为了简便起见,我这里直接称为旋转密钥。在SEAL库的实现中,他们依据 2 的幂来进行生成旋转密钥:比如生成旋转 1,2,4,8,位的密钥,在旋转具体步数时再进行拆分。

数学问题

  • 22:45 The CKKS (a.k.a. HEAAN) FHE Scheme 伽罗瓦群 同构于 由 5 和 -1 生成的乘法群。即,

    Based on the evaluation of automorphism XXk in Gal(K/Q)Z2n×=5,1

τ(μ(Xk))=(μ(ζk),μ(ζ5k),,μ(ζ(2n3)k))

​ If c0(X)+c1(X)s(X)=μ(X), then c0(Xk)+c1(Xk)s(Xk)=μ(Xk)

k=5 : rotation on ζ5={ζ,ζ5,,ζ2n3} (as well as plaintext slots)

k=1 : complex conjugate


示例


rotation key的生成

  • 对于与CKKS中 ΦMM 互素的 k ,有环 P=R[X]/(XN+1) 上自同构映射 κk:m(X)m(Xk)(modΦM(X))

    • 对于 使用 sk=(1,s) 加密多项式 m 得到的密文 ctκk(ct) 表示对密文向量的每个分量都做 κk 映射。
    • 利用 key-switching 技术,可以使用原始的 密钥 sk 解密密文 κk(ct) 得到 κk(m)
    • 本段参考论文 Bootstrapping for approximate homomorphic encryption, p10
  • rotation 用到的公钥 pkrkrKSGensk(κ5r(sk))

    i.e. pkleftRot,r=(a0s+e0+ps(xk),a0)(mod pql)

    • 取定 Δ 和 方案的乘法深度 L 后,有 Q=ΔL

      然后,基于 安全参数 λ 和 LWE parameter estimator 我们得到多项式次数 N

    • a0 uniformly sampled from Rpql

    • r 表示 rotate 的位数减1。(参考前文示例可知,r=1,k=5 时,左旋转两位)

    • left rotation 有 k=5rmod2N

    • right rotation 有 k=5rmod2N

    • conjugation 有 k=2N1mod2N

    • 以上主要参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第五页

    • p 是一个和 QL 有相同位宽的大整数(参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第四页)

    • ql 是指,我们此时考虑一个在 level lct=(c0,c1)

计算 ct'=rotation (ct)

前文的 pkleftRot,r 即为下文中的 rkr,记号 p,k,r 的意义与前文相同。

ct'KSrkr(κ5r(ct))=KSrkr((c0(xk),c1(xk)))=(c0(xk),0)+p1c1(xk)rkr(modql)=(c0(xk),0)+p1c1(xk)(a0s(x)+e0+ps(xk),a0)(modql)以下是为查看解密正确性而写的冗长展开=(c0(xk),0)+(p1c1(xk)(a0)s(x)+p1c1(xk)e0+c1(xk)p1ps(xk),p1c1(xk)a0)(modql)=(c0(xk)+p1c1(xk)(a0)s(x)+p1c1(xk)e0+c1(xk)s(xk),p1c1(xk)a0)(modql)

验证正确性

对于上述 ct'sk=(1,s),代入解密流程,有 Dec(ct',sk)=κk(m)

Dec(ct',sk)=(c0(xk)+p1c1(xk)(a0)s(x)+p1c1(xk)e0+c1(xk)s(xk),p1c1(xk)a0)(1,s(x))(modql)=c0(xk)p1c1(xk)a0s(x)+p1c1(xk)e0+c1(xk)s(xk)+p1c1(xk)a0s(x)(modql)=c0(xk)+c1(xk)s(xk)+p1c1(xk)e0p1c1(xk)a0s(x)+p1c1(xk)a0s(x)(modql)=c0(xk)+c1(xk)s(xk)+p1c1(xk)e0(modql)κk(m)(modql)

对密文的某一部分进行rotation操作

问题:利用SEAL库对密文的某一部分进行rotation操作

答案:

  1. 利用 mask 向量先提取原密文要操作的部分并进行旋转;
  2. 再利用 mask' 提取原密文不需要操作的部分,
  3. 将两部分密文结果相加即可

注:

  1. 第二步的 mask’ 即为 第一步的 mask 取反(或者说取补)。

  2. 思路来源Operations for rotations in ciphertext using SEAL - Stack Overflow

posted @   yx21  阅读(2591)  评论(6编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示