1. 引言
在大数据时代,各机构积累了大量行业数据,这些数据是整个社会活动的数字化记录,是能够被重复利用的非物质财富 [1]。但是由于信息系统的差异等原因导致部门之间形成了若干的数据孤岛,进而严重影响了数据价值的释放。因此,亟需通过数据共享打通数据壁垒,释放数据流通起来的价值。现有的数据共享方案主要基于一个中心化的数据共享平台,各个部门通过FTP、系统接口或人工上传的方式,将各个部门的原始数据上传到共享平台中进行政务数据共享,存在中心化的风险。同时,传统的数据共享平台由于数据全部集中共享平台中,数据共享平台无法保证绝对的数据安全,一旦发生数据泄漏会造成严重后果。而且,由于数据共享平台缺少隐私数据保护机制,导致各个参与方的一些敏感数据不能共享,由此限制了后续业务的开展。
区块链是比特币底层核心技术 [2] [3],具有去中心化、数据防篡改、可溯源的特点。因此,本文结合区块链技术,提出一个去中心化扩展区块链数据共享方案。在该方案中,数据所有者可以通过扩展的区块结构来授权可访问数据的用户,若数据请求者对区块上的信息感兴趣,可向区块链申请身份验证,区块链调用智能合约验证数据请求者是否是拥有权限,若通过验证,则该用户有权访问数据并对数据进行操作,有效地实现用户数据的去中心化安全共享。
2. 理论基础
2.1. 区块链技术
2008年,中本聪 [4] 首先提出了区块链 [5] [6] [7] [8] [9] 的概念,它被称为比特币作为加密货币背后的重点技术,帮助实现点对点的价值交换,不需要集中的第三方。区块链数据的存储、核算、维护、验证和传输过程是基于分布式系统结构,使用纯数学方法而不是中央机构来建立分布式节点之间的信任关系,从而形成一个分散的可信分布式系统。从根本上说,它是一组名为验证者或矿工的节点,它们负责在无信任环境中通过共识算法维护所有事务的可信记录。
如图1所示,一个区块链是由许多块组成的,其中块是指系统在一段时间内所有信息通信数据的集合。块是构成区块链的基本单位,每个块都有一个时间戳作为其唯一标记,以确保区块链的可追溯性。每个块分为两部分:块头和块体,每个块头包含前一个块块头的链接指针,树状事务信息的Merkle根 [10] [11],以及时间戳,块体记录网络中的数据信息。因此,这些区块就按时间顺序联系在一起了 [12]。
2.2. 默克尔帕特丽夏树
以太坊 [13] 中提出的默克尔帕特丽夏树(Merkle Patricia Tree, MPT) [14] [15] [16] 是Merkle Tree和图2中Patricia Tree的混合体。它是一种高效的插入和删除操作的前缀树。MPT中有四种节点,即空节点、叶节点、扩展节点和分支节点。空节点是一个空字符串。叶节点和扩展节点都表示为一个键值对,这些键(key)采用十六进制前缀编码。扩展节点中的键指示其后代节点的公共前缀,它们的值是它们的子节点的散列值。叶子节点中的键表示除公共前缀外的其余部分,值是它们自己的值。分支节点的键由17个元素组成,其中16个元素对应于十六进制前缀码。最后一个元素仅在搜索路径到此结束时使用。
2.3. 公钥密码体制
公钥密钥密码体制 [17] 是由Whitfield Diffie和Martin Hellman于1976年发布的,他们公开了一种公开密钥协议的方法。这种密钥交换方法后来被称为Diffie-Hellman密钥交换,成为公开密钥密码系统的基础。公钥密码体制的一般流程如图3所示。
3. 基于扩展区块链的数据共享方案
3.1. 方案模型
基于扩展区块链的数据共享方案包括四个实体,即数据所有者,数据请求者,服务器和区块链。系统模型如图4所示,具体介绍如下:
1) 数据所有者:数据所有者负责把完整的数据加密后上传到服务器上,只有经过授权的用户才能有权限下载。同时提交数据资源发布交易到区块链中,数据所有者需要保证数据的真实可靠。
2) 数据请求者:数据请求者是指需要检索并使用数据的实体,当数据请求者在区块链上查询到想要的数据时,通过向区块链网络发出申请以从服务器处下载完整数据。
3) 服务器:服务器负责存储数据所有者的加密数据,服务器是半可信的,即服务器会正确响应用户的请求,但是会对处理的数据尽可能地获取自己感兴趣的信息。
4) 区块链:区块链负责记录数据的存储和搜索交易,利用Merkle Tree永久保存数据相关交易,利用MPT保存当前授权用户公钥哈希值以及公钥加密的解密密钥k。同时调用智能合约验证数请求者的访问权限。区块链的不可篡改性保证了存储在区块链上的数据不能被任意修改,以此作为验证数据一致性的证据。
3.2. 扩展区块结构
图5解释了扩展的区块结构,与传统区块结构不同的是扩展区块块体中的Merkle Tree叶子节点包含MPT根植。所有授权的用户公钥连同用该公钥加密的解密对称密钥保存在MPT中。当数据所有者授权新的用户时,就会有新的授权用户公钥插入MPT中,并导致MPT根值变化。当数据所有者撤销某个用户的权限,即删除MPT中的相关公钥,也会导致MPT根值变化,因此将授权更新交易的MPT根值附加在相应的交易之后保存在Merkle Tree。
3.3. 具体方案描述
基于扩展区块链的数据共享方案包括初始化,数据发布,数据请求,数据获取,权限更新五个阶段。为了实现用户可控的访问控制,结合扩展区块结构进行权限管理,具体方案设计如下。
1) 方案初始化:设置相关参数,每个区块链网络中的用户拥有自己的公私钥对,以进行身份验证和交易。
2) 数据发布:数据所有者使用随机生成的对称密钥对原始数据进行加密处理生成密文,然后使用授权用户的公钥生成一个访问权限MPT存储结构。把密文,密文相关信息和MPT上传到服务器中,同时向区块链中提交数据发布交易,交易中附带MPT根值。
3) 数据请求:数据请求者向区块链发送数据访问请求,区块链调用智能合约向服务器申请验证数据请求者权限的MPT中的相关数据,智能合约验证计算结果是否与区块中相应的MPT哈希值相等,如果验证通过,授权服务器将密文和加密的解密密钥发送给数据请求者。
4) 数据获取:数据请求者收到服务器发来的密文和加密的解密密钥后,首先计算密文的哈希值,与区块链中记录的数据哈希值进行对比,如果一致,则数据没有被篡改,进一步对服务器上的密文进行解密得到数据明文。
5) 权限管理:数据所有者可以随时通过更新动态MPT来删除或者插入授权用户。添加授权用户可以赋予某一数据请求者对数据的访问权限,删除授权用户可以取消某一数据请求者对数据的访问权限。
3.4. 方案流程
假设数据所有者为DO,数据请求者是DU,数据发布,数据请求,数据获取,权限更新的流程如图6所示,下面详细介绍方案的实现。
1) 方案初始化
系统设置ElGamal签名算法时使用的参数
,其中p是一个大素数,g是
的一个生成元,用户A选择
作为自己的私钥,计算自己的公钥
,用户在本地安全保存
。
2) 数据发布
① DO生成数据密文。DO收集需要发布的数据m,选择一个正整数
,计算
,使用对称密钥k对数据m进行加密得到密文
,计算密文哈希值
。
② DO将拥有访问权限的授权用户信息依次插入到MPT中,包括公钥哈希值和公钥加密的解密密钥,其中Key表示公钥经过SHA-256后的二进制散列值,Value是相应公钥加密后的解密密钥。同时,在本地生成一个空文件记录被授权者信息,以便验证之后服务器是否正确执行权限增加和删除操作。
③ DO构造消息发往服务器。
其中
是密文在服务器上的索引,
是DO的公钥,desc是DO对数据的相关描述,
是MPT的根哈希值。
④ 服务器验证DO签名合法性,如果合法则把消息msg储存在本地。
⑤ DO发布交易提案。
⑥ DO把交易提案发到区块链网络中,区块链中的节点对交易提案进行验证和共识,DO通过在新接收到的区块中查询是否有自己的交易提案来确定交易提案被记录到区块链上。
3) 数据请求
① DU可以在区块链上浏览相关数据,如果对DO的哈希值为
的数据感兴趣,则把
记录在本地并且生成一个请求交易发布到区块链中,其中req为DU的具体请求内容。

Figure 7. Example of merkle patricia tree
图7. 默克尔帕特丽夏树实例
② 区块链中的节点对交易提案进行验证和共识,如果验证通过,则调用智能合约向服务器请求权限验证相关数据,对DU进行权限验证,如果DU的公钥是否在MPT中,服务器将生成相应的证明,为重构MPT的根提供必要的信息。接着智能合约同时通过计算所有节点的SHA-256值验证一致性,如果最终验证结果和区块中存储的MPT根值一致,则说明该用户具有访问权限。以图7为例,为了证明PKDU3存在于MPT中,服务器需要提供扩展节点0,分支节点0,扩展节点2,分支节点1,扩展节点5,叶子节点3的数据,智能合约计算叶子节点1的散列值,确定与扩展节点5中存储的散列值相同,依次类推;最终,计算扩展节点 0 的散列值,如果和当前区块中保存的值相同,则证明PKDU3确实存在于MPT中。
③ 若验证通过,授权服务器将密文和存储在MPT中用DU公钥加密的解密密钥发送给DU,否则,告知DU无权访问所请求的数据。
4) 数据获取
① 服务器在数据库中下载相关数据签名后发送给DU。
② DU收到服务器发送的密文C后,验证签名的合法性,如果不合法,则忽略消息;否则,计算
。比较
与
是否相同,其中
是之前在区块链中记录的哈希值,以确保密文没有被篡改。如果密文正确,则使用对称密钥k计算
得到DO的数据m。
5) 添加权限
① 假设新增授权用户的为
,DO在本地更新本地授权者信息,然后向服务器发送更新授权用户消息,格式如下。
② 服务器验证消息正确性后,在MPT中执行插入
操作。
③ 服务器完成插入操作后,向区块链网络中发布数据权限更新交易,DO可以通过在本地执行同样的MPT插入操作来验证服务器是否进行了正确的用户权限插入。
6) 删除权限
① DO在本地更新本地授权者信息,删除不再享有资源权限的用户,然后向服务器发送更新授权用户消息,格式如下
② 服务器验证消息正确性后,在MPT中执行删除
操作。
③ 服务器完成插入操作后,向区块链网络中发布数据权限更新交易,DO可以通过在本地执行同样的MPT插入操作来验证服务器是否进行了正确的用户权限删除。
4. 安全性分析
本文主要从数据机密性、不可篡改性和访问控制3个方面进行分析。
4.1. 数据机密性
数据机密性的威胁主要来自半可信的服务器和潜在的未授权敌手。本方案服务器中存储的数据是数据所有者使用对称加密加密原始数据后的密文,在对称密钥没有泄露的情况下,服务器和敌手只能通过攻击AES算法来过的相应明文数据,经过证明,AES算法安全性较高,在多项式时间内敌手无法获得明文数据。
4.2. 数据的不可篡改性
数据不可篡改性的威胁主要来自于半可信的服务器,服务器可能会恶意篡改数据。服务器可能先篡改数据,然后修改区块链中存储的哈希值,但是区块链是分布式存储结构,具有不可篡改的特性。或者服务器找到与原始数据的哈子碰撞值,然而这是非常困难的。因此将数据的哈希值保存在区块链中能够保证数据的不可篡改性。
4.3. 数据的访问控制
在本方案中使用MPT作为数据访问控制的工具,数据所有者可以在任何给定时间更改权限集,添加或者撤销用户对先前数据的访问权限,MPT安全的储存在服务器上,数据所有者可以在本地执行相同的授权用户公钥插入和删除操作,通过对比MPT根植来对服务器修改访问权限的行为进行监督,确保用户控制自己的数据。
5. 实验分析
5.1. 公钥插入和公钥撤销
授权新用户即向MPT中插入新节点,撤销授权用户即从MPT中删除旧节点。实验任意选取500个不同节点分别进行插入和删除操作。图8记录了不同情况下两种操作的时间消耗情况。

Figure 8. Insertion and deletion of public keys cost time
图8. 插入删除公钥时间消耗
实验结果显示,权限更新时间成本随着授权用户公钥添加数量的增加而线性增长,考虑到实际中服务器的计算和存储能力远超本文的实验条件,且公钥存储数量远远小于本文实验数量,服务器维护管理的开销是完全可以接受的。
5.2. 访问权限认证
服务器提供访问权限验证所需的数据,智能合约收到数据之后通过计算若干SHA-256验证发送方的公钥是否在MPT中。访问权限验证所需数据和时间消耗的最大值、最小值和平均值列在表1中。

Table 1. Maximum, minimum, and average cost of data and time required for permission validation
表1. 权限验证所需数据和时间消耗的最大值、最小值和平均值
基于扩展区块链的权限验证方案,在公钥总数达500的情况下,权限验证所需数据最大值为2.79 KB,平均为2.21 KB,权限验证时间消耗最大值为0.03 ms,平均值为0.01 ms,对于执行链码的区块链网络中节点的来说是完全可以接受的。
6. 总结
本文提出一个基于扩展区块链的数据共享方案,该方案结合区块链技术和密码技术创建一个安全可靠的存储和共享环境。通过将原始加密数据存储在链下服务器中,而数据的散列信息存储在区块链上来保障数据的完整性。此外,基于扩展区块结构的授权访问模型实现了数据所有者可以在任何时间更改权限集,添加或撤消数据请求者对自己数据的访问权限,同时对第三方服务器的行为进行有效监督。实验和安全性分析表明,该方案具有较高的安全性、有效性和可信性,权限验证所需数据和时间消耗较小,能够实现安全数据共享。
基金项目
国家自然科学基金(61801008)。