基于联盟区块链的医疗健康数据安全模型设计
2021-09-29徐磊
徐磊
(中国人民解放军联勤保障部队第九六〇医院, 山东 济南 250032)
0 引言
区块链(Blockchain)是比特币的底层技术,最早的用途为记录比特币交易的数据结构,当前对于区块链技术的概念,学术界还没有进行统一的定义,袁勇指出狭义的区块链是根据时间顺序将数据结构进行特定组合,并且这些数据以链条的方式进行链接,利用密码学的方式确保医疗数据不能被任意篡改,避免伪造去中心化总账;广义的区块链技术采用链式的加密结构用来验证、存储相应的数据,利用分布式节点共识算法来生成和更新数据,利用自动化脚本代码对数据进行编程和操作的一种新型的去中心化基础架构与分布式计算范式[1-4]。在《中国区块链技术和应用发展白皮书(2016)》中将区块链定义为一种分布式数据存储、点对点传输、加密算法等计算机技术在互联网时代的创新应用模式[5-7]。
区块链具有去中心化、集体维护性、自信任性、可编程性、可验证性和可追溯性。文献[8—10]中提出利用区块链分布式存储技术,可以降低数据在存储中被破坏或者被篡改的几率。采用区块链双链结构形成链式数据结构,在一定程度上保证了农产品数据不会被恶意篡改或破坏。联盟区块链在性能、编程、隐私保护等方面更加具有优势,被称之为“多中心”或“部分去中心化”的区块链。由于医疗健康数据量较大,对于区块链交易的效率要求也在不断提高,联盟链的节点数少,单位时间内确认的交易数量多,因此,本文基于联盟区块链设计医疗健康数据安全模型,为提高医疗健康数据的安全性提供技术支撑与参考。
1 基于联盟区块链的医疗健康数据安全模型架构设计
本文设计了基于联盟区块链的医疗健康数据安全模型,通过该安全模型分布式存储医疗健康数据,提高医疗健康数据存储的安全性,改变医疗健康数据易被篡改、垄断及共享难的问题,真正实现去中心及不可更改的安全存储目的。医疗健康数据区块链保存了所有医疗数据完整的历史记录,涵盖了EMR(Electronic Medical Record,计算机化的病案系统)、访问、处方、账单和IoT数据,这些数据将永远跟随单个用户。医疗健康数据安全存储模型包括用户端、基础服务平台(医疗机构节点平台)、联盟区块链及分布式存储集群、监控平台组成。
(1) 用户端。用户端包含多种具有不同角色的用户,比如医生可以根据患者曾经的治疗记录及用药情况等开出治疗处方;药剂师可以通过终端对患者的用药进行指导;患者可以通过访问这些信息及时了解自身的健康状态;管理员可以访问这些数据信息,确认信息是否完整、可靠。
(2) 基础服务平台。联盟区块链是实现医疗数据安全存储的关键,通过区块链能够对交易记录进行追溯,数据不可被篡改,对医疗健康数据进行访问时,首先在区块链中存储医疗数据的元数据,并在区块链中的不同节点上调用、部署智能合约。部署好智能合约之后,基础服务平台根据用户的访问需求调用患者的医疗健康数据,产生交易记录存储在联盟区块链中,不同区块链节点上的信息永久保存、不可更改,因此,保证了生成的患者的医疗健康数据的真实性和可靠性,同时也可以实现数据访问的溯源。基础服务平台处于中间层,向上与用户端(医生、管理员、护士及患者本身)通信,基础服务平台与用户端的通信通过业务逻辑封装的RESTful接口实现;基础服务平台与分布式服务器集群之间的网关及以太坊节点通信通过调用网关接口实现,调用网关接口实现医疗健康数据的上传,生成元数据之后调用智能合约将数据存储在联盟区块链中。
(3) 联盟区块链及分布式存储集群。由于联盟区块链的存储空间有限,不能单独完成医疗健康数据的存储,本文中应用了分布式数据库(DDB)存储医疗健康数据,数据存储时采用代理重加密的方式将一个数据块(数据摘要、贡献节点签名、地址)加密哈希后存放在默克尔树的叶子节点,利用默克尔树的结构逐级向上哈希得到Merkle根,最后作为一个区块放入区块链中。这种存储方式具有不可抵赖、不可改变的优势。
(4) 监控平台。监控平台定期地对DDB集群、联盟区块链网络结构及以太坊节点的相关信息,以判定医疗健康数据是否处于健康的状态。
2 安全模型设计与实现
2.1 联盟区块链及分布式存储集群存储策略设计
医疗健康数据存储于区块链及分布式存储系统,为了提高区块链对于医疗健康数据的输入输出效率,安全模型在应用过程中自动封装不同节点的医疗健康数据上传至分布式存储系统,区块链的数据存储在不同的块中,形成不同的数据存储块,区块链不能直接对数据存储块的结构进行判别,需要对数据标识进行自定义以实现数据的快速查询。数据标识形成之后,设置区块链的访问控制策略,访问控制通过之后交易才能写入区块链,具体实现流程如图1所示。
图1 医疗健康数据存储流程
2.2 基础服务平台的设计与实现
基础服务平台属于中间模块,为用户端提供RESTful API调用业务逻辑,向下与联盟区块链及分布式存储集群执行数据的访问及存储操作,通过与联盟区块链及分布式存储集群通信创建及查询数据存入以太坊节点。用户端发出医疗健康数据的相关请求,调用基础服务平台中的API完成医疗健康数据的访问操作或者上传操作。应用Node.js技术实现基础服务平台管理,基础服务平台与其他模块通信如图2所示。
图2 基础服务平台与其他模块通信
基础服务平台模块接入到以太坊节点,使用Web3.js库提供的Web3对象,与以太坊的通信关键代码如下。
Datamanage.setProvider(web3.currentProvider);DataManage.deployed().then (function(instance){meta=instance;meta.insertMetaData(key,timestamp,bucket,url,digest,{ac-count});});
2.3 医疗健康数据安全模型的访问控制机制
医疗健康数据的所有者为患者,医疗结构管理者上传医疗健康数据时需要先创建智能合约,然后形成医疗健康数据的访问控制策略acpi,采用身份验证的形式对医疗健康数据文件进行加密,获得加密之后的文件Fi、密文Ci,Fi、Ci上传到分布式数据库;分布式数据库根据Fi计算得到唯一的Hash值Hashi,将Hashi返回给医疗机构,医疗机构调用智能合约将Hashi及相关的交易信息存储在以太坊区块链上;医疗机构在调用患者的医疗健康数据时可以验证Hashi版权信息,防止信息被篡改,同时允许其他医疗机构对医疗健康数据进行访问;其他医疗机构在对医疗健康数据进行访问需要获取Fi时,先对区块ID发出请求获取链上存储的Hashi,根据Hashi在分布式数据库中查找相应的内容,通过密钥keyi对文件进行解密获得相关的医疗健康数据信息。
医疗健康数据的访问权限控制具体如下:设计用户的访问控制策略acpi=(〈Ui,seqi〉,R,P),其中,Ui为医疗健康数据所有者的患者或医疗机构集合;seqi为医疗健康数据请求访问中的序列号;R为医疗健康数据访问的角色集合;P为不同用户访问医疗健康数据的权限属性。医疗健康数据访问控制策略acpi可以根据不同用户进行个性化访问控制。用户访问医疗健康数据时,先发送seqi,如果满足acpi中的用户属性权限P,则对请求进行描述:允许或拒绝。其中策略信息是不可更改的、可验证及可追溯的,在访问控制中通过智能合约对访问控制策略进行裁决。
2.4 用户端医疗健康数据利用流程设计与实现
医疗健康数据被存储在联盟区块链中之后,可以通过访问申请实现对医疗健康数据的利用,数据的利用流程如下。
患者或医疗机构提出医疗健康数据利用请求、执行智能合约、发送医疗健康数据信息、读取医疗健康数据信息,流程图如图3所示。
图3 联盟区块链中医疗健康数据信息资源利用流程
智能合约是医疗健康数据安全模型的关键组件之一,通过该合约实现医疗健康数据访问的业务逻辑,医疗健康数据安全模型的用户主要有两种身份,一是医疗机构,二是患者本人。医疗健康数据加密后存入分布式数据库,实现文件的分布式共享存储。患者或医疗机构(信息上传者)和其他医疗机构之间利用智能合约产生交易,交易信息验证之后存入区块链,这样可以确保信息的完整及不被篡改。智能合约在设计中基于 Truffle 框架开发,采用Solidity 语言进行编写,通过智能合约可以实现分类账事务,通过智能合约运行程序将不同事务追加到个人医疗健康数据信息中,更新分类账的状态,将分类账结果返回至基础服务平台,最后返回至用户。比如,患者可以通过向智能合约更新医疗健康数据信息、查询医疗健康数据信息。
(1) 提出医疗健康数据利用请求
有权利提出医疗健康数据利用请求的用户包含两类:一类是外部医疗机构通过API接入;另一类是授权节点A中的医疗机构或患者本人。如果是第一类用户的医疗机构提出信息利用请求时,先对医疗机构的身份进行验证,制定相应的访问控制策略seqi,如果允许则对医疗健康数据信息进行加密,形成密文Fi及对应的私钥发送至分布式存储数据库。
(2) 执行智能合约
分布式存储数据库验证授权节点A的信息后,生成一份智能合约,将智能合约利用设置的seqi、私钥对Fi进行解密,解密之后利用公钥对医疗健康数据信息进行再加密。
(3) 发送医疗健康数据信息
分布式存储数据库将加密之后的医疗健康数据信息文件返回至授权节点A。
(4) 读取医疗健康数据信息
当授权节点A收到加密的医疗健康数据之后,利用自身的私钥对数据信息进行解密之后发送至用户端,实现医疗健康数据的访问。
2.5 监控平台设计与实现
联盟链由不同的以太坊节点构成,这些节点是确保医疗健康数据安全的关键核心组件,因此,需要对以太坊节点状态进行监控,如果存在问题及时进行修复。分布式存储集群(ceph集群)是医疗健康数据存储的核心组件,也需要对分布式存储集群的状态信息进行监控。监控平台的主要功能包括获取以太坊节点信息及分布式存储集群信息,一旦发现处于非健康状态则向管理员发出报警信息,报警信息的发送通过邮件发送函数实现。医疗健康数据的状态监控平台通过librados与集群通信执行ceph命令。
3 性能评估与比较
3.1 实验环境
为了分析医疗健康数据安全模型的应用效果,构建了一个计算机仿真平台,该仿真平台共运行了12台计算机,计算机的操作系统为Linux,计算机内存为16 GB,CPU为i5-2 400,Linux系统版本是16.04。全部计算机安装在同一个局域网中,配置区块链的基础设施。
3.2 联盟区块链交易效率分析
在基于联盟区块链的医疗健康数据安全模型设计中,通过分布式存储系统存储医疗健康数据,封装数据之后得到Hashi,将Hashi存入区块链,每笔交易的数据大小为2 153 bit。
设计的访问控制策略对医疗健康数据访问过程进行模拟,分别模拟600、800、3 000、5 000个节点参与到联盟链中,模拟分析结果表明,随着联盟链的节点数目的增加,数据交易效率先增加后下降,当节点数目在1 000之内,交易效率急速增长;当节点在3 000、5 000时,交易效率有所下降,如图4所示。
图4 区块链交易效率
3.3 安全性分析
区块链的主要安全风险为遭遇攻击之后修改区块数据。本文设计的医疗健康数据安全模型采用分布式的存储系统,避免了单点攻击,数据存储过程中通过加密产生区块,防篡改的能力较强。用户只有通过访问控制策略的验证才能得到密钥解密文件,医疗健康数据文件以加密的方式将文件内容生成唯一的Hash 值,保证了内容不可篡改性,医疗健康数据的安全性较强。
4 总结
随着智慧医疗的发展,区块链技术的应用可以实现医疗数据的贡献及安全存储,利用区块链技术可以防止医疗健康数据被篡改,同时也降低了数据的管理成本。本文提出了基于联盟区块链的医疗健康数据安全模型,期望通过设计为医疗健康数据的网络安全提供帮助,设计中通过设计访问控制策略及智能合约确保信息的安全,最后对医疗健康数据安全模型的交易效率及安全性进行验证,结果表明,该模型的交易效率较高,安全性较强。虽然当前联盟区块链技术在医疗保健中的应用处于初级研究阶段,但是该技术的应用效果较好,为医疗保健行业的发展提供一种可行的方法。