请注意,函数引导通常也被称为可编程引导
![](https://i-blog.csdnimg.cn/blog_migrate/c50b911e57cfbc273faf6e90cf97c1b2.png)
2.为同态下取整函数开发了两种算法,
3.
4.
5.实验中基于两次引导的更好,演示了关于ckks的例子
消息m以Q/ α 为模,是h-l bit的整数
α = 2^l and Q = 2^h
问题是计算m最高有效位的加密⌊m/2^h−l−1⌋,最高有效位是符号位,负数是1,正数是0
FHEW支持: f(x + Q/2) = −f(x)负循环
有一个映射
这个映射就满足负循环
有噪音约束的:两次自举,噪声约束:|e|< α/4
其实也不能叫q/ α位,应该是密文模Q减少了q/ α倍。
无噪音约束的,三次自举:可以评估任意密文
与上一种方法相比可以提升1个额外精度。
可以将这两种方法推广到任意函数,但是需要密文模小于q,就类似于刚刚分解为小于q的每个小模在做自举。
同态分解算法:
执行这些操作的前提:提取LWE密文,把输入提取出LWE密文
以前两种方法的主要思想:−1 · (−m) = m,因此需要一次乘法同态
而本文不用乘法,因此可以应用于加法同态加密方案
以前的两种方法噪声更高,消耗的bootstrapping次数更多。
不同的方法的优缺点:
ckks的方案的运行复杂度依赖于两个数字之间允许的精度大小,和两个数字之间差的大小有关 ,我们的方案不会
环维度为N,粗体是向量
LWE密文:
三元组密钥:
FHEW中bootstrapping的提取函数必须满足负循环,bootstrapping只能对LWE密文做。
bootstrapping过程:
1.首先计算LWE密文
输入LWE密文(a,b)
2.模切换
这篇文章bootstrapping的定理:
大精度同态符号评估:
LWE密文:
密文模Q,明文模Q/ α
e+ β∈(0,α),因此符号位与解密后的m一样,(e+ β)/α小于1
由于只关心m’的MSB,因此可以将m’视为任意整数模Q
利用数字分解后的小q和bootstrapping来清除最低有效位
q设置为FHEW有效支持的适当值,Q’通常不是2的幂次,是为了支持NTT
FHEW复杂度与logQ'成线性关系,与logq成指数关系
满足负循环的函数:
两次boot :α = 4β
核心是一个HomFloor
输入:
噪声估计:
输出:
输出的密文对应的明文是:
结果:
噪声估计一样:
m的最高有效位与r(m)一样
HomSign使用HomFloor作为子例程清除最低有效位直到只剩下MSB的符号位
再使用modulus Switch把模降为(α/q) · Q以获得scaling factor为α的密文
然后继续这个过程
一共需要减少log Q − log qbit,一次减少 log(q/α)bit,因此需要迭代⌈(log Q − log q)/ log(q/α)⌉次HomFloor函数
若β > 2是bootstrapping噪声,则当α = 4β是一个较小的值时,HomSign运行时间越小,(因为运行时间与成正比),这种情况下需要
次HomFloor和1次Boot,也就是
次Boot。
算法详解:思路,modq就是只需要m的后logq位,然后减掉这个就是向下取整了
先提取LWE密文(a,b)
三次bootstrapping:α = 2β
次boot
floor函数到任意函数
一个数字m的加密 (c, d)
限制:floor函数需要是负循环
f0是去除最高有效位的