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,…位的密钥,在旋转具体步数时再进行拆分。
数学问题
τ(μ(Xk))=(μ(ζk),μ(ζ5k),…,μ(ζ(2n−3)k))
If c0(X)+c1(X)⋅s(X)=μ(X), then c0(Xk)+c1(Xk)⋅s(Xk)=μ(Xk)
k=5 : rotation on ⟨ζ5⟩={ζ,ζ5,…,ζ2n−3} (as well as plaintext slots)
k=−1 : complex conjugate
示例


rotation key的生成
-
对于与CKKS中 ΦM 的 M 互素的 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 用到的公钥 pk 有 rkr←KSGensk(κ5r(sk))
i.e. pkleftRot,r=(−a0⋅s+e0+p⋅s(xk),a0)(mod p⋅ql)
-
取定 Δ 和 方案的乘法深度 L 后,有 Q=ΔL。
然后,基于 安全参数 λ 和 LWE parameter estimator 我们得到多项式次数 N。
-
a0 uniformly sampled from Rp⋅ql
-
r 表示 rotate 的位数减1。(参考前文示例可知,r=1,k=5 时,左旋转两位)
-
left rotation 有 k=5rmod2N
-
right rotation 有 k=5−rmod2N
-
conjugation 有 k=2N−1mod2N
-
以上主要参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第五页
-
p 是一个和 QL 有相同位宽的大整数(参考pdf HEAAN/slide-HEAAN.pdf at 1.1 · snucrypto/HEAAN 第四页)
-
ql 是指,我们此时考虑一个在 level l 的 ct=(c0,c1)
计算 ct'=rotation (ct)
前文的 pkleftRot,r 即为下文中的 rkr,记号 p,k,r 的意义与前文相同。
ct'←KSrkr(κ5r(ct))=KSrkr((c0(xk),c1(xk)))=(c0(xk),0)+⌊p−1⋅c1(xk)⋅rkr⌉(modql)=(c0(xk),0)+⌊p−1⋅c1(xk)⋅(−a0⋅s(x)+e0+p⋅s(xk),a0)⌉(modql)以下是为查看解密正确性而写的冗长展开=(c0(xk),0)+⌊(p−1⋅c1(xk)⋅(−a0)⋅s(x)+p−1⋅c1(xk)⋅e0+c1(xk)⋅p−1⋅p⋅s(xk),p−1⋅c1(xk)⋅a0)⌉(modql)=(c0(xk)+⌊p−1⋅c1(xk)⋅(−a0)⋅s(x)+p−1⋅c1(xk)⋅e0+c1(xk)⋅s(xk)⌉,⌊p−1⋅c1(xk)⋅a0⌉)(modql)
验证正确性
对于上述 ct' 和 sk=(1,s),代入解密流程,有 Dec(ct',sk)=κk(m)
Dec(ct',sk)=(c0(xk)+p−1⋅c1(xk)⋅(−a0)⋅s(x)+p−1⋅c1(xk)⋅e0+c1(xk)⋅s(xk),p−1⋅c1(xk)⋅a0)⋅(1,s(x))(modql)=c0(xk)−p−1⋅c1(xk)⋅a0⋅s(x)+p−1⋅c1(xk)⋅e0+c1(xk)⋅s(xk)+p−1⋅c1(xk)⋅a0⋅s(x)(modql)=c0(xk)+c1(xk)⋅s(xk)+p−1⋅c1(xk)⋅e0−p−1⋅c1(xk)⋅a0⋅s(x)+p−1⋅c1(xk)⋅a0⋅s(x)(modql)=c0(xk)+c1(xk)⋅s(xk)+p−1⋅c1(xk)⋅e0(modql)≈κk(m)(modql)
对密文的某一部分进行rotation操作
问题:利用SEAL库对密文的某一部分进行rotation操作
答案:
- 利用 mask 向量先提取原密文要操作的部分并进行旋转;
- 再利用 mask' 提取原密文不需要操作的部分,
- 将两部分密文结果相加即可
注:
-
第二步的 mask’ 即为 第一步的 mask 取反(或者说取补)。
-
思路来源Operations for rotations in ciphertext using SEAL - Stack Overflow
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~