一种面向医疗大数据安全共享的新型区块链技术
2019-07-09陈建森顾志豪
佘 维 ,陈建森,刘 琦,胡 跃,顾志豪,田 钊,刘 炜
1(郑州大学 软件学院,郑州450000) 2(郑州大学 互联网医疗与健康服务河南省协同创新中心,郑州 450000)
1 引 言
医疗数据的安全共享[1]是当前医疗大数据应用中的重要和热点问题,主要包括两个方面:1)数据的授权分发与安全传输;2)个人数据的隐私保护.其中,医疗数据的授权分发与安全传输不仅涉及数据交换和传输技术,更重要的是数据的权属认定,以及由分发过程形成的数据所有者和使用者之间的信任链[2];个人数据[3]的隐私保护则是单个个体的健康数据融入医疗“大数据”分析与应用时,难以回避又不易解决的问题.
为了解决数据的授权分发问题,在云存储中共享加密数据,文献[4]提出在不可靠的环境下对数据安全共享重新加密的方法,文献[5]提出用ECC算法实现只有加密的数据在用户和发布者之间共享的方案.但是,这两种方法仅仅解决了用户间的数据共享安全问题,数据安全共享时进行数据加密或者重加密后数据处于密文状态,密文数据不能进行良好的数据计算,无法使用大数据的价值.
为了保证个人数据的隐私安全,最简单的方法是将数据加密后传输或分发,但这并不适用于大量医疗数据的统计或针对医疗数据的计算、转化和应用,因为密文是无法直接用来计算的,此外秘钥的分发环节同样会引入安全隐患[6].2009年Craig Gentry提出“全同态加密”[7]方法,可在未解密的条件下对加密数据进行任何运算.如:基于格上困难问题构造的全同态加密方案[8],控制密文噪声增长,然后执行自己的解密函数实现同态解密,依据循环安全假设实现全同态加密;基于环上带误差学习困难问题构造的全同态加密方案[9],使用近似向量方法表示私钥,密文的同态计算使用矩阵运算.但是由于医疗机构处理数据能力比较弱,为了使用医疗数据价值,通常医疗机构需要将数据交给第三方的数据处理中心进行数据处理分析从而达到更好的医疗效果和科研水平.使用全同态加密虽然能达到数据加密和计算,但是医疗机构,患者和数据中心仍然处在中心化网络中,不能保证双方之间的信任和安全传输.
本文提出一种基于区块链(blockchain)和全同态加密(full homomorphic encryption)的医疗大数据安全共享方案,首先将中心化网络中的医疗机构、患者和第三方的数据处理中心等中心化节点映射在区块链网络中实现去中心化达到各节点完全信任.然后通过智能合约调用全同态加密算法实现在共享双方间只有密文数据并且可以进行密文计算.最终实现在不影响医疗大数据分析和实际应用的情况下,确保个人数据的隐私安全、数据授权分发和安全传输.
2 相关技术
2.1 区块链技术
区块链技术[10]的核心是去中心化,通过运用数据加密、时间戳和分布式共识等手段,在对等节点无需信任的前提下实现去中心化的点对点交易、协调与协作,解决中心化系统的高成本、低效率和数据存储不安全的问题.
区块链系统[11]分为数据层、网络层、共识层、激励层、合约层和应用层六层结构.其中,数据层封装了区块链底层区块以及哈希函数、数据加密和时间戳等技术;网络层则包括P2P技术、传播机制和验证机制;共识层则封装网络节点的各类共识算法;激励层主要包括发行机制和分配机制;合约层主要封装了各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层是区块链在各种场景下的应用[12].
智能合约[13]是区块链的核心要素,是由事件来触发的、是具有状态的并且是运行在区块链数据账本上的一段程序.智能合约的开发是用来实现区块链与合约应用程序(DApps)进行交互的.智能合约的运行原理如图1所示.
图1 智能合约运行原理Fig.1 Smart contract operation principle
区块链中的每个节点都可以将交易数据封装到一个带有时间戳的数据区块中,并且链接到主区块中,形成最新的区块,然后将区块信息同步到整个区块链网络中.其中数据区块[14]包括:区块头和区块体.区块头封装了前一区块地址和一系列哈希值,用来链接前后区块;区块体主要包含了本区块的主要信息.区块结构如图2所示.
2.2 全同态加密技术
全同态加密[15]问题早在1978年就由Rivest等人提出,之后成为密码学界的一个开放难题,被誉为密码学界的“圣杯”.直到2009 年 Gentry 构造出第一个全同态加密方案,人们在此基础上研究出更完善的技术,同时全同态加密技术也得到很大发展.全同态加密提供了一种对加密数据进行处理的功能,即能够在不知道密钥的情况下,对密文进行任意计算,即对于任意有效的f(x)函数及明文m,有性质f(Enc(m))=Enc(f(m))[16],其中Enc表示数据加密过程,f(x)表示数据运算过程,m表示原始数据.全同态加密方案是一个4元{key-Gen;encrypt;decrypt;evaluate}组.其中,
图2 区块结构Fig.2 Block structure
1)KeyGen:是全同态加密的启动运算,生成全同态方案的密钥对(pk,sk),其中pk为公钥,sk为私钥.
2)encrypt(Enc):是全同态加密的加密运算,给出一个明文m,用公钥pk加密明文m,得到密文M=encrypt(m,pk).
3)decrypt(Dec):是全同态加密的解密运算,输入私钥sk和密文M,进行解密运算,输出明文m=decrypt(M,sk).
4)Evaluate:对于给定的功能函数f(x)以及一组密文M={M1,M2,…,Mn}做运算f(M),得到计算结果C=f(M).
全同态加密方案如图3所示.
图3 同态加密原理Fig.3 Homomorphic encryption principles
在同态加密过程中,密文计算过程中会发生错误,这个错误称为噪声[17],而随着密文计算的次数增多噪声也会随着增加,从而导致密文计算是有限的,如果噪声超过了这个界限,那么密文的解密就可能失败.BGV方案是目前最具有影响力的方案,也是目前效率最高的方案.BGV方案[18]采用模交换技术与密钥交换技术,是一种无须启动的层次型全同态加密方案.该方案是在密文每次计算后利用密钥交换技术将密文转换成一个新密文,然后通过模交换技术将随密文增大的噪声进行约减,进而达到更多次的密文计算. BGV算法[19]的具体步骤如下:
1)Setup(λ,L)令R=Z[x]/f(x)则Rq=Zq[x]/f(x),其中f(x)=xn+1,n是2的幂次方.输入安全参数λ和电路深度L,输出L+1个模q,产生参数a;η是R上的一个错误概率分布;N=「(2n+1)logq⎤.
4)Dec(a,sk,M):假设密文的密钥是Si,则输出的明文为m←((
6)Mult(A,M1,M2):与Add()算法相同,假设密文在同一层电路上则对应同一个密钥Si,如果M1和M2不在同一层,则进行Refesh更新操作,使M1、M2处于同一层再进行计算.
a)密钥交换:M1←switchKey(τ(Si→Si-1),M,n1,n2,qi),M1对应的密钥是Si-1和模qi.
b)模交换M2←scale(M1,qi,qi-1,2),M2对应的密钥是Si和模qi.
3 基于区块链技术的同态加密方案
3.1 医疗数据常规处理方法及隐患
在传统医疗数据收集及过程中,个人是健康信息的主要提供来源,同时私人医生、医院诊所的就诊病例和移动可穿戴设备公司的健康数据收集也是提供个人健康信息的主要手段.个人信息的泄露给用户带来诸多问题.传统医疗数据的来源见图4.
图4 传统医疗数据来源Fig.4 Traditional medical data sources
传统医疗数据存在以下两方面安全隐患.
1)医疗数据隐私问题
在传统的医疗数据收集时,无论是从个人信息收集还是从医疗机构收集都可能会造成数据源的泄露,也可能遭受的外部攻击,导致数据泄露,从而导致个人的隐私安全受到威胁.
2)医疗数据存储和交易的安全问题
传统的医疗数据收集后,传统医疗数据进行交易或存储在传统的数据中心时,受到外部黑客的攻击会造成数据被盗窃;在数据中心进行数据处理时,处理数据由于是明文状态也可能在数据处理过程中造成数据泄露,从而导致医疗数据的存储和交易受到威胁.
3.2 医疗区块链及全同态加密方案
针对上述传统医疗数据存在的安全隐患问题,本文提出医疗区块链及全同态加密方案.在区块链中实现全同态加密技术,我们需要将全同态加密算法写在区块链的智能合约中,在这种情况下,存储在区块链中的医疗数据进行交易时,会自动调动智能合约,这样在数据交易的过程中不仅保证了交易的不可篡改性和强时序性同时还保障了医疗数据的隐私安全.
因此将传统的数据来源映射在区块链网络中,是解决上述问题的关键.如图5所示,私人医生、医院、诊所和个人等都各自成为区块链中的对等节点,实现去中心化,共享医疗信息.
图5 医疗数据区块链节点Fig.5 Medical data block chain node
在该区块链网络中执行的所有操作都以防篡改的方式记录和控制.在每个节点进行数据交易的同时,区块链网络调用智能合约,实现全同态加密的合约.最终在不受信任方实现数据共享,各方共同存储和计算数据的同时保证数据完全隐私的目标.
交易过程如图6所示,具体步骤如下:
图6 数据交易Fig.6 Data transaction
1)全同态加密智能合约(FHE-Contract)
steup(λ,L):全同态加密启始阶段,输入安全参数λ和电路深度L,输出L+1个模q,产生参数a;
keyGen(a):密钥对生成阶段,生成私钥sk和公钥pk;
enc(a,pk,m):数据加密阶段,对医疗数据m加密得到C;
dec(a,sk,C):数据解密阶段,对医疗数据密文C,解密得到m;
add(pk,C1,C2):数据加法运算阶段,对医疗数据密文做加法计算;
mult(pk,C1,C2):数据乘法运算阶段,对医疗数据密文做乘法计算.
2)触发器
因为智能合约不能直接与医疗区块链的网络进行交互,所以交互过程需要触发器链接.触发器是链接智能合约和医疗区块链网络之间的实体.当有节点接收数据交易请求且确认请求合法时,触发器会发送全同态加密合约地址和加密的医疗数据,然后将合约地址和密文发布在区块链网络中.定义两元组trigger{request,receive}.触发器监听节点状态,如果trigger(request)==start,获取请求节点地址;如果trigger(receive)==start,接收合约接口、合约地址和数据.
3)数据处理
当收到请求节点的请求时,触发器启动,调用全同态智能合约的Enc()功能对数据进行加密;当收到接收响应时,触发器启动,调用全同态智能合约,如果数据处理进行加法运算则调用Add()功能,如果数据处理进行乘法运算则调用Mult()功能.数据处理进行完,调用Dec()功能,对加密的数据结果进行解密得到数据明文结果.
3.3 医疗区块链全同态加密算法
基于区块链的全同态加密方法是将BGV算法部署在区块链的智能合约上,节点交易通过触发器调用智能合约来实现数据交易的隐私保护.首先初始化参数:合约接口abi,合约地址address,节点地址peerID,请求响应request,接收反馈receive,存储数据data和计算形式calculation{add,mult};其次设置智能合约功能函数:加密功能函数enc,解密功能函数dec,同态加法功能函数add,同态乘法功能函数mult,传递数据功能send,接收数据功能函数get,接收节点地址功能函数getPeer和触发器功能函数trigger;最后监测触发器状态执行合约.算法流程如图7所示.
图7 算法流程图Fig.7 Algorithm flow
算法 FSC= FHE-Contract(data)
输入:data——交易的医疗数据集.
条件:trigger()——触发器启动,调用全同态智能合约.
输出:FSC——加密数据同态计算后解密的数据集.
算法步骤:
算法:FHE-Contract
1.trigger{request,receive};data{}=φ;
2. for each trigger(request)==true ∈ trigger
3. getPeer(peerID);/*得到请求节点地址*/
4. Data = FHE.enc(a,pk,data);/*数据data进行加密得到密文数据Data*/
5. send(abi,address,Data) to(peerID);/*交易包含密文数据Data,合约地址address和接口abi*/
6. end for
7. for each trigger(receive)==true ∈ trigger
8. get(abi,address,Data);/*交易获得密文数据Data,合约地址address和接口abi.*/
9. while calculation==add do
10. Result=FHE.add(pk,Data);
11. end while
12. while calculation==mult do
13. Result=FHE.mult(pk,Data);
14. end while
15. result=FHE dec(a,sk,Result);/*密文数据结果Result进行解密得到明文结果result*/
16. end for
17.end
4 实验与分析
基于区块链的全同态加密方法主要实现个人医疗数据的隐私保护和数据统计的安全.本文将基于Ubuntu16.0.4系统,使用以太坊钱包客户端实现全同态智能合约,同时基于50名用户的个人健康数据完成实验.实验目标是统计一个群体的平均身高及体重,我们实验通过收取这个群体中的50名用户的体检报告(性别、身高和体重)作为样本数据,来完成对这个群体的统计目标.用户通过区块链交易来完成信息的共享,同时通过全同态加密来完成数据统计.本节首先针对数据信息的隐私性和安全性进行验证,然后验证加密数据的全同态性,最后采用对照分析来评估系统的优势及不足.
通过实验结果分析一方面验证数据的隐私性和安全性,另一方面验证加密数据的全同态性.
4.1 数据的隐私性和安全性
首先将50名用户信息分别存储在传统的中心化数据库和去中心化的全同态加密区块链中,其中性别:男性用字符“1”表示,女性用字符“2”表示.然后分别查询两类数据库中用户的信息.通过传统数据库查询用户的信息如表1所示,可以访问到用户的所有个人信息,这样容易导致用户隐私的泄露.而与传统数据库相比,通过查询全同态加密区块链中的用户信息如表2所示,访问到的是用户全部信息的密文数据,这样即使数据泄露也只是一串密文的泄露,仍然无法得到其中用户具体的个人信息.通过查询用户传统数据库与全同态加密区块链中的数据显示状态对比,当数据库遭受攻击或者数据泄露时,传统数据库直接泄露数据信息;而区块链数据库中的数据只泄露数据密文信息,进一步的保证了用户信息的隐私性.
表1 传统存储用户体检信息表Table 1 Traditional storage user medical information table
表2 加密用户体检信息表Table 2 Encryted user medical information
4.2 数据交易的安全性及数据同态性
实验最后分别统计50名用户中男性和女性的平均身高和平均体重.首先统计传统数据库中明文数据中男性和女性的平均身高和体重作为验证数据.然后区块链调用全同态加密合约,统计密文数据中男性和女性的平均身高和体重.通过两种数据库中统计数据的结果对比如表3,计算结果一致,表明数据进行BGV全同态加密后仍然可以对密文进行计算,具有全同态性.最后数据在中心化数据库中收到攻击时,会导致所有数据的安全问题,而去中心化系统则缓解了黑客攻击数据库的导致所有数据泄露问题.
表3 男女平均身高体重表Table 3 Average height and weight of men and women
4.3 实验结果
在以太坊区块链中,节点调用其他节点的全同态智能合约时,该节点只能得到解密后的体检数据.在以太坊钱包中,交易节点的账户只能得到最终的平均身高和平均体重而无法查看计算过程,也无法查看每个用户的具体信息,这样保证了原始数据的隐私安全,还保证了数据交易过程中数据的意思安全,最后防止了数据计算过程中数据泄露的问题.如图8-图9所示,为其中交易节点的以太坊钱包调用其他节点的全同态智能合约时所得到的数据结果,与正确的数据结果相吻合,表明了实验结果的正确性.
图8 男生平均身高结果图Fig.8 Averageheightformen图9 男生平均体重结果图Fig.9 Averageweightformen
4.4 系统优势及不足
在本实验中,以50名用户作为样本数据,实现了全同态加密智能合约的功能,完成了安全共享医疗数据及保护个人数据隐私的目标.但是本实验采用了小数据做简单的运算,如果涉及到医疗大数据的复杂运算,系统还需进一步优化.
5 总 结
本文提出了基于区块链和全同态加密的医疗大数据安全共享方案,通过区块链技术和全同态加密技术的结合,实现在区块链中节点间只有密文数据传输并且可以进行密文计算的目标.最后基于以太坊的仿真实验,验证了该方案的全同态性与数据的共享安全性.最终完成在不影响医疗大数据分析和实际应用的情况下,确保个人数据的隐私安全、数据授权分发和安全传输的目标.