学习文章:“一起学MPC:(一)百万富翁问题”和“【隐私计算笔谈】MPC系列专题(一):安全多方计算应用场景一览

百万富翁问题

将问题具体化:

Alice有\(i\)亿元,Bob有\(j\)亿元,为方便描述,我们限定\(0<i, j \leq 10\)。现在想在不暴露和的情况下,比较\(i\)和\(j\)的大小。

解决思路

第二步:Bob把第\(j\)个箱子上的编号撕掉,并将其他箱子都销毁掉,把这个没有编号的箱子发给Alice

以上是解决百万富翁问题的思路之一,但是建立在双方都是诚实的或者半诚实的前提下,即双方不会恶意的输入或者输出错误值扰乱协议的正确执行,也就是说可以保证Bob不会选择错误的箱子或者将错误的箱子发送给Alice,但是无法保证Bob能克制住自己的好奇心,将其他的箱子都销毁掉,因为即使Bob不销毁其他的箱子,协议也能正常执行,符合一个半诚实参与方的要求。

在实际应用中,双方使用密码协议实现这些理想的限制条件,即即使是半诚实的参与方,协议也不会泄露隐私。比如OT可以保证Bob只能选一个箱子,而不能获取其他箱子的内容,同时Alice也无法得知Bob选的是哪个箱子

下面给出其他的方式解决以上问题

OT

对于百万富翁问题存在的隐患,即确认Bob是否会将其与的箱子销毁是一个很难解决的问题。OT可以解决该问题,可以避免Bob未按照协议销毁其他箱子而产生的安全问题。

直观上看,OT协议只能保证Bob从Alice准备的10个箱子中选择一个,而得不到其他箱子(其他信息),同时还能保证Alice不知道Bob选择了哪个箱子。

所以这里符合\((1-n)\)OT,即\(n\)取\(1\),下面用一个例子介绍方案的思想:

  • Alice在锁上箱子前,Bob先利用所需箱子的编号\(j\)构造一把“复杂”的组合钥匙(可以看做\(OPRF(j)\)),将其发送给Alice;

  • Alice拿到组合钥匙后,通过一种黑盒的方式对组合锁进行改造,生成10把不同的新锁,并分别对10个箱子进行上锁;【新锁的特性是只有编号为\(j\)的箱子上的新锁可以用Bob的组合钥匙打开,其余箱子上的新锁无法被打开】;

  • Bob只能打开编号为\(j\)的箱子,而Alice并不能根据组合钥匙分析出编号\(j\)。

换成具体协议\((1-n)-OT\)表示:

  • 双方协商出公参数:\(g,h\),都是\(q\)阶循环群\(G_q\)中的元素
  • Alice输入\(n\)个消息\(m_1,...,m_n\in G_q\),同时Bob确定选择的消息编号\(t\)
  • Bob选择随机数\(r\),计算\(y=g^rh^t\),并将其发送给Alice
  • Alice选择一组随机数\(k_i\),计算\(n\)组消息:\((a_i,b_i)\),并发送给Bob,其中\(a_i=g^{k_i},b_i=m_i*(\frac{y}{h_i})^{k_i}\)
  • Bob计算出\(m_t=\frac{b_t}{a_t^r}\)

️:

  • 其中\(y\)就是组合钥匙,\((a_i,b_i)\)就是新锁
  • 通过OT协议可以实现Bob只能获取编号为\(j\)的箱子,对其他的箱子一无所知,且Alice也不知道Bob选择的哪个箱子,这样其他箱子销毁与否无关紧要,从而避免了以上说的安全问题。

GC

混淆电路是姚针对百万富翁问题在1986年提出的一种解决方案,同时也验证了安全多方计算的可行性,即百万富翁问题就是MPC的一个简单例子,即参与方在不泄漏自身数据的情况下完成某种计算,下面介绍利用混淆电路实现该功能

混淆电流的思路是将双方需要计算的函数转换为“加密电路”,其中“加密电路”可以保证双方在不泄漏各自输入信息的情况下,正确的计算函数的结果。

混淆电路的核心就是“加密电路”设计,这是研究重点和难点,由于任意函数理论上都存在一个等价的电路表示,在计算机中可以使用加法器和乘法器实现,而乘法器/加法器可以通过“与门”、”异或门“等逻辑电路来表示。

下面介绍一种”与门“函数实现加密电路:

假设在安全两方计算中,参与方A和B要计算”与门“的门电路,即两者输入分别是\(a,b\),输出是\(r=a(and)b\):

  • 下表是“与门”真值表

  • 第一步,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。

️:

  • 整个过程,Alice没有告诉Bob关于\(k_{aj}\)对应的真实值,Bob通过OT得到了\(k_{bi}\),也没有泄露信息,所以双方在均未泄漏数据的前提下完成了“与门”计算

SS

SS的应用在MPC中,主要是利用其同态特性进行函数计算,下面介绍使用SS构造实现加法和乘法运算:

加法

假设某公司的 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}$ 。

在以上两个步骤中, 每个员工都只得到了同事工资的部分信息, 并不能恢复其真实工资。另外, 根据最终公布的结果$ r_{i}$ 也无法直接推断出\(x_{i}, y_{i}, z_{i}\) 三个碎片信 息。因此,该方法便使用秘密分享的思想,在保护了各个参与方输入信息的前提下完成均值计算。

乘法

假设员工\(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\)。

\(\begin{array}{l} a=a_{1}+a_{2}+a_{3} \\ b=b_{1}+b_{2}+b_{3} \\ c=c_{1}+c_{2}+c_{3} \end{array}\)

其中\(c=ab\)。

  • 密秘分发,即将\(x,y\)分发,得到以下结果:

  • 秘密重构

(1)借助辅助信息,先计算出:\(ma=x-a,mb=y-b\),即利用上述加法特性,以\(x-a\)为例:三方共享计算\(x_1-a_1,x_2-a_2,x_3-a_3\),然后得到\(x-a\)

(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更适合于逻辑运算或数字的比较运算,比如百万富翁问题。
  • SS构造的MPC更适用于算术运算。

姚期智院士在提出“百万富翁问题”的同时,给出了三种解决办法【OT、GC、SS?】,并讨论了在秘密投票(Secret Vote不经意协商(Oblivious Negotiation隐私查询数据库(Private Querying of Database的应用。

之后 Goldreich 在1987年对安全多方计算(Secure Multi-Party Computation进行了讨论,提出了可以计算任意函数的计算意义下安全的安全多方计算协议。Goldreich 还从理论上证明了可以通过通用电路(Universal Circuit估值来实现所有的安全多方计算协议。其后于1988年,Goldreich 对安全多方计算进行了总结和安全性定义。

之后在 1989 年,Beaver 等人研究了信息论安全模型下的安全多方科学计算问题,提出了可以实现信息论安全的,复杂程度为常数轮的安全多方算数运算协议。

应用

安全多方计算兼具理论研究和实际应用价值,在电子投票、隐私保护的数据挖掘、机器学习、区块链、生物数据比较、云计算等领域有着广泛的应用前景。

  • 电子投票

现实生活中的投票选举通过统一采用空白选票、投票箱、有公信力的计票人以及全程录像直播等方式来确保公平公正。而在电子投票领域,投票人在家投票时,家中的计算机可能已被感染病毒,投票结果可能被恶意获取篡改等,因此电子投票系统必须保证投票人知道自己的投票信息是否被正确提交,是否被恶意攻击者篡改,同时要保护投票人的投票信息不被除了计票人外的其他人获取。安全多方计算为这种分布式环境下如何进行保护隐私信息和确保结果正确性的问题提供了良好解决方案。

Cramer 等人基于 ElGamal 门限加密技术和零知识证明提出了首个多选一电子投票方案,之后 Damgard 等人基于 Pailier 同态加密技术提出了多选多的电子投票方案。在1992年,A.Fujioka 等使用盲签名技术提出了著名的 FOO 电子投票协议

  • 数据挖掘

数据挖掘作为一个非常有效的数据分析工具,可以发现数据中隐含的规律,对科学和政策研究、商务决策等方面有着重要应用。然而被挖掘的数据中往往都有着大量敏感性的信息,因此必须受到保护,在隐私保护下进行数据挖掘。

在多方情况下进行数据挖掘时,参与者往往不愿意共享数据,只愿意共享数据挖掘的结果,这种情况在科学和医学研究等方面非常常见,如各个医疗机构的病人信息是敏感信息,不会愿意透露。应用安全多方计算可以在保护各方数据信息不被泄露的同时多方协作完成数据挖掘

  • 模型训练

机器学习已被应用到各个领域,引发了大量变革,如图像和语音识别、异常检测等。而在机器学习想要取得好的效果,需要大量数据进行模型训练,训练数据的隐私保护同样是问题,在多个机构合作进行模型训练时,数据分布在不同参与者处,安全多方计算可以在保护敏感数据的隐私性的同时让各个机构成功进行模型训练。

总之,当各个参与者处于分布式环境下,又有数据隐私保护的要求时,十分适合应用安全多方计算来解决问题。

参考

1、联邦学习-技术及实践

MPC:百万富翁问题的更多相关文章

  1. GCC 源码编译 mpc mprf gmp 不用make(否则会有lib/libgmp.so: could not read symbols: File in wrong format等错误)

    错误信息: lib/libgmp.so: could not read symbols: File in wrong formatcollect2: error: ld returned 1 exit ...

  2. vlc/ffmepg/mplayer/gstreamer/openmax/mpc/ffdshow/directshow

    一些应该学习的开源框架与库用途和差别 一.播放器层次 这个层次上,是直接可以用的软件,已经做完了一切工作,如果我们需要用他们,是不需要写一行代码的,编译通过就可以拿来使用了,对于国内这些山寨公司来说, ...

  3. gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0

    从svn checkout svn://gcc.gnu.org/svn/gcc/trunk拿了GCC的最新代码,打算编译了学东西习学习C++ 11的东西,结果在configure的时候出现例如以下问题 ...

  4. MATLAB模型预测控制(MPC,Model Predictive Control)

    模型预测控制是一种基于模型的闭环优化控制策略. 预测控制算法的三要素:内部(预测)模型.参考轨迹.控制算法.现在一般则更清楚地表述为内部(预测)模型.滚动优化.反馈控制. 大量的预测控制权威性文献都无 ...

  5. MPC学习笔记1:基于状态空间模型的预测控制(2)

    基于估计的无约束预测控制 1.引言 基本上这两个部分都是在线性理论的框架下,利用状态空间法来建模.求解控制律.状态空间模型在理论分析上具有很强的优越性,但实际应用中能直接准确且经济地获取系统状态并不容 ...

  6. MPC学习笔记1:基于状态空间模型的预测控制(1)

    MPC调节器 1.给定一个由状态空间法描述的离散系统: MPC控制器与其他线性二次调节器(LQR)的区别就在于其可以很好的将系统动态约束纳入考虑. 采样周期Ts控制了算法的效率,太大会错过很多系统运行 ...

  7. 【文献07】基于MPC的WMR点镇定-极坐标系下和轨迹跟踪

    参考: Kuhne F , Lages W , Silva J D . Point stabilization of mobile robots with nonlinear model predic ...

  8. MPC&MAGIC

    MPC: Popularity-based Caching Strategy for Content Centric Networks MPC: most popular content MPC主要思 ...

  9. GCC升级问题解决:configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.,mpfr2.4.0

    如果遇到类似问题: configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.,mpfr2.4.0 解决 ...

随机推荐

  1. ABC216H - Random Robots(容斥,状压DP)

    题面 有 K K K 个机器人初始分别位于数轴上 x 1 , x 2 , . . . , x K x_1,x_2,...,x_{K} x1​,x2​,...,xK​ 的整点位置. 接下来会经历 N N ...

  2. .Net Core 配置文件读取 - IOptions、IOptionsMonitor、IOptionsSnapshot

    原文链接:https://www.cnblogs.com/ysmc/p/16637781.html 众所周知,appsetting.json 配置文件是.Net 的重大革新之心,抛开了以前繁杂的xml ...

  3. 关于KingbaseES临时文件过大问题

    背景 前几天碰到一个问题,现场并发很高,数据量很大(6T),主备库经常出现临时文件过多. 临时文件概念: 当私有进程buffer不够用时,会将buffer内容dump到tempfile供数据库正常sq ...

  4. KingbaseES 与Oracle 函数稳定性对于性能影响差异比较

    一.函数的属性 KingbaseES 函数在定义时有三种稳定性级别:volatile.stable 和 immutable.默认情况下,创建函数的稳定性为volatile.以下是这三种函数的区别: V ...

  5. Hbase shell 操作记录

    查看hbase版本 hbase(main):002:0> version 2.1.0-cdh6.2.0, rUnknown, Wed Mar 13 23:39:58 PDT 2019 Took ...

  6. 2021年1月-第02阶段-前端基础-HTML+CSS阶段-Day01

    HTML5 第一天 一.什么是 HTML5 1.HTML5 的概念与定义 定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML 两个概念: 是一 ...

  7. 大家都在用MySQL count(*)统计总数,到底有什么问题?

    在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数.统计用户总数等.一般我们会使用MySQL 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询 ...

  8. P1829 [国家集训队]Crash的数字表格

    P1829 [国家集训队]Crash的数字表格 原题传送门 前置芝士 莫比乌斯反演 乘法逆元 数论分块 正文 //补充:以下式子中的除法均为整除 由题目可以得知,这道题让我们所求的数,用一个式子来表达 ...

  9. 第六章:Django 综合篇 - 3:使用MySQL数据库

    在实际生产环境,Django是不可能使用SQLite这种轻量级的基于文件的数据库作为生产数据库.一般较多的会选择MySQL. 下面介绍一下如何在Django中使用MySQL数据库. 一.安装MySQL ...

  10. Security:如何安装 Elastic SIEM 和 EDR

    转载自:https://elasticstack.blog.csdn.net/article/details/114023944 需要学习的地方:生成SSL证书 图片结合最下方的代码文字使用 last ...