对于多方安全计算的中止安全的理解
对于多方安全计算的中止安全的理解
学习的隐语课程:https://www.secretflow.org.cn/community/bootcamp/2narwgw4ub8rabq/course/exat9e9krgue7il

在隐语的课程上,看到在输出可达性上,提到中止安全:恶意实体获得输出后,可终止协议,使得诚实实体不能获得输出。
疑问:我就很好奇为什么恶意实体获取到了输出,反而诚实实体不能获得输出,这为什么说是安全?
1.怎么理解中止安全中的 “安全”?
关键在于,在密码学和多方安全计算的语境下,“安全”这个词有非常精确的定义,它主要关心两个核心属性:
- 隐私性 (Privacy):协议执行过程中,任何参与方(包括恶意方)都无法学到关于其他参与方原始输入的任何额外信息,除了从最终输出结果中可以推断出的信息之外。
- 正确性 (Correctness):计算出的输出结果必须是正确的,即严格按照预定函数 f(input_1, input_2, …) 计算得到的结果。恶意方不能通过欺骗手段让协议计算出一个错误的结果。
其实“中止安全 (Security with abort)”,它也保证了上述两个核心属性始终成立。
“中止安全”到底安全在哪里?
我们可以把它理解为一种“止损”的安全模型。即使在最坏的情况下(恶意方提前中止协议),它也保证了两件最重要的事情没有被破坏:
- 你的秘密没有泄露:恶意方即使拿到了最终结果,他也没有办法通过协议的中间过程来反推出你的原始、私密输入数据。这是MPC最根本的基石。例如,在一个联合计算平均工资的场景中,他知道了最终的平均值,但他不知道你具体的工资是多少。
- 他没有骗到你:恶意方拿到的那个输出结果,是真实、正确的。他没有能力篡改计算过程,让自己得到一个对他更有利的、虚假的“正确结果”。
所以,“中止安全”的“安全”指的是:恶意方无法破坏协议的隐私性和正确性。
2.中止安全的不足
那它“不安全”的部分是什么?
其实它不安全的部分在于协议的活性 (Liveness) 和公平性 (Fairness)。恶意方可以发起一种“拒绝服务攻击”,让诚实方无法完成计算并获得结果。
用一个比喻来理解:
想象一下,你和另一个人(可能是恶意的)需要共同打开一个保险箱,箱子里是你们合作投资的收益报告。这个保险箱有两个钥匙孔,你们各持一把钥匙。
-
理想情况 (保证输出传送):你们同时插入钥匙,保险箱打开,你们都看到了收益报告。
-
中止安全的情况:保险箱的设计很特别。当第一把钥匙插入并转动后,这把钥匙的主人可以立刻通过一个小孔窥视到报告结果。但是,第二把钥匙必须在10秒内插入,否则保险箱会自动销毁报告。
-
恶意方先把他的钥匙插进去,看到了报告。
-
然后,他立刻拔出钥匙跑掉了,或者故意拖延时间。
-
结果:他看到了报告,而你还没来得及插入钥匙,报告就被销毁了。
在这个比喻里:
-
安全性体现在:他虽然看到了报告(输出),但他并不知道你为了这次投资付出了多少本金(你的输入)。报告本身的内容也是真实准确的。
-
不公平性体现在:他单方面获得了信息,而你一无所获,合作被他中途破坏了。
为什么需要这种“看似不完美”的安全模型?
这背后其实是深刻的理论限制。密码学中有个著名的“克利夫斯不可能结论” (Cleve’s Impossibility Result),它指出:
> 在一个两方计算(2PC)或者不诚实方占多数(Dishonest Majority)的MPC场景中,如果不存在一个可信的第三方或者额外的通信假设(如广播信道),要同时完美实现“隐私性”、“正确性”和“公平性”是不可能的。
你必须做出取舍。在“不诚实大多数”这种更贴近现实世界的严苛模型下,“中止安全”通常是我们能达到的最好结果。我们牺牲了“公平性”,来确保更核心的“隐私性”和“正确性”在任何情况下都不被妥协。
3.是否可以说中止安全一定安全?
先给个答案:即使是在“中止安全”模型下,恶意方也没有办法通过协议本身或者获得的输出来反推出诚实方的原始、精确输入,除非函数本身的设计就存在信息泄露。
1)MPC协议的核心保障:无可信第三方下的模拟安全
想象有一个绝对可信、无法被收买、不会出错的第三方(比如一个“上帝”或者一台完美的超级计算机)。你和对方想计算一个函数 f(你的输入, 对方的输入)。你们各自把自己的私密输入发送给这个可信第三方。他计算出结果,然后把结果分别发还给你们。
在这个理想世界里,对方(恶意方)能学到什么?他只学到了两样东西:
-
他自己的输入(他本来就知道)。
-
最终的计算结果。
他绝对学不到任何关于你的原始输入的额外信息。
现实世界中,我们没有这样一个理想化的上帝。我们和对方是直接通过网络交换一系列加密过或处理过的数据来执行MPC协议。
一个MPC协议被认为是“安全的”,当且仅当,一个恶意方在现实世界里通过参与协议所能学到的一切,不多于他在理想世界里能学到的东西。这就意味着,一个安全的MPC协议,其本身(中间通信的数据、计算步骤等)不会泄露任何关于你输入的信息,就如同把输入交给了那个完美的“上帝”一样。
2)函数泄露 vs 协议泄露
现在我们来谈那个最重要的“例外情况”。MPC协议保护的是你的输入在计算过程中不被泄露,但它无法改变数学事实。
恶意方无法从【协议】中反推你的输入,但他可能可以从【输出结果】中反推你的输入。
这不代表协议不安全,而是代表你们选择计算的那个函数 f 本身是“泄露信息的”。
让我们看两个极端的例子:
例1:不泄露信息的函数
-
问题: 比较你和我的财富,谁更有钱?(姚氏百万富翁问题)
-
输入: 你的财富 A,我的财富 B。
-
函数: f(A, B) -> “A > B” 或 “B > A” 或 “A = B”。
-
场景: 你是诚实方,有100万。我是恶意方,有200万。我们运行2PC协议,我得到了输出结果“B > A”。
-
反推出什么?: 我只知道你的财富小于200万。我无法知道具体是100万、50万还是199万。协议成功地隐藏了你的精确输入。我获得的信息 A < 200万 是这个比较函数本身必然会透露的,无法避免。
例2:完全泄露信息的函数
-
问题: 计算你和我的银行卡总资产。
-
输入: 你的资金量 A,我的资金B。
-
函数: f(A, B) -> A + B。
-
场景: 你是诚实方。我是恶意方,我的财富是 B = 200 万。我们运行2PC协议,我得到了输出结果 A + B = 300 万。
-
反推出什么?: 我可以立刻、100%确定地计算出你的财富 A = 300 - 200 = 100 万。
4.三种安全等级的递进关系
您可以这样理解这三个概念的强度:
中止安全 (Security with abort) - 最基础的安全
-
保证:隐私性(不过你的输入,他看不到的)、正确性。
-
风险:恶意方可以自己拿到结果后跑路,让你拿不到。
-
对应场景:不诚实大多数(例如,两个公司合作,无法假设对方一定是诚实的)。
公平性 (Fairness) - 更强的安全
-
保证:隐私性、正确性,以及“要么大家都有,要么大家都没有”。
-
风险:恶意方虽然不能“独吞”结果,但他仍然可以中止协议,导致所有人都拿不到结果。
-
对应场景:诚实大多数(例如,三个参与方,其中最多只有一个是恶意的)。
保证输出传送 (Guaranteed output delivery) - 最理想的安全
-
保证:隐私性、正确性、公平性,并且协议一定能成功运行出结果。
-
风险:无。恶意方无法以任何方式阻止诚实方获得最终的正确输出。
-
对应场景:诚实大多数,且通常需要更强的假设或更复杂的协议。
总结一下,“中止安全”之所以被称为安全,是因为它成功地保护了数据的隐私和计算的正确性这两个核心目标,代价是牺牲了协议的公平性。
在不诚实大多数的情况下,保障中止安全。 不过这种“即使拿不到结果,也绝不能让我的秘密数据泄露”的特性,已经是一种足够有价值的安全保障了。
