本篇论文的主要贡献是提出了“OT预计算”的概念。通过OT预计算,将原本每执行一次OT都要进行的一次OT运算优化为只需要线下预先执行一次OT协议,线上真正计算时只需要进行比特量级的通信。有意思的是,本文提出的优化思路并没有针对OT协议本身做出改良,而仅仅是对OT新应用方式。而这种应用创新对OT技术的推动也不亚于提出新OT协议,也启发我们不要只盯着新技术,也要多关注身边有哪些东西可以为我们所用。

此外,除了OT预计算的贡献,本文还间接引出了ROT的概念。ROT即Random OT,在OT执行时,Sender生成并输入自己生成的两个随机比特r0,r1。在OT执行结束时,Receiver收到其中一个随机比特rb及b。在本文中,ROT并没有直接被作者提到,但ROT的思想却在构造预计算OT的时候有所展示。这个可以在后面介绍协议的时候再详细说明。

本文写于95年,在当时OT协议及其变体有OT,1/2 OT(one-out-of-two OT)及 chosen one-out-of-two OT。他们的定义分别是:

  1. OT - 允许发送方向接收方发送单比特,接收方有50%的概率收到该比特,也有50%的概率收不到结果
  2. 1/2 OT - 发送方向接收方发送消息比特b0,b1,接收方只能收到其中一个消息比特,而接收任一个消息比特的概率均为50%。与此同时,发送方无法得知接收方收到的是哪个比特
  3. chosen one-out-of-two OT - 相似于 1/2 OT,区别是接收方拥有选择接收消息的能力

而本文的预计算也是针对这三种OT协议进行优化,并在论文的最后提出:上述三种OT协议都可以基于1/2 OT或chosen one-out-of-two OT进行优化,且这种优化是信息论安全的。

由于当下第一种OT协议由于实用性太差已经没人提了,所以我们略过这类优化不讲,只讲另外两种。

首先是对1/2 OT协议的优化,优化后的1/2 OT协议由预计算部分和正式线上计算的部分组成。预计算部分执行一个标准的1/2 OT协议:

由发送方生成两个随机比特r0和r1,执行协议后接收方收到其中一个随机值rb及b,接收方将得到的结果保存在本地,预计算部分结束。线上计算部分,发送方输入真正待发送的消息比特b0,b1,并生成一个随机比特c。发送方将(c, b0 xor rc, b1 xor r1-c)发送给接收方。接收方收到该消息,由于其不知道b0 xor rc, b1 xor r1-c分别是什么,所以这里先用x0,x1代替,即接收方收到了(c, x0, x1)。最后,接收方计算(d xor c, rd xor x~d xor c)得到b0和b1~的其中一个值,由于是1/2 OT,所以他并不知道计算得到的结果b0和b1中的哪一个值。至此优化的1/2 OT协议结束。流程图如下(A代表发送方,B代表接收方):

Precomputation:
A: gen r0, r1
A --> 1/2 OT --> B
B get (d, rd)
Online Stage:
A: input b0, b1, gen c
A --> (c, b0 xor rc, b1 xor r1-c) --> B
B: receive (c, x0, x1), output (d xor c, rd xor x~d xor c~)

接着是对chosen one-out-of-two OT协议的优化,优化后的1/2 OT协议也由预计算部分和正式线上部分组成:

同样,由发送方生成两个随机比特r0和r1,执行协议后接收方收到其中一个随机值rb及b,接收方将得到的结果保存在本地,预计算部分结束。线上计算部分,发送方,发送方输入待发送消息比特b0, b1。接收方生成选择比特c,并计算e=c xor d,并向发送方发送e。发送方计算(b0 xor re, b1 xor r1-e)并发送给接收方,此时接收方收到两个值但无法区分,我们将这两个值分别即为x0, x1。最后,接收方计算xc xor rd,得到结果,至此优化的chosen one-out-of-two OT协议结束,流程图如下:

Precomputation:
A: gen r0, r1
A --> 1/2 OT --> B
B get (d, rd)
Online Stage:
A: input b0, b1
B: input chosen bit index c
B: e = c xor d, --> e --> A
A: --> (b0 xor re, b1 xor r1-e) --> B (x0, x1)
B: output xc xor rd

简单分类讨论:

  1. c = 0
    1.1 d = 0
    xc xor rd = bc xor re xor rd = b0 xor r0 xor r0 = b0
    1.2 d = 1
    xc xor rd = bc xor re xor rd = b0 xor r1 xor r1 = b0
  2. c = 1
    2.1 d = 0
    xc xor rd = bc xor r1-e xor rd = b1 xor r0 xor r0 = b1
    2.1 d = 1
    xc xor rd = bc xor r1-e xor rd = b1 xor r1 xor r1 = b1

可以看到,针对这两个协议的优化都由预计算和线上计算两部分完成。

预计算部分中,发送方生成了两个随机值,并通过标准的1/2 OT协议发送给接收方。事实上,这部分就是后人说的ROT协议,在该部分中,接收方收到的是一个随机生成的值,对他并没有用,而与此同时发送方并不知道对方收到的内容,完成了消息的隐藏。

线上计算中,发送方和接收方仅进行了一次交互,交互通信量只有几比特。而且不难看出线上计算只有几个亦或操作,效率相当高。

至此我们便完成了预计算OT协议的描述,这篇论文对协议的优化是相当强的,安全性完全基于ROT的安全性,对于半诚实的ROT,该协议便是半诚实的,对于恶意模型的ROT,该协议便是恶意模型的。

最后作者提到,若想通过OT传输字符串,则只需要在预计算阶段,将发送方生成的随机比特更换为相同长度的字符串,并在线上的计算阶段将相应亦或操作变成字符串亦或即可。