安全多方计算问题SMC,Secure Multi-party Computation)由由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《Protocols for secure computations》中以百万富翁问题(两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方及其他第三方知道自己财富的任何信息),开创了密码学研究的新领域。
安全多方计算定义:是指在一个互不信任的多用户网络中, n n n个参与者 P 1 , P 2 , . . . , P n P_1,P_2,...,P_n P1,P2,...,Pn,每个持有秘密数据 x i x_i xi,希望共同计算出函数 f ( x 1 , x 2 , . . . , x n ) = ( y 1 , y 2 , . . . , y n ) f(x_1,x_2,...,x_n)=(y_1,y_2,...,y_n) f(x1,x2,...,xn)=(y1,y2,...,yn), P i P_i Pi仅得到结果 y i y_i yi,并且不泄露 x i x_i xi给其他参与者。
平均薪水问题是一个简单的安全多方计算问题,即某公司 n n n位职员想了解他们每月的平均薪水有多少,但又不想让任何其他人知道自己的薪水。
设公司 n n n个职员 A 1 , A 2 , … , A n A_1,A_2,…,A_n A1,A2,…,An,他们的薪水分别为 x 1 , x 2 , … , x n x_1,x_2,…,x_n x1,x2,…,xn。该问题可形式化描述为:对 n n n个秘密输入 x 1 , x 2 , … , x n x_1,x_2,…,x_n x1,x2,…,xn,在不泄露各自秘密的情况下计算函数值: f ( x 1 , x 2 , … , x n ) = ( x 1 + x 2 + … + x n ) / n f(x_1,x_2,…,x_n)=(x_1+x_2+…+x_n)/n f(x1,x2,…,xn)=(x1+x2+…+xn)/n执行以下协议:
参与者指参与协议的各方,每个参与者被抽象为具有概率多项式时间算法的图灵机根据参与者在协议中的行为将其分为以下三类:
(1)诚实参与者:诚实参与者完全按照要求完成执行过程中的各个步骤,同时保密自己的所有输入、输出及中间结果。诚实参与者也会根据自己的输入、输出以及中间结果来推导其他参与者的信息,但是不会被攻击者腐败。
(2)半诚实参与者:半诚实参与者在协议的执行过程中,完全按照协议的要求完成协议的各个步骤,但同时可能将自己的输入、输出及中间结果泄露给攻击者。
(3)恶意参与者:恶意参与者在协议的执行过程中,完全按照攻击者的意志执行协议的各个步骤,他不但将自己的所有输入、输出及中间结果泄露给攻击者,还可以根据攻击者的意图改变输入信息、伪造中间及输出信息,甚至中止协议。
安全多方计算协议中,攻击者会破坏协议安全性或正确性,通过腐败参与者的一个子集,来控制其对协议进行攻击。根据攻击者对恶意参与者的控制程度、攻击者的计算能力、对恶意参与者的控制程度、网络同步与异步状态、自适应性等准则,可以对攻击者有不同的分类。其中按照对恶意参与者的控制程度,可以将攻击者分为以下下三类:
(1)被动攻击者:又称为半诚实攻击者。被动攻击者只是监听恶意参与者的输入、输出及中间计算结果,并不控制恶意参与者的行为(比如修改恶意参与者的输入输出)。
(2)主动攻击者:除了监听任意参与者的输入、输出及中间结果外,主动攻击者还控制恶意参与者的行为(如恶意篡改参与者的输入,按照自己的意图控制恶意参与者的输出等)。
(3)隐蔽攻击者:Aumann和Lindell于2007年提出介于被动攻击者与主动攻击者之间的攻击者类型,即隐蔽攻击者(Convert adversary)。隐蔽攻击者以被发现的概率为(称为遏制因子)危险去攻击协议,被隐蔽攻击者腐败的参与者可以进行主动的腐败行为。
安全多方计算的模型主要有三种:半诚实模型、恶意模型与隐蔽攻击模型。
(1)半诚实模型:如果所有参与者都是半诚实或诚实的,称此模型为半诚实模型。半诚实成员完全遵守协议,但它会收集协议执行过程中的所有记录,并试图推断其他成员的输入,半诚实模型中的攻击者都是被动的。
半诚实模型下的理想模型定义:在理想模型中,存在一个诚实第三方 T T T,该第三方能够与所有参与者进行保密通信,且对对参与者发送给的所有信息保密。攻击者不能得到诚实参与者与T之间交换的任何信息。
(2)恶意模型:有恶意参与者的模型称为恶意模型。恶意参与者完全按照攻击者的意愿执行协议的各个步骤,他不但将自己的所有输入、输出以及中间结构泄露给攻击者,还可以根据攻击者的意图改变改变输入信息、伪造中间及输出信息,甚至终止协议。恶意模型中的攻击者是主动的。
恶意模型下的理想模型定义:在理想模型中,存在一个诚实第三方 T T T。
(3)隐蔽攻击模型:有被隐蔽攻击者参与的模型称为隐蔽攻击者模型,被腐败的参与者可以进行主动的腐败行为,但仅在能小于一定概率不被发现的情况下才可实施腐败行为。
(1)秘密共享:秘密持有者 S S S需要将原始秘密 m m m在参与者 P 1 , P 2 , . . . , P n P_1,P_2,...,P_n P1,P2,...,Pn中分享, S S S分发给 P i P_i Pi子秘密 m p i m_{p_i} mpi,使得只有特定的参与者的集合才能够从他们的子秘密中恢复秘密 m m m,而其他参与方不能得到秘密 m m m的任何信息。
(2)同态加密:R.Rivest等人1978年首次在《On data banks and privacy homomorphisms》中以隐私同态(Privacy homomorphism)的概念提出。同态性使得可以在加密数据上进行运算,从而保护用户数据隐私。
(3)混合网络(MN,Mix-Network):1981年,Chaum首次在《Untraceable electronic mail, return addresses, and digital pseudonyms》提出混合网络,用于保护某些参与者的隐私。从直观上讲,混合网络是一个多方协议,协议的输入是一个密文表,该密文表中的密文与明文有一一对应的关系。混合网将这个密文表随机置换后输出另外一个密文表,称之为盲表。同输入的密文表一样,输出的盲表中的密文和相同的一组明文也是一一对应的。混合网络的安全性在于攻击者无法确定输出盲表中的某一条密文与输入密文表中的哪一条密文是对应的。
(4)比特承诺:比特承诺解决解决这样的场景:Alice向Bob承诺一个预测,直到一段时间之后才揭示着预测;在这期间,Alice不能改变自己的预测。
(5)零知识证明(Zero Knowledge Proof) 是一种用于证明者在不泄露任何其他信息的情况下证明其掌握知识的正确性的密码学协议。该协议的一方称为证明者(Prover),用 P P P表示;协议的另一方称为验证者(Verifier),用 V V V表示。零知识证明指 P P P试图使 V V V相信某个论断是正确的,但却不向V泄露任何有用的信息,即 P P P在论证的过程中 V V V得不到任何有用的信息。
(6)不经意传输(oblivioustransfer):1981年,由Rabin首先提出,在这个协议中,消息发送者从一些待发送的消息中发送一条给接收者,但事后对发送了哪一条消息仍然oblivious(不知道),又称茫然传输协议。