学习&转载文章:【隐私计算笔谈】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. NZOJ 模拟赛8

    T1 布尔(CF2030C) CF2030C 爱丽丝和鲍勃正在玩一个游戏.游戏中有一个由 n 个布尔值组成的列表,每个布尔值要么为真,要么为假,以长度为 n 的二进制字符串表示(其中 1 表示为真,0 ...

  2. python中的多继承理解

    在python的多继承中,父类的初始化顺序遵循所谓方法解析顺序(Method Resolution Order,MRO)的机制.python使用C3线性化算法来确定多继承类的MRO: 1. 目标:创建 ...

  3. TreeMap源码分析——基础分析(基于JDK1.6)

    常见的数据结构有数组.链表,还有一种结构也很常见,那就是树.前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的Tre ...

  4. Java 网页浏览器组件介绍

    王 凯迪, 软件工程师, Convergys 上海研发中心 简介: 使用 Java 开发客户端应用有时会需要使用到浏览器组件,本文将介绍在 Java 用户界面中使用浏览器的四种方法,并且比较它们各自的 ...

  5. 抓包工具之Fiddler(详解)

    Fiddle简介 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于 ...

  6. 这些 JavaScript 编码习惯,让你最大程度提高你的项目可维护性!

    前言: 因为 JavaScript 语言是一门极其松散.极其自由的语言,这意味着我们可以随心所欲的操作它,这是他的优点,但同时也是它的缺点.在编码过程中,我们需要一种良好的规范或者习惯来保持应用程序的 ...

  7. 揭秘UGO SQL审核功能4大特性,让业务平滑迁移至GaussDB

    业务挑战 数据库是企业应用系统的核心,SQL作为数据库查询.更新等操作的标准语言,重要性不言而喻.然而在实际的SQL开发过程中,也面临着诸多挑战: 数据库应用开发人员的SQL能力良莠不齐,经常写出不符 ...

  8. javascript 实现参数重载

    1.概要 在java中,同一个函数签名,比如 getUser,我们可以根据参数的不同,调用不同功能的方法.这也就是参数重载,如何在javascript也实现参数重载呢? 2.实现方法 function ...

  9. openEuler欧拉安装指定版本的nodejs

    1. 安装nodejs dnf -y install nodejs npm config set registry https://registry.npmmirror.com -g npm conf ...

  10. Docker安装最新版MySQL

    下载docker dnf -y install docker 下载mysql镜像 docker pull mysql 运行Mysql mkdir -p /home/mysql/data docker ...