何为安全多方计算?
安全多方计算(secure multiparty computation, SMPC)意为在无无可信第三方的情况下,如何通过一系列的算法,让不同人员达成共识或者计算出一个可信的最终的结果;在这环节中,每个人都公平公正地付出,并且没有作弊行为。
这个想法是在密码学家们通过网络在创建一些算法游戏的时候诞生的。最开始的时候,计算机都是各自工作;而当网络出现的时候,程序员开始想办法让计算机协同工作。如今,人们会把一堆虚拟机放一起工作,以发现正确的结果。但是难点在于,如何确保这个流程是安全的,同时其中没有一方作弊了。
理论数学家们已经研究多方计算数十年。现在,这些算法已经可以从实验室中走出来,在更为复杂的网站应用、API和服务中找到自己的位置——哪里缺少信任,哪里就有新的位置。
大部分企业堆栈都是由大量代码合作而成。举个例子,响应一个网站服务请求可能需要将A机器上的数据和存储在B机器上的数据组合,然后用C机器上的模板进行格式处理——同时,这些行为都由在一个负载均衡器后的一个K8s节点编排而成。甚至一个笔记本电脑能够运行,都是基于CPU、显卡和网卡等设备能配合工作的信任。
以上的例子都需要建立在信任的泡沫之上。如果使用不同的机器以及软件堆栈层的人们不相互信任呢?也许他们因为一些政治立场原因需要选择自己的站边,又或者他们受制于不同的委托要求,也可能仅仅是因为他们相互讨厌。
安全多方计算算法使得人们和他们的计算机即使相互不信任都可以一起合作。这些算法结合了足够的基础审计和密码能力,从而让每一方都能够确信结果是正确的,哪怕他们网络另一侧的敌人试图背叛他们并且窃取所有内容——当然,也可能是他们所谓的朋友对他们进行了背刺。
安全多方计算如何实现?
大部分加密算法都是由一个人进行,所有的数学计算都在某个人或者某个实体的信任泡沫中完成。一个文件可能在对某个人安全的环境或者被密码保护的机器中加密,然后再被作为邮件附件发出,或者存储在野外未保护的互联网环境中。数字签名是由有防泄密保护的隐私机器创建,这样其他人才会相信是密钥的所有人创建了这个签名。
安全多方计算可以综合这些基础的算法,从而发现更复杂问题的解决方式。安全多方计算经常使用同样标准的加密方式或者数字签名方式,但是会进行调整,从而扩展它们的信任泡沫。
区块链就是一个数字签名调整以后,如何将信任泡沫扩大到大量不认识人之间的好例子。在许多这类型的算法中,某种加密货币的拥有权和密钥关联,而货币的消耗则是通过额外增加一个数字签名来表明将所有权转让。这类操作通常和其他操作一起,在一个大的区块中被其他人的数字签名所验证。当聚合到一起时,就可以通过数字签名追踪货币的所有权,最终某一天有机会形成一个稳定的经济体系。
安全多方计算在理论计算机科学领域有一个更深入的研究。一些早期的算法证明,任意的计算都能在被分割之后,依然生成一个可以相信的答案。最早期的证明任何布尔型的计算都适用于此原则。多年来,数学家已经研究了更复杂、更深入的算法,来解决这类问题。
安全多方计算的类型
许多算法都被被认为能用于安全多方计算。这些算法中,时间最久远的可以追溯到上世纪七十年代,数学家在想一种远距离的扑克游戏时候发明。那种时候的远距离扑克无法看到对方是否在处理扑克牌的时候动手脚。因此,他们就着手思考一种能解决任意布尔型函数的算法。
以下是几种常见的算法。这些算法自身就能够解决一些小问题,合并起来能处理更多的难题:
• 秘密分享:一个机密的信息被分成N部分,从而任何K个子集都可以重建这个信息的内容。最简单的例子就是直线的截距。任何在该直线上的两点都能重构该直线,然后得出截距;在这个例子中,K就是2。更复杂的数学可以得到更大的K值。一般这个机密信息都是一个大型文件的密钥。一旦这些被拆分的部分分发出去,原始的密钥就会被销毁,必须有K个人一起协作才能解锁。
• 分隔选择法:这一步骤是许多算法的基础,因为它允许一方审计另一方而不需要在过程中泄露机密信息。一方会把他们的数据打包成多个数据包。当这些数据包被提交的时候,另一方会要求密钥对部分数据包随机解包。如果被解包的内容中所有东西都一致并且正确,那么未被解包的部分会被舍弃,同时未审计的数据包会被认为是正确的。这样,双方都能共享信息,但是未审计部分依然能确保私密性。
• 零知识证明:这是数字签名更复杂的版本,需要证明者在不显示证明过程的情况下,显示出他掌握了相关知识。这在更复杂的算法中经常会很有用,因为一方可以在不揭示秘密的情况下证明自己了解相关内容。
一个简单的版本经常被称为是“比特承诺”,并且在很多游戏被作为协议应用。双方能够投掷一枚硬币,随机选择正反面。每一方会用一种单向加密方式(比如SHA),将他们的选择加密。首先,双方互相共享他们加密后的信息。在双方都知道对方加密后的数据后,双方展示最初选择的正反面结果,判定谁猜对了。双方可以通过单向加密函数来审计对方的结果。
• 无交互零知识证明:最早的零知识证明要求双方进行交互,因为需要一方向另一方证明。之后,无交互零知识版本出现了,并且有了像SNARKs或者ZK-SNARKS的名字。这个目标是产生一些小信息包,会包含所有证明需要的信息。任何检查了这些包的人执行相似的计算,都会有相同的结果。
这些包往往作为更有效的数字签名,可以证明一些复杂的事实,同时对一些信息进行保密。一个简单的例子是驾照——它可以证明一个人过了购买酒的年龄,但是却不用表示这个人真实的年龄。
安全多方计算用例
这些算法在许多业务交互中能够产生价值,因为根据Ronald Reagan的铭言,它们能让人们相互信任的同时,还能验证做的每一件事。安全多方计算的用例包括:
• 加密货币:尽管说关于社会是否应该信任数字货币带来的经济体系依然存疑,但是毫无疑问,当下加密货币的资本情况是安全多方计算能力的证明。大量的处理行为都在按预期平滑地进行。许多有影响力的问题并非因为算法的失效而发生,而是因为周围计算系统的泄露而导致。
• 游戏:随着人们转向在线游戏进行娱乐,作弊变得更为容易了。让每一方都能够控制自己本地的硬件相当于在邀请作弊者们破解游戏软件发现像地图那样的隐藏信息。有些人甚至能够修改数据结构,增加额外的能力或者金钱。
安全多方计算算法可以在不需要额外可信任的硬件的情况下放置这类作弊行为。
• 合约协商:许多企业都有一些虽然不能完全相互信任,但是必须近距离合作的关键伙伴。比如车行,需要和银行合作进行贷款,和保险工作合作保障资产。一般情况下,购买行为需要双方大量的纸面文件。多方安全计算可以让更多方面的人一同参与到交易之中,但是却不需要进行纸面工作协同。
• 数据收集:人们往往不愿意参与调研,因为他们并不想泄露自己的私人信息。许多市场需要有关供需的准确总体信息。但是,收集这些信息会很麻烦,因为参与者并不想分享他们的原始数据。安全算法可以在保护隐私的条件下帮助收集这些信息。
• 自动化市场:传统的市场需要人来承担一个中立仲裁的角色——比特币是一个如何用算法取代中间人的一个实例。
点评
密码学始终都是信息安全中重要的基础——不仅仅依靠加密解密的函数保障信息的隐秘性,还通过各种算法,确保信息交互的安全。信任的问题最终依然可以落在数学层面,通过算法的方式去解决——而这也是未来的趋势。传统的安全模式里讲究信任,各个行为都是基于信任,或者信任的程度进行的;而随着越来越多方面的实体加入到协作当中,未来的合作会趋向于基于“不信任”进行——这时,就需要安全多方计算来解决信任的问题。