IKNP协议详解

news/2024/11/19 3:43:47/文章来源:https://www.cnblogs.com/yangm17/p/18198754

一起学习OT extension的重要文章: Extending Oblivious Transfers Efficiently. 作者是Yuval Ishai, Joe Kilian, Kobbi Nissim, and Erez Petrank, 发表在2003的Crypto上.

目录
  • 1. 简介
  • 2. 具体协议
    • 2.1 协议流程
    • 2.2 协议设计原理
      • COT和ROT
      • 2.2.1 第一步: \(OT^k_m \implies COT^m_k\)
      • 2.2.2 第二步: \(COT^m_k \implies ROT^m_l\)
      • 2.2.3 第三步: \(ROT^m_l \implies OT^m_l\)
  • 3. 协议的安全性证明
    • 3.1 Against malicious sender
    • 3.2 Against semi-honest verifier
  • 4. 实例化Random Oracle
  • 5. 总结
  • 参考

1. 简介

Motivition: 在这片文章之前的一些结果表明, OT基本不可能规约到开销少的对称原语上, 而只能通过公钥的原语进行构造. 那么人们就会想, 既然OT本身开销不低, 那么能不能通过一些少数量的OT, 基于对称原语构造出大量的OT呢?

人们发现是可以的, Beaver首先给出了一个结果: 可以利用单向函数扩展OT. 但是这个构造是非黑盒的, 所以非常低效, 工程上无法使用.

在Beaver之后就是这篇文章了. 由于这篇文章是第一个实用性的, 所以也算是开山之作. 这篇文章提出的协议(IKNP Protocol)构造是黑盒的, 针对半诚实敌手的时候是pratical的: 每个OT只调用了两次hash函数. 给定 \(k\) 个 base OT, 能构造出 \(poly(k)\) 个OT.

2. 具体协议

我们这里只讨论半诚实敌手模型下的IKNP协议. 在这一小节我们介绍IKNP的具体流程, 以及这个协议的构造思路(作者在文章完全没有提).

2.1 协议流程

协议的目的是, 给定 \(k\) 个OT, 每个消息比特数都是 \(m\)(用 \(OT^k_m\) 表示), 构造 \(m\) 个OT, 每个消息比特数为 \(l\)(用 \(OT^m_l\) 表示).

image

协议如上所示. 我们简单过一下流程.

  1. \(S\) 生成一个向量 \(s\), \(R\) 生成一个矩阵 \(T\).

  2. 在利用 \(OT^k_m\) 的过程中, \(S\) 扮演了接受者, 用的向量就是第一步生成的那个. \(R\) 扮演了发送者, 用的向量是 \(T\) 的列向量以及列向量与 \(r\) 的异或. S接收到一个矩阵 \(Q\).

  3. \(S\)\(Q\) 的行向量进行hash, 再异或上消息值, 发送给 \(R\).

  4. 由于 \(R\) 没有 \(s\) 的消息, 所以这保证了他没法学到每两个消息的另一个消息, 而只能学到 \(r_j\) 对应的消息.

这只是带大家走一遍, 具体的推导还是得大家动手推导.

2.2 协议设计原理

重新回顾协议的设计目的: \(OT^k_m \implies OT^m_l(m \gg k)\). 作者在原文中是一步登天的. 但是实际上我们可以分为三个步骤.

\[OT^k_m \implies COT^m_k \implies ROT^m_l \implies OT^m_l(m \gg k). \]

下面我们分别讲讲这三步是怎么构造的.

COT和ROT

在介绍之前, 我们有必要了解COT和ROT的概念以及作用.

ROT: Random OT. ROT中的Alice和Bob都没有输入. ROT自己生成两个随机数 \(r_0, r_1\), 一个随机比特 \(b\). Alice获得的输出是 \(r_0, r_1\), Bob获得的输出是 \(b, x_b\).

Beaver在95年就提出了这个概念, 并证明了 ROT 可以用于生成 OT.

COT: Correlated OT. 我们考虑Alice输入为 \(\Delta\), Bob输入为 \(b\). COT随后自己产生了一个随机数 \(x\). Alice获得的输出是 \(r, r \oplus \Delta\), Bob获得的输出是 \(b, r\oplus b\Delta\).

在上面的COT中, Alice获得的输出顺序是固定的, 而Bob获得的输出是由 \(b\) 决定的. 我们可以考虑等价的一种COT. Alice获得的输出顺序是由 \(b\) 决定的, 即 \(r \oplus b\Delta, r \oplus \bar{b} \Delta\), 而Bob只会固定的获得一个输出 \(r\). 如下图所示:

image

2.2.1 第一步: \(OT^k_m \implies COT^m_k\)

我们观察这一步干了什么. OT的数量在这一步由 \(k\) 变成 \(m\), 起到了一个extension的作用. 所以这一步就是这个协议的核心.

image

我们从上面的图中更容易看出这个协议内部发生了什么.

我们在2.1节已经讲了这个协议的流程. 所以我们知道Bob在base OT里面扮演了发送者, Alice在base OT里面扮演了接受者, 接收到了一个矩阵 \(Q\).

在拿到 \(Q\) 之后, Alice关注的是行向量, 一共有 \(m\) 个行向量. 对于每一个行向量 \(\mathbf a_i=\mathbf t_i \oplus b_i \Delta\). Alice自己再算出一个值 \(\mathbf b_i = \mathbf a_i \oplus \Delta = \mathbf t_i \oplus \bar b_i \Delta\). 而Bob是持有 \(\mathbf t_i\) 的, 所以这就是我们上面所说的第二种COT. Alice拿到了相关的两个向量, 而Bob拿到了固定的一个 \(\mathbf t_i\). 所以这一步的构造完成.

2.2.2 第二步: \(COT^m_k \implies ROT^m_l\)

这一步我们关注如何打破相关性(break the correlation). 并且顺便我们把比特数也做一个增加.

作者的思路非常的简单粗暴, 就是使用一个Random Oracle. 对RO的输入输出进行规定: \(H: [m] \times \{0,1\}^k\rightarrow \{0,1\}^l\). 其中 \([m]\) 表示 index.

这一步非常直接, 因为Random Oracle本身输出的就是真随机数. 所以是一定没有相关性的.

在实例化的时候, 作者把Random Oracle替换成了一个具有特殊性质的哈希函数(Correlation Robust Hash), 这个我们最后会提到.

2.2.3 第三步: \(ROT^m_l \implies OT^m_l\)

我们离协议成功只差最后一步, 就是转换成真正的OT. ROT转换成OT的工作其实是Beaver在95年就提出的.

有两种情况: 在OT中Bob的选择比特 \(b\) 和 ROT中的选择比特是否相同. 如果相同只需要一轮协议, 否则需要两轮协议. 如下图所示, 左边表示相同情况下的转换, 右边表示不同情况下的转换.

image

IKNP协议中的最后一条消息利用了左图中的转换.

到此为止我们把协议的构造思路讲清楚了. 下面我们深入协议研究其安全性.

3. 协议的安全性证明

证明分为两个部分, 分别对于 malicious sender, 以及对于 semi-honest verifier. 当然, 当我们考虑一个人是恶意/半诚实时, 我们要求另一个人是诚实的.

形式化的定义请大家参考Lindell: How to simulate it 或者我之前的博客: 如何写好Simulation证明(二): 半诚实模型下MPC的定义 .

3.1 Against malicious sender

在写Simulator之前我们先进行观察. 这里我们需要保证的是: 恶意的Alice不能学到Bob的输入\(\mathbf r\). 我们对Alice拿到的 \(Q\) 进行一个观察. \(Q\) 的每一列, 要么是 \(\mathbf t^i\), 要么是 \(\mathbf t^i \oplus \mathbf r\). 而所有的 \(\mathbf t^i\) 都是独立且随机的, 这相当于一次一密, 是信息论隐藏的. 所以拿到的 \(Q\) 完全是一个随机矩阵. 当然不会学到 \(\mathbf r\) 的任何知识.

下面我们可以写Simulator, 当我们遇到恶意的敌手时, 我们需要注意的是要extract出敌手真正的输入. 因为恶意的敌手不会按照你给他的输入进行.

构造如下:

\(Sim_1\):

  • Run \(S^*\) with a uniformly chosen random input \(\rho\). Let \(\mathbf s^*\) be the input \(S^*\) sends to the \(OT^k_m\) primitive in Step 2.

  • Generate a random \(m \times k\) matrix \(Q\), and feed \(S^*\) with the columns of \(Q\) as the reply from the \(OT^k_m\) primitive.

  • Let \((\mathbf y^*_{j,0},\mathbf y^*_{j,1})\) be the messages sent by \(S^*\) in Step 3. Call TP with inputs \(\mathbf x_{j,0}^*= \mathbf y_{j,0}^*\oplus H(j,\mathbf{q}_j), \mathbf x_{j,1}^*= \mathbf y_{j,1}^*\oplus H(j,\mathbf{q}_j\oplus \mathbf s^*). (1 \leq j \leq m).\)

  • Output whatever \(S^*\) output.

Thm: 这个Sim产生的view和真实世界的完全相同.

3.2 Against semi-honest verifier

在针对半诚实的验证者时, 我们遇到的困难是我们不知道 \(x_{i, 1-r_i}\) 的知识. 但是在写Sim的时候我们可以用 \(0^l\) 去替代. 原因是 RO生成的是真随机数. 通过异或操作一次一密加密了, 所以是Perfect hiding的.

构造如下:

  • Choose random \(\rho\) as \(R^*\)'s random tape.
  • \(\mathbf s \gets \{0,1\}^k, T \gets \{0,1\}^{m \times k}.\)
  • Send \(\mathbf s\) and \(\{\mathbf t^i, \mathbf t^i \oplus \mathbf r\}_{i\in[k]}\) to \(OT^k_m\). Receive the output \(Q\).
  • Compute \(y_{j, r_j} \gets \mathbf x_{j,r_j} \oplus H(j, \mathbf q_j), y_{j, 1-r_j} \gets 0^l \oplus H(j, \mathbf q_j \oplus \mathbf{s}) .\)
  • Output \((\rho, \mathbf{r}, \{\mathbf t^i, \mathbf t^i \oplus r\}_{i\in[k]} \{\mathbf y_{j,0}, \mathbf y_{j,1}\}_{j \in [m]}, \mathbf x_{j, r_j}).\)

Thm: 这个Sim产生的view和真实世界的统计不可区分.

4. 实例化Random Oracle

通过抽取出特定的性质, 我们定义这样一种哈希函数.

image

这种hash打破了相关性. 这一串数字都和均匀随机分布不可区分.

5. 总结

在具体写完安全性证明之后, 我相信大家能感受到这个协议构造的精巧. 这个协议把one-time pad(一次一密)用到合适的地方, 达到了Perfect hiding的效果. 这个效果对我们写Simulator具有特别大的帮助.

在如何恶意的敌手时, 这篇文章用到了cut-and-choose技巧. 这个技巧是说, 一开始先进行 \(\sigma\) 次协议. 然后Alice检查其中一部分Bob的输入, 看他有没有骗人. 另一部分则继续用于之后的协议. 开销是十分大的, 我们在这片博客中不介绍.

参考

  • Lindell: How to simulate it.
  • Nishant Kumar. Techniques in OT extension.
  • Ishai et al. Extending Oblivious Transfers Efficiently.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707966.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub - w1r3s.v1.0.1

对于vulnhub靶机w1r3s.v1.0.1的渗透流程vulnhub - w1r3s.v1.0.1 高质量视频教程 - b站红队笔记 靶机下载 本地环境 本机ip:192.168.157.131 w1r3s虚拟机设置NAT模式 信息收集 扫描网段得到攻击机ip:192.168.157.158详细信息扫描 nmap -A -p- 192.168.157.158开放了四个端口 2…

自研WPF插件系统(沙箱运行及热插拔)

前言插件化的需求主要源于对软件架构灵活性的追求,特别是在开发大型、复杂或需要不断更新的软件系统时,插件化可以提高软件系统的可扩展性、可定制性、隔离性、安全性、可维护性、模块化、易于升级和更新以及支持第三方开发等方面的能力,从而满足不断变化的业务需求和技术挑…

通过CM 1542-1与1500CPU进行S7通信

通过CM 1542-1与1500CPU进行S7通信时,通信伙伴的SIMATIC-ACC不要勾选,设置正确的机架/插槽,TSAP设置为03.01才能通信成功。如果通过1500CPU本体网口与1500CPU进行S7通信时,仅需勾选SIMATIC-ACC就可以通信成功

关于Windows端口被占用

cmd查看被占用端口的pidnetstat –aon |findstr “xxxxx”关闭找到端口被占用对应的PIDTASKKILL /PID xxxxx /F如: 本文来自博客园,作者:小刘爱学习呀,转载请注明原文链接:https://www.cnblogs.com/liuhao-blog/p/18198723

软件设计师(中级) 笔记

软件设计师 「学习路线」(推荐该顺序学习,按照先易后难排序) 1、上午题—计算机系统(5~6分)1.cpu:cpu是硬件系统的核心功能:控制器(程序控制,操作控制) 运算器(时间处理,数据处理)运算器:算术逻辑单元(ALU):实现算术运算和逻辑运算累加寄存器(AC):为ALU提供…

ABC353

A link暴力寻找\(2\)及以后比\(a_1\)大的数。点击查看代码 #include<bits/stdc++.h>using namespace std;int n; int a[105];signed main(){cin >> n;for(int i = 1;i <= n;++ i)cin >> a[i];for(int i = 2;i <= n;++ i){if(a[i] > a[1]){cout <…

《RandAugment: Practical automated data augmentation with a reduced search space》阅读笔记

论文标题 《RandAugment: Practical automated data augmentation with a reduced search space》 随机增强: 缩小搜索空间的实用自动数据扩增技术 作者 Ekin D. Cubuk、Barret Zoph、Jonathon Shlens 和 Quoc V. Le 来自 Google Research, Brain Team 初读 摘要最近的研究表明…

主流的软件原型设计工具的介绍

软件原型设计工具是用于创建应用程序或网站原型的工具,主要用于快速设计和验证用户界面和交互。以下我对是一些常用的软件原型设计工具的介绍 Axure RP:Axure RP是一款功能强大的原型设计工具,可以创建高保真的交互式原型,支持复杂的交互和动画效果。 Sketch:Sketch是一款…

力扣-84. 柱状图中最大的矩形

1.题目介绍 题目地址(84. 柱状图中最大的矩形 - 力扣(LeetCode)) https://leetcode.cn/problems/largest-rectangle-in-histogram/ 题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大…

LuckFox-pico 入门记录一:编译环境与GPIO

LuckFox RV1106 点灯 本文使用VMwave+ubuntu20.04虚拟机,并用CLion开发linux,简单记录一下配置过程; 1 虚拟机安装 拿到板子,首先是配置环境,虚拟机选择ubuntu20.04,安装教程随便搜一下就行,网络配置选择NAT就行,可以不选择桥接模式,其他没有什么注意事项。 比较难的一…

tinkphp 配置二級域名访问

1.路由配置Route::domain(admin, function () {//系统管理Route::rule(/system/saveSubscriber$, admin/system/saveSubscriber,POST); });2.nginx 配置文件listen 80; server_name xxx.com admin.xxx.com;3.tp项目public下创建 nginx.htaccess 文件location / {index …

P7448

problem & 双倍经验 低配版本 没有 Ynoi 标志性算法卡常,这点差评。拆解问题 定义 \(lst_i\) 为上一个和 \(i\) 号点相同的位置。 由于几个转移都差不多,我们以 \([l,r - 1]\) 扩展到 \([l,r]\) 为例。 我们知道答案会加上 \([lst_r,r]\) 中 新出现的 且 \(> a_r\) 的…