文献:

  1. Yao A C. Protocols for secure computations[C]//23rd annual symposium on foundations of computer science (sfcs 1982). IEEE, 1982: 160-164.
  2. Yao A C C. How to generate and exchange secrets[C]//27th Annual Symposium on Foundations of Computer Science (sfcs 1986). IEEE, 1986: 162-167.
  3. Lindell Y, Pinkas B. A proof of security of Yao’s protocol for two-party computation[J]. Journal of cryptology, 2009, 22(2): 161-188.

文章目录

  • Millionaires’ Problem
    • 姚的百万富翁解决方案
    • 安全性
    • 一般的多方安全函数计算协议
  • Garbled Circuit
    • 设计思路
    • 构造
    • 区分正确解密的条目

Millionaires’ Problem

百万富翁问题由姚期智先生在1982年提出。

场景:两个百万富翁想要知道谁更富有,然而他们不想让对方知道自己的身家。更一般地,有mmm个人P1,⋯,PmP_1,\cdots,P_mP1​,⋯,Pm​想要计算一个整数值函数f(x1,⋯,xm)f(x_1,\cdots,x_m)f(x1​,⋯,xm​),其中xix_ixi​都是有界整数,且只有PiP_iPi​知道xix_ixi​的值,他们都不想泄露自己的秘密。

姚的百万富翁解决方案

  • 假定Alice财产为iii,Bob财产为jjj,并且有界1≤i,j≤101 \le i,j \le 101≤i,j≤10。令EaE_aEa​是Alice的公钥加密算法,DaD_aDa​是对应的公钥解密方案。
  • Alice和Bob执行如下方案:
    1. Bob生成N−bitN-bitN−bit随机数xxx,计算k=Ea(x)k = E_a(x)k=Ea​(x),发送 c=k−j+1c = k-j+1c=k−j+1 给Alice
    2. Alice计算一系列解密值:yu=Da(c+(u−1)=k−j+u),u=1,⋯,10y_u = D_a(c+(u-1) = k-j+u),\, u=1,\cdots,10yu​=Da​(c+(u−1)=k−j+u),u=1,⋯,10,易知yj=Da(k)=xy_j = D_a(k) = xyj​=Da​(k)=x
    3. 然后,Alice生成一个N/2−bitN/2-bitN/2−bit随机素数ppp,计算:zu=yumodpz_u = y_u \mod pzu​=yu​modp,保证所有的zuz_uzu​至少有222个不同(否则重新生成ppp)
    4. Alice将素数ppp和序列 [z1,z2,⋯,zi]∥[zi+1+1,zi+2+1,⋯,z10+1][z_1,z_2,\cdots,z_i] \| [z_{i+1}+1,z_{i+2}+1,\cdots,z_{10}+1][z1​,z2​,⋯,zi​]∥[zi+1​+1,zi+2​+1,⋯,z10​+1] 发送给Bob
    5. Bob检查序列的第jjj个位置:如果它等于xmodpx \mod pxmodp,那么j≤ij \le ij≤i;如果它等于x+1modpx+1 \mod px+1modp,那么j≥i+1j \ge i+1j≥i+1

安全性

除了知道最终的比较结果,

  1. Alice不知道Bob的秘密jjj的任何信息:只知道c=k−j+1c=k-j+1c=k−j+1,但k=Ea(x)k=E_a(x)k=Ea​(x)是随机数(否则Alice就猜对了xxx),因此j=1,⋯,10j=1,\cdots,10j=1,⋯,10等可能出现
  2. Bob不知道Alice的秘密iii的任何信息:只知道yj=xy_j=xyj​=x,而其他的yu=Da(k−j+u)y_u=D_a(k-j+u)yu​=Da​(k−j+u)都是随机数(否则Bob就破解了DaD_aDa​),因此无法区分其他的数是zuz_uzu​还是zu+1z_u+1zu​+1

一般的多方安全函数计算协议

mmm方参与者,函数f(x1,⋯,xm)f(x_1,\cdots,x_m)f(x1​,⋯,xm​),令K⊆{1,⋯,m}K \subseteq \{1,\cdots,m\}K⊆{1,⋯,m}是诚实者,令K′={1,⋯,m}−KK' = \{1,\cdots,m\} - KK′={1,⋯,m}−K是作弊者

姚证明了:对于任意的ϵ,δ,γ>0\epsilon,\delta,\gamma > 0ϵ,δ,γ>0,存在一个协议AAA可以计算函数fff,满足(ϵ,δ)−(\epsilon,\delta)-(ϵ,δ)−隐私约束(private constraint),并且对于任意的K′≠{1,⋯,m}K' \neq \{1,\cdots,m\}K′={1,⋯,m},K′K'K′可以成功欺骗(successful cheating)的概率至多为γ\gammaγ。

也就是说,存在一个MPC协议,即使有m−1m-1m−1个人串通,也不会成功诈欺那111个诚实者。当然,实际应用中要平衡安全性和计算效率。

Garbled Circuit

姚期智在1986年将百万富翁问题的解决方案扩展到任意的电路,提出了混淆电路(garbled circuit)的概念。但直到2004年才被 Lindell 等人具体地完全描述出来。

设计思路

有一个迷宫包含很多房间,每个房间都有222个进入的门和111个离开的门,房间之间由走廊进行连接。每个房间中放着444个盒子,每个盒子上都有222个挂锁,对应着444种钥匙,其中222种可以来自一个进入的门,另外222种钥匙可以来自另一扇进入的门。一个房间中有222种不同的钥匙,每种钥匙复制222把,在444盒子内各存放着111把钥匙。这些钥匙可以用于打开后续房间内的盒子上的挂锁。在迷宫终点的那个房间内存放着黄金。所有玩家需要合作开启各个房间中的盒子获得钥匙,以抵达迷宫终点。

开局每222个玩家们进入一个房间,各自拥有111把私有的钥匙,他们合作可以同时打开其中111个盒子上的222个挂锁,获得其中的钥匙。而其他的333个盒子至多只能解开111把挂锁,无法开启盒子。然后,他们经过走廊进入下一个房间,与另一伙人合作,打开此房间中的某一个盒子,获得里面的钥匙。然后继续前进,直到抵达终点房间,打开盒子获得黄金。

构造

考虑一种简单的两方协议。给定一个函数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根据fff构造布尔电路CCC,然后构造对应的混淆电路GCGCGC:

  1. CCC由若干逻辑门和输入输出线组成。假设CCC是无环图,将它的逻辑门进行拓扑排序,依次为逻辑门生成混淆电路。
  2. 电路输入线开始,假设逻辑门ggg有两根门输入线i,ji,ji,j和一根门输出线lll。
  3. 输入线iii上分配两个随机的标签ki0,ki1∈{0,1}nk_i^0,k_i^1 \in \{0,1\}^nki0​,ki1​∈{0,1}n,对应着逻辑值0、10、10、1;输入线jjj和输出线lll同理。
  4. 逻辑门ggg根据其真值表(含444个条目),使用每个条目的逻辑输入值对应的标签(比如ki0,kj1k_i^0,k_j^1ki0​,kj1​),来加密两次其逻辑输出值所对应的标签(比如kl1k_l^1kl1​,那么E(ki0,E(kj1,kl1))E(k_i^0,E(k_j^1,k_l^1))E(ki0​,E(kj1​,kl1​))),生成混淆真值表
  5. 将“线的标签”以及“门的混淆真值表”按照电路CCC组合起来,得到混淆电路GCGCGC,注意来自同一个门的多根线(扇出系数>1>1>1)的标签是相同的。
  6. 对于电路输出线ooo,标签ko0k_o^0ko0​对应逻辑值000,标签ko1k_o^1ko1​对应逻辑值111,当Bob计算完混淆电路得到其中一个标签后,Alice公布这个对应关系。
  7. 注意,其他线的标签与逻辑值的对应关系不应当被公布。否则,Bob将会获得电路内部的中间结果,从而泄露Alice的秘密。

Alice将上述的GCGCGC发送给Bob,Bob在混淆电路上做运算:

  1. Alice直接把自己的输入xxx对应的标签kixk_i^xkix​发送给Bob,而Bob无法区分这个标签对应的逻辑值是000还是111
  2. Bob通过不经意传输协议(OT)获得yyy对应的标签kjyk_j^ykjy​,同时OT协议保证了Alice无法获得yyy的信息,且Bob无法获得另一个标签kj1−yk_j^{1-y}kj1−y​的信息。
  3. Bob获得全部的电路输入线的标签后,开始按照逻辑门的拓扑排序,依次尝试解密逻辑门ggg上的444个条目。由于Bob只拥有每根门输入线上的一个标签,因此他至多成功解密其中的一个条目,获得逻辑门输出值对应的标签。
  4. 然后Bob继续解密其他逻辑门的混淆真值表,直到获得电路输出线ooo上的标签kovk_o^vkov​,然后Bob公布计算结果。
  5. Alice公布对应关系{ko0:0,ko1:1}\{k_o^0:0,k_o^1:1\}{ko0​:0,ko1​:1},他们完成了v=f(x,y)v = f(x,y)v=f(x,y)的计算。

区分正确解密的条目

明显的,所有线标签都是随机数,Bob解密尝试逻辑门上的444个条目时,难以确定到底哪个条目是被正确解密的。为了区分,Lindell 等人提出了一种特殊的对称加密系统。

令(G,E,D)(G,E,D)(G,E,D)是一个对称加密方案,定义关于密钥kkk的密文范围
Rangen(k):={Ek(x)}x∈{0,1}nRange_n(k) := \{E_k(x)\}_{x \in \{0,1\}^n} Rangen​(k):={Ek​(x)}x∈{0,1}n​
那么,我们定义密码方案的两个特殊性质

  1. 不可捉摸密文范围(elusive range):对于任意的概率多项式时间的敌手AAA,任意的多项式p(⋅)p(\cdot)p(⋅),以及足够大的nnn,有
    Prk←G(1n)[A(1n)∈Rangen(k)]<1p(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​

  2. 可有效验证密文范围(efficiently verifiable range):存在一个概率多项式时间的算法MMM,满足
    M(1n,k,c)=1⟺c∈Rangen(k)M(1^n,k,c) = 1 \iff c \in Range_n(k) M(1n,k,c)=1⟺c∈Rangen​(k)

对于任意的c∉Rangen(k)c \not \in Range_n(k)c∈Rangen​(k),我们令Dk(c)=⊥D_k(c) = \perpDk​(c)=⊥

下面,我们给出满足上述性质的对称加密方案:令fk:{0,1}n→{0,1}2nf_k: \{0,1\}^n \to \{0,1\}^{2n}fk​:{0,1}n→{0,1}2n是一个带密钥k∈{0,1}nk \in \{0,1\}^nk∈{0,1}n的伪随机函数(PRF),然后我们定义

  • 加密:Ek(x)={r,fk(r)⊕x∥0n}E_k(x) = \{r,f_k(r) \oplus x\|0^n\}Ek​(x)={r,fk​(r)⊕x∥0n}
  • 解密:Dk({r,s})={fk(r)⊕s}[1:n]D_k(\{r,s\}) = \{f_k(r) \oplus s\}[1:n]Dk​({r,s})={fk​(r)⊕s}[1:n]

容易看出,随机数fk(r)f_k(r)fk​(r)遮蔽了x∥0nx\|0^nx∥0n,明文xxx就隐藏在密文sss的前n−bitn-bitn−bit内。解密函数是正确锝的。可以验证它满足 elusive range,如果存在敌手AAA,那么就可以区分fkf_kfk​和真随机函数frandf_{rand}frand​(如果AAA对于使用fkf_kfk​的EkE_kEk​给出的c={r,s}∈Rangen(k)c=\{r,s\} \in Range_n(k)c={r,s}∈Rangen​(k),因为fk(r)f_k(r)fk​(r)的后n−bitn-bitn−bit以Pr=1≫negl(n)Pr=1 \gg negl(n)Pr=1≫negl(n)的概率为s[n+1:2n]s[n+1:2n]s[n+1:2n],那么就和使用frandf_{rand}frand​的EEE区分开了)。可以验证它满足 efficiently verifiable range,因为给定{r,s}\{r,s\}{r,s}容易验证fk(r)[n+1:2n]f_k(r)[n+1:2n]fk​(r)[n+1:2n]是否等于s[n+1:2n]s[n+1:2n]s[n+1:2n],从而确定是否有c∈Rangen(k)c \in Range_n(k)c∈Rangen​(k)。

利用上述的对称加密方案,可以容易的区分二重加密( double-encryption)下哪些密文被正确解密。

Lindell 等人证明:令G,E,DG,E,DG,E,D是一个针对不均匀敌手的( in the presence of non-uniform adversaries)在选择明文攻击下不可区分密文的(indistinguishable encryptions under chosen plaintext attacks,IND-CPA)对称加密方案,那么它就是在二重加密下安全的(secure under chosen double encryption)。

百万富翁 混淆电路相关推荐

  1. 姚氏百万富翁 混淆电路_姚氏混淆电路原理简介

    安全多方计算(Secure Multi-Party Computation ,MPC)技术主要是指,多个通信的参与者在保障通信和计算过程的正确性.隐私性.公平性等安全特征的基础上,联合进行某些功能函数 ...

  2. 隐私计算:使用混淆电路开源框架Obliv-C解决百万富翁难题

    "假设有两个百万富翁,他们都想知道谁更富有,但他们都想保护好自己的隐私,谁都不愿意让对方或者任何第三方知道自己真正拥有多少财富.那么如何在保护好双方隐私的情况下,计算出谁更有钱呢?" ...

  3. 混淆电路——混淆电路原理

    混淆电路原理 在我们前两章讲过混淆电路的基础知识--不经意传输&转换逻辑电路以后,我们就可以将这两种技术合并在一起,用作我们的混淆电路的设置. 我们还是以百万富翁问题为例,在上一章我们已经将比 ...

  4. 混淆电路简介(GC)

    混淆电路简介 混淆电路的定义 混淆电路的过程 混淆电路的定义   混淆电路是一种密码学协议,由姚期智教授在80年代针对安全计算所提出的概念.其效果就是:当几个通信方需要一起输入某些数据,然后通过同一个 ...

  5. MPC系列-混淆电路

    混淆电路:混淆电路是一种密码学协议,完成参与方能在互相不知晓对方数据的情况下计算某一能 被逻辑电路表示的函数.通过对电路进行加密来掩盖电路的输入和电路的结构,以此来实现对各个参与者的隐私信息的保密,再 ...

  6. 安全多方计算——Yao‘s 混淆电路

    Yao's混淆电路 姚期智院士提出的首个安全多方计算方案,该方案可以计算任意可以转换成电路的函数f(x),属于安全双方计算方案.安全思想:一个人加密整个电路的输入输出,另一个人盲算,这样就导致信息不对 ...

  7. 【密码学基础】混淆电路(Garbled Circuit)

    1 概念 混淆电路是一种密码学协议,以实现安全多方计算(MPC).场景是当多个通信方需要共同输入数据,然后通过同一个函数计算出一个结果,但是,各个通信方都不允许其他人知道自己的输入是什么.混淆电路就能 ...

  8. 一文看懂MPC百万富翁问题的两种解法:CG+OT不经意传输解法或者RSA密码学解法

    MPC的数学描述: 有n个参与者P1,P2,-Pn,要以一种安全的方式共同计算一个函数,这里的安全是指输出结果的正确性和输入信息.输出信息的保密性.具体地讲,每个参与者P1,有一个自己的保密输入信息X ...

  9. 荐读 | 姚期智40年前提出,“百万富翁”设想走进现实:这项隐私计算技术,将是下一个产业热点?...

    两个百万富翁在街上相遇,他们都想知道谁更富有,但又不愿意让对方知道自己拥有的真正财富.如何在没有第三方的情况下,让对方知道谁更有钱? 这是姚期智院士在 1982 年提出的"百万富翁" ...

  10. 清华姚班系初创公司获B轮融资5亿,姚期智「百万富翁」设想已从理论走向应用...

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 背靠清华姚班的科研成果,能孵化出来一家怎样的公司? 华控清交在最近给出了答案: 5亿元B轮融资已完成. 此轮融资由联想创投.中关村科学城持续 ...

最新文章

  1. c语言的考试是操作电脑还是写试卷,C语言考试试卷都是基础的题目,由于本人没学过C语言,求各位帮忙, 爱问知识人...
  2. 【JSON】数据格式
  3. JSP脚本 9大内置对象
  4. JUC队列-ArrayBlockingQueue(一)
  5. python学习第十八天 --文件操作
  6. 许愿墙|爱墙 js代码
  7. 点可云ERP-V7.0-国产免费开源的ERP进销存系统 附带安装详细教程
  8. 腾讯软件测试笔试题西安,腾讯软件测试笔试题题库
  9. 外网无法访问nginx服务器默认端口问题解决
  10. 五分钟学GIS | 倾斜摄影技术
  11. 笔记本安装windows系统全流程(附上遇到常见问题解决办法)
  12. R语言多重比较示例:Bonferroni校正法和Benjamini Hochberg法
  13. 洞察各站点热销产品靠什么?东南亚虾皮shopee数据分析
  14. 计算机应用专业可以考哪些证,计算机应用技术专业学生需要考取哪些证书?
  15. php模板引擎 smarty笔记
  16. 生产者消费者问题的C语言实现
  17. (仿牛客论坛项目)01 - 开发社区首页
  18. 关于使用多普达windows mobile 手机使用联通卡不能上网的问题
  19. 苹果cms模板_苹果cmsv10对seo友好模板有哪些?
  20. 服务器维护和更新迷失的始祖龙,关于迷失始祖幼龙真正了解的有几个

热门文章

  1. was cached in the local repository, resolution will not be reattempted until(Maven常见问题)
  2. 电子科技大学生物信息学 重点
  3. Android的一个登陆注册页面
  4. Python 第六章 面向对象编程(MD模式)
  5. html里面超链接alt_怎样用HTML代码在图片插入超链接
  6. 2021年中国石油市场回顾及2022年行业发展趋势分析预测:2021年石油需求震荡修复,石油对外依存度首次下降,预计2022年石油需求7.35亿吨[图]
  7. java word书签_JAVA 创建移除Word书签
  8. 地址规范化--城市三级联动(layui) (B)
  9. 18位身份证校验代码
  10. [初学笔记] tic toc 计算程序运行时间