本文中的所有内容是基于自己所学和理解整理而成的,解释部分可能会因为个人的理解产生错误和不严谨的问题。仅供初学者参考,欢迎交流指正。
A set of parties with private inputs wish to compute some joint function of their inputs.
各方希望保留一些安全属性。例如,隐私和正确性。
例子:安全选举协议,隐私保护ML
如果存在可信的第三方,MPC很容易实现,每方只需要将它们的信息告诉这个信任的第三方,由第三方进行统一整合处理。这样各方用户之间就不会暴漏彼此的相关信息。
我们希望用一个协议来取代信任的第三方(TTP),同时实现相同的安全性和正确性目标。
Privacy and correctness.
Privacy: parties 之间互相不知道输入。
Correctness:输出对应的输入一定是正确的。
在这里我们通过理想的/真实的模型来定义安全。
模型的范例
理想模型:
各方将输入发送给受信任的一方,后者计算函数并发送输出。
真实模型:
各方在没有TTP帮助的情况下运行一个真正的协议
如果对真实协议的任何攻击都可以在理想模型中执行(或模拟),那么协议就是安全的。
由于在理想的模型中基本上不可能进行任何攻击,因此隐含了安全性。
结合图来说一下。
上图左边是 real world 右边是 ideal world 右上那个人是 trust third-party. 总得来说就是,如果左边 real world 的中红色的 attacker 有什么能力的话,右边 ideal world 会有一个红色的模仿者,它与左边的 attacker 有着相同的能力,如果左边人能够获得任何跟 x 有关的信息的话,右边的模仿者应该也能获得跟 x有关的信息,但是对于理想世界模型来说,这个模仿者不应该能获得跟 x 有关
的信息,所以 real world 和 ideal world 有区别,不是 indistinguishable 的,所以左侧的 protocol 不安全。
用定义来说就是:
A protocol is secure if for every (efficient) real‐world adversary, there is an ideal world adversary such that for all x, y the joint distributions of the above are computationally indistinguishable.
为了证明安全性,我们必须取一个任意的(有效的)真实世界的攻击者A,然后构造一个理想世界的攻击者B,对所有x, y的分布是不可区分的。
B被称为a的模拟者
B(在理想世界中)将模拟A在现实世界中的view。
View = randomness + messages.
Introduced by Rabin in 1982.
是密码协议的主力。
OT有许多基于它的变种,在这里我们举一个1‐out‐of‐2 string OT
为方便理解,我们把中间蓝色当作 trust third-party,左边的 sender 将 M0 和 M1 给这个中间商,他只想让 receiver 获得其中的一个的同时,对另一个 M 一无所知。右边 Receiver 有一个 b,这个 b 是 0 或者是 1,他将这个 b 给中间商,中间商根据 b 的取值给 b 相应的 m,如果 b=0,那么 Receiver 将会获得 M0 ,b 在获得M 0 的同时,中间商将会销毁 M 1 ,所以 Receiver 将会对 M1 的内容一无所知。同时 sender 也不会知道 Receiver 到底是获得的 M1 还是 M0。
如何实现 OT 呢?举个简单的例子ElGamal encryption。
ElGamal encryption is IND‐CPA under DDH assumption.
//这个模型只在半诚实(Semi‐honest)的 receiver 前提下生效。
什么是Semi‐honest?简单理解就是说右边的 receiver 想作弊,但是他仍然按照这个模型的算法步骤走。Malicious receiver的话就是完全不按照模型的算法走,这种情况我们就不在模型中考虑了。
左边是 sender,右边是 receiver,我们假设 receiver 的 b=0右边的先选一个 secret key r0 ,计算 public key h0。
H1 是在 G 中任意选择的一个数,之后把 h0 和 h1 发给 sender。
Sender 用拿到的 h0 和 h1 进行加密,得到 c0 和 c1 ,但是他不知道 h0 和 h1 哪个是hb。发送 h0 和 h1 给 receiver,receiver 用他的 secret key r0 来对 c0 和 c1 解密,其中 c0 可以解密成 m0 ,得到了他想要的。c1 无法解密,所以丢掉。
为什么这个模型只在半诚实的 receiver 前提下生效?
因为 Malicious receiver 可以让 h0 和 h1 都通过 r0 和 r1 计算得出,不是随机得出的,所以他两个c都可以解开,这样这个模型都无效了。
主要思想:把任何的计算和方程都转换为Boolean circuit.
在这里我要举一个简单的2 parties的Garbled circuits例子来介绍。
Garbled gate 是AND gate
a,b,c都是random string,只有A知道他们具体map的是什么(比如a0代表着0,a1代表着1,在B眼中他们都是一串random string)
左下角是choese table,这个choese table的内容是基于gate的算法的,在我们这个例子中是AND gate所以我们根据choese table生成了And gate表,And gate中a0,b0等组合可以当做secret key去加密ouput c0。加密后A将And gate表的上下顺序打乱后发送给B,B只能在表中看到4个random string。
首先如果A的input是0,那么A就将能map0的a0发送给B,B的input是1,那么B通过上面提到的某种OT算法来得到b1. 那么B此时就拥有了a0和b1,但是B不知道a0代表的是0,因为在B眼中他是一串random string。B将手里的a0和b1当做Key来解密And gate表中的4个random string,B需要一个一个的尝试,直到尝试出可以用手中的key成功解密的c0。
最后B得到c0后把c0给A看。A告诉B你得的C是c0,因为在B眼中c0是一串random string。
在这整个过程中A.B都实现了零知识。A不知道B的input是0还是1,B也不知道A的input是0还是1。
这个例子作为讲解看起来很简单,但是在实际中要很复杂,因为他会涉及很多方的parties和很多不同的gate,这个例子只是两个parties和一个and gate而已。
基于 secret‐sharing.
For each wire w with value b (when evaluated on parties’ inputs), parties will hold a random secret sharing of b.
还是举个2 parties AND gate的简单例子来介绍。
P1和P2分别持有a和b的一半。
P1有a1,b1.
P2有a2,b2.
P1和P2都不知道c是多少,那么P1如何在零知识的情况下让P2计算出正确的C2呢?
首先P1随机选一个C1.(0/1)
P1不知道P2的a2,b2是0还是1,所以他可以把四种情况都列出来。
00,01,10,11
如下图,x代表的就是a2的取值,y代表的是b2的取值。
And gate 本质上可以用乘法代替(1 and 0 是0,1 and 1是1).
所以可以写出图中的代表C的公式。
之后把C的公式XOR C1,我们就得到了Cxy的公式。
那么如何实现零知识呢?
我们使用了1‐out‐of‐4 string OT
OT会根据P2所掌握的a2和b2的值来返回给P2正确的Cxy。
如果a2=0,b2=1,那么经过OT,P2将获得C01,这个C01就是P2想要得到的正确的C2.