上一篇APSI-1 其实就是对开源库README文件的一个翻译加上自己的一点点理解,因为篇幅过大,导致继续编辑有些卡顿,所以新开一篇继续。
前面介绍了APSI的大致技术、优化方法、以及举例说明了主要流程(unbalanced-PSI)。
下面主要介绍labeled-PSI!

Labeled Mode

Basic Idea

label模式和前面讲的没有太大区别,但需要一些额外的解释。receiver除了想要知道其查询项是否在sender的集合中之外,还想知道发送方与这些项关联的数据,即交集数据对应的label。(sender中存储的数据视为key-value)。

换成人话,就是sender中存储的都是key-value型的数据,而receiver中只有key,receiver想通过输入key,得到sender中匹配到的value值。即【带关键词的PIR】。论文和APSI中使用的是{item - lable}表示!

为了理解labled-APSI的工作原理,回顾前面讲到的Basic Idea,在对receiver发过来的加密查询项\(Q\)进行计算时,匹配多项式\(M(x)\)的输出要么是0的加密(匹配上),要么是非0的加密(没有匹配)。在labled-PSI中,sender会创建另外一个多项式\(L(x)\),即插值多项式,具有以下性质:如果\({(Y_i, V_i)}\)表示sender得数据集,则\(L(Y_i) = V_i\),收到receiver发送过来的Q,sender计算多项式对\(((M(Q), L(Q))\),并将结果返回给receiver;receiver解密该结果对,观察第一个值是否为0,如果是,则第二个值即是所需的label!

Large Labels

一个较大的问题,就是所有的密文计算都需要模plain_modulus,但是sender的lable比这个要长的多。对于比较长的item,在Large Items中,首先先讲item通过hash,生成一个大小为(80-128 bit)的hash值【控制item的长度】,然后经过一系列的batch,对其编码。这种方法也适用于解决lable过长的问题。也就是说,lable可以被分解成类似于item的小部分,对于每个部分,我们可以形成一个lable插值多项式,当对所对应的item进行评估时,输出lable的该部分。

这还不是一个令人满意的解决方案,因为我们的item没有固定的大小,而且非常长(最大128位)。lable比item长,lable可以分成多个部分,每一部分的长度为item的长度。对于每个部分,我们可以构造一个单独的标签插值多项式,在加密查询中对它们进行求值,并将每个加密结果返回给receiver。receiver解密结果并连接它们,以恢复匹配项的lable。

Label Encryption

上述方法存在一个必须解决的严重问题。回想一下我们是如何使用OPRF来防止sender的item部分(或全部)泄漏给receiver的:给出一个item\(Y\),匹配多项式不能直接计算\(Y\),而是计算\(ItemHash(s, Y)\),这表示item Y所对应的OPRF值\(OPRF(s, Y)\)的前128 bit,这就意味着标签插值多项式L应该满足\(L(ItemHash(s, Y_i)) = V_i\)对于sender的每一个item \(Y_i\),然而receiver能够猜出一些\(ItemHash(s, Y_i)\),就可以查询出其所对应的lable,这是不能接受的,因为receiver是不能知道item \(Y_i\)。

上面的意思在论文中,其实就是将OPRF的值分为两部分,一部分用于计算求交多项式,这里label没有加密,所以不安全。下面讲的是另外一部分用于加密label。
要明白:\(ItemHash(s, Y)\)表示\(OPRF(S,Y)\)的前128bit;插值多项式\(L(ItemHash(s, Y_i)) = V_i\);

为了解决这个问题,sender使用了一个对称加密函数\(Enc(<input>, <key>, <nonce>)\)使用来自\(OPRF(s, Y_i)\)的输出的另外一部分加密\(label V_i\)。具体来说,加密密钥为\(LabelKey(s, Y_i),label :V_i,item:Y_i\),是256 bit的输出\(OPRF(s, Y_i)\)的剩余128bit。因此发送给receiver的label就变成了\(Enc(V_i, LabelKey(s, Y_i), nonce)\)。

\(LabelKey(s, Y_i)\)表示\(OPRF(s, Y_i)\)的剩余12bit;

还有一些问题,因为receiver一定是想知道些什么nonce【半诚实的receiver】。第一种选择是选择使用常量或空的nonce(没有随机数)。这种情况下,必须注意,对手可能辨别出两个不同的加密label,其中两个label对应的是同一个item,使用的是相同的OPRF的key:s,这样就有可能得到关于label的相关信息。这种情况会发生,因为APSI支持更新item的label
另一种选择是使用随机生成的长nonce(每次加密都不同)。APSI的实现是随机采样一个nonce,和加密的\(V_i\)拼接在一起。具体来说,sender为每一个\(item Y_i\)随机采样一个nonce,然后计算出插值多项式\(L(ItemHash(s, Y_i)) = nonce\),然后与加密的\(V_i\)拼接:$$L(ItemHash(s, Y_i)) = nonce | Enc(V_i, LabelKey(s, Y_i), nonce)$$

nonce 理解为随机数吧

receiver从sender那里得到一些加密的label,没有任何作用,除非他知道对应的item \(Y_i\)。此外即使receiver通过猜测\(ItemHash(s, Y_i)\)获得了\(nonce | Enc(V_i, LabelKey(s, Y_i), nonce)\),在离线攻击中,枚举出所有的item:\(Y_i\),他仍然无法获得label,因为\(LabelKey(s, Y_i)\)是从\(OPRF(s, Y_i)\)中获得的,而不是\(Y_i\)。

APSI允许sender指定nonce的字节大小,默认的nonce单位16 字节,但是值越小,性能越好!

Partial Item Collisions

还有一个必须要解决的问题:回顾Pracice,sender构造一个大的hash表,并将其分解成多个锯齿状的bin bundles。在label-PSI中,每一个bin bundles不仅包含item的part,也包含对应的label的part,以及标签插值多项式。标签插值多项式不是为整个label创建的,而是对label的part分别创建,即使将整个item分解为part前会加密。

现在看一下发生了什么:item416-part1 和 item12-part1是相同的,如果其所对应的标签label416-part1 和 label12-part1是不同的,则创建一个插值多项式L是不可能的,因为不能针对一个item而输出两个label416-part1 和 label12-part1。【疑惑,插值多项式是插值的item的位置?】

在将item插入bin bundle之前,先检查一下label是否已经出现在相同的位置,就能解决这个问题。如果已经存在,那么该item就不能插入到该bin bundle,而是新建一个bin bundle,再插入。该问题只在label-PSI下存在,会导致比unlabeled-PSI有更差的打包率(items_inserted / theoretical_max)。

APSI - 2的更多相关文章

  1. 利用 cos 组件实现jsp中上传附件

    需求:在web功能中附件上传功能为最基本的功能之一,所以用cos组件做了一个附件上传的demo.附件上传功能的实现可以利用其它的java组件实现,相关资料网上比较多. 说明步骤:下载组件并安装 --& ...

  2. PLSQL_Oracle外部表的概念和使用(案例)

    2014-08-25 Created By BaoXinjian

  3. DosBox 的 DOSBOX.CONF 的详细配置说

    1.首先下载 DOSbox 0.72 版.   2.下载完毕,开始安装.安装到任意目录均可.安装完毕会在开始菜单生成程序组,DOSBox.conf 文件是 DOSbox 的配置文件,保持默认配置就可 ...

  4. 蓝屏代码详解(更新WIN7蓝屏代码)

    6位代码含意 0 0x0000 作业完成.  1 0x0001 不正确的函数.  2 0x0002 系统找不到指定的档案.  3 0x0003 系统找不到指定的路径.  4 0x0004 系统无法开启 ...

  5. DOSbox汇编集成环境下的具体设置

    alt+enter能够全屏幕,假设认为游戏执行速度不合适,能够改动 cycles=3000 适当调整大小. .执行 DOSBox,会打开两个 DOS 窗体.我们仅仅需在例如以下窗体中键入 mount ...

  6. win7win8 64位汇编开发环境合集安装与设置

    win7win8 64位汇编开发环境合集安装与设置 下载 win7 win8  64位汇编开发环境.rar 下载地址(免积分下载) http://download.csdn.net/detail/li ...

  7. vue项目搭建 (一)

    vue项目搭建 (一) 由于一直想要有自己的框架,因而一直在尝试搭建各类结构,结合vue官网及git上大神bailicangdu的项目,再看看网上一些意见,及个人思考,总结的一些,不到之处希望大家可以 ...

  8. SPECCPU2006 Spec2006 使用说明

    http://www.vimlinux.com/lipeng/author/penglee5.html Spec2006使用说明 五 10 十月 2014 By penglee 工具介绍 SPEC C ...

  9. Spec2006使用说明

    Spec2006使用说明 五 10 十月 2014 By penglee 工具介绍 SPEC CPU 2006 benchmark是SPEC新一代的行业标准化的CPU测试基准套件.重点测试系统的处理器 ...

随机推荐

  1. mybatis——逆向工程中 where (条件1)and (条件2 or 条件3 or 条件4)

    where (条件1)and (条件2 or 条件3 or 条件4) = where (条件1 and 条件2)or (条件1 and 条件3) or (条件1 and 条件4) 结果 是这样的 WH ...

  2. JavaWeb Bug处理

    1.(getParameter) Java文本无法解析Cannot resolve method 'getParameter(java.lang.String)方法    解决方法:1.在projec ...

  3. SSM(Spring+SpringMVC+MyBatis)框架整合开发流程

    回忆了 Spring.SpringMVC.MyBatis 框架整合,完善一个小demo,包括基本的增删改查功能. 开发环境 IDEA MySQL 5.7 Tomcat 9 Maven 3.2.5 需要 ...

  4. 什么是LSA,在OSPF中LSA是什么

    什么是LSA:链路状态通告,它存在于LSU(链路状态更新包) Type 1 LSA:路由器LSA       每个OSPF路由器都会产生路由器LSA,描述了对应设备的物理接口所连接的链路和接口,并指明 ...

  5. Java并发机制(9)--Callable、Future、FutureTask的使用

    Java并发编程:Callable.Future.FutureTask的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3949310.html ...

  6. 解释Spring支持的几种bean的作用域?

    Spring框架支持以下五种bean的作用域: singleton :bean在每个Spring ioc 容器中只有一个实例. prototype:一个bean的定义可以有多个实例. request: ...

  7. kafka unclean 配置代表啥,会对 spark streaming 消费有什么影响?

    unclean.leader.election.enable 为true的话,意味着非ISR集合的broker 也可以参与选举,这样有可能就会丢数据,spark streaming在消费过程中拿到的 ...

  8. 哪些是重要的bean生命周期方法? 你能重载它们吗?

    有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用.第二个方法是 teardown  它是在容器卸载类的时候被调用. The bean 标签有两个重要的属性 ...

  9. CopyOnWriteArrayList 可以用于什么应用场景?

    CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这 个列表时,不会抛出 ConcurrentModificationException.在 CopyOnWri ...

  10. can总线第三讲

    一  CAN控制器官方定义:CAN控制器用于将欲收发的信息(报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息.举个便于理解的例子:就像您发快递一样,要根据快递公司提 ...