Efficient Batched Oblivious Transfer Protocol

参考文献:

  1. Beaver, D. 1996. “Correlated Pseudorandomness and the Complexity of Private Computations”. In: 28th Annual ACM Symposium on Theory of Computing. ACM Press. 479–488.
  2. Ishai, Y., J. Kilian, K. Nissim, and E. Petrank. 2003. “Extending Oblivious Transfers Efficiently”. In: Advances in Cryptology – CRYPTO 2003. Ed. by D. Boneh. Vol. 2729. Lecture Notes in Computer Science. Springer, Heidelberg. 145–161.
  3. Kolesnikov, V. and R. Kumaresan. 2013. “Improved OT Extension for Transferring Short Secrets”. In: Advances in Cryptology – CRYPTO 2013, Part II. Ed. by R. Canetti and J. A. Garay. Vol. 8043. Lecture Notes in Computer Science. Springer, Heidelberg. 54–70. doi: 10.1007/978-3-642-40084-1_4.
  4. Kolesnikov, V., R. Kumaresan, M. Rosulek, and N. Trieu. 2016. “Efficient Batched Oblivious PRF with Applications to Private Set Intersection”. In: ACM CCS 16: 23rd Conference on Computer and Communications Security. Ed. by E. R. Weippl, S. Katzenbeisser, C. Kruegel, A. C. Myers, and S. Halevi. ACM Press. 818–829.

Public Key-Based OT

可以基于公钥加密,来构造不经意传输协议。构造如下:

Efficient Batched Oblivious Transfer Protocol_第1张图片

在描述 多方协议 之前,先定义两种安全参数:

  1. 计算安全参数(computational security parameter):记为 κ \kappa κ,约束敌手离线计算(如攻击某个加密方案)的困难程度,一般选取 128 , 256 128,256 128,256
  2. 统计安全参数( statistical security parameter):记为 σ \sigma σ,约束敌手在线交互时偏离协议(而不被发现)的概率,一般选取 40 , 80 40,80 40,80

Beaver’s non-black-box construction(1996)

在混淆电路的计算中,假设Bob的输入为 m m m比特,那么就需要与Alice利用 m m m次OT协议来获得对应的标签和选择比特。往往 m m m是多项式长度的,因此需要对应次数的公钥加密,然而公钥加密的开销巨大。我们希望利用较少次数的OT,就可以达成多项式次OT的效果。

Beaver给出了一种方案:

  1. 发送方 S S S,接收方 R R R,功能 F F F S S S的输入为 X = { ( x 1 0 , x 1 1 ) , ⋯   , ( x m 0 , x m 1 ) } X=\{(x_1^0,x_1^1),\cdots,(x_m^0,x_m^1)\} X={(x10,x11),,(xm0,xm1)} R R R的输入为 b = ( b 1 , ⋯   , b m ) b=(b_1,\cdots,b_m) b=(b1,,bm) F F F的作用是实现OT。令 G : { 0 , 1 } κ → { 0 , 1 } m G:\{0,1\}^\kappa \to \{0,1\}^m G:{0,1}κ{0,1}m是 PRG。
  2. R R R生成 κ \kappa κ比特的随机数 r r r,计算 b ′ = b ⊕ G ( r ) b'=b \oplus G(r) b=bG(r)发送给 S S S
  3. S S S发送 X , b ′ X,b' X,b F F F R R R发送 r r r F F F
  4. F F F解密 b = b ′ ⊕ G ( r ) b=b' \oplus G(r) b=bG(r),然后发送对应的 x i b i x^{b_i}_i xibi R R R

在 ideal world 里, F F F是可信第三方。在 real world 里,可以通过混淆电路来实现它: S S S构建 F F F对应的 GC 发送给 R R R S S S的输入为 X , b ′ X,b' X,b(不需要OT), R R R的输入仅仅为 r r r需要 κ \kappa κ次OT), R R R计算电路获得 x i b i x_i^{b_i} xibi实现了 m m m次OT)。

也就是说,只需要 κ \kappa κ次公钥操作,就存在一种方案来成批地实现 m = p o l y ( κ ) m=poly(\kappa) m=poly(κ)次OT协议。

IKNP(2003)

然而,Beaver的构造更多是理论意义上的,因为 F F F对应的 GC 过大,实际上计算很低效。 Ishai 等人在 OT 的基础上仅仅添加了对称操作( symmetric-key operations),利用 k k k次 base-OT,达成了 m ≫ k m \gg k mk次的高效 OT:

  1. R R R的选择比特串(choice bits)为 r ∈ { 0 , 1 } m r \in \{0,1\}^m r{0,1}m S S S的选择比特串为 s ∈ { 0 , 1 } k s \in \{0,1\}^k s{0,1}k,且 m ≫ k m \gg k mk

  2. R R R随机选择两个矩阵 T , U ∈ F 2 m × k T,U \in \mathbb F_2^{m \times k} T,UF2m×k,满足
    T = [ t 1 t 2 ⋮ t m ] ,     U = [ u 1 u 2 ⋮ u m ] ,     T ⊕ U = [ r 1 ⋅ 1 k r 2 ⋅ 1 k ⋮ r m ⋅ 1 k ] T= \begin{bmatrix} t_1\\ t_2\\ \vdots\\ t_m \end{bmatrix},\,\,\, U= \begin{bmatrix} u_1\\ u_2\\ \vdots\\ u_m \end{bmatrix},\,\,\, T \oplus U = \begin{bmatrix} r_1 \cdot 1^k\\ r_2 \cdot 1^k\\ \vdots\\ r_m \cdot 1^k\\ \end{bmatrix} T= t1t2tm ,U= u1u2um ,TU= r11kr21krm1k
    这里的 ⋅ \cdot 是向量数乘, t i , u i ∈ { 0 , 1 } k t_i,u_i \in \{0,1\}^k ti,ui{0,1}k是行向量(下角标代表行向量,上角标代表列向量)。换个方向看,就是
    U = T + [ r    r    ⋯    r ] ⏟ k U = T + \underbrace{ \left[ r\,\, r\,\, \cdots\,\, r \right] }_{k} U=T+k [rrr]

  3. S S S根据 s s s,和 R R R一起执行 k k k次OT协议,挑选列向量:如果 s i = 0 s_i=0 si=0,那么获得 T T T的第 i i i t i ∈ { 0 , 1 } m t^i \in \{0,1\}^m ti{0,1}m;否则,获得 U U U的第 i i i u i ∈ { 0 , 1 } m u^i \in \{0,1\}^m ui{0,1}m;将获得的向量排成矩阵 Q ∈ F 2 m × k Q \in \mathbb F_2^{m \times k} QF2m×k
    Q = [ t 1 ⊕ ( s 1 ⋅ r ) t 2 ⊕ ( s 2 ⋅ r ) ⋯ t k ⊕ ( s k ⋅ r ) ] Q = \begin{bmatrix} t^1 \oplus (s_1 \cdot r) & t^2 \oplus (s_2 \cdot r) & \cdots & t^k \oplus (s_k \cdot r) \end{bmatrix} Q=[t1(s1r)t2(s2r)tk(skr)]
    换个方向看,
    Q = [ t 1 ⊕ ( r 1 ⋅ s ) t 2 ⊕ ( r 2 ⋅ s ) ⋮ t m ⊕ ( r m ⋅ s ) ] Q = \begin{bmatrix} t_1 \oplus (r_1 \cdot s)\\ t_2 \oplus (r_2 \cdot s)\\ \vdots\\ t_m \oplus (r_m \cdot s)\\ \end{bmatrix} Q= t1(r1s)t2(r2s)tm(rms)
    这里, q i = t i q_i=t_i qi=ti或者 q i ⊕ s = t i q_i \oplus s=t_i qis=ti,取决于 r i r_i ri

  4. H : { 0 , 1 } k → { 0 , 1 } n H:\{0,1\}^k \to \{0,1\}^n H:{0,1}k{0,1}n是ROM,给定 m m m对秘密 x i 0 , x i 1 ∈ { 0 , 1 } n x_i^0,x_i^1 \in \{0,1\}^n xi0,xi1{0,1}n S S S分别加密两者:
    c i 0 = x i 0 ⊕ H ( q i ) c i 1 = x i 1 ⊕ H ( q j ⊕ s ) c_i^0=x_i^0 \oplus H(q_i)\\c_i^1=x_i^1 \oplus H(q_j \oplus s) ci0=xi0H(qi)ci1=xi1H(qjs)
    将这 2 m 2m 2m个密文发送给 R R R

  5. R R R手里有 t i t_i ti r r r,但不知道 s s s,因此只能计算出 H ( t i ) H(t_i) H(ti),在每一对密文中就只能解密其中一个密文。确切地说是 c i r i c^{r_i}_i ciri:当 r i = 0 r_i=0 ri=0,那么 q i = t i q_i=t_i qi=ti,可以解密 c i 0 c_i^0 ci0得到 x i 0 x_i^0 xi0;当 r i = 1 r_i=1 ri=1,那么 q i = t i ⊕ s q_i=t_i \oplus s qi=tis,可以解密 c i 1 c_i^1 ci1得到 x i 1 x_i^1 xi1

在上述协议中,只有 step 3 使用了 k k k次 base-OT 协议,在 step 5 中实际完成了 m m m 1 1 1-out-of- 2 2 2 OT 协议。

一般地,选取 k = κ k = \kappa k=κ

KK(2013)

Kolesnikov 和 Kumaresan 指出,INKP本质上使用了一个编码方案, k k k重复码(repetition code):将信息 r i ∈ { 0 , 1 } r_i \in \{0,1\} ri{0,1}编码为 e n c o d e ( r i ) = r i ⋅ 1 k encode(r_i)=r_i \cdot 1^k encode(ri)=ri1k

如果我们使用长度为 k k k l l l维线性纠错码 C C C,那么就可以构造出 1 1 1-out-of- 2 l 2^l 2l OT协议:

  1. R R R的选择比特串(choice bits)为矩阵 r ∈ { 0 , 1 } m × l r \in \{0,1\}^{m \times l} r{0,1}m×l S S S的选择比特串为 s ∈ { 0 , 1 } k s \in \{0,1\}^k s{0,1}k,且 m ≫ k m \gg k mk

  2. R R R随机选择两个矩阵 T , U ∈ F 2 m × k T,U \in \mathbb F_2^{m \times k} T,UF2m×k,满足
    T = [ t 1 t 2 ⋮ t m ] ,     U = [ u 1 u 2 ⋮ u m ] ,     T ⊕ U = [ C ( r 1 ) C ( r 2 ) ⋮ C ( r m ) ] = C ( r ) T=\begin{bmatrix} t_1\\ t_2\\ \vdots\\ t_m \end{bmatrix},\,\,\, U=\begin{bmatrix} u_1\\ u_2\\ \vdots\\ u_m \end{bmatrix},\,\,\, T \oplus U =\begin{bmatrix} C(r_1)\\ C(r_2)\\ \vdots\\ C(r_m)\\ \end{bmatrix} = C(r) T= t1t2tm ,U= u1u2um ,TU= C(r1)C(r2)C(rm) =C(r)

    其中 t i , u i ∈ { 0 , 1 } k t_i,u_i \in \{0,1\}^k ti,ui{0,1}k是行向量。简记 C ( r ) = V C(r) = V C(r)=V,那么换个方向,
    U = T + [ V 1    V 2    ⋯    V k ] U = T + \left[ V^1\,\, V^2\,\, \cdots\,\, V^k \right] U=T+[V1V2Vk]

  3. S S S根据 s s s,和 R R R一起执行 k k k次OT协议,挑选列向量:如果 s i = 0 s_i=0 si=0,那么获得 T T T的第 i i i t i ∈ { 0 , 1 } m t^i \in \{0,1\}^m ti{0,1}m;否则,获得 U U U的第 i i i u i ∈ { 0 , 1 } m u^i \in \{0,1\}^m ui{0,1}m;将获得的向量排成矩阵 Q ∈ F 2 m × k Q \in \mathbb F_2^{m \times k} QF2m×k
    Q = [ t 1 ⊕ ( s 1 ⋅ V 1 ) t 2 ⊕ ( s 2 ⋅ V 2 ) ⋯ t k ⊕ ( s k ⋅ V k ) ] Q =\begin{bmatrix} t^1 \oplus (s_1 \cdot V^1) & t^2 \oplus (s_2 \cdot V^2) & \cdots & t^k \oplus (s_k \cdot V^k) \end{bmatrix} Q=[t1(s1V1)t2(s2V2)tk(skVk)]
    这里的 ⋅ \cdot 是向量数乘。换个方向看,
    Q = [ t 1 ⊕ ( V 1 ∧ s ) t 2 ⊕ ( V 2 ∧ s ) ⋮ t m ⊕ ( V m ∧ s ) ] = [ t 1 ⊕ ( C ( r 1 ) ∧ s ) t 2 ⊕ ( C ( r 2 ) ∧ s ) ⋮ t m ⊕ ( C ( r m ) ∧ s ) ] Q =\begin{bmatrix} t_1 \oplus (V_1 \wedge s)\\ t_2 \oplus (V_2 \wedge s)\\ \vdots\\ t_m \oplus (V_m \wedge s)\\ \end{bmatrix} =\begin{bmatrix} t_1 \oplus (C(r_1) \wedge s)\\ t_2 \oplus (C(r_2) \wedge s)\\ \vdots\\ t_m \oplus (C(r_m) \wedge s)\\ \end{bmatrix} Q= t1(V1s)t2(V2s)tm(Vms) = t1(C(r1)s)t2(C(r2)s)tm(C(rm)s)
    这里的 ∧ \wedge 按位与(bitwise-AND)

  4. H : { 0 , 1 } k → { 0 , 1 } n H:\{0,1\}^k \to \{0,1\}^n H:{0,1}k{0,1}n是ROM,给定 m m m组秘密
    x i 0 , x i 1 , ⋯   , x i 2 l − 1 ∈ { 0 , 1 } n x_i^{0},x_i^{1},\cdots,x_i^{2^l-1} \in \{0,1\}^n xi0,xi1,,xi2l1{0,1}n
    S S S分别加密它们:
    c i 0 = x i 0 ⊕ H ( q i ⊕ ( C ( 0 ) ∧ s ) ) c i 1 = x i 1 ⊕ H ( q i ⊕ ( C ( 1 ) ∧ s ) ) ⋮ c i 2 l − 1 = x i 2 l − 1 ⊕ H ( q i ⊕ ( C ( 2 l − 1 ) ∧ s ) ) \begin{aligned} c_i^0 &= x_i^0 \oplus H(q_i \oplus (C(0) \wedge s))\\ c_i^1 &= x_i^1 \oplus H(q_i \oplus (C(1) \wedge s))\\ & \vdots\\ c_i^{2^l-1} &= x_i^{2^l-1} \oplus H(q_i \oplus (C(2^l-1) \wedge s))\\ \end{aligned} ci0ci1ci2l1=xi0H(qi(C(0)s))=xi1H(qi(C(1)s))=xi2l1H(qi(C(2l1)s))
    然后将这 m × 2 l m \times 2^l m×2l个密文发送给 R R R

  5. R R R手里有 t i t_i ti r r r,但不知道 s s s,因此只能计算出 H ( t i ) H(t_i) H(ti),在每一组的 2 l 2^l 2l个密文中只能解密其中 1 1 1个密文。确切地说是 c i r i c^{r_i}_i ciri
    x i r i = c i r i ⊕ H ( q i ⊕ ( C ( r i ) ∧ s ) ) = c i r i ⊕ H ( t i ) x_i^{r_i} = c_i^{r_i} \oplus H(q_i \oplus (C(r_i) \wedge s)) = c_i^{r_i} \oplus H(t_i) xiri=ciriH(qi(C(ri)s))=ciriH(ti)

对于其他的密文,由于 R R R不掌握 s s s,因此无法预测密钥 H ( q i ⊕ ( C ( r i ′ ∣ r i ′ ≠ r i ) ∧ s ) ) H(q_i \oplus (C(r_i' | r_i' \neq r_i) \wedge s)) H(qi(C(riri=ri)s))的值。假设线性码 C C C的极小距离是 κ \kappa κ,那么 d i s t [ C ( r i ′ ) , C ( r i ) ] ≥ κ dist[C(r_i'),C(r_i)] \ge \kappa dist[C(ri),C(ri)]κ,只有猜对这 κ \kappa κ个位置的 s j ∈ { 0 , 1 } s_j \in \{0,1\} sj{0,1}的比特值,敌手才能够计算出 r i ′ r_i' ri对应的密钥,复杂度 O ( 2 κ ) O(2^\kappa) O(2κ)是指数级。

在 KK 方案中,仅仅花费了 k k k 1 1 1-out-of- 2 2 2 base-OT协议,但实际上实现了 m = p o l y ( κ ) m=poly(\kappa) m=poly(κ)次的 1 1 1-out-of- 2 l 2^l 2l OT协议!

为了适配更高效的底层编码 C C C,我们需要更大的线性空间,可设置 k = 2 κ k=2\kappa k=2κ

Efficient Batched Oblivious PRF(2016)

Kolesnikov 等人发现,实际上编码方案 C C C并不需要纠错码的全部性质:

  1. 在 KK 方案中用不到解码,因此 C C C不必拥有高效解码算法
  2. 只要对于所有可能的 r , r ′ r,r' r,r对,其差分 C ( r ) ⊕ C ( r ′ ) C(r) \oplus C(r') C(r)C(r)的汉明重量以压倒性概率大于等于安全参数 κ \kappa κ即可,即使编码 C C C的极小距离小于 κ \kappa κ

伪随机码 (pseudorandom code,PRC):令 C : { 0 , 1 } ∗ → { 0 , 1 } k C:\{0,1\}^* \to \{0,1\}^k C:{0,1}{0,1}k是带有足够长的输出的ROM,那么就很难找到近碰撞(near-collision)—— 难以找到 r , r ′ r,r' r,r,使得汉明重量很小,即 w t [ C ( r ) ⊕ C ( r ′ ) ] < κ wt[C(r) \oplus C(r')] < \kappa wt[C(r)C(r)]<κ;当 k = 4 κ k=4\kappa k=4κ时,随机函数就 make near-collisions negligible。

也就是说,用 PRC 替换了线性纠错码后,we remove the a-priori bound on the size of the receiver’s choice string!对于任意的 r ∈ { 0 , 1 } ∗ r \in \{0,1\}^* r{0,1} S S S都可以计算出对应的秘密 H ( q i ⊕ ( C ( r ) ∧ s ) ) H(q_i \oplus (C(r) \wedge s)) H(qi(C(r)s))利用 ZZ 协议就获得了 1 1 1-out-of- ∞ \infty OT协议

上述的OT协议可以视为一批 Oblivious PRF:映射 F : r ↦ H ( q ⊕ ( C ( r ) ∧ s ) ) F:r \mapsto H(q \oplus (C(r) \wedge s)) F:rH(q(C(r)s)) S S S拥有秘密 s s s R R R的输入是 r r r,且函数的输出是伪随机的。

  1. 对于每一组的 ∞ \infty 个秘密, R R R只知道其中的 1 1 1个函数值( r i r_i ri对应的):
    F ( ( q i , s ) , r i ) = H ( q i ⊕ ( C ( r i ) ∧ s ) ) = H ( t i ) F((q_i,s),r_i) = H(q_i \oplus (C(r_i) \wedge s)) = H(t_i) F((qi,s),ri)=H(qi(C(ri)s))=H(ti)
    确切地说其实是知道 t i t_i ti,但这并不影响 R R R对其他的函数值 F ( ( q i , s ) , r i ′ ∣ r i ′ ≠ r i ) F((q_i,s),r_i'|r_i' \neq r_i) F((qi,s),riri=ri)的一无所知。

    但是 r i r_i ri 对应的 t i t_i ti 不是 R R R 自己生成的么?还有怎么计算其他 r i ′ r_i' ri 的函数值呢?看不懂了 (╯︵╰)

  2. 同时根据OT协议的安全要求, S S S也不知道 R R R输入的 r i r_i ri

这里是一批次同时计算 m m m个OPRF的协议,这 m m m个OPRF实例都共享 S S S的同一个密钥 s s s以及伪随机码 C C C

Efficient Batched Oblivious Transfer Protocol_第2张图片

细节还请看 Kolesnikov et al. (2016) 的论文吧~~

你可能感兴趣的:(密码学,网络,信息安全,算法,密码学,MPC)