5.2 Gentry 蓝图:自举如何压噪声


文档摘要

5.2 Gentry 蓝图:自举如何压噪声 自举(Bootstrapping)是让全同态加密从"有限深度"走向"任意深度"的关键一步:把解密电路本身当作被同态求值的函数跑一遍,密文的噪声就被刷新到初始水位。本节拆解 Gentry 在 2009 年给出的这个循环,讲清它成立的两块基石——可自举条件与噪声淹没。 承接 5.1 节的痛点:噪声按乘法膨胀,红线是 $p/2$,深度预算终会花光。本节是全章的转折点,也是通往 5.3 节三大家族分流的枢纽——TFHE 的毫秒级布尔门、CKKS 的重缩放,全是自举思想在不同坐标系下的化身。 核心一击:用同态求值跑解密电路 把局面摆正:密文 $c$ 的噪声 $\varepsilon$ 走到半山腰,离红线还有余量;

5.2 Gentry 蓝图:自举如何压噪声

**自举(Bootstrapping)**是让全同态加密从"有限深度"走向"任意深度"的关键一步:把解密电路本身当作被同态求值的函数跑一遍,密文的噪声就被刷新到初始水位。本节拆解 Gentry 在 2009 年给出的这个循环,讲清它成立的两块基石——可自举条件与噪声淹没。

承接 5.1 节的痛点:噪声按乘法膨胀,红线是 p/2,深度预算终会花光。本节是全章的转折点,也是通往 5.3 节三大家族分流的枢纽——TFHE 的毫秒级布尔门、CKKS 的重缩放,全是自举思想在不同坐标系下的化身。

核心一击:用同态求值跑解密电路

把局面摆正:密文 c 的噪声 \varepsilon 走到半山腰,离红线还有余量;解密函数 \text{Dec} 是一个固定的小电路(取余加判奇偶)。关键的脑洞是——既然我们能同态求值任意电路,为什么不让被求值的电路就是 \text{Dec} 本身?流程三步:

输入: 噪声偏高的旧密文 c,以及加密后的密钥(公钥族 pk_j = Enc(j),j 属于 {0,1}) 第一步: 用 pk_j 把解密密钥的每个比特位加密,得到"加密状态的密钥" 第二步: 同态求值 Dec_c(用加密密钥当输入)——本质是算"c mod p"的同态版本 第三步: 输出新密文 c',其明文仍是 m,但噪声被重置为密钥加密时的初始水平

直觉上这是循环定义——用加密系统解读加密系统。Gentry 的洞察在于:循环没有坏味,只要解密电路足够简单,同态求值它所累积的新噪声,就小于它削掉的旧噪声。把两种深度画在一张图上:若"方案能同态求值的深度"大于"自身解密电路的深度加一小段余量",自举就能 turnover,此后每跑一段电路就自举一次,深度预算从有限变成无限。Gentry 把这个门槛叫可自举性(bootstrappability),满足它的方案叫层级方案升级为全同态方案。

图:自举循环与两条深度线

图:自举循环与两条深度线

两块基石:可自举与噪声淹没

蓝图要立住,得先迈过两道坎。第一道,解密电路必须矮。5.1 节的整数玩具解密要"对 p 取余",而 p 有几千比特,电路深得不现实——Gentry 当年的解法叫"压扁"(squashing):把解密改写成一批简单门的求和,牺牲密钥结构换取电路深度。后续家族则各有妙招,BGV 引入密钥切换、TFHE 干脆用查表式的门自举,把"矮电路"从假设变成设计目标。第二道,循环安全:自举的输入输出都绕着解密密钥转,攻击者可能从"自举前后噪声的变化"里榨出密钥信息——标准补丁是噪声淹没(noise flooding):输出前叠加一个宽度按统计安全参数取的随机项,让新旧噪声的差在统计上不可分辨。淹没项不便宜,通常吃掉几层深度,这笔安全税在每一族方案里都有对应条目。

自举不是免费的另一面是时延:一次自举的开销通常折合几十到几万次普通同态运算。工程界由此分成两条流派——能重排电路、批量算的选"少自举多批处理"(BFV/BGV 流派),逐比特逻辑的选"每个门都自举"(TFHE 流派,自举一次约 10 毫秒量级),5.3 节的选型表正是围绕这个分岔展开。

蓝图的工程化:三个关键零件

Gentry 2009 年的原版蓝图离实用还差三件零件,后续十年逐一补齐,值得逐个点名。零件一,密钥切换(key switching):同态乘法会把密文的"基"变大,密钥切换把结果搬回标准基,代价是引入一份"切换密钥"——它本质上是一串加密后的秘密份额,尺寸常常占掉公钥材料的九成。零件二,模数切换(modulus switching):把密文系数除以一个约数搬到更小的模数上,噪声按比例缩小——这是层级方案"每层剥一点模数"的预算管理术,也是 5.3 节 CKKS 重缩放的思想前身。零件三,压扁的现代化替身:与其改造解密电路,不如直接设计"天生矮"的解密(环上取余天然电路深度低),TFHE 更是把解密流程重写成一张可同态求值的查找表——蓝图没变,零件全部换代。读任何 FHE 库的文档,密钥切换密钥与模数预算表都是最先出现的关键词,你现在知道它们为什么存在了。

问题:自举会不会把噪声降成零

不会,也不该。自举后的噪声水位由"密钥加密时"的初始噪声决定,永远是正数;而噪声淹没还要再垫一层随机量。若把噪声压到接近零,统计性质反而变差、给攻击者留出干净信号。工程上自举后噪声通常回到满水位的十分之一上下——够跑下一段电路即可,贪零反而危险。

最后一个容易忽略的工程事实:自举需要访问解密密钥的加密形态,这意味着密钥管理面扩大了。加密密钥(bootstrapping key)本身是一大份公钥材料,谁拿到它谁就能对密文做自举——这通常无害(自举不改变明文),但它的存在让"密钥轮换"与"权限分离"的设计多了一个要审的对象。云上部署 FHE 时,自举密钥的存储位置与传输通道要按生产级密钥对待,别因为它名字里带"公"字就降级处理。

动手感受:深度账本怎么记

不跑大库也能体会预算的残酷。假设某参数下初始噪声 \varepsilon_0 = 1,加法翻倍、乘法平方(近似账),红线 p/2 折合深度预算:纯加法能叠约 \log_2(p/2) 层;若电路含 k 层乘法,噪声量级约 \varepsilon_0^{2^k},预算瞬间见底。自举等于把指数曲线周期性"归零重画":每 L 层插一次自举,深度需求就从 k 变成 \lceil k/L \rceil \times (\text{自举开销})。把你的业务电路画成深度图、数乘法层数、按这条公式估自举次数——这套三步心算,是评估任何 FHE 报价单的第一反应。报价单上若只给"支持任意深度"而不给自举时延与频率,就等于只报了 horsepower 没报油耗;把本节的账本摊在谈判桌上,报价单会诚实很多。

要点速记:自举即同态求值解密电路,成立条件是方案深度盖过解密深度加余量;噪声淹没是循环安全的入场税;自举开销决定了 TFHE 逐门与 BFV 批处理两条工程路线的分岔;深度账本永远先数乘法层。

下一节把蓝图落到货架:BFV、CKKS、TFHE 三大家族的能力边界与选型分界线,一表看清。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U