本文主要记录隐私计算中的不经意传输(Oblivious Transfer,OT)相关技术,包括早期的 Rabin-OT 以及常见的 1-out-of-2 OT 和 chosen 1-out-of-2 OT 等各类技术,仅供参考。
首先介绍一下常见的几种OT技术的特点。
1981年 Rabin [ 1 ] ^{[1]} [1] 首次提出OT的概念,并构造了一个OT协议(Rabin-OT),该协议中存在一个发送方和一个接收方,发送方拥有一个消息 m m m,协议保证接收方能以 1/2 的概率获得消息 m m m,且发送方不了解接收方是否获得消息。
发送方的输入:消息 m m m
接收方的输入:无
发送方的输出:无
接收方的输出:1/2 的概率获得消息 m m m
信息:接收方知道自己是否获得消息,而发送方不知情。
1985年 Even、Goldreich 和 Lempel [ 2 ] ^{[2]} [2] 三人提出2选1OT的概念,该协议中存在一个发送方和一个接收方,发送方拥有两个消息 m 0 , m 1 m_0,m_1 m0,m1,协议保证接收方能以同等的概率(1/2)获得其中的一个消息,且发送方不了解接收方获得了哪一个消息。
发送方的输入:消息 m 0 , m 1 m_0,m_1 m0,m1
接收方的输入:无
发送方的输出:无
接收方的输出:获得消息 m 0 m_0 m0 或 m 1 m_1 m1 (概率同等)
信息:接收方无权选择,但知道自己获得了哪个消息,对另外一条消息的内容不了解。发送方不知道接收方收到了哪条消息。
事实上,仅需对Even三人提出的2选1OT进行一些改变就可以得到选择2选1OT协议,该协议与2选1OT的区别是接收方可以主动选择接收哪一条消息。
发送方的输入:消息 m 0 , m 1 m_0,m_1 m0,m1
接收方的输入: c ∈ { 0 , 1 } c\in\{0,1\} c∈{0,1} 代表要接收的消息索引
发送方的输出:无
接收方的输出:获得消息 m c m_c mc
信息:接收方可以选择获得哪个消息,但对另外一条消息的内容不了解。发送方不知道接收方收到了哪条消息。
1995年 Beaver [ 3 ] ^{[3]} [3] 通过预处理优化OT的效率,在预处理阶段间接引入了随机OT的概念,该协议不接收输入,输出给发送方两个随机消息 m 0 , m 1 m_0,m_1 m0,m1,给接收方其中一个消息 m r m_r mr。
发送方的输入:无
接收方的输入:无
发送方的输出:随机消息 m 0 , m 1 m_0,m_1 m0,m1
接收方的输出: r ∈ { 0 , 1 } r\in\{0,1\} r∈{0,1} 和 m r m_r mr
信息:接收方知道自己获得了哪个消息,对另外一条消息的内容不了解。发送方不知道接收方收到了哪条消息。
对于n选1OT而言,发送方的消息数量变成了 n n n 个,而其余的部分与2选1OT类似。事实上,如今我们在隐私计算或密码学中提到的OT通常是指可选择的OT,一般不会再对所谓的 “1-out-of-2 OT” 以及 “chosen 1-out-of-2 OT” 进行区分。因此对于n选1OT而言,一般是指 chosen 1-out-of-n OT。
在实际的安全多方计算协议中可能会调用非常多次的OT协议,逐个单独调用非常影响计算效率,因此就出现了OT扩展技术,能够实现OT并行执行的效果。本文主要介绍一些基础的OT技术,OT扩展技术暂时不作介绍。
Rabin-OT 协议主要基于二次剩余的平方根计算问题构造而来,在给出具体协议流程前先介绍一下二次剩余。
定义:对于整数 a , n a,n a,n,若存在整数 x x x,满足 x 2 ≡ a ( m o d n ) x^2\equiv a \ (mod \ n ) x2≡a (mod n),则称 a a a 为模 n n n 的二次剩余,否则称 a a a 为模 n n n 的二次非剩余。
求解二次剩余的平方根有许多算法,这里不作记录,主要介绍一下 Rabin-OT 会用到的二次剩余的一些常见特性:
特性1:若 n n n 为奇素数且 a ≢ 0 ( m o d n ) a \not\equiv 0\ (mod \ n) a≡0 (mod n),则显然 x x x 有两个解 ± x 0 \pm x_0 ±x0(模 n n n 意义下)。
特性2:若 n = p q n = pq n=pq(其中 p , q p,q p,q 为两个大素数),且 g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1,则方程 x 2 ≡ a ( m o d n ) x^2\equiv a \ (mod \ n ) x2≡a (mod n) 存在四个解。
分析:显然由方程 x 2 ≡ a ( m o d n ) x^2\equiv a \ (mod \ n ) x2≡a (mod n) 可以得到两个同余方程:
{ x 2 ≡ a ( m o d p ) x 2 ≡ a ( m o d q ) \left\{ \begin{aligned} x^2 & \equiv a\ (mod \ p) \\ x^2 & \equiv a\ (mod \ q) \end{aligned} \right. {x2x2≡a (mod p)≡a (mod q)
由特性1可知,每个方程可以得到两个解,记为 ± x p , ± x q \pm x_p,\pm x_q ±xp,±xq。由中国剩余定理(之前文章中介绍过)可知,两个同余方程的每一对解可以唯一确定在模 n n n 意义下的一个解,因此可以得到四个解 x 0 , x 1 , x 2 , x 3 x_0,x_1,x_2,x_3 x0,x1,x2,x3,即:
{ x 0 = C R T ( x p , x q ) x 1 = C R T ( x p , − x q ) x 2 = C R T ( − x p , x q ) x 3 = C R T ( − x p , − x q ) \left\{ \begin{aligned} x_0 &= CRT(x_p,x_q)\\ x_1 &= CRT(x_p,-x_q)\\ x_2 &= CRT(-x_p, x_q)\\ x_3 &= CRT(-x_p,-x_q) \end{aligned} \right. ⎩ ⎨ ⎧x0x1x2x3=CRT(xp,xq)=CRT(xp,−xq)=CRT(−xp,xq)=CRT(−xp,−xq)
特性3:在特性2的背景下,若 x 0 x_0 x0 为方程 x 2 ≡ a ( m o d n ) x^2\equiv a \ (mod \ n ) x2≡a (mod n) 的一个解,则所有解为 ± x 0 , ± r x 0 \pm x_0,\pm rx_0 ±x0,±rx0(其中 ± r \pm r ±r 为模 n n n 的非平凡二次单位根)。
分析:模 n n n 的二次单位根指方程 x 2 ≡ 1 ( m o d n ) x^2\equiv 1 \ (mod \ n ) x2≡1 (mod n) 的四个解(由特性2可知一定有四个解),且其中两个解为 ± 1 \pm 1 ±1,两个解设为 ± r \pm r ±r。不为 ± 1 \pm 1 ±1 的解称为非平凡二次单位根。
例如: n = 3 × 5 = 15 n=3\times 5=15 n=3×5=15 时, x 2 ≡ 1 ( m o d 15 ) x^2\equiv 1 \ (mod \ 15 ) x2≡1 (mod 15) 的四个解为 ± 1 , ± 4 \pm 1, \pm 4 ±1,±4,则 ± 4 \pm 4 ±4 就是模 n n n 的非平凡二次单位根。
若 x 0 x_0 x0 为方程 x 2 ≡ a ( m o d n ) x^2\equiv a \ (mod \ n ) x2≡a (mod n) 的一个解,那么 x 0 x_0 x0 乘上模 n n n 的二次单位根也一定为一个解:
{ ( 1 ⋅ x 0 ) 2 ≡ 1 ⋅ x 0 2 ≡ a ( m o d n ) ( − 1 ⋅ x 0 ) 2 ≡ 1 ⋅ x 0 2 ≡ a ( m o d n ) ( r ⋅ x 0 ) 2 ≡ 1 ⋅ x 0 2 ≡ a ( m o d n ) ( − r ⋅ x 0 ) 2 ≡ 1 ⋅ x 0 2 ≡ a ( m o d n ) \left\{ \begin{aligned} (1\cdot x_0)^2 &\equiv 1\cdot x_0^2 \equiv a\ (mod \ n) \\ (-1\cdot x_0)^2 &\equiv 1\cdot x_0^2 \equiv a\ (mod \ n) \\ (r\cdot x_0)^2 &\equiv 1\cdot x_0^2 \equiv a\ (mod \ n) \\ (-r\cdot x_0)^2 &\equiv 1\cdot x_0^2 \equiv a\ (mod \ n) \end{aligned} \right. ⎩ ⎨ ⎧(1⋅x0)2(−1⋅x0)2(r⋅x0)2(−r⋅x0)2≡1⋅x02≡a (mod n)≡1⋅x02≡a (mod n)≡1⋅x02≡a (mod n)≡1⋅x02≡a (mod n)
Rabin-OT 的具体协议流程如下:
分析:协议的重点也是难以理解的地方是第4步,为什么只有当 x 1 ≢ ± x 0 ( m o d n ) x_1\not\equiv \pm x_0\ (mod \ n) x1≡±x0 (mod n) 时,计算出的 d = g c d ( x 0 − x 1 , n ) d = gcd(x_0 - x_1, n) d=gcd(x0−x1,n) 一定等于 p p p 或者 q q q?
显然,当 x 1 ≡ x 0 ( m o d n ) x_1 \equiv x_0\ (mod \ n) x1≡x0 (mod n) 时, d = g c d ( x 0 − x 1 , n ) = n d = gcd(x_0 - x_1, n) = n d=gcd(x0−x1,n)=n;
当 x 1 ≡ x 0 ( m o d n ) x_1 \equiv x_0\ (mod \ n) x1≡x0 (mod n) 时, d = g c d ( x 0 − x 1 , n ) = g c d ( 2 x 0 , n ) = 1 d = gcd(x_0 - x_1, n) = gcd(2x_0, n)=1 d=gcd(x0−x1,n)=gcd(2x0,n)=1。
当 x 1 ≢ ± x 0 ( m o d n ) x_1\not\equiv \pm x_0\ (mod \ n) x1≡±x0 (mod n) 时,考虑到 x 1 = ± r ⋅ x 0 x_1 = \pm r\cdot x_0 x1=±r⋅x0 且 g c d ( x 0 , n ) = 1 gcd(x_0, n ) = 1 gcd(x0,n)=1,此处不妨设 x 1 = r ⋅ x 0 x_1 = r\cdot x_0 x1=r⋅x0,则可以得到:
d = g c d ( x 0 − x 1 , n ) = g c d ( x 0 ⋅ ( 1 − r ) , n ) = g c d ( 1 − r , n ) d = gcd(x_0 - x_1, n) = gcd(x_0\cdot (1- r),n)=gcd(1- r, n) d=gcd(x0−x1,n)=gcd(x0⋅(1−r),n)=gcd(1−r,n)
由于 g c d ( 1 − r , n ) ≠ 0 gcd(1- r,n)\ne0 gcd(1−r,n)=0,则 1 − r 1- r 1−r 一定不为 n n n 的倍数,接下来我们只要证明 1 − r 1- r 1−r 一定为 p p p 或 q q q 的倍数,就可以得到 d = g c d ( 1 − r , n ) d = gcd(1- r, n) d=gcd(1−r,n) 一定等于 p p p 或者 q q q。
在求解 x 2 ≡ 1 ( m o d n ) x^2 \equiv 1 \ (mod \ n) x2≡1 (mod n) 时我们会首先求解 x p 2 ≡ 1 ( m o d p ) x_p^2 \equiv 1 \ (mod \ p) xp2≡1 (mod p) 和 x q 2 ≡ 1 ( m o d q ) x_q^2 \equiv 1 \ (mod \ q) xq2≡1 (mod q) 的解,再利用中国剩余定理进行组合,显然此处 x p = ± 1 x_p = \pm 1 xp=±1, x q = ± 1 x_q = \pm 1 xq=±1,一共有四种组合方式,对应着四个二次单位根。
显然其中两个平凡二次单位根,即 ± 1 \pm 1 ±1 对应着 x p , x q x_p,x_q xp,xq 两个同符号的组合:
当 x ≡ 1 ( m o d n ) x \equiv 1 \ (mod \ n) x≡1 (mod n) 时, x p = 1 m o d p = 1 x_p = 1 \ mod \ p = 1 xp=1 mod p=1, x q = 1 m o d q = 1 x_q = 1 \ mod \ q = 1 xq=1 mod q=1 同为正号;
当 x ≡ − 1 ≡ n − 1 ( m o d n ) x \equiv -1 \equiv n - 1\ (mod \ n) x≡−1≡n−1 (mod n) 时, x p = ( n − 1 ) m o d p = − 1 x_p = (n-1) \ mod \ p = -1 xp=(n−1) mod p=−1, x q = ( n − 1 ) m o d q = − 1 x_q = (n-1) \ mod \ q = -1 xq=(n−1) mod q=−1 同为负号;
而其中的两个非平凡二次单位根,即 ± r \pm r ±r 对应着 x p , x q x_p,x_q xp,xq 两个异符号的组合,分别为 ( x p , x q ) = ( 1 , − 1 ) (x_p,x_q)=(1,-1) (xp,xq)=(1,−1) 和 ( x p , x q ) = ( − 1 , 1 ) (x_p,x_q)=(-1,1) (xp,xq)=(−1,1)。
当 x = r x=r x=r 对应 ( x p , x q ) = ( 1 , − 1 ) (x_p,x_q)=(1,-1) (xp,xq)=(1,−1) 时,可以得到 r m o d p = 1 r \ mod \ p = 1 r mod p=1,即 1 − r 1-r 1−r 为 p p p 的倍数。
当 x = r x=r x=r 对应 ( x p , x q ) = ( − 1 , 1 ) (x_p,x_q)=(-1,1) (xp,xq)=(−1,1) 时,可以得到 r m o d q = 1 r \ mod \ q = 1 r mod q=1,即 1 − r 1-r 1−r 为 q q q 的倍数。
因此 1 − r 1-r 1−r 一定为 p p p 或 q q q 的倍数,得证。
当接收方获得 d d d 为 p p p 或 q q q 后,计算 n / d n/d n/d 即可得到另一个素数的值。
我们假设消息空间以及加密算法中的明文空间为长度为 k k k 的 01 串,即 { 0 , 1 } k \{0,1\}^k {0,1}k;加密算法的密文空间为长度为 l l l 的 01 串,即 { 0 , 1 } l \{0,1\}^l {0,1}l。我们此处不关注具体使用什么样的加密算法,只把加解密当作黑盒子使用,拥有公钥能把明文加密成密文,拥有私钥能把密文解密成明文。
这里声明变量为 01 串只是因为协议中会使用到逐位的异或操作,记为 ⊕ \oplus ⊕。事实上,协议可以将这些变量的定义域以及异或操作推广至更一般的场景,有兴趣的可以查看原论文[2],此处用 01 串来表示,便于理解。
2选1OT协议中会用到加解密,这里为简化表示提前声明发送方拥有公钥和私钥,接收方拥有公钥。加密记为 E n c ( ⋅ ) Enc(\cdot) Enc(⋅),解密记为 D e c ( ⋅ ) Dec(\cdot) Dec(⋅)。此外流程中不对生成的随机串的长度进行说明,要在明文空间运算的长度就为 k k k,在密文空间运算的长度就为 l l l。协议具体流程如下:
正确性: M c ⊕ s ⊕ k = m c ⊕ s ⊕ k c ⊕ k = m c ⊕ s ⊕ D e c ( E n c ( k ) ⊕ r c ⊕ r c ) ⊕ k = m c ⊕ s ⊕ k ⊕ k = m c ⊕ s M_{c\oplus s}\oplus k=m_{c\oplus s} \oplus k_{c} \oplus k=m_{c\oplus s} \oplus Dec(Enc(k)\oplus r_c \oplus r_c) \oplus k=m_{c\oplus s} \oplus k \oplus k=m_{c\oplus s} Mc⊕s⊕k=mc⊕s⊕kc⊕k=mc⊕s⊕Dec(Enc(k)⊕rc⊕rc)⊕k=mc⊕s⊕k⊕k=mc⊕s。
解释:协议中有很多异或操作看着非常绕,实际上这些异或操作的目的只是为了混淆。
在第3步中,发送方生成随机比特 s s s 的目的只是为了混淆消息选择,等同于把消息 m 0 , m 1 m_0,m_1 m0,m1 随机打乱顺序后发送给接收方。因为第2步接收方拥有一个随机比特 c c c,如果发送方不进行混淆,那么 M 0 = m 0 ⊕ k 0 , M 1 = m 1 ⊕ k 1 M_0 = m_0\oplus k_0,M_1=m_1\oplus k_{1} M0=m0⊕k0,M1=m1⊕k1,而接收方拥有 k = k c k = k_c k=kc 就可以对应获取到 m c m_c mc(这里的 k k k 充当一种对称加密的密钥),这意味着接收方最终能获取到哪个消息完全由他自己生成的随机比特 c c c 决定,一旦接收方不遵循协议随机生成 c c c,就无法保证接收方不能选择消息这个特性了。
既然发送方会混淆输出,接收方选择随机比特 c c c 的意义是什么?这是因为接收方最后得到的消息是 m c ⊕ s m_{c\oplus s} mc⊕s,如果接收方不随机生成 c c c,而是在协议中固定 c = 0 c=0 c=0 或 c = 1 c=1 c=1,那么发送方就能知道接收方收到了哪一个消息了,这也不符合OT的要求。同样的,接收方生成随机串 k k k 也起到了保护 c c c 这个关键信息的作用。由于 c c c 和 s s s 均为随机生成的,因此接收方收到这两条消息的概率分别为1/2。
协议能够保证接收方不了解另一条消息的内容。不妨设 c = s = 0 c=s=0 c=s=0,接收方会收到 m 0 m_0 m0,对于消息 m 1 m_1 m1,由于 M 1 = m 1 ⊕ k 1 M_1=m_1\oplus k_1 M1=m1⊕k1,而 k 1 = D e c ( q ⊕ r 1 ) = D e c ( E n c ( k ) ⊕ r 0 ⊕ r 1 ) k_1=Dec(q\oplus r_1) = Dec(Enc(k)\oplus r_0 \oplus r_1) k1=Dec(q⊕r1)=Dec(Enc(k)⊕r0⊕r1) 是无意义的随机串,因次接收方无法获得 m 1 m_1 m1 的信息。
我们沿用2选1OT协议的一些假设(消息长度、加解密符号等),可以观察到2选1OT协议中的两个随机比特 c c c 和 s s s 决定了接收方最终收到的是哪一条消息。如果我们要实现让接收方具有选择消息的能力,只需要让接收方输入 c c c,并去掉随机比特 s s s 的生成即可。具体协议流程如下:
正确性与相关分析可参考2选1OT协议。
可以观察到,上述两个2选1OT协议均可自然扩展至对应的n选1OT协议,只许让发送方生成 n n n 个随机串, c c c 和 s s s 的取值范围从 { 0 , 1 } \{0,1\} {0,1} 变为 { 0 , 1 , ⋯ , n − 1 } \{0,1,\cdots,n-1\} {0,1,⋯,n−1} 即可,其余流程基本一致。
Beaver 提出可以把OT拆分为预处理阶段和在线阶段,其中预处理阶段使用的就是现在所说的随机OT协议。我们先介绍随机OT协议,再对Rabin-OT、2选1OT 和 选择2选1OT 的优化进行介绍。
该协议的功能类似与上面提到的2选1OT协议,只不过发送方不再提供输入,因此我们也只需对应的把发送方的输入换成协议内随机生成即可,协议流程如下:
上述流程与2选1OT协议的唯一区别在于第一步中发送方的两个消息是随机生成的,其余均可参考2选1OT协议。
Beaver 在论文中给出了Rabin-OT、2选1OT 和 选择2选1OT 的优化 [ 3 ] ^{[3]} [3],本文不对 Rabin-OT 的预处理优化作介绍,因为 Rabin-OT 的实用性有限,而通过 2选1OT 可以轻易构造出 Rabin-OT。对 Rabin-OT 的优化感兴趣的可以自行阅读论文[3]。
通过 2选1OT 构造 Rabin-OT:只需将2选1OT中发送方的其中一个消息 m 0 m_0 m0 设置为Rabin-OT中发送方的消息 m m m,把另一个消息 m 1 m_1 m1 设置为公开信息或无用信息即可。
预处理思想:Beaver 提出的预处理优化的主要思想是把协议分为预处理阶段和在线阶段。在预处理阶段中发送方和接收方可以任意调用各种OT协议来辅助生成信息(预处理可以提前进行,不关心这个阶段产生的时间花销),而在线阶段可以利用这些辅助信息加速OT的实现。没错,可以理解为用OT实现OT。
调用一次随机OT,发送方获得两个随机串 r 0 , r 1 r_0,r_1 r0,r1,接收方获得其中一个随机串 r d r_d rd,且接收方知道 d d d 的值。
可以看到经过预处理阶段的优化后,在线阶段省去了费时的公钥加解密运算,只需要进行廉价的异或操作(或其他对称加密操作),即可实现2选1OT。
分析:正确性类似于未优化的2选1协议,第一步生成的 c c c 的作用类似于之前的 s s s,都是为了混淆消息,不能仅由接收方自己就能决定收到哪条消息。可能存在疑问:接收方的 d d d 也是预处理阶段随机生成的,算不算已经混淆过?实际上2选1OT应该达到在执行协议前无法确定最终接收方能收到哪条消息,预处理相当于提前计算,真正调用协议是从在线阶段算起的,因此还是需要发送方进行一次混淆。
调用一次随机OT,发送方获得两个随机串 r 0 , r 1 r_0,r_1 r0,r1,接收方获得其中一个随机串 r d r_d rd,且接收方知道 d d d 的值。
分析:此处 e e e 存在的目的就是让接收方想要的消息 m c m_c mc 一定要和 r d r_d rd 进行异或形成 M c M_c Mc,因为接收方只拥有 r d r_d rd,所以只能解密和 r d r_d rd 异或产生的密文。我们可以分类讨论:
若 c = 0 c=0 c=0,则 e = d e=d e=d, M c = M 0 = m 0 ⊕ r e = m 0 ⊕ r d M_c = M_0 = m_0 \oplus r_e = m_0 \oplus r_d Mc=M0=m0⊕re=m0⊕rd,接收方可以解密获得 m 0 m_0 m0。
若 c = 1 c=1 c=1,则 e = 1 − d e=1-d e=1−d, M c = M 1 = m 1 ⊕ r 1 − e = m 1 ⊕ r d M_c = M_1 = m_1 \oplus r_{1-e} = m_1 \oplus r_d Mc=M1=m1⊕r1−e=m1⊕rd,接收方可以解密获得 m 1 m_1 m1。
由于接收方不知道 r 1 − d r_{1-d} r1−d,因此无法获取另一条消息 m 1 − c m_{1-c} m1−c 的内容。发送方不知道 c c c 和 d d d,因此也无法了解到接收方收到了哪一条消息。
本文为作者在学习相关知识时的一种记录,便于以后的回顾。作者并没有系统地学习过密码学,因此在表述上可能会存在不严谨甚至出错的地方,文章仅供参考,欢迎大家与我交流,一起进步!
其他平台: