如何写好Simulation证明(二): 半诚实模型下MPC的定义
3. Secure Computation – Simulation for Semi-honest Adversaries
我们在这里考虑的模型是 static semi-honest 敌手下的两方安全计算. 这样的敌手能够在协议开始之前决定控制某一方, 并且需要按照协议的描述执行.
需要注意的是, 这是一个非常弱的假设. 如果敌手没有按照协议流程执行, 那就会打破这个协议, 比如以一种不随机的方式挑选随机带.
通常我们在设计MPC协议的时候, 设计半诚实敌手模型下的安全的协议是第一步. 设计这样的安全协议比设计恶意敌手模型下的安全协议要容易得多, 因为我们明确知道敌手会干嘛(以协议要求的方式运行).
3.1 半诚实敌手的安全性定义
两方安全计算. 假设两个人的输入分别为 \(x_1, x_2\), 在协议结束后他俩没人各自获得了一个函数值, 我们记作 \(f_1(x_1, x_2), f_2(x_1, x_2)\). 整个协议的functionality我们记作: \(f = (f_1, f_2)\).
模拟保护的隐私. 我们如何形式化地定义这里头的安全性?
这个形式化的定义意味着: 参与者不能从协议的执行过程获得任何其他的信息
有一个点需要我们注意, 由于参与者是半诚实的, 这保证了他们使用他们的 input tape 上面的字作为输入. 这很重要, 因为这保证了输出跟敌手是无关的. 举个例子, 如果输入是 \((x, y)\), 那么输出就是 \(f(x, y)\), simulator会得到这个值. 但是如果是malicious敌手, 情况就完全不一样, 因为恶意的敌手能够忽视input tape上面的字, 自己决定输入什么. (这与ZKP中的恶意verifier类似, 他可以忽略随机带的随机数, 自己任意的给出挑战.)
安全性定义. 在给出安全性定义之前, 我们先给出下面的符号:
- 协议 \(\pi\) 以 \((x, y)\) 为输入, 安全参数为 \(n\), 那么我们用 \(view^\pi_i(x, y, n)\) 表示第 \(i\) 个人的view. 具体来说 \(view^\pi_i(x, y, n) = (w, r^i; m^i_1, ... m^i_t)\). 其中 \(w \in \{x,y\}\), \(r\) 表示这个参与者的随机带, \(m\) 表示消息.
- 类似于view. 以 \((x, y)\) 为输入, 安全参数为 \(n\), 那么我们用 \(output^\pi_i(x, y, n)\) 表示第 \(i\) 个人的输出. 另外整个协议的输出表示为 \(output^\pi(x, y, n) = (output^\pi_1(x, y, n), output^\pi_2(x, y, n))\).
正式的安全性定义: \(f = (f_1, f_2)\) 是一个functionality. 在静态, 半诚实敌手模型下, 如果存在PPT的 \(S_1\), \(S_2\)满足下面两个式子, 我们就说协议 \(\pi\) 安全地计算了 \(f\).
其中 $x, y \in {0, 1}^*, |x|=|y|, n \in \mathbb N $.
Remarks. 我们介绍一下这个定义里simulation的逻辑. 比如在 \((1)\) 中, 这个模拟器 \(S_1\) 不需要另一参与者的输入和输出, 就能够 "看到(模拟出)" 拥有 \(x\) 的参与者在协议中所能看到的信息. 换句话说, 拥有 \(x\) 的参与者能从协议副本里获得的知识, 都能够由该参与者自己私密的输入输出获得. 相当于, 他没有学到关于 \(y, f_2(x,y)\) 的知识.
确定性函数 \(f\). 如果 \(f\) 是确定性的, 那么定义更简单, 满足下面两个等式.
其实很容易理解, 我们关注去掉的几项.
在确定性函数中, 由于没有随机性, 协议的输出一定严格等于函数的输出, 所以可以去掉.
(这里可能之后再补充细节一点.)
半诚实敌手模型中的triviality. 在这个模型下, 很多密码学原语是很好达到的. 因为他会按照协议的规定去做. 比如零知识是trivial的, 在这个协议中, Prover就给Verifier说: this is true. Verifier也会接受, 当然是不泄露任何信息的, 因为他啥也没说. 但是这个协议也是对的, 因为这是半诚实敌手模型. 再比如承诺方案. 承诺阶段, Commiter啥也不发, 打开阶段, Commiter把那个值发给Receiver. 显然是Perfect hiding的. 啥也不发当然1bit也不会泄露. 另外也是Perfect binding的, 因为他是半诚实的, 我们要求他打开的时候就会发那个特定的值. Coin tossing协议也是如此. 但是! 我们会看到, 即使在这种模型下, 两方一起计算简单的函数是non-trivial的.
附属信息. 在定义恶意敌手时, 我们需要会考虑 auxiliary input. 但其实定义中有一些附属信息, 比如我们考虑 non-uniform 的区分器, 这个区分器就是带附属信息的. 但是执行协议的敌手不需要附属信息, 因为我们考虑的是半诚实模型, 所以他们会按照协议的规定执行.