私密信息检索
TL;DR
- 私密信息检索,也就是 PIR,可以让设备从服务器的数据库中获取一个条目,而服务器不知道请求的是哪个条目
- Zcash 需要它,因为私密钱包如果向服务器询问哪些交易属于自己,就会暴露自己
- 如今钱包会下载并扫描远超实际所需的数据,这也是同步速度缓慢的一个主要原因
- PIR 可以让钱包以私密方式只获取属于自己的数据,在保持隐私不受破坏的同时消除这一瓶颈
- 对 Zcash 来说,这仍是一个活跃的研究方向,理论上很强大,也正在被推进到可用于真实钱包的实用阶段
这篇内容适合谁
- 任何想知道私密钱包如何在不泄露哪些币属于自己的情况下找到自己币的人
- 总看到 PIR 与 Zcash 扩容工作一起被提及的新读者
- 想先理解概念、再理解其底层密码学原理的读者
PIR 为 Zcash 解决的问题
Zcash 会隐藏一笔交易是付给谁的。这种隐私带来了一个棘手的问题:如果网络看不到哪些交易属于你,那么你自己的钱包要如何找到它们?
如今的答案很直接。钱包不能向服务器询问哪些交易是我的,因为这个问题本身就会暴露 Zcash 试图隐藏的内容。所以钱包只能下载大量数据,并在本地逐项测试哪些属于自己。这种方法可行,也能保护隐私,但速度慢、负担重。扫描过程正是钱包同步体验迟缓的主要原因之一。
理想的情况是,钱包能向服务器精确请求只属于自己的数据,并收到这些数据,同时服务器始终不知道请求的是什么。这正是私密信息检索所提供的能力。
什么是 PIR
私密信息检索是一种密码学方法,它允许客户端从服务器的数据库中读取一个条目,同时不向服务器透露自己读取的是哪个条目。
可以把它想象成一家图书馆:你能拿到自己想要的那本书,但图书管理员始终不知道交给你的是哪一本。你拿到了目标物品,而你的兴趣仍然是私密的。PIR 就是这一想法的数学版本,可以应用到任何数据库上。
这个概念在密码学中已经研究了几十年。它最早由 Chor、Goldreich、Kushilevitz 和 Sudan 在 1995 年提出,他们描述了多服务器方案;而第一个单服务器版本则在 1997 年由 Kushilevitz 和 Ostrovsky 提出。这并不是 Zcash 发明的东西,而是一个已经成熟的领域,如今 Zcash 正将其应用到一个真实且顽固的问题上。
从第一层理解 PIR 的工作方式
构建 PIR 大致有两种方式,而这种区别很重要。
第一种使用多个服务器。客户端向多个服务器中的每一个发送查询的一部分,再在本地把它们的响应组合起来。没有任何单个服务器能看到足够的信息来判断请求的内容。这种方式效率很高,但它依赖这些服务器彼此不串通,而这一点在现实世界中很难保证。
第二种使用单个服务器,并通过巧妙的密码学来替代多方参与。在这种方式下,客户端依赖一种称为同态加密的特殊工具。对于真实部署来说,这个方向更有用,因为它不需要多个彼此不串通的服务器。
机制:同态加密
同态加密是一类加密技术,它允许服务器在数据保持加密状态时对其进行计算。服务器可以在完全看不到底层数值的情况下,生成正确的加密答案。
下面是以这种方式构建单服务器 PIR 的基本思路。客户端想从一个列表里取出第三项。它构造一个查询,这个查询实际上相当于对第三个位置加密“是”,对其他每个位置加密“否”。对服务器来说,这个查询只是一团毫无意义的噪声,它无法分辨哪个位置对应“是”。
然后服务器利用同态加密的特殊性质,把自己的数据库与这个加密查询结合起来,对每个存储条目乘以对应的加密“是”或“否”,再把结果全部相加。最终得到的是一个单独的加密包,里面恰好只包含客户端想要的那个条目,而且不会泄露究竟是哪一个。客户端对这个包进行解密,并读取目标条目。服务器回答了这个问题,却始终不知道问题本身是什么。
一个更强的版本叫做对称 PIR,它增加了第二层保证:客户端只能学到自己请求的那个条目,而无法获知数据库中其他任何条目的信息。这不仅保护了客户端,也保护了数据库本身。
给技术读者的进一步说明
现代单服务器方案建立在格密码学之上,最常见的是 learning with errors 假设。客户端的查询是一个密文向量,在目标索引位置上加密的是一,其他位置上加密的是零;而这种加密具备加法同态性,因此服务器可以在不解密的情况下对密文求和,并将它们与明文数据库条目相乘。
服务器将数据库视为一个矩阵,应用这个加密选择向量,然后返回一个单独的密文;该密文解密后就是所需的那一行。由于查询与随机噪声无法区分,服务器得不到任何关于索引的信息。
历史上的障碍始终是成本。如果采用朴素方法,服务器必须为每次查询触碰数据库中的每个条目,这在计算上代价高昂;同时密文体积很大,这在带宽上也代价高昂。近期研究试图通过预处理来解决这个问题,像 SimplePIR 和 FrodoPIR 这样的方案允许服务器预先准备数据库,并向每个客户端提供一个很小的提示,把大量工作推到离线阶段,从而让在线查询变得很快。另一个有益的副作用是,基于格的构造通常也被认为能够抵抗量子攻击,这与 Zcash 更广泛地迈向后量子隐私的方向是一致的。
PIR 在 Zcash 中的作用
PIR 是让 Zcash 同时实现隐私性与大规模高速运行这一努力的一部分。
前文提到的钱包扫描瓶颈正是其目标。Valar Group 正在开发私密信息检索技术,使钱包能够从服务器获取属于自己的数据,而服务器并不知道请求的是哪些条目。一个具体应用是私密地检查 nullifier。nullifier 是 note 被花费时公开的唯一标记,用于防止同一笔资金被重复花费。钱包经常需要检查某个 nullifier 是否已经出现过,也就是确认某个 note 是否仍未被花费,而如今通过服务器进行这项检查可能会泄露正在查询的是哪个 note。私密信息检索让钱包可以提出这个问题,同时不暴露自己关心的是哪个 nullifier。这项工作与其他扩容工作并行推进,包括 Project Tachyon 和新的节点软件,它们共同致力于消除如今限制私密钱包性能的瓶颈。
必须坦诚说明目前所处的阶段。这仍然是活跃的研究和工程工作,而不是一个已经完成并上线的功能。这个概念本身已经相当成熟,方向也已明确,但如何让 PIR 在普通设备上的日常钱包中高效到足够实用,正是当前正在攻克的难点。
常见误解
- PIR 隐藏的是你请求了哪个条目,但它不一定能隐藏你与服务器发生了联系这一事实,网络层元数据是另一个独立问题
- PIR 并非 Zcash 独有,它是一种通用的密码学工具,而 Zcash 正将其应用到钱包隐私上
- 通过 PIR 实现更快同步是一个正在推进的目标,而不是钱包中已经具备的功能
- 下载全部数据并在本地扫描,也就是当前做法,虽然私密但很慢,而 PIR 的目标是在保留隐私的同时消除这种缓慢
相关页面