参考文献:
- 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.
- 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^* g∈Zp∗是生成元,再令 C ∈ Z p ∗ C \in \mathbb Z_p^* C∈Zp∗是一个每个参与者都不知道它的 D l o g Dlog Dlog 的群元素。
-
初始化阶段:
-
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,⋯,p−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,β1−i=C⋅βi−1 -
公钥是 ( β 0 , β 1 ) (\beta_0,\beta_1) (β0,β1),私钥是 ( i , x i ) (i,x_i) (i,xi)
-
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
-
-
发送阶段:
-
Alice 拥有两个秘密比特, b 0 , b 1 ∈ { 0 , 1 } b_0,b_1 \in \{0,1\} b0,b1∈{0,1}
-
Alice 挑选两个随机数 y 0 , y 1 ∈ { 0 , ⋯ , p − 2 } y_0,y_1 \in \{0,\cdots,p-2\} y0,y1∈{0,⋯,p−2},计算
γ 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 -
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 谓词。 -
Alice 将 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1)发送给 Bob
-
-
接收阶段:
-
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 -
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}:σ,fi−1)
- 输入:
- Center 的公私钥 ( s k , p k ) (sk,pk) (sk,pk), r r r是随机串
- Bob 的随机串 s s s,选择 i i i
- 输出:
- F F F根据掷硬币 s ⊕ r s \oplus r s⊕r,生成随机的两个 trapdoor PRP ( f 0 , f 0 − 1 ) , ( f 1 , f 1 − 1 ) (f_0,f_0^{-1}),(f_1,f_1^{-1}) (f0,f0−1),(f1,f1−1)
- 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}:σ,fi−1)发送给 Bob
- Bob 验签,将 ( f 0 , f 1 ) (f_0,f_1) (f0,f1)作为公钥,将 f i − 1 f_i^{-1} fi−1作为私钥
- Alice 获取 { f 0 , f 1 } : σ \{f_0,f_1\}:\sigma {f0,f1}:σ,然后验签(这无法抵抗 Center 和 Bob 的串通)
这样,Bob 就获得了两个 PRP,且他恰好知道其中一个的陷门。而 Alice 不知道 Bob 的 i i i的信息。
非交互 OT 协议的一般化:
-
发送阶段:
-
Alice 拥有两个秘密比特, b 0 , b 1 ∈ { 0 , 1 } b_0,b_1 \in \{0,1\} b0,b1∈{0,1}
-
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) -
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 -
Alice 将 ( α 0 , α 1 , r 0 , r 1 ) (\alpha_0,\alpha_1,r_0,r_1) (α0,α1,r0,r1)发送给 Bob
-
-
接收阶段:
-
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=fi−1(αi) -
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 信道:
- 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
- Bob 根据陷门 ( i , f i − 1 ) (i,f_i^{-1}) (i,fi−1),接收到 s i s_i si,同时 Alice 不知道 Bob 得到了哪个随机串
- 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=m0⊕G(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=m1⊕G(s1)∈{0,1}∗,其中 G G G是 PRG
- 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=bi⊕G(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
协议如下:
- Alice 和 Bob 搭建起 OT Channels C = ( C 0 , C 1 ) C=(C_0,C_1) C=(C0,C1)
- Alice 随机选择一个点集
V
V
V的随机置换
π
\pi
π,使得图同构
G
′
=
π
(
G
)
≅
G
G'=\pi(G) \cong G
G′=π(G)≅G,令
A
′
A'
A′是
G
′
G'
G′的邻接矩阵。然后执行
- 随机选择密钥 r r r,计算密文 y = E ( r , π ) y = E(r,\pi) y=E(r,π)
- 随机选择密钥 r i j r_{ij} rij,计算密文 y i j = E ( r , A i j ′ ) y_{ij} = E(r,A'_{ij}) yij=E(r,Aij′)
- 利用普通信道发送这些密文 ( y , { y i j } ) (y,\{y_{ij}\}) (y,{yij})
- 随机掷硬币
b
∈
{
0
,
1
}
b \in \{0,1\}
b∈{0,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发送
- 当 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发送
- Bob 从信道 C i C_i Ci中,要么得到 G ≅ G ′ G \cong G' G≅G′,要么得到 G ′ G' G′中的一条哈密顿回路
- Alice 和 Bob 搭建起(安全参数) k k k个独立的 OT Channels,重复上述过程 k k k次