定义
oblivious transfer(OT)是一个两方协议,输入的一方叫做发送者,产生两个等长的秘密
m
0
,
m
1
m_0,m_1
m0,m1,输出的一方叫做接收者。接收者输入一个bit b,返回给他
m
b
m_b
mb.发送者没有返回值。
(
O
T
1
2
)
(OT_{1}^{2})
(OT12)发送方有两个秘密,想将其中之一发给接收方,接收方得到了其中一个秘密,但是发送方不知道接收方收到了哪个秘密。
(
O
T
1
n
)
(OT_{1}^n)
(OT1n)发送方有n个秘密,想将其中之一发给接收方,接收方得到了其中一个秘密,但是发送方不知道接收方收到了哪个秘密。
平行执行k次
(
O
T
1
n
)
(OT_{1}^n)
(OT1n),叫做
O
T
k
n
OT_{k}^n
OTkn协议。
基本构造
生成一个循环群
G
:
Z
p
∗
G:Z_p^{*}
G:Zp∗,g是G的生成元。函数H是一个将G中的元素映射到一个与秘密m等长的比特串。令
b
∈
{
0
,
1
}
,
b
ˉ
=
1
−
b
b \in \{0,1\},\bar{b}=1-b
b∈{0,1},bˉ=1−b.
(
即
b
=
0
,
b
ˉ
=
1
;
b
=
1
,
b
ˉ
=
0
)
(即b=0,\bar{b}=1;b=1,\bar{b}=0)
(即b=0,bˉ=1;b=1,bˉ=0)
1.发送方产生随机数
c
←
G
c \leftarrow G
c←G,将其发送给接收方。
2.接收方随机选择
a
←
{
0
,
.
.
.
,
∣
G
∣
−
1
}
a \leftarrow \{0,...,|G|-1\}
a←{0,...,∣G∣−1},计算
h
b
=
g
a
,
h
b
ˉ
=
c
⋅
h
b
−
1
h_b=g^a,h_{\bar{b}}=c\cdot h_b^{-1}
hb=ga,hbˉ=c⋅hb−1,将
h
0
,
h
1
h_0,h_1
h0,h1发送给接收方
3.发送方检查
h
0
h
1
=
c
h_0 h_1=c
h0h1=c,失败则结束,正确则继续。随机产生
r
0
,
r
1
←
G
r_0,r_1\leftarrow G
r0,r1←G.计算
g
r
0
,
g
r
1
,
c
0
=
H
(
h
o
r
0
)
⨁
m
0
,
c
1
=
H
(
h
1
r
1
)
⨁
m
1
g^{r_0},g^{r_1},c_0=H(h_o^{r_0}) \bigoplus m_0,c_1=H(h_1^{r_1})\bigoplus m_1
gr0,gr1,c0=H(hor0)⨁m0,c1=H(h1r1)⨁m1,将这四个值发给接收者。
4.接收者计算
m
b
=
c
b
⨁
H
(
(
g
r
b
)
a
)
m_b=c_b \bigoplus H((g^{r_b})^a)
mb=cb⨁H((grb)a)
例子永远滴神:
1.发送方产生c
2.接收方产生随机数a。选择b=0.
h
0
=
g
a
,
h
1
=
c
⋅
h
0
−
1
h_0=g^a,h_{1}=c\cdot h_0^{-1}
h0=ga,h1=c⋅h0−1,发送给接收方
3.发送方检查
h
0
h
1
=
h
0
h
0
−
1
c
=
c
h_0 h_1=h_0 h_0^{-1}c=c
h0h1=h0h0−1c=c成立。计算
g
r
0
,
g
r
1
,
c
0
=
H
(
h
o
r
0
)
⨁
m
0
,
c
1
=
H
(
h
1
r
1
)
⨁
m
1
g^{r_0},g^{r_1},c_0=H(h_o^{r_0}) \bigoplus m_0,c_1=H(h_1^{r_1})\bigoplus m_1
gr0,gr1,c0=H(hor0)⨁m0,c1=H(h1r1)⨁m1
4.接收者计算
m
0
=
c
0
⨁
H
(
(
g
r
0
)
a
)
=
H
(
h
o
r
0
)
⨁
m
0
⨁
H
(
(
g
r
0
)
a
)
=
H
(
(
g
r
0
)
a
)
⨁
H
(
(
g
r
0
)
a
)
⨁
m
0
=
m
0
m_0=c_0 \bigoplus H((g^{r_0})^a)=H(h_o^{r_0}) \bigoplus m_0 \bigoplus H((g^{r_0})^a)= H((g^{r_0})^a) \bigoplus H((g^{r_0})^a)\bigoplus m_0=m_0
m0=c0⨁H((gr0)a)=H(hor0)⨁m0⨁H((gr0)a)=H((gr0)a)⨁H((gr0)a)⨁m0=m0
当用户选择了
b
=
0
b=0
b=0但是想去计算
m
1
m_1
m1时:我们看
c
1
=
H
(
h
1
r
1
)
⨁
m
1
=
H
(
(
c
⋅
h
0
−
1
)
r
1
)
⨁
m
1
c_1=H(h_1^{r_1})\bigoplus m_1=H((c \cdot h_0^{-1})^{r_1})\bigoplus m_1
c1=H(h1r1)⨁m1=H((c⋅h0−1)r1)⨁m1。即使用户能计算
(
c
⋅
h
0
−
1
)
(c \cdot h_0^{-1})
(c⋅h0−1),但是
r
1
r_1
r1是发送方随机选取的,这是一个CDH问题,所以不能恢复。