一种基于区块链的医疗数据安全共享方法与流程

文档序号:17928149发布日期:2019-06-15 00:34阅读:304来源:国知局
一种基于区块链的医疗数据安全共享方法与流程

本发明涉及医疗数据共享技术领域,具体涉及到基于区块链的医疗数据安全共享方法。



背景技术:

随着医疗信息化的发展,各个医院都建立了各自的信息管理系统。然而,各医院间的数据共享一直是一个难题,主要原因是数据共享需要中心化的管理机构进行授权和管理,医院在使用数据信息过程中难以确保数据的安全,一旦管理机构被攻击,数据的可信度也将无法保证。

区块链技术是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式,在对等网络环境下,通过透明和可信规则,构建可追溯的块链式数据结构,实现和管理事务处理模式,具有去中心化、透明可信、防篡改和防伪造、高可靠的特征。

将区块链技术和医疗数据相结合,能够保证医疗数据的安全性和可信度,从而打破医疗数据的信息孤岛,实现医疗数据在不同医院间的安全共享。



技术实现要素:

针对上述问题,本发明提出了一种基于区块链的医疗数据安全共享方法,步骤为:

(一)节点和用户在医疗数据共享网络系统中注册,其中,每一个医院代表网络中的一个节点,使用本系统的患者和医院工作人员统称为用户,患者就医时所在的医院节点称为就医节点。节点注册生成的注册信息保存在节点自身的数据库中,用户在节点上注册,生成的注册信息保存在注册节点的数据库中;

其中注册过程为:节点和用户上传身份证明文件,系统检查这些文件是否有效,有效则注册成功。系统在客户端与节点和用户进行密钥协商生成公钥和私钥。系统对证明文件使用sha256算法进行加密生成公钥索引,一个公钥索引对应一个公钥。

(二)构建医疗数据区块结构模型,医疗数据区块结构为:

1、将电子病历单作为最小数据单元,每一个电子病历单都包含四个信息:患者公钥、元数据、数据摘要、数字签名。其中,数据摘要是医生通过客户端用sha256算法对患者就医产生的原始数据加密得到的hash值;元数据是医生用患者公钥对就医产生的原始数据加密后得到的密文;数字签名是患者用自身的私钥对数据摘要进行加密后得到的加密摘要;

2、将电子病历单组成区块,区块分为区块头和区块体,区块头包含结构信息,区块体包含着所有电子病历单数据。其中区块头结构如下:

hashprevblock:前一区块的256位的hash值;

merkleroot:基于区块中所有的电子病历单形成的256位hash值;

time:从1970-01-0100:00utc开始到现在,以秒为单位的当前时间戳;

blockno:区块号,压缩格式的当前区块的hash值,是区块的唯一标识。

(三)根据注册信息和数据区块结构模型,生成医疗数据共享网络,其步骤有:

1、构造区域私有链:

1)leader节点的选取:根据我国行政区的划分,每一个行政区作为一个区域,对区域内的医院按照国家评级标准进行评级,在最高级医院中随机选取一个节点,赋予它构造区块的权利,称为leader节点,其余节点称为member节点;

2)leader节点搜集电子病历单并检测其是否合法:患者就医后产生电子病历单,存储在就医节点数据库中,leader节点不断搜集所在区域的电子病历单,检测每个电子病历单是否合法:用患者公钥对加密摘要(即数字签名)解密,解密后得到的明文和数据摘要一样,则电子病历单合法,然后将合法的电子病历单暂时保存在自身数据库中;

3)leader节点构造区块:leader节点不断检查合法电子病历单的数量,检查周期为t,当电子病历单数量达到k时,就将这k个电子病历单组成一个区块,最终构成区域私有链;

2、构造一条联盟链来存储索引信息,过程如下:

1)各区域的leader节点收集该区域内的医院节点和用户的注册信息,包括公钥索引和公钥;

2)leader节点将这些注册信息打包成区块,同时为每一个注册用户创建一个索引表;索引表用来存储用户电子病历单的数据摘要以及电子病历单所属区块号,索引表的唯一标识是用户的公钥;

3)向其他leader节点广播打包好的区块以及所有用户的索引表,每一个leader节点备份所有信息。

4)当私有链中形成一个合法区块后,leader节点发出命令让区域内的member节点备份,同时遍历新生成的合法区块中所有的电子病历单,根据电子病历单中所包含的患者的公钥找到该患者的索引表,将该区块的区块号和电子病历单的数据摘要存在索引表内,然后leader节点将更新的索引表广播给其他leader节点进行更新。

(四)医生应诊想要调取患者以前的电子病历单时,系统通过验证节点身份,安全地找到并传回所需的电子病历单,具体步骤为:

1、首先患者提供身份证明文件,系统根据身份证明文件生成公钥索引,就医节点向当前链leader节点发出请求,请求中包含公钥索引;leader节点收到请求后验证就医节点身份,身份通过后用公钥索引在联盟链中找到患者公钥,并根据公钥找到患者的索引表传送给就医节点,医生根据索引表调取想要查看的电子病历单的索引数据,即区块号和数据摘要,并将索引数据返回给leader节点;

2、leader节点收到索引数据后,将请求转发给目标链的leader节点;

3、目标链leader节点收到请求后验证当前链leader节点身份;身份通过后,根据区块号和数据摘要找到医生所需电子病历单,并将电子病历单传给当前链leader节点。

验证节点身份的方法为:被请求节点收到请求后,先随机生成一段信息,返回给请求节点;请求节点收到该信息后,用自身私钥对信息加密,将密文和身份证明文件打包发送给被请求节点;被请求节点收到密文和请求节点的身份证明文件后,根据请求节点的身份证明文件生成公钥索引,在联盟链找到对应的公钥,对密文进行解密,若解密后的明文和该信息一致,则身份验证通过,接受请求。

(五)利用数字签名和代理重加密技术,在不泄露用户私钥的前提下,对传回的电子病历单进行验证,具体步骤为:

1、患者所在区域的leader节点收到电子病历单后,转发给患者当前就医节点,系统自动检查电子病历单的公钥、数据摘要是否和医生选取的患者索引表中数据摘要一样,如果不一样,数据不可信;否则进入步骤2;

2、系统自动用患者公钥对电子病历单的数字签名解密,将得到的明文和数据摘要比较,如果不一样,则数据不可信;否则进入步骤3;

3、系统使用代理重加密技术,利用患者的私钥和医生的公钥生成代理重加密密钥,用重加密密钥对电子病历单进行重加密,使得医生可以用自己的私钥解密元数据;

4、医生解密元数据得到数据明文后,用患者公钥对明文重新加密,将加密后得到的数据摘要和原数据摘要比较,如果一样,则电子病历单中的数据是可信的,医生可以根据该数据进一步应诊。

与现有技术相比,本方法的优点在于:

1)将区块链技术与医疗数据相结合,充分发挥区块链的去中心化,多方信任化的优势,将患者医疗数据共享,解决了患者在不同医院就医不方便的问题;

2)数字签名技术和代理重加密机制相结合,提高了数据的可信度。

附图说明

图1是本发明的流程图;

图2是本发明的区域内私有链构造流程图;

图3是本发明的医疗数据共享网络图。

具体实施方式

如图1所示,本发明一种基于区块链的医疗数据共享方法,步骤为:

(一)节点和用户在医疗数据共享网络系统中注册,其中,每一个医院代表网络中的一个节点,使用本系统的患者和医院工作人员统称为用户,患者就医时所在的医院节点称为就医节点。节点注册生成的注册信息保存在节点自身的数据库中,用户在节点上注册,生成的注册信息保存在注册节点的数据库中;

其中注册过程为:节点和用户上传身份证明文件,系统检查这些文件是否有效,有效则注册成功。系统在客户端与节点和用户进行密钥协商生成公钥和私钥。系统对证明文件使用sha256算法进行加密生成公钥索引,一个公钥索引对应一个公钥。

(二)构建医疗数据区块结构模型,医疗数据区块结构为:

1、将电子病历单作为最小数据单元,每一个电子病历单都包含四个信息:患者公钥、元数据、数据摘要、数字签名。其中,数据摘要是医生通过客户端用sha256算法对患者就医产生的原始数据加密得到的hash值;元数据是医生用患者公钥对就医产生的原始数据加密后得到的密文;数字签名是患者用自身的私钥对数据摘要进行加密后得到的加密摘要;

2、将电子病历单组成区块,区块分为区块头和区块体,区块头包含结构信息,区块体包含着所有电子病历单数据。其中区块头结构如下:

hashprevblock:前一区块的256位的hash值;

merkleroot:基于区块中所有的电子病历单形成的256位hash值;

time:从1970-01-0100:00utc开始到现在,以秒为单位的当前时间戳;

blockno:区块号,压缩格式的当前区块的hash值,是区块的唯一标识。

(三)如图3所示,根据注册信息和数据区块结构模型,生成医疗数据共享网络,其步骤有:

1、如图2所示,构造区域私有链:

1)leader节点的选取:根据我国行政区的划分,每一个行政区作为一个区域,对区域内的医院按照国家评级标准进行评级,在最高级医院中随机选取一个节点,赋予它构造区块的权利,称为leader节点,其余节点称为member节点;

2)leader节点搜集电子病历单并检测其是否合法:患者就医后产生电子病历单,存储在就医节点数据库中,leader节点不断搜集所在区域的电子病历单,检测每个电子病历单是否合法:用患者公钥对加密摘要(即数字签名)解密,解密后得到的明文和数据摘要一样,则电子病历单合法,然后将合法的电子病历单暂时保存在自身数据库中;

3)leader节点构造区块:leader节点不断检查合法电子病历单的数量,检查周期为1分钟,当电子病历单数量达到20时,就将这20个电子病历单组成一个区块,最终构成区域私有链;

2、构造一条联盟链来存储索引信息,过程如下:

1)各区域的leader节点收集该区域内的医院节点和用户的注册信息,包括公钥索引和公钥;

2)leader节点将这些注册信息打包成区块,同时为每一个注册用户创建一个索引表;索引表用来存储用户电子病历单的数据摘要以及电子病历单所属区块号,索引表的唯一标识是用户的公钥;

3)向其他leader节点广播打包好的区块以及所有用户的索引表,每一个leader节点备份所有信息。

4)当私有链中形成一个合法区块后,leader节点发出命令让区域内的member节点备份,同时遍历新生成的合法区块中所有的电子病历单,根据电子病历单中所包含的患者的公钥找到该患者的索引表,将该区块的区块号和电子病历单的数据摘要存在索引表内,然后leader节点将更新的索引表广播给其他leader节点进行更新。

(四)医生应诊想要调取患者以前的电子病历单时,系统通过验证节点身份,安全地找到并传回所需的电子病历单,具体步骤为:

1、首先患者提供身份证明文件,系统根据身份证明文件生成公钥索引,就医节点向当前链leader节点发出请求,请求中包含公钥索引;leader节点收到请求后验证就医节点身份,身份通过后用公钥索引在联盟链中找到患者公钥,并根据公钥找到患者的索引表传送给就医节点,医生根据索引表调取想要查看的电子病历单的索引数据,即区块号和数据摘要,并将索引数据返回给leader节点;

2、leader节点收到索引数据后,将请求转发给目标链的leader节点;

3、目标链leader节点收到请求后验证当前链leader节点身份;身份通过后,根据区块号和数据摘要找到医生所需电子病历单,并将电子病历单传给当前链leader节点。

验证节点身份的方法为:被请求节点收到请求后,先随机生成一段信息,返回给请求节点;请求节点收到该信息后,用自身私钥对信息加密,将密文和身份证明文件打包发送给被请求节点;被请求节点收到密文和请求节点的身份证明文件后,根据请求节点的身份证明文件生成公钥索引,在联盟链找到对应的公钥,对密文进行解密,若解密后的明文和该信息一致,则身份验证通过,接受请求。

(五)利用数字签名和代理重加密技术,在不泄露用户私钥的前提下,对传回的电子病历单进行验证,具体步骤为:

1、患者所在区域的leader节点收到电子病历单后,转发给患者当前就医节点,系统自动检查电子病历单的公钥、数据摘要是否和医生选取的患者索引表中数据摘要一样,如果不一样,数据不可信;否则进入步骤2;

2、系统自动用患者公钥对电子病历单的数字签名解密,将得到的明文和数据摘要比较,如果不一样,则数据不可信;否则进入步骤3;

3、系统使用代理重加密技术,利用患者的私钥和医生的公钥生成代理重加密密钥,用重加密密钥对电子病历单进行重加密,使得医生可以用自己的私钥解密元数据;

4、医生解密元数据得到数据明文后,用患者公钥对明文重新加密,将加密后得到的数据摘要和原数据摘要比较,如果一样,则电子病历单中的数据是可信的,医生可以根据该数据进一步应诊。

以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围之内,根据本发明技术方案即发明构思加以同等替换或改变,都应该覆盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1