system: [SYSTEM]

user: 3. 基于扩展区块链的数据共享方案 3.1. 方案模型 基于扩展区块链的数据共享方案包括四个实体，即数据所有者，数据请求者，服务器和区块链。系统模型如图4所示，具体介绍如下： 图4. 数据共享方案模型 1) 数据所有者：数据所有者负责把完整的数据加密后上传到服务器上，只有经过授权的用户才能有权限下载。同时提交数据资源发布交易到区块链中，数据所有者需要保证数据的真实可靠。 2) 数据请求者：数据请求者是指需要检索并使用数据的实体，当数据请求者在区块链上查询到想要的数据时，通过向区块链网络发出申请以从服务器处下载完整数据。 3) 服务器：服务器负责存储数据所有者的加密数据，服务器是半可信的，即服务器会正确响应用户的请求，但是会对处理的数据尽可能地获取自己感兴趣的信息。 4) 区块链：区块链负责记录数据的存储和搜索交易，利用Merkle Tree永久保存数据相关交易，利用MPT保存当前授权用户公钥哈希值以及公钥加密的解密密钥k。同时调用智能合约验证数请求者的访问权限。区块链的不可篡改性保证了存储在区块链上的数据不能被任意修改，以此作为验证数据一致性的证据。 3.2. 扩展区块结构 图5解释了扩展的区块结构，与传统区块结构不同的是扩展区块块体中的Merkle Tree叶子节点包含MPT根植。所有授权的用户公钥连同用该公钥加密的解密对称密钥保存在MPT中。当数据所有者授权新的用户时，就会有新的授权用户公钥插入MPT中，并导致MPT根值变化。当数据所有者撤销某个用户的权限，即删除MPT中的相关公钥，也会导致MPT根值变化，因此将授权更新交易的MPT根值附加在相应的交易之后保存在Merkle Tree。 图5. 扩展区块结构 3.3. 具体方案描述 基于扩展区块链的数据共享方案包括初始化，数据发布，数据请求，数据获取，权限更新五个阶段。为了实现用户可控的访问控制，结合扩展区块结构进行权限管理，具体方案设计如下。 1) 方案初始化：设置相关参数，每个区块链网络中的用户拥有自己的公私钥对，以进行身份验证和交易。 2) 数据发布：数据所有者使用随机生成的对称密钥对原始数据进行加密处理生成密文，然后使用授权用户的公钥生成一个访问权限MPT存储结构。把密文，密文相关信息和MPT上传到服务器中，同时向区块链中提交数据发布交易，交易中附带MPT根值。 3) 数据请求：数据请求者向区块链发送数据访问请求，区块链调用智能合约向服务器申请验证数据请求者权限的MPT中的相关数据，智能合约验证计算结果是否与区块中相应的MPT哈希值相等，如果验证通过，授权服务器将密文和加密的解密密钥发送给数据请求者。 4) 数据获取：数据请求者收到服务器发来的密文和加密的解密密钥后，首先计算密文的哈希值，与区块链中记录的数据哈希值进行对比，如果一致，则数据没有被篡改，进一步对服务器上的密文进行解密得到数据明文。 5) 权限管理：数据所有者可以随时通过更新动态MPT来删除或者插入授权用户。添加授权用户可以赋予某一数据请求者对数据的访问权限，删除授权用户可以取消某一数据请求者对数据的访问权限。 3.4. 方案流程 假设数据所有者为DO，数据请求者是DU，数据发布，数据请求，数据获取，权限更新的流程如图6所示，下面详细介绍方案的实现。 图6. 数据共享方案流程图 1) 方案初始化 系统设置ElGamal签名算法时使用的参数 ( p ， g ) ，其中p是一个大素数，g是 Z p * 的一个生成元，用户A选择 x ∈ Z P * 作为自己的私钥，计算自己的公钥 y ≡ g x mod p ，用户在本地安全保存 ( SK i ，PK i ) 。 2) 数据发布 ① DO生成数据密文。DO收集需要发布的数据m，选择一个正整数 a 0 ，计算 k = H 256 ( a 0 ) ，使用对称密钥k对数据m进行加密得到密文 E k ( m ) ，计算密文哈希值 h c = H 256 ( C ) 。 ② DO将拥有访问权限的授权用户信息依次插入到MPT中，包括公钥哈希值和公钥加密的解密密钥，其中Key表示公钥经过SHA-256后的二进制散列值，Value是相应公钥加密后的解密密钥。同时，在本地生成一个空文件记录被授权者信息，以便验证之后服务器是否正确执行权限增加和删除操作。 ③ DO构造消息发往服务器。 msg = { h c ， C ， P K D O ， d e s c ， S i g S K D O ， H ( M P T ) ， ( h c ， C ， P K D O ， d e s c ， M P T ) } 其中 h c 是密文在服务器上的索引， PK D O 是DO的公钥，desc是DO对数据的相关描述， H ( M P T ) 是MPT的根哈希值。 ④ 服务器验证DO签名合法性，如果合法则把消息msg储存在本地。 ⑤ DO发布交易提案。 TX D O = { h c ， P K D O ， d e s c ， S i g S K D O ， H ( M P T ) ， ( h c ， P K D O ， d e s c ， H ( M P T ) ) } ⑥ DO把交易提案发到区块链网络中，区块链中的节点对交易提案进行验证和共识，DO通过在新接收到的区块中查询是否有自己的交易提案来确定交易提案被记录到区块链上。 3) 数据请求 ① DU可以在区块链上浏览相关数据，如果对DO的哈希值为 h c 的数据感兴趣，则把 h c 记录在本地并且生成一个请求交易发布到区块链中，其中req为DU的具体请求内容。 T X D U = { h c ， P K D U ， r e q ， S i g S K D U ， ( h c ， P K D U ， r e q ) } 图7. 默克尔帕特丽夏树实例 ② 区块链中的节点对交易提案进行验证和共识，如果验证通过，则调用智能合约向服务器请求权限验证相关数据，对DU进行权限验证，如果DU的公钥是否在MPT中，服务器将生成相应的证明，为重构MPT的根提供必要的信息。接着智能合约同时通过计算所有节点的SHA-256值验证一致性，如果最终验证结果和区块中存储的MPT根值一致，则说明该用户具有访问权限。以图7为例，为了证明PK DU3 存在于MPT中，服务器需要提供扩展节点0，分支节点0，扩展节点2，分支节点1，扩展节点5，叶子节点3的数据，智能合约计算叶子节点1的散列值，确定与扩展节点5中存储的散列值相同，依次类推；最终，计算扩展节点 0 的散列值，如果和当前区块中保存的值相同，则证明PK DU3 确实存在于MPT中。 ③ 若验证通过，授权服务器将密文和存储在MPT中用DU公钥加密的解密密钥发送给DU，否则，告知DU无权访问所请求的数据。 4) 数据获取 ① 服务器在数据库中下载相关数据签名后发送给DU。 ② DU收到服务器发送的密文C后，验证签名的合法性，如果不合法，则忽略消息；否则，计算 h ′ c = H 256 ( C ) 。比较 h ′ c 与 h c 是否相同，其中 h c 是之前在区块链中记录的哈希值，以确保密文没有被篡改。如果密文正确，则使用对称密钥k计算 D k ( C ) 得到DO的数据m。 5) 添加权限 ① 假设新增授权用户的为 P K D U n e w ，DO在本地更新本地授权者信息，然后向服务器发送更新授权用户消息，格式如下。 msg = { h c ， P K D O ， S i g S K D O ， insert ， H ( P K DUnew ) ， H ( M P T ) ， ( h c ， P K D O ， P K D U new ) } ② 服务器验证消息正确性后，在MPT中执行插入 P K D U n e w 操作。 ③ 服务器完成插入操作后，向区块链网络中发布数据权限更新交易，DO可以通过在本地执行同样的MPT插入操作来验证服务器是否进行了正确的用户权限插入。 6) 删除权限 ① DO在本地更新本地授权者信息，删除不再享有资源权限的用户，然后向服务器发送更新授权用户消息，格式如下 msg = { h c ， P K D O ， S i g S K D O ， delete ， H ( P K DU1 ) ， H ( M P T ) ， ( h c ， P K D O ， P K DU 1 ) } ② 服务器验证消息正确性后，在MPT中执行删除 P K D U 1 操作。 ③ 服务器完成插入操作后，向区块链网络中发布数据权限更新交易，DO可以通过在本地执行同样的MPT插入操作来验证服务器是否进行了正确的用户权限删除。