1.一种基于区块链的医疗数据共享方法,其特征在于,包括以下步骤:
S10、系统初始化,系统管理员将病人、医院的信息初始化,并将初始化信息录入本地端;
所述步骤S10包括以下步骤:
S101、系统中的系统管理员初始化病人、医院,为这些实体分配各自的身份编号,每个病人的身份编号用i表示,每家医院的身份编号用j表示;
S20、基于区块链与对称、非对称加密算法的医疗服务过程追踪和访问控制,病人使用可穿戴设备收集自身的健康数据UiInfo,用自己的对称密钥对UiInfo加密,将健康数据密文EUiInfo存储在云服务器并获取存储地址AddrEUiInfo,再用医院的公钥pkj加密自己的对称密钥,生成密钥密文,将密钥密文、AddrEUiInfo存入区块链;
所述步骤S20包括以下步骤:
S201、生成加密数据的对称密钥,病人使用物联网可穿戴设备收集自身的健康数据UiInfo,并生成两对AES对称密钥:物联网密钥Iki与诊断密钥dkij,Iki用来加密或解密病人的健康数据,dkij用来加密或解密医院生成的诊断数据;
S202、生成健康数据密文并存储,病人通过AES加密算法使用Iki加密自己的健康数据UiInfo,生成健康数据密文EUiInfo=Enc(UiInfo,Iki),把EUiInfo存入云服务器,并从云服务器中获取健康数据密文EUiInfo的存储地址AddrEUiInfo;
S203、实现针对医院的访问控制,病人从系统中选定一家医院或多家医院,每家医院有一对自己的RSA公私钥对(pkj,skj),病人再通过使用选定医院的公钥pkj对物联网密钥Iki与诊断密钥dkij加密,得到两个密钥密文EIki=Enc(Iki,pkj)、Edkij=Enc(dkij,pkj),再通过RSA加密算法使用选定医院的公钥pkj对自己的身份编号i加密,生成编号密文Ei=Enc(i,pkj),保证仅选定医院的私钥skj可以对密钥密文和编号密文解密,得到病人的对称密钥和身份编号;
S204、病人使用健康数据密文存储地址AddrEUiInfo、时间戳timestamp、对称密钥的密文EIki和Edkij、医院编号j、病人的编号密文Ei生成物联网交易TXIoT,系统使用POS算法选出记账节点将交易打包成区块,将区块存入区块链;
S30、医院从区块链得到病人的密钥密文,并解密密钥密文获取病人的对称密钥,使用对称密钥对EUiInfo解密,获取病人的健康数据UiInfo,对健康数据进行诊断产生诊断数据DijInfo,再对DijInfo加密生成诊断数据密文EDijInfo,将EDijInfo存储在云服务器,用区块链保存EDijInfo的存储地址以及医院的数字签名,病人不仅能获取诊断数据,还能对医院的数字签名进行验证,验证DijInfo在传输过程中是否被非法第三方篡改;
所述步骤S30包括以下步骤:
S301、交易的检索,医院在区块链中输入自己的编号j,检索存有自己的编号的物联网交易TXIoT,然后从交易中获取病人的密钥密文EIki和Edkij、健康数据密文的存储地址AddrEUiInfo、病人编号的密文Ei;
S302、病人的对称密钥和健康数据的获取,医院使用自己的私钥skj对病人编号的密文与密钥密文解密,得到病人的编号i=Dec(Ei,skj)和两对对称密钥{Iki=Dec(EIki,skj),dkij=Dec(Edkij,skj)},之后医院通过AddrEUiInfo从云服务器找到并下载健康数据密文EUiInfo,使用病人的物联网密钥Iki对EUiInfo进行解密,得到健康数据UiInfo=Dec(EUiInfo,Iki);
S303、诊断数据的生成与存储,得到病人的健康数据UiInfo和两对对称密钥后,医院根据健康数据UiInfo进行诊断,产生诊断数据DijInfo,使用病人的诊断密钥dkij将诊断数据加密,得到诊断数据密文EDijInfo=Enc(DijInfo,dki),将EDijInfo存入云服务器,并从云服务器获取诊断数据密文的存储地址AddrEDijInfo;
S304、医院生成DijInfo的哈希值HDijInfo,用私钥skj和HDijInfo生成数字签名SigDj=Enc(HDijInfo,skj),再使用对称密钥dkij对医院的编号j加密,得到密文Ej=Enc(dkij,j),之后医院用数字签名SigDj、诊断数据密文的存储地址AddrEDijInfo、医院编号的密文Ej、病人编号i、时间戳timestamp、健康数据密文存储地址AddrEUiInfo生成诊断交易TXdiag,系统使用POS算法选出记账节点将交易打包成区块,将区块存入区块链;
S305、诊断数据的检索,病人在区块链输入自己的编号i,检索与自己相关的诊断交易TX diag,病人从交易中获取诊断数据密文的存储地址AddrEDijInfo,根据地址从云服务器中检索出诊断数据密文EDijInfo,再使用dki对诊断密文解密,得到诊断数据DijInfo=Dec(EDijInfo,dki),从而了解自己的病情,再用dki对医院编号密文Ej解密,查看提供该条诊断数据的医院编号j;
S306、病人使用交易TXdiag中的数字签名进行验证,从TXdiag中获取医院的数字签名SigDj,输入医院的公钥pkj对数字签名SigDj解密,得到数字签名中的哈希值HDijInfo=Dec(SigDj,pkj),再对从云服务器中获取的诊断数据DijInfo进行哈希,获取另一个哈希值,将两个哈希值进行对比,若两个哈希值内容相同,则可验证该诊断数据是没有经过篡改的真实数据。