安全计算(Secure Multi-party Computation)


本文为知乎专栏 安全计算与密码学 学习笔记。

问题描述

安全计算的目的是在没有可信第三方的情况下,在保证数据隐私的条件下完成计算任务。当有多方参加时,就称为安全多方计算。它具有如下特点:

  • 输入隐私性:安全多方计算过程中必须保证各方私密输入独立,计算时不泄露任何本地数据。
  • 计算正确性:多方计算参与各方就某一约定计算任务,通过约定MPC协议进行协同计算,计算结束后,各方得到正确的数据反馈。
  • 去中心化:传统的分布式计算由中心节点协调各用户的计算进程,收集各用户的输入信息,而安全多方计算中,各参与方地位平等,不存在任何有特权的参与方或第三方,提供一种去中心化的计算模式。

应用场景

安全多方计算适用于计算任务需要用到来自多个参与者的数据,但各个参与者又不想(或不被允许)交换或公开数据的场景。例如:

  • 电子选举
  • 门限签名
  • 电子拍卖

实现方法

基于噪音的安全计算方法

差分隐私

差分隐私保护数据源中一点微小的改动导致的隐私泄露问题。即对于一个随机化算法,该算法作用于两个相邻数据集(数据只有细微差别)得到的两个输出分布不可区分。这样,可对计算过程用噪音干扰(原始数据或中间参数中加入噪音),让原始数据淹没在噪音中,使别窃听者无法从结果反推原始数据。

  • 优点:效率高(只要生成服从特定分布的随机数)。
  • 缺点:结果不够准确,在复杂的计算任务中结果会和无噪音的结果相差很大导致结果无法使用。

非噪音方法

通过密码学方法将原始数据编码或加密,使得数据结果看似随机但实际保留了原始数据的一些性质。

  • 优点:结果准确,密码学理论保障安全性。
  • 缺点:计算量和通讯量较大,对于一些复杂的任务,短时间内无法完成。

混淆电路(Garbled Circuit)

由姚期智教授在80年代提出,通过布尔电路的构造安全函数计算,使得参与者可以针对某个数值来计算答案,而不需要知道他们在计算式中输入的具体数字。

实际上,所有可计算问题都可以转换为各个不同的电路,例如加法电路,比较电路,乘法电路等。而电路是由一个个门(gate)组成,例如与门,非门,或门,与非门等。

混淆电路里的多方计算通过电路实现,若Alice和Bob要进行多方计算,他们首先需要构建一个由与、或、非、与非门组成的布尔逻辑电路,每个门都包括输入线,输出线。混淆电路通过加密和扰乱这些电路的值来掩盖信息,而这些加密和扰乱是以门为单位,每个门都有一张真值表。Alice用密钥加密真值表,并把表打乱后发给Bob。而Bob在接收到加密表后,根据收到的加密真值表,混淆的输入,及自己的Key,对加密真值表的每一行尝试解密,最终只有一行能解密成功,并提取相关信息。最后Bob将计算结果返回给Alice。

  • 优点:对于由位运算(AND、OR、XOR)组成的算法,效率较高。
  • 缺点:对于常见算术操作,如乘法、乘方等,电路较为复杂,效率很低。

密钥分享(Secret Sharing)

密钥分享的基本思路是将每个数字\(x\)拆散成多个数\(x_1,x_2,\cdots,x_n\),并将这些数分发到\(n\)个参与方。每个参与方拿到的都是原始数据的一部分,一个或少数几个参与方无法还原出原始数据,只有大家把各自的数据凑在一起时才能还原真实数据。

计算时,各参与方直接用它自己本地的数据进行计算,并且在适当的时候交换一些数据(交换的数据本身看起来也是随机的,不包含关于原始数据的信息),计算结束后的结果仍以secret sharing的方式分散在各参与方那里,并在最终需要得到结果的时候将某些数据合起来。这样的话,密钥分享便保证了计算过程中各个参与方看到的都是一些随机数,但最后仍然算出了想要的结果。

(t,n)阈值密钥分享

允许任意t个参与方将秘密数据解开,但任何小于t个参与方均无法将秘密数据解开。

  • 优点:适用于各种算术操作。
  • 缺点:对于乘法,需要预计算。

同态加密(Homomorphic Encryption)

对原文进行加密并在密文上进行运算。借助同态性质,可保证先加密后运算与先运算后加密计算结果相同。需要注意的是,许多方案只支持部分同态运算。

  • RSA:乘法同态 \(x^{e}y^{e}=(xy)^e\)
  • Paillier加密方案:加法同态 \(g^xr_x^n g^yr_y^n = g^{x+y}(r_xr_y)^n\)
  • Dan Boneh等于2005年基于双线性对构造出了一种同时具备乘法同态和加法同态的算法,但是只能进行一次乘法运算。
  • Learning with error(LWE):根据一个或一组被噪音扰动的多项式回推原始数据
    例如\(c = m \oplus 2x \oplus kp\),其中\(m\)为单比特数据,\(p\)为奇数,且可看做是加密\(m\)的私钥,\(x\)为噪声。那么只要\(k\)是随机的,\(c\)就是随机的,也就是\(c\)不泄露\(m\)的信息,并且这个式子满足加法和乘法同态。为了保证解密的正确性,\(c\)的值不能太大(否则无法正确解密)
    • 缺点:噪音随运算次数增加而增长
  • Gentry方案(基于理想格):
    • Bootstrapping:每计算几轮更新一次密文,使得密文中的噪音降为0,然后继续用来计算,如此循环往复。(使用密文的密文及密钥的密文进行运算)
    • Squashing:通过预计算减少DEC阶段(降噪)的运算量
    • 优点:解决噪声爆炸问题
    • 缺点:Bootstrapping和Squashing阶段计算量较大;密文大小不断膨胀
    • 改进:基于环的somewhat homomorphic encryption。将数字表示为多项式,进行多项式的加法和乘法(运算次数有限)。由于整系数多项式操作比理想格中矩阵操作快,且避开了Bootstrapping和Squashing,所以整体速度在可接收范围内。

零知识证明(Zero—Knowledge Proof)

证明者(P)能够在不向验证者(V)提供任何有用的信息的情况下,使验证者相信某个论断是正确的。
(向你证明我知道答案,但就是不告诉你答案是啥)

零知识证明的性质:

  • 正确性。P无法欺骗V。换言之,若P不知道一个定理的证明方法,则P使V相信他会证明定理的概率很低。
  • 完备性。V无法欺骗P。若P知道一个定理的证明方法,则P使V以绝对优势的概率相信他能证明。
  • 零知识性。V无法获取任何额外的知识。

零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗者有可能通过虚假陈述骗过证明者。换句话来说,零知识证明是概率证明而不是确定性证明。但是也存在有技术能将误差降低到可以忽略的值。

应用:

  • 区块链:证明交易符合规则
  • MPC:防止偏离协议发送假数据的恶意节点
  • 身份证明
posted @ 2020-08-05 21:23  rookieveteran  阅读(1474)  评论(0编辑  收藏  举报