【隐私计算笔谈】MPC系列专题(十):安全多方计算下的集合运算
学习&转载文章:【隐私计算笔谈】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系列专题(十):安全多方计算下的集合运算的更多相关文章
- [.NET领域驱动设计实战系列]专题十:DDD扩展内容:全面剖析CQRS模式实现
一.引言 前面介绍的所有专题都是基于经典的领域驱动实现的,然而,领域驱动除了经典的实现外,还可以基于CQRS模式来进行实现.本专题将全面剖析如何基于CQRS模式(Command Query Respo ...
- [C# 基础知识系列]专题十六:Linq介绍
转自http://www.cnblogs.com/zhili/archive/2012/12/24/Linq.html 本专题概要: Linq是什么 使用Linq的好处在哪里 Linq的实际操作例子— ...
- [C# 网络编程系列]专题十:实现简单的邮件收发器
转自:http://www.cnblogs.com/zhili/archive/2012/09/24/2689892.html 引言: 在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能 ...
- [C#基础知识系列]专题十:全面解析可空类型[转]
原文链接 主要内容: 1:空合并操作符(?? 操作符) ??操作符也就是"空合并操作符",它代表的意思是两个操作数,如果左边的数不为null时,就返回左边的数,如果左边的数为nul ...
- TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类
目录: 冰山图片识别背景 数据介绍 数据预处理 模型搭建 结果分析 总结 一.冰山图片识别背景 这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/ ...
- Selenium系列(十) - 针对Select下拉框的操作和源码解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- Scala入门系列(十):函数式编程之集合操作
1. Scala的集合体系结构 Scala中的集合体系主要包括(结构跟Java相似): Iterable(所有集合trait的根trait) Seq(Range.ArrayBuffer.List等) ...
- [.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结
一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计 ...
- Unity3D脚本中文系列教程(十五)
http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...
- Java Thread系列(十)Future 模式
Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...
随机推荐
- Redis学习笔记整理
一.Redis概述 1.redis简介 Redis(REmote DIctionary Server 远程字典服务器)是一款开源的,用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key- ...
- Air780E软件指南:C语言内存数组(zbuff)
一.ZBUFF(C内存数组)简介 zbuff库可以用c风格直接操作(下标从0开始),例如buff[0]=buff[3] 可以在sram上或者psram上申请空间,也可以自动申请(如存在psram则在p ...
- 4、oracle进程讲解
进程结构 server process服务器进程 前台进程(foreground process):server process(服务器进程) 用户连接到数据库实例以后,暂时可以认为是:对每一个用户连 ...
- 发布一个TCP 吞吐性能测试小工具
当写完一个TCP服务的时候,是不是很想马上测试一下这个服务的性能,它到底能应付怎样的请求处理,其性能又是怎样呢.相信以下这个小工具能帮到你的小忙,它是基于Beetle实现的一个小工具只需要设置一下参数 ...
- golang之设计模式
[选项模式] package main import "fmt" type OptionFunc func(*DoSomethingOption) type DoSomething ...
- Codeforces Round #826 (Div
Codeforces Round #826 (Div. 3) Minimize the Thickness 给定数组a,要求将数组a分成若干个子序列,并且使得每个子序列中的元素和都相等,设这些子序列中 ...
- CSS3 背景图片
1.背景图大小(background-size) 这个属性设置单张背景图的大小,默认是原图的大小 当同时指定宽高时,会造成图片失真,如果要保持宽高比,可以使用 auto 字段让宽或者高自适应 值类型 ...
- bat隐藏窗口运行
在bat脚本开头添加: if "%1" == "h" goto begin mshta vbscript:createobject("wscript. ...
- GObject学习笔记(二)类型创建与注册
前言 本文可在https://paw5zx.github.io/GObject-tutorial-beginner-02/中阅读,体验更加 在上一节中我们介绍了GObject类型的类和实例变量的创建和 ...
- 适配器模式应用~获取IP地址时想起了适配器
获取IP地址信息时,一般我们需要一个HttpServletRequest对象,然后从请求头里获取x-forwarded-for的值,而当我们使用dubbo+netty开发rest接口时,如果希望获取I ...