这篇文章是Benny Pinkas,Thomas Schneider和Michael Zohner三人发表在14年USENIX上的文章,链接为:Faster Private Set Intersection Based on OT Extension
摘要
PSI(Private set intersection,隐私数据集求交)允许两方
P
1
,
P
2
P_1, P_2
P1,P2计算他们各自拥有的数据集
X
,
Y
X,Y
X,Y的交集
X
⋂
Y
X\bigcap Y
X⋂Y,但是不揭露交集外的数据集的任何信息。
本文的主要工作是介绍通用的PSI协议(基于安全计算和Bloom filters) 并利用 OT 扩展技术进行优化的方法,提出一个新的以 OT 为基础的PSI协议,并与其他 PSI协议的实验结果进行比较。
一、现有PSI协议
对于PSI问题,一个不成熟的解决方案是:对双方各自的输入用hash函数加密,然后比较hash结果是否一致。虽然这个方法很高效,但是不安全,如果输入域不大或者加密不高,很容易被暴力破解。常用的PSI协议方案多基于公钥加密、电路、OT、三方等。
Public-Key-Based PSI
基于公钥加密方法的PSI协议多基于 Diffie-Hellmann (DH)密钥协商方法,其他协议引入了插值多项式、blind-RSA、加法同态加密等技术。DH-based protocol在通信方面是最高效的,因此适用于距离远但计算能力强的参与方。
Circuit-Based PSI
算术电路、布尔电路、姚氏电路均可用于PSI,通用的 circuit-based protocol 要比 public-key-based protocol 低效,但是在计算交集的变量时更灵活更简单。
OT-Based PSI
主要使用了Bloom filters 和 OT 扩展技术。
在
(
2
1
)
−
O
T
l
m
\left ( \begin{array}{c} 2\\1 \end{array} \right )-OT_l^m
(21)−OTlm中,发送方
S
S
S持有
m
m
m个消息对
(
x
0
i
,
x
1
i
)
,
x
0
i
,
x
1
i
∈
{
0
,
1
}
l
(x_0^i,x_1^i), x_0^i,x_1^i \in\{0,1\}^l
(x0i,x1i),x0i,x1i∈{0,1}l, 接收方持有
m
m
m比特的选择向量
b
b
b,协议结束后
R
R
R获得
x
b
[
i
]
i
x^i_{b[i]}
xb[i]i且不知道
x
b
[
1
−
i
]
i
x^i_{b[1-i]}
xb[1−i]i的任何信息。OT扩展技术将
O
T
l
m
OT^m_l
OTlm昂贵的公钥操作降低为
O
T
κ
κ
OT^{\kappa}_{\kappa}
OTκκ.
Third Party-Based PSI
引入额外的参与方。
PSI协议效率对比
二、PSI协议优化
Notation
假设参与的双方是
P
1
,
P
2
P_1, P_2
P1,P2, 各自拥有的数据集分别是
X
,
Y
X,Y
X,Y,其中
∣
X
∣
=
n
1
,
∣
Y
∣
=
n
2
|X|=n_1, |Y|=n_2
∣X∣=n1,∣Y∣=n2,
X
,
Y
X, Y
X,Y中的元素分别记为
x
,
y
x,y
x,y, 每一个元素的长度均为
σ
b
i
t
\sigma bit
σbit。
a
,
b
a,b
a,b均为
b
i
t
bit
bit串,
a
∧
b
a\wedge b
a∧b表示其按位与操作,
a
⊕
b
a\oplus b
a⊕b表示其按位异或操作。
(
N
1
)
−
O
T
l
m
\left ( \begin{array}{c} N\\1 \end{array} \right )-OT_l^m
(N1)−OTlm表示
m
m
m个并行的 1-out-of-N OT传输长为
l
l
l的比特串。
κ
\kappa
κ为对称安全参数,
ρ
\rho
ρ为非对称安全参数,
λ
\lambda
λ为统计安全参数。
威胁模型:半诚实敌手、恶意敌手
Circuit-Based PSI
GMW 协议
假设
P
1
,
P
2
P_1,P_2
P1,P2分别拥有输入比特
u
,
v
u,v
u,v,他们分别对其作分享
u
=
u
1
⊕
u
2
,
v
=
v
1
⊕
v
2
u=u_1\oplus u_2, v=v_1\oplus v_2
u=u1⊕u2,v=v1⊕v2, 在输入线为
u
,
v
u,v
u,v,输出线为
w
w
w的
X
O
R
XOR
XOR门中,
P
i
,
i
∈
{
1
,
2
}
P_i, i\in\{1,2\}
Pi,i∈{1,2}本地计算
w
i
=
u
i
⊕
v
i
w_i=u_i\oplus v_i
wi=ui⊕vi.
A
N
D
AND
AND门需要用到乘法三元组
(
α
1
,
α
2
,
β
1
,
β
2
,
γ
1
,
γ
2
∈
{
0
,
1
}
)
(\alpha_1, \alpha_2, \beta_1, \beta_2, \gamma_1, \gamma_2 \in \{0,1\})
(α1,α2,β1,β2,γ1,γ2∈{0,1}), 满足
(
α
1
⊕
α
2
)
∧
(
β
1
⊕
β
2
)
=
γ
1
⊕
γ
2
(\alpha_1\oplus \alpha_2) \wedge ( \beta_1\oplus\beta_2)= \gamma_1\oplus \gamma_2
(α1⊕α2)∧(β1⊕β2)=γ1⊕γ2。给定三元组,双方计算
d
i
=
α
i
⊕
u
i
,
e
i
=
β
i
⊕
v
i
d_i=\alpha_i \oplus u_i, e_i=\beta_i \oplus v_i
di=αi⊕ui,ei=βi⊕vi, 交换
d
i
,
e
i
d_i, e_i
di,ei并重构
d
=
d
1
⊕
d
2
,
e
=
e
1
⊕
e
2
d=d_1\oplus d_2, e=e_1\oplus e_2
d=d1⊕d2,e=e1⊕e2, 在输出线分别计算
w
1
=
(
d
∧
e
)
⊕
(
d
∧
β
1
)
⊕
(
e
∧
α
1
)
⊕
γ
1
,
w
2
=
(
d
∧
β
2
)
⊕
(
e
∧
α
2
)
⊕
γ
2
w_1=(d\wedge e)\oplus(d\wedge\beta_1)\oplus(e\wedge\alpha_1)\oplus\gamma_1, w_2=(d\wedge\beta_2)\oplus(e\wedge\alpha_2)\oplus\gamma_2
w1=(d∧e)⊕(d∧β1)⊕(e∧α1)⊕γ1,w2=(d∧β2)⊕(e∧α2)⊕γ2。
乘法三元组可以用两轮的 1 bit 长的OT实现。在第一轮 OT中,
P
1
P_1
P1作为发送方,
P
2
P_2
P2作为接受方,选择比特为
α
2
\alpha_2
α2;在第二轮 OT中,
P
2
P_2
P2作为发送方,
P
1
P_1
P1作为接受方,选择比特为
α
1
\alpha_1
α1。 每一轮OT中,发送方持有
(
x
0
i
,
x
1
i
)
(x_0^i, x_1^i)
(x0i,x1i), 并设置
β
i
=
x
0
i
⊕
x
1
i
\beta_i=x_0^i\oplus x_1^i
βi=x0i⊕x1i, 接收方持有
x
α
i
i
x_{\alpha_i}^i
xαii。注意到:
(
α
1
⊕
α
2
)
∧
(
β
1
⊕
β
2
)
=
(
α
1
∧
β
1
)
⊕
(
α
1
∧
β
2
)
⊕
(
α
2
∧
β
1
)
⊕
(
α
2
∧
β
2
)
=
γ
1
⊕
γ
2
(\alpha_1\oplus \alpha_2) \wedge ( \beta_1\oplus\beta_2)= (\alpha_1\wedge\beta_1)\oplus(\alpha_1\wedge\beta_2)\oplus(\alpha_2\wedge\beta_1)\oplus(\alpha_2\wedge\beta_2)=\gamma_1\oplus \gamma_2
(α1⊕α2)∧(β1⊕β2)=(α1∧β1)⊕(α1∧β2)⊕(α2∧β1)⊕(α2∧β2)=γ1⊕γ2。其中
α
i
∧
β
i
\alpha_i\wedge\beta_i
αi∧βi可以本地计算,而注意到
α
1
∧
β
2
=
x
α
1
2
⊕
x
0
2
,
α
2
∧
β
1
=
x
α
2
1
⊕
x
0
1
\alpha_1\wedge\beta_2=x_{\alpha_1}^2\oplus x_0^2, \alpha_2\wedge\beta_1=x_{\alpha_2}^1\oplus x_0^1
α1∧β2=xα12⊕x02,α2∧β1=xα21⊕x01(可以通过真值表验证,具体怎么推导的我也不清楚)因此,
P
1
P_1
P1设置
γ
1
=
(
α
1
∧
β
1
)
⊕
x
0
1
⊕
x
α
1
2
\gamma_1=(\alpha_1\wedge\beta_1)\oplus x_0^1\oplus x_{\alpha_1}^2
γ1=(α1∧β1)⊕x01⊕xα12,
P
2
P_2
P2设置
γ
2
=
(
α
2
∧
β
2
)
⊕
x
0
2
⊕
x
α
2
1
\gamma_2=(\alpha_2\wedge\beta_2)\oplus x_0^2\oplus x_{\alpha_2}^1
γ2=(α2∧β2)⊕x02⊕xα21。
优化
由于2/3的 A N D AND AND门都来源于选择器,在每一个选择器中,都有长为 σ b i t \sigma bit σbit的输入 x , y x, y x,y和一个选择比特 s s s,因此我们需要 σ \sigma σ个 A N D 门 AND门 AND门来计算 z [ j ] = s ∧ ( x [ j ] ⊕ y [ j ] ) ⊕ x [ j ] , 1 ≤ j ≤ σ z[j]=s\wedge(x[j]\oplus y[j])\oplus x[j], 1\leq j\leq \sigma z[j]=s∧(x[j]⊕y[j])⊕x[j],1≤j≤σ, 因此我们计算的时候可以使用向量三元组的形式: ( α 1 , α 2 ∈ { 0 , 1 } ; β 1 , β 2 , γ 1 , γ 2 ∈ { 0 , 1 } σ ) (\alpha_1, \alpha_2\in \{0,1\}; \beta_1, \beta_2, \gamma_1, \gamma_2 \in \{0,1\}^{\sigma}) (α1,α2∈{0,1};β1,β2,γ1,γ2∈{0,1}σ), 满足 ( α 1 ⊕ α 2 ) ∧ ( β 1 [ j ] ⊕ β 2 [ j ] ) = γ 1 [ j ] ⊕ γ 2 [ j ] (\alpha_1\oplus \alpha_2) \wedge (\beta_1[j]\oplus\beta_2[j])= \gamma_1[j]\oplus \gamma_2[j] (α1⊕α2)∧(β1[j]⊕β2[j])=γ1[j]⊕γ2[j]。为了评估 A N D AND AND门,双方计算 d i = α i ⊕ u i , e i [ j ] = β i [ j ] ⊕ v i [ j ] d_i=\alpha_i \oplus u_i, e_i[j]=\beta_i[j] \oplus v_i[j] di=αi⊕ui,ei[j]=βi[j]⊕vi[j], 交换 d i , e i [ j ] d_i, e_i[j] di,ei[j]并重构 d = d 1 ⊕ d 2 , e [ j ] = e 1 [ j ] ⊕ e 2 [ j ] d=d_1\oplus d_2, e[j]=e_1[j]\oplus e_2[j] d=d1⊕d2,e[j]=e1[j]⊕e2[j], 在输出线计算 w i [ j ] = ( d ∧ e [ j ] ) ⊕ ( d ∧ β i [ j ] ) ⊕ ( e [ j ] ∧ α i ) ⊕ γ i [ j ] w_i[j]=(d\wedge e[j])\oplus(d\wedge\beta_i[j])\oplus(e[j]\wedge\alpha_i)\oplus\gamma_i[j] wi[j]=(d∧e[j])⊕(d∧βi[j])⊕(e[j]∧αi)⊕γi[j]。向量三元组用随机的 O T σ 2 OT_{\sigma}^2 OTσ2实现。
Garbled Bloom Filter-Based PSI
Bloom Filter
一个 BF 包括 n 个 elelments, 一个 m 比特长的 F, 和 k 个独立的哈希函数 h 1 , . . . , h k , h i : { 0 , 1 } ∗ ↦ [ 1 , m ] h_1, ..., h_k, h_i: \{0,1\}^*\mapsto[1,m] h1,...,hk,hi:{0,1}∗↦[1,m]。 初始化阶段, F 的所有比特都设为0。当一个 x x x 要被插入 BF 中,那么对所有的 i 设置 F [ h i ( x ) ] = 1 F[h_i(x)]=1 F[hi(x)]=1。 如果要查询 BF 中是否含有 y y y, 需要检查所有的 F [ h i ( y ) ] F[h_i(y)] F[hi(y)], 只有当所有 B F [ h i ( y ) ] BF[h_i(y)] BF[hi(y)]全不为0时, y y y 才在 BF 中。
Garbled Bloom Filter
一个GBF包含
κ
\kappa
κ个哈希函数,在每一个位置
G
[
i
]
,
1
≤
i
≤
m
G[i],1\leq i \leq m
G[i],1≤i≤m 都有长为
l
l
l 的shares,
x
x
x 在 G 中需要满足
⨁
j
=
1
κ
G
[
h
j
(
x
)
]
=
x
\bigoplus_{j=1}^{\kappa}G[h_j(x)]=x
⨁j=1κG[hj(x)]=x。
为了用一个 GBF G 来表示一个数据集 X, G 的所有位置都被初始化为未占用,在插入每一个
x
∈
X
x\in X
x∈X时,都先找一个未占用的哈希
G
[
h
t
(
x
)
]
G[h_t(x)]
G[ht(x)],其他所有的未占用的位置
G
[
h
j
[
x
]
]
G[h_j[x]]
G[hj[x]] 都设置为随机的
l
l
l 比特串, 只有
G
[
h
t
(
x
)
]
G[h_t(x)]
G[ht(x)] 被设置为
G
[
h
t
(
x
)
]
=
x
⊕
(
⨁
j
=
1
,
j
≠
t
κ
G
[
h
j
(
x
)
]
)
G[h_t(x)]=x\oplus (\bigoplus_{j=1, j\neq t}^{\kappa}G[h_j(x)])
G[ht(x)]=x⊕(⨁j=1,j=tκG[hj(x)]) 。
在半诚实的PSI协议中,
P
1
P_1
P1 产生一个 m 比特长的 GBF
G
X
G_X
GX,
P
2
P_2
P2产生一个 m 比特长的 BF
F
Y
F_Y
FY,
P
1
,
P
2
P_1, P_2
P1,P2执行
O
T
l
m
OT_l^m
OTlm, 在第 i 轮 OT 中,
P
1
P_1
P1 作为发送者输入
(
0
,
G
X
[
i
]
)
(0, G_X[i])
(0,GX[i]),
P
2
P_2
P2作为接收者输入选择比特
F
Y
[
i
]
F_Y[i]
FY[i], 并且获得交集 GBF
G
(
X
∧
Y
)
G_{(X\wedge Y)}
G(X∧Y), 若
F
Y
[
i
]
=
0
F_Y[i]=0
FY[i]=0,
G
(
X
∧
Y
)
[
i
]
=
0
G_{(X\wedge Y)[i]=0}
G(X∧Y)[i]=0, 反之
G
(
X
∧
Y
)
[
i
]
=
G
X
[
i
]
G_{(X\wedge Y)[i]=G_X[i]}
G(X∧Y)[i]=GX[i]。
P
2
P_2
P2要检查
y
y
y 是否在交集中, 只需要检查
⨁
i
=
1
k
G
(
X
∧
Y
)
[
h
i
(
y
)
]
\bigoplus_{i=1}^kG_{(X\wedge Y)}[h_i(y)]
⨁i=1kG(X∧Y)[hi(y)]是否等于
y
y
y。
Random GBF-Based PSI
使用了随机OT扩展技术,在第 i 轮 OT 中, S S S 无输入, 输出 ( x 0 i , x 1 i x_0^i, x_1^i x0i,x1i), R R R输入选择比特 b b b并获得输出 x b [ i ] i x_{b[i]}^i xb[i]i, 双方分别利用不经意伪随机函数生成器 (OPRG) 获得了 b 1 , b 2 b_1, b_2 b1,b2, 如果 b 1 = 0 b_1=0 b1=0, S S S 忽略它的输出 ( x 0 i , x 1 i x_0^i, x_1^i x0i,x1i);如果 b 2 = 0 b_2=0 b2=0, R R R 忽略它的输出 x b [ i ] i x_{b[i]}^i xb[i]i。
Bloom filter-based protocol
P 1 , P 2 P_1, P_2 P1,P2分别产生一个 BF 得到 F X , F Y F_X, F_Y FX,FY, 并将其作为 OPRG 的输入, 产生随机 GBFs G X , G Y G_X, G_Y GX,GY, 对于 X X X 中的每一个 x j x_j xj, P 1 P_1 P1计算 m P 1 [ j ] = ⨁ i = 1 κ G X [ h i ( x j ) ] m_{P_1}[j]=\bigoplus_{i=1}^{\kappa}G_X[h_i(x_j)] mP1[j]=⨁i=1κGX[hi(xj)], 最后 P 1 P_1 P1 将所有的 m P 1 m_{P_1} mP1 按照随机顺序发送给 P 2 P_2 P2, P 2 P_2 P2 通过判断是否存在 j 使得 m P 1 [ j ] = ⨁ i = 1 κ G Y [ h i ( y ) ] m_{P_1}[j]=\bigoplus_{i=1}^{\kappa}G_Y[h_i(y)] mP1[j]=⨁i=1κGY[hi(y)]成立,来判断 y y y 是否在交集中。
PEQT Protocol
Basic PEQT Protocol
在大部分判断隐私数据集是否相等(PEQT)的协议中, P 1 , P 2 P_1, P_2 P1,P2 都是通过一个 ( 2 1 ) − O T l σ \left ( \begin{array}{c} 2\\1 \end{array} \right )-OT_l^{\sigma} (21)−OTlσ, P 1 P_1 P1 拥有 ( s 0 i , s 1 i s_0^i, s_1^i s0i,s1i), P 2 P_2 P2 用 y y y 作为选择向量并获得 s y [ i ] i s^i_{y[i]} sy[i]i, P 1 P_1 P1计算 m P 1 = ⨁ i = 1 σ s x [ i ] i m_{P_1}=\bigoplus_{i=1}^{\sigma}s_{x[i]}^i mP1=⨁i=1σsx[i]i 并发送给 P 2 P_2 P2, P 2 P_2 P2 计算 m P 2 = ⨁ i = 1 σ s y [ i ] i m_{P_2}=\bigoplus_{i=1}^{\sigma}s_{y[i]}^i mP2=⨁i=1σsy[i]i并比较,当且仅当 m P 1 = m P 2 m_{P_1}=m_{P_2} mP1=mP2时, x = y x=y x=y。
y =? x
优化时, P 2 P_2 P2 将 σ b i t \sigma bit σbit 的 y y y 切分成 t t t 块: y = y [ 1 ] ∣ ∣ . . . ∣ ∣ y [ t ] y=y[1] || ... || y[t] y=y[1]∣∣...∣∣y[t], 同样, P 1 P_1 P1 将 x x x 也切分成 t t t 块: x = x [ 1 ] ∣ ∣ . . . ∣ ∣ x [ t ] x=x[1] || ... || x[t] x=x[1]∣∣...∣∣x[t], 使用 ( N 1 ) − O T l σ \left ( \begin{array}{c} N\\1 \end{array} \right )-OT_l^{\sigma} (N1)−OTlσ, P 1 P_1 P1 拥有 ( s 0 i , . . . , s N − 1 i s_0^i,..., s_{N-1}^i s0i,...,sN−1i), P 2 P_2 P2 拥有 s y [ i ] i s^i_{y[i]} sy[i]i, P 1 P_1 P1计算 m P 1 = ⨁ i = 1 t s x [ i ] i m_{P_1}=\bigoplus_{i=1}^ts_{x[i]}^i mP1=⨁i=1tsx[i]i并发送, P 2 P_2 P2 计算 m P 2 = ⨁ i = 1 t s y [ i ] i m_{P_2}=\bigoplus_{i=1}^ts_{y[i]}^i mP2=⨁i=1tsy[i]i并比较,当且仅当 m P 1 = m P 2 m_{P_1}=m_{P_2} mP1=mP2时, x = y x=y x=y。
y in? X
双方均运行 ( N 1 ) − O T n 1 l t \left ( \begin{array}{c} N\\1 \end{array} \right )-OT_{n_1l}^t (N1)−OTn1lt, 在第 i 轮 OT 中, P 1 P_1 P1 拥有 N 个随机串 ( s 0 i , . . . , s N − 1 i s_0^i, ..., s_{N-1}^i s0i,...,sN−1i) ∈ { 0 , 1 } n 1 l \in \{0,1\}^{n_1l} ∈{0,1}n1l, P 2 P_2 P2 拥有 一个随机串 s y [ i ] i s_{y[i]}^i sy[i]i。执行 PEQT 协议时, P 1 P_1 P1 计算 m P 1 [ j ] = ⨁ i = 1 t s x j [ i ] i [ j ] m_{P_1}[j] = \bigoplus_{i=1}^t s_{x_j[i]}^i[j] mP1[j]=⨁i=1tsxj[i]i[j] 并发送这 n 1 l n_1l n1l bit长的 m P 1 m_{P_1} mP1 给 P 2 P_2 P2, P 2 P_2 P2计算 m P 2 = ⨁ i = 1 t s y [ i ] i m_{P_2}=\bigoplus_{i=1}^ts_{y[i]}^i mP2=⨁i=1tsy[i]i, 并检查是否存在 j 使得 m P 1 [ j ] = m P 2 m_{P_1}[j]=m_{P_2} mP1[j]=mP2, 若存在则证明 X 中存在与 y 相等的元素。
Y c a p \ cap cap X
对所有的 y ∈ Y y\in Y y∈Y执行上述算法。
Hashing Schemes and PSI
当数据集大小为 n n n 时, 协议运行时比较的次数是 n 2 n^2 n2, 因此我们引入 hash 函数来减少比较的次数,具体实现是双方均将自己的输入打包成一系列的 bins, 如果一个输入元素在交集中,双方就把它打包到同一个 bin 中,在检验时双方只需要在相同的 bin 中执行。(这一块儿不是很懂)