本发明涉及网络空间安全技术领域,特别是涉及一种基于区块链技术的可匿名身份的医疗云存储公共审计方法。
背景技术:
现如今,随着老龄化进程的加快和大健康医疗服务需求的增加,无线体域网已经变的越来越重要。无线体域网依赖各种各样的医疗传感器设备和无线通信技术来随时随地的采集医疗健康数据和远程监控病人的健康状况,将存储和计算能力有限的医疗传感器放置在病人的体表或者嵌入其表皮来定期收集各种健康生理特征,如血压、血糖、心率等,但是这些重要的医疗数据需要被实时的处理,并且病人需要及时地从远程医生获得反馈信息。然而依靠传统的无线体域网技术来实现这些功能是非常困难的,因此云计算被集成到无线体域网中以解决其固有的缺点。基于云辅助的无线体域网具有强大的存储空间和计算能力,能进一步提高远程可信医护人员对病人的医疗数据进行分析和诊断的效率,这不仅使病人不需要经常去医院进行体检,直接减轻病人的医疗费用;同时,又减轻了医院的负担,达到分级诊疗的效果。此外,如果国家或医疗卫生权威结构需要,存储在云服务器上的健康医疗大数据,可为研究者提供科学研究和病情模拟的医疗大数据支持,为国家的医疗卫生作贡献。
虽然基于云的无线体域网已经在现实生活中给病人带来了极大的好处,但是一些严峻的安全问题可能会影响病人对云存储服务的信任,其中一个最主要的安全问题是外包医疗数据的完整性。一旦这些敏感的医疗数据被上传到远端云服务器,病人将会失去对这些数据的物理控制,因此,病人总是担心外包医疗数据是否保存完整,以及是否被篡改。事实上,云医疗服务器的行为也是可疑的,比如他会为了节约存储空间而删除病人许久没有访问过的医疗数据,却声称数据是完整的来维护自己的声誉;更可怕的是云医疗服务器为了某种利益和外部敌手勾结,恶意篡改医疗数据文件,任何的篡改都有可能导致严重的后果,甚至干扰医生诊断,造成病人死亡。因此,定期检查外包医疗数据的完整性是不可或缺的,但对病人来说,自己验证外包数据的完整性是不现实的,因为对病人来说,检索整个外包医疗数据集来验证其是否完整,将导致沉重的通信和计算负担。
公共云审计技术能使病人授权委托第三方审计者代表病人来定期地验证存储在医疗云服务器上的外包医疗数据的完整性,从而大大减轻病人的审计负担。具体地,第三方审计者随机地生成一个挑战信息发送给云服务器,该云服务器基于挑战信息定位整个医疗数据集的一个子集,然后返回一个审计的证明信息给第三方审计者;之后,第三方审计者验证其完整性,一旦验证失败,就告知病人和可信的医护人员某个医疗数据文件已被篡改或缺失。事实上,即使验证结果输出表明医疗数据具有完整性,一个好奇的审计者也能通过自身强大的计算能力,求解一个适当的关于医疗数据块的线性方程组,从而进一步的获得病人的原始医疗数据文件。因此,需要利用一种安全技术来抵制好奇的审计者。此外,一个恶意的审计者会为了减少审计开销或为了某种利益与云服务器勾结来欺骗病人。具体地,在一段时间内,恶意的审计者只审计几次甚至一次,后面审计的结果都用之前的审计结果替代,从而欺骗病人;另外,一个恶意的审计者将每次审计的不好结果强行修改成好的审计结果来获取云服务器的好处。
最近,一种具有身份隐私的公共审计机制已经被提出,但是这些方案需要创建一个公钥基础设施来管理复杂的公钥证书过程,包括公钥的产生、分配、存储和撤销该证书。在无线体域网中,我们也注意到了病人的身份隐私保护和医疗数据隐私保护同等重要。在大多数情况下,病人不情愿将自己的真实身份和敏感的医疗数据相关联;如果将病人的身份全匿名化确实更助于其身份隐私保护,但是这不利于跟踪,揭示和撤销一些行为不端和违法犯罪的病人。
技术实现要素:
本发明的目的在于克服现有技术的不足,提供一种基于区块链技术的可匿名身份的医疗云存储公共审计方法。
本发明的目的是通过以下技术方案来实现的:基于区块链技术的可匿名身份的医疗云存储公共审计方法,包括外包医疗数据完整性验证步骤和第三方审计者tpa行为检验步骤;
所述外包医疗数据完整性验证步骤包括:
初始化子步骤:密钥生成中心pkg利用安全参数产生公共参数和自身的主公私钥对;
匿名身份和签名私钥产生子步骤:密钥生成中心pkg根据用户的真实身份、密钥生成中心pkg的主私钥、公共参数和匿名身份rid的有效期time产生用户对应的匿名身份rid及匿名身份rid的签名私钥skrid;
数字签名产生子步骤:用户根据自身的匿名身份rid、匿名身份rid的签名私钥skrid和医疗数据文件f生成对应的签名集合,并将该签名集合、医疗数据文件f、匿名身份rid和匿名身份rid的有效期time上传云服务器;
外包医疗数据审计子步骤:第三方审计者tpa根据一个时间戳t的序列号nonce产生挑战信息chal,并将挑战信息chal发送给云服务器;云服务器利用公共参数、挑战信息chal、医疗数据文件f和签名集合产生审计证明响应信息,并将审计证明响应信息返回给第三方审计者tpa;第三方审计者tpa利用公共参数、匿名身份rid和审计证明响应信息来审计医疗数据文件f的完整性,得到审计结果;
所述第三方审计者tpa行为检验步骤包括:
审计日志文件产生子步骤:第三方审计者tpa创建审计日志文件,并为每次审计任务创建一个审计结果条目,审计结果条目包括基于时间t的序列号nonce、挑战信息chal、审计证明响应信息和审计结果,将所有审计结果条目按一定顺序存储在审计日志文件中;第三方审计者为每个审计结果条目计算其的哈希值,并为每个审计结果条目的哈希值创建一条交易,并将所述交易上传到以太坊区块链中;
审计日志文件核查子步骤:用户利用公共参数、挑战信息、审计证明响应信息和审计日志文件验证第三方审计者tpa的审计行为。
优选的,所述数字签名产生子步骤中,云服务器对用户上传的数据进行验证,若验证通过,则说明用户上传的数据已成功存储在云服务器中,否则说明用户上传的数据被云服务器拒绝。
优选的,所述数字签名产生子步骤中,用户将签名集合、医疗数据文件f、匿名身份rid和匿名身份rid的有效期time上传云服务器后,删除本地存储的签名集合、医疗数据文件f、匿名身份rid和匿名身份rid的有效期time。
优选的,所述初始化子步骤包括:
输入一个安全参数τ,定义一个双线性对函数e:g1×g1→g2,其中,g1是加法循环群,g2是乘法循环群,加法循环群g1和乘法循环群g2具有相同阶为p的大素数;
从乘法循环群
设置哈希函数
密钥生成中心pkg保存主私钥α,并公开公共参数para=(e,g1,g2,v,p,ppub,h1,h2,h3,h4,h5)。
优选的,所述匿名身份和签名私钥产生子步骤包括:
用户随机选择一个整数
密钥生成中心pkg收到注册信息(id,rid1)后,计算
密钥生成中心pkg利用主私钥α计算匿名身份rid=(rid1,rid2)对应的签名私钥skrid=αh2(rid),并将(rid,time,skrid)发送给用户。
优选的,所述数字签名产生子步骤包括:
用户将医疗数据文件f划分为
用户从剩余类环zp中随机选择一个数x,并计算出签名恒定分量x=xv,利用签名私钥skrid=αh2(rid)计算每个医疗数据块fj的数字签名γj=fjskrid+xh3(δ||j),其中j={1,2,3,...,n};
用户最终得到签名集合ψ={(fj,γj)1≤j≤n,δ,x},其中δ∈{0,1}*是医疗数据文件f的标识信息,并将{ψ,rid,time}上传到医疗云服务器;
云服务器收到{ψ,rid,time}后通过方程一来检验用户上传的数据是否正确,
若方程一成立,则说明用户上传的数据已成功存储在云服务器中,否则说明用户上传的数据被云服务器拒绝。
优选的,所述外包医疗数据审计子步骤包括:
用户指定一个时间戳t,为需要被挑战的医疗数据块fj取回这个时间戳t对应的序列号nonce;
基于时间戳t的序列号nonce和安全参数τ,从集合{1,2,…,n}中随机地选择一个含有c个元素的子集λ={ι1,ι2,…,ιc};
对于每一个j∈λ,选择一个随机匹配系数υj∈zp,第三方审计者tpa将挑战信息chal={j,υj}j∈λ发送给云服务器;
云服务器收到来自第三方审计者tpa的挑战信息chal={j,υj}j∈λ后,选择一个随机数
第三方审计者tpa接收到云服务器发送过来的审计证明响应信息{r,δ,γ,δ,x}后,验证方程二是否成立,
若方程二成立,说明云服务器上的医疗数据文件f是完整的,输出结果为1;否则表明用户存储在云服务器上的医疗数据文件f已被篡改或丢失,输出结果为0。
优选的,所述审计日志文件产生子步骤包括:
第三方审计者tpa创建审计日志文件,并为每一次审计任务创建一条审计结果条目:(t(i),nonce(i),chal(i),{r(i),δ(i),γ(i),δ,x},1/0),其中i=1,2,…为审计结果条目的时间索引;
将所有的审计结果条目按照时间索引顺序存在审计日志文件中;
为每个审计结果条目计算其相应的哈希值,并为每个审计结果条目的哈希值创建一条交易,并将所述交易上传到以太坊区块链中,所述交易被以太坊区块链中半数以上的旷工验证通过后,将所述交易对应的哈希值打上时间戳并存储在以太坊区块链的某个节点中,并将所述交易的摘要信息同步至整个以太坊区块链。
优选的,所述审计日志文件核查子步骤包括:
用户选择审计日志文件中审计结果条目的时间索引集合的随机子集b,生成一个挑战信息chal的集合
用户将随机子集b发送给第三方审计者tpa,并从第三方审计者tpa获得γ(b)、w(b)和μ(b)的值,其中,
用户验证方程三是否成立,
e(γ(b),v)=e(w(b),ppub)e(μ(b),x)(方程三)
若方程三成立,说明第三方审计者tpa的审计行为是可靠的,输出结果为1,否则,说明第三方审计者tpa的审计行为是恶意的,输出结果为0。
本发明的有益效果是:
(1)本发明提供了一种基于身份的线性签名,并将该签名技术应用到面向无线体域网的云存储公共审计方法中,有利于第三方审计者tpa能够定期地挑战-验证外包云存储医疗数据的完整性;
(2)本发明利用随机掩码技术来保护医疗数据隐私,从而抵抗好奇的审计者,为了阻止第三方审计者tpa恶意欺骗用户,通过结合以太坊区块链技术提供一种防篡改、一个保存数字交易永久记录的公共数据库和基于交易的状态机,使得用户可以有效地验证其第三方审计者tpa的审计行为是否是恶意的;
(3)本发明中除了用户自身和被完全信任的密钥生成中心pkg,任何人都无法获得用户的真实身份,实现了对用户的身份隐私保护;即使敌手(包括恶意的审计者)有能力获得用户的原始医疗数据,也不能推断出这些医疗数据相关联的用户的真实身份;更重要的是,当发生医患纠纷或者有一些行为不端的用户试图诋毁云辅助的无线体域网时,密钥生成中心pkg能够追踪这些用户的真实身份并撤销他们;
(4)本发明是基于身份的密码体制设计的,无需部署代价昂贵的公钥基础设施来进行复杂的证书管理,具有更低的实施成本和维护成本;
(5)本发明相较于现有技术具有更好的性能优势,特别是对保密性要求较高的大健康产业、医疗卫生机构或需要保护核心技术的国有企业具有重要的应用价值。
附图说明
图1为基于区块链技术的可匿名身份的医疗云存储公共审计方法的流程图;
图2为利用以太坊区块链技术存储审计结果交易信息的状态细节示意图。
具体实施方式
下面将结合实施例,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
参阅图1-2,本发明提供一种基于区块链技术的可匿名身份的医疗云存储公共审计方法:
如图1所示,基于区块链技术的可匿名身份的医疗云存储公共审计方法包括外包医疗数据完整性验证步骤和第三方审计者tpa行为检验步骤。
所述外包医疗数据完整性验证步骤包括:
s1.初始化子步骤:密钥生成中心pkg利用安全参数产生公共参数和自身的主公私钥对.
所述初始化子步骤包括:
s11.输入一个安全参数τ,定义一个双线性对函数e:g1×g1→g2,其中,g1是加法循环群,g2是乘法循环群,加法循环群g1和乘法循环群g2具有相同阶为p的大素数;
s12.从乘法循环群
s13.设置哈希函数
s14.密钥生成中心pkg秘密安全地保存主私钥α,并公开公共参数para=(e,g1,g2,v,p,ppub,h1,h2,h3,h4,h5)。
s2.匿名身份和签名私钥产生子步骤:密钥生成中心pkg根据用户的真实身份、密钥生成中心pkg的主私钥、公共参数和匿名身份rid的有效期time产生用户对应的匿名身份rid及匿名身份rid的签名私钥skrid。
所述匿名身份和签名私钥产生子步骤包括:
s21.用户随机选择一个整数
s22.密钥生成中心pkg收到注册信息(id,rid1)后,计算
s23.密钥生成中心pkg利用主私钥α计算匿名身份rid=(rid1,rid2)对应的签名私钥skrid=αh2(rid),并将(rid,time,skrid)通过安全信道发送给用户。
s3.数字签名产生子步骤:用户根据自身的匿名身份rid、匿名身份rid的签名私钥skrid和医疗数据文件f生成对应的签名集合,并将该签名集合、医疗数据文件f、匿名身份rid和匿名身份rid的有效期time通过无线体域网上传云服务器,然后删除本地存储的签名集合、医疗数据文件f、匿名身份rid和匿名身份rid的有效期time。云服务器收到用户上传的数据后,对用户上传的数据进行验证,若验证通过,则说明用户上传的数据已成功存储在云服务器中,否则说明用户上传的数据被云服务器拒绝。
所述数字签名产生子步骤包括:
s31.用户将医疗数据文件f划分为
s32.用户从剩余类环zp中随机选择一个数x,并计算出签名恒定分量x=xv,利用签名私钥skrid=αh2(rid)计算每个医疗数据块fj的数字签名γj=fjskrid+xh3(δ||j),其中j={1,2,3,...,n};
s33.用户最终得到签名集合ψ={(fj,γj)1≤j≤n,δ,x},其中δ∈{0,1}*是医疗数据文件f的标识信息,并将{ψ,rid,time}通过无线体域网上传到医疗云服务器,同时删除本地存储的数据;
s34.云服务器收到{ψ,rid,time}后通过方程一来检验用户上传的数据是否正确,
若方程一成立,则说明用户上传的数据已成功存储在云服务器中,否则说明用户上传的数据被云服务器拒绝。
方程一的正确性推导如下所示:
s4.外包医疗数据审计子步骤:包括外包医疗数据的挑战过程、审计证明响应信息和外包医疗数据的审计验证过程;具体地,第三方审计者tpa根据一个时间戳t的序列号nonce产生挑战信息chal,并将挑战信息chal发送给云服务器;云服务器利用公共参数、挑战信息chal、医疗数据文件f和签名集合产生审计证明响应信息,并将审计证明响应信息返回给第三方审计者tpa;第三方审计者tpa利用公共参数、匿名身份rid和审计证明响应信息来审计医疗数据文件f的完整性,得到审计结果,若审计通过,则说明用户存储在云服务器上的医疗数据文件f是完整的,否则说明用户存储在云服务器上的医疗数据文件f已被篡改或丢失。
所述外包医疗数据审计子步骤包括:
s41.用户指定一个时间戳t,为需要被挑战的医疗数据块fj取回这个时间戳t对应的序列号nonce;
s42.基于时间戳t的序列号nonce和安全参数τ,从集合{1,2,…,n}中随机地选择一个含有c个元素的子集λ={ι1,ι2,…,ιc};
s43.对于每一个j∈λ,选择一个随机匹配系数υj∈zp,第三方审计者tpa将挑战信息chal={j,υj}j∈λ发送给云服务器;
s44.云服务器收到来自第三方审计者tpa的挑战信息chal={j,υj}j∈λ后,选择一个随机数
s45.第三方审计者tpa接收到云服务器发送过来的审计证明响应信息{r,δ,γ,δ,x}后,验证方程二是否成立,
若方程二成立,说明云服务器上的医疗数据文件f是完整的,输出结果为1;否则表明用户存储在云服务器上的医疗数据文件f已被篡改或丢失,输出结果为0。
方程二的正确性推导如下所示:
所述第三方审计者tpa行为检验步骤包括:
s5.审计日志文件产生子步骤:第三方审计者tpa创建审计日志文件,并为每次审计任务创建一个审计结果条目,审计结果条目包括基于时间t的序列号nonce、挑战信息chal、审计证明响应信息和审计结果,将所有审计结果条目按一定顺序存储在审计日志文件中;第三方审计者为每个审计结果条目计算其的哈希值,并为每个审计结果条目的哈希值创建一条交易,并将所述交易上传到以太坊区块链中。
所述审计日志文件产生子步骤包括:
s51.第三方审计者tpa创建审计日志文件,并为每一次审计任务创建一条审计结果条目:(t(i),nonce(i),chal(i),{r(i),δ(i),γ(i),δ,x},1/0),其中i=1,2,…为审计结果条目的时间索引;
s52.将所有的审计结果条目按照时间索引顺序存在审计日志文件中,如表1所示:
表1审计日志文件
s53.为每个审计结果条目计算其相应的哈希值,并为每个审计结果条目的哈希值创建一条交易,并将所述交易上传到以太坊区块链中,所述交易被以太坊区块链中半数以上的旷工验证通过后,将所述交易对应的哈希值打上时间戳并存储在以太坊区块链的某个节点中,并将所述交易的摘要信息同步至整个以太坊区块链。利用以太坊区块链技术存储审计结果交易信息的具体技术或状态细节如图2所示。
例如,利用哈希h5对第一次审计条目结果的输出如下:
λ(1)=h5(t(1),nonce(1),chal(1),{r(1),δ(1),γ(1),δ,x},1/0)
并为该审计条目结果的哈希值λ(1)创建一条交易
s6.审计日志文件核查子步骤:用户利用公共参数、挑战信息、审计证明响应信息和审计日志文件验证第三方审计者tpa的审计行为,当验证通过时,说明第三方审计者tpa的审计行为是可靠的,否则说明第三方审计者tpa的审计行为是恶意的。
所述审计日志文件核查子步骤包括:
s61.用户选择审计日志文件中审计结果条目的时间索引集合的随机子集b,生成一个挑战信息chal的集合
s62.用户将随机子集b发送给第三方审计者tpa,并从第三方审计者tpa获得γ(b)、w(b)和μ(b)的值,其中,
s63.用户验证方程三是否成立,
e(γ(b),v)=e(w(b),ppub)e(μ(b),x)(方程三)
若方程三成立,说明第三方审计者tpa的审计行为是可靠的,输出结果为1,否则,说明第三方审计者tpa的审计行为是恶意的,输出结果为0。
方程三的正确性推导如下所示:
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。