[0084] 以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0085] 假设病人(身份为IDi)由于病1去看医生1,医生1产生电子病历m并提取关键词w,对该病历和关键词进行加密为密文ci,同时为用户的该病历建立编号di(对身份IDi进行可搜索加密),医生1将密文ci和编号di发送到区块链,区块链验证其有效性后将该区块上链。假设该病人由于病2去看医生2,医生2认为该病人的疾病可能与病1有关,需要查看病人病1关键词w相关的病历。于是,病人将编号搜索陷门Td和关键词搜索陷门Tw发送给医生2,医生2用该陷门搜索对应的病历。具体地,可以通过如下步骤来实现:
[0086] 步骤11,给定安全参数k,系统选择阶为素数p的两个循环群G1,G2以及一个双线性对
[0087] 满足双线性和对称性,其中,
[0088] 双线性是指对所有V,Q∈G1以及 有 对称性是指
[0089] 选择以下七个hash函数:
[0090] H0:G2→{0,1}*, H2:G1→M(消息空间),
[0091] 计算,
[0092] 系统参数为
[0093] 步骤12,病人i随机选择 作为其私钥ski,并产生对应的公钥pki=(Yi1=yi1P,Yi2=yi2P1);
[0094] 步骤13,医生j随机选择 作为其私钥,并产生对应的公钥pkj=(Yj=yjP1)。
[0095] 在步骤1中,在步骤13之后还包括步骤14,
[0096] 假设关键词集合Ω={w1,w2,...wn},通过建立基于关键词多项式的方法验证关键词的有效性,具体过程如下:
[0097] 计算H(w1),H(w2),...H(wn),其中H(·)为哈希函数,构建一个n阶多项式,该多项式满足
[0098] f(x)=(x‑H(w1))(x‑H(w2))...(x‑H(wn))
[0099] 显然,f(H(wi))=0,i∈{1,2,....n},该式可以表示为
[0100] f(x)=xn+bn‑1xn‑1+...+b1x+b0
[0101] 这样,f(x)=0可以表示为
[0102] xn+bn‑1xn‑1+...+b1x+b0=0
[0103] 对上式进行变换可以得到
[0104]
[0105] 令 构建新的多项式
[0106] g(x)=anxn+an‑1xn‑1+...+a1x
[0107] 可得g(H(wi))=1;定义一个矢量Λ=[a1,a2,...an]和Ηi=[H(wi),(H(wi))2,...,n(H(wi)) ],矢量Λ和Ηi的内积Λ·Ηi=1,从而矢量Λ可以用来验证所包含的关键词是否选自可选关键词集。
[0108] 在步骤2中,产生电子病历并提取关键词,对所述电子病历和所述关键词进行加密并执行存储的方法包括:
[0109] 步骤21,医生产生电子病历并从所述电子病历中提取关键词;
[0110] 该关键词应选自标准的医药描述术语集,区块链的验证者将在步骤25的共识机制中验证关键词的有效性;
[0111] 步骤22,医生对电子病历m和关键词w进行可搜索加密;
[0112] 加密方法如下:
[0113] 随机选择
[0114] 计算
[0115]
[0116] 计算 设矢量X=[X1,X2,...,Xn],其中
[0117] X1=r1H1(w)P1,X2=r1(H1(w))2P1,...,Xn=r1(H1(w))nP1;
[0118] 计算
[0119] 该加密算法的输出为ci=(ci0,ci1,ci2);其中,ci1=(A,B,E,F),ci2=(J,X),(A,B,E,F)是可搜索加密的密文,ce=(A,J,X)是用于验证关键词有效性的证据;
[0120] 步骤23,医生对病人身份IDi进行可搜索加密为密文di作为病历编号;加密方法如下:
[0121] 随机选择 计算
[0122] Bd=r1Yi2,r0=H5(IDi,Bd),Ad=r0(Yi1+H1(IDi)P1)+r1P1,
[0123] 计算
[0124] 病人身份IDi加密为di=(Ad,Bd,Ed,Fd);
[0125] 步骤24,医生将密文(ci,di)作为一个新的区块发送到区块链中;
[0126] 步骤25,区块链的验证者验证关键词的有效性,该验证方法作为该区块链的共识机制;
[0127] 该共识机制如下:
[0128] 假设关键词集合Ω={w1,w2,...wn},本发明通过建立基于关键词多项式的方法验证关键词的有效性,具体过程如下:
[0129] 计算H(w1),H(w2),...H(wn),其中H(·)为哈希函数,构建一个n阶多项式,该多项式满足
[0130] f(x)=(x‑H(w1))(x‑H(w2))...(x‑H(wn))
[0131] 显然,f(H(wi))=0,i∈{1,2,....n},该式可以表示为
[0132] f(x)=xn+bn‑1xn‑1+...+b1x+b0
[0133] 这样,f(x)=0可以表示为
[0134] xn+bn‑1xn‑1+...+b1x+b0=0
[0135] 对上式进行变换可以得到
[0136]
[0137] 令 构建新的多项式
[0138] g(x)=anxn+an‑1xn‑1+...+a1x可得g(H(wi))=1;
[0139] 定义一个矢量Λ=[a1,a2,...an]和Ηi=[H(wi),(H(wi))2,...,(H(wi))n],矢量Λ和Ηi的内积Λ·Ηi=1,从而矢量Λ可以用来验证所包含的关键词是否选自可选关键词集;
[0140] 区块链的验证者按照如下方法验证接收到的密文(ci,di)中关键词是否有效:验证以下两个等式
[0141] 和
[0142] 若超过2/3的验证者验证了以上两个等式成立,将该区块加入到区块链中。
[0143] 在步骤3中,执行电子病历的搜索的方法包括:
[0144] 步骤31,病人产生身份搜索陷门 和关键词搜索陷门Tw=(T1,T2,T3),方法如下:
[0145] 随机选择 计算
[0146]
[0147] 随机选择 计算
[0148]
[0149] 步骤32,电子病历的搜索者接收到病人的搜索陷门Td和Tw后搜索电子病历。
[0150] 在本发明的一种具体实施方式中,在步骤32中,搜索电子病历的方法包括:
[0151] 步骤321,搜索密文中身份为IDi的病历,即提取 计算
[0152] 和Vd=U1/U2,验证H4(Vd,Ad,Bd)=Fd是否成立,若成立,该病历为所需查找病人的病历,提取出对应密文ci0和ci1=(A,B,E,F);
[0153] 步骤322,计算 和V=U1/U2,验证H4(V,A,B)=F,若该等式成立,ci0为所需查找病人所需查找关键词的病历,计算和r0'=H3(m',B),验证 是否成立,若该等式成立,接受m’。
[0154] 本发明还采用对身份进行可搜索加密的方法对病历进行编号,再通过搜索陷门搜索所需的病人的病历,实现用户的身份隐私保护。
[0155] 以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。
[0156] 另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。
[0157] 此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。