这篇1980年的论文首次提出了如何构造1-out-of-2 OT。在这篇论文中,1-out-of-2 OT的定义是:发送者向接收者发送其拥有的两条消息其中之一,如果协议正确执行,则接收者获得其中任意一条消息的概率各是1/2,同时他无法获得另外一条消息的任何信息。当接收者收到消息后,发送者对接收者收到的信息一无所知。

论文前几章讲的是如何使用OT构造抛币协议、电子邮件确认协议,在第8章才讲到如何构造1-out-of-2 OT协议。但作为学习笔记,不妨直接从如何构造OT开始写。

1-out-of-2 OT(S, R, M0, M1)

  1. 发送者S随机选择密钥对(可以是RSA密钥对)(Ex, Dx),S生成两个随机数m0,m1。将公钥Ex、m0、m1发送个给接收者R。
  2. 接收者R随机选择其中一条消息记为mr(r取值0或1),再生成一个随机数k。接收者R计算q=Ex(k) xor mr,并发送q给发送者S。
  3. S分别将自己的两条消息m0、m1带入计算ki'=Dx(q xor mi) (i取值0或1)。接着,S随机选择一个比特s,将真正要发送的消息M0、M1带入计算:(M0 xor ks', M1 xor k~s xor 1~', s)并将这一组消息发送给R。

上述协议执行完后,接收者R接收到两条消息,但其中有一条消息是M0、M1的其中之一,另一条消息是对他没有用的垃圾值。因此对于接收者R来说他只得到了其中一条消息,得到任意一条消息的概率是1/2。

分析:

  1. 首先在第1步中,发送者S发送了自己知道的两条消息,这是第3步他能继续计算的关键。
  2. 在第2步中,接收者对这两条消息做了简单的混淆,通过随机选择其中一条并做与随机数异或来达到对S隐藏的目的。
  3. 在第3步中,S接收到一条消息,但只能部分解密。他能做的是将自己的两条消息都合并到这个秘密值中,一并返回给接收者R。由于在第2步中接收者R只返回给他一条消息,参与这条消息运算的是m0、m1中的哪一个他无从得知(由公钥加密保证),因此S也无法得知他解密得到的两个ki'中的哪一个是正确的。
    4. 接收者R收到两条消息,其中一条是用他生成的k参与计算得到,它可以解密得到附加在这个消息上的真实消息;另一条是S在第二步错误解密得到的假的k',而他没有私钥,没法恢复出原始消息,所以收到的这条消息对他来说是没有用的数值。由此就完成了1-out-of-2 OT。

这篇论文对OT发展最重要的贡献就是这第8章节,而对于之前章节中花费大量笔墨介绍的抛币协议、电子邮件确认协议已经由于历史的发展而不再被大家所感兴趣。所以下面只简单介绍一下这两个协议的含义:

  • 抛币协议:协议执行后,协议双方能随机得到一条不可伪造的消息,双方对这条消息必须都能获得(不一定是同时获得)。
  • 电子邮件确认协议:如果电子邮件接收方能收到电子邮件,则相应的发送方一定能够获得对电子邮件内容的确认消息。

作者基于1-out-of-2 OT协议额外构造了一个PSE协议用于在双方各自拥有自己的信息时能交换双方的信息,然后基于这个PSE协议构造了上面的两个应用协议。但对于PSE协议,看过之后觉得对于两个参与者而言,最后一个发送消息的一方可以在收到对方发来的最后一条消息后终止协议的执行从而让另一方收不到完整的消息。