不经意传输(OT)了解

概述

OT,不经意传输,常被大量用于安全多方计算中,能够很大程度决定一个SMPC协议的效率。它的核心概念是接收方可以从发送方(持有秘密信息)手中选择性接收自己想要的信息而接收方对所选择的信息内容一无所知。目前有2-选-1 OT及其扩展OTE(用于PSI,SMPC)和n-选-1 OT及其扩展OTE(PSI,SPIR,不经意采样,不经意多项式求值等等)

Base OT

即,基于公钥密码学的基础 2-选-1 OT协议
半诚实模型
首先假设存在一个公钥加密方案,可以在不获得对应私钥的条件下采样得到一个随机的公钥,经典原语如图
image.png
发送方 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的两个秘密了。

OTE

即扩展OT协议
在前面的Base OT中,对于每一个选择比特都需要进行一次公钥密码操作,计算量有些大,那么是否有方法能够降低大量执行OT协议时所需要的公钥密码操作数量呢?这就需要提到OTE了,这是一种OT扩展技巧,将伪随机生成器与OT结合,只需要执行少量公钥密码操作,配合上高效的对称密码学,即可产生多项式数量级个大量的OT协议,并且可以保证在诚实好奇模型下的安全。

Beaver的非黑盒构造

基于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<<m k<<m
步骤如下

  1. 首先, R R R S S S发送用随机生成字符串 G ( r ) G(r) G(r)加密的输入比特串 b ⊕ G ( r ) b \oplus G(r) bG(r)
  2. S S S给功能函数 F F F提供输入为 ( 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对秘密值以及一个 m m m比特长度的字符串 b ⊕ G ( r ) b \oplus G(r) bG(r)
  3. R R R提供给功能函数 F F F输入为 r r r F F F将计算 m m m比特长度的字符串 G ( r ) G(r) G(r),并解密 b ⊕ G ( r ) b \oplus G(r) bG(r),得到选择字符串 b b b
  4. 最后 F F F R R R输出 b i b_i bi对应的秘密值 x b i x_{b_i} xbi

可以看到 R R R只需要提供 k k k比特常数长度的输入,即可扩展实现 m m m个OT协议。
(吐槽:感觉怪怪的,随机输入的 r r r实际上起到的作用貌似就是个 b b b的掩码?)
BUT,这个协议很低效,要对一个很大的GC电路进行求值。那么如何提升效率呢?

IKNP[03]

目标:基于少量的 k k k个基础OT协议,应用对称密码学操作实现 m > > k m>>k m>>k个有效OT扩展协议。
具体步骤如下

  1. 假设接收方 R R R的选择比特串为 r ∈ { 0 , 1 } m r \in \{0,1\}^m r{ 0,1}m R R R选择两个 m × k m \times k m×k的矩阵 T , U T,U T,U。令 t j , u j ∈ { 0 , 1 } k t_j,u_j \in \{0,1\}^k tj,uj{ 0,1}k标识两个矩阵的行向量,矩阵的元素都是随机选择的,需要满足

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} tjuj=rj1kdef{ 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两个矩阵,它们的异或结果就是重复编码的矩阵。
借用一个图来表示就是,
image.png

  1. 发送方 S S S选择随机字符串 s = { 0 , 1 } k s=\{0,1\}^k s={ 0,1}k,接着调换双方的角色,调用 k k k个2选1-OT,接收方 R R R根据 s s s的各个比特值 s i s_i si向发送方 S S S依次发送 T , U T,U TU矩阵的各个列。即 t i , u i t^i,u^i ti,ui表示第 i i i列,它们作为OT协议的秘密值,而 s i s_i si则作为选择比特。

每一列元素有 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}

  1. 然后将发送方 S S S获得的列 q i q_i qi拼起来变成一个矩阵 Q Q Q,借用一张图表示,就是长成这样

image.png
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=tjs
进一步结合前面,可以得到一个结论

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[rjs]={ tj,if rj=0tjs,if rj=1

  1. 最后,为了防止 s s s重复使用导致消息之间存在一定相关性,采用一个PRG来解决。假定 H H H为一个PRG,一个健壮的哈希函数,发送方 S S S持有 s s s Q Q Q,此时就可以计算得到两个随机字符串对 H ( q j ) , H ( q j ⊕ s ) H(q_j),H(q_j \oplus s) H(qj),H(qjs),而接收方 R R R持有 r r r(选择比特)和 T , t j T,t_j T,tj(随机字符串对之一),只能通过选择比特计算得到其中一个 H ( t j ) H(t_j) H(tj)。因此 m m m行矩阵的每一行都生成了一个2选1-OT协议,成功传输一个随机字符串。

借用一个图来表示协议内容
image.png

注意到, 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(qjs)这两个看作密钥去加密两个秘密值得到 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(qjs)s1并发送给 R R R R R R就可以通过选择比特去拿到关联的秘密值。

KK[13]

参考

实用安全多方计算导论
不经意传输(OT)-总结
高莹, 李寒雨, 王玮, 刘翔, 陈洁. 不经意传输协议研究综述. 软件学报, 2023, 34(4): 1879-1906. http://www.jos.org.cn/1000-9825/6692.htm

猜你喜欢

转载自blog.csdn.net/qq_43271194/article/details/131013373