1.一种面向医疗区块链数据的可验证搜索方法,其特征在于,该方法具体包括以下步骤:S1:医疗机构将患者的电子医疗数据上传到区块链;医疗数据最终以十六进制的形式存储在交易的input字段中;
S2:根据区块链中数据的特点选取非关系型数据库MongoDB存储,并根据区块链中存储的医疗数据对MongoDB设计相应的数据结构;
S3:医疗区块链系统将区块中的医疗数据经过处理后存储到非关系型数据库中,具体包括:医疗区块链系统负责对区块链进行监听维护并充当搜索方;同时对区块链每个块中每笔交易包含的医疗数据经过处理后存储到设计好的非关系型数据库中;并增加一个持久化处理;
医疗区块链系统充当搜索方,负责对区块链进行监听维护并处理链上的医疗数据,其链上医疗数据入库处理的步骤如下所示:(1)医疗区块链系统获取要处理的区块号N,然后将块中的交易存储在一个列表里面;
(2)判断交易列表是否为空列表,如果为空则返回步骤(1),否则执行步骤(3);
(3)获取列表中的所有交易,并以每笔交易作为一个单元执行步骤(4)~(5);
(4)获取交易中的交易哈希值H、input字段和交易在区块中的序号n,并对input字段解码成JSON格式的明文数据;
(5)将N、n、H以及JSON中的键值对按设计的文档格式存入到非关系型数据库中,接着判断是否还有未处理的交易,如果有则执行步骤(4),否则返回步骤(1);
S4:用户向搜索方请求搜索医疗记录,其搜索过程包括客户端缓存,数据库搜索,以及链上搜索;
用户通过智能合约输入搜索请求s并请求搜索方,搜索过程分三种情形:客户端缓存:用户每次搜索优先查找本地缓存有无要查询的数据;
数据库搜索:搜索方根据s中的条件通过数据库进行查询,并返回相应结果集;
链上搜索:由于链上数据入库操作过程发生故障或网络延迟等原因,区块链数据会持续更新,从而导致更新后的数据没有及时处理;搜索方会保留处理的最终区块高度HS5:对医疗区块链系统进行数据验证,包括数据库定期验证阶段和搜索结果验证阶段;
所述数据库定期验证阶段:医疗区块链系统通过存储在数据库中的区块信息,定期对数据库中的数据进行验证;
所述搜索结果验证阶段:医疗区块链系统将搜索结果进行分页供用户浏览查看,与此同时对所有结果进行分页验证;
两个阶段的验证具体包括以下步骤:
①从数据库获取每条医疗数据对应的字段信息,并将其拼接,然后计算其哈希值H(m);
②根据每份医疗数据对应的区块信息定位对应的交易位置;
③获取交易中存储的
当用户查看大空间的医疗数据时,还需要根据患者病历信息中的数据存储位置,从相应的医疗机构进行下载并生成哈希值,然后与患者病历信息中的数据哈希值进行对比,并判断是否被修改过。
2.根据权利要求1所述的可验证搜索方法,其特征在于,步骤S1中,医疗数据上传到区块链的规则是:首先判断数据的敏感性,并对敏感数据进行加密;其次判断数据的大小,对占用空间大或小的数据进行对应处理;最后将处理后的医疗数据作为附加的额外数据通过智能合约上传到区块链,生成一笔不可变的交易记录,医疗数据最终以十六进制的形式存储在交易的input字段中。
3.根据权利要求2所述的可验证搜索方法,其特征在于,步骤S1中,所述对占用空间大或小的数据进行对应处理,具体包括:把占用空间大的数据存储在医疗机构的本地云中,只将占用空间小的数据的哈希值和存储位置保存在链中;其中,哈希值是由上传到区块链中的医疗数据拼接并进行哈希得到的。
4.根据权利要求1所述的可验证搜索方法,其特征在于,步骤S2具体包括:使用一对一内嵌文档模型,一份电子医疗数据只对应一位患者,通过内嵌文档模型将四种信息作为单个文档内嵌在主文档中;其中,四种信息包括患者个人信息、医院的信息、患者病历信息和区块信息。
5.根据权利要求1所述的可验证搜索方法,其特征在于,步骤S4中,用户向搜索方请求搜索医疗记录,其搜索请求是以s={[tresultSet={id
其中,t