基于集成信用度评估智能合约的安全数据共享模型

2021-04-24 12:33张乐君刘智栋
自动化学报 2021年3期
关键词:请求者信用度访问控制

张乐君 刘智栋 谢 国 薛 霄

云辅助电子病历(Electronic health record,EHR) 系统的广泛部署显示出在管理医疗机构和EHR 方面的巨大好处[1],世界各地纷纷采用新技术来管理EHR.然而除了巨大的优势之外,EHR 在云上的存储还面临着安全问题[2-3]:1)未经患者授权的第三方可能会恶意访问EHR,这对于EHR共享中数据的完整性、隐私性和安全性存在不利影响[4].2)患者很难跟踪和管理存储在云中的EHR.

针对这些问题,许多研究[5-8]提出了用于云服务器的存储、管理和共享技术.这些研究使用不同的密码学技术和云技术设计EHR 共享访问控制模型以实现隐私保护和访问控制.尽管这些研究高度重视数据安全和隐私保护,但系统仍然存在患者密钥管理困难、EHR 共享透明度不高以及密钥存在泄露风险等问题.

随着区块链技术的发展,其特有的去中心化、可追溯性和隐私性推动了信息互联网向价值互联网的转变[9].越来越多的学者开始研究基于区块链的EHR 共享模型.MedRec[10]是一种使用区块链技术处理EHR 的新型的、分布式的管理系统.MedRec将模块化设计与医疗提供商现有的本地数据存储解决方案集成在一起.薛腾飞等[11]提出基于改进的DPOS(Delegated proof of stake)共识的区块链医疗共享模型,详细介绍了模型的组件以及实现原理.基于以太坊区块链的Ancile[12]利用智能合约增强访问控制和数据混淆.文中详细描述了患者、EHR 提供商和第三方之间的交互过程.MedChain[13]与 Ancile 类似,通过精心设计智能合约实现访问控制,同时,MedChain 加入了激励机制,给出了计算EHR质量的方法.张超等[14]提出基于PBFT (Practical Byzantine fault tolerance)的联盟式医疗区块链系统,具有较好的适用性.文献[10-14]为现有分散在各个机构的医疗数据提供基于区块链的访问控制模型,但分散在各个医疗服务商手中的数据仍然存在被破坏的风险.

另一部分研究人员将云服务和区块链技术相结合来实现EHR 的共享.Xia 等[15]提出BBDS(Blockchain-based data sharing)模型,该模型利用用户的身份和成员加密密钥来验证用户是否可以从共享池中获取数据.但是,对于成功加入共享组的成员没有其他限制.Tang 等[16]着重研究了基于区块链的云存储模式下EHR 共享的身份验证问题,提出了多方授权的身份签名模型,并具有很好的抗共谋能力.Liu 等[17]设计了基于CP-ABE (Ciphertext-policy attribute based encryption)的访问控制机制和内容提取签名模型,在数据共享方面提供了强大的隐私保护.此外,通过在智能合约中预设访问权限确保数据被安全共享.文献[15-17]采用云服务和区块链技术相结合的新模式,但它们的访问控制策略较单一,无法满足患者对EHR 动态访问控制的需求.

现有的EHR 共享研究中缺乏信用度评估机制,本文采用云服务和区块链技术相结合的模式,在区块链智能合约中加入用户信用度评估机制,为患者提供动态可调节的访问控制策略.本文的主要贡献有以下几个方面:

1) 提出了一种信用度评估机制,将信用度评估机制集成到智能合约访问控制中,在患者缺乏对第三方信任的环境中为患者提供信用度参考.通过智能合约,患者可以动态地调节访问控制策略.

2) 提出将云存储和基于权威证明(Proof of authority,PoA)共识机制的区块链相结合的框架.云存储用于存储加密的EHR,PoA 共识区块链保留加密EHR 的索引.我们对交易处理速度进行了统计分析,证明了所提模型的可行性.

3) 基于以太坊Go Ethereum 开发了所提模型的系统,建立了一个私有链测试网络.我们分析了系统中可能存在的恶意攻击和共谋行为,并建立了基于信用度的奖惩机制和监督机制.实验结果表明我们的机制能有效阻止恶意攻击行为并及时发现共谋行为.最后,理论分析表明,我们的模型较现有一些通过智能合约实现EHR 访问控制的模型更简单,交易反馈延时更少.

1 预备知识

本节将介绍本文用到的智能合约技术和密码学技术.

1.1 智能合约

智能合约是存储在区块链上自动运行的脚本.1994 年Nick Szabo 提出相关概念,将智能合约定义为一种通过代码程序自动执行的交易协议.满足合约条款的交易相关者,无需第三方管理者的监督就可自动执行交易.由于缺乏可支撑合约自动执行的平台和相关技术,直到区块链技术的出现,才使得智能合约这项技术得到应用.随着区块链的不断发展,以太坊的出现[18]首次将区块链和智能合约结合,通过以太坊虚拟机(Ethereum virtual machine,EVM)来处理区块链上的交易.区块链确保了智能合约的用户在可信的环境下遵循合约规则自动执行合约代码,同时利用区块链的透明性和可追溯性,跟踪合约状态.智能合约的可扩展性、自动化为EHR共享提供了便利.利用区块链中存储的医疗数据、支持外部数据的预言机[19]以及信用度机制,患者可以在智能合约中设置信用度阈值和其他访问控制参数,实现复杂的访问控制策略.

智能合约预言机机制[19]验证外部数据.在智能合约中使用合约自带的函数ecrecover 可以验证外部数据写入者的签名,该函数需要数据的Hash 值和签名对{v,r,s}.所以对数据的签名需要遵循ecrecover 函数的规则.实际上,数据需要经过两次sha256的Hash 操作后才能进行签名,签名结果中32 字节的r和s来自椭圆曲线数字签名算法(Elliptic curve digital signature algorithm,ECDSA)的输出值,一个字节的v则是用于恢复签名结果的标识,以太坊中为27 或28.

在智能合约中,数据主要分为Storage 和Memory两种类型,Storage 类型数据也可称为合约的状态变量,会永久存储在区块链中;Memory 则是临时变量,交易处理完成后该类型变量会被清空.所以在编写合约时,需要为永久存储的数据定义Storage 类型变量,而不仅仅是处理交易逻辑.

2 基于集成信用度评估智能合约的安全数据共享模型

本节设计了一种基于智能合约的电子病历共享访问控制模型(EHR smart contract access control model),为方便描述,将其简称为EHR-SCAC.下面分别从模型的整体框架和工作流程进行介绍.

2.1 EHR-SCAC 系统模型

如图1 所示,EHR-SCAC 分为三层架构,由数据获取层、数据存储层和数据共享层组成.

图1 EHR-SCAC 整体架构Fig.1 EHR-SCAC overall framework

2.1.1 数据获取层

在本层中,EHR 由医生创建并发送给医院,医院整理格式后,由医生签名发送给患者.签名的目的是确保 EHR 的完整性.EHR 的共享权和所有权属于患者.同时,机构在研究患者 EHR 时,可能发现EHR 存在误诊,所以机构可以共享他们的研究报告.

2.1.2 数据存储层

数据存储层的主要功能是存储加密的EHR 和给区块链提供EHR 的存储索引url,数据存储层由以下两部分组成.

1) 云存储.存储患者加密的EHR,给出EHR的存储索引url.

2) PoA 区块链.存储EHR 的索引url并实现EHR 共享.患者通过区块链中智能合约预先定义访问控制策略,确保EHR 的安全共享,任何人对EHR的访问都将保存在区块链网络中.同时,身份管理中心 (Identity management center,IDM)和审计节点充当了链外数据进入区块链的媒介,起到身份认证、审计和监督的作用.

2.1.3 数据共享层

在本层中,已身份认证过的医疗工作者、机构可以访问患者的EHR.方便医生了解患者的病历史和给予患者更好的治疗,同时也为医疗机构提供了重要的研究资料.

2.2 EHR-SCAC 工作流程

如图1 所示,模型的工作流程大致如下:

① 用户身份登记:用户将真实身份ID和身份证明VID发送给IDM,IDM 验证用户身份.同时,IDM 会调用智能合约对用户进行成员登记,用户以太坊公钥pk即为成员公钥.将必要的用户信息存储在区块链中.如果用户是机构,则机构会成为审计节点.

② 身份认证后的患者,可以调用智能合约设置EHR 的全局访问控制策略.

③ EHR 的生成:该过程参与的实体有医生、医院和患者.为了确保EHR 的完整性,在医院将EHR发给患者前,医生需要对EHR 的Hash 值ehr_hash使用以太坊私钥进行签名,记为sigd.如果EHR 存在问题,则医疗纠纷的责任最终由医生承担,这也符合实际情况.医院将EHR、医生的签名sigd发给患者.

④ 患者从医院获取到EHR 和sigd后,患者的本地客户端随机生成一个对称密钥smk加密EHR,得到[EHR]smk.

⑤ 患者将[EHR]smk和ehr_hash上传到云端,云端返回EHR 的存储索引url.

⑥ 患者使用以太坊公钥pkp加密smk获得,然后调用智能合约的共享EHR 接口函数,将EHR 的索引等信息存入区块链.智能合约检测患者的身份注册信息,验证通过后合约会记录url与患者以太坊公钥pkp的对应关系,将必要的数据存储到合约相关的变量中.同时,合约会为该EHR初始化一个白名单并将患者加入其中.随后,患者便可调用合约给白名单添加成员,方便非机构用户如医生的访问.

⑦ 机构在研究EHR 时可能发现患者的EHR存在误诊,机构可以更正EHR,将研究报告证明发布到云端.云端返回研究报告的索引r_url.机构调用智能合约共享研究报告r_url.与预言机机制相同,合约会触发投票事件通知审计节点根据研究报告索引在链下对报告进行审核.审计节点会调用智能合约改变研究报告投票状态变量.当投票数超过设定的阈值,机构便成功共享研究报告,这有利于机构信用度的增加.同时,机构链下通知IDM,IDM联系患者重新共享更正后的EHR.该过程患者重复②③④操作,EHR 的医疗纠纷也由原先的医生负责变为机构负责,且需要将更正后的EHR 的索引记录到错误EHR 记录的结构体变量中.

⑧ 如⑥中所述,若请求者在EHR 的白名单中,则可以直接查询到解密密钥.否则,请求者需要调用智能合约获取EHR 的请求权限,智能合约会触发事件随机选择一个审计节点对请求者发起工作量证明 (Proof of work,PoW)难度挑战(第2.3.2 节中将详细介绍).完成PoW 挑战后,请求者获得审计节点的签名sigA,然后请求者再次调用智能合约请求EHR 的解密密钥.智能合约根据患者制定的访问控制策略验证请求者.通过访问控制策略后,请求者会被加入患者EHR 的白名单中,同时合约触发代理重加密事件,IDM 通知患者生成重加密密钥[K]p-r并发送给云端,云端执行代理重加密任务,生成并发给请求者,请求者可以调用智能合约将解密密钥存入智能合约中.

2.3 EHR-SCAC 的信用度评估机制

本节提出一种信用度评估方法,同时设计信用度奖惩机制和监督机制用来维护系统的稳定和安全.

2.3.1 EHR-SCAC 信用度评估

机构的信用度并不能从单一特性进行评判,本文采用模糊层次分析法(Fuzzy analytic hierarchy process,FAHP)[20-21]对用户的信用度进行评判.先将用户的信用度分为n个特性,再把每个特性分为若干个特征类型,将模糊的用户行为信用评估问题转化为简单的、明确的信用特征加权求和问题.

FAHP 解决问题的步骤分为4 步:1) 分析问题,将问题划分为多层次结构;2)以上一级要素为准,将同一层次的特征两两比较,获得初始判断矩阵;3)将初始判断矩阵转换为模糊判断一致矩阵,通过计算确定各特征以及各特性的权重;4)根据规范化的特征值和权重计算出信用度.

步骤 1.如图2 所示,将信用度分为3 层.为了不给区块链造成负担,需要建立易检测、易收集的用户行为特征方案.在处理合约交易时会更新机构的这些行为特征(在第2.4 节中将作详细说明).

图2 用户行为特征分类Fig.2 Classification of user behavior characteristics

步骤 2.建立行为特征矩阵C=[cij]n×m,n为特性个数,m为特性中行为特征个数的最大值,不足的项用零表示.由于各特征的值区别较大,我们需要对矩阵C进行归一化处理,将值规范为[0,1]的特征矩阵E=[eij]n×m. 将同一特性下的特征的重要性两两比较获得初始判断矩阵EQ=[eqij]v×v,v是某个特性下行为特征的个数,如服务特性P下v=5.

以服务特性为例,其特征矩阵Ep=[e1,e2,···,ev],利用式(1)获得初始判断矩阵EQ.

然后,通过式(2)将初始判断矩阵转化为模糊判断一致矩阵Q=[qij]v×v.

步骤 3.使用式(3)计算服务特性下各特征的权重向量

从而得到wP=[wp1,wp2,wp3,wp4,wp5].对于其他特性,同样利用式(1)~ (3)可得可靠特性R的特征权重向量wR=[wr1,wr2],安全特性S的特征权重向量wS=[ws1,ws2],以及特性权重向量wF=[wf1,wf2,wf3].

步骤 4.根据式(4)计算机构的信用度.

即正面信用度为正面行为特征与其权重乘积的和,负面信用度为负面行为特征与其权重乘积的和.但是,对于图2 中s1 和s2 这类违规行为的计算需要进行改进.对这两个行为目的是监督,同时考虑到机构的误操作会导致此类事件发生,所以机构如果存在s1 和s2 违规时,系统应能及时对机构的信用度进行惩罚,并且机构的信用度随时间流逝能够逐渐恢复.所以,eij为s1 和s2 时,这两个行为特征的计算需乘以一个系数ε,ε如式(6)所示.nij表示机构做出负面行为特征eij的次数.bn表示当前区块号,bnij表示负面行为特征eij最后一次发生时所在的区块号.

2.3.2 信用度奖惩机制

比特币和以太坊采用PoW 共识机制来维护区块链的安全,使得恶意节点很难成功攻击区块链,除非恶意节点掌握了全网51%的算力.虽然PoW机制对于交易验证速度要求极高的场景应用十分有限,但其思想值得学习[22].

第2.3.1 节给出了计算信用度的方法.从第2.3.1节中的图2 可以看到两种恶意行为,在介绍信用度奖惩机制前首先了解两种恶意行为.

1)未经授权访问行为

机构请求EHR 时,url对应的患者pkp可能会被未通过患者访问控制策略的机构替换,选择访问控制策略要求低的患者,从而绕过EHR 持有者的访问控制策略.与前面类似,未通过患者访问控制策略的机构利用其他高信用度节点的成员公钥pk来发送合约交易,以此达到访问患者EHR 的目的.

2)伪造签名行为

机构请求EHR 的解密密钥前需要获取审计节点的签名sigA,所以机构可能伪造签名直接申请解密密钥.

在我们的系统中,患者共享EHR 时,智能合约会记录url与患者的成员公钥pk的关系.IDM 在用户通过系统身份认证后调用智能合约将以太坊地址和成员公钥pk的对应关系写入了区块链.同时,智能合约的ecrecover 函数可以验证签名.所以,以上行为可以得到阻止.但系统无法阻止恶意节点发送大量此类的无效交易,如果不能有效制约,将会对系统的稳定性造成影响.考虑到比特币和以太坊通过PoW 机制使得恶意节点的攻击成本很高.所以本文设计了基于信用度的PoW 奖惩机制.在我们的系统中,智能合约记录了机构的信用度属性(即图2 中的行为特征),一旦检测到违规行为,违规行为会被保存到信用度属性中,机构的信用度也随之下降.式(7)给出了PoW 难度与信用度的关系

其中,Diff表示机构请求EHR 的难度.λ是一个固定值,其应该根据机构的普遍算力进行设置,实际应用中可以参考比特币的算力更新方法,根据出块时间即算力调整λ.本文测试了实验设备的PoW难度与PoW 算法执行时间,根据测试结果将λ设为8,使机构违规情况下PoW 算法执行时间能够达到惩罚目的,同时保证正常信用度机构PoW 算法执行时间很低.

下面介绍机构请求EHR 前解决PoW 难题的过程.如图3 所示,1) 机构调用智能合约请求索引url;2) 智能合约触发事件随机选举一个审计节点处理机构的请求;3) 审计节点根据机构信用度将挑战难度Diff和时间戳timestamp发送给机构;4) 机构根据式(8)算出能够使得out小于Diff的nonce,并将out和nonce发送给审计节点;5) 审计节点对pk和url进行签名,并将签名sigA发送给机构,机构再次调用智能合约请求EHR 的解密密钥,智能合约会检测审计节点的签名是否有效.

通过审计节点发起PoW 挑战是一个可行办法,但审计节点不是IDM 这样的可信政府机构.所以,如果攻击者买通了大部分的审计节点,则攻击者可以直接拿到审计节点的签名sigA,这样依旧可以短时间发起大量攻击.为了遏止审计节点的共谋行为,需要在智能合约中建立检测共谋行为的机制,及时通知IDM 采取相应的惩罚.注意到如果攻击者连续攻击,式(6)中nij就会起到关键作用,攻击者的信用度会快速下降,所以攻击者的挑战难度会随之升高.定义

图3 机构解决PoW 难题的过程Fig.3 The process of the institution solving the PoW problem

其中,ng表示攻击的区块间隔,由当前区块号bn减去上一次攻击发生的区块号bnij获得,可知连续攻击时ng很小.表示未违规情况下系统中信用度最低的用户对应的难度,表示最后一次违规时机构信用度对应的PoW 难度,η则表示审计节点共谋的概率.当η超过了合约中设定的阈值,就会触发事件通知IDM 对共谋双方采取相应的惩罚.

以上是本文通过信用度奖惩机制实现对机构恶意行为的约束,从而保护系统稳定性的方法.

2.4 EHR-SCAC 的智能合约访问控制

在我们的系统中,智能合约负责所有交易的逻辑处理.客户端利用Web3.js[23]使患者、机构可以调用智能合约接口函数.图4 展示了合约中数据结构和函数的设计.图中展示了变量在合约中的实际存储类型、合约的内部函数和对外的接口函数以及系统中涉及的结构体.函数的参数图中未给出,在后文算法描述过程中将给出函数的参数.其中,“+”表示外部可调用,“-”表示只能是合约内部可调用,“:”后表示数据存储类型,“→”表示映射关系.

从图4 中可以看到智能合约分为三个部分:智能合约状态变量、智能合约事件以及智能合约函数.其中智能合约状态变量提供了永久性存储在区块链中的数据,为用户身份验证、患者共享EHR、机构共享研究报告、机构信用度计算提供数据支撑;智能合约事件用于通知链外世界,实现链外信息与区块链信息的交互;智能合约函数分为内部函数和接口函数,内部函数用于合约内部事务的处理,接口函数供用户调用.表1 给出了这三个部分变量和函数的具体作用.

以上是EHR-SCAC 系统合约的设计,接下来将对系统中节点注册、患者共享EHR、机构共享研究报告、患者设置访问控制参数、机构请求EHR 和信用度特征收集这六个过程进行详细描述.

2.4.1 节点注册

算法1 由用户和IDM 执行,输入的参数有用户的真实身份ID,用户身份证明信息VID,用户以太坊地址Eth_address,用户以太坊公钥pk.该算法用于登记用户,同时将必要的用户信息存入区块链中.

算法 1.节点注册算法

用户注册了以太坊账号后可以向IDM 申请将信息登记到区块链中.在该过程中,IDM 验证用户身份信息,身份验证成功后IDM 调用合约接口node_register()将用户的信息写入区块链.如果用户是机构,智能合约会初始化机构的信用度属性,属性信息被记录到变量pk_credit[pk]中,然后将机构信息更新到审计节点变量audit_node中.节点注册使得用户成为EHR-SCAC 系统的一员,为患者共享EHR和机构请求患者共享的EHR 做准备.

2.4.2 访问控制参数设置

算法2 由患者执行,输入的参数有患者成员公钥pkp,患者以太坊地址Eth_address,访问控制参数集attr.交易成功返回交易ID:Policy_TXID,失败则返回faile.

患者成功加入区块链后可以调用合约设置访问控制参数,患者调用合约函数set_strategy()创建交易Policy_TXID,合约通过verify_pk()验证患者是否完成节点注册,验证后将患者访问控制策略attr存入合约变量strategy[pk]指向的结构体pk_strategy中.

算法 2.访问控制参数设置算法

2.4.3 EHR 的共享

算法3 由患者执行,输入的参数有EHR 的索引url,url的hash 值url_hash,患者成员公钥pkp,患者以太坊地址Eth_address,患者加密EHR 的对称密钥,EHR 的hash 值ehr_hash,医院的成员公钥pkh,医生的签名sigd.交易成功返回交易ID:EHR_TXID,失败则返回faile.

算法 3.EHR 共享算法

图4 EHR-SCAC 的智能合约实现Fig.4 Smart contract implementation of EHR-SCAC

表1 EHR-SCAC 智能合约变量和函数说明Table 1 Description of EHR-SCAC smart contract variables and functions

该过程的执行前提是患者已经完成第2.2 节工作流程的②③两步,得到必要的参数后患者调用合约函数contribute_EHR()创建共享EHR 合约交易EHR_TXID.合约内部执行函数verify_pk()验证患者注册身份,验证通过后,EHR 的相关信息存入EHR_share[url_hash]变量中,该变量指向EHR_sharing结构体,同时合约为该EHR 初始化白名单url_whitelist[url_hash],将患者的信息以及解密密钥存入该白名单所指向的结构体pk_whitelist中.最后,合约调用内部函数set_url_pk()将患者与EHR 的关系记录到变量url_pk[url_hash]中.

2.4.4 研究报告的共享

算法4 由机构和审核节点执行,输入的参数有研究报告索引r_url,索引的hash 值r_hash,机构成员公钥pkI,机构的以太坊地址Eth_addressI,审核节点成员资格公钥pkA,审核节点的以太坊地址Eth_addressA.交易成功返回此次交易ID:Research_TXID;失败返回faile.

算法 4.研究报告共享算法

患者看病时无法避免误诊情况,机构在发现患者共享的EHR 存在误诊后,可以进行修改,并将研究报告发送到云端供审计节点审查.随后机构调用合约函数contribute_research() 共享研究报告.contribute_research()会触发事件audit_vote(),监听该事件的审计节点链下审核研究报告.审计节点pkA审核通过后调用合约函数agree_research()来增加con_research[r_hash].voteCount的值,重复投票不会增加投票数.Research_TXID中的voteCount需在规定时间set_timestamp内超过预先设定的阈值set_threshold.同时链下机构将修改的EHR 和对EHR 的hash 值的签名sigI发送给IDM,IDM 转发给患者,患者重复算法3 的过程重新共享更正后的EHR,并通过调用correct_new_url()函数将更正后的url存入错误EHR 的记录中.

2.4.5 EHR 的访问

算法5 由请求患者EHR 的机构执行.输入的参数有患者的成员资格公钥pkp,EHR 索引hash值url_hash,请求者成员资格公钥pkr,请求者的以太坊地址Eth_address,审计节点的签名sigA,审计节点的成员资格公钥pkA.交易成功返回交易ID:Requet_TXID,失败则根据失败类型返回illegal_request,forged,faile.

如果机构在患者EHR 白名单中,则可以直接查询到存储的解密密钥.否则机构执行该算法前需要获取申请该EHR 的权限,所以机构需要先调用函数request_EHR()获取审计节点的签名sigA.拿到签名sigA后机构调用合约函数request_smk_pk(),智能合约执行函数verify_pk(),verify_url(),verify_request()验证请求者是否存在违规行为,其中第一个验证函数检测s1 违规行为,其余两个验证函数检测s2 违规行为.一旦验证出请求者存在违规,就会计算审计节点的共谋概率η,η超过阈值则会触发事件collusion()通知IDM,IDM 链下给与共谋双方惩罚.通过验证以及患者访问控制策略strategy[pkp]后,合约触发事件store_smk_pk(),IDM通知患者生成重加密密钥[K]p-r,患者将重加密密钥发送到云端,云端执行代理重加密后将解密密钥发给请求者.

算法 5.EHR 访问算法

2.4.6 信用度属性收集

算法6 由区块链中的共识节点执行.输入的参数有新区块new_blockId,机构成员公钥pkI和区块中的合约交易TXID.该算法应该包含在算法3~ 5 中,为了方便说明,将所有涉及改变机构信用度属性的交易集中到一起说明.

为了给患者营造可信任的EHR 共享环境,在智能合约中我们提供了机构信用度属性的实时更新和计算.共识节点生成新区块时,智能合约在处理这些交易时会自动更新交易中相关机构的信用度属性信息,即图2 中的行为特征的值.

算法 6.信用度属性收集算法

3 理论与实验分析

本节对系统的模型特点、安全性、用户信用度以及区块链性能进行理论和实验分析.我们在配置为I7-4720HQ 处理器、12 GB 内存、1 TB 机械硬盘的Windows 10 系统下进行实验.我们给出了EHRSCAC 模型系统的实现,如图5 所示.区块链维护方面使用geth@1.8.3-stable,智能合约的部署使用truffle@v5.1.18.使用Web3.js@1.2.6 开发与区块链交互的前端.数据分析采用MATLAB R2018a.

图5 EHR-SCAC 系统整体框架Fig.5 EHR-SCAC system overall framework

通过Go Ethereum[24]我们建立了PoA[25]私有区块链.Web 客户端通过Web3.js 发送交易并与用Solidity[26]编写的智能合约进行交互.

3.1 系统模型特点

与其他访问控制模型相比,EHR-SCAC 具有一定的优势.EHR-SCAC 采用模糊层次分析法,提供具有参考性的信用度计算方法.且机构信用度属性的动态变化使得机构的信用度具有实时性,较文献[15]的组织成员访问控制和文献[17]中属性访问控制更具动态性.患者可以根据合约中提供的参数,动态地修改访问控制策略,较文献[12-13]的访问控制更加灵活,智能合约的设计更轻量.表2展示了EHR-SCAC 模型与其他文献模型的对比.

表2 EHR-SCAC 与其他模型功能特性的对比Table 2 Comparison of the functional characteristics of EHR-SCAC and other models

3.2 安全性分析

1) 隐私性.本文利用密码学技术和区块链技术,保证共享数据的隐私性,患者EHR 中的真实身份可以采用成员公钥pk,保证了用户的匿名性,并且不会对监管造成困扰.

2) 不可伪造性.在患者将EHR 上传到云服务器之前,医生需要签署EHR.当患者将EHR 上传到云时,必须将医生的签名一起上传.这不仅划定了医疗纠纷责任归属,还确保了电子病历的完整性.

3) 透明性.请求者对EHR 的访问会记录在区块链中.请求EHR 交易中记录了请求者的各项属性和请求时间,这些属性无论是通过区块链获取还是通过预言机模式获取都是公开可信的.患者可以在区块链中查看获取请求权限的访问者以及他们访问的时间,保证了系统的透明性.

4) 稳定性.我们采用PoA 共识机制,只有少数节点需要对区块进行验证,随着区块链规模的扩大,这项措施可以降低区块的挖掘成本.同时,我们的信用度奖惩机制和监督机制有效地阻止了节点的无效交易攻击行为,维护了区块链的稳定性.

3.3 用户信用度分析

第2.3.1 节中介绍了信用度的计算方法,使用FAHP 对行为特征的重要性程度进行划分,最后计算出各部分的特征权重和特性权重.其中:功能特性P的重要性划分为p2 >p1=p3 >p4=p5,可靠特性R的重要性划分为r1=r2,安全特性的重要性划分为s1 >s2,特性的重要性划分为S>R>P.通过MATLAB 计算出各特性下特征的权重以及特性的权重分别为

得到权重数据后,就可以在智能合约写出信用度计算公式.需要注意的是目前以太坊的智能合约还不支持浮点数运算,所以在实际设计中需要将这些权重扩大为整数.为了模拟现实应用场景,我们预先配置了两家三级、两家二级和两家一级共6 个授权的医院节点和一个IDM 节点,其中三个级别医院正面行为特征数值变化速度约为3:2:1,负面行为特征数值变化约为1:2:3.通过Web3.js编写的客户端模拟用户发送合约交易到区块链的过程,在共识节点处理这些合约交易时,智能合约会记录各医院信用度属性的变化.

当PoA 私有链运行一段时间后,可以看到三种级别的医院信用度的波动范围,如图6 所示,三个级别医院信用度最终分别在0.94,0.86 和0.73 左右波动.高等级的机构拥有雄厚的资金和人力去研究医学难题,随着机构等级的降低,机构信用度下降,这不仅符合实验结果,也符合实际情况.

图6 三种信用度变化趋势Fig.6 Three levels of credit changes

图7 违规行为s1 信用度变化Fig.7 Changes in credit rating of s1 violation

待系统运行稳定后,对三个级别的医院分别执行违规行为s1 操作,信用度变化如图7 所示,其中三甲医院一开始信用度处于恒定不变的原因是该医院此阶段信用度属性是系统中最高的,由于要对信用度属性进行归一化操作(系统中信用属性最低值均为0),所以三甲医院各项信用度属性归一化后的值保持不变.然后对三个级别的医院执行违规行为s2 操作,信用度变化如图8 所示.从这两张图可以看出,机构在做出违规行为s1 操作后,信用度有明显的下降,而做出违规行为s2 操作后,机构信用度的下降不是很明显.随着时间的推移,三个级别医院的信用度逐渐恢复到原来的水平.违规行为s2 操作对医院信用度惩罚不是很明显,在合约中我们记录了医院违规行为的次数,如式(6)中所示,如果医院再进行一次违规行为s2 操作,其信用度将快速下降.

为了避免s1,s2 行为攻击占用系统资源,我们将信用度和请求EHR 的难度相关联.医院请求EHR时必须解决PoW 难题.经过测试,难度变化与完成PoW 难题的时间如图9 所示.根据图9 的结果,当医院进行违规操作时,医院执行PoW 算法的时间将迅速上升.

图8 违规行为s2 信用度变化Fig.8 Changes in credit rating of s2 violation

图9 PoW 难度变化与运行时间Fig.9 PoW difficulty change and running time

图10 基于信用度的PoW 难度Fig.10 PoW difficulty based on credit

图10 展示了三个等级医院正常信用度、s1 违规一次、s2 违规一次以及s2 违规两次情况下请求EHR 交易的PoW 难度对应图.可以看到当恶意攻击发生时,医院请求EHR 的PoW 难度增加.

图11 当机构与审计节点共谋攻击系统时,共谋概率 η 的变化Fig.11 Changes in the collusion probability η when the organization and the audit node collude to attack the system

在第2.3.2 节中,我们提到机构与审计节点存在共谋行为并设计了监测共谋行为的方法.图11展示了机构与审计节点共谋攻击系统时,系统监测到的共谋概率η的变化.从图11 中可以看出,s1 共谋攻击更容易被监测到.图11(b)中高信用度的节点第2 次执行s2 攻击后,信用度惩罚不够明显.但是,高信用度节点不断发起s2 攻击后,系统监测到的共谋概率持续上升.所以,我们制定的共谋监测制度可以很好地维护系统稳定.

3.4 区块链性能评估

我们在PoA 私有链中设置了6 个节点,以1个节点挖矿,其余5 个节点不停地发送交易.我们分别测试了发送共享EHR 和请求EHR 交易的处理时间.同时对PoA 私有链出块时间进行了更改,通过出块时间与区块中交易数的比值来观察交易的处理速度.从表3 中可以看出交易平均处理时间在一定的范围内波动,出块速度对于交易处理速度没有影响.由于出块速度的快慢会影响用户客户端的响应速度,所以更快的出块速度有利于及时向用户反馈交易结果.

表3 不同出块时间区块吞吐量和交易处理速度Table 3 Block throughput and transaction processing speed at different block generation times

本文是通过智能合约实现访问控制,而文献[14,16]主要使用密码学技术实现访问控制,与本文差异较大,性能上不适合进行比较.文献[12-13]与本文均采用智能合约进行访问控制的设计.文献[12-13]通过触发合约事件通知代理重加密节点,使用同态代理重加密技术为请求者重新加密解密EHR 的对称密钥[smk]pk.不同于文献[12-13],本文由患者生成重加密密钥[K]p-r,再由云端链下为请求者重新加密解密EHR 的对称密钥.文献[13]与文献[12]的智能合约类似,所以我们仅讨论文献[12]中的交易流程.为了更好地研究本文智能合约访问控制性能,我们将节点登记、患者共享EHR 和请求者请求EHR三个主要交易的交易反馈时延与文献[12]进行比较.

为了方便比较,将区块生成时间、同态代理重加密时间、本文的代理重加密时间分别记为TBT,THT,TRT.对文献[12]和本文节点登记、患者共享EHR和请求者请求EHR 的分析如下:

1) 文献[12]中节点注册首先由患者所在的医疗提供商调用智能合约创建节点登记交易,然后智能合约触发事件让投票节点验证新节点,投票节点创建交易写入验证结果,最后智能合约触发事件通知患者节点,患者节点创建交易写入是否同意加入区块链,所以文献[12]的节点登记至少需要3TBT的时间.本文节点登记需要用户调用合约创建一笔交易,即至少需要TBT的时间.

2) 文献[12]中患者共享EHR 时,由医疗提供商调用智能合约创建交易将EHR 相关信息写入区块链.本文患者共享EHR 时,由患者调用智能合约创建交易将EHR 相关信息写入区块链中,与文献[12]类似,均至少需要TBT的时间.

3) 文献[12]中请求者请求患者EHR 时,首先需要患者EHR 所在的医疗服务商调用智能合约创建交易验证请求者身份.然后触发合约事件,代理重加密节点需要响应事件创建交易将各自加密的大素数p发送给智能合约,智能合约利用同态加密方法将这些大素数p生成主密钥master-p,并用请求者的公钥加密,同时智能合约使用同态加密方法用master-p加密smk(用于加密EHR 的对称密钥)并发送给代理节点.代理节点最后解密自己的部分,然后再创建交易发送给智能合约将部分解密后的盲信息写入区块链,最后由智能合约利用同态法计算出解密EHR 的对称密钥.所以在文献[12]中请求EHR 的交易的反馈时延至少需要3TBT+THT.在本文中,请求者需要调用两次合约,一个是获取审计节点的签名sigA,另一个是请求EHR 的解密密钥,最终由云端执行代理重加密将解密密钥发给请求者.

由上述分析可知,本文基于智能合约的EHR共享访问控制模型较文献[12-13]交易反馈延时更具优势,具体比较如表4 所示.

表4 区块链交易时延比较Table 4 Blockchain transaction delay comparison

4 结束语

在当今信息爆炸的时代,数据共享对各行各业的发展起着至关重要的作用.本文就医疗行业中EHR 共享的特点和安全隐私问题,提出一种基于集成信用度评估智能合约的安全数据共享访问控制模型.我们将信用度评估和访问控制策略集成到智能合约中,并提出信用度奖惩机制和共谋监督机制来维护区块链的安全和稳定.同时,借助区块链所具有的不可篡改、可追溯、透明性的特点,为患者提供了安全可信的EHR 共享平台.实验表明,该模型可以有效地分析用户行为,动态更新用户的信用度属性和动态控制EHR 的访问.未来我们将研究多链合作,将信用度、审计、共享等分隔开来,形成各功能领域的去中心化和全局上的统一.

猜你喜欢
请求者信用度访问控制
基于D2D 多播通信的合作内容下载机制
群智感知中基于云辅助的隐私信息保护机制
基于AHP和k-means算法的电力用户信用度评价
汉语自然会话中请求行为的序列结构
ONVIF的全新主张:一致性及最访问控制的Profile A
基于差值诱导的Web服务评价可信度的评估
大学生对校园微信电商的信用度研究
动态自适应访问控制模型
浅析云计算环境下等级保护访问控制测评技术
基于声誉的C2C电子商务信用评价模型研究