学习&转载文章:对于多方安全计算,你是否也有这样的疑惑?
假设多方安全计算中有两个参与方\(P_0\)和\(P_1\),其中\(P_0\)拥有\(x\),\(P_1\)拥有\(y\),双方想要在不暴露自己拥有的数据的同时计算一个结果\(z\),且\(z=x+y\)。那么不管用哪种协议进行计算得到最终结果\(z\),并且公布给双方,\(P_0\),\(P_1\)都能通过手里的数据和\(z\)反推出另一方的隐私数据,请问应该如何理解这种情况呢?
对于安全多方计算协议来说,我们需要针对问题定义一个对应的ideal functionality「理想函数」,然后设计协议来模拟这个ideal functionality。
通俗来说,我们首先假设存在一个可信第三方(可能需要经过专门定制)的方案来解决对应的问题,然后我们要设计协议来取代这个可信第三方(或模拟可信第三方的存在),获得一个无可信第三方的协议。协议的安全性证明(不正式地描述)是,任何针对协议的攻击都可以转换成针对存在可信第三方的方案的攻击,因为存在可信第三方的方案非常简单,一眼就知道是安全的,那些攻击都是无力的(??),那么协议就是安全的。
针对题目中的场景, \(P_1\)拥有\(x\), \(P_2\)拥有\(y\),需要计算\(f(x,y)=x+y\)。那么对应的存在可信第三方的方案就是,\(P_1\)把\(x\) 发给可信第三方,\(P_2\)把\(y\) 发送给可信第三方,然后可信第三方计算得到\(f(x,y)\),并把结果发送给指定的接收方(如 \(P_1\)或 \(P_2\)的其中一方或者同时两方)。
那么,我们设计的想要移除可信第三方的协议,就没法保证做到比存在可信第三方时还要好。而在这个可信第三方存在的方案中,,则就算可信第三方存在,一方得到结果,肯定可以从另一方的输入中推算到另一方的输入,这不影响协议的安全性,因为协议我们只能要求它能够取代可信第三方的存在。换句话说,收到结果的一方通过协议(或者可信第三方存在的方案),只能得到结果以及自己输入所能推导出的信息。因为这里可以推导出另一方的输入,那这也是允许的。如果参与方是3人,计算\(f(x,y,z)=x+y+z\) , \(P_1\)输入为\(x\) 并且得到结果\(f(x,y,z)\) ,那么很自然他能推导出\(y+z\) ,这里得到\(y+z\) 也不能说协议的安全性受损。
需要注意到,存在可信第三方的方案非常简单,一眼就知道是安全的,同时也需要注意到,这里 \(P_1\)和\(P_2\)的输入是他们自己控制的,在有些场景下,我们是阻止不了他们通过刻意的输入,获得对方的输入内容。比如\(f(x,y)=x.y\) , 这里\(x\)和\(y\)都是0或1,计算的函数是”与“运算。如果\(P_1\)输入是0,那么得到\(f(x,y)\)也没法帮助他获得\(y\) 。如果输入是1,那么他必然可以反推得到\(y\)的值。这里从存在可信第三方的方案可以知道,我们没法阻止\(P_1\)故意输入1来得到 。
再稍微补充一下,为什么上面提到说可信第三方是需要经过定制的?
我们还是考虑上面的两方场景(上面讨论的是半诚实模型下的场景,即参与两方都会认真遵从协议,这里我们将讨论恶意模型,即参与方可能会偏离协议),并且我们的场景希望最后两方都得到结果 。理论上已经证明,对于两方协议,如果一方作恶偏离协议,那么协议没法达到这个完全公平的目标。从直觉上我们也可以知道,如果一方在拿到结果后直接跑路,另一方就没法得到结果。那么这里如果我们就要假设存在一个可信第三方的理想方案,我们不让可信第三方直接把结果发给二人(因为这样没有协议能做到模拟这种场景)。我们这里就需要定制这个可信第三方,让可信第三方把结果发给恶意的参与者,然后询问恶意参与者,是否要把结果发给另一个诚实参与者,如果恶意参与者同意则发,不同意则不发。基于这个定制,我们才能够设计的协议来模拟这个存在可信第三方的方案。