这里从一个较为通顺的视角去理解OT及其相关的拓展(extension)技术,包括OT, ROT, COT, IKNP OT extension,以及简单提到VOLE OT。
Ref:
Kumar, Nishant. “Techniques in OT extension.” (2020).
Bellare, Mihir, and Silvio Micali. “Non-interactive oblivious transfer and applications.” Conference on the Theory and Application of Cryptology. New York, NY: Springer New York, 1989.
Ishai, Yuval, et al. “Extending oblivious transfers efficiently.” Annual International Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2003.
Peter Scholl. “Vector Oblivious Linear Evaluation,PCGs and Correlated Randomness.“ NIST MPTC Workshop. 28 September 2023.
Base OT (Oblivious Transfer)
OT with Semi-Honest Adversary
OT是一个这样的两方安全计算问题:Sender有两个秘密消息,记为
分解来看,目标是Receiver得到他对应想要的那个消息
已经证明,OT很难归约到一个单向函数上;否则,相当于证明了
下面是一种基于离散对数密码实现OT的思路:
- Sender生成一个公钥
,然后发送给Receiver。 Receiver随机生成一对公私钥
,然后利用 得到 ;若 ,则发送 ,否则发送 。记Sender收到的公钥对为 。 注意到利用
得到的 在离散对数的群里也是一个公钥。 - Sender用
去分别加密 ,得到 ,发送给Receiver。注意到Sender不知道哪个公钥才是Receiver的 。 Receiver通过
得到 。 这里Receiver无法得知另一个消息
,因为他不知道 对应的私钥(这基于离散对数问题的困难性,如果Receiver能同时知道 和 的私钥,即对应的离散对数,那他也能知道 对应的私钥)。
拆开来说安全性:一方面,公钥加密保证了已知公钥,无法解密密文,这用以保证Receiver无法知道Sender的另一个消息;另一方面,Sender分不清
OT with Malicious Adversary
注意到,上面是半诚实假设,即假设双方忠实执行协议。实际上,如果Receiver自己生成两个公私钥对,发送其中的两个公钥给Sender,他就可以利用对应的私钥解密所有Sender的消息。
OT可以在恶意模型上实现,这需要保证Receiver无法做到上面这一点。
例如,通过离散对数问题,在一个素数阶
- Sender随机采样
,发送给Receiver。 Receiver随机采样整数
,得到 ,发送 给Sender。 注意到,由于离散对数问题的困难性,从
中是得不到 的值的。 Sender得到
后,计算 ;随机采样两个数 ,计算得到 ,然后用一个随机Oracle(记为 )去加密两个消息 ,然后发送两组数$ , $给Receiver。 注意到,这里Sender得到了
,但不知道哪个是 ,所以 对其不可知;这里 的作用是把循环群中元素拉到和消息一样的比特长度(用一个hash函数);由于离散对数问题的困难性,Receiver收到这两组数之后,无法求解得到其中的 。 Receiver计算
从而得到 (注意到 )。 关于另一条被加密的消息
的安全性,其加密所用的随机Oracle种子是 ,求解这个值是困难的(这基于Diffie-Hellman假设,即假如已知 ,求解 是困难的);同时注意到,除非 恰好等于 (概率极低),否则 是作为这个素数阶循环群的生成元的,那么 的可能取值范围等同于这个群元素的数量。
在读论文查资料的多次中发现,在89年Bellare-Micali原文中使用的并不是一个素数阶的群,而只是
,所以原文中随机数如 的取值范围为 到 ,因为生成元的阶为 而不是 。同时,使用这个群也没法保证 是生成元,从而存在 落入一个小的子群而被攻击的可能。而素数阶的循环群可以解决这个问题(因为非单位元都是生成元),较新的大多数资料和论文也都是基于素数阶的循环群讨论这个协议。
1-out-of-n OT
上面介绍的称之为1-out-of-2 OT,可以进一步地实现1-out-of-n OT,即Sender有
一个可能恶意的Receiver的情况下,也可以构建安全的1-out-of-n OT。实际上可以拓展一下上面所述的Bellare-Micali协议,只需要将其中的两对公钥相应拓展为
Receiver解开某个
OT is Complete for MPC
OT应该怎么用呢?乍一眼看起来它所实现的并不是一个很通用的功能。实际上,OT已经被证明对于MPC(Multi-Party Computation)是完备的,也就是说OT可以用来算任何电路。最朴素的一个方法是:设这个电路的真值表有
可以看到,1-out-of-2 OT是构成安全计算的一个基本单元,下面我们就关注这个问题。
Random OT and Correlated OT
ROT (Random OT)
所谓ROT即是Sender发送的两个消息是(伪)随机消息的情况(记为
如果我们需要
上面的例子需要ROT和后续消息发送基于一样的Receiver选择
COT (Correlated OT)
实际上上述的从OT转化到ROT,并没有降低问题的复杂度(但可以将公钥密码的计算提前)。这里我们接着将ROT转化为COT,后者可以将
COT也是一种Sender发送消息的特殊类别,即两条消息是correlated,而不是互相独立的;一种常见的情况是,Sender不是发送两个独立的随机消息,而是
如果仔细观察上述的COT,似乎这里所用的correlated输入并无必要;使用ROT传输两条
除此之外,由于这一点,实际上构造COT会比构造ROT更易实现,即COT可以通过更高效的密码原语来做;例如VOLE, Vector Oblivious Linear Evaluation(后文会简略介绍)。
上文核心就是,OT可以转化为ROT,ROT可以转化为更易实现的COT,所以如果我们能安全地、低成本地构造COT,我们就能对应实现OT。
OT Extension
上面说到,已经证明OT只能基于一个困难问题构建,而不能仅凭单向函数实现。但可以基于少量的这样的基于公钥的Base OT,然后利用单向函数将其拓展为大量的OT,称之为OT Extension。其中最经典的一个方法便是IKNP Extension (IKNP没有什么特别含义,就是论文作者首字母组合) ,能做到将
一种“反向”COT
假设Sender拥有私有的
但是如何实现这样的COT呢?我们无法让Sender来决定这个消息对,因为需要保证
- Receiver先随机采样得到
,然后让Receiver作为发送方,逐比特地用OT发送消息 给Sender。 - Sender作为OT的接收方用
作为自己的选择;于是Sender收到的每个比特就是 , 次OT接收到的比特拼起来,也就是 ,另一个消息可以通过 计算得到。
这样就实现了具有上述性质的COT。Sender具有
IKNP Extension:由 到
注意到上面的COT实际上是
- 也就是Receiver有
对这样的 和 ,这里重新定义为 (注意到这里的 是 比特的了); 次OT中,Receiver作为发送方的消息对是 ,然后Sender作为OT接收方用 的每一位作为选择,和上面一样。
经过
下面将这个过程写出来直观说明一下,为了简洁,这里用
看成一个比特矩阵,每一列取出来就是:
和上面一样,再加上一个
这样,经过这种“反向”的
再故技重施,用一个随机Oracle将这些
再捋一下IKNP如何拓展OT:基于少量(
大杀器:VOLE
IKNP曾一度是最优的OT Extension,直到最近几年一系列基于VOLE的OT Extension的出现。
VOLE (Vector Oblivious Linear Evaluation)实现的是Sender拥有
相比于IKNP,基于VOLE的OT能够带来非常显著的好处:IKNP的通信量是关于总的OT的数量线性增长的,而VOLE可以在一次性的VOLE Setup之后,借助PCG(Pseudorandom Correlation Generator)无需交互而拓展得到大量低成本OT(这种特性就是silent)。
这些技术的具体构造这里不再阐述,超出本文范围(最重要的是,我还没具体看这方面的内容)。
EnD
如果能够坚持读完本文,(再问一问大模型),相信已经能够对OT及其相关技术(至少到IKNP为止)有一个虽不全面但是通畅的理解了。