KKRT PSI是目前计算速度最快的PSI协议,当然是以高通信复杂度为代价的。若实际场景中对通信复杂度限制较大,建议采用ECDH PSI。
KKRT PSI主要借鉴了两个协议:IKNP OTE和PSSZ PSI。IKNP OTE及其变体实现了高效的OT extension协议,详见上一篇文章。PSSZ是一种高效的PSI协议,KKRT在其基础上实现了性能提升。
介绍KKRT前,先介绍一个关键函数。KKRT原论文定义了m-related-key-PRF security函数,对于函数 F((k*,k), r),有一个固定seed k* 和一个变换seed k,若F为m-related-key-PRF security,则给定一组 F ( ( k ∗ , k i ) , r i ) , i ∈ { 1 , 2 , . . . m } {F((k *, k_i), r_i) }, i\in\{1,2,...m\} F((k∗,ki),ri),i∈{1,2,...m},则该组F值和一组随机值 { z 1 , . . . , z m } \{z_1,...,z_m\} {z1,...,zm}很难区分。原论文证明了如下函数也具备m-related-key-PRF security:
F ( ( ( C , s ) , ( q j , j ) ) , r ) = H ( j ∣ ∣ q j ⊕ [ C ( r ) ⋅ s ] ) F(((C,s),(q_j,j)),\ r)=H(j||q_j \oplus[C(r)\cdot s]) F(((C,s),(qj,j)), r)=H(j∣∣qj⊕[C(r)⋅s])
该函数用在了IKNP变体中。可将 ( C , s ) (C,s) (C,s)看做k*, ( q j , j ) (q_j, j) (qj,j)看做k,该函数的安全特性保证了KKRT协议的安全。KKRT协议描述如下:
准备
- Alice和Bob分别持有数据集X和Y, ∣ X ∣ = ∣ Y ∣ = n |X|=|Y|=n ∣X∣=∣Y∣=n
- 布谷鸟哈希的储藏区(stash)大小为 s s s
步骤
1、Bob指定三个哈希函数
h
1
,
h
2
,
h
3
:
{
0
,
1
}
∗
→
[
1.2
n
]
{h_1, h_2, h_3}: \{0,1\}^* \to [1.2n]
h1,h2,h3:{0,1}∗→[1.2n] 并将哈希函数告知Alice(
h
i
h_i
hi的值域为[0, 1.2n)之间的数值)
2、Bob利用布谷鸟哈希将Y中元素映射到 1.2n 个箱子中,并用
z
(
y
)
z(y)
z(y)记录映射元素
y
y
y使用的哈希编号{1,2,3}。若
z
(
y
)
z(y)
z(y)不存在,则
y
y
y被存放在了储藏区中,否则
y
y
y被存放在编号为
h
z
(
y
)
(
y
)
h_{z(y)}(y)
hz(y)(y)的箱中
3、Bob设置选择向量(类比IKNP中的向量r),向量
r
r
r 的长度为
1.2
n
+
s
1.2n+s
1.2n+s
- 对于第 i i i 个箱子,若箱中存放了元素 y y y,则 r i = y ∣ ∣ z ( y ) r_i=y||z(y) ri=y∣∣z(y),否则 r i r_i ri 取一个无意义值(dummy value)
- 对于储藏区(stash),若位置 i i i 有元素 y y y,则 r 1.2 n + i = y r_{1.2n+i}=y r1.2n+i=y,否则 r i r_i ri 取一个无意义值(dummy value)
4、Bob作为接收方,用
r
=
{
r
1
,
.
.
r
1.2
n
+
s
}
r=\{r_1,..r_{1.2n+s}\}
r={r1,..r1.2n+s}发起OTE实现
1.2
n
+
s
1.2n+s
1.2n+s个OT,Bob同时会得到矩阵
t
\bold t
t,Alice作为发送方,会得到向量
s
s
s,矩阵
q
\bold q
q,将
(
q
i
,
i
)
(q_i,i)
(qi,i)做为
k
i
k_i
ki,则Alice可以得到
{
k
1
,
k
2
.
.
.
k
1.2
n
+
s
}
\{k_1,k_2...k_{1.2n+s}\}
{k1,k2...k1.2n+s}
5、Alice计算如下集合
- H i = { F ( k h i ( x ) , x ∣ ∣ i ) ∣ x ∈ X } , f o r i ∈ { 1 , 2 , 3 } H_i=\{F(k_{h_i(x)},x||i) \ |\ x\in X\}, for\ i\in\{1,2,3\} Hi={F(khi(x),x∣∣i) ∣ x∈X},for i∈{1,2,3}
-
S
j
=
{
F
(
k
1.2
n
+
j
,
x
)
∣
x
∈
X
}
,
f
o
r
j
∈
{
1
,
2
,
.
.
.
,
s
}
S_j=\{F(k_{1.2n+j},x) \ |\ x\in X\},\ for\ j\in\{1,2,...,s\}
Sj={F(k1.2n+j,x) ∣ x∈X}, for j∈{1,2,...,s}
再将 { H 1 , H 2 , H 3 , S 1 , S 2 , . . . S s } \{H_1, H_2, H_3, \ S_1, S_2,...S_s\} {H1,H2,H3, S1,S2,...Ss} 打乱顺序后发送给Bob(共 3 n + s n 3n+sn 3n+sn个元素)
6、Bob对于Y中元素做如下计算:先设置交集 O O O为空
- 若 z ( y ) z(y) z(y)不为空,则 y y y 必在某个箱中,计算 F = F ( k h z ( y ) ( y ) , y ∣ ∣ z ( y ) ) F=F(k_{h_{z(y)}(y)}, y||z(y)) F=F(khz(y)(y),y∣∣z(y)), 若 F F F在 H z ( y ) H_{z(y)} Hz(y)中,则将 y y y 加入到 O O O中
- 若
z
(
y
)
z(y)
z(y)为空,则
y
y
y 必在储藏区中,若
y
y
y 在储藏区位置为
j
j
j,则计算
S
=
F
(
k
1.2
n
+
j
,
y
)
S=F(k_{1.2n+j}, y)
S=F(k1.2n+j,y),若
S
S
S在
S
j
S_j
Sj中,则将
y
y
y 加入到
O
O
O中
Bob有能力计算F(.),是因为IKNP变体的一个重要特性:对于接收方的 r j r_j rj 满足 t j = q j ⊕ [ C ( r j ) ⋅ s ] t_j=q_j\oplus [C(r_j)\cdot s] tj=qj⊕[C(rj)⋅s],即Bob可利用矩阵 t \bold t t计算F(.)
7、Bob将交集发送给Alice,双方都得到交集
O
O
O
参考资料:https://eprint.iacr.org/2016/799.pdf