密码协议学习笔记(7):不经意传输
不经意传输:
不经意传输(Oblivious Transfer,OT)这个名字不太直观,实际上,该协议的描述是:
发送方Alice向接收方Bob发送了$n$条消息,$m_1,\cdots,m_n$,
接收方Bob从中选择一条或几条消息.
发送方无法控制接收方的选择,也无法得知接收方的选择,而接收方不能得到其选择之外的信息.
该协议的应用场景例如:网上购物,卖家将自己的货物信息发送给买家,但买家不希望卖家知道自己查询了哪些货物的报价(这可能涉及隐私,你也不希望自己浏览斐济杯的记录被其他人知道吧),但同时,卖家也不希望将买家未查询的信息额外地透露给买家(这则涉及商业秘密).
因此,不经意传输在设计时需要考虑的因素有:
- 正确性:若发送方和接收方正确执行协议,则接收方可得到其选择的信息.
- 不经意性(接收者的隐私性):接收方选择了那些信息,发送方是无法得知的.
- 安全性(发送者的隐私性):接收方不能得到它没有选择接收的信息.
在此协议中,协议的参与者可按其行为分类为:
- 可信参与者:按协议执行的参与者
- 半可信参与者/被动攻击者:按协议执行,但试图通过接收到的消息计算出额外的信息
- 恶意参与者/主动攻击者:不按照协议执行
常见的不经意传输形式:
根据发送信息和获知信息的条数,可将不经意传输分为如下几类:
1-out-of-2不经意传输($OT_2^1$):
Alice有两条消息$m_1,m_2$,协议执行后Bob只能选择获知其中的一条(安全性),而Alice不知道Bob选择的是哪条(不经意性),且Bob可以确信它得到了想要的信息(正确性).
1-out-of-n不经意传输($OT_n^1$):
Alice有若干条消息$m_1,\cdots,m_n$,协议执行后Bob只能选择获知其中的一条(安全性),而Alice不知道Bob选择的是哪条(不经意性),且Bob可以确信它得到了想要的信息(正确性).
k-out-of-n不经意传输($OT_n^k$):
Alice有若干条消息$m_1,\cdots,m_n$,协议执行后Bob可以选择获知其中的$k$条($k<n$)(安全性),而Alice不知道Bob选择的是哪条(不经意性),且Bob可以确信它得到了想要的信息(正确性).
根据不经意传输的实施办法,又可分为如下几种形式:
非适应性不经意传输:
接收者Bob提前选择自己要得知哪一部分信息,协议中不能改变选择,一般适用于安全多方计算协议设计.
适应性不经意传输:
发送者Alice事先发送秘密,而接收者再确定自己要获得哪一部分秘密,一般用于隐私保护的数据库搜索.
分布式不经意传输:
将A的职能分布到多个服务器上,发送方Alice和接收方Bob之间没有直接交互,他们都分别与这组服务器分享,实现信息传递。
可公开验证的不经意传输:
在一些安全性要求高的协议中,需要让任何人都能够验证Bob获得了应该得到的秘密,而且没有获得更多的秘密。在这样的验证中,通信双方都不希望泄漏各自的秘密或秘密选择以及获得的秘密。
完全不经意传输:
发送者Alice和接收者Bob都不知道哪些秘密被Bob接收.
不经意传输的设计方法:
不经意传输协议的设计模型:
基于计算复杂性理论设计不经意传输额协议.
假设攻击者拥有概率多项式计算时间,那么不经意传输协议可以在一系列密码学假设下实现.
也有基于其他安全假设的不经意传输协议设计.
$OT_2^1$的设计方法:
系统参数:
非对称加密系统$(PEnc_{(\cdot)}(\cdot),PDec_{(\cdot)}(\cdot))$,记其信息空间为$\mu_x$
对称加密系统$(SEnc_{(\cdot)}(\cdot),SDec_{(\cdot)}(\cdot))$
(注,$\oplus$可视为按位异或操作)
Alice | Bob | |
生成公钥$pk$和随机数$c_0,c_1\in \mu_x$ | $c_0,c_1,pk \rightarrow$ | |
$q \leftarrow$ |
选择随机数$r\in\{0,1\}$, 将两个随机数之一$c_r$作为盲化因子 会话密钥$k\in \mu_x$ 使用$pk$将$k$加密并用$c_r$盲化,以得到 $q=PEnc_{pk}(k) \oplus c_r$ |
|
解密并计算 $k_0'=PDec_{pk}(q\oplus c_0)$ $k_1'=PDec_{pk}(q\oplus c_1)$ 两个值解密后其中一个是会话密钥,另一个是无意义值,但无法区分 |
||
使用$k_0',k_1'$分别加密两段信息$m_0,m_1$ $SEnc_{k_0'}(m_0)$ $SEnc_{k_1'}(m_1)$ |
$SEnc_{k_0'}(m_0)$ $SEnc_{k_1'}(m_1)$ $\rightarrow$ |
|
使用会话密钥分别尝试解密 $SDec_{k}(SEnc_{k_0'}(m_0))$ $SDec_{k}(SEnc_{k_1'}(m_1))$ 其中之一是有意义信息,另一个为无意义值 |
观察协议的执行过程,正确性,不经意性和安全性是显然的.
$OT_n^1$的设计方法:
系统参数:
大质数$q$
$q$阶循环群$G$
$G$的两个生成元$g,h$(\log_gh是保密的)
初始化:
Alice发送的信息为$m_1,m_2,\cdots,m_n\in G$,Bob选择接收的信息为第$t\in[1,n]$条
交互阶段:
Alice | Bob | |
$y \leftarrow$ |
生成一个随机数$r\in[1,q-1]$ 计算$y=g^rh^t$ |
|
随机生成$k_1,\cdots,k_n\in [1,q-1]$ 计算 $c_i=(g^{k_i},m_i\cdot(\frac{y}{h^i})^{k_i})$ $i\in[1,n]$ |
$c_1,\cdots,c_n$ $\rightarrow$ |
|
记$c_t=(a_t,b_t)$ 计算$m_t'=\frac{b_t}{(a_t)^r}$ |
正确性:
$$\begin{aligned}
m_i'=&\frac{b_i}{(a_i)^r} \\
=&\frac{m_i\cdot (\frac{y}{h^i})^{k_i}}{(g^{k_i})^r}\\
=&m_i\cdot (\frac{g^rh^t}{h^i})^{k_i}\cdot g^{-(k_i\cdot r)}\\
=&m_i \cdot g^{r\cdot k_i} \cdot h^{t\cdot k_i}\cdot h^{-(i\cdot k_i)} \cdot g^{-(k_i\cdot r)}\\
=&m_i\cdot h^{t\cdot k_i}\cdot h^{-(i\cdot k_i)}
\end{aligned}$$
当$i=t$时
$$\begin{aligned}
m_t'=&m_t\cdot h^{t\cdot k_t}\cdot h^{-(t\cdot k_t)}\\
=&m_t
\end{aligned}$$
不经意性:
Alice由于不知道$r$,因此$y=g^rh^t$对于它来说是完全随机的,无法从中获得$t$的任何信息
安全性:
对于$i\neq t$,有$m_i'=m_i\cdot h^{t\cdot k_i}\cdot h^{-(i\cdot k_i)}$
Bob由于不知道$k_i$,因此无法得知$m_i$
$OT_n^k$的设计方法:
注意,该方案属于适应性不经意传输,即Bob在获知了第一条信息之后,可以在剩下的$n-1$条消息中任意地选择获取的下一条消息.
该方案基于不经意密钥搜索OKS(Oblivious Keyword Search).假设$W$是所有密钥集合,在承诺阶段,Alice首先承诺了$n$个数据,在后来的每一个交互过程中,用户Bob在Alice不知道其选择的前提下,可自适应地选择一个密钥$\omega \in W$
系统参数:
$G$随机数发生器
$H$安全哈希函数
($||$符号可以理解为字符串拼接,$\oplus$可视为按位异或操作)
承诺阶段:
Alice | Bob | |
生成RSA公钥$(N,e)$,私钥$d$ | $(N,e) \rightarrow$ | |
产生$n$个数据 $B_1,\cdots,B_n$ $B_i=(\omega_i,c_i)$ 其中$\omega_i\in W$(或许可以称之为消息标签) $c_i$是内容 |
||
计算 $K_i=(H(\omega_i))^d \mod N$ $E_i=G(\omega_i || K_i || i)\oplus(0^l || c_i)$ |
$E_1,\cdots,E_n$ $\rightarrow$ |
交互阶段:
Bob共有$k$次向Alice查询信息的机会,每次获得一个数据
对于第$j\in[1,k]$次交互过程
Alice | Bob | |
$Y \leftarrow$ |
选择消息标签$\omega_j^*\in\{\omega_1,\cdots,omega_n\}$ 和随机元素$r$ 计算$Y=r^{e}H(\omega_j^*)$ |
|
计算$K'=Y^d \mod n$ | $K' \rightarrow$ | |
计算$K=K'\cdot r^{-1}$ | ||
对于$i=1,2,\cdots,n$,依次计算 $(a_i||b_i)=E_i\oplus G(\omega_j^*|| K || i)$ 若某个$a_i=0^l$,则得到选择的消息 |
正确性:
$$\begin{aligned}
K=&K'\cdot r^{-1} \\
=&Y^d\cdot r^{-1}\\
=&(r^eH(\omega_j^*))^d\cdot r^{-1}\\
=&(r^e)\cdot (H(\omega_j^*))^d\cdot r^{-1} \\
=&r\cdot (H(\omega_j^*))^d\cdot r^{-1} \qquad (\text{RSA密码体系})\\
=&(H(\omega_j^*))^d
\end{aligned}$$
$$\begin{aligned}
&E_i\oplus G(\omega_j^*|| K || i)\\
=&G(\omega_i || K_i || i)\oplus(0^l || c_i)\oplus G(\omega_j^*|| K || i)\\
=&G(\omega_i || (H(\omega_i))^d || i)\oplus(0^l || c_i)\oplus G(\omega_j^*|| (H(\omega_j^*))^d || i)\\
\end{aligned}$$
当$\omega_j^*=\omega_i$时,
$$\begin{aligned}
&E_i\oplus G(\omega_j^*|| K || i)\\
=&G(\omega_i || (H(\omega_i))^d || i)\oplus(0^l || c_i)\oplus G(\omega_i|| (H(\omega_i))^d || i)\\
=&0^l || c_i \qquad (\text{异或的性质})
\end{aligned}$$
将其拆分为$a_i||b_i$,前半部分为全$0$,后半部分为消息的值.
(博主注:为什么要把随机数产生器$G$和安全哈希函数$H$分开?)
不经意性:
每次交互时Alice都不知道随机数$r$是多少,因此无法从$Y=r^{e}H(\omega_j^*)$中获取关于$\omega_j$的任何信息
安全性:
如果没有Alice发送的$K$,$G(\omega_i || K_i || i)$生成的数据对于Bob来说完全随机,因此,被$G(\omega_i || K_i || i)$按位异或后得到的$E_i$对于Bob也没有任何有效信息.
不经意传输应用:
- 作为组件构造其他高级密码协议
密码学领域的重要设计原则是,先设计参与者都是半可信时能保证安全的密码协议,然后迫使参与者证明它们都是半可信的,进而构造出抵抗恶意攻击者的协议
不经意传输便可用于后一步.将不经意传输协议作为原语,通过比特承诺,零知识证明保证协议的正确性和参与者本地数据的私有性.
如$OT_2^1$可用于安全计算,公平的盲签名,电子拍卖,$OT^1_n$可用于匿名指纹
- 直接用于电子商务,内容保护等领域用于保护参与者的隐私
- 应用于保护隐私的数据库检索系统(例如前文提到的自适应不经意传输协议)