# Decentralizing Privacy：Using Blockchain to Protect Personal Data


Zyskind G, Nathan O, Pentland A, et al. Decentralizing Privacy: Using Blockchain to Protect Personal Data[C]. ieee symposium on security and privacy, 2015: 180-184.

DOI: [10.1109/SPW.2015.27](https://doi.org/10.1109/SPW.2015.27)

KeyWord: Protocols, Privacy, Data privacy, Online banking, Encryption, Compounds.

注：部分插图经过重新绘制，部分来自原论文截图。

## 摘要

当前的商业模式下，第三方收集和控制了大量的个人隐私，损害了用户权益，越来愈多的安全事件使得这一模式开始受到质疑。比特币证明了通过一个分布式的公有分类账在金融领域进行可信和可审计的计算是可行的。因此，本文提出了一种基于区块链的分布式个人数据管理系统，用于保证用户对个人数据的所有权和控制权。与比特币不同的是，本文提出的系统中，区块链交易不是金融交易，而是用于携带指令，如存储、查询和共享数据等，在文章的最后也会讨论区块链未来可能的发展。

<!--more-->

## 1. 引言

世界上的数据量正在迅速增加，其中大量的数据被人为的收集，例如，Facebook自成立以来收集了300PB的个人数据，是国会图书馆200多年来收集的数百倍。商业公司和组织利用收集的数据来提供个性化的服务，并通过大数据分析等技术优化公司决策过程、预测未来趋势等，数据已成为一种宝贵的资产。虽然我们都从数据驱动的社会中获益，但隐私问题也越来越受到人们的关注，公共与私人组织收集了大量隐私与敏感信息，经常在没有明确通知的情况下随意使用这些数据，个人很难或根本无法控制自己的数据是否被收集或如何被使用。

### 1.1 Related Work

当前已有很多尝试解决隐私问题的努力，不论是从立法的角度还是技术的角度都有。比如一个最近开发的框架Open-PDS，它提供了一个PDS自主部署模型，返回计算后的结果而不是原始数据本身，从而避免原始数据被滥用，虽然行业中现在普遍使用基于OAuth的认证。

研究人员开发了各种针对个人数据隐私问题的技术。**数据匿名化方法**试图保护个人身份信息，如k-匿名（k-anonymity）中匿名数据集要求每个记录的敏感信息至少与其它k-1个记录可区分，它确保敏感数据由足够多的可能值表示。**差异隐私**（differential privacy）是在共享数据之前扰乱数据或将噪声添加到计算过程的技术。**同态加密**则允许在加密数据上运行计算和查询，比如完全同态加密（FHE）方案允许在加密数据上执行任何计算，但目前效率太低而无法在实践中广泛使用。

近些年出现的区块链技术正在被大规模应用，并向我们展示了如何服务于需要可信计算和可审计性功能的项目。

### 1.2 贡献与全文结构

本文专注于移动平台中用户使用第三方服务时面临的隐私问题，提供第三方服务的应用程序不断收集用户的隐私和敏感信息。我们假设这些应用遵循某种协议，在此基础上本文提出的系统可以解决以下隐私问题：

- **数据所有权**：确保用户对自己的个人数据的所有权和控制权，系统将用户识别为数据所有者，服务作为宾客被授予权限。
- **数据透明性和可审计性**：用户知晓自己哪些数据被收集以及这些数据以怎样的方式被访问。
- **细粒度的访问控制**：现有移动应用程序中，用户注册时授予应用一组权限，这些权限是无限期的，更改协议的唯一方法是退出。本文系统中，用户可以随身更改或撤销先前授予的访问权限，注意表现形式是权限对话框，虽然用户界面可能不变，但访问控制策略实际上更安全地存储在了区块链中。

因此，本文的注意贡献如下：

1. 区块链和链下存储相结合，构建了一个专注于隐私的个人数据管理平台。
2. 通过对提出的平台和未来技术改进的讨论说明了区块链如何成为可信计算的重要资源。

本文的工作也可以用于其它场景下的数据隐私问题，例如患者共享其医疗数据用于科学研究，这时用户用于监督自己数据被如何使用和随时退出的能力。

论文其余部分组织如下，第二节讨论了解决的隐私问题，第三节概述了平台，第四节介绍了技术实施细节，第五节讨论了区块链的未来发展，第六节是结论。本篇论文笔记组织结构略有不同，接下来将直接介绍论文提出的方案，然后总结作者给出的分析，最后自己进行论文总结并记录相关想法和灵感。

## 2. 方案

### 2.1 总体架构

总体架构如下图所示，系统由三部分构成：

- （智能手机的）用户：users，下载和使用应用程序；
- 服务：services，应用程序的提供者，出于操作和业务相关的原因（例如，有针对性的广告，个性化服务），需要处理个人数据；
- 节点：nodes，维护区块链和一个分布式的私有键值对形式的数据库以换取奖励。

需要注意的是，虽然系统中的用户因为区块链的关系通常保持（伪）匿名，但我们可以在区块链上存储服务配置文件验证其身份。

![Overview of the decentralized platform](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-fig-1-source-large.gif)

区块链接受两种新的交易类型：T<sub>access</sub>用于访问控制管理，T<sub>data</sub>用于数据存储和检索。相关的操作封装到一个移动软件开发工具包（SDK）中，提供接口供程序开发使用。

举个例子：用户安装的应用程序使用本文提出的系统保护其隐私，当用户注册时，生成一个新的共享（用户，服务）身份，并使用T<sub>access</sub>交易将这个身份与相关联的权限一起发送到区块链。在手机上收集的数据（例如，传感器数据，位置等）使用一个共享加密密钥加密，并使用T<sub>data</sub>交易发送到区块链，这些数据随后将被路由到链下以键值方式存储，仅保留一个指向数据的指针存在区块链上（指针是数据的SHA-256哈希值）。

现在，服务和用户都可以使用T<sub>data</sub>交易（关联了数据指针）查询数据。区块链会验证数字签名属于用户还是服务，如果是服务，还会检查其访问数据的权限。最后，用户可以通过发布具有新权限的T<sub>access</sub>交易来随时更改授予服务的权限，包括撤销对先前存储的数据的访问权。

链下的键值存储是分布式哈希表（或DHT）的一个实现，使用 [LevelDB](http://leveldb.org/) 并维持一个到区块链的接口。DHT由节点网络（可能不是区块链网络节点）维护，完成授权的读/写交易。数据在节点之间充分随机化并复制以确保高可用性。值得注意的是，可以考虑使用其它的链下存储方案如集中式的云，虽然这需要信任第三方，但在可伸缩性和已部署方面有一定优势。

### 2.2 细节描述

我们现在描述底层协议的细节，系统使用标准加密构建区块：由3元组（G<sub>enc</sub>，E<sub>enc</sub>，D<sub>enc</sub>）定义对称加密方案，分别是生成器，加密和解密算法；由3元组（G<sub>sig</sub>，S<sub>sig</sub>，V<sub>sig</sub>）描述数字签名方案（DSS），分别是生成器，签名和验证算法；加密散列函数H由SHA-256实现。

#### A. 身份

区块链使用伪身份机制。为了增加隐私，每个用户都可以根据自己的需要生成尽可能多的伪身份（实质是一个公钥）。我们现在引入复合身份，复合身份是两方或多方的共享身份，其中一些方（至少一方）是「所有者」，拥有所有权限，其余方是「访客」，被限制访问。协议1说明了单个所有者（用户）和单个访客（服务）的实现。

![协议1 生成一个复合身份](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-graphic-1-source-large.gif)

如协议所示，身份包括用于所有者和访客的签名密钥对，以及用于数据加密（和解密）的对称密钥，以便保护数据免受系统中的所有其他参与者的影响。形式上，复合身份在外部（如网络中）看来是一个二元组：
$$
Compound_{u, s}^{(public)}=(pk_{sig}^{u, s},pk_{sig}^{s, u})
$$
整个身份（包括私钥）是如下五元组：
$$
Compound_{u, s}=(pk_{sig}^{u, s},sk_{sig}^{u, s}, pk_{sig}^{s, u},sk_{sig}^{s, u},sk_{enc}^{u, s})
$$

#### B. 区块链存储空间

我们让L代表区块链存储空间，表示为哈希表 L：{0,1} <sup>256</sup>→{0,1} <sup>N</sup>，其中N>>256并且可以存储足够大的文档。我们假设这个存储在比特币和其他区块链中使用的相同对抗模型下是防篡改的。为了直观地解释为什么这种可信数据存储可以在任何区块链（包括比特币）上实现，请考虑以下简化的，虽然效率低下的实现：区块链是一系列带时间戳的交易，其中每个交易包括可变数量的输出地址（每个地址是160位的值）。然后L可以按如下方式实现：交易中的前两个输出哈希为256位存储地址指针（其实就是哈希值），以及一些辅助元数据。其余的输出构成了序列化文档。查找 L[k]时，仅返回最近的交易，除了插入之外，还允许更新和删除操作。

#### C. 策略和辅助功能

用户u授予服务s的一组权限，由**POLICY<sub>u，s</sub>**表示。例如，如果u安装了需要访问用户位置和联系人的移动应用程序，那么POLICY<sub>u，s</sub> = { location，contacts }。值得注意的是，假设服务不会破坏协议并错误地标记数据，任何类型的数据都可以通过这种方式安全存储。可以在移动SDK中引入部分防止这种情况的保护措施，但无论如何，用户可以轻松检测到作弊的服务，因为他可以看到所有更改。

Parse（x）并行化发送到交易的消息，消息包含参数。协议2中说明的CheckPolicy（pk<sup>k</sup><sub>sig</sub>，x<sub>p</sub>）验证发起者是否具有适当的权限

![协议2 Perissions check against the blockchain](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-graphic-2-source-large.gif)

#### D. 核心协议

包括两种：访问控制和存储数据。当接收到T<sub>access</sub>交易时，协议3由网络中的节点执行，类似地，对T<sub>data</sub>交易执行协议4。

![协议3 Access Control Protocol](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-graphic-3-source-large.gif)

![协议4 Storing or Loading Data](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-graphic-4-source-large.gif)

如本文前面所述，T<sub>access</sub>交易允许用户通过发送POLICY<sub>u，s</sub>来更改授予服务的权限集。发送空集会撤消先前授予的所有访问权限。使用新的复合身份发送T<sub>access</sub>交易将被解释为用户首次注册服务。

类似地，T<sub>data</sub>交易控制读/写操作。在Check Policy的帮助下，只有用户（总是）或服务（如果允许）才能访问数据。请注意，在协议4的第9行和第16行中，我们使用简写符号来访问DHT，就像普通的哈希表一样。实际上，这些指令产生发送到DHT的链下的网络消息（读或写）。

## 3. 相关分析

### 3.1 隐私与安全

我们依赖于区块链是无篡改的，这种假设需要一个足够大的不受信任的对等网络。此外，我们假设用户以安全的方式管理其密钥，例如使用安全的集中式钱包服务。我们现在展示我们的系统如何防止攻击者破坏系统中的节点。目前，我们不太关心改变协议或记录先前读取数据的恶意服务，因为它们很可能是有信誉的，但我们在第V-A节中提供了这种行为的可能解决方案。

鉴于此模型，只有用户可以控制他的数据。区块链分布式的特性与数字签名交易相结合，确保对手无法冒充用户或破坏网络，因为这意味着对手伪造了数字签名，或者控制了大部分网络资源。同样，攻击者无法从区块链中学到任何东西，因为只有哈希指针存在链里。

控制一个或多个DHT节点的对手无法得到有关原始数据的任何信息，因为它是使用没有任何节点拥有的密钥加密的。请注意，虽然每个节点都不能确保数据完整性，因为单个节点可以篡改其本地副本或以拜占庭方式操作，但我们仍然可以通过充分切分和复制数据来最小化风险。

最后，为每个用户 - 服务对生成新的复合身份可确保在攻击者获得签名和加密密钥的情况下，只有一小部分数据受到危害。如果攻击者只获得其中一个键值，那么数据仍然是安全的。请注意，在实践中，我们可以进一步分割身份，以限制单个复合身份的暴露。例如，我们可以为每100条记录存储生成新密钥。

### 3.2 未来发展

在本节中，我们稍微讨论一下区块链未来的发展。与当前最先进的系统相比，这些可以在塑造更成熟的分布式可信计算平台方面发挥重要作用。更具体地说，它们将大大增加先前提出的平台的实用性。

#### A. 从存储到处理

到目前为止，我们的分析侧重于存储指向加密数据的指针。虽然这种方法适用于存储和随机查询，但它对处理数据的效率不高。**更重要的是，一旦服务查询到一段原始数据，它就可以存储它以供将来分析**。

更好的方法可能是永远不要让服务获取原始数据，而是允许它直接在网络上运行计算并获得最终结果。如果我们split data into shares（例如，使用Shamir's Secret Sharing），而不是加密它们，我们就可以使用安全的多方计算（MPC）来安全地评估任何功能。

在下图中，我们说明了MPC如何与区块链结合使用，特别是在我们的框架中。考虑一个简单的例子，其中一个城市举行选举并希望允许在线秘密投票。它开发了一个投票的移动应用程序并使用了我们的系统，现在增加了MPC的功能。在线选举结束后，该市随后提交其后端数据以汇总结果。网络随机选择节点子集，解释器将数据转换为安全的MPC协议。最后，结果存储在区块链中，以防止篡改。结果，没有人知道个人投了什么票，但每个人都可以看到选举的结果。

![Example of a flow of secure computation in a blockchain network](https://ieeexplore.ieee.org/mediastore_new/IEEE/content/media/7160794/7163193/7163223/7163223-fig-2-source-large.gif)

#### B. Trust and Decision-Making in Blockchains

比特币或一般的区块链假设所有节点都是同等不受信任的，并且它们在集体决策过程中的比例完全基于它们的计算资源（称为工作量证明算法）。换句话说 - 对于每个节点，资源（概率地）决定节点在投票中的权重。这会导致不利影响，最显著的是对sybil攻击的脆弱性，过度的能量消耗和高延迟。

直观上，工作量证明体系中将更多资源投入系统中的节点更不可能作弊。相似的，我们可以定义一种基于节点行为的新的信任的动态度量，比如遵循协议的行为会得到奖励。具体来说，我们可以将每个节点的信任度设置为其未来表现良好的预期值。同样，由于我们处理的是二进制随机变量，因此期望值只是概率p。逼近这种概率的一种简单方法是计算节点所采取的好的和坏的动作的数量，然后使用sigmoid函数将其压缩成概率。在实践中，每个块i我们都应该以公式(3)重新评估每个节点的信任分数
$$
trust_{n}^{(i)}= \\frac{1}{1+e^{-\\alpha(\\# good-\\# bad)}}\\qquad
$$
其中α 只是步长

基于这种度量，网络可以为可信节点提供更多权重并更有效的计算区块，因为这些节点花费了时间在系统中获取信任。它应当能抵抗sybil攻击。这种机制可能会吸引其他类型的攻击，例如节点增加其信用只是为了以后恶意行为。这可以通过随机选择几个节点来缓解，这些节点按其信任加权，对每个块进行投票，然后进行同等加权的多数投票。这可以防止单个参与者受到太多影响，无论他们的信任级别如何。

## 4. 总结与启发

个人数据和一般敏感数据的存储不应该信任第三方，因为第三方容易受到攻击和滥用数据。相反，用户应该拥有并控制他们的数据，而不影响安全性或限制公司和权威机构提供个性化服务的能力。我们的平台通过将区块链和链下存储解决方案相结合来实现这一目标。用户不需要信任任何第三方，并且始终知道正在收集的有关他们的数据及其使用方式。此外，区块链将用户识别为其个人数据的所有者。反过来，公司可以专注于利用数据而不过度担心正确保护和划分数据。

此外，通过分布式的平台，制定关于收集，存储和共享敏感数据的法律和监管决策应该更加简单。此外，法律法规可以编入区块链本身，以便自动执行。在其他情况下，分类帐可以作为访问（或存储）数据的合法证据，因为它是（计算上）防篡改的。


---

> 作者:   
> URL: https://shuzang.github.io/2019/decentralizing-privacyusing-blockchain-to-protect-personal-data/  

