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

4. Oblivious Transfer for Semi-Honest Adversaries

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

4.1 Enhanced OWP.

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

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

4.2 协议构造

  • Input: P1 拥有 b0,b1{0,1}, P2 拥有 σ{0,1}. 这两个人都有 (I,S,F,F1), 这些参数定义了一个enhanced trapdoor permutation, 以及其 hardcore predicate B.
  1. P1 runs I(1n), 获得 (α,τ), 前者指定了一个enhanced OWP, 后者是其陷门. 把 α 发送给 P2.
  2. P2 runs S(α) twice. 第一个值记为 xσ, 第二个值记为 y1σ. 计算 yσ=fα(xσ). 发送 (y0,y1)P1.
  3. P1 使用陷门, 计算出 y0,y1 对应的 x0,x1. 并计算对应的hardcore, 之后拿想发送的两个值做上异或, 即: β0=B(α,x0)b0,β1=B(α,x1)b1. 把 (β0,β1) 发送给 P2.
  4. P2 显然能够自己算出 bσ.

4.3 安全性证明

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

Thm: 假设 (I,S,F,F1) 构成一族 enhanced OWP, 以及hardcore predicate B. 那么在半诚实敌手的安全性假设下, 上述协议能够安全地计算 functionality f((b0,b1),σ)=(λ,bσ).

Proof: 根据之前的定义, 我们需要构造两个模拟器 S1,S2 分别模拟 P1,P2 的view.

Step 1: Construct S1.

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

S1(1n,b0,b1):

  1. Chooses a uniformly distributed random tape r for P1; (后面运行 I 需要)
  2. (α,τ)I(1n,r);
  3. Run S(α) twice independently to get y0,y1;
  4. Output: ((b0,b1),r;(y0,y1));

下面去证明协议产生的 view 和真实世界的 view 不可区分. 其实很简单, 我们看一下只需要证明 (y0,y1) 和真实世界中的 (fα(xσ),y1σ) 相等就行. 这是因为OWP的映射是一对一的, 是保持分布的. 详细证明如下:

σ=0 时, {(F(α,x0),y1)}c{(y0,y1)};
σ=1 时, {(y0,F(α,x1))}c{(y0,y1)};

所以最终: {S1(1n,(b0,b1))}c{view1π((b0,b1),σ)}.

Step 2: Construct S2.

同样, 我们需要关注: 输入: (σ), 输出: (bσ), view: (r;α,β0,β1). 在构造这个simulator的时候, 我们发现有一个困难, 因为不知道 b1σ. 所以没法构造 β1σ. 但是事实上是, 就当成是 0 就行. 具体构造如下:

S2(1n,σ,bσ):

  1. Chooses uniformly distributed random tapes r1,r2 for P2; (后面运行 I,S 需要, 两个是因为运行两次 S, 不过这是小问题)
  2. (α,τ)I(1n,r);
  3. xσS(α;rσ);
    y1σS(α,r1σ);
    利用陷门计算出 x1σ;
  4. βσ=B(α,xσ)bσ;
    β1σ=B(α,x1σ);
  5. Output: (σ,r0,r1;α,(β0,β1));

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

view2π((b0,b1),σ)=(σ,r0,r1;α,(B(α,xσ)bσ,B(α,x1σ)b1σ));S2(1n,σ,bσ)=(σ,r0,r1;α,(B(α,xσ)bσ,B(α,x1σ)))

显然, 当 b1σ=0 时, view2π((b0,b1),σ)S2(1n,σ,bσ).
所以我们需要考虑的是, 当 b1σ=1 时, 两个分布是不可区分的. 即:

(σ,r0,r1;α,(B(α,xσ)bσ,B(α,x1σ)1)c(σ,r0,r1;α,(B(α,xσ)bσ,B(α,x1σ))).

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

(σ,r0,r1;(B(xσ)bσ,B(x1σ)1)c(σ,r0,r1;B(xσ)bσ,B(x1σ))).

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

(1)Pr[D(σ,r0,r1;(B(xσ)bσ,B(x1σ)))=1]Pr[D(σ,r0,r1;(B(xσ)bσ,B(x1σ)1))=1]1p(n)

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

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

  1. r1σr;
  2. 随机选择 rσ,xσ=S(rσ),βσ=B(xσ)bσ;
  3. 随机选择 β1σ{0,1};
  4. cD((σ,r0,r1;(βσ,β1σ)));
  5. If c=1, output β1σ; else output 1β1σ;

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

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

Pr[A(r)=B(f1(S(r)))]12+12p(n).

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

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

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

posted @   神龙小虾  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示