转自
1-out-2 OT
Oblivious Transfer(茫然传输)简称OT,是一种基本密码学原语,被广泛的用于安全多方计算等领域。 OT最早在1981年被 Michael O. Rabin提出[1],在Rabin的OT协议中,发送者S发送一个信息m给接收者R,接收者R以1/2的概率接受信息m。所以在协议交互的结束的时候,S并不知道R是否接受了消息。该方案是基于RSA加密体系构造的。 1985年S. Even, O. Goldreich, and A. Lempel提出了1-out-2 OT[2],在新的方案中S每次发送2个信息
m
0
m_0
m 0 和
m
1
m_1
m 1 ,而R每次输入一个选择b。当协议结束的时候,S无法获得关于b的任何有价值的信息,而R只能获得
m
b
m_b
m b ,对于
m
1
−
b
m_{1-b}
m 1 − b ,R也一无所知。 1988年,Claude Crépeau 证明了Rabin的OT方案和1-out-2 OT方案是等价的[3]。
1-out-n OT
而在1986年Brassard等人首次将1-out-2 OT扩展为1-out-n OT[4],1998年Stern J P.首次将公钥特性加入了1-out-n OT协议之中[5]。 2001年Naor和Pinkas基于Diffie-Hellamn(DDH)困难问题假设给出了一个高效的2轮1-out-n OT协议[6],同一年Aiello等人基于同态加密也给出了一个2轮的1-out-n OT协议[7],并且在该方案中无论n多大,R只需要进行2次指数运算而S则需要2n 2n2n次指数运算。 2003年Yuval Ishai等人以1-out-2 OT为基础提出了一种高效的通过少量OT构造大量OT的方案,该方案基于随机神谕机构造[8]。 2008年,Lindell将cut-and-choose技术融入到OT协议中,给出了一个高效而且可以完全模拟的OT协议[9]。 2013年,Vladimir Kolesnikov1 和 Ranjit Kumaresan直接构造了1-out-n OT[19],并且对于短消息的茫然传输效率比03年Yuval Ishai等人的方案更高。
浅见
在入门阶段,可以粗略看一下2000年之前的文章对于OT的起源和初始的想法有大体的了解。 对于[6] 和[7]的两篇文章可以着重看一下,其中对于安全性的证明和复杂性的分析是比较符合中等水平的要求的。 2003年和2013年的两篇论文可以对比看一下,很有意义也就很有意思。 2008年的论文作者Lindell是个大佬,牛到可以写算法导论那种等级著作的大佬,他在大作中的安全性证明不是写给一般水平玩家看的。 除此之外,还可以看一下Dan Bone的书[]中关于OT部分的介绍,比较浅显容易理解。
参考文献 [1]Michael O. Rabin. “How to exchange secrets by oblivious transfer.” [2]S. Even, O. Goldreich, and A. Lempel, “A Randomized Protocol for Signing Contracts.” [3]Claude Crépeau. “Equivalence between two flavours of oblivious transfer.” [4]Gilles Brassard, Claude Crépeau and Jean-Marc Robert. “All-or-nothing disclosure of secrets.” [5]Stern J P. “A New and Efficient All-Or-Nothing Disclosure of Secrets Protocol.” [6]Moni Naor and Benny Pinkas. “Efficient oblivious transfer protocols.” [7]Bill Aiello, Yuval Ishai, and Omer Reingold. “Priced Oblivious Transfer:How to Sell Digital Goods.” [8]Ishai Y., Kilian J., Nissim K., Petrank E. “Extending Oblivious Transfers Efficiently.” [9]Lindell Y. “Efficient Fully-Simulatable Oblivious Transfer.” [10]Vladimir Kolesnikov and Ranjit Kumaresan. “Improved OT Extension for Transferring Short Secrets.”
敌手模型
半诚实(Semi-Honest)模型
假设参与计算的各方都是半诚实的,即参与方可以保留交互时得到的信息。对于想要协作完成计算并得到正确结果的参与方来说,这样的模型符合实际情况。
半诚实模型的敌手行为时被动的,它只是收集信息,这些信息可能用于以后的分析以图得到私有信息。
恶意(Malicious)模型
相对于半诚实模型,恶意的敌手拥有更主动的行为:
它可以拒绝参与协议的执行
可以用任意值来替换它的输入
可以在任意时间终止执行
Naor-Pinkas茫然传输协议
Naor和Pinkas通过三次公钥密码学 操作实现了半诚实模型 下的1-out-of-2茫然传输协议。 输入信息:
Sender输入两个长度为l比特的字符串
(
x
0
,
x
1
)
(x_0, x_1)
( x 0 , x 1 )
Receiver输入一个选择比特r,用于选择
(
x
0
,
x
1
)
(x_0, x_1)
( x 0 , x 1 ) 中的其中一个
系统参数:
p,q均为素数,且q|p-1
Z
q
Z_q
Z q 为q阶群,
G
q
G_q
G q 是
Z
p
∗
Z_p^*
Z p ∗ 的q阶子群
给定
Z
p
∗
Z_p^*
Z p ∗ 的生成元g,满足Diffie-Hellman困难性假设
随机预言函数:
协议:
步骤1 S发送并公布随机数
C
∈
Z
q
C \in Z_q
C ∈ Z q ,然后S生成随机数a,并计算
g
a
g^a
g a 和
C
a
C^a
C a 。
步骤2 R选择随机数
1
≤
k
≤
q
1 \le k \le q
1 ≤ k ≤ q ,并生成公钥
p
k
r
=
g
k
{pk}_r=g^k
p k r = g k ,
p
k
1
−
r
=
C
/
g
k
{pk}_{1-r}=C/g^k
p k 1 − r = C / g k ,R将
p
k
0
{pk}_0
p k 0 发送给S。
步骤3 S计算
(
p
k
0
)
a
({pk}_0)^a
( p k 0 ) a ,
(
p
k
1
)
a
=
C
a
/
(
p
k
0
)
a
({pk}_1)^a=C^a/({pk}_0)^a
( p k 1 ) a = C a / ( p k 0 ) a 。Sender将
(
E
0
,
E
1
)
(E_0, E_1)
( E 0 , E 1 ) 发送给Receiver。
E
0
=
(
g
a
,
H
(
(
p
k
0
)
a
)
⊕
x
0
)
E_0=(g^a, H(({pk}_0)^a)\oplus x_0)
E 0 = ( g a , H ( ( p k 0 ) a ) ⊕ x 0 ) ,
E
1
=
(
g
a
,
H
(
(
p
k
1
)
a
)
⊕
x
1
)
E_1=(g^a, H(({pk}_1)^a)\oplus x_1)
E 1 = ( g a , H ( ( p k 1 ) a ) ⊕ x 1 )
步骤4 Receiver通过计算
H
(
(
g
a
)
k
)
H((g^a)^k)
H ( ( g a ) k ) 得到
H
(
(
p
k
r
)
a
)
H(({pk}_r)^a)
H ( ( p k r ) a ) ,因此可以得到
x
r
=
E
r
,
2
⊕
H
(
(
p
k
r
)
a
)
x_r=E_{r,2}\oplus H(({pk}_r)^a)
x r = E r , 2 ⊕ H ( ( p k r ) a )
扩展OT(OT Extension)
相对于对称密码学,基于数论中各种困难性假设的公钥密码学操作的算法复杂度更高。因此,在平时密文传输信息的过程中,通信双方都会先进行基于公钥密码学的密钥交换协议得到一个通信的对称密钥加密传输信息。
扩展OT的思路也一样。虽然这种方法没有完全抛弃公钥密码学操作,但是已经将公钥密码学操作的数量降低到很少。如,扩展OT可以将
O
T
l
m
OT_l^m
O T l m 归约到使用少量基于公钥密码的
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ 和若干对称密码学操作,其中
λ
<
<
m
\lambda <<m
λ < < m 。通常情况下,
λ
\lambda
λ 可以取为80,128或更多。注意
λ
\lambda
λ 不能太小,因为其通常作为安全性参数。
使用公钥密码学操作产生少量种子OT
利用堆成密码学操作(如PRG,哈希函数等)将这些种子OT协议扩展为任意数量的OT协力。
IKN茫然传输协议
Yuval Ishai等人提出的IKN茫然传输扩展协议,其中
λ
\lambda
λ 为安全参数
1次
O
T
l
m
OT_l^m
O T l m 协议->1次
O
T
m
λ
OT_m^{\lambda}
O T m λ 协议
1次
O
T
m
λ
OT_m^{\lambda}
O T m λ 协议->
λ
\lambda
λ 次
O
T
λ
1
OT_{\lambda}^1
O T λ 1 协议。
注:下面展示Extending OT with a Semi-Honest Receiver
Part1:
O
T
l
m
OT_l^m
O T l m ->
O
T
m
λ
OT_m^{\lambda}
O T m λ
输入信息:
Sender有m对输入
(
x
j
,
0
,
x
j
,
1
)
(x_{j,0},x_{j,1})
( x j , 0 , x j , 1 ) ;
x
x
x 的长度为
l
l
l 位,
1
≤
j
≤
m
1 \le j \le m
1 ≤ j ≤ m 。
Receiver有m个输入选择比特
r
=
(
r
1
,
r
2
,
.
.
.
,
r
m
)
\textbf{r}=(r_1, r2, ..., r_m)
r = ( r 1 , r 2 , . . . , r m ) 。
系统参数:
随机预言函数:
H
:
[
m
]
×
{
0
,
1
}
λ
→
{
0
,
1
}
l
\textbf{H}:[m]\times {\{0,1\}}^{\lambda}\rightarrow {\{0,1\}}^l
H : [ m ] × { 0 , 1 } λ → { 0 , 1 } l
协议:
S初始化一个随机向量
s
∈
{
0
,
1
}
λ
\textbf{s} \in {\{0,1\}}^{\lambda}
s ∈ { 0 , 1 } λ
R初始化一个
m
×
λ
m\times \lambda
m × λ 的随机矩阵
T
\textbf{T}
T ,其中
t
i
\textbf{t}^i
t i 代表
T
\textbf{T}
T 的第i列,
t
i
\textbf{t}_i
t i 代表
T
\textbf{T}
T 的第i行。
进行
O
T
m
λ
OT_m^{\lambda}
O T m λ 协议,在该协议中发送者为R而接收者为S,分别记为
R
S
R_S
R S 及
S
R
S_R
S R 。
R
S
R_S
R S 有
λ
\lambda
λ 对输入
(
t
i
,
r
⊕
t
i
)
(\textbf{t}^i,\textbf{r}\oplus \textbf{t}^i)
( t i , r ⊕ t i )
S
R
S_R
S R 有
λ
\lambda
λ 个输入选择比特
s
\textbf{s}
s
S
R
S_R
S R 得到一个
m
×
λ
m\times \lambda
m × λ 的矩阵
Q
\textbf{Q}
Q
S,即
S
R
S_R
S R ,发送m对
(
y
j
,
0
,
y
j
,
1
)
(y_{j, 0}, y_{j, 1})
( y j , 0 , y j , 1 ) 给R,其中
y
j
,
0
=
x
j
,
0
⊕
H
(
j
,
q
j
)
y_{j,0}=x_{j,0}\oplus H(j, \textbf{q}_j)
y j , 0 = x j , 0 ⊕ H ( j , q j ) ;
y
j
,
1
=
x
j
,
1
⊕
H
(
j
,
q
j
⊕
s
)
y_{j,1}=x_{j,1}\oplus H(j,\textbf{q}_j \oplus \textbf{s})
y j , 1 = x j , 1 ⊕ H ( j , q j ⊕ s ) ;
1
≤
j
≤
m
1\le j\le m
1 ≤ j ≤ m
q
j
=
(
s
j
⋅
r
j
)
⊕
t
j
=
{
t
j
r
j
=
0
s
j
⊕
t
j
r
j
=
1
\textbf{q}_j=(\textbf{s}_j \cdot \textbf{r}_j)\oplus \textbf{t}_j=\left\{ \begin{aligned} t_j && {r_j=0}\\ s_j\oplus t_j && {r_j=1}\\ \end{aligned} \right.
q j = ( s j ⋅ r j ) ⊕ t j = { t j s j ⊕ t j r j = 0 r j = 1
R计算m个输出
z
j
=
y
j
,
r
j
⊕
H
(
j
,
t
j
)
z_j=y_{j, r_j}\oplus H(j,\textbf{t}_j)
z j = y j , r j ⊕ H ( j , t j ) ;其中,
z
j
=
x
j
,
r
j
z_j=x_{j,r_j}
z j = x j , r j ,
1
≤
j
≤
m
1\le j\le m
1 ≤ j ≤ m
重点分析4,5步
当
r
j
=
0
r_j=0
r j = 0 时,R收到
y
j
,
0
=
x
j
,
0
⊕
H
(
j
,
t
j
)
y_{j,0}=x_{j,0}\oplus H(j, t_j)
y j , 0 = x j , 0 ⊕ H ( j , t j ) 以及
y
j
,
1
=
x
j
,
1
⊕
H
(
j
,
t
j
⊕
s
)
y_{j,1}=x_{j,1}\oplus H(j, t_j\oplus s)
y j , 1 = x j , 1 ⊕ H ( j , t j ⊕ s ) ,而R只能解开
x
j
,
0
x_{j,0}
x j , 0
当
r
j
=
1
r_j=1
r j = 1 时,R收到
y
j
,
0
=
x
j
,
0
⊕
H
(
j
,
s
j
⊕
t
j
)
y_{j,0}=x_{j,0}\oplus H(j, s_j\oplus t_j)
y j , 0 = x j , 0 ⊕ H ( j , s j ⊕ t j ) 以及
y
j
,
1
=
x
j
,
1
⊕
H
(
j
,
t
j
)
y_{j,1}=x_{j,1}\oplus H(j, t_j)
y j , 1 = x j , 1 ⊕ H ( j , t j ) ,而R只能解开
x
j
,
1
x_{j,1}
x j , 1
PART2
O
T
m
λ
OT_m^{\lambda}
O T m λ ->
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ
思路:其实就是利用
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ 传输混淆元,后面与OT再无关系。后面通过随机预言函数基于长度为
λ
\lambda
λ 的混淆元生成长度为m的混淆项。
输入信息:
Sender有对
λ
\lambda
λ 输入
(
x
i
,
0
,
x
i
,
1
)
(x_{i,0},x_{i,1})
( x i , 0 , x i , 1 ) ;
x
x
x 的长度为
m
m
m 位,
1
≤
i
≤
λ
1 \le i \le \lambda
1 ≤ i ≤ λ 。
Receiver有
λ
\lambda
λ 个输入选择比特
r
=
(
r
1
,
r
2
,
.
.
.
,
r
λ
)
\textbf{r}=(r_1, r2, ..., r_{\lambda})
r = ( r 1 , r 2 , . . . , r λ ) 。
系统参数:
随机预言函数:
G
:
{
0
,
1
}
λ
→
{
0
,
1
}
m
\textbf{G}: {\{0,1\}}^{\lambda}\rightarrow {\{0,1\}}^m
G : { 0 , 1 } λ → { 0 , 1 } m
协议:
S初始化
λ
\lambda
λ 对随机的长度为k比特的
(
s
i
,
0
,
s
i
,
1
)
(s_{i,0},s_{i,1})
( s i , 0 , s i , 1 )
进行
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ 协议,在该协议中发送者为S而接收者为R,分别记为
S
S
S_S
S S 及
R
R
R_R
R R 。
S
S
S_S
S S 有
λ
\lambda
λ 对输入
(
s
i
,
0
,
s
i
,
1
)
(s_{i,0},s_{i,1})
( s i , 0 , s i , 1 )
S
R
S_R
S R 有
λ
\lambda
λ 个输入选择
r
\textbf{r}
r
S
R
S_R
S R 得到长度为
λ
\lambda
λ 的向量
s
=
{
s
i
,
r
i
}
\textbf{s}=\{s_{i,r_i}\}
s = { s i , r i } ;
1
≤
i
≤
λ
1\le i \le \lambda
1 ≤ i ≤ λ
S向R发送
λ
\lambda
λ 对
(
y
i
,
0
,
y
i
,
1
)
(y_{i,0},y_{i,1})
( y i , 0 , y i , 1 ) ,其中
y
i
,
0
=
x
i
,
b
⊕
G
(
s
i
,
b
)
y_{i,0}=x_{i,b}\oplus \textbf{G}(s_{i,b})
y i , 0 = x i , b ⊕ G ( s i , b )
R通过步骤2中得到的向量
s
\textbf{s}
s 进行还原,即
z
i
=
y
i
,
r
i
⊕
G
(
s
i
,
r
i
)
z_i=y_{i,r_i}\oplus \textbf{G}(s_{i, r_i})
z i = y i , r i ⊕ G ( s i , r i )
PART3
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ 可以通过调用
λ
\lambda
λ 次
O
T
λ
1
OT_{\lambda}^1
O T λ 1 协议实现
效率分析
R共调用m次H,
2
λ
2\lambda
2 λ 次G,发送数据
2
m
λ
2m\lambda
2 m λ 比特
S共调用2m次H,
λ
\lambda
λ 次G,发送数据
2
m
l
2ml
2 m l 比特
当然协议中调用了一次
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ 协议,因为与m和l无关为常数。
综上,整个流程归约到
O
T
λ
λ
OT_{\lambda}^{\lambda}
O T λ λ (只有该部分与公钥密码学相关),即相当于
λ
\lambda
λ 次
O
T
λ
1
OT_{\lambda}^1
O T λ 1 协议。