拜亚萌,满君丰,张 宏
(1. 焦作大学信息工程学院,河南焦作454000; 2. 湖南工业大学计算机学院,湖南株洲412007)
(∗通信作者电子邮箱jzbym@163.com)
目前,移动医疗和在线医疗被认为是解决现有医疗资源分配不均的有效途径,在不同医疗机构或医患间共享电子健康记录能显著增加医学研究和临床诊断的有效性。但是,电子健康记录的共享是一个非常复杂的任务:一方面,医疗机构不愿意共享数据,因为电子健康记录包含病人的重要隐私数据,隐私泄露会给医疗机构带来严重的经济和法律后果;另一方面,电子健康记录作为医疗机构的宝贵资产,非授权的访问可能会造成自身竞争优势的降低。归其本质,阻碍电子健康记录共享的原因在于缺乏一种安全的技术方法来保证数据的安全,包括病人的隐私保护和数据的授权访问[1-2]。传统中心化存储和访问控制方法容易成为网络攻击者的感兴趣目标,中心化信任机制暴露出了很多问题。区块链作为一种去中心化的分布式账本技术,在数据安全性方面具有较大优势[3]。本文提出一种基于区块链的电子健康记录安全存储模型,旨在提出一种通用的电子健康记录存储基础架构,为后续的机构间共享数据提供支撑。
自2008 年中本聪首次提出比特币以来,区块链作为比特币的核心技术,经过十多年的发展逐步为人们所熟知,研究者们也开始探索区块链在除数字货币外其他领域中的应用。近年来,区块链在医疗卫生领域的应用,已经证明了其在保护病人隐私[4]、确保数据授权访问[5]的优势。William 等[6]介绍了区块链技术在卫生领域的应用场景,提出医疗卫生区块链系统要注重病人驱动的可互操作性;Koshechkin等[7]介绍了区块链技术在俄罗斯政府中的公共卫生保健系统中的应用,但两者均并未提出具体的数据存储和共享模型。Gaby等[8]提出使用区块链技术来实施电子健康记录的访问控制和互操作模型,并详细分析了模型如何在隐私保护和数据交互需求中达到有效折中,但模型缺乏相应的实验论证。Peng 等[9]提出利用区块链对临床诊断数据进行安全和精确共享,方法使用快速卫生保健可操作性资源(Fast Health Interoperable Resources,FHIR)标准进行数据一致性存储,但不能适用于我国医疗信息系统的现状。Alex等[10]提出了一个基于区块链的个人健康记录实施模型,并对该模型进行了性能分析,实验结果表明模型在数据一致性存储、响应时间和CPU 利用率等上具有优势,但该模型来源于欧美国家提出的OmniPHR 体系标准,同样不适合于在我国的应用。Chen 等[11]提出了一种基于区块链的电子健康记录可搜索加密方法,方法详细介绍了如何在电子健康记录区块链中安全获取数据,并尽可能降低隐私泄露风险;但该方法的前提是电子健康记录区块链已经存在,缺乏对其基础结构的描述。Shaimaa等[12]提出基于物联网电子健康记录系统的多层区块链框架,框架通过物联网设备采集健康数据并自动存储于区块链系统中,并设计了数据共享的智能合约;但框架中沿用了传统区块链网络中的共识算法,在运行效率上存在不足。Gao 等[13]提出结合区块链和云服务的电子健康数据防篡改系统,系统通过将电子健康数据云中的数据存储在区块链中,实现了数据的不可篡改;但区块链中的共识机制选取不够高效,另外基于中心信任的云数据来源具有较大的安全隐患。
综上所述,区块链应用于医疗卫生领域是可行的,但在存储结构通用性、共识算法执行效率、实验论证上存在着不足。针对上述问题,本文提出一种基于区块链的电子健康记录安全存储模型,利用区块链在隐私保护和数据防篡改上的优势安全存储电子健康记录。根据目前我国主要医疗机构中存储电子健康记录的方式,设计新的电子健康记录区块链存储结构,解决现有存储结构无法通用的问题;设计相对应的区块数据入链算法,优化了区块链工作流程,减少了点到点(Peer-to-Peer,P2P)网络中信息传播量;设计基于随机数选举的区块链节点间的共识算法,克服现有共识算法在执行效率上的不足。
1.1.1 区块链基础架构
区块链实际上并不是一种全新的技术,而是分布式数据存储、去中心化的点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式。区块链采用链式结构存储数据,除创始区块外,区块链中的每一个区块都有着前驱和后继区块,并且这些相互联系的区块有着强的依赖关系,一旦某个区块的值发生变化,都会造成整个区块链发生改变,加上每个区块中的时间戳,确保了区块链中的数据是可溯源和不可篡改的。图1给出了比特币中区块链的存储结构[14]。
1.1.2 区块链工作原理
区块链的工作原理可用比特币网络中新区块的入链过程进行说明,如图2 所示。新区块的入链分为四个过程:交易产生及传播、区块生成、区块验证和区块入链。假设网络中有4个节点A、B、C、D,TAB表示节点A 和B 之间的交易,BL1为新产生的区块,BC1为新的区块链。
1)交易产生及传播。
图2(a)左图表示交易的产生,生成新的交易TAB,图2(a)右图表示交易的传播,将TAB通过四个节点形成的P2P 网络进行传播,每个节点均会收到此交易信息。
2)区块生成。
图2(b)表示区块生成,四个节点通过约定好的共识机制,如工作量证明(Proof of Work,PoW)机制竞争记账权,假设C 节点获得矿工身份,则负责产生新的区块BL1,并将此区块签名和盖上时间戳。
3)区块验证。
图2(c)表示区块验证,矿工节点C将新产生的区块BL1通过P2P 网络传播给网络所有节点,其他节点对此区块的有效性进行验证,如交易TAB是否合法有效。
4)区块入链。
图2(d)表示区块入链,网络中节点通过新区块的验证,并将新产生的区块增加到区块链中,每个节点拥有当前时刻区块链的最新状态BC1。
图1 比特币网络中的区块存储结构Fig. 1 Block storage structure in Bitcoin network
图2 比特币网络中新区块入链过程Fig. 2 Process of a new block addition in Bitcoin network
在图1 所示的区块结构中,区块头中实际上定义了网络节点间的共识机制,如比特币系统中定义的PoW 机制,每个节点尝试寻找一个“幸运数”,使得将当前区块(区块链中的最后一个区块)的哈希值、最新产生的交易、随机数三部分组合起来,通过SHA256算法计算出散列值X(256位),如果X 满足目标哈希中的条件(比如前20 位均为0),那么该节点获得创建新区块的权利。事实上,这种共识机制消耗了大量的计算资源,新区块入链的时间效率较低,比特币每10 min增加一个新的交易区块,并不适合于实际的电子健康记录区块链应用。因此,需要设计新的共识机制来确保区块入链的时间效率。另外,在图1 所示的区块体中,比特币是将所有交易的详细记录保存在区块中,这种方法对数据量较大的电子健康记录显然是不合适的,因为医学诊断图像需要大量的存储空间。因此,需要对现有区块体结构进行改进。
在图2 所示的区块链工作原理中,除了上述的矿工节点竞争所存在的低效率问题外,交易传播和区块验证过程均需要在全网进行广播,如果网络中的节点数较多,将会占用大量的网络带宽。另外,参与本次交易的节点仍然有机会成为矿工,这就造成了自己对自己参与的交易进行验证,这极大增加了数据造假的风险。因此,在实际的电子健康记录区块链中需要设计新的区块入链过程,保证数据的安全性和入链效率。
本文设计的电子健康记录区块链存储结构参照图1 进行改进,其中,对区块头和区块体中的交易进行说明,如图3 所示。区块头中保留了原来的时间戳和Merkle 根,增加了前驱区块的哈希值,用作验证目的。增加了参与交易节点的签名集合,每个参与交易的节点需对交易进行签名验证,用来确认交易的有效性。将原来区块头中用于工作量证明的随机数和目标哈希替换为现有的随机数集合,用来产生下一个区块入链时的矿工节点,具体机制将在2.3 节中介绍。为了节省区块链占用的存储空间,区块体中不再保存电子健康记录的详细信息,事实上,目前的医疗机构更希望将完整的记录保存在自己的服务器中,便于实施控制和进行必要的审计。区块体中具体交易由资源Hash、交易发起者签名、资源统一资源定位(Uniform Resource Locator,URL)和可搜索加密索引四部分组成。资源Hash 即当前交易中电子健康记录的Hash 值,用来保证记录的完整性;交易发起者签名用来验证本次交易的真实性;资源URL 用来指向电子健康记录的访问地址;可搜索加密索引为后续安全检索指定的交易提供准备,此部分内容和数据共享的智能合约[15]将在后续工作中展开研究,在本文中不作详细介绍。
图3 电子健康记录区块链存储结构Fig. 3 Blockchain storage structure of electronic health records
优化后的区块入链过程如图4 所示。一个区块从产生到成功入链经历四个过程:
1)交易分发阶段。参与交易的节点A和C将交易TAC发给矿工节点B(矿工节点的产生将在2.3 节中介绍),B 负责收集指定时间范围内所有其他节点发过来的交易,为了降低潜在的风险,矿工节点并不处理涉及自己的交易。
2)区块验证阶段。B 负责将收集到的交易形成新的区块b,并将该区块发回给参与交易的节点A和C,请求验证交易的有效性。
3)签名区块返回阶段。A 和C 对区块b 进行验证,无误则进行签名,选择一个随机数rA和rC与b一起发回给B(随机数rA和rC用于2.3节中的矿工选举)。
4)区块链同步阶段。B 将区块加入到区块链中,得到新的区块链BC并将其发给所有其他节点同步。
区块入链算法如下所示:
图4 优化的区块入链过程Fig. 4 Optimized process of block addition
本文设计的共识算法核心是选举矿工节点,在每一个区块入链开始前进行选举,意味着每次区块入链时矿工节点是已知的,这样做的好处是交易能有目的性地发给矿工节点而不是整个网络,在进行区块验证时也不需要所有非参与交易的节点验证,验证通过后,由矿工节点统一发布当前最新的区块链状态进行全网统一。下一轮矿工节点的选举由本轮区块中参与交易的节点提供的随机数产生,基于随机数选举的共识算法由两个部分组成:矿工节点产生和基于信用的激励机制。
2.3.1 矿工节点产生
在2.2 节介绍的签名区块返回阶段,参与交易的节点会提供下一次区块入链时用来选举矿工节点的随机数,这些随机数与当前区块的Hash值一起采用SHA256算法得到一个新的Hash 值h,对于所有区块链中的节点,求节点公钥与h 的差的绝对值,其绝对值最小对应的节点就是矿工节点。这样做的目的是确保任何一个节点成为矿工节点的概率为1/N,并且防止单一节点决定矿工节点的情况。矿工节点选举算法如下所示。
2.3.2 基于信用的激励机制
在比特币网络中,成为矿工的节点将获得比特币的奖励,用以激励矿工节点参与记账作出的贡献。在本文设计的电子健康记录区块链中,矿工节点在区块入链过程中承担了大量的工作,为了激励矿工节点,设计基于信用的激励机制,其基本思路是初始化时网络中所有节点的信用值相等,当每次一个节点成为矿工节点并完成区块入链后对其信用值进行调整,矿工节点信用值计算公式[16]如下所示:
其中:CV 为矿工节点信用值;TN 为矿工节点产生正确区块的次数;FN 为矿工节点产生错误区块的次数。从式(1)可以看出:矿工节点一旦产生错误区块将会降低其信用值,并且当产生错误区块的次数大于正确区块时,信用值将减为0;而当没有错误区块产生时,矿工节点的信用值将恒定增加。节点的信用值将记录在电子健康记录区块链系统中,作为对节点进行奖励的依据。
节点信用值的更新和维护策略如下:
1)对于有N 个节点的区块链,构建一个一维信用值数组CV=[cv1,cv2,…,cvn],cvi为第i 个节点的信用值,所有节点的信用值初值为0。
2)在矿工节点选举结束后,矿工节点将区块中待验证的交易发给参与节点进行验证,各参与节点计算矿工节点处理与本节点相关的交易获得的信用值,更新矿工节点的信用值。
3)矿工节点将所有参与节点计算的信用值求和,获得自己的信用值,更新信用值数组。
4)下一轮矿工节点产生后,检查上一个区块中总的交易数,重新计算上一轮矿工节点应得的信用值,无误则将信用值数组(有误则以新计算的信用值为准)和本轮区块一起存入区块链系统中。为了防止矿工节点修改自己的信用值,增加了下一轮矿工节点对上一轮矿工节点信用值的验证操作。
为了验证本文提出模型的可行性,利用Hyperledger Fabric1.4 工具进行电子健康记录联盟链的部署,并生成创始区块,在本地局域网中部署6 个节点,用来模拟联盟链中的用户,每个节点提供电子健康记录的访问URL,电子健康记录按照产生时间生成独立的URL。实验开始时,在6 个节点均部署事先生成的20 个电子健康记录,每个节点每10 s 随机发起一次交易(将一个电子健康记录添加到区块链中)。实验中相关环境和主要参数如表1所示。
表1 实验相关环境和参数配置Tab. 1 Experimental environment and parameter configuration
3.2.1 正确性分析
表2 给出了6 个节点在区块链系统运行20 min 和30 min时成为矿工节点的次数和数据成功更新的数据,从表2 中可以看出,每个节点请求的数据更新服务都已成功执行,并且随着区块链运行时间的增长,每个节点成为矿工节点的概率趋向相等。这也充分说明了本文提出模型的正确性及共识机制在公平公正上的有效性。
表2 正确性实验结果Tab. 2 Experimental results of correctness
3.2.2 安全性分析
本文提出的电子健康记录存储模型基于区块链技术,相比传统的中心化存储具有明显优势,去中心化的存储降低了黑客攻击的风险,也避免了单一节点失效带来的系统数据丢失的隐患。另外,区块链中存储的数据仅仅是电子健康记录的URL,并不存储完整的记录,在隐私保护上具有优势。在用户真正需要访问完整的记录时(存储在机构服务器中的记录用拥有者的公钥进行加密存储),存储在机构中的记录需要用户提供相应的私钥进行验证,保证了数据访问的可追溯性,另外可以采用相关的智能合约对数据访问进行进一步控制。最后,区块头中存储了电子健康记录的Hash 值,用来验证电子健康记录的内容是否受到篡改,另外区块链本身的不可篡改性也确保了区块中存储的电子健康记录对应的URL 的真实性。综上,所提出的安全存储模型在抵抗黑客攻击、单点失效、隐私保护和不可篡改性上具有优势。
1)针对矿工节点伪造交易的攻击。
首先,矿工节点因为具有生成区块的权利,极有可能伪造交易来获取特定的利益,由于所有的交易均要发给参与交易的节点进行验证,否则无法写入到区块中。假设矿工节点伪造2 笔交易,涉及到4 个参与节点,则矿工节点需要伪造4 个节点的私钥来对交易进行验证,在现有的公私钥密码体制下是非常困难的。
2)针对矿工节点伪造信用值的攻击。
为了防止矿工节点伪造自己的信用值,采取两种方案确保信用值的真实性:a)矿工节点的信用值由所有参与节点计算;b)下一轮矿工节点对上一轮矿工节点信用值进行再次核验,确保所有节点的信用值真实性。
3.2.3 存储空间分析
传统的比特币网络将所有交易存储在区块中,造成以太坊的存储空间呈指数级增长,虽然联盟链中用户数量和交易数均有效,但存储海量的医学诊断图像数据对区块链系统的容量仍是巨大的挑战;另外,在P2P网络中进行区块链同步所需的网络带宽和处理时间也是影响模型实际应用的关键因素。本文提出的安全存储模型仅存储每次交易包含的电子健康记录的URL,不会显著增加区块链的存储容量。
3.2.4 运行时间分析
模型的运行时间主要由共识机制决定,为了比较本文提出的共识机制在时间效率上的优势,将其与传统的PoW 和权益证明(Proof of Stake,PoS)机制进行对比,对比结果如图5所示。PoW 中设置的随机数解为5 个0,PoS 中设置的节点股权占比与节点信用值进行关联,区块链运行时间设置为30 min。从图5 中可以看出,三种机制在网络中交易数量增加时,所需的执行时间都呈上升趋势,其中,PoW 所需的执行时间最多,其原因是所有节点均需竞争矿工身份,并且随着随机数难度增大,时间会显著提升。PoS 相比PoW,大大减少了矿工节点产生的时间,通过股权占比决定矿工节点,所需的执行时间次之,但由于每次区块入链时的矿工节点不确定,造成P2P网络中所传输的数据量相比本文方案大得多,本文方案优化了工作量证明所需的竞争,并且增加了交易收集和验证的针对性,所需的执行时间最少。
图5 共识机制时间效率对比Fig. 5 Time efficiency comparison of consensus mechanisms
电子健康记录共享是移动医疗和在线医疗的关键技术,本文针对电子健康记录安全存储问题进行了深入研究,提出了基于区块链的电子健康记录存储模型;设计了新的电子健康记录区块链存储结构,降低了区块链中数据存储的容量和增强了模型使用的通用性;设计了基于随机数选举的共识机制,提高了区块入链的时间效率;在此基础上,优化了区块入链的算法,保证了数据操作的安全性和时间效率。如何在本文提出的数据存储模型基础上实施安全有效的数据共享,设计相应的数据访问控制智能合约将是下一步研究的主要工作。