基于区块链和属性基加密的个人隐私数据保护方案*

2021-03-19 06:12汪玉江曹成堂
密码学报 2021年1期

汪玉江, 曹成堂, 游 林

杭州电子科技大学 网络空间安全学院, 杭州310018

1 引言

我们每天在生活中都会产生大量的数据, 麦肯锡预测, 预计到2020 年, 全球的数据使用量将会达到40 ZB. 在大数据时代, 个人数据不断地被收集和分析, 从而导致创新和经济增长. 公司和组织使用他们收集的数据来提供个性化服务, 优化公司决策过程, 预测未来趋势等等. 尽管我们都从数据驱动的社会中受益, 但是公众越来越关注个人数据隐私问题. 第三方机构聚集了大量的个人的敏感信息, 个人几乎无法控制他们所存储的数据及其使用方式, 因此如何保护用户个人隐私数据成为了研究热点.

对用户而言, 一方面要保护自己的数据隐私, 另一方面又需要使用第三方应用来获取便捷的服务. 区块链以数据难以被篡改、可追溯等特点成为了解决上述问题的关键技术. 传统的区块链虽然解决了上述部分问题, 但是仍存在以下几个不足: (1) 交易透明, 对任何用户都可见; (2) 区块容量小, 不适合在链上存储大量数据; (3) 使用传统的对称加密方式或非对称加密方式, 只能支持一对一的安全传输, 不能满足用户需要多个第三方同时提供服务的需求. 针对上述不足, 学者们进行了积极的探索. 文献[1] 提出了一种基于区块链保护隐私数据的模型, 使用对称加密的方式加密存储数据, 使用区块链智能合约判定用户权限是否满足预先设置的访问策略, 但是只能进行一对一的安全传输. 文献[2] 将区块链与分布式哈希表结合, 将数据存储在分布式哈希表中, 链上只存储与交易相关的必要数据, 大大提高了系统查询数据的效率. 此方案虽然解决了区块链存储数据能力不足的问题, 但是并没有加密存储数据且无法实现访问控制.

利用属性基加密(Attribute-Based Encryption, ABE) 可以实现数据的一对多的安全传输, 并且能实现复杂的访问控制策略. 基本ABE 只能由授权机构设置访问策略, 而现实中需要由发送或接收方制定灵活的访问控制策略. Ibraimi 等人[3]提出了一个基于一般树结构的、由发送方决定访问控制策略的密文策略属性基加密(Cipertext-Policy Attribute-Based Encryption, CP-ABE) 方案. 该方案将Shamir 的门限秘密共享技术与树结构相结合, 使发送方能够制定复杂的访问控制策略. 在不同时期, 随着需求的变化, 用户属性可能会发生变化, 发生变化后的属性可能不能满足之前制定的属性基加密方案的访问控制策略, 因此属性密钥的撤销成为研究重点. 为了实现属性撤销, 一些可撤销的ABE 方案[4–6]被提出, 但这些方案都不能实现属性的及时撤销. 现有的实现属性及时撤销的ABE 方案的都是基于可信第三方的. Wu等[7]利用版本号和代理重加密技术实现属性的及时撤销, 当撤销操作发生后, 授权机构将系统版本号加1, 可信第三方需要更新所有与版本号相关的密钥和密文. 这些基于可信第三方的方案都不能防止用户与第三方串谋攻击. Sethia 等人[8]利用第三方代理实现了对属性的及时撤销, 且开销相较于其它的方法有一个很大的提升. 该方案只能撤销用户的所有属性, 不能针对用户的某一个属性撤销.

利用可信第三方的属性基加密虽然能够很好的实现属性的及时撤销, 但是存在以下几点风险. 第一,当第三方出现故障的时候, 整个系统都会停止运行; 第二, 如果第三方被攻击者攻破, 则攻击者可以在不被发现的情况下获取数据, 同时之前攻击者被撤销的属性也可以被恢复; 第三, 在某些极端情况下, 攻击者与第三方合谋, 则攻击者可以任意获取数据而不被数据拥有者知晓. 区块链底层网络为分布式的, 在没有51% 算力攻击下, 账本不可篡改, 很好地解决了以上风险.

因此, 本文将区块链技术与密文策略属性基加密相结合, 提出了一种基于属性基加密和区块链的个人隐私数据保护方案.

2 相关研究

2.1 DHT

DHT (Distributed Hash Table) 是一种在点对点网络中分散式的存储方法. 它用来将一个关键值的集合分散到所有在分布式系统中的节点, 并且可以有效地将信息转送到唯一一个拥有查询者提供的关键值的节点. 这里的节点可以理解为散列表中的存储位置. 在Chord[9]之前, 一致性哈希用于分布式系统中键值之间的映射, 应用在实现预定的节点之间, 节点不能随时加入或者退出系统.

Chord[9]是DHT 的一种经典实现, 数据都存储在虚拟的环形P2P 网络中, NID为数据的哈希值,PID为节点IP 的哈希值. 用NID 作为键在虚拟的环形P2P 网络中搜索时, 第一个PID ≥NID 的节点将会返回NID 对应的数据. 在一个由N 个节点组成的网络中, 通过增加路由表, 可以使查询的时间复杂度从O(N) 降到O(log N). 当节点加入或者离开网络的时候, 每个节点将会更新路由表. 为了容错, 当一个节点有N 个后继节点时, 选择此节点后续的k(k ≤N) 个节点, 复制此节点所有的数据.

文献[10] 基于DHT 提出了一种轻链结构, DHT 中的节点同时也是区块链网络中的节点, 每个区块和交易都在DHT 节点中复制, 并按需检索, 因此区块链本身不需要保存所有的数据. 此方案能够有效的解决区块链存储数据能力不足的问题.

2.2 区块链及相关技术

区块链是作为比特币[11]的底层技术首先提出来的, 是一种开放的分布式的公共账本, 在没有可信的第三方的情况下, 以安全可验证的方式记录了所有的交易, 每笔交易都可以追溯. 区块链中的后一个区块通过密码学的哈希算法链接到前一个块, 大多数节点通过共识后才能增加区块, 保证了数据不能篡改或者删除.

区块链通常将所有的信息都集中存储在一条链上, 分布式网络中, 这样会出现大量的冗余数据并且响应迟缓. 文献[12] 提出了双链结构, 一条链仅存储交易后的信息和账户信息; 另一条链仅存储对交易有用的信息并且执行相关交易. 这样能在一定程度上提高区块链的数据存储能力和效率. 文献[2] 是一种脱链存储的方法, 链上只存数据哈希摘要和数据在DHT 上的地址. 这样数据本身保存在DHT 上而不是区块链上, 就能为区块链节省很多空间, 提高上传和查询数据的效率.

智能合约概念在1995 年由Nick Szabo 首次提出, 是一种旨在以信息化传播、验证或执行合同的计算机协议. 但是提出之后实际的应用却无法实现, 直到区块链技术的出现. 区块链去中心化、不可篡改、过程透明可追踪的特点, 天然适合于智能合约. 智能合约是存储在区块链上的脚本, 一旦部署在区块链上, 即可以按照预先设定的方式执行.

Hyperledger 在2015 年的时候被Linux 基金会提出, Farbic 为Hyperledger 的一个区块链子项目.Farbic 不同于公链任何节点都可以加入网络, 而是拥有准入机制, 每个组织需要授权后才能加入网络. 因此, Fabric 属于联盟链. Fabric 网络的关键组件如下所示.

• Membership service provider: 为网络中的各个组成颁发证书授权.

• Consensus: Fabric 在不同场景的需求下, 提供了solo, kafka, PBFT 共识.

• Channel: 通道中包含若干的授权成员, 每个成员可以属于不同通道, 每个通道都是独立运行的, 账本状态也是独立的.

• Peers: Fabric 节点分为3 种. Endorser 节点: 完成交易提案的验证, 模拟运行交易, 将结果附上签名后返回给客户端; Orderer 节点: 根据共识算法, 为交易打包排序生成区块结构; Committer 节点: 从Orderer 节点获取区块结构, 验证合法性区块结构的合法性, 生成区块写入账本中.

3 可撤销的属性基加密

3.1 CP-ABE

文献[3] 基于DBDH 假设, 提出一种支持属性的与、或和门限操作的CP-ABE 方案. 访问结构由与(∨)、或(∧) 和门限(of) 节点组成的k 叉树设定, 选取随机数作为用户密钥, 防止用户串谋. 节点采用Shamir 的门限秘密共享技术分享秘密s. 具体算法流程如下:

(b) 第二层加密: 令树τ 的根节点的值为s. 初始化标记根节点, 其他节点不标记. 递归地对每一个未标记的非叶子节点执行以下操作:

• 假如非叶子节点的标志为of (门限操作), 且它的孩子节点未标记, 用(t,n)-Shamir’s 门限分享方案分享秘密s. 这里t= n, n 为当前节点孩子节点的个数, t 为重构秘密s 所需要的最小的孩子节点的数目. 对每一个孩子节点分配si=f(i), 并标记这些节点为已分配状态.

• 假如非叶子节点的标志为∧(且操作), 且它的孩子节点未标记, 用(t,n)-Shamir’s 门限分享方案分享秘密s. 这里t = n, n, t 表示如上. 对每一个孩子节点分配si= f(i), 并标记这些节点为已分配状态.

• 假如非叶子节点的标志为∨(或操作), 且它的孩子节点未标记, 用(t,n)-Shamir’s 门限分享方案分享秘密s. 这里t=1. 对每一个孩子节点分配si=f(i), 并标记这些节点为已分配状态.

图1 为权限控制树τ 分享秘密s 生成密文的示例. 首先根节点(∨节点) 的值设置为s, 对第二层非叶子节点使用(1,2)-Shamir 秘密分享技术分配秘密s, 即∧节点和of 节点的值都为si; 对∧节点的孩子节点使用(2,2)-Shamir 秘密分享技术分配秘密si, 设其孩子节点的值为s1,s2; 对of节点使用(2,3)-Shamir 秘密分享技术分配秘密si, 设其孩子节点值为s3,s4,s5.

图1 一个权限控制树实例τ =(T1 ∧T2)∨2of(T3,T3,T5)Figure 1 Instance of access tree τ =(T1 ∧T2)∨2of(T3,T3,T5)

(4) Decrypt(cτ,skω):

(a) 选择满足最小的属性集ω′⊆ω, 计算过程如下:

(b) 计算:

(c) 计算, 返回明文m:

3.2 RCP-ABE

本文在上述CP-ABE 方案的基础上, 将算法改进为可撤销的属性基加密方案, 本文将新方案命名为Revocable CP-ABE, 简称RCP-ABE. RCP-ABE 的主要思想是区块链维护一张数据请求者的属性列表,系统为数据请求者生成密钥时, 将密钥分为两部分, 一部分上传到区块链, 另一部分发送给数据请求者. 当数据请求者请求数据的时候, 区块链根据数据请求者的唯一标识, 查询数据请求者对应的属性列表. 如数据请求者的属性满足系统设定的数据访问策略, 则将数据进行第一次解密, 并将解密的结果返回给数据请求者. 数据请求者收到结果后, 进行第二次解密, 得到明文数据; 如不满足, 则拒绝服务. 该方案实现了属性基加密的实时撤销, 并且不需要可信的第三方为数据进行第一次解密, 所有操作均为智能合约自动执行.

3.3 算法安全性分析

安全模型: 选择属性集(selective-attribute) 明文攻击游戏(简称IND-sAttr-CPA) 在挑战者和敌手A 之间进行, 挑战者模拟协议执行并回答来自A 的查询. 游戏步骤如下:

(1) 初始化: 敌手A 选择权限控制树τ∗发送给挑战者.

(2) 设定: 挑战者执行Setup 算法生成(pk,mk), 将pk 发送给A.

(3) 阶段一: A 对属性ω = {aj| aj∈Ω, aj/∈τ∗} 发起密钥请求, 挑战者执行密钥生成算法Keygen(ω,mk), 将执行结果发送给A.

(4) 挑战: A 发送给挑战者两段等长信息m0,m1. 挑战者随机选择b ∈{0,1}, 执行加密算法cb=Encrypt(mb,τ∗,pk), 将cb发送给A.

(5) 阶段二: A 可以按照阶段一的要求持续请求执行Keygen 算法.

(6) 猜测: A 猜测b′∈{0,1}, 即cb是m0还是m1加密而来.

定义1 如果在任意多项式时间内, 敌手只能以可忽略的优势赢得上述游戏, 则称该ABE 方案在此模型中是安全的.

判定双线性Diffie-Hellman (DBDH) 假设: 挑战者随机选择a,b,c,θ ∈Zp, 选择群G0的生成元g, 令A = ga,B = gb,C = gc, 公平抛掷硬币µ, 假如µ = 0, 则输出有效的五元组(g,A,B,C,Z =e(g,g)abc), 否则输出随机五元组(g,A,B,C,Z = e(g,g)θ), Z ∈G1. 敌手必须对µ 做出猜测, 以判断等式Z =e(g,g)abc是否成立. 一个非确定性算法A 能以优势ε 解决DBDH 问题, 当

定义2 如果不存在多项式时间算法攻击者以至少ε 的优势解决DBDH 问题, 则DBDH 假设成立.

定理1 基于DBDH 假设, 在RCP-ABE 方案中, 对于多项式时间敌手在IND-sAttr-CPA 游戏中满足不可区分性.

证明: 证明过程类似文献[3], 以下为简要证明步骤. 假设敌手A 以不可忽略的优势ε 赢得INDsAttr-CPA 游戏, A 构造模拟器B, B 将以ε/2 的优势解决DBDH 问题. 游戏开始前, 挑战者初始化双线性对: 选择生成元为g 的群G0和群G1, 双线性映射e, 随机选择a,b,c,θ ∈Z∗p. 挑战者抛硬币µ, 如果µ=0, 令Zµ=e(g,g)abc; 否则令Zµ=e(g,g)θ. 挑战者给定g,A=ga,B =gb,C =gc作为输入, B判断等式Zµ=e(g,g)abc是否成立.

初始化: A 选择权限控制树τ∗发送给B.

初始设置: B 选择随机数x′∈Zp, 令e(g,g)α= e(g,g)ab·e(g,g)x′, 则α = ab+x′. 当aj∈Ω 且aj/∈τ∗时, 选择随机数kj∈Zp, 令Tj=B1/kj, 则tj=b/kj. B 将公共参数发送给A.

阶段一: A 为属性集ω = {aj|aj∈Ω ,aj/∈τ∗} 发送密钥请求. B 选择随机数r′∈Z∗p, 令d0=gx′−r′b, 则r =ab+r′b. 计算过程如下:

则A 获得密钥skωj=(d0,∀aj∈ωj:dj).

挑战: A 提交两条等长信息m0,m1∈G1. B 抛掷硬币, 返回mb的加密结果, mb加密过程如下:

(1) 第一层加密: c0=gc,

(2) 第二层加密: 令树τ∗的根节点的值为gc. 节点赋值操作同RCP-ABE 算法.

对于所有的叶子节点aj,i∈τ, 计算cj,i=gf(i)kj.

将密文cτ∗=(τ∗,c0,c1,∀aj,i∈τ∗:cj,i) 发送给A.阶段二: A 可以一直按照阶段一的步骤请求密钥.猜测: A 输出猜测b′∈{0,1}.

假如b′=b, B 将会猜测µ=0 和Zµ=e(g,g)abc. 假如b′=b, B 将会猜测µ=1 和Zµ=e(g,g)θ.当µ=0 时, 敌手的优势为:

4 系统设计

4.1 系统整体功能说明

该系统中的用户有数据拥有者, 用字母A 表示; 数据请求者, 用字母I 表示. 智能合约有属性合约、上传合约和查询合约. 角色的作用分别如下:

• 属性合约: 增加或删除用户属性, 维持属性列表.

• 上传合约: 将数据上传至DHT 中, 维护上传列表.

• 查询合约: 验证请求者属性集是否满足访问策略, 验证通过后解密数据.

• I: 提供身份信息, 申请密钥; 查询数据.

• A: 初始化密钥; 为数据请求者颁发属性密钥; 撤销用户权限; 上传数据; 设定访问控制策略.

第三方应用即数据的请求者通过调用SDK 与Fabric 网络交互, Fabric 收到请求参数后, 自动执行智能合约的业务逻辑, 并将执行结果写入到账本中. 数据存储层主要是利用DHT 脱链存储用户加密后的数据. 系统架构图如图2 所示.

4.2 系统详细设计

整个系统分为五部分, 时序图如图3 所示.

图3 个人数据保护时序图Figure 3 Personal data protection timing diagram

4.2.1 初始化

Fabric 网络初始化, 初始化Fabric 网络节点, 编写chaincode 即Fabric 上的智能合约, 打包智能合约, 将智能合约安装部署到Fabric 网络上, 实例化智能合约, 为系统中的用户颁发证书; A 执行Setup(k),生成公钥pk, 主私钥mk, 并生成A 对应的身份标识Auid.

4.2.2 身份注册

(1) I 提供身份信息Iu和属性集合ω.

(2) A 审查I 提供的身份和属性信息, 审查通过后为I 生成唯一的身份标识Iuid.

(3) A 执行密钥生成算法计算私钥(skωIu,1,skωIu,2)=Keygen(mk,ω,Iu).

(4) A 通过安全信道将{Auid,Iuid,ω,skωIu,1} 发送给区块链SDK, 将skωIu,2通过安全信道发送给I. 本文的安全信道通过安全传输协议TLS 实现的, 能够保护信息的机密性和完整性.

(5) 客户端通过调用SDK 发起区块链网络发送交易提案, Endorser 节点验证交易提案的合法性, 若合法, 对交易提案背书, 模拟执行智能合约, 将执行后的生成的属性列表和签名发送给客户端. 客户端将背书节点返回的结果发送给Orderer 节点, 由Orderer 节点经过共识后生成区块结构.Committer 节点定期从Orderer 节点获取区块结构, 对所有区块结构进行合法检查, 检查通过后,生成区块写入账本. 列表内容如表1 所示.

表1 属性列表Table 1 Attributes list

4.2.3 数据上传

(1) A 首先对要上传数据m 执行加密操作, 计算密文cτ=Encrypt(m,τ,pk).

(2) A 将身份标识Auid、权限控制树τ、数据m 的关键词mKey 和密文cτ发送给区块链SDK.

(3) 区块链将执行交易流程, 上传合约计算数据关键词的哈希, 即计算ht = SHA −256(mKey). ht作为DHT 中的key, cτ作为DHT 中的value, 将数据存入DHT 中, 生成上传列表写入到区块链账本中. 列表内容如表2 所示.

表2 上传列表Table 2 Upload list

4.2.4 访问数据

(1) I 提供身份标识Iuid, 数据m 的关键词, 发送给区块链的SDK.

(2) SDK 调用查询合约, 根据Iuid查询账本中的属性列表, 返回Iuid对应的属性集ω; 根据数据m的关键词哈希查询账本中的上传列表, 返回τ. 验证ω 是否满足τ, 如满足, 则从DHT 中取出密文cτ, 对密文第一次解密, 即执行算法

(3) I 得到区块链返回的结果后执行算法

得到明文m; 若没有得到返回结果, 则重新提交请求.

4.2.5 撤销用户权限

A 因为需求变动, 需要撤销I 的整个权限或者部分权限, 则向区块链发起更改属性的交易请求, 区块链验证用户证书后, 将更新账本中的属性列表, 即将I 对应的ω 修改为ω′, ω′为I 新的属性集, 为空则说明这个用户权限被撤销.

4.3 系统仿真

本系统使用8 GB 内存64 位的Ubuntu 16.04 操作系统实现, 区块链使用的是Hyperledger-fabric 1.3 版本, DHT 由单机模拟实现. 后端使用GOLANG 语言开发, 前端用的语言是JavaScript. 后端使用Fabric 提供的GO-SDK 与区块链交互. 密码库使用的斯坦福提供的pairing-based cryptography (PBC)0.5.14 版本. 仿真实验选取的双线性对基于椭圆曲线y2= x3+x, 椭圆曲线的阶r 为160 位, 素数q 为512 位. 仿真界面用户输入的为白色底色, 系统生成的为灰色底色.

4.3.1 Fabric 网络初始化

本文从github 官网上下载Fabric 1.3 的源码, 运行官方first-network 示例网络. 运行过程如下:

(1) 利用cryptogen 工具生成用户发起交易所需要的证书;

(2) 利用configten 工具生成一个orderer 节点和2 个组织, 每个组织包含两个peer 节点;

(3) 生成创世区块和channel 通道, 将创世区块和每个节点都加入channel;

(4) 编写智能合约, 替换示例中的智能合约, 部署智能合约, 利用docker-compose 启动整个网络.智能合约如表3 所示.

表3 智能合约列表Table 3 Smart contract list

4.3.2 系统初始化

数据拥有者初始化界面: 用户登录系统, 系统为用户生成ID. 输入属性集{a,b,c,d}, 系统为用户生成主私钥主公钥. 具体如图4 所示.

4.3.3 数据上传

数据上传界面: 用户输入访问策略(2of4 a b c d), 表示数据请求至少拥有4 个属性中的2 个才能解密. 明文this is a test case, 并输入明文的关键词test, 关键词用来给数据查询者搜索明文. 系统读取用户的公钥生成密文, 通过SDK 接口调用UploadC 智能合约, 智能合约发起交易, 交易验证通过后, 生成上传列表, 写入区块链账本中, 并将密文上传至DHT 中保存. 具体如图5 所示.

图5 数据上传Figure 5 Upload data

4.3.4 身份注册

身份注册界面: 数据拥有者根据数据请求者的信息, 定义数据请求者的属性(a,b), 生成密钥sk1 和sk2, 将sk2 发送给数据请求者; sk1 发送给区块链AttributesC 智能合约, 智能合约发起交易, 交易验证通过后, 生成属性列表, 写入区块链账本中. 具体如图6 所示.

图6 身份注册Figure 6 Identity registration

4.3.5 数据查询

数据查询: 用户输入明文的关键词调用SDK 发送查询数据请求, SDK 调用QueryC 智能合约, 智能合约根据用户ID 找到用户属性(a,b), 判断用户属性满足权限控制树, 智能合约从DHT 中取出密文, 对密文进行第一次解密. 用户得到区块链返回的结果, 用自己的私钥进行第二次解密, 得到明文m. 具体如图7 所示.

图7 数据查询Figure 7 Query data

5 对比分析

5.1 RCP-ABE 对比分析

本文方案与经典的版本号撤销方法和中国剩余定理进行对比, 分析各方案的存储开销和通信开销, 由于存储开销与用户的私钥长度相关, 通信开销与密文长度相关. 因此, 本文只对比各方案的密文长度和私钥长度, 得到结果列表. 在进行性能评估时, Lx表示x 中元素的长度; Au表示用户拥有的属性个数; Ac表示密文包含的属性个数.

文献[7] 和文献[13] 方案引入第三方使用版本号实现撤销, 当有属性撤销时, 第三方为该属性选择新的版本号. 文献[14] 引入中国剩余定理实现属性撤销. 本文方案引入区块链, 将用户一部分密钥存入到区块链上, 极大的减轻了用户的存储负担, 同时实现了属性的及时撤销. 分析表4 可以看出, 本方案的存储和通信开销相对于其他方案都减少了1/2 左右.

表4 存储开销和通信开销对比Table 4 Comparison of storage overhead and communication overhead

5.2 整体方案对比分析

表5 本方案与文献[1] 方案的对比Table 5 Comparison of our proposed scheme with the scheme of Ref. [1]

6 结束语

针对用户使用第三方应用时产生的数据安全问题, 本文提出了一种基于区块链和属性基加密的个人隐私数据保护方案. 用区块链智能合约代替了传统的第三方, RCP-ABE 用来实现对用户数据的细粒度访问控制, 用户还可以随时撤销第三方用户的访问权限, 帮助用户在享受第三方应用服务的时候保护自己的隐私数据. 同时, 区块链以可追踪的特点防止第三方应用滥用数据.