【论文阅读笔记】Prio: Private, Robust, and Scalable Computation of Aggregate Statistics

Prio: Private, Robust, and Scalable Computation of Aggregate Statistics

差分隐私是一种貌似不错的方案,因为这种技术可以容忍用户的掉线,以及用户可能的恶意行为,然而,其提供较弱的隐私保护能力,是他的一个弊端(除此之外,其还会一定程度上的 影响结果)

除此之外,基于秘密分享的加密方案也是可以考虑的,但是引入秘密分享的加密方案会导致无法观测到数据的可用性,破坏了协议的鲁棒性,即恶意用户可以发送任意的数据来使结果发生任意的偏离行为(因为一切都是在密文上进行操作的)。为了解决这个问题,我们当然可以使用零知识证明的方案,但是这样无疑会破坏协议的可扩展性,因为他引入了太多的公钥操作。


本文的主要贡献如下所示:
1、提出了一种秘密共享的非交互式证明方法(SNIPs),一种新型的零知识证明,针对客户端和服务器进行了优化。
2、提出来一种提出了仿射-可聚集编码技术

本文的威胁模型:只要存在一个诚实的服务器,我们可以保证用户隐私信息不会被泄露。

本文的安全模型:
匿名性:服务开发商选择匿名全部的用户端信息
隐私性:只要保持一个服务器未被攻占,其可以提供完整的对用户隐私信息的保护。除此之外我们说,对于大多数的聚合函数,我们提供严格的f隐私保护,对于部分的聚合函数,允许其存在一个不影响的泄露函数L(x)存在
健壮性:恶意的联盟,仅能通过自己的输出来影响函数的结果,则我们认为私有的聚合系统是鲁棒的。


一个简单的小Example:
上传信息阶段:用户生成自身隐私信息的秘密份额,例如 \({x_i} = {[{x_i}]_1} + {[{x_i}]_2} + ... + {[{x_i}]_s}\),将对应的份额部分发送给对应的服务器s
计算聚合信息阶段:这里以加法为例:每个聚合服务器持有一个加法函数,可以表现为: \({A_j} \leftarrow {A_j} + {[{x_i}]_j}\)
求和公布阶段:每个服务器将自己的求和结果进行公布,每个服务器通过累加可以得到最后的结果信息。

在这个例子中,我们无法验证用户提交的份额信息的和是否正确,因此Prio提供了一种验证方案。


我们的SNIPs主要考虑的在有限域上的计算,因此我们使用的为算术电路(不同于布尔电路,我们将布尔运算转换为算数域上的运算)


SNIPs的构建:
Setup:我们假设M是Valid验证电路中乘法门的数量,我们假定 \(2M \ll \left| F \right|\)。【我们需要强调的是,该电路是公开的,是在协议执行之前便已经生成的,任何一个部件都可以调用这个电路进行计算】

Step 1:客户端计算阶段,客户端通过自己的隐私输入\(x\),来计算出每条导线(这里主要谈论的是乘法电路中)的值,我们假设一个乘法电路的输入分别是 \({u_t},{v_t}\), 其中的t表示的是乘法门的编号( \(t \in [1,M]\)),我们可以通过拉格朗日插值定理计算出两个多项式,使其满足:\(f(t) = {u_t},g(t) = {v_t}\)。此外我们额外计算一个多项式,使其满足 \(h(t) = f(t) \cdot g(t)\)成立,易知,\(h(t)\)对应于第\(t\)个乘法门的输出,我们将其通过加法秘密分享的方式分享给服务器 \({[h(t)]_i}\)
多项式 \(f(t),g(t)\)的最高此项为\(M-1\),而对应于\(h(t)\)的最高次项为 \(2M - 2\)

Step 2:服务端一致性检验:每个服务器将持有用户发送的输入份额信息 \({[x]_i}\),以及乘法门的输出导线多项式的份额部分\({[h(t)]_i}\),服务器可以依靠手里拿到的信息重构出Valid电路内部导线的全部信息值。【这里我们为什么要强调需要导线的份额部分,因为在乘法门中我们没有办法通过输入份额\({[x]_i}\)来计算对应的输出导线的值,因此需要客户端额外提供相应的信息。除了这部分外,其余的信息都是可以通过服务器自身持有的信息来计算得到的,因为他们都是仿射操作】每根导线的输入按照拓扑结构可以定义为:\({[f]_i},{[g]_i}\),并且如果用户诚实的执行了协议,那么在客户端应该会有\(f \cdot g = h\)
但是,客户端又可能会偏移协议的执行,返回一个\(\hat h(t) \ne h(t)\),我们不难得知如果存在一个伪造的 \(\hat h({t_0})\)那么,\(\hat h({t_0}) \ne h({t_0}) = f({t_0}) \cdot g({t_0}) = \hat f({t_0}) \cdot \hat g({t_0})\)。接下来,服务器需要检验客户端提交的信息\({[h(t)]_i}\)是否正确。【如果不进行一致性的检验,那么我们就无法相信Valid(x)电路输出的准确性】

Step 3a:多项式的一致性检验,在此部分,我们指出如果服务器需要检验客户端提交的信息\({[h(t)]_i}\)是否正确,等价于检验等式 \(\hat f({t_0}) \cdot \hat g({t_0}) - \hat h({t_0})\)在定义域上是为0,如果结果为零则表示客户端诚实的提交了信息,否则,我们有理由相信客户端执行了欺骗的行为。因此,服务器可以随机的在定义域上选择一个随机数\(r\)作为输入,计算 \(\hat f(r) \cdot \hat g(r) - \hat h(r)\)。因为此时,服务器手中持有的都为份额信息,因此每个服务器实际能够计算的消息为: \({[\hat f(r)]_i},{[\hat g(r)]_i},{[\hat h(r)]_i}\),想要计算的份额部分为\({[\hat f(r) \cdot \hat g(r) - \hat h(r)]_i}\),其中除去可以直接在份额上计算的减法部分,我们需要重点解决的是 \({[\hat f(r) \cdot \hat g(r)]_i}\)部分。

Step 3b:乘法份额分享,常见的方法是借助于Beaver三元组来帮助我们执行计算,但是如果让服务器之间进行通信来生成三元组会造成较大的开销,于是本文创新型的借助于用户来生成三元组信息。然而考虑到用户是恶意的实体,我们进一步分析可以得到,即使用户生成的三元组不符合我们Beaver三元组的条件,其依然是以较大概率被检测出来的。
具体原因如下,如果其生成的三元组\((a,b,c)\)不满足\(a \cdot b = c \in \Bbb F\),那么我们进一步可以写为\(a \cdot b = c + \alpha\) ,那么对于乘法的多方计算来说,正常应该得到\({[\hat f(r)]_i} \cdot {[\hat g(r)]_i} = {[\hat f(r) \cdot \hat g(r)]_i}\),而此时会变为\({[\hat f(r)]_i} \cdot {[\hat g(r)]_i} = {[\hat f(r) \cdot \hat g(r)]_i} + \alpha\) ,在本文的假定条件下,服务器是诚实的,因此服务器选择的随机数\(r\)是独立于\(\alpha\) 分布的,因此等式\(\hat f(r) \cdot \hat g(r) - \hat h(r)\)和等式\(\hat f(r) \cdot \hat g(r) - \hat h(r) + \alpha\) 是计算上相等的,其为\(0\)误判的概率都为 \(1 - \frac{{2M - 2}}{{\left| {\Bbb F} \right|}}\)

Step 4:输出验证阶段,自此,服务器可以放心的认为客户端诚实的提交了乘法门的输出份额,因此电路的内部输入与输出也能够诚实的被模拟出来。各服务器仅需将电路Valid的输出线上的输出份额进行公开计算,便能得出Valid(x)电路的值。


现在我们考虑另一种场景,在该场景下,我们不希望用户习得关于电路的任何知识,那么我们可以要求用户提供对应于乘法门数量\(M\)的三元组,此三元组我们可以使用SNIPs进行验证。然后,服务器可以在此三元组的帮助下,完成Valid电路的计算。

除了SNIPs以外,文中还提出了一种编码方案Affine-aggregation encoding(AEFs),该编码方案可以快速的完成一些除了求和之外的计算,例如便准偏差,求最小二乘,甚至可以完成机器学习中的随机梯度下降的计算。具体而言,该编码方案包含三个部分:
Encode\((x)\):输入一个信息,输出一个特定格式的编码后信息
Valid\((\)\(y\)\()\):服务器可以利用该算法来判断用户是否诚实的执行了AEFs的Encode\((x)\)阶段
Decode\((\)\(\sigma\) \()\):服务器可以通过交互,将计算结果\(\sigma\) 输入解码算法Decode中,得到想要计算的函数\(f({x_1} + {x_2} + ... + {x_N})\)结果,具体而言,\(\sigma = \sum\nolimits_{i = 1}^n {Trun{c_{k'}}(Encode({x_i}))} \in {\Bbb F}^{k'}\)其中的\({k'}\)表示的截取的位数。
文中给出了一个简单的例子,选取AEFs为简单的 \(Encode(x) = (x,{\beta _0},...,{\beta _{b - 1}}) \in {\Bbb F}\),其中的\(({\beta _0},...,{\beta _{b - 1}})\)表示的为\(x\)的比特形式,在这种情况下,我们的想要计算和式的话,只需要将截断函数选择在最高位即可,即\({k'}=1\)


文章主要考虑了两种攻击的情况,这两种情况都广泛存在于现实生活中。
第一种为:选择拒绝服务攻击,即攻击者阻塞正常用户的输入,只允许一个正常用户(受害者)提交信息,剩余的信息都由攻击者选择,那么在服务器返回相应的信息后,攻击者可以减去自己持有的信息进而获得受害者的私有信息。解决方案为,为合法用户注册身份,利用私钥进行签名,服务器设置一个阈值,当一定数量的合法用户提交信息之后,才返回聚合结果信息。
第二种为:交叉路口攻击,先让服务器执行一次正常的聚合结果,之后攻击者选择一个受害者,阻塞其网络,重新提交剩余用户的信息。得到两次的聚合结果进行相减便能得到受害者的私有信息。解决方案:引入差分隐私的手段,差分隐私提供了如下的保护,当单个个体退出训练,将最小程度的影响最终的聚合结果。


总结:本文的创新在于,通常的验证网络由验证者通过验证电路单独的进行计算,现在我们通过待验证方提供一定的信息来辅助整个系统的验证,可以一定程度上的降低验证的开销。未来工作主要是,在理论上来说,可以讲线性的开销转变为亚线性的开销来进行计算。并且考虑提供更多的统计计算手段而不仅仅局限于加法。

posted @ 2023-12-05 22:19  堕落的珈百璃  阅读(38)  评论(0编辑  收藏  举报