基于区块链的个人电子健康记录细粒度访问控制框架设计
2024-12-12李宏志夏启寿马小琴
关键词:智能合约;访问控制;电子健康记录(EHRs) ;智慧康养;医疗信息系统
0 引言
通过身体可穿戴设备和无线传感器网络(WSNs) ,医疗信息系统可以获得精细化的个人电子健康记录(EHRs) 。在智慧康养的大背景下,EHRs中包含全面、多层次的健康监测信息,医生或专家可以分析患者的健康轨迹,做出科学和合理的诊断。EHRs普遍用于配药、疾病诊断、科学研究等多个医疗场景[1]。为了最大限度利用患者的EHRs,不同医疗机构之间EHRs交换和共享是不可避免的。虽然个人EHRs的收集、共享和分析对个人医疗和流行病预防至关重要,但是在数据存储和共享方面仍存在许多关于EHRs保密性和访问控制的问题[2]。数据所有者失去了对数据管理的权限,从而很难保护个人隐私。因此,研究如何实现个体中心的细粒度数据访问控制是有意义的。目前,基于公钥密码学的方案被广泛应用于访问控制和数据交换。椭圆曲线密码学(ECC) 被用在VANETs中来实现数据访问控制的保密性。非对称加密还与边缘计算相结合,实现跨域消息交换。密文策略属性加密(CP-ABE) [3]是实现细粒度访问控制最合适的方法,因为它允许数据所有者定义数据的访问规则。然而,CP-ABE存在一些固有缺点,例如依赖复杂的双线性映射运算以及生成大尺寸的密文。基于角色的访问控制(RBAC) [4]和基于属性的访问控制(ABAC) 模型[5]是最常用的模型,但是这些模型依赖于半信任的权限验证器,并且缺乏跟踪和审计恶意行为的能力。目前智能合约因具有透明性和不可变更性,为改善数据访问控制的可靠性提供了一种前景广阔的方法。
1 相关工作
区块链技术为构建安全、可靠的医疗信息系统提供了一种新颖的解决方案,可用于电子健康记录(EHRs) 的存储和安全共享。在文献[6]中,作者提出了一种去中心化的存储架构,该存储架构利用Hyperledger-fabric和可扩展的星际文件系统(IPFS) 来实现电子健康记录的可靠存储。但是该方案并未考虑到隐私保护,没有采用任何针对EHRs的隐私保护方法。为了提高医疗系统的安全性,Wang等人[7]提出了一种基于区块链的医疗系统,该系统与无线体域网络(WBAN) 相互作用,通过Zigbee网络将病人身上的传感器连接到医院的信息中心,进一步利用区块链作为数据传输和存储方法。为了解决个人EHRs共享服务中缺乏安全性和可靠性的问题,Zhang等人[8]提出了一种区块链辅助的数据共享框架(BHDSF) 以提供细粒度的访问控制和高效的密文检索。然而,该方案包含了大量的双线性映射操作,这将导致大量的计算资源消耗。Guo等人[9]提出了一种使用基于属性的访问控制(ABAC) 模型和图灵完备智能合约的细粒度数据访问控制方案。考虑到隐私保护,甘臣权等人[10]将同态加083f6049e6d94ddb5c4aecd886f8126d09ee16c6e08b9dc469617130a418b41d密、基于属性的访问控制(ABAC) 和智能合约结合起来,设计了一个保护隐私的访问控制模型。此外,文献[11]提出了一个基于智能合约的方案,该方案使用三种不同的访问控制模型整合为一个适用于物联网医疗系统的通用框架中,上述方案并未提供一个实际的方法来整合这三种访问控制方案。
2 系统的设计与实现
如图1所示,本文方案的系统架构主要包括几个组件,例如患者、医疗保健设备和云服务器。在这里,涉及的组件可以进一步分为三部分:数据提供者、基于区块链的访问控制单元和数据请求者,现对这些组件做如下简要介绍。
数据提供者主要由以下组成部分构成:1) 患者是电子健康记录(EHRs) 的真实拥有者,将被授予管理其医疗记录的权力。2) 智能医疗设备是可穿戴和便携式设备,它们被部署用来监测患者的生理信息。3) 在本文的方案中,医院不仅包括公立医院,还包括私立医疗机构。实际上,电子健康记录(EHRs) 是由医院自行维护与保存的。
数据存储和访问控制模块由以下部分构成:1) 云服务器可以分为由医疗机构维护私有云和由政府维护的公共云,云服务器被部署用来存储和管理来自数据提供者的加密电子健康记录(EHRs) 。2) 区块链可以用来将数据请求者的访问请求转换为区块链交易,便于对恶意行为进行审计,考虑到隐私保护,本文采用联盟区块链作为底层区块链平台。
数据请求者主要包括以下角色:1) 医疗机构可能需要从其他合作机构请求电子健康记录(EHRs) ,医疗保健机构通常需要从不同机构获取同一患者的医疗保健信息,以便于进行有效诊断。2) 药剂师和研究人员可能需要获取诊断和治疗记录以便进行药物选择和病理研究。
2.1 系统实现
在该方案中,设计了三种基于智能合约的方法来实现医疗系统中数据所有者和请求者之间的访问控制。这种访问控制范式基于RBAC,它能够准确地将用户角色与特定访问权限相关联。因此,本章从权限设置和访问匹配两个方面详细阐述这一过程。
1) 权限设置:为了提供灵活的数据访问控制,该方案允许数据所有者通过智能合约定义电子健康记录EHRs的访问规则。为了实现细粒度的隐私保护,本文将医疗记录R中的属性转换为JSON格式的元组(I,P,D),其中I是个人信息部分(如姓名、年龄、地址),P代表生理测量数据(如心率、脉搏、血压),D是诊断结果。该方案允许数据所有者对电子健康记录EHRs 中包含的个人信息进行加密,以保护隐私。需要注意的是,使用对称加密算法(即AES) 来加密医疗记录,即Ens(sk,R) → CT(R)。图2 展示了EHRs 的一般结构,包括明文和密文格式。此外,我们设计了一个智能合约角色权限管理合约RPMC(Roles PermissionManagement Contract,RPMC) 以实现对系统角色的细粒度权限设置,相应的处理流程可以描述为以下步骤:
(1) Ei (健康监测数据拥有者)构建权限设置请求PS(Ei ) = {FileId: < #FD > ,Rights:[ < Role ⇒ (i,p,d) >](1 ⋅⋅⋅n) },其中FileId 是医疗记录R 的唯一标识,Rights ∈ PS(Ei ) 代表系统角色的相应权限。此外,PS(Ei)可以格式化为JSON,i ∈ Rights(pord)表示角色Role对R中的I(PorD)部分的访问权限。
(2) PS(Ei)将作为输入参数提交给setFilePermission(⋅) 方法(算法1) ,在算法1 中,定义一个映射变量FilesRoleAccess =< FileId ⇒ (Role,Permission)(1 ⋅⋅⋅n) >来维护角色与权限之间的关系(第3行)。
(3) PS(Ei) 迭代输入数据集以初始化映射变量FilesRoleAccess且FilesRoleAccess将作为区块链交易被存储(第12-13行),从而可以对医疗记录R的访问权限进行细粒度设置。
2) 访问匹配:当Ei (电子健康记录请求者)提交Req = {Role,FileId,Sig,TS(now) }访问请求时,将调用权限验证程序AccessReq(Role,FileId) 来执行访问匹配操作,相应的工作流程如图3所示。该算法的后续步骤可以描述如下:
(1)RMC.VerifyRoleByPubk(Role,Pubk(Ei ) )被AccessReq(⋅)用以调用定义的智能合约ABI,使用公钥Pubk(Ei ) 进行查询定义的分布式账本RolesLedger,确认Ei 的系统角色是否为Role。(2) 在Req.{Role}被验证之后,为了获取Ei 访问权限AccessReq(⋅) 会调用方法RPMC.getFilePermission(⋅),以便访问带有FileId 标识的记录。(3) AccessReq(⋅)通过对象序列化方法,进一步将调用智能合约RPMC的结果转换为JSON格式的凭证Proof(access),并将它返回给调用者。
RPMC 使用方法getFilePermission(⋅) 提供权限查询服务。该方法接收FileId和Role作为输入参数。该方法调用权限分类账本FilesRoleAccess来获取对应的数据访问权限,具体过程如下所示:H(FileId) → Fid,FilesRoleAccess[Fid] → RoleAccess。之后,程序将进一步迭代RoleAccess来搜索与Role相对应的权限对象perm,然后将匹配的权限perm返回给方法调用者,将上述过程总结为算法2。
此外,RPMC.obtainFile(⋅)的设计目的是根据Ei 的访问权限来处理目标医疗记录。obtainFile(⋅) 接收Proof(access) 和FileId作为输入参数,以实现基于角色的访问控制,相应的程序可以描述为以下步骤:
(1) 验证Proof(access) = {FileId,Rights: < i,p,d > ,Sig }并提交给云服务器以获取目标记录CT(R)。(2) 迭代Rights ←< i,p,d > 来设置CT(R) 的可见性。若Rights.{I} == 0,使用哈希函数将CT(R) 中的单个字段设置为不可见。如果Rights.{I} == 1则表示CT(R) 中的生理信息可以向Ei 展示。需要注意的是,obtainFile(⋅)对加密的电子健康记录EHRs执行操作,确保个人隐私。(3) Ei 通过调用RPMC.obtainFile(⋅)获得处理后的EHR CT*(R),并通过安全通道从DO请求解密密钥sk- - ---DO。Ei解密CT*(R)中的字段作为Dec(sk- - ---DO,Section ∈ CT*(R) )。由于智能合约RPMC.obtainFile(⋅)对CT(R) 中Ei 无法访问的字段进行哈希处理,意味着原始密文被哈希值所替换。因此,这些字段在解密过程中无法被实体Ei 获取,保障了数据的机密性。
3 系统实现
测试方案依托于自建的集群设备,系统使用以太坊和Docker 2.0在两台台式电脑(Intel(R) Core(TM) i5-11300H 3.10 GHz,RAM 16 GB) 的基础上构建了一个包含10个对等节点的区块链网络。原型系统由一个物联网支持的健康感知模块、基于区块链的访问控制框架和云数据处理服务组成。此外,系统还提供了一个基于Node.js的区块链访问服务,为调用已部署的智能合约提供接口。系统利用传感器设备(即MAX30102心率信号传感器)来采集用户的心率数据,通过程序进行接收和处理,实现了设备终端与用户的交互作用(如图4所示)。
用户通过使用传感器生成个人的心率监测数据,数据采集完成后,通过数据串口通信,将Ardunio端的感知数据上传至上位机服务程序,确保了健康感知数据的质量与可用性。此外,本文将从云服务的部署、智能合约代理服务部署、数据权限控制模块以及数据访问共享模块阐述系统的功能实现。
1) 云服务的部署:云数据处理服务,旨在实现电子健康记录(EHRs) 及其相应访问权限文件的存储。在这个原型中,我们采用HTTP协议和第三方网络库来构建RESTful API。通过这些已部署的API,医疗记录和访问控制策略可以被同步到区块链并存储在云服务器上,图5展示了云服务的运行状态。
2) 合约代理服务:访问控制框架由智能合约(即RMC、RPMC) 和区块链代理服务组成。由于该以太坊框架中的智能合约只能由基于Web3.js的JavaScript 程序调用,系统进一步采用Web3.js智能合约通信库,调用部署的智能合约执行数据存储和检索服务。
3) 权限控制模块:一旦数据采集完成,系统能够通过上位机软件对数据进行确认和分析,并根据需要进行角色的权限设置(如图6所示),从而确保数据的安全性和受限访问。
4) 数据访问共享模块:智能合约RPMC由Solidity 语言编写被部署与以太坊(Ethereum) 中,执行数据访问权限的写入和读取操作(如图7所示)。系统通过Web浏览器进行健康数据进行访问。
作品使用8080端口作为通信端口,具体访问路径为:http://127.0.0.1:8080/obtainFile?role=?&fileid=?。role 标签的选取取决于访问角色,不同role标签将导向不同的数据内容,这表示用户可以根据具体需求,定制化地访问和获取健康数据的权限。fileid参数则对应于所需获取的数据记录ID。图8是相同数据ID下不同用户角色的数据访问结果,个人信息对主治医生进行公开,对药剂师公开诊断信息和生理监测数据,而对于外部研究人员只公开诊断信息。
通过上述访问控制方案,系统不仅能够确保数据的精确检索还能够对被访问数据的安全性进行有效控制。
4 结束语
本文设计了一个基于智能合约的访问控制方案以用于医疗信息系统中电子健康记录(EHRs) 。本文将ABAC模型与智能合约相结合,构建了基于属性机制的用户角色设置机制。其次,将基于RBAC的访问控制模型与脚本驱动的访问控制策略相结合,实现了以用户为中心的数据访问控制。最后,我们开发了基于访问控制框架的原型系统,并进一步评估该系统的功能和性能优势。