非交互 OT 协议

参考文献:

  1. Bellare M, Micali S. Non-interactive oblivious transfer and applications[C]//Conference on the Theory and Application of Cryptology. Springer, New York, NY, 1989: 547-557.
  2. Mu Y, Zhang J, Varadharajan V, et al. Robust non-interactive oblivious transfer[J]. IEEE Communications Letters, 2003, 7(4): 153-155.

Non-Interactive Oblivious Transfer

Blum, Feldman, Micali 最先提出了 non-interactive zero-knowledge,然后 Kian 证明可以将 theorem 编码后利用 OT 来实现 ZKP。在1989年,Bellare 和 Micali 给出了第一个实用的基于公钥加密的非交互 OT 协议。

DH-Based

非交互 OT 是两方协议。Alice 是发送方,Bob 是接收方。

确定一个 k k k比特的素数 p p p,令 g ∈ Z p ∗ g \in \mathbb Z_p^* gZp是生成元,再令 C ∈ Z p ∗ C \in \mathbb Z_p^* CZp是一个每个参与者都不知道它的 D l o g Dlog Dlog 的群元素。

  • 初始化阶段:

    1. Bob 随机选择 i ∈ { 0 , 1 } i \in \{0,1\} i{0,1},再随机选择 x i ∈ { 0 , ⋯   , p − 2 } x_i \in \{0,\cdots,p-2\} xi{0,,p2}

    2. 计算
      β i = g x i ,   β 1 − i = C ⋅ β i − 1 \beta_i = g^{x_i},\, \beta_{1-i} = C \cdot \beta_i^{-1} βi=gxi,β1i=Cβi1

    3. 公钥是 ( β 0 , β 1 ) (\beta_0,\beta_1) (β0,β1),私钥是 ( i , x i ) (i,x_i) (i,xi)

    4. Alice 可以检查 β 0 ⋅ β 1 = C \beta_0 \cdot \beta_1 = C β0β1=C,那么确信 Bob 至多掌握 1 1 1 D l o g Dlog Dlog,但不知道他掌握哪个 i i i

  • 发送阶段:

    1. Alice 拥有两个秘密比特, b 0 , b 1 ∈ { 0 , 1 } b_0,b_1 \in \{0,1\} b0,b1{0,1}

    2. Alice 挑选两个随机数 y 0 , y 1 ∈ { 0 , ⋯   , p − 2 } y_0,y_1 \in \{0,\cdots,p-2\} y0,y1{0,,p2},计算
      γ 0 = β 0 y 0 ,   γ 1 = β 1 y 1 \gamma_0 = \beta_0^{y_0},\, \gamma_1 = \beta_1^{y_1} γ0=β0y0,γ1=β1y1

      以及
      α 0 = g y 0 ,   α 1 = g y 1 \alpha_0 = g^{y_0},\, \alpha_1 = g^{y_1} α0=gy0,α1=gy1

    3. Alice 生成随机数 r 0 , r 1 ∈ { 0 , 1 } k r_0,r_1 \in \{0,1\}^k r0,r1{0,1}k,它们满足内积约束
      i n n e r ( γ 0 , r 0 ) = b 0 ,   i n n e r ( γ 1 , r 1 ) = b 1 inner(\gamma_0,r_0) = b_0,\, inner(\gamma_1,r_1) = b_1 inner(γ0,r0)=b0,inner(γ1,r1)=b1
      这其实是 Goldreich-Levin theorem 中的 Hard-core 谓词。

    4. Alice 将 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1)发送给 Bob

  • 接收阶段:

    1. Bob 接收到 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1),利用 ( i , x i ) (i,x_i) (i,xi)计算
      γ i = α i x i \gamma_i = \alpha_i^{x_i} γi=αixi

    2. Bob 计算 Hard-core
      b i = i n n e r ( γ i , r i ) b_i = inner(\gamma_i,r_i) bi=inner(γi,ri)

Generalize

不经意电路的定义如下:

在这里插入图片描述

我们定义一个电路 F F F
F ( s k , p k , r , s , i ) = ( { f 0 , f 1 } : σ ,   f i − 1 ) F(sk,pk,r,s,i) = (\{f_0,f_1\}:\sigma,\, f_i^{-1}) F(sk,pk,r,s,i)=({f0,f1}:σ,fi1)

  1. 输入:
    1. Center 的公私钥 ( s k , p k ) (sk,pk) (sk,pk) r r r是随机串
    2. Bob 的随机串 s s s,选择 i i i
  2. 输出:
    1. F F F根据掷硬币 s ⊕ r s \oplus r sr,生成随机的两个 trapdoor PRP ( f 0 , f 0 − 1 ) , ( f 1 , f 1 − 1 ) (f_0,f_0^{-1}),(f_1,f_1^{-1}) (f0,f01),(f1,f11)
    2. F F F计算 ( f 0 , f 1 ) (f_0,f_1) (f0,f1)的签名 σ \sigma σ,将 ( { f 0 , f 1 } : σ ,   f i − 1 ) (\{f_0,f_1\}:\sigma,\, f_i^{-1}) ({f0,f1}:σ,fi1)发送给 Bob
    3. Bob 验签,将 ( f 0 , f 1 ) (f_0,f_1) (f0,f1)作为公钥,将 f i − 1 f_i^{-1} fi1作为私钥
    4. Alice 获取 { f 0 , f 1 } : σ \{f_0,f_1\}:\sigma {f0,f1}:σ,然后验签(这无法抵抗 Center 和 Bob 的串通)

这样,Bob 就获得了两个 PRP,且他恰好知道其中一个的陷门。而 Alice 不知道 Bob 的 i i i的信息。

非交互 OT 协议的一般化:

  • 发送阶段:

    1. Alice 拥有两个秘密比特, b 0 , b 1 ∈ { 0 , 1 } b_0,b_1 \in \{0,1\} b0,b1{0,1}

    2. Alice 挑选两个随机数 γ 0 , γ 1 ∈ { 0 , 1 } k \gamma_0,\gamma_1 \in \{0,1\}^k γ0,γ1{0,1}k,计算
      α 0 = f 0 ( y 0 ) ,   α 1 = f 1 ( y 1 ) \alpha_0 = f_0(y_0),\, \alpha_1 = f_1(y_1) α0=f0(y0),α1=f1(y1)

    3. Alice 生成随机数 r 0 , r 1 ∈ { 0 , 1 } k r_0,r_1 \in \{0,1\}^k r0,r1{0,1}k,它们满足内积约束
      i n n e r ( γ 0 , r 0 ) = b 0 ,   i n n e r ( γ 1 , r 1 ) = b 1 inner(\gamma_0,r_0) = b_0,\, inner(\gamma_1,r_1) = b_1 inner(γ0,r0)=b0,inner(γ1,r1)=b1

    4. Alice 将 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1)发送给 Bob

  • 接收阶段:

    1. Bob 接收到 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1),利用 ( i , x i ) (i,x_i) (i,xi)计算
      γ i = f i − 1 ( α i ) \gamma_i = f_i^{-1}(\alpha_i) γi=fi1(αi)

    2. Bob 计算 Hard-core
      b i = i n n e r ( γ i , r i ) b_i = inner(\gamma_i,r_i) bi=inner(γi,ri)

OT Channel

实际中,我们需要利用 OT 协议传输大量比特信息。

在这里插入图片描述

现在我们可以用非交互 OT 来搭建 OT 信道

  1. Alice 调用 k k k次非交互 OT,向 Bob 发送一对随机串 ( s 0 , s 1 ) ∈ { 0 , 1 } k (s_0,s_1) \in \{0,1\}^k (s0,s1){0,1}k
  2. Bob 根据陷门 ( i , f i − 1 ) (i,f_i^{-1}) (i,fi1),接收到 s i s_i si,同时 Alice 不知道 Bob 得到了哪个随机串
  3. Alice 在信道 C 0 C_0 C0上传输比特流 c 0 = m 0 ⊕ G ( s 0 ) ∈ { 0 , 1 } ∗ c_0 = m_0 \oplus G(s_0) \in \{0,1\}^* c0=m0G(s0){0,1},在信道 C 1 C_1 C1上传输比特流 c 1 = m 1 ⊕ G ( s 1 ) ∈ { 0 , 1 } ∗ c_1 = m_1 \oplus G(s_1) \in \{0,1\}^* c1=m1G(s1){0,1},其中 G G G是 PRG
  4. Bob 对信道 C i C_i Ci的比特流解密,得到 m i = b i ⊕ G ( s i ) ∈ { 0 , 1 } ∗ m_i = b_i \oplus G(s_i) \in \{0,1\}^* mi=biG(si){0,1}

Non-Interactive ZKP

Hamiltonian cycle 问题是 NPC,因此任意的 NP statement T T T 对应的 witness 都可以转化为图 G = ( V , E ) G=(V,E) G=(V,E)上的哈密顿回路 { ( u i , v i ) } 1 n \{(u_i,v_i)\}_1^n {(ui,vi)}1n

协议如下:

  1. Alice 和 Bob 搭建起 OT Channels C = ( C 0 , C 1 ) C=(C_0,C_1) C=(C0,C1)
  2. Alice 随机选择一个点集 V V V的随机置换 π \pi π,使得图同构 G ′ = π ( G ) ≅ G G'=\pi(G) \cong G G=π(G)G,令 A ′ A' A G ′ G' G的邻接矩阵。然后执行
    1. 随机选择密钥 r r r,计算密文 y = E ( r , π ) y = E(r,\pi) y=E(r,π)
    2. 随机选择密钥 r i j r_{ij} rij,计算密文 y i j = E ( r , A i j ′ ) y_{ij} = E(r,A'_{ij}) yij=E(r,Aij)
    3. 利用普通信道发送这些密文 ( y , { y i j } ) (y,\{y_{ij}\}) (y,{yij})
    4. 随机掷硬币 b ∈ { 0 , 1 } b \in \{0,1\} b{0,1}
      1. b = 0 b=0 b=0,将 ( r , { r i j } ) (r,\{r_{ij}\}) (r,{rij}) C 0 C_0 C0发送,将 { r π ( u i ) π ( v i ) } 1 n \{r_{\pi{(u_i)}\pi{(v_i)}}\}_1^n {rπ(ui)π(vi)}1n C 1 C_1 C1发送
      2. b = 1 b=1 b=1,将 ( r , { r i j } ) (r,\{r_{ij}\}) (r,{rij}) C 1 C_1 C1发送,将 { r π ( u i ) π ( v i ) } 1 n \{r_{\pi{(u_i)}\pi{(v_i)}}\}_1^n {rπ(ui)π(vi)}1n C 0 C_0 C0发送
  3. Bob 从信道 C i C_i Ci中,要么得到 G ≅ G ′ G \cong G' GG,要么得到 G ′ G' G中的一条哈密顿回路
  4. Alice 和 Bob 搭建起(安全参数) k k k个独立的 OT Channels,重复上述过程 k k k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值