百万富翁问题与多方计算
一、 百万富翁问题
Two parties Alice and Bob, in possession of private variables i and j respectively, wish to communicate so that Alice can evaluate a function f(i, j), and Bob a function g(i, j).
有两个百万富翁,想要比较谁更富有,但是不想透露自己的财产数字,如何比较?
二、 解决方案
问题假设如下:
对于以上信息,我们只需要知道,假设两个百万服务拥有财产在1到10之间,且财产金额为整数,Ea是Alice的公钥。
对于这个问题,我们可以首先撇开数学加密过程,举一个相对比较简单的例子。
我们知道,两个百万富翁所拥有的财产均为整数,所以每个百万富翁拥有的财产可能的取值就有1到10十个数字。
我们让第一个百万富翁,选择十个盒子,按照顺序排列,分别代表1到10,并用自己的财产数字与盒子的数字进行比较,如果小于该数字,则在盒子里面放一个卡片,如果等于该数字,则在盒子里放一根铅笔,若大于则什么都不放。(实际操作可能需要三种东西的差异性)。
然后呢,我们请第二个百万富翁来,让他选择自己财产数额对应的箱子(在第一个百万富翁不参与的情况下)。随后,第二个百万富翁把剩余所有箱子销毁。
最后,两个百万富翁一起打开最后剩下的那个箱子,则可以得出谁更富有。
这个例子应该很容易理解,关键在于第一个百万富翁需要首先与每一种可能进行比较,第二个百万富翁再选择自己财产数额的箱子。
三、 原文解决方案
这里是原论文中提及的解决方案。
首先Bob选择一个随机数,并使用Alice的公钥进行加密,并用加密之后的结果,减去自己的财产发给Alice。
Alice收到了结果k-j+1。现在她需要对所有可能的金额进行计算,得到十个结果,然后用自己的私钥对结果进行加密。
随后,Alice产出一个随机素数,并使用加密之后的结果对该素数进行求余数计算。该过程具有不可逆转性质,保证了信息的安全性。这里需要Zu的结果之间相差超过2,这是因为之后会进行加一操作。
第五步,Alice将p发给Bob,同时,发送取余计算中得到的结果Z,在这一步她将所有大于她资产的Z进行+1操作。
第六步,Bob选择第j个Zj,然后用yu对p进行取余操作,如果该结果与Zj相等,说明该数字并没有进行加一操作,换句话说,Alice的资产大于该数字。
以上,完成了计算。