百万富翁 混淆电路
文献:
- Yao A C. Protocols for secure computations[C]//23rd annual symposium on foundations of computer science (sfcs 1982). IEEE, 1982: 160-164.
- 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.
- 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执行如下方案:
- 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
- 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
- 然后,Alice生成一个N/2−bitN/2-bitN/2−bit随机素数ppp,计算:zu=yumodpz_u = y_u \mod pzu=yumodp,保证所有的zuz_uzu至少有222个不同(否则重新生成ppp)
- 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
- Bob检查序列的第jjj个位置:如果它等于xmodpx \mod pxmodp,那么j≤ij \le ij≤i;如果它等于x+1modpx+1 \mod px+1modp,那么j≥i+1j \ge i+1j≥i+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等可能出现
- 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:
- CCC由若干逻辑门和输入输出线组成。假设CCC是无环图,将它的逻辑门进行拓扑排序,依次为逻辑门生成混淆电路。
- 从电路输入线开始,假设逻辑门ggg有两根门输入线i,ji,ji,j和一根门输出线lll。
- 输入线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同理。
- 逻辑门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))),生成混淆真值表。
- 将“线的标签”以及“门的混淆真值表”按照电路CCC组合起来,得到混淆电路GCGCGC,注意来自同一个门的多根线(扇出系数>1>1>1)的标签是相同的。
- 对于电路输出线ooo,标签ko0k_o^0ko0对应逻辑值000,标签ko1k_o^1ko1对应逻辑值111,当Bob计算完混淆电路得到其中一个标签后,Alice公布这个对应关系。
- 注意,其他线的标签与逻辑值的对应关系不应当被公布。否则,Bob将会获得电路内部的中间结果,从而泄露Alice的秘密。
Alice将上述的GCGCGC发送给Bob,Bob在混淆电路上做运算:
- Alice直接把自己的输入xxx对应的标签kixk_i^xkix发送给Bob,而Bob无法区分这个标签对应的逻辑值是000还是111
- Bob通过不经意传输协议(OT)获得yyy对应的标签kjyk_j^ykjy,同时OT协议保证了Alice无法获得yyy的信息,且Bob无法获得另一个标签kj1−yk_j^{1-y}kj1−y的信息。
- Bob获得全部的电路输入线的标签后,开始按照逻辑门的拓扑排序,依次尝试解密逻辑门ggg上的444个条目。由于Bob只拥有每根门输入线上的一个标签,因此他至多成功解密其中的一个条目,获得逻辑门输出值对应的标签。
- 然后Bob继续解密其他逻辑门的混淆真值表,直到获得电路输出线ooo上的标签kovk_o^vkov,然后Bob公布计算结果。
- 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
那么,我们定义密码方案的两个特殊性质
不可捉摸密文范围(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可有效验证密文范围(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)。
百万富翁 混淆电路相关推荐
- 姚氏百万富翁 混淆电路_姚氏混淆电路原理简介
安全多方计算(Secure Multi-Party Computation ,MPC)技术主要是指,多个通信的参与者在保障通信和计算过程的正确性.隐私性.公平性等安全特征的基础上,联合进行某些功能函数 ...
- 隐私计算:使用混淆电路开源框架Obliv-C解决百万富翁难题
"假设有两个百万富翁,他们都想知道谁更富有,但他们都想保护好自己的隐私,谁都不愿意让对方或者任何第三方知道自己真正拥有多少财富.那么如何在保护好双方隐私的情况下,计算出谁更有钱呢?" ...
- 混淆电路——混淆电路原理
混淆电路原理 在我们前两章讲过混淆电路的基础知识--不经意传输&转换逻辑电路以后,我们就可以将这两种技术合并在一起,用作我们的混淆电路的设置. 我们还是以百万富翁问题为例,在上一章我们已经将比 ...
- 混淆电路简介(GC)
混淆电路简介 混淆电路的定义 混淆电路的过程 混淆电路的定义 混淆电路是一种密码学协议,由姚期智教授在80年代针对安全计算所提出的概念.其效果就是:当几个通信方需要一起输入某些数据,然后通过同一个 ...
- MPC系列-混淆电路
混淆电路:混淆电路是一种密码学协议,完成参与方能在互相不知晓对方数据的情况下计算某一能 被逻辑电路表示的函数.通过对电路进行加密来掩盖电路的输入和电路的结构,以此来实现对各个参与者的隐私信息的保密,再 ...
- 安全多方计算——Yao‘s 混淆电路
Yao's混淆电路 姚期智院士提出的首个安全多方计算方案,该方案可以计算任意可以转换成电路的函数f(x),属于安全双方计算方案.安全思想:一个人加密整个电路的输入输出,另一个人盲算,这样就导致信息不对 ...
- 【密码学基础】混淆电路(Garbled Circuit)
1 概念 混淆电路是一种密码学协议,以实现安全多方计算(MPC).场景是当多个通信方需要共同输入数据,然后通过同一个函数计算出一个结果,但是,各个通信方都不允许其他人知道自己的输入是什么.混淆电路就能 ...
- 一文看懂MPC百万富翁问题的两种解法:CG+OT不经意传输解法或者RSA密码学解法
MPC的数学描述: 有n个参与者P1,P2,-Pn,要以一种安全的方式共同计算一个函数,这里的安全是指输出结果的正确性和输入信息.输出信息的保密性.具体地讲,每个参与者P1,有一个自己的保密输入信息X ...
- 荐读 | 姚期智40年前提出,“百万富翁”设想走进现实:这项隐私计算技术,将是下一个产业热点?...
两个百万富翁在街上相遇,他们都想知道谁更富有,但又不愿意让对方知道自己拥有的真正财富.如何在没有第三方的情况下,让对方知道谁更有钱? 这是姚期智院士在 1982 年提出的"百万富翁" ...
- 清华姚班系初创公司获B轮融资5亿,姚期智「百万富翁」设想已从理论走向应用...
博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 背靠清华姚班的科研成果,能孵化出来一家怎样的公司? 华控清交在最近给出了答案: 5亿元B轮融资已完成. 此轮融资由联想创投.中关村科学城持续 ...
最新文章
- c语言的考试是操作电脑还是写试卷,C语言考试试卷都是基础的题目,由于本人没学过C语言,求各位帮忙, 爱问知识人...
- 【JSON】数据格式
- JSP脚本 9大内置对象
- JUC队列-ArrayBlockingQueue(一)
- python学习第十八天 --文件操作
- 许愿墙|爱墙 js代码
- 点可云ERP-V7.0-国产免费开源的ERP进销存系统 附带安装详细教程
- 腾讯软件测试笔试题西安,腾讯软件测试笔试题题库
- 外网无法访问nginx服务器默认端口问题解决
- 五分钟学GIS | 倾斜摄影技术
- 笔记本安装windows系统全流程(附上遇到常见问题解决办法)
- R语言多重比较示例:Bonferroni校正法和Benjamini Hochberg法
- 洞察各站点热销产品靠什么?东南亚虾皮shopee数据分析
- 计算机应用专业可以考哪些证,计算机应用技术专业学生需要考取哪些证书?
- php模板引擎 smarty笔记
- 生产者消费者问题的C语言实现
- (仿牛客论坛项目)01 - 开发社区首页
- 关于使用多普达windows mobile 手机使用联通卡不能上网的问题
- 苹果cms模板_苹果cmsv10对seo友好模板有哪些?
- 服务器维护和更新迷失的始祖龙,关于迷失始祖幼龙真正了解的有几个
热门文章
- was cached in the local repository, resolution will not be reattempted until(Maven常见问题)
- 电子科技大学生物信息学 重点
- Android的一个登陆注册页面
- Python 第六章 面向对象编程(MD模式)
- html里面超链接alt_怎样用HTML代码在图片插入超链接
- 2021年中国石油市场回顾及2022年行业发展趋势分析预测:2021年石油需求震荡修复,石油对外依存度首次下降,预计2022年石油需求7.35亿吨[图]
- java word书签_JAVA 创建移除Word书签
- 地址规范化--城市三级联动(layui) (B)
- 18位身份证校验代码
- [初学笔记] tic toc 计算程序运行时间