zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

安全多方计算(1):不经意传输协议

2023-04-18 12:38:13 时间

学习&转载文章:安全多方计算(1):不经意传输协议

前言

在安全多方计算系列的首篇文章(安全多方计算之前世今生)中,我们提到了百万富翁问题,并提供了百万富翁问题的通俗解法,该通俗解法可按图1简单回顾。

图片

图1 百万富翁问题通俗解法

百万富翁问题通俗解法场景中,我们可以将Alice和Bob的诉求总结如下:

  • Alice:有9个装有物品的箱子,Bob只能打开其中一个箱子看到物品,看不到其他箱子内的物品。

  • Bob:不希望Alice知道自己打开的是哪个箱子。

百万富翁问题通俗解法可以通过密码学中的n选1的不经意传输协议(Oblivious Transfer,OT)完美解决。

通过百万富翁问题通俗解法场景描述,对OT协议解决的问题可抽象为:Alice拥有(n)条消息({m_1,…,m_n}),Bob想知道其中一条消息(m_i);通过执行OT协议,Bob可以正确获得想要知道的消息(m_i),且无法获得其它(n-1)条消息,而Alice无法知道Bob获得的是哪条消息。

OT协议按研究类别区分,可以分为以下3种OT协议:

  • 2选1的OT协议(2)条消息中正确解密(选)(1)条)
  • n选1的OT协议(n)条消息中正确解密(选)(1)条)
  • OT扩展协议(n)条消息中正确解密(选)(m)条,(m<n)

受篇幅所限,本文仅介绍2选1与n选1的OT协议,OT扩展协议则在后续系列文章中进行介绍。

利用RSA加密实现n选1的OT协议

自1981年提出以来,OT协议有多种多样的实现形式,其中最容易理解的是基于RSA公钥算法实现的n选1的OT协议[1]。

RSA加解密过程简介

此处不讲解RSA原理,只介绍RSA加解密过程和用到的参数,便于密码学知识储备不足的读者理解后面的OT协议。

  • RSA密钥参数:(N=p*q)(L=(p-1)*(q-1))其中(p)(q)为大素数。

  • RSA公私钥对:生成(d)(e),满足(d)(L)互质,(e)(L)互质,且(d*e(mod L)=1),则令((d,N))为公钥,(e)为私钥。

则RSA算法对明文(m)(m)为大整数)的加解密过程如图2所示。

图片

图2 RSA算法加解密计算过程

RSA实现n选1的OT协议过程描述

基于RSA公钥算法实现的n选1的OT协议执行过程如图3所示。

图片

图3 基于RSA公钥算法实现n选1的OT协议执行过程

协议执行过程分为4个步骤:

  1. Alice有(n)条消息,则产生(n)个RSA公私钥对,并将(n)个私钥保留,(n)个公钥发送给Bob。
  2. Bob随机产生一个大整数key,假定Bob想要获得第(t)条消息,则Bob用收到的第(t)个RSA公钥加密大整数key,加密计算结果为(s),Bob将(s)发送给Alice。
  3. Alice用保留的(n)个RSA私钥,依次解密(s),获得(n)个解密结果,依次为({key1,key2,…,keyt,…,keyn});利用对称加密算法,利用((key1,...,keyn)),加密对应的消息((m1,...,mn)),得到密文消息((M1,...,Mn)),将((M1,...,Mn))发送给Bob。
  4. Bob利用自己掌握的大整数(key)作为密钥,对第(t)条密文(Mt)进行对称解密,则得到想要的第(t)条原始明文消息(mt)

n选1的OT协议解决百万富翁问题

将图1中的百万富翁问题和图3中的n选1的OT协议结合,我们可以对图1中的操作步骤做如图4的改造:

  • Step1:Alice构造9条明文消息,序号(<x),消息为“0”;否则消息为“1”。

  • Step2:Alice与Bob执行9选1的OT协议,解密第7条消息,看到0,(y<x);看到1,(y≥x)

图片

图4 基于n选1的OT协议实现百万富翁问题

协议分析

该协议执行过程可以满足OT协议中Alice和Bob的核心诉求,关键在于第2步和第3步。

  • 第3步中,Alice利用(n)个私钥逐个尝试解密(s),得到((key1,...,keyn)),由于(s)是由Bob利用第(t)个公钥加密整数key计算得到的,因此只有keyt=key,但对于Alice来说,((key1,...,keyn))都是大整数,根本无法区分哪个才是Bob掌握的key,实现了Bob的诉求,即Alice无法知道Bob选择的是哪条消息。

  • 对于Bob来说,拿到了(n)个密文消息((M1,...,Mn)),但是自己只有一个key,此key只能解密消息(Mt),对于其他(n-1)条消息则无法解密,实现了Alice的诉求,即Bob只能正确得要Bob想要得到1条消息,无法正确得到其他(n-1)条消息。

如果(n=2),则该n选1的OT协议就退化成了2选1的OT协议。

虽然基于RSA实现的n选1的OT协议简单易懂,但是却存在如下缺陷:

  • key为0或1时,Alice的诉求无法保证。Bob如果将key指定为0或1,则根据图2中RSA的加解密计算方法,无论私钥(e)是否正确,解密后的(m0=m)均成立,意味着第3步中,Alice强行解密(s)得到的((key1,...,keyn))均等于key(看加密就懂了~),则Bob可以解密所有的消息,获得所有的明文((m1,...,mn))
  • 协议计算效率有待优化。第1步Alice需要产生(n)个RSA公私钥对,而RSA公私钥对的产生比较耗时。

为了提高安全性和计算效率,还有基于其他密码学方法的OT协议,如基于离散对数的OT协议,将在本文第四节和第五节中进行介绍。(如果您仅希望简单了解OT协议的原理和能解决的问题,则读到此处足矣,本文后面的内容适合有一定密码学基础读者。)

基于离散对数实现2选1的OT协议

为了优化OT协议计算效率和安全性,学者一般对2选1的OT协议和n选1的OT协议分开进行研究。对于2选1的OT协议,Tung Chou[2]于2015年基于离散对数问题,在DH密钥协商协议的基础上设计的2选1的OT协议,被认为是一个简单清晰的2选1的OT协议。

离散对数简介

离散对数问题通俗理解:有限域(F_p)(p)为大素数,(F_p)中元素共(p-1)个整数,取值([1,p-1]))上的大整数幂乘取模容易计算,即(a*b mod p=c,a,bin F_p),而计算对数是很困难的,即 (log_a^c(mod p)=b)

离散对数实现2选1的OT协议过程描述

基于离散对数实现2选1的OT协议执行过程如图5所示:

图片

图5 离散对数实现2选1的OT协议执行过程

协议执行过程分为4个步骤:

  • Alice有消息(m0、m1in F_p)*,则Alice挑选(g,ain F_p),并计算(A=g^a mod p),将(A、g、p)发送给Bob。
  • Bob想要第(sigma)条消息((sigma=0)或1),Bob挑选(bin F_p)*,并计算(B=A^sigma *g^b mod p),将B发送给Alice。
  • Alice利用(a、A、B),按照图4中的步骤3计算(C0)(C1)的值,然后用(C0)为密钥,对称加密(m0);用(C1)为密钥,对称加密(m1)。将加密后的密文(M0)(M1)传递给Bob。
    • 这里的密文(M_0)(M_1)只有一个是“可用”的,也就是说(C_0)(C_1)只有一个是可用的,当(sigma =0)时,(C_0)是可用的;当(sigma =1)时,(C_1)是可用的。
  • Bob利用(A)(b)计算解密密钥(g^{ab} mod p),对称解密对应的密文后拿到想要的正确消息。

协议分析

该协议的核心步骤是步骤2和步骤3,对这两步中的参数B、C0、C1进行展开,展开后如图6所示。

图片

图6 2选1的OT协议部分参数展开

从图6的展开式可知,无论(sigma =0)还是(sigma =1)(C0)(C1)始终只有一个为(g^{ab}),而另一个对于Bob而言则不可计算(Bob不知道(a)的值),(g^{ab})的计算实质上就是DH密钥协商协议。

对于Alice来说,仅知道(B、A、g),不知道(b)的情况下,由于离散对数问题难解,因此是无法推断出(sigma =0)还是(sigma =1)

与2.2的协议相比,该协议不存在Bob选择特殊的(b)会导致密文消息(M0)(M1)同时正确解密这一缺陷(只能正确解密其中一个)。

基于离散对数实现n选1的OT协议

本章节将以Wen-Guey Tzeng[3]提出的高效n选1的OT协议为例,讲解如何基于离散对数实现基本的n选1的OT协议。

离散对数实现n选1的OT协议过程描述

基于离散对数实现n选1的OT协议执行过程如图7所示。

图片

图7 离散对数实现n选1的OT协议执行过程

协议执行过程分为4个步骤:

  • Alice有(n)条消息({m1,…,mn})(miin G)((G)代表素数域(F_p^*)),挑选(G)的两个生成元(g)(h),将(g,h,p)发送给Bob。
  • 假定Bob想获得第(t)条消息,则Bob随机选择大整数(rin G),并计算(y=g^r*h^tmod p),将(y)发送给Alice。
  • Alice利用(y,g,h),分别对(n)条消息,重复执行图6中左下角的计算步骤,每一次执行都会随机选择大整数(k_iin G),并结合消息(mi)计算(ai)(bi)。然后将(n)((ai,bi))发送给Bob。
  • Bob拿到(n)((ai,bi))后,利用掌握的大整数(r),计算想要的第(t)条消息(m_t=b_t∕(a_t)^r)

协议分析

对于第4步Bob的操作,我们把消息(m_t)泛指为(m_x),则对(m_x)的计算公式展开后如图8所示。

图片

图8 消息mx的计算公式展开

从图8可以看出,要想获得消息(m_x),要么令(x=t),此时消息为Bob想要获得的消息;要么计算出(h^{(t-x)*k_x}),由于(k_x)是Alice的秘密数字,因此保证了Bob不可能正确解密除消息(m_t)之外的其余(n-1)条消息。

对于Alice来说,虽然知道(y,g,h),但是不知道(r)的情况下,由于离散对数问题难解,因此是无法推断出(t)的正确值。

与2.2的协议相比,该协议不存在Bob选择特殊的(r)会导致(n)条消息同时正确解密这一缺陷,同时也不存在需要产生(n)对公私钥这一耗时操作。

总结

本文介绍了OT协议和3个基于密码学实现的OT协议实例,并结合百万富翁问题的通俗解法看到了OT协议的应用实例,这样的实例很难看出OT协议的重要性。

其实OT协议是安全多方计算中很重要的一个协议,在安全多方计算系列的首篇文章(安全多方计算之前世今生)中,我们提到,安全多方计算的通用技术路线可以用混淆电路解决,而混淆电路的构建离不开OT协议。因此,下期文章将会讲解如何通过OT协议实现混淆电路,以及如何实现基于混淆电路的通用安全多方计算路线。

参考文献

[1] https://en.wikipedia.org/wiki/Oblivious_transfer

[2] Chou T , Orlandi C . The Simplest Protocol forOblivious Transfer[C]// International Conference on Cryptology and InformationSecurity in Latin America. Springer International Publishing, 2015.

[3] Tzeng W G . Efficient 1-out-of-noblivious transfer schemes with universally usable parameters[J]. IEEETransactions on Computers, 2004, 53(2):p.232-240.