fabric+cpabe加密的医疗数据共享代码(分级加密、多授权中心)

代码是关于基于fabric区块链的医疗数据共享系统,具体的代码放在了github上:链接

一、功能介绍

在这里插入图片描述

  1. 产生数据:个人在医院就诊、健康中心体检、使用监测手环时均会产生大量健康医疗数据,在经过个人同意的前提下,机构对这些数据进行采集和处理。
  2. 数据存储:机构对数据进行分级,按照个人设置的访问控制策略,使用分级加密算法的加密步骤对数据进行加密并存储。
  3. 数据注册:机构将数据信息(包括数据描述、加密密钥、相关机构、相关个人、访问控制策略和数据地址等)上传至数据共享平台,平台计算出数据价值,并将数据信息和数据价值存储至区块链上。
  4. 密钥申请:使用者在加入数据共享平台时,可以根据自身属性(如医院、保险机构等)向数据平台申请密钥,属性授权机构验证其身份后,使分级加密算法的密钥生成方法生成对应密钥,并向使用者发送。
  5. 数据请求:使用者在共享平台检索数据,向平台发送数据请求,平台收到请求后向使用者返回数据信息,扣除使用者贡献点,奖励各参与方贡献点,并记录此次数据共享。
  6. 数据发送:使用者收到数据信息后,根据数据地址获取密文数据,使用分级加密算法的解密步骤解密密文。
  7. 使用日志查询:个人和机构可以通过向共享平台发送请求来查询数据使用情况。
    注:分级加密算法在3.2节有介绍

一、运行步骤

以阿里云环境,介绍代码具体使用:

  1. 首先要把fabric1.4环境装好,具体可以见这个博客
  2. 进入阿里云后,下载代码到文件夹
  3. 每次重新启动阿里云服务器都需要注释下面这句话,否则网络会启动失败
vi /etc/resolv.conf
# 注释掉下面这句话
options timeout:2 attempts:3 rotate single-request-reopen
  1. 清理环境,为防止之前启动的容器和网络影响这次运行,首先要删除之前的容器和网络,进入目录medical-data后:
# 查看容器
docker ps
# 清理容器 
docker rm -f $(docker ps -aq) # 或者直接调用  ./stopFabric.sh
# 查看网络
docker network ls
# 清理网络
docker prune
  1. 进入目录medical-data,执行启动脚本
./startFabric.sh java
  1. 启动区块链网络的时候,可以通过下面这个命令查看所有容器的日志,最好是另外打开一个窗口看日志

进入目录commercial-paper/organization/magnetocorp/configuration/cli,输入下面的命令,可以同时汇总并监视各个容器的日志

./monitordocker.sh net_byfn
  1. 当出现下面这段话后,说明区块链网络启动成功,而且链码安装并初始化成功

在这里插入图片描述
这个网址可以看到数据库,最下面就是我们新建的目录,链码在初始化的时候,创建了100个用户
在这里插入图片描述

  1. 启动http服务端
cd java
mvn test

这样就是服务端启动成功了
在这里插入图片描述

  1. http服务端启动成功之后,可以通过客户端直接访问服务端,所有方法都是通过 POST方法访问

访问方法有两种:
1. 第一种是直接通过输入url访问,如下图:
在这里插入图片描述
2. 第二种是通过代码访问,具体代码在medicalDataSharing\fabric\scripts\fabric-samples\medical-data\java\src\main\java\org\example\HttpClient.java,把url替换成自己阿里云的url就可以了,直接运行main函数,main函数把每一种请求都写了一遍,可以按需调用,不需要的注释掉就可以了

下图是运行了创建用户的方法,返回了用户的id是100

在这里插入图片描述

三、代码介绍

代码是关于基于fabric区块链的医疗数据共享系统,系统中主要有两个模块,加密魔模块和区块链模块:


在这里插入图片描述

1. 区块链模块介绍

区块链有分为两个组织,共识机制采用的是kafka
在这里插入图片描述

2. 加密模块介绍

加密使用的是cp-abe,是在此人源码的基础之上,加了三个功能:

  1. 对文件分级解密

将访问策略分为两级,低敏感数据的访问策略对应最左边树,高敏感数据访问策略对应中间的树,将他们合并为最右边的访问树,根节点使用2of2连接。合并之后,以根节点为根的树是高敏感访问树,以左孩子节点为根的树是低敏感访问树。有时候也可以合并为根节点是1of2,这时以根节点为根的树是低敏感访问树,以左孩子节点为根的树是高敏感访问树。
在这里插入图片描述

  1. 将属性授权中心拆分成两个,分别为属性验证中心和密钥生成中心以避免密钥托管,两个中心交互生成用户私钥,其实应该这两个授权中心放在两个节点上,但为了方便,我把它还是放在一个节点上
  2. 在密钥生成过程中,加入用户生成的随机数,授权中心返回给用户的是伪密钥,只有用户知道随机数,可以把它恢复成真实密钥

整个加密步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时序图:
在这里插入图片描述

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值