密码协议学习笔记(7):不经意传输

不经意传输:

不经意传输(Oblivious Transfer,OT)这个名字不太直观,实际上,该协议的描述是:

发送方Alice向接收方Bob发送了$n$条消息,$m_1,\cdots,m_n$,

接收方Bob从中选择一条或几条消息.

发送方无法控制接收方的选择,也无法得知接收方的选择,而接收方不能得到其选择之外的信息.

该协议的应用场景例如:网上购物,卖家将自己的货物信息发送给买家,但买家不希望卖家知道自己查询了哪些货物的报价(这可能涉及隐私,你也不希望自己浏览斐济杯的记录被其他人知道吧),但同时,卖家也不希望将买家未查询的信息额外地透露给买家(这则涉及商业秘密).

因此,不经意传输在设计时需要考虑的因素有:

  1. 正确性:若发送方和接收方正确执行协议,则接收方可得到其选择的信息.
  2. 不经意性(接收者的隐私性):接收方选择了那些信息,发送方是无法得知的.
  3. 安全性(发送者的隐私性):接收方不能得到它没有选择接收的信息.

在此协议中,协议的参与者可按其行为分类为:

  1. 可信参与者:按协议执行的参与者
  2. 半可信参与者/被动攻击者:按协议执行,但试图通过接收到的消息计算出额外的信息
  3. 恶意参与者/主动攻击者:不按照协议执行

常见的不经意传输形式:

根据发送信息和获知信息的条数,可将不经意传输分为如下几类:

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也没有任何有效信息.

不经意传输应用:

    1. 作为组件构造其他高级密码协议

      密码学领域的重要设计原则是,先设计参与者都是半可信时能保证安全的密码协议,然后迫使参与者证明它们都是半可信的,进而构造出抵抗恶意攻击者的协议

      不经意传输便可用于后一步.将不经意传输协议作为原语,通过比特承诺,零知识证明保证协议的正确性和参与者本地数据的私有性.

如$OT_2^1$可用于安全计算,公平的盲签名,电子拍卖,$OT^1_n$可用于匿名指纹

  1. 直接用于电子商务,内容保护等领域用于保护参与者的隐私
  2. 应用于保护隐私的数据库检索系统(例如前文提到的自适应不经意传输协议)

 

posted @ 2023-09-25 16:54  Isakovsky  阅读(645)  评论(0编辑  收藏  举报