OT,不经意传输,常被大量用于安全多方计算中,能够很大程度决定一个SMPC协议的效率。它的核心概念是接收方可以从发送方(持有秘密信息)手中选择性接收自己想要的信息而接收方对所选择的信息内容一无所知。目前有2-选-1 OT及其扩展OTE(用于PSI,SMPC)和n-选-1 OT及其扩展OTE(PSI,SPIR,不经意采样,不经意多项式求值等等)
即,基于公钥密码学的基础 2-选-1 OT协议
半诚实模型
首先假设存在一个公钥加密方案,可以在不获得对应私钥的条件下采样得到一个随机的公钥,经典原语如图
发送方 S S S持有秘密消息 x 1 , x 2 x_1,x_2 x1,x2,而接收方 R R R则进行选择。现在来理解一下,首先发送方 S S S只能看到由 R R R发过来的两个公钥,显然 S S S是没办法以超过 1 2 \frac 1 2 21概率来预测出 R R R私钥所对应的公钥的。接着 R R R只能看到两个 S S S发过来的两个密文,但私钥只能解开其中一个密文。
当然值得注意的是,这只能保证在诚实好奇模型下的安全性,无法抵御恶意。假如恶意的 R R R简单生成两对公私钥发送给 S S S,那就可以解密得到 S S S的两个秘密了。
即扩展OT协议
在前面的Base OT中,对于每一个选择比特都需要进行一次公钥密码操作,计算量有些大,那么是否有方法能够降低大量执行OT协议时所需要的公钥密码操作数量呢?这就需要提到OTE了,这是一种OT扩展技巧,将伪随机生成器与OT结合,只需要执行少量公钥密码操作,配合上高效的对称密码学,即可产生多项式数量级个大量的OT协议,并且可以保证在诚实好奇模型下的安全。
基于Yao的混淆电路。下面将混淆电路中的生成方称为发送方 S S S,计算方称为 R R R,我们知道计算方要完成计算需要利用OT找生成方拿到密钥,假定 R R R的选择输入比特为 m m m,那么这个GC电路就需要 m m m个OT协议。
这里令 S S S持有的秘密值为 ( x 1 0 , x 1 1 ) , … , ( x m 0 , x m 1 ) (x_1^0,x_1^1),\dots,(x_m^0,x_m^1) (x10,x11),…,(xm0,xm1)共 m m m对, R R R的输入比特是 m m mbits的选择比特串 ( b 1 , … , b m ) (b_1,\dots,b_m) (b1,…,bm)
核心如下
一个功能函数电路 F F F,输入是来自 R R R的少量比特串,输出多项式数量级的OT协议执行结果。
R R R输入的是随机选择的 k k k比特字符串 r r r,令 G G G为一个伪随机生成器,功能是将随机选择的 k k k比特字符串扩展到 m m m比特长( k < < m k<
步骤如下
可以看到 R R R只需要提供 k k k比特常数长度的输入,即可扩展实现 m m m个OT协议。
(吐槽:感觉怪怪的,随机输入的 r r r实际上起到的作用貌似就是个 b b b的掩码?)
BUT,这个协议很低效,要对一个很大的GC电路进行求值。那么如何提升效率呢?
目标:基于少量的 k k k个基础OT协议,应用对称密码学操作实现 m > > k m>>k m>>k个有效OT扩展协议。
具体步骤如下
t j ⊕ u j = r j ⋅ 1 k ⟶ d e f { 1 k , i f r j = 1 0 k , i f r j = 0 t_j \oplus u_j = r_j \cdot 1^k \stackrel{def}{\longrightarrow} \begin{cases} 1^k, \quad if \ r_j = 1\\ 0^k, \quad if \ r_j = 0 \end{cases} tj⊕uj=rj⋅1k⟶def{1k,if rj=10k,if rj=0
这条件的大概意思是,把 R R R选的这个选择比特串进行**重复编码,**也就是把这个 r r r看作一个列向量,然后重复copy到 k k k列,构成一个 m × k m \times k m×k 的矩阵,然后拆分成 T , U T , U T,U两个矩阵,它们的异或结果就是重复编码的矩阵。
借用一个图来表示就是,
每一列元素有 m m m个( m > > k m>>k m>>k),在传递消息时,只需要加密发送两个 m m m比特长的字符串,然后再用OT传输短字符串的解密密钥,即可完成长消息的传输。
第 i i i个OT协议中,输入 s i s_i si,将得到输出 q i ∈ { t i , u i } q^i \in \{t^i,u^i\} qi∈{ti,ui}。
用 q j , q i q_j,q^i qj,qi分别表示矩阵的行和列,观察可以得到,当 r j = 0 r_j=0 rj=0时, q j = t j = u j q_j = t_j = u_j qj=tj=uj,而当 r j = 1 r_j = 1 rj=1时, q j = t j ⊕ s q_j = t_j \oplus s qj=tj⊕s
进一步结合前面,可以得到一个结论
q j = t j ⊕ [ r j ⋅ s ] = { t j , i f r j = 0 t j ⊕ s , i f r j = 1 q_j = t_j \oplus [r_j \cdot s ]= \begin{cases} t_j, \quad if \ r_j = 0 \\ t_j \oplus s, \quad if \ r_j = 1 \end{cases} qj=tj⊕[rj⋅s]={tj,if rj=0tj⊕s,if rj=1
注意到, q j q_j qj的取值取决于接收方 R R R的选择比特 r j r_j rj,也能看到整个过程 R R R没有得到任何 s s s的信息,它只能得到两个随机字符串的其中一个。另外,开始时的Base OT 是按照列进行,共 k k k列,所以进行了 k k k次,然而每列有 m m m个元素,则该协议达成目标:基于少量的 k k k个基础OT协议,应用对称密码学操作实现 m > > k m>>k m>>k个有效OT扩展协议。
那么这个拿到的随机字符串有啥用?
如果 S S S接下来把 H ( q j ) H(q_j) H(qj)和 H ( q j ⊕ s ) H(q_j \oplus s) H(qj⊕s)这两个看作密钥去加密两个秘密值得到 H ( q j ) ⊕ s 0 H(q_j) \oplus s_0 H(qj)⊕s0和 H ( q j ⊕ s ) ⊕ s 1 H(q_j \oplus s) \oplus s_1 H(qj⊕s)⊕s1并发送给 R R R, R R R就可以通过选择比特去拿到关联的秘密值。
实用安全多方计算导论
不经意传输(OT)-总结
高莹, 李寒雨, 王玮, 刘翔, 陈洁. 不经意传输协议研究综述. 软件学报, 2023, 34(4): 1879-1906. http://www.jos.org.cn/1000-9825/6692.htm