2021SC@SDUSC PALISADE开源库(二)CKKS讲解系列(五)重新缩放

2021SC@SDUSC

目录

介绍

模数链的高层视图

语境

香草的解决方案


介绍

在 CKKS 的上一篇文章中,PALISADE开源库(二)CKKS讲解系列(四)乘法和重新线性化,我们看到了密文乘法在 CKKS 中是如何工作的,为什么我们需要重新线性化输出以保持密文大小不变,以及如何做到这一点。

尽管如此,正如我们将看到的,我们需要一个称为重新缩放的最终操作来管理噪音并避免溢出。这将是本系列的最后一篇理论文章,在下一系列文章中,我们将用 c++ 实现一切!

为了理解它是如何工作的,我们首先有一个高级图片,然后详细了解它是如何工作的。

模数链的高层视图

到目前为止,我们已经深入研究了 CKKS 的细节,但为此我们将退后一步。CKKS 使用我们所说的级别,从某种意义上说,在噪声太大而无法正确解密输出之前,允许的乘法次数是有限的。

你可以把它想象成一个油箱。最初油箱里充满了气体,但是随着您执行越来越多的操作,油箱将被排空,直到没有剩余气体并且您无法再做任何事情。好吧,对于分级同态加密方案也是如此:您首先从一定数量的 gas 开始,但是随着您进行乘法,您的 gas 越来越少,直到用完它,并且您无法再执行任何操作.

下图说明了这一点。当你开始时,你的初始油箱是满的。但当你做乘法和缩放时,你会失去水平,这相当于消耗一些气体。因此,如果您从L个级别开始,表示为qL,qL−1,…,q1,处于qL级别意味着您还剩下L个乘法,执行一次乘法将把级别从qL降低到qL−1。

 

现在,一旦您的汽油用完,就像在现实生活中一样,您可以将油箱加满,以便在路上走得更远。此操作称为引导,我们不会在本文中介绍它。因此,如果我们假设我们没有重新装满油箱的可能性,那么在使用分级同态加密方案时必须考虑一个有趣的方面:您需要提前知道要进行的乘法数量!

确实,就像在现实生活中一样,如果您计划旅行很远,那么您将需要比简单地在附近转一圈更多的汽油。这同样适用于此,根据您需要执行的乘法次数,您必须调整坦克的大小。但是坦克越大,计算越重,参数的安全性也就越低。事实上,就像在现实生活中一样,如果你需要一个更大的水箱,它就会越重,这会让事情变得更慢,并且不那么安全。

我们不会深入所有细节,但知道CKKS方案的硬度是基于比例的 N/q, 和 N 我们多项式的次数,即我们向量的大小,以及 q 系数模数,即我们的油箱。

因此,我们需要的乘法越多,油箱就越大,因此我们的参数变得不那么安全。为了保持相同的安全级别,我们需要增加N 这将增加我们操作的计算成本。

下图来自Microsoft Private AI Bootcamp,显示了在使用 CKKS 时必须考虑的这一权衡。为了保证 128 位的安全性,我们必须增加多项式次数,即使我们不需要它提供的额外插槽,因为增加模数会使我们的参数不安全。

 

因此,在我们进入更理论化的部分之前,让我们看看关键要点是什么:

  • 重新调整和噪音管理可以看作是管理一个油箱,你从一个初始预算开始,你使用它的次数越多,它就会减少。如果你的汽油用完了,你就不能再做任何事情了。
  • 您需要提前知道您将进行多少次乘法,这将决定油箱的大小,这将影响您将使用的多项式次数的大小。

语境

因此,现在我们看到了高级别的图片,让我们深入了解这一切的原因和方式。

如果您还记得PALISADE开源库(二)CKKS讲解系列(二)完整编码和解码中关于编码的内容,那么如果我们有一个值为z的初始向量,那么在编码期间将它乘以一个Δ以保持一定的精度。

因此明文μ和密文c所包含的底层值为Δ.z。当我们将两个密文相乘时,问题是结果是z.z'.Δ²。所以它包含了规模的平方,这可能导致在几次相乘后溢出,因为规模可能呈指数增长。此外,正如我们前面看到的,每次乘法后噪声都会增加。

因此,标度操作的目标实际上是保持标度不变,同时降低密文中存在的噪声。

香草的解决方案

那么我们该如何解决这个问题呢?为了做到这一点,我们需要知道如何定义q,记住这个参数q被用作多项式环中系数的模Rq=Zq[X]/(X^N+1)。

正如在高层视图中所描述的,q将被用作一个气罐,我们将为我们的操作逐步清空。

如果我们假设我们必须做L乘法,标度为Δ,那么我们将q定义为:

 当q0≥Δ时,表示小数点前需要多少位。实际上,如果我们假设我们想要小数点的精度为30位,整数的精度为10位,我们将设置:

 一旦我们设置了整数和小数部分的精度,选择了我们想要执行的乘法的数量L,并相应地设置了q,就很容易定义缩放操作:只需对密文进行除法和四舍五入。

确实,假设我们在一个给定的level l,所以模是ql,我们有一个密文c∈Rql²。然后我们可以定义从级别l到l−1的缩放操作为:

 通过这样做,我们可以做到两件事:

  • 一旦我们解密了两个加密文本c,c '与底层值Δ.z,Δ.Z ',在应用缩放后我们有Δ.z.z '。因此,只要我们在每次乘法后进行缩放,比例在整个计算过程中都是不变的。
  • 噪声降低了,因为我们将底层明文值和解密的噪声部分分开,如果你记得好,噪声部分的形式是μ+e。因此,重新缩放也可以达到降噪的目的。

所以如果我们把所有东西放在一起,要在CKKS中做乘法你需要做三件事:

 一旦你做了所有这些,用秘钥解密将提供正确的结果,我们都设置好了!

在本文中,我们已经了解了什么是缩放,为什么需要它,以及如何在实践中实现它。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值