文献:
百万富翁问题由姚期智先生在1982年提出。
场景:两个百万富翁想要知道谁更富有,然而他们不想让对方知道自己的身家。更一般地,有 m m m个人 P 1 , ⋯ , P m P_1,\cdots,P_m P1,⋯,Pm想要计算一个整数值函数 f ( x 1 , ⋯ , x m ) f(x_1,\cdots,x_m) f(x1,⋯,xm),其中 x i x_i xi都是有界整数,且只有 P i P_i Pi知道 x i x_i xi的值,他们都不想泄露自己的秘密。
除了知道最终的比较结果,
m m m方参与者,函数 f ( x 1 , ⋯ , x m ) f(x_1,\cdots,x_m) f(x1,⋯,xm),令 K ⊆ { 1 , ⋯ , m } K \subseteq \{1,\cdots,m\} K⊆{1,⋯,m}是诚实者,令 K ′ = { 1 , ⋯ , m } − K K' = \{1,\cdots,m\} - K K′={1,⋯,m}−K是作弊者
姚证明了:对于任意的 ϵ , δ , γ > 0 \epsilon,\delta,\gamma > 0 ϵ,δ,γ>0,存在一个协议 A A A可以计算函数 f f f,满足 ( ϵ , δ ) − (\epsilon,\delta)- (ϵ,δ)−隐私约束(private constraint),并且对于任意的 K ′ ≠ { 1 , ⋯ , m } K' \neq \{1,\cdots,m\} K′={1,⋯,m}, K ′ K' K′可以成功欺骗(successful cheating)的概率至多为 γ \gamma γ。
也就是说,存在一个MPC协议,即使有 m − 1 m-1 m−1个人串通,也不会成功诈欺那 1 1 1个诚实者。当然,实际应用中要平衡安全性和计算效率。
姚期智在1986年将百万富翁问题的解决方案扩展到任意的电路,提出了混淆电路(garbled circuit)的概念。但直到2004年才被 Lindell 等人具体地完全描述出来。
有一个迷宫包含很多房间,每个房间都有 2 2 2个进入的门和 1 1 1个离开的门,房间之间由走廊进行连接。每个房间中放着 4 4 4个盒子,每个盒子上都有 2 2 2个挂锁,对应着 4 4 4种钥匙,其中 2 2 2种可以来自一个进入的门,另外 2 2 2种钥匙可以来自另一扇进入的门。一个房间中有 2 2 2种不同的钥匙,每种钥匙复制 2 2 2把,在 4 4 4盒子内各存放着 1 1 1把钥匙。这些钥匙可以用于打开后续房间内的盒子上的挂锁。在迷宫终点的那个房间内存放着黄金。所有玩家需要合作开启各个房间中的盒子获得钥匙,以抵达迷宫终点。
开局每 2 2 2个玩家们进入一个房间,各自拥有 1 1 1把私有的钥匙,他们合作可以同时打开其中 1 1 1个盒子上的 2 2 2个挂锁,获得其中的钥匙。而其他的 3 3 3个盒子至多只能解开 1 1 1把挂锁,无法开启盒子。然后,他们经过走廊进入下一个房间,与另一伙人合作,打开此房间中的某一个盒子,获得里面的钥匙。然后继续前进,直到抵达终点房间,打开盒子获得黄金。
考虑一种简单的两方协议。给定一个函数 f ( x , y ) = v ∈ { 0 , 1 } f(x,y)=v \in \{0,1\} f(x,y)=v∈{0,1},其中 x , y ∈ { 0 , 1 } x,y \in \{0,1\} x,y∈{0,1}分别是Alice和Bob的私有数据。
Alice根据 f f f构造布尔电路 C C C,然后构造对应的混淆电路 G C GC GC:
Alice将上述的 G C GC GC发送给Bob,Bob在混淆电路上做运算:
明显的,所有线标签都是随机数,Bob解密尝试逻辑门上的 4 4 4个条目时,难以确定到底哪个条目是被正确解密的。为了区分,Lindell 等人提出了一种特殊的对称加密系统。
令 ( G , E , D ) (G,E,D) (G,E,D)是一个对称加密方案,定义关于密钥 k k k的密文范围
R a n g e n ( k ) : = { E k ( x ) } x ∈ { 0 , 1 } n Range_n(k) := \{E_k(x)\}_{x \in \{0,1\}^n} Rangen(k):={Ek(x)}x∈{0,1}n
那么,我们定义密码方案的两个特殊性质
不可捉摸密文范围(elusive range):对于任意的概率多项式时间的敌手 A A A,任意的多项式 p ( ⋅ ) p(\cdot) p(⋅),以及足够大的 n n n,有
P r k ← G ( 1 n ) [ A ( 1 n ) ∈ R a n g e n ( k ) ] < 1 p ( n ) Pr_{k \leftarrow G(1^n)}[A(1^n) \in Range_n(k)] < \dfrac{1}{p(n)} Prk←G(1n)[A(1n)∈Rangen(k)]<p(n)1
可有效验证密文范围(efficiently verifiable range):存在一个概率多项式时间的算法 M M M,满足
M ( 1 n , k , c ) = 1 ⟺ c ∈ R a n g e n ( k ) M(1^n,k,c) = 1 \iff c \in Range_n(k) M(1n,k,c)=1⟺c∈Rangen(k)
对于任意的 c ∉ R a n g e n ( k ) c \not \in Range_n(k) c∈Rangen(k),我们令 D k ( c ) = ⊥ D_k(c) = \perp Dk(c)=⊥
下面,我们给出满足上述性质的对称加密方案:令 f k : { 0 , 1 } n → { 0 , 1 } 2 n f_k: \{0,1\}^n \to \{0,1\}^{2n} fk:{0,1}n→{0,1}2n是一个带密钥 k ∈ { 0 , 1 } n k \in \{0,1\}^n k∈{0,1}n的伪随机函数(PRF),然后我们定义
容易看出,随机数 f k ( r ) f_k(r) fk(r)遮蔽了 x ∥ 0 n x\|0^n x∥0n,明文 x x x就隐藏在密文 s s s的前 n − b i t n-bit n−bit内。解密函数是正确锝的。可以验证它满足 elusive range,如果存在敌手 A A A,那么就可以区分 f k f_k fk和真随机函数 f r a n d f_{rand} frand(如果 A A A对于使用 f k f_k fk的 E k E_k Ek给出的 c = { r , s } ∈ R a n g e n ( k ) c=\{r,s\} \in Range_n(k) c={r,s}∈Rangen(k),因为 f k ( r ) f_k(r) fk(r)的后 n − b i t n-bit n−bit以 P r = 1 ≫ n e g l ( n ) Pr=1 \gg negl(n) Pr=1≫negl(n)的概率为 s [ n + 1 : 2 n ] s[n+1:2n] s[n+1:2n],那么就和使用 f r a n d f_{rand} frand的 E E E区分开了)。可以验证它满足 efficiently verifiable range,因为给定 { r , s } \{r,s\} {r,s}容易验证 f k ( r ) [ n + 1 : 2 n ] f_k(r)[n+1:2n] fk(r)[n+1:2n]是否等于 s [ n + 1 : 2 n ] s[n+1:2n] s[n+1:2n],从而确定是否有 c ∈ R a n g e n ( k ) c \in Range_n(k) c∈Rangen(k)。
利用上述的对称加密方案,可以容易的区分二重加密( double-encryption)下哪些密文被正确解密。
Lindell 等人证明:令 G , E , D G,E,D G,E,D是一个针对不均匀敌手的( in the presence of non-uniform adversaries)在选择明文攻击下不可区分密文的(indistinguishable encryptions under chosen plaintext attacks,IND-CPA)对称加密方案,那么它就是在二重加密下安全的(secure under chosen double encryption)。