基于区块链的电子病历安全存储研究

2023-03-21 02:22丁杨军
计算机时代 2023年3期
关键词:病历共识区块

丁杨军,钱 钢

(南京审计大学信息工程学院,江苏 南京 211815)

0 引言

电子病历是医疗数据的重要组成部分,对于提高医疗水平发挥着重要作用。若能将各医院数据资源共享,实现数据资源间的互联互通,就能使患者、医院和科研人员及时掌握病历信息,帮助患者更好地了解自身健康情况,帮助医生给出更高质量的诊断结果,给科研人员提供更可靠的数据源从而促进药品研发。

电子病历包含了患者用户的病情以及联系方式等信息,如果病历信息被泄露,将会给患者造成严重困扰。传统数据库往往将患者个人信息和病历信息都存在本地数据库中,需要第三方机构对数据库中信息进行管理。同时由于缺少标准医疗体系,难以实现医院间的信息共享,造成了各医院之间“数据孤岛”问题,阻碍了医疗行业信息化发展。

区块链作为分布式存储数据库,具有去中心化、防篡改和安全性等优势,区块中数据公开透明,通过密码学技术将数据加密处理,区块链中每个节点通过共识算法达成一致,链中数据被篡改几乎不可能,这使得区块链技术非常适合用于存储电子病历信息,从而保护电子病历信息安全和患者用户个人隐私。

近年来,区块链在医学领域的研究受到广泛关注。贺智明提出通过可搜索加密技术用于实现密钥数据的加密和病历的密文搜索,并设置匿名性实现患者身份的隐私保护[1]。李艺昕提出了一种结合IPFS系统和区块链技术的分布式医疗数据链存储系统,该方案将病历索引存储在区块链中,并将病历存储在IPFS分布式存储系统中[2]。金琳等人针对患者隐私泄露和追责困难等问题,提出多权限属性隐藏电子病历共享方案,以期保护患者隐私,提高电子病历数据共享[3]。Priyanka Kamboj针对医疗数据共享难、病历信息数据被篡改或泄漏的问题,提出采用适当的访问控制策略来解决在访问过程中医疗隐私泄漏问题,并提出数据共享方案,更好地支持医学研究和精准医疗[4]。王晓丽利用区块链技术,建立电子病历自主管理与共享、网络问诊以及云药房的可信安全参考机制[5]。

本文利用区块链技术的去中心化、防篡改和可追溯等优势,针对电子病历存证系统存在的数据安全和“数据孤岛”问题,利用机器学习中的K-Means 聚类算法和逻辑回归算法对PBFT 共识算法加以改进。在此基础上,提出改进PBFT 算法的区块链电子病历安全存储方案,可以有效解决电子病历共享难的问题,充分保障电子病历信息的安全存储。

1 相关技术

1.1 区块链技术

区块链是通过一系列有序区块连接的分布式共享账本和数据库。区块链通过遵循将新区块认证到区块链中的协议来达成共识,区块链网络中没有固定中央节点,网络中所有节点都存储区块链信息的副本。区块链中的每个区块都由哈希值连接,每个区块包含前一个区块内容的哈希值,并且将不可逆哈希函数用作链接机制以验证前一个区块的完整性,此功能保证区块链技术具有防篡改和可追溯的特性[6]。区块主要由区块头和区块体两部分组成。区块链网络可根据网络范围分为公有链、私有链和联盟链[7]。公有链允许任何用户参与,并且没有身份认证和权限设置,链上交易是完全开放和透明的,所有用户都可以在链中获得完整账簿,典型的公有链平台包括比特币和以太坊。联盟链规定只有经批准的成员才能加入,并且通常由多个机构管理,处理速度比公有链更快。私有链具有集中的所有权和管理权,仅在组织内部使用。医疗场景中的区块链系统需要包含多个医疗机构,患者、医生和其他用户相互交互,并且病历数据只能在医疗体系内访问。因此,基于区块链的电子病历存证系统采用联盟链的形式。

1.2 共识算法

电子病历系统的要求和联盟链特性相契合,故选择基于联盟链Hyperledger Fabric 环境作为系统开发平台。正因为研究方案是基于联盟链的区块链,故选择实用拜占庭容错(PBFT)算法,PBFT 算法的共识过程分为三个阶段:预准备、准备和确认阶段。PBFT算法共识过程如图1所示。

图1 PBFT算法共识过程图

2 基于机器学习的拜占庭容错共识机制

PBFT 算法相较于拜占庭算法(BFT)在共识效率方面有一定提高,但仍存在一些问题。①PBFT 算法只适用于节点数目固定的联盟链,当节点数目发生变化时,只能重新启动系统才能适用于节点数目发生变化后的系统,不适用于动态变化的网络环境。②在实用拜占庭容错共识机制中,客户节点将请求消息发出后,在等待回复消息前一直处于空闲状态,不执行其他操作,将会造成时间资源浪费。

由上述分析可知,PBFT 共识机制为拜占庭容错设计了复杂的通信过程,也带来了较为严重的效率问题,而基于区块链的电子病历系统必须高效。因此,需要将共识机制的优化作为首要任务。针对上述问题,将PBFT共识机制做以下改进:

⑴全国各级医院之间形成一条联盟区块链,利用K-Means 聚类算法,当系统中节点数目发生变化时,不再进行整个网络初始化,即可将节点所属类型进行自动划分,从而保证系统动态性;

⑵当节点传输数据之后,利用逻辑回归算法对其所收到的结果预测,利用节点等待时间,根据预测结果提前做出预处理,节省时间成本,提高共识效率。

2.1 基于K-Means的动态分类

针对PBFT 算法缺乏动态性问题,采用K-Means算法,在共识过程开始前对节点进行类型初始划分,初始时聚类中心不是在样本节点中随机选择,而是通过监督者严格审查,选取公信度较高的节点为初始聚类中心点。当节点总数发生变化时,再次触发KMeans 算法对所有节点进行类型划分,从而无需重新启动程序,保证了系统能够正常运转。选取K-Means算法与区块链模型相结合主要有两方面原因,一是PBFT 共识算法需要将节点划分为监督节点、主节点和客户节点三种类型,当其中的节点离开或有新节点加入时,各类型节点数目将发生变化,需要对节点所属类型重新划分;二是K-Means 聚类算法是一种将数据对象根据属性划分成不同簇,使簇内对象相似度尽可能高,各簇之间相似度尽可能小的算法,算法简单容易理解,被广泛应用于用户分群中。

2.1.1 节点数目固定的节点类型划分

节点需要被划分成监督节点、主节点和客户节点三种类型,但在共识过程前,所有节点都为普通节点,没有任何职责。因此,需要通过K-Means 聚类算法来实现节点划分。

由于节点需要划分为三种不同类型,故聚类算法中K的取值应为3。对节点划分过程如下。

⑴所有节点集合为Sn,Sn={(x1,y1),(x2,y2)…(xn,yn)},其中n为节点总数,每个节点包含两个属性,即节点对所要成为的类型期望值x和节点自身所拥有的资源y,从Sn 中由监督者严格审查并选取公信度较高的三个节点作为三个簇的聚类中心。

⑵采用欧式距离求得其余各节点到三个聚类中心的距离。

⑶根据求得的距离,将各节点划分到距离本身最近的聚类中心所属类别中,并对每一类所有结点求均值,得到新的聚类中心。

⑷重复步骤⑵和⑶,若聚类中心节点不再发生变化,将停止迭代,完成节点类型划分;否则,将不断迭代。

2.1.2 节点数目变化后的节点类型划分

为保证系统具有动态性,利用K-Means 聚类算法完成初始节点的分类,并当节点总数发生变化时,再次启动K-Means 聚类算法,从而适应在共识过程中节点总数发生变化的系统网络,确保系统无需重启即可正常运行。当节点数目发生变化时,聚类中心K 的取值应变为4。因为在之前共识过程中,存在部分节点为恶意节点,恶意节点的不诚实行为将被记录到特征指标中,再次进行聚类时,这些节点会被划分为恶意节点,最终将变化后的节点集合划分为恶意节点、监督节点、主节点和客户节点。系统存在节点加入和节点离开两种情况。当新节点加入时,新节点提供真实信息后,将自己所要成为的类型期望值和自身资源以数据对(x,y)的形式加入到节点集合Sn 中,再次触发K-Means 聚类算法,按照节点类型的划分步骤完成节点类型的再划分。当节点离开时,将要离开的节点从集合Sn 中取出,再通过K-Means 算法对取出离开节点后的节点集合按照节点划分步骤来分类,最终完成节点类型划分。

2.2 基于逻辑回归的结果预测

在共识过程中,客户节点每次发出请求消息后,直到接收到监督消息这段时间一直处于空闲等待状态,节点自身资源未被充分利用,如图2所示。在客户节点发出请求消息后,可利用等待验证消息的时间,从而减少资源浪费。由于逻辑回归算法预测结果只有通过和不通过两种情况,故采用逻辑回归算法对验证通过概率加以预测,根据预测结果判断是否提前生产区块,从而减少区块的生产时间。当预测结果通过时,在未收到监督节点消息前提前生产区块,当收到Ns/2+1 个包含Y 的监督节点消息后,直接将提前生产的数据区块上链,从而完成数据区块的上链操作,如图3 所示。当预测结果不通过时,只能等待接收到Ns/2+1 个包含Y 的监督节点消息后才可上链,其自身资源只有在预测时被充分利用,如图4所示。

图2 PBFT算法中客户节点的时间使用划分

图3 PBFT改进算法预测通过时客户节点的时间使用划分

图4 PBFT改进算法预测不通过时客户节点的时间使用划分

2.3 区块链数据存储性能分析

⑴动态性分析

PBFT 算法本身不具有动态性,当参与共识过程的节点数目发生变化时,系统需重新启动,否则系统无法正常运行。针对此问题,提出利用K-Means 聚类算法来保证系统的动态性。在共识过程开始之前,将K-Means 算法启动,根据系统中节点特征对节点进行划分,将节点划分为主节点、客户节点和监督节点,不同节点对应不同的职责,共同完成共识过程。当系统中节点数目发生变化时,共识过程将暂停,再次执行K-Means 算法对所有节点再次划分,将节点划分完成后,即可进行共识过程,不再需要重新启动整个系统,只需要将共识过程暂停一下即可完成。

⑵安全性分析

在共识过程前,节点分类是按照节点的特征指标进行分类,其中K-Means 聚类算法中的K 值为3。当完成至少一次共识过程后,K 的取值将变为4。因此,当节点数目发生变化时,再对所有节点进行类型划分时,由于可能存在恶意节点,第四类为在共识过程中存在不诚实行为的节点或者为不满足其他类型分类依据的节点,这种节点将不可以参加接下来的共识过程。采用此方法,将系统中存在的恶意节点进行剔除,可以有效避免一些不安全因素,从而可保证系统的安全性。

在改进的实用拜占庭共识算法中,当客户节点将请求信息发送后,会执行逻辑回归算法预测是否请求通过。在预测过程中,每次的预测模型都会发生改变,随着共识次数增加,模型会逐渐适用于系统环境,预测结果会更准确,提前生产的数据区块也会更正确,可以在一定程度上避免共识过程中恶意节点对数据的篡改,从而保障数据安全性。

3 改进拜占庭容错算法的电子病历存证系统实现

本文设计并开发一种基于改进拜占庭容错算法的区块链电子病历存证系统,此系统可以解决数据安全和共享问题。系统前端采用Vue.js 框架并结合Element UI 组件,后端使用Spring Boot 框架,区块链网络部分使用Hyperledger Fabric 框架,使用Java语言完成了本系统设计与实现。该系统将用户分为四种角色,分别为患者、医生、科室管理员和医院管理员。患者具有挂号预约、预约信息查看以及病历信息查看等功能;医生具有对患者预约信息查看、诊断治疗和病历信息查看等功能;科室负责对医生信息管理;医院负责对科室信息管理。

本系统的总体架构体系为B/S 架构,将架构分为三层,分别为浏览器客户端、Web 服务端和资源服务器,系统总体架构图如图5所示。

图5 系统架构设计图

在基于区块链的电子医疗系统中,用户登录和注册功能需要通过智能合约来完成。在智能合约设计中,对用户登录模块函数和注册模块函数分别进行设计,以用户私钥和用户所属类型作为用户登录信息,实现了用户账号注册登陆。在登录本系统时,输入用户私钥、选择登录身份,将注册信息传递给后台服务器,通过web3.js库调用智能合约来判断用户是否存在且可用。若用户存在且可用,则登录成功;否则提示重新输入密钥。在用户注册时,由于医生、科室和医院角色的特殊性,不能随意注册,所以在智能合约中,规定医生由科室进行添加,科室账户由医院来添加。系统界面如图6所示。

图6 系统界面图

在系统登录界面以患者身份登录成功后,可用以下几个模块功能:医生预约、预约信息、病历信息。患者查看病历信息的主要过程如下:

⑴根据用户以太坊地址address 查询用户的所有病例信息,根据病例创建时间选择要查询的病例信息。

⑵根据病例的Hash 值向区块发起查询请求,返回该Hash值的交易详情。

⑶将返回交易详情的字段从二进制转换成字符串,显示内容为病例的详细信息。

在系统登录页面以医生身份进入系统后,可用预约信息、病历信息和个人信息三个功能模块。医生填写病历信息并存储在区块链中,这是基于区块链电子病历存证系统的重要技术,通过智能合约将电子病历保存在区块链上,其中患者病历和合约交易产生的Hash值都以字母的形式在区块链中保存。

智能合约的编写用Solidity语言来完成,通过哈希算法计算每个病历哈希值并通过AES 对称加密算法对要保存的数据进行加密,通过web3.js来调用智能合约将加密后的数据进行合约保存,然后对合约进行编译和部署,将加密数据存储在区块链中,防止数据在传输过程中泄露。病历信息的存储流程如图7所示。

图7 病历信息存储流程图

医生创建病历时通过密钥对病历信息进行加密,形成密文,经网络传输,密文发送给患者,患者通过密钥对密文进行解密从而得到病历信息。AES 加密算法流程如图8所示。

图8 AES对称加密流程

4 结束语

本文根据电子病历系统安全性能需求,并结合区块链技术防篡改、匿名性和安全性等优势,将区块链技术应用于电子病历存证系统的开发中。基于区块链的电子病历系统解决了传统电子病历系统的医疗数据安全与隐私保护问题。共识机制是保障区块链中各节点状态达成一致的重要环节,防止区块链中任何单个实体控制或破坏整个区块链系统,对区块链系统的正常运转起到了至关重要的作用。本文针对PBFT 共识算法存在的缺少动态性和共识效率低的问题,提出了基于机器学习的拜占庭容错共识机制。与传统电子病历系统相比,基于改进拜占庭容错算法的区块链电子病历系统使医疗数据更加安全可靠,方便患者用户跨医院看病,对于提高医疗服务质量具有重大现实意义。

猜你喜欢
病历共识区块
强迫症病历簿
共识 共进 共情 共学:让“沟通之花”绽放
区块链:一个改变未来的幽灵
论思想共识凝聚的文化向度
“大数的认识”的诊断病历
区块链:主要角色和衍生应用
商量出共识
区块链+媒体业的N种可能
读懂区块链
为何要公开全部病历?