基于实用拜占庭容错机制的病历档案区块链模型研究

    林金瑞

    

    

    摘? 要:构建一个病历档案区块链模型,病案室节点通过实用拜占庭容错机制达成共识、生成新区块并将其添加到区块链的尾部。医疗机构的病案室可通过该模型将患者病历档案的HASH值、加密URI等基本信息组织到新区块中并永久保存在区块链上,其中HASH值可防止病历档案被篡改,加密URI可保证只有患者自己才能通过URI查看自己的病历档案。患者可通过患者节点查询自己的病历档案并验证其完整性。

    关键词:区块链;实用拜占庭容错;病历档案;密钥

    Abstract: A blockchain model of medical Archivesis constructed, and the nodes of medical archive rooms reach consensus and generate new blocks through the practical Byzantine fault tolerance mechanism. The medical archive rooms of medical institutions can organize HASH value and encrypted URI of patients' medical Archives into new blocks through this model and keep them permanently on the blockchain. HASH value can prevent medical Archives from being tampered with, and the encrypted URI can guarantee that only patients can view his medical archive through the URI. Patients can query their own medical archive through the patient node and verify its integrity.

    Keywords: Blockchain; Practical Byzantine fault tolerance; Medical archive; Key

    病歷档案属于专门档案,是医务人员在对患者进行问诊、检查、诊断、治疗、护理等医疗活动中形成的档案。医疗机构病案室保存大量的纸质病历档案和数字病历档案,患者在查询自己的档案时,可能存在两个问题:一是病案室出于安全考虑,基本不允许患者通过网络查询自己的档案;二是保存在病案室里的原始档案有可能被篡改。借助于区块链技术可以很好地解决上述两个问题。

    张超等[1]-[4]对面向医务人员的电子病历区块链模型和系统进行研究,但所提出方法不完全适用于病案室的档案管理工作;张培培等[5-6]提出基于区块链的电子健康档案管理系统框架,但并未对所采用的共识机制进行描述。本文拟在现有研究基础上,提出一个基于实用拜占庭容错机制的病历档案区块链模型。

    1 PBFT

    区块链的基本单位是区块,在区块链的末尾追加一个新区块之前,必须在区块链的各个节点之间达成共识,当有足够数量的节点认可该区块时,才能将其追加到区块链中。可以采用PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错)作为区块链的共识机制。PBFT由Castro M等[7]于1999年提出,允许某段时间内在具有n个节点的分布式系统中最多存在f个问题节点,n与f之间的关系为:n≥3f+1。

    PBFT主要通过预准备、准备、提交3个阶段来实现节点间的消息传递。工作过程如下:(1)客户端向主节点发送服务请求,请求中包含客户端希望各个节点要执行的操作;(2)主节点收到服务请求,验证无误后将其转换为预准备消息并广播给所有的备份节点;(3)每个备份节点收到预准备消息,验证无误后将其转换为准备消息并广播给所有节点;(4)每个节点收到2f+1条准备消息并验证无误后,将其转换为提交消息并广播给所有节点;(5)每个节点收到2f+1条提交消息并验证无误后,执行客户端请求中的操作,并将操作结果反馈给客户端;(6)客户端收到2f+1条反馈信息并验证无误后,认为服务请求得到正确执行,服务过程结束。如图1所示。

    2 病历档案区块链模型

    2.1 病历档案区块链结构

    将病历档案信息组织到区块链之前,必须事先确定哪些数据可以存储到病历档案区块链上,哪些数据应该存储到链下的适当位置。区块链是一个数据只进不出的链表,随着入链数据的增多,数据规模将会越来越大,因此,不宜将患者的全部病历档案都存放到区块链中。可采取链下存储和链上存储相结合的方式。链下存储是指将患者的病历档案存放在病案室的Web服务器中,病历档案的URI通过患者公钥进行加密;患者可以利用其私钥对加密后的URI进行解密,并通过该URI访问病历档案。链上存储是指将病历档案的HASH值、病历档案加密URI、患者公钥等信息与区块链管理数据一起存放到区块链的区块中。链下Web服务器中的病历档案、链上的区块共同构成一个完整的病历档案区块链。

    2.2 基于PBFT的区块生成

    病案室节点可将本机构的病历档案组织到区块链中,涉及两个关键步骤:提交交易和生成区块。

    2.1.1 提交交易。“交易”是区块链理论中的核心概念。其中的“交易”是指病案室将病历档案信息存入区块链的行为。病案室根据一定的HASH算法,为原生数字病历档案或数字化后的病历档案生成HASH,与患者公钥、病历档案加密URI一起,打包成一个交易,存入交易池。交易池中暂时存放了各个病案室已提交但尚未入块的所有交易。

    2.2.2 生成区块。生成区块的关键是确定由谁来主导区块的生成、所生成的区块如何在所有节点之间达成共识。本文采用PBFT机制作为共识机制,每次生成新区块之前,都按一定的算法从所有病案室节点中选择一个节点作为主节点,其它病案室节点作为备份节点,由主节点将交易池中的所有交易打包成一个新区块,提交给备份节点,通过PBFT的预准备、准备、提交3个阶段达成共识,确认新区块的合法性后将其添加到病历档案区块链的尾部。

    2.3 用户管理

    本文提出的病历档案区块链是一种联盟链,需要一个中心化的用户权限管理机构来增、删用户并进行权限管理,属于半中心化的联盟链。

    病历档案区块链的用户可分为卫生主管部门、医疗机构病案室、患者三种类型。卫生主管部门是病历档案区块链运行的监管部门,包括中央、省、市、县四级,上级部门决定哪些下级部门可以加入病历档案区块链并为其授予权限。各个卫生主管部门决定哪些直接管辖的医疗机构病案室可以加入区块链并为其授予权限。医疗机构病案室是经过上级卫生主管部门授权入链的病案室,可以为患者开设账户并进行授权。患者属于普通用户,经过医疗机构病案室的授权可以通过病历档案区块链查询自己的病历档案。

    2.4 数据安全机制

    病历档案记录了患者的就医信息,可以采用非对称加密、数字签名、密钥认证等技术来保证病历档案区块链中数据的机密性、完整性。每个用户都需要向卫生主管部门认可的证书颁发机构和密钥管理中心申请一对密钥:公钥和私钥,并获得一个数字证书,以便实现病历档案信息的非对称加密与解密、数字签名与验证。

    (1)区块头的数字签名与验证。病案室生成区块时,对区块头中的5个字段进行HASH运算,生成区块头HASH;然后利用区块生成者私钥对其进行加密,生成区块头数字签名并将其放置在区块体中。患者利用专用客户端获取区块,通过CA验证区块生成者身份,利用区块生成者公钥对区块头数字签名进行解密,得到區块头HASH;同时对区块头进行HASH运算,生成新的区块头HASH;比较两个区块头HASH,若一致则区块头中的数据无误。

    (2)交易的数字签名与验证。病案室生成区块时,首先对图2中的5个斜体字字段进行HASH运算,生成交易HASH,然后利用交易生成者私钥对其进行加密,生成交易数字签名。患者利用专用客户端获取区块,首先通过CA验证交易生成者身份,然后利用交易生成者公钥对交易数字签名进行解密,得到交易HASH;同时对5个斜体字字段进行HASH运算,生成新的交易HASH;比较两个交易HASH,若一致则交易中的数据无误。

    (3)病历档案URI的加密、解密及病历档案完整性验证。病案室通过HASH运算生成病历档案HASH、通过对病历档案的URI进行非对称加密生成病历档案加密URI,并将结果存入区块体中。患者利用专用客户端获取区块,利用自己的私钥对病历档案加密URI进行解密,进而通过解密后的URI获取自己的病历档案,进一步对其进行HASH运算,生成新的病历档案HASH,并与区块体中的病历档案HASH进行比较,若一致则病历档案完整。

    参考文献:

    [1]张超,李强,陈子豪等.Medical Chain:联盟式医疗区块链系统[J].自动化学报,2019,45(08):1495-1510.

    [2]肖奇颖.基于区块链的电子病历存储系统的设计与实现[D].大连:大连理工大学,2019.

    [3]董黛莹,汪学明.基于区块链的电子医疗记录共享研究[J].计算机技术与发展,2019,29(05):121-125.

    [4]张圣垚.基于区块链的电子病历系统的设计与实现[D].哈尔滨:哈尔滨工业大学,2018.

    [5]张培培,吕震宇,赵爽.基于区块链的电子健康档案管理系统设计[J].电脑编程技巧与维护,2020(03):115-116.

    [6]严梦,袁玉堂,刘智勇.基于区块链技术电子健康档案分布式存储方案的探讨[J].中国卫生信息管理杂志,2019,16(05):623-627.

    [7] Castro M, Liskov B. Practical Byzantine fault tolerance. [2020-3-10]. https://www.researchgate.net/publication/2437947_Practical_Byzantine_Fault_Tolerance.

    (作者单位:河南省图书馆 来稿日期:2020-06-01)