详解信任初始化阶段的5种设置( 四 )


安全计算的可信设置
安全多方计算协议允许一组数量为 n 的参与方 P1 , ... , Pn 基于他们私有输入 x1 , ... , xn 去计算一个(布尔或算术)电路 C , 然后只显示输出 y = C(x1 , ... , xn )(假设所有的参与方都应该得到相同的输出) 。 例如 , 电路 C 可以计算所有输入之和 。
最新的 MPC 协议都被设计成 离线-在线 两阶段运作 , 其中离线是用于初始化阶段的 , 通常是完全保密的 。 一个常见的例子就是向各参与方共享乘法三元组(也叫 , Beaver 三元组)的信任初始化阶段 。 具体来说 , 该初始化过程随机将 ai 、bi 和 ci 发给参与方 Pi , 且 (a1 +…+ an )·(b1 +…+ bn) = (c1 +…+ cn ) 。 然后 , 在协议的主阶段(也叫在线阶段) , 参与方分享他们的输入 , 也就是说 , 参与方 Pi 通过向 Pj 发送 x'j 使得 x'1 +...+ x'n = x' 来分享他的输入 x' 。 现在 , 各个参与方都可根据被共享的数值进行任何算术运算 , 也就是说 , 给定一个共享的秘密值 x 和 y , 如果参与方 Pi 持有 xi 和 yi 使得 x1 +...+ xn = x 且 y1 +...+ yn = y , 那么各参与方可以执行以下流程(我们在以下描述中省略了一些细节) :

  • 开始 —— 给定一组共享的 x1 , ... , xn, 使得每个参与方都可以获得 x = x1 +...+ xn 。
  • 加法/减法 —— 各参与方 Pi 通过在本地计算 zi = xi + yi, 可以计算出一个共享的 z = x + y 。 因为这遵循 z1 +...+ zn =(x1 +...+ xn )+(y1 +...+ yn) 。
  • 缩放 —— 给定一个所有参与方都知晓的值 c , 他们就可以通过每个参与方在本地计算 zi = cxi 来计算一个共享的 z = cx 。 同样的 , 它也遵循 z1 +...+ zn =(cx1 +...+ cxn )= c(x1 +...+ xn )= cx 。
  • 乘法 —— 各参与方通过放弃来自初始化阶段的单个乘法三元组可以计算出一个共享的 z = xy 。 简单起见 , 我们用 [x] 来表示(x1 +...+ xn ) 。 参与方都拥有共享的 [x]、[y] 和来自初始化阶段的三元组 [a]、[b]、[c](别忘了c = ab) 。 各参与方分别计算 [s] = [x] - [a] 和 [t] = [y] - [b] 。 由于 a 和 b 的值是由初始化设置统一选择的 , 因此 s 和 t 的值也是统一的 , 所以该过程不会泄漏任何关于 x 和 y 的信息 。 然后 , 这些参与方计算 [xy] = s[y] + t[x] + st ? [c] 。 此过程仅包括缩放和加/减法计算 , 因此可以由每个参与方在本地计算来获得共享的 [z] = [xy] 。
风险和优势:如上所述 , 这样一个初始化阶段的受攻击面极大 。 初始化阶段的输出必须保密 , 也就是说 , 在上面的乘法过程中 , 要注意如果一些持有 t 的参与方结盟 , 获得了所有参与方共享的 a1 , … , an , 那么他们就可以通过计算 [x] = [s] - [a] 算出秘密值 x 。 请注意 , 在此类初始化阶段中并不是只要做好保密就万事大吉了 , 我们还必须确保三元组都是正确的 , 也就是说 , ab 必须等于 c , 否则计算的输出就会出错 。 保护三元组不被泄漏以及不受到恶意参与方的影响是一项艰巨的任务 , 因此会给 MPC 协议带来巨大的成本 。 另一方面 , 由于初始化阶段已经输出了乘法三元组 , 因此协议的主阶段将变得非常快 。
存在对被信任的初始化阶段的替代方案么?
在最后 , 我们提及几种潜在的替代方案:
  1. (信任初始化等于是)一次性将大量的信任从系统中的在线阶段转移到了某个历史性的离线阶段 。 这引入了新的风险和安全漏洞 。 一种潜在的替代方案是使用一个永不停歇的初始化阶段 。 在此类机制中 , 存在一种不断可更新的 CRS 。 最近的一个案例是 SONIC 。
  2. 另一种方案是使用多次初始化来生成多个公共参考串 。 在这种方案中 , 我们只假设一部分设置是忠实完成的 。 参见 Groth and Ostrovsky 。


    推荐阅读