如何写好Simulation证明(三): 半诚实敌手模型下的OT

4. Oblivious Transfer for Semi-Honest Adversaries

在本文中, 我们将给出一个证明: 基于enhanced OWP, 构造一个半诚实敌手模型下的OT. 首先我们先介绍enhanced OWP概念.

4.1 Enhanced OWP.

对这个特殊的OWP我们先不做过多的解释, 我们先关注参数. 一般正式的定义中, 一个OWP具有四个算法: \((I, S, F, F^{-1})\).

\(I\): 这个算法是在一族函数中选择了出一个函数, 用index \(\alpha\) 表示, 还有他的陷门 \(\tau\).
\(S\): 这个算法是选定函数的定义域, 在定义域中选择一个值 \(x\).
\(F\): 正向计算 \(f_\alpha(x)\).
\(F^{-1}:\) 反向计算 \(f^{-1}_\alpha(y, \tau)\). 拥有陷门 \(\tau\) 才能反向计算.

4.2 协议构造

  • Input: \(P_1\) 拥有 \(b_0, b_1 \in \{0,1\}\), \(P_2\) 拥有 \(\sigma \in \{0,1\}\). 这两个人都有 \((I, S, F, F^{-1})\), 这些参数定义了一个enhanced trapdoor permutation, 以及其 hardcore predicate \(B\).
  1. \(P_1\) runs \(I(1^n)\), 获得 \((\alpha, \tau)\), 前者指定了一个enhanced OWP, 后者是其陷门. 把 \(\alpha\) 发送给 \(P_2\).
  2. \(P_2\) runs \(S(\alpha)\) twice. 第一个值记为 \(x_\sigma\), 第二个值记为 \(y_{1-\sigma}\). 计算 \(y_\sigma=f_\alpha(x_\sigma)\). 发送 \((y_0, y_1)\)\(P_1\).
  3. \(P_1\) 使用陷门, 计算出 \(y_0, y_1\) 对应的 \(x_0, x_1\). 并计算对应的hardcore, 之后拿想发送的两个值做上异或, 即: \(\beta_0=B(\alpha,x_0)\oplus b_0, \beta_1=B(\alpha,x_1)\oplus b_1\). 把 \((\beta_0, \beta_1)\) 发送给 \(P_2\).
  4. \(P_2\) 显然能够自己算出 \(b_\sigma\).

4.3 安全性证明

这个协议的正确性是显然的, 我们需要证明其安全性. 我们用MPC的定义去证.

Thm: 假设 \((I, S, F, F^{-1})\) 构成一族 enhanced OWP, 以及hardcore predicate \(B\). 那么在半诚实敌手的安全性假设下, 上述协议能够安全地计算 functionality $f((b_0, b_1), σ) = (λ, b_σ) $.

Proof: 根据之前的定义, 我们需要构造两个模拟器 \(S_1, S_2\) 分别模拟 \(P_1, P_2\) 的view.

Step 1: Construct \(S_1\).

因为我们的目的是构造的 \(S_1\) 产生的 view 与真实的不可区分, 所以我们要先想需要考虑哪些参数. \(S_1\) 的输出是 \(P_1\) 的输入 \((b_0, b_1)\) 和输出(无). 模拟view时, 需要考虑 \(P_1\) 的输入, 随机带, 接收到的消息. 构造如下:

\(S_1(1^n, b_0, b_1):\)

  1. Chooses a uniformly distributed random tape \(r\) for \(P_1;\) (后面运行 \(I\) 需要)
  2. \((\alpha, \tau) \leftarrow I(1^n, r);\)
  3. Run \(S(\alpha)\) twice independently to get \(y_0, y_1;\)
  4. Output: \(((b_0, b_1), r; (y_0, y_1));\)

下面去证明协议产生的 view 和真实世界的 view 不可区分. 其实很简单, 我们看一下只需要证明 \((y_0, y_1)\) 和真实世界中的 \((f_\alpha(x_\sigma), y_{1-\sigma})\) 相等就行. 这是因为OWP的映射是一对一的, 是保持分布的. 详细证明如下:

\(\sigma=0\) 时, \(\{(F(\alpha,x_0),y_1)\}\overset{{c}}{\equiv}\{(y_0,y_1)\};\)
\(\sigma=1\) 时, \(\{(y_0, F(\alpha,x_1))\}\overset{{c}}{\equiv}\{(y_0,y_1)\};\)

所以最终: \(\{{S}_1(1^n,(b_0,b_1))\}\overset{c}\equiv\{\text{view}_1^\pi((b_0,b_1),\sigma)\}\).

Step 2: Construct \(S_2\).

同样, 我们需要关注: 输入: \((\sigma)\), 输出: \((b_\sigma)\), view: \((r; \alpha, \beta_0, \beta_1)\). 在构造这个simulator的时候, 我们发现有一个困难, 因为不知道 \(b_{1-\sigma}\). 所以没法构造 \(\beta_{1-\sigma}\). 但是事实上是, 就当成是 \(0\) 就行. 具体构造如下:

\(S_2(1^n, \sigma, b_\sigma):\)

  1. Chooses uniformly distributed random tapes \(r_1, r_2\) for \(P_2;\) (后面运行 \(I,S\) 需要, 两个是因为运行两次 \(S\), 不过这是小问题)
  2. \((\alpha, \tau) \leftarrow I(1^n, r);\)
  3. \(x_\sigma \leftarrow S(\alpha; r_\sigma);\)
    \(y_{1-\sigma} \leftarrow S(\alpha, r_{1-\sigma});\)
    利用陷门计算出 \(x_{1-\sigma}\);
  4. \(β_σ = B(α, x_σ) ⊕ b_σ;\)
    \(β_{1-σ} = B(α, x_{1-σ});\)
  5. Output: \((σ, r_0, r_1; α, (β_0, β_1));\)

首先我们分析真实世界与模拟世界的不同(上面是真实世界):

\[\begin{align*} \text{view}_2^\pi((b_0,b_1),\sigma) &= \left(\sigma,r_0,r_1;\alpha,(B(\alpha,x_\sigma)\oplus b_\sigma,B(\alpha,x_{1-\sigma})\oplus b_{1-\sigma})\right); \\ {S}_2(1^n,\sigma,b_\sigma) &= \left(\sigma,r_0,r_1;\alpha,(B(\alpha,x_\sigma)\oplus b_\sigma,B(\alpha,x_{1-\sigma}))\right) \end{align*} \]

显然, 当 \(b_{1-\sigma}=0\) 时, \(\text{view}_2^\pi((b_0,b_1),\sigma) \equiv S_2(1^n,\sigma,b_\sigma)\).
所以我们需要考虑的是, 当 \(b_{1-\sigma}=1\) 时, 两个分布是不可区分的. 即:

\[\left(\sigma,r_0,r_1;\alpha,(B(\alpha,x_\sigma)\oplus b_\sigma,B(\alpha,x_{1-\sigma})\oplus 1 \right) \overset c \equiv \left(\sigma,r_0,r_1;\alpha,(B(\alpha,x_\sigma)\oplus b_\sigma,B(\alpha,x_{1-\sigma}))\right). \]

简化一下式子, (把 \(\alpha\) 去掉了).

\[\left(\sigma, r_0, r_1;(B(x_\sigma)\oplus b_\sigma,B(x_{1-\sigma})\oplus 1 \right) \overset c \equiv \left(\sigma,r_0,r_1;B(x_\sigma)\oplus b_\sigma,B(x_{1-\sigma}))\right). \]

假设存在nuPPT的敌手 \(D\), 能够以 \(1/p(n)\) 的概率区分上述分布, 即:

\[\begin{align}\Pr[D(\sigma,r_0,r_1; (B( x_\sigma)\oplus b_\sigma,B( x_{1-\sigma})))&=1]-\Pr[D(\sigma,r_0,r_1; (B( x_\sigma)\oplus b_\sigma,B( x_{1-\sigma})\oplus1))=1]\ge \frac{1}{p(n)}\end{align} \]

我们将构造一个nuPPT算法 \(A\), 能够猜出hardcore. (\(A\)\(\sigma, b_\sigma\) 的信息hardware到电路里)

\(A(r)\)(这里是随机带的意思)

  1. \(r_{1-\sigma} \leftarrow r;\)
  2. 随机选择 \(r_\sigma, x_\sigma=S(r_\sigma), β_σ = B( x_σ)⊕b_σ;\)
  3. 随机选择 \(\beta_{1-\sigma} \in \{0, 1\};\)
  4. \(c \leftarrow D((σ, r_0, r_1; (β_σ, β_{1−σ})));\)
  5. If \(c=1\), output \(β_{1−σ};\) else output \(1-β_{1−σ};\)

这个道理是这样的. \((1)\) 式是说, \(D\) 收到最后一项为 \(B( x_{1-\sigma})\) 时, 输出 \(1\) 的概率比接收到最后一项为 \(B( x_{1-\sigma}) \oplus 1\) 的概率显著得大. 所以当 \(D\) 输出 \(1\) 的时候, 我们就有理由猜测, \(D\) 接受到的最后一项为 \(B( x_{1-\sigma})\). 即 \(A\) 猜对了. 因为 这恰好就是 \(A\) 要猜的东西, 如果我给 \(D\) 的参数对了, 那么你输出 \(1\) 的概率会显著的大, 如果我给错了, 你输出 \(0\) 的概率会显著的大.

通过一些简单的转化, 我们可以证明:

\[\Pr[A(r) = B(f^{-1}(S(r)))] \geq \frac{1}{2} + \frac{1}{2p(n)}. \]

这和hardcore的性质矛盾, 所以 \(S_2\) 的输出和真实世界是不可区分的, 这下我们完成了 \(S_1\), \(S_2\) 的构造和证明, 所以安全性就证完了.

Discussion. 很多人看完这个协议会有疑问, 这个协议也得亏在半诚实模型下, 两个人能够按照协议流程走. 不然的话, 稍微自由点的 \(P_2\) 都能够在第 2 步自己选择 \(x_0, x_1\), 然后计算对应的 \(y\). 这样 \(P_2\) 能得到 \(b_0, b_1\) 两个值. 所以我们能够看到, 半诚实的模型其实啥也没保护.

所以总结一下, 在半诚实敌手模型下, 由于敌手会按照协议走, 所以我们构造的 simulator 不需要 rewind. 接下来我们会讲怎么对付ZK中的恶意 (malicious) 的 Verifier.

posted @ 2024-05-09 12:36  神龙小虾  阅读(113)  评论(0编辑  收藏  举报