茫然传输(OT)
茫然传输的概念是由Rabin提出的,Even、Goldreich和Lempel首次提出了1-out-of-2茫然传输的概念。由于茫然传输协议在安全多方计算等领域有着重要应用。Naor和Pinkas最早研究了抵抗自适应腐化者的OT传输协议。M.Green.S.Hohenberger等研究了UC安全的OT协议,不过这些协议基本随机预言模型或者基于一些非经典密码学困难性假设,这些协议对于实际应用而言仍然效率显低。
在OT拓展协议方面,不论是抵抗被动攻击者还是主动攻击者的OT拓展协议都取得了较大的进展。
Naor-Pinkas茫然传输协议
Naro和Pinkas通过三次公钥密码学操作实现了半诚实模型下的1-out-of-2茫然传输协议。
输入信息:发送者输入两个长度为
l
l
l比特的字符串
(
x
0
,
x
1
)
(x_{0},x_{1})
(x0,x1),接收者输入一个选择比特
r
r
r。
系统参数:设
q
q
q,
p
p
p均为素数,且满足
q
∣
p
−
1
q|p-1
q∣p−1。
Z
q
Z_{q}
Zq为
q
q
q阶群,
G
q
G_{q}
Gq是
Z
p
∗
Z_{p}^{*}
Zp∗的
q
q
q阶子群。给定
Z
p
∗
Z_{p}^{*}
Zp∗的生成元
g
g
g,满足
D
i
f
f
i
e
−
H
e
l
l
m
a
n
Diffie-Hellman
Diffie−Hellman困难性假设。
随机预言函数:
H
H
H
Step 1: 发送者生成并公布随机数 C ∈ Z q C \in {Z_q} C∈Zq,然后发送者生成随机数 a a a,并计算 g a g_{a} ga和 C a C_{a} Ca。
Step 2: 接收者选择随机数 1 ⩽ k ⩽ q 1 \leqslant k \leqslant q 1⩽k⩽q,并生成公钥 p k r pk_{r} pkr, p k 1 − r = C / g k pk_{1-r}=C/g_{k} pk1−r=C/gk,接收者将 p k 0 pk_{0} pk0发送给发送者。
Step 3: 发送者计算
(
p
k
0
)
a
(pk_0)^{a}
(pk0)a,
(
p
k
1
)
a
=
C
a
/
(
p
k
0
)
a
(pk_1)^{a}=C_{a}/(pk_{0})^{a}
(pk1)a=Ca/(pk0)a。发送者执行加密计算,并将加密结果
(
E
0
,
E
1
)
(E_0,E_1)
(E0,E1)发送给接收者。
E
0
=
(
g
a
,
H
(
(
p
k
0
)
a
,
0
)
⊕
x
0
)
E
1
=
(
g
a
,
H
(
(
p
k
1
)
a
,
1
)
⊕
x
1
)
{E_0} = ({g_a},H({(p{k_0})^a},0) \oplus {x_0})\\{E_1} = ({g_a},H({(p{k_1})^a},1) \oplus {x_1})
E0=(ga,H((pk0)a,0)⊕x0)E1=(ga,H((pk1)a,1)⊕x1)
Step 4:接收者计算 H ( ( p k r ) a ) = H ( ( g a ) k ) H((pk_{r})^{a})=H((g_a)^k) H((pkr)a)=H((ga)k),然后计算 x r x_{r} xr。
x r = E r , 2 ⊕ H ( ( p k r ) a , r ) {x_r} = {E_{r,2}} \oplus H({(p{k_r})^a},r) xr=Er,2⊕H((pkr)a,r)
其中, E r , 2 E_{r,2} Er,2表示 E r E_{r} Er的第二个元素。
IKN茫然传输协议
Ishai等人提出的茫然传输扩展协议可以将一个 O T l m OT_{l}^{m} OTlm协议首先转化为调用一次 O T m λ OT_{m}^{\lambda } OTmλ协议,然后将 O T m λ OT_{m}^{\lambda} OTmλ协议转化为调用 λ \lambda λ次 O T m λ OT_{m}^{\lambda} OTmλ协议。其中, λ \lambda λ表示系统安全参数。 M i M_i Mi, M j M_j Mj分别表示矩阵M的第 i i i列和第 j j j行, S S S与 R R R分别表示发送者和接收者。
子协议1:
O
T
l
m
OT_{l}^{m}
OTlm转换为
O
T
m
λ
OT_{m}^{\lambda}
OTmλ
输入信息:S的输入信息是m对长度
l
l
l比特字符串
(
x
j
,
0
,
x
j
,
1
)
(x_{j,0},x_{j,1})
(xj,0,xj,1),其中,
1
⩽
k
⩽
m
1 \leqslant k \leqslant m
1⩽k⩽m;
R
R
R的输入是m个选择比特
r
=
(
r
1
,
…
r
m
)
r=(r_{1},…r_{m})
r=(r1,…rm)。
随机预言函数:
H
[
m
]
×
H[m]×
H[m]×{0,1}
k
→
_{k}→
k→{0,1}
l
_{l}
l。
系统参数:安全参数
λ
\lambda
λ。
步骤1:S生成随机向量
s
∈
{
0
,
1
}
λ
s \in {\{ 0,1\} _\lambda }
s∈{0,1}λ,
R
R
R生成一个
m
×
λ
m×\lambda
m×λ的随机矩阵
T
T
T。
步骤2:参与者调用
O
T
m
λ
OT_{m}^{\lambda}
OTmλ协议。在这个协议中,S扮演输入为s的接收者,
R
R
R扮演输入为
(
t
i
,
r
⊕
t
i
)
(t_{i},r\oplus t_{i})
(ti,r⊕ti)的发送者,其中
1
⩽
i
⩽
λ
1 \leqslant i \leqslant \lambda
1⩽i⩽λ。
步骤3:令
Q
Q
Q代表
S
S
S在步骤2中接收到的
m
×
λ
m×\lambda
m×λ的矩阵,即
q
i
=
(
s
i
,
r
)
⊕
t
i
{q_i} = ({s_i},r) \oplus {t_i}
qi=(si,r)⊕ti,
q
j
=
(
r
j
∗
s
)
⊕
t
j
{q_j} = ({r_{j}*s}) \oplus {t_j}
qj=(rj∗s)⊕tj。对于
1
⩽
j
⩽
m
1 \leqslant j \leqslant m
1⩽j⩽m, S 向R发送
y
j
,
0
=
x
j
,
0
⊕
H
(
j
,
q
j
)
y_{j,0}=x_{j,0} \oplus H(j,q_{j})
yj,0=xj,0⊕H(j,qj),
y
j
,
1
=
x
j
,
1
⊕
H
(
j
,
q
j
⊕
s
)
y_{j,1}=x_{j,1} \oplus H(j,q_{j} \oplus s)
yj,1=xj,1⊕H(j,qj⊕s)。
步骤4:对于
1
⩽
j
⩽
m
1 \leqslant j \leqslant m
1⩽j⩽m ,
R
R
R 输出
z
j
=
y
i
,
r
⊕
H
(
j
,
t
j
)
{z_j} = {y_{i,r}} \oplus H(j,{t_j})
zj=yi,r⊕H(j,tj)。
子协议2:
O
T
m
λ
OT_{m}^{\lambda}
OTmλ转换为
O
T
λ
λ
OT_{\lambda}^{\lambda}
OTλλ
输入信息:
S
S
S的输入信息是
λ
\lambda
λ对长度为
m
m
m比特的字符串
(
x
i
,
0
,
x
i
,
1
)
(x_{i,0},x_{i,1})
(xi,0,xi,1)。其中
1
⩽
i
⩽
λ
1\leqslant i \leqslant \lambda
1⩽i⩽λ;
R
R
R的输入是
λ
\lambda
λ个选择比特
r
=
(
r
1
,
r
2
…
,
r
λ
)
r=(r_{1},r_{2}…,r_{\lambda})
r=(r1,r2…,rλ)。
系统参数:安全参数
λ
\lambda
λ。
随机预言函数:一个伪随机数生成器
G
:
G:
G:{0,1}
λ
_{\lambda}
λ
→
\to
→{0,1}
m
_{m}
m。
步骤1:S随机生成
λ
\lambda
λ对
k
k
k比特的字符串
(
s
i
,
0
,
s
i
,
1
)
(s_{i,0},s_{i,1})
(si,0,si,1).
步骤2:参与者调用
O
T
λ
λ
OT^{\lambda}_{\lambda}
OTλλ协议。在这个协议中,
S
S
S扮演输入为
(
s
i
,
0
,
s
i
,
1
)
(s_{i,0},s_{i,1})
(si,0,si,1)的发送者,
R
R
R扮演输入为
r
r
r的接收者,其中
1
⩽
i
⩽
λ
1 \leqslant i \leqslant \lambda
1⩽i⩽λ。
步骤3:对于
1
⩽
i
⩽
λ
1 \leqslant i \leqslant \lambda
1⩽i⩽λ,
S
S
S向
R
R
R发送
y
j
,
0
y_{j,0}
yj,0和
y
j
,
1
y_{j,1}
yj,1,其中
y
i
,
b
=
x
i
,
b
⊕
G
(
s
i
,
r
i
)
y_{i,b}=x_{i,b} \oplus G(s_{i,r_{i}})
yi,b=xi,b⊕G(si,ri)。
上述协议的调用的
O
T
λ
λ
OT^{\lambda}_{\lambda}
OTλλ协议可以通过调用
λ
\lambda
λ次
O
T
λ
1
OT^{1}_{\lambda}
OTλ1协议实现。
子协议3:
O
T
l
m
OT_{l}^{m}
OTlm转换为
O
T
λ
λ
OT_{\lambda}^{\lambda}
OTλλ
输入信息:
S
S
S的输入信息是
m
m
m对长度为
l
l
l比特的字符串
(
x
j
,
0
,
x
j
,
1
)
(x_{j,0},x_{j,1})
(xj,0,xj,1),其中
1
⩽
j
⩽
m
1 \leqslant j \leqslant m
1⩽j⩽m。
R
R
R的输入是
m
m
m个选择比特
r
=
(
r
1
,
…
r
m
)
r=(r_{1},…r_{m})
r=(r1,…rm)。
系统参数:安全参数
λ
\lambda
λ>
随机预言函数:
H
:
[
m
]
×
0
,
1
λ
→
H:[m]×{0,1}_{\lambda} \to
H:[m]×0,1λ→ {0,1}
l
_{l}
l。
伪随机数生成器:
G
:
0
,
1
λ
→
0
,
1
m
G:{0,1}_{\lambda} \to {0,1}_{m}
G:0,1λ→0,1m。
步骤1:
R
R
R生成随机字符串对
(
k
j
,
0
,
k
j
,
1
)
∈
{
0
,
1
}
2
λ
({k_{j,0}},{k_{j,1}}) \in {\{ 0,1\} _{2\lambda }}
(kj,0,kj,1)∈{0,1}2λ,
1
⩽
j
⩽
m
1 \leqslant j \leqslant m
1⩽j⩽m。
S
S
S生成随机向量s
∈
{
0
,
1
}
λ
\in {\{ 0,1\} _\lambda }
∈{0,1}λ。
S
S
S和
R
R
R执行
O
T
λ
λ
OT^{\lambda}_{\lambda}
OTλλ,其中
S
S
S扮演接收者,
R
R
R扮演发送者。协议结束后,
S
S
S获得
k
j
,
s
j
k_{j,s_{j}}
kj,sj,
1
⩽
j
⩽
λ
1 \leqslant j \leqslant \lambda
1⩽j⩽λ。
步骤2:
R
R
R生成一个
m
×
m \times
m×
λ
\lambda
λ的随机比特矩阵
T
T
T,计算
v
j
,
0
=
t
j
⊕
G
(
k
j
,
0
)
v_{j,0}=t_{j} \oplus G(k_{j,0})
vj,0=tj⊕G(kj,0),
v
j
,
1
=
t
j
⊕
G
(
k
j
,
1
⊕
r
)
v_{j,1}=t_{j} \oplus G(k_{j,1} \oplus r)
vj,1=tj⊕G(kj,1⊕r),并将
v
j
,
0
,
v
j
,
1
v_{j,0},v_{j,1}
vj,0,vj,1发送给
S
S
S,
1
⩽
j
⩽
λ
1 \leqslant j \leqslant \lambda
1⩽j⩽λ。
步骤3:
S
S
S生成
m
×
λ
m \times\lambda
m×λ的矩阵
Q
Q
Q,其中
q
j
=
v
j
,
s
j
⊕
G
(
k
j
,
s
j
)
q^{j}=v_{j,s_{j}} \oplus G(k_{j,s_{j}})
qj=vj,sj⊕G(kj,sj),
1
⩽
j
⩽
λ
1 \leqslant j \leqslant \lambda
1⩽j⩽λ。
S
S
S计算
y
i
,
0
=
x
i
,
0
⊕
H
(
q
i
)
y_{i,0}=x_{i,0} \oplus H(q_{i})
yi,0=xi,0⊕H(qi),
y
i
,
1
=
x
i
,
1
⊕
H
(
q
i
⊕
s
)
y_{i,1}=x_{i,1} \oplus H(q_{i} \oplus s)
yi,1=xi,1⊕H(qi⊕s),并将
(
y
i
.
0
,
y
i
,
1
)
(y_{i.0},y_{i,1})
(yi.0,yi,1)发送给
R
R
R,
1
⩽
i
⩽
m
1 \leqslant i \leqslant m
1⩽i⩽m。
步骤4:对于
1
⩽
j
⩽
m
1 \leqslant j \leqslant m
1⩽j⩽m,
R
R
R输出
z
j
=
y
i
,
r
j
⊕
H
(
t
j
)
z_{j}=y_{i,r_{j}} \oplus H(t_{j})
zj=yi,rj⊕H(tj)。
字协议3中,
R
R
R共调用
m
m
m次
H
H
H,
2
λ
2\lambda
2λ次
G
G
G,发送数据
2
m
λ
2m\lambda
2mλ比特;
S
S
S共调用
2
m
2m
2m次
H
H
H,
λ
\lambda
λ次
G
G
G,发送数据
2
m
l
2ml
2ml比特。当
λ
=
m
\lambda=m
λ=m时,
O
T
λ
λ
OT^{\lambda}_{\lambda}
OTλλ的消耗可以忽略不计。