混淆电路——转换逻辑电路

转换逻辑电路

遵照这个混淆电路的定义,双方能在互相不知晓对方数据的情况下计算某一函数。混淆电路要求这一函数能被逻辑电路表示,所以如何将要求函数转化为一个逻辑电路是关键的一步。

我们不妨以著名的百万富翁问题为例。在这个问题中,两个富翁Alice和Bob想在不知道对方财富值的情况下计算谁的财富值更高,所以他们需要求解的函数是比较大小,我们尝试将这一函数转化为电路。

逻辑电路

我们不妨认为Alex和Bob的财富是用二进制表示的一个整数 a n a n − 1 ⋯ a 1 a_na_{n-1}\cdots a_1 anan1a1 b n b n − 1 ⋯ b 1 b_nb_{n-1}\cdots b_1 bnbn1b1,其中 a i , b i ∈ { 0 , 1 } a_i,b_i\in\{0,1\} ai,bi{0,1}。我们可以用归纳法来判断它们的大小。
我们定义变量 c i = { 1 , a i a i − 1 ⋯ a 1 > b i b i − 1 ⋯ b 1 0 , a i a i − 1 ⋯ a 1 ≤ b i b i − 1 ⋯ b 1 c_i=\begin{cases}1,&a_ia_{i-1}\cdots a_1>b_ib_{i-1}\cdots b_1\\0,&a_ia_{i-1}\cdots a_1\leq b_ib_{i-1}\cdots b_1\end{cases} ci={1,0,aiai1a1>bibi1b1aiai1a1bibi1b1
以及其初始值 c 1 = 0 c_1=0 c1=0 。在已知 a i , b i , c i a_i,b_i,c_i ai,bi,ci的情况下, c i + 1 c_{i+1} ci+1可以做如下推导。 c i + 1 = 1 ⇔ ( a i > b i )   o r   ( a i = b i   a n d   c i = 0 ) c_{i+1}=1\Leftrightarrow(a_i>b_i)\ or\ (a_i=b_i\ and\ c_i =0) ci+1=1(ai>bi) or (ai=bi and ci=0),可以转化成以下逻辑电路。
在这里插入图片描述
我们将上述电路封装成一个三个输入( a i , b i , c i a_i,b_i,c_i ai,bi,ci)一个输出( c i + 1 c_{i+1} ci+1)的模块> 。我们将 n n n个这样的模块串联起来,就完成了判断 a i a i − 1 ⋯ a 1 > b i b i − 1 ⋯ b 1 a_ia_{i-1}\cdots a_1>b_ib_{i-1}\cdots b_1 aiai1a1>bibi1b1的电路。
在这个电路中, c n + 1 c_{n+1} cn+1为整个电路的输出。当输出是1时, a i a i − 1 ⋯ a 1 > b i b i − 1 ⋯ b 1 a_ia_{i-1}\cdots a_1>b_ib_{i-1}\cdots b_1 aiai1a1>bibi1b1成立。

总结

我们在这里成功地将一个比较大小的函数转化成了一个逻辑电路,但仅仅有电路还不够解决百万富翁问题。因为电路中每一根线的值都是明文的,所以Alice和Bob都能知道对方的财富值。
结合逻辑电路和之前提到的不经意传输,我们就可以得到混淆电路,并提供百万富翁问题 的一种解法。

附录

正文中提到的电路用到了多处取反,并不是最优的。通过观察,我们不难发现 c i + 1 = a i ⊕ [ ( a i ⊕ c i ) ∧ ( b i ⊕ c i ) ] c_{i+1}=a_i\oplus[(a_i\oplus c_i)\wedge(b_i\oplus c_i)] ci+1=ai[(aici)(bici)]
所以我们可以将电路简化为:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值