学习&转载文章:【隐私计算笔谈】MPC系列专题(十):安全多方计算下的集合运算

集合运算

集合可以通俗地描述为确定的一堆东西。如有一个集合\(\),一个元素\(\)要么属于集合\(\),记做\(\in \);要么不属于集合\(\),记做\(∉\),元素\(\)不能既属于集合\(\)又不属于\(\)。

集合的并集是对两个集合中的所有元素进行合并,并集运算的符号为\(∪\);集合的交集是取这两个集合中的公共元素,交集运算的符号为\(∩\)。

假设有两个集合\(={1,2,3,4} , ={1,4,7,9}\)。集合\(\)和\(\)中的公共元素为\(1,4\)。若集合\(\)和集合\(\)进行并集运算,则结果为\(=∪ = {1,2,3,4,7,9}\);

若集合\(\)和集合\(\)进行交集运算,则结果为\(={1,4}\)。

PSI

安全多方计算的目标是在不泄露各个参与者隐私信息的前提下完成目标函数的计算隐私保护集合交运算(Private Set Intersection,PSI可以看成是以参与者各自的隐私信息为集合,目标函数所实现的功能为集合交的安全多方计算。

隐私保护集合交的应用有通讯录匹配,如现在很多手机应用可以通过手机通讯录查找同样使用这个软件的好友,如聊天软件、具有社交属性的游戏等,用户肯定不希望自己的通讯录中的所有联系人都被软件所得知,软件则掌握有所有注册用户的手机号。

因此可以通过隐私保护集合交,计算软件注册用户手机号集合和用户自己的通讯录的交集,来寻找到同样使用该软件的好友,又不会泄露各自所掌握的手机号信息

本次要介绍的隐私保护集合交协议是Pinkas-Schneider-Segev-Zohner (PSSZ)【Phasing: Private Set Intersection using Permutation-based Hashing-2015】 ,其基于不经意伪随机数函数OPRF(Oblivious Pseudo-random Function)来构造PSI。

首先介绍一下布谷鸟哈希(Cuckoo Hashing):

布谷鸟哈希需要\(\)个普通箱子和\(1\)个贮存区,以及\(\)个元素,将这\(\)个空箱用\((1),…,()\)表示。还需要三个哈希函数,记为\(ℎ1(),ℎ2(),ℎ3()\),这三个哈希函数是将一个比特串映射到\(1,2,…,\)之间。

首先对这\(\)个空箱进行初始化,之后使用哈希函数\(ℎ1(),ℎ2(),ℎ3()\)计算元素\(\)的哈希值,检查\((ℎ1()),(ℎ2()),(ℎ3())\)这三个箱子是否是空箱子, 如果这三个箱子中至少有一个箱子是空箱子,就把\(\)放到这个空箱子中。

如果这三个箱子都已经有元素放入了,就随机选择\((ℎ1()),(ℎ2()),(ℎ3())\)这三个箱子中的一个\((ℎ()),∈{1,2,3}\),用\(\)替换箱子\((ℎ())\)里面原来装的元素\(′\)。

接着计算\(′\)的哈希值并检查箱子\((ℎ1(′)),(ℎ2(′)), (ℎ3(′))\)中是否都有空箱子,有一个空箱子则把\(\)放入其中,否则在\((ℎ1(′)),(ℎ2(′)), (ℎ3(′))\)中随机选择一个替换其中的元素,如此开始迭代。需要预先设定一个最大迭代次数\(\),如果迭代次数超过了\(\)就把最后被替换出来的元素放入到贮存区,贮存区最多可放入\(\)个元素,箱子最多可放入1个元素。

下面使用布谷鸟哈希进行PSI

两个参与者Alice的输入集合为\(\),Bob的输入集合为\(\),集合\(\)和集合\(\)中都只有\(\)个元素。两人首先为布谷鸟哈希选择三个哈希函数\(ℎ1(),ℎ2(),ℎ3()\)。设置的箱子数量为\(1.2\),贮存区的大小为\(\)。

Bob对其的集合\(\)中的每个元素执行布谷鸟哈希。执行完毕之后,Bob的每个箱子中最多只有一个元素,这是箱子的大小限制的,贮存区最多有\(\)个元素。由于箱子的数量为\(1.2\),集合中只有\(n\)个元素,因此此时必定有箱子是空的。

之后Bob产生随机元素,用随机元素填满所有的箱子和贮存区,使得每个箱子里都有一个元素,贮存区中有\(\)个元素。

OPRF的介绍

不经意伪随机数函数OPRF可以通过\(\)将输入映射成一个伪随机数,任意给一个随机数\(1\)和一个由输入映射成的伪随机数\(2\),攻击者无法区分出输入映射成的是\(1\)还是\(2\)。所需要使用的OPRF函数双方已经事先商议好了。

Bob在用随机元素填满所有的箱子和贮存区后,和Alice间进行\(1.2+\)次的OPRF。用\(\)表示Bob第\(\)个箱子中的元素,用\(1.2+\)表示贮存区中的第\(\)个元素。

因此在\(1.2+\)次的OPRF结束后,Bob会掌握\((,), ∈[1,1.2+]\)。

Alice则可以根据任意的\(\)计算:

\(={(ℎz(),)|∈,∈{1,2,3}},={(1.2+,1.2+)|1.2+∈,∈ {1,…,}}\)

并打乱和中的数据顺序。Alice将\(\)和\(\)发送给Bob,Bob将\(\)和\(\)中的值与他自己在箱子和贮存区中的\((,), ∈[1,1.2+]\)进行对比,如果Bob的\(\)对应的OPRF值\((,)\)在\(\)或者\(\)中,那么就说明元素\(\)属于Alice和Bob的集合交集。

Alice的集合\(\)中的每个元素\(\)都被\((ℎz(),)\)映射成了一个伪随机数,若Bob的集合\(\)中有和Alice集合相同的元素,假设\(*m*=\),那么有\((ℎz(),)= (ℎz(),)\),因此Bob能够通过Alice发来的\(\)和\(\),在其中找到二者集合的交集元素,而无法知道Alice掌握的集合本身。

总结一下:就是双方将各自数据藏在了OPRF中,对比OPRF值进而求出交集。

【隐私计算笔谈】MPC系列专题(十):安全多方计算下的集合运算的更多相关文章

  1. [.NET领域驱动设计实战系列]专题十:DDD扩展内容:全面剖析CQRS模式实现

    一.引言 前面介绍的所有专题都是基于经典的领域驱动实现的,然而,领域驱动除了经典的实现外,还可以基于CQRS模式来进行实现.本专题将全面剖析如何基于CQRS模式(Command Query Respo ...

  2. [C# 基础知识系列]专题十六:Linq介绍

    转自http://www.cnblogs.com/zhili/archive/2012/12/24/Linq.html 本专题概要: Linq是什么 使用Linq的好处在哪里 Linq的实际操作例子— ...

  3. [C# 网络编程系列]专题十:实现简单的邮件收发器

    转自:http://www.cnblogs.com/zhili/archive/2012/09/24/2689892.html 引言: 在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能 ...

  4. [C#基础知识系列]专题十:全面解析可空类型[转]

    原文链接 主要内容: 1:空合并操作符(?? 操作符) ??操作符也就是"空合并操作符",它代表的意思是两个操作数,如果左边的数不为null时,就返回左边的数,如果左边的数为nul ...

  5. TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

    目录: 冰山图片识别背景 数据介绍 数据预处理 模型搭建 结果分析 总结 一.冰山图片识别背景 这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/ ...

  6. Selenium系列(十) - 针对Select下拉框的操作和源码解读

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  7. Scala入门系列(十):函数式编程之集合操作

    1. Scala的集合体系结构 Scala中的集合体系主要包括(结构跟Java相似): Iterable(所有集合trait的根trait) Seq(Range.ArrayBuffer.List等) ...

  8. [.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

    一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计 ...

  9. Unity3D脚本中文系列教程(十五)

    http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...

  10. Java Thread系列(十)Future 模式

    Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...

随机推荐

  1. Rsync远程同步知识点总结

    Rsync: 简介:是一个开源的快速备份工具.可以在不同主机之间镜像同步整个目录,支持增量备份,保持链接(硬链接.软连接)和权限,且采用优化同步算法,传输前执行压缩(传输过程中效率加快了,但是会增加c ...

  2. springboot的基本使用

    SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程. 使用了Spring框架后已经简化了我们的开发,而Spr ...

  3. manim边做边学--圆锥

    Cone是Manim中专门用于创建和操控锥形几何对象的类. Cone允许用户定义锥体的底面半径.高度.颜色.不透明度等属性,并提供了一系列方法来操控这个锥体,如移动.缩放.旋转等. 通过这些属性和方法 ...

  4. 记录个Java/Groovy的小问题:空字符串调用split函数返回非空数组

    问题复现 最近写了一个groovy替换程序增量流水线脚本(会Java也能看懂),示意脚本如下: //获取文件列表方法 def listFiles(folder) { def output = sh(s ...

  5. Ubuntu 重启后 wifi 图标不见了 连不上网

    今天重启了一下电脑,结果wifi图标不见了,打开浏览器,无法联网.想了办法用网线先连上网,去网上找了找,说让我执行 sudo service network-manager restart 但是我执行 ...

  6. Impala源代码分析(3)-backend查询执行过程

    4 Replies 这篇文章主要介绍impala-backend是怎么执行一个SQL Query的. 在Impala中SQL Query的入口函数是: void ImpalaServer::query ...

  7. Mybatis【9】-- Mybatis占位符#{}和拼接符${}有什么区别?

    代码直接放在Github仓库[https://github.com/Damaer/Mybatis-Learning ],可直接运行,就不占篇幅了. 目录 1.#{}占位符 2.${}拼接符 3.#{} ...

  8. 第三方css动画库

    https://animate.style///安装npm install animate.css --save //引入 import 'animate.css';//使用 <h1 class ...

  9. C# 之 Int16 Int32 Int64 的区别-迷恋自留地

    int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数. Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数. In ...

  10. VTK 正交投影 透视投影

    VTK默认透视投影(近大远小),如果想改成正交投影(平行投影,远近一样): 1.调用vtkCamera的ParallelProjectionOn函数开启 2.通过vtkCamera的SetParall ...