文章插图
- 第一步,Alice密钥生成:对输入和输出的每个值都生成对应的密钥,在交互过程中使用该密钥替换真实值进行传输,从而避免真实数据的泄露 。
文章插图
- 第二步,Alice进行电路加密(就是替换):对原始真值表真实的输入和输出数据进行替换得到加密版本:
文章插图
- 第三步,Alice将输出的密文发送给Bob:Alice将第二步得到密文\(E_{k_{aj},k_{bi}}(k_{rt})\)打乱数据【混淆】之后发送给Bob,同时告知Bob\(k_{aj},k_{bi}\)的信息,让Bob解密 。其中\(k_{aj}\)对应Alice的输入数据\(a\),\(k_{bi}\)对应于Bob的输入数据 , 但由于Alice不知道Bob的真实输入数据,便无法确定应该向Bob提供\(k_{b0}\)还是\(k_{b1}\),这是便可以使用OT , 既能保证Bob根据自己的输入数据\(b\)的编号\(i\)对应的\(k_bi\) , 又能保证Bob只能获得\(k_{b0}\)和\(k_{b1}\)中的一个 。
- 第四步,Bob解密:Bob使用Alice提供的\(k_{aj}\)和OT协议选出的\(k_{bi}\)对四个密文解密,其中只有密文是\(E_{k_{aj},k_{bi}}(k_{rt})\)时才能正确解密,否则得到的是乱码 。然后Bob将解密结果发给Alice , Alice得到正确结果\(r=0\)或者\(r=1\) , 并同步给Bob 。
?:SSSS的应用在MPC中,主要是利用其同态特性进行函数计算,下面介绍使用SS构造实现加法和乘法运算:
- 整个过程 , Alice没有告诉Bob关于\(k_{aj}\)对应的真实值,Bob通过OT得到了\(k_{bi}\),也没有泄露信息,所以双方在均未泄漏数据的前提下完成了“与门”计算
加法假设某公司的 3 个员工分别为 \(P_1, P_{2}, P_{3}\),3 人希望在不泄露自己真实工资的情况下, 计算3人的平均工资 。
从本质上来讲, 这个问题可以抽象为多方之间的求和问题 , 我们在此介绍一下使用秘密分享进行求和的思想 。
假设员工\(P_{1}, P_{2}, P_{3}\) 的工资分别为\(x, y, z\) , 为了计算\(r=(x+y+z) / 3\),可以采取以下两个步骤:
- 秘密分享阶段 。每个员工将自己的输入信息 (即工资) 切分成3份, 并分发给另外两个同事; 在分发完成之后, 员工$ P_{i}$ 拥有 3 个值, 分别为$x_{i}, y_{i}, z_{i}$ 。
- 秘密重构阶段 。每个员工分别在本地计算 $ r_{i}=\left(x_{i}+y_{i}+z_{i}\right) / 3$,最终三个 员工再将自己的结果 $r_{i} $进行公开, 3 人的平均工资则为 $ r=r_{1}+r_{2}+r_{3}$。
乘法假设员工\(P_{1}, P_{2}, P_{3}\) 的工资分别为\(x, y, z\),为了计算\(r=xyz\)。
而对于乘法计算,就比较复杂了 , 因为乘法会涉及交叉项,例如\(xy=(x_1+x_2)(y_1+y_2)=x_1y_1+x_1y_2+x_2y_1+x_1y_2\),其中直接计算\(x_1y_2,x_2y_1\)是非常麻烦的【因为信息属于两个人】,这时就需要引入一些辅助信息:
- 三元组生成和分发 , 即\(P_1\)有\(a_1,b_1,c_1\),\(P_2\)有\(a_2,b_2,c_2\),\(P_3\)有\(a_3,b_3,c_3\) 。
其中\(c=ab\) 。
- 密秘分发,即将\(x,y\)分发,得到以下结果:
文章插图
- 秘密重构
(2)计算\(xy=(x-a+a)(y-b+b)=(m a+a)(m b+b)=m a \cdot m b+m a \cdot b+m b \cdot a+c\),可以看出将\(xy\)问题转化为三个乘法问题和加法问题,其中\(ma,mb\)已经得到,因此只需各方计算出\(ma.b+mb.a+c\)的碎片即可:
文章插图
(3)然后将\(ma.b+mb.a+c\)与\(ma.mb\)相加 , 便可以得到\(xy\),进而通过这种方法求出\(xyz\) 。
?:
- SS的乘法需要使用辅助信息三元组,在加法和乘法基础上,可以组合出更加复杂的运算,构造出更加完整、通用的MPC协议 。
- GC构造的MPC更适合于逻辑运算或数字的比较运算,比如百万富翁问题 。
推荐阅读
- SimpleDateFormat线程安全问题排查
- 解决 net core 3.x 跨域问题
- 一个超经典 WinForm 卡死问题的再反思
- 事业单位薪级工资的问题 事业单位薪级工资标准表
- 永久解决Ubuntu下adb权限问题
- go:快速添加接口方法及其实现
- 重新整理 .net core 实践篇 ———— linux上排查问题实用工具 [外篇]
- predator-prey model OpenFOAM 编程 | 求解捕食者与被捕食者模型问题(ODEs)
- Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题
- 2048常见问题2048游戏怎么玩(2048游戏怎么玩到高分)