安全多方计算已经被公认为区块链发展中重要的密码学技术和工具,其在交易或者合约隐私保护,钱包密钥管理,跨链交易,区块链扩容等问题中都发挥了独有的作用。

然而由于其具体技术涉及诸多密码学算法和数学背景知识,在相应领域学习和开发之初会茫然而没有头绪。

本文希望以有限的篇幅将安全多方计算的概念相互连接成系统,以便读者快速学习和构建知识网络。同时,对安全多方计算中运用最多的两个分支:「基于混淆电路的安全多方计算」和「基于秘密分享的安全多方计算」进行介绍。

在安全多方计算(Secure Multi Party Computation)的第一篇文章中,我们已经描述了安全多方计算如何在数据价值和隐私保护的矛盾下提供一种解决方案,以及这个问题是如何被姚期智先生提出,并如何在实际生活中起到作用。

那么在介绍安全多方计算的进一步应用,以及和区块链之间如何巧妙结合之前,我们单开一个“进程”来深入到安全多方计算技术内部,将其实现技术给出一个简单明了展示。

通过这些例子我们可以看到安全多方计算与明文计算之间的区别,这种密码学方案如何实现了它声称的功能,不同实现方法之间的关系与区别,以及安全多计算与其他密码学算法之间的关系。这篇文章会涉及到一定的密码学基础算法和数学内容,但这不会影响理解安全多方计算本身的思想。

安全多方计算的提出

在姚期智先生(Andrew C.Yao)于1982年发表的文章“安全计算协议”一文中,他提到“两个百万富翁希望知道谁更富有,然而,他们不希望获得关于对方财富的额外信息。他们应当如何进行这次对话?”。

这个“百万富翁难题”是安全多方计算的一个特例,一般化的安全多方计算是n个参与方之间的一个交互式协议,n方分别持有数据x1,x2,…xn,该协议希望在输入之上计算函数y1,y2,…,yn=f(x1,x2,…xn),并使得第i方只能获得yi而不能获得其他信息。

这个定义看起来并不能带来直观的认知,我们不妨换一种思路来思考:在一个理想的世界(理想世界范式)中,存在一个完全中立,不和任何人合谋的可信第三方,所有人将数据交给他,之后他进行计算并将结果进行对应分配。这就完成了一次安全计算。

那么在现实世界(现实世界范式)中,安全多方计算协议就是在不存在这个可信第三方的情况下,完成同样的任务。这给人们更简明扼要思考安全多方计算能力与缺陷的参考。

比如,它并不能保证输入方提供了正确的输入,它也不能一般化的隐藏函数f的信息(代码混淆)。但另一方面,能否保证所有参与方都能同时拿到或者拿不到计算结果(公平性),能否保证参与方中有几方合谋或者试图刺探别人的输入信息时,计算依然可以安全进行(鲁棒性),这些问题则是密码学家在构造不同安全多方计算协议时关心的重点。

现实中的协议并不只有一个,也不是完全相同的几种,而是效率不同,安全模型不同,实现方式不同的一系列密码学协议。这也是安全多方计算最复杂也最引人注目的地方,本文我们先介绍一下安全多方计算中运用最多的两个分支——「基于混淆电路的安全多方计算」和「基于秘密分享的安全多方计算」。

基于混淆电路的安全多方计算

姚期智先生在提出问题的文章里已经给出了这类问题的一个解法:混淆电路(Garbled Cirtuit)与不经意传输(Oblivious Transfer)相结合。

这种协议主要适用于两方安全计算,现在有很多工作致力于将这种算法扩展到多方(n>2),然而我们将会看到它天然只适合两方,但两方运算已经可以帮我们解决很多具体问题了。

这种技术之所以被称为“电路”,是其首先将需要计算的函数表示为布尔电路,就像现代集成电路中的逻辑一样,其中的基本单元就是逻辑门,每个逻辑门规定为两输入一输出但可以具有多扇出(输出可作为下一级多个门的输入)。

如果电路的拓扑关系确定,整体电路的计算可通过按输入输出连接顺序执行来达成。那么我们就将函数的安全多方计算实现具体为一个门的实现,也就是说我们在现实生活中构造了一个可以等效为理想世界的“安全门”,那么我们可以一般化地来对整个电路进行改造。

姚期智先生提供的布尔电路混淆(Garbling)技术同时利用了不经意传输,不经意传输是一个可以独立利用的密码学工具,我们以2选1不经意传输(1-out-of-2 Oblivious Transfer)为例(如下图所示),其核心目的是接收者(Bob)希望获得发送者(Alice)2个信息(m1,m2)中指定的一个(比如mb),但却无法获得另一个的信息。另一方面,Alice无法获知b的具体数值。

不经意传输

通过上图,我们可以得到一个结论:任何一个有效的不经意传输协议都代表可以基于其构造一个安全两方计算协议。

那么我们可以观察这一点如何达成。如果Alice是“电路制造方”,Bob是“电路计算方”,两方想要共同计算f(x,y),其中x来自Alice,y来自Bob。那么Alice负责提供电路生成,不失一般的,我们以一个逻辑与门为例,我们对其每一个线信号(Wire)选定一对密钥,

分别代表这个信号的0和1。之后,我们利用一个双密钥对称加密函数来获得表1,这个表格即称为一个混淆门。此时混淆电路完成了构造。

混淆与门示意

混淆与门对照表

Alice将混淆电路传给Bob,以及x输入对应的密钥值,此时利用不经意传输,Bob可以获得自己y输入对应的密钥值,那么在经历过解密尝试后,Bob获得了对应的结果,在使用满足IND-CCA方案的加密算法时,Bob尝试错误密文的解密时,解密算法会拒绝。

如第一部分所提到的,安全多方计算保证的是一方的输入不会被另一方获得,而不是输入不能被从输出中推断出来。

安全两方计算

这就是混淆电路的基本流程。但这种构造还非常初步和低效,在这篇文章发布之后,许多改进慢慢被研究工作提出,从安全性,运行效率上都对这一分支的技术有了很大改进,使得实用化变得可行。

这其中比较重要的几个技术包括Free-XOR,Half AND这类减小特殊逻辑门代价的思路,也有Point-and-permute, Row reduction这样降低轮复杂度的算法。

应用上,第一个实现是于2004年发布的Fairplay系统,而2009年Asiacrypt的一篇文章利用混淆电路实现了安全两方计算版本的AES,这使得AES的私钥在计算过程中可以无需恢复,这得益于AES中占大多数的异或门可以利用Free XOR技术降低消耗。

基于秘密分享的安全多方计算

其余的多方安全计算,与两方安全计算不同,都是利用了秘密分享这一技术。这两者之间一个主要区别是,秘密分享中所有参与方都是对等地位的,而混淆电路是区分制造方与计算方的。

此时,输入不是比特值对应的密钥值,函数也不是逻辑电路。输入由参与方之间秘密分享,函数映射为有限域上的运算,这种运算具体化可以由加法和乘法表示,相对于逻辑电路,我们称之为算术电路。

在继续介绍这种方案之前,我们先简单了解秘密分享。秘密分享是n个参与方将一个秘密s在参与方之间分配的一个密码学工具,常用来保存诸如加密密钥,导弹发射代码等重要敏感信息。

协议主要有两个函数构成:秘密分发函数(Distribution)与重建函数(Reconstruction)。

分发函数将秘密s拆分成秘密分享值[s]并分发给所有参与方,这一过程一般由s的原始持有方执行。重建函数则允许所有满足重建条件的参与方集合恢复秘密。秘密分享方法于1979年由Shamir和Blakley分别独立提出。我们常用的秘密分享方法之一就是Shamir秘密分享。

1989年,Brickell提出了一般化的秘密分享构造方案,这种构造方法称为线性秘密分享方案(Linear Secret Sharing Scheme)。这个方案中用访问结构(Access Structure)来约束哪些参与方联合可以重建秘密。

利用一组数学语言来描述如何拆分秘密,如何分配秘密,并利用线性代数证明这种数学描述的安全性。这种线性秘密分享方案给我们的启示是,对于n个参与方,我可以任意规定访问权限(只要其满足单调性,即一组参与方可以重建秘密,那么再加一方依然可以重建秘密),这比Shamir秘密分享有更强的一般性。

基于这种一般化的秘密分享方案,Cramer等人在文章中证明了,我们可以构造安全多方计算。这种构造的关键之处是如何进行乘法计算,加法在线性分享上的实现是显而易见的。这个过程引入了重组(Recombination)操作,如果我们对于任意的秘密x和y,能够找到重组向量r=(r1,r2,…rn)使得

那么就可以在这种秘密分享上构建乘法而不会泄露信息,*表示向量点乘。

文章中给出的一般性计算[x*y]的方法如下,每一方计算[x]i*[y]i=ci,之后该值被秘密分享到所有方,之后每一方计算

即可完成乘法。

然而这种方法只适用于安全模型较弱的情况,对于更强的安全假设,需要更复杂的方法来完成乘法。

总结

本文以最简明的方式,将安全多方计算的两个技术分支做了介绍,希望能提供一个模糊的知识框架。由于安全多方计算是一个极为复杂,包含了多种密码学技术的系统,本文只能浅尝辄止,但通过本文,我们希望将这些点串联在一起以提供一份全景图。

在实际应用中,安全多方计算不仅可以用于数据提供方之间的协同工作,也可以联合SaaS系统,云服务来提高企业、个人隐私数据的安全性,同时增加数据联合分析的可能性,解决数据隐私和利用间的矛盾。比如ARPA安全多方计算平台。

在今后的文章中,我们会陆续分享一些安全多方计算平台如何打通数据流转通道,使安全多方计算在密钥管理,数据安全查询,云数据沙箱,联合征信和广告投放等情景下得以应用的案例。

怎么样,看完这篇烧脑的文章,对你有帮助吗?留言告诉营长吧!

*关于作者

苏冠通,ARPA密码算法工程师,清华大学密码芯片博士,拥有七年密码算法和芯片设计与研究经验。对安全多方计算协议,双线性对算法,格公钥密码算法有深入研究并在相关领域有多篇论文发表。

作者 | 苏冠通

责编 | Aholiab

出品 | 区块链大本营、ARPA

mpc 安全多方计算协议_一文揭秘跨链、密钥管理、合约隐私背后的技术, 你不可不知的安全多方计算(MPC)...相关推荐

  1. 一文揭秘跨链、密钥管理、合约隐私背后的技术, 你不可不知的安全多方计算(MPC) | 技术头条...

    作者 | 苏冠通 责编 | Aholiab 出品 | 区块链大本营.ARPA 安全多方计算已经被公认为区块链发展中重要的密码学技术和工具,其在交易或者合约隐私保护,钱包密钥管理,跨链交易,区块链扩容等 ...

  2. dubbo协议_一文详细解读 Dubbo 中的 http 协议

    太阳红彤彤,花儿五颜六色,各位读者朋友好,又来到了分享 Dubbo 知识点的时候了.说到 Dubbo 框架支持的协议,你的第一反应是什么?大概会有 Dubbo 默认支持的 dubbo 协议,以及老生常 ...

  3. 电感计算软件_一文让你了解到共模电感和差模电感的差异

    常见的接地符号有哪些? 五张图看懂EMI电磁干扰的传播过程 (点击上方红字,即可获取) 共模电感和差模电感 电源滤波器的设计通常可从共模和差模两方面来考虑.共模滤波器最重要的部分就是共模扼流圈,与差模 ...

  4. sql移动加权计算利润_一文搞懂股票指数的4种加权方式

    最近有朋友对指数的加权方式有疑问,今天朗姆就给大家讲讲市场上的指数都有哪几类加权方式. "加权"这两个字的意思通俗点来说,就是计算每只股票在指数中所占的比重的方法.指数虽然拥有相同 ...

  5. r 语言计算欧氏距离_一文搞懂常用R语言统计值计算:打倒描述性统计拦路虎

    本文来自:R语言:用R计算各种统计值 作者:生物信息学习 目录: 求极差(range) 做频数分布表和频数分布图(graph of frequency distribution) 算术平均数(mean ...

  6. 如何看懂串口通讯协议_一文看懂PLC的通讯方式——AB系统(一)

    写在前面 一直以来,PLC跟其他设备的通讯方式都是自动化工程师入门学习的难点和要点.说它难,因为这里面牵扯到了数据通讯的一些知识,大多数从事PLC工作的人员都是从电气.电子.自动化.机电等相关专业出身 ...

  7. python 文本相似度计算函数_一文讲述常见的文本相似度计算方法

    作者 | LU_ZHAO 责编 | 徐威龙 前言 在自然语言处理中,我们经常需要判定两个东西是否相似. 比如,在微博的热点话题推荐那里,我们需要比较微博之间的相似度,让相似度高的微博聚集在一起形成一个 ...

  8. sql移动加权计算利润_投资收益率、时间加权收益率、资金加权收益率-KlipC讲解三个衡量交易员收益率的计算方式和准确性...

    昨天,KlipC带给大家了一份详细的投资回报率计算的方式和区别.现在,我们要讲解的是简单投资收益率(ROI).时间加权收益率(TWR)和资金加权收益率(MWR)这三个收益率作为衡量收益的优势和劣势. ...

  9. 编写一个python程序用来计算投资回收期_智慧职教云课堂Python程序设计基础(九江职业技术学院)题目答案...

    编写递归算法,依据树的双亲表示法及其根结点创建树的孩子兄弟链表存储结构.要求写算法以前先写出 请用类C或用类Pascal语言编写算法.请编写在中序全线索二叉树T中的结点P下插入一棵根为X的中序全 下列 ...

最新文章

  1. print (“{0:<10}{1:>5}“.format(word, count))
  2. https://www.threatminer.org/domain.php?q=blackschickens.xyz ——域名的信誉查询站点 还可以查IP...
  3. java vote_vote投票系统java jsp mysql
  4. android远程linux命令,测试可用的Android远程语音识别实例
  5. java在枚举方法中调方法_java – 值方法如何在枚举中工作
  6. python字符数组输出_python字符串格式化输出
  7. 长沙湘江科技学校计算机信息,长沙湘江科技中等职业学校简介|长沙湘江科技中等职业学校介绍...
  8. python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
  9. powerbi python词云图_使用Power BI制作可爱的词云图
  10. 19_04_02校内训练[deadline]
  11. LaTex写实验报告
  12. java 工作流开发框架比较
  13. 杭州,杭州……念兹在兹
  14. 进程间通信方式有哪些?各自有哪些优缺点?
  15. 项目管理工具project软件学习(七) - 创建资源,分配资源、查看资源负荷
  16. 电脑重装系统后无法上网怎么办
  17. 深入理解Risk aversion||风险偏好||Risk utility function
  18. elasticsearch ik分词--实现专有名词分词 同义词解析
  19. PHPexcel文档 laravelExecl可参考
  20. 知乎zhihu:Python爬取某个问题下所有含有给定关键词的回答

热门文章

  1. windows 启动后台进程
  2. [SECCON CTF 2022] 只两个小题pwn_koncha,rev_babycmp,crypto_pqpq
  3. android 4.4 锁屏密码,安卓如何绕过锁屏密码:方法都在这儿了
  4. 与airpods媲美的无线耳机推荐
  5. 房屋价格预测相关公开数据集
  6. element-ui中点击菜单,改变当前菜单背景颜色
  7. oracle常用errcode
  8. 揭秘刘安和兄弟连不是骗子吗,手法如此传销,培训机构竟利用网络营销上市 现在互联网这么大,娱乐界乱搞,教育界还乱搞,如今泛媒体时代,人人都是KOL,每个人都是意见领袖,一人一个自媒体号,人人都可以发飙
  9. 信用卡分销系统源码、分销系统定制贴牌、信用卡三级分销系统源码、信用卡返佣系统OEM...
  10. 半监督学习笔记(四):熵最小化、代理变量