文献|可追责的医疗属性通行证访问控制方案(AMAP)
韩刚,王嘉乾,罗维,等. 公共卫生事件中医疗数据访问控制与安全共享研究[J]. 信息安全学报,2023,8(1):40-54. DOI:10.19363/J.cnki.cn10-1380/tn.2023.01.04.
1.问题
- 传统医疗系统中,数据信息由不可信第三方进行保管,不可信第三方可能对数据进行任意地伪造、篡改和泄露。
- 信息系统没有细粒度的访问控制、权限没有精细划分。
- 医疗信息系统访问过程不透明、不可溯源,若发生信息被攻击的情况,无法有效追责。
2.贡献
- 在基于属性访问控制的基础上,引入属性访问通行证,使主体在限定时间内进行访问时,无需再次对属性和访问控制策略进行匹配,保证访问控制完整性严密性的前提下减小开销。
- 将访问控制与区块链结合,解决数据不可篡改、访问公开透明、访问过程不可溯源的问题。
- 由于医疗系统的区块链为联盟链,不使用传统的POX系列共识算法,使用实用拜占庭容错算法,以实现通过较少节点便可以达成共识的目的。
3.基础知识
3.1 实用拜占庭容错算法
拜占庭将军问题提出后,有很多的算法被提出用于解决这个问题。这类算法统称为拜占庭容错算法(BTF:Byzantine Fault Tolerance)。它不是一个具体的算法,而是能够抵抗拜占庭将军问题导致的一系列故障的系统属性。这意味着即使某些节点出现缺点或恶意行为,拜占庭容错系统也能继续运转。
本质来说,拜占庭容错方案就是少数服从多数。
实用拜占庭容错算法(PBFT)实现了在有限个节点的情况下的拜占庭问题,有3f+1的容错性(拜占庭将军问题也只有在节点数N>3f时可解),并保证一定的性能。其采用了密码学相关技术(RSA签名、MAC、Hash)确保消息传递过程无法被篡改和破坏。
3.1.1 3f+1?
3f+1指的是总节点数至少为4。先来看看节点数为3,其中有一个叛徒的情况。
B(接收者)是叛徒:
A(发令者)是叛徒:
最后的结果中,总有节点为(0,1),即投票1:1,造成不能决断。
现在来看看4个节点,其中有一个是叛徒的情况。
C(接收者)是叛徒:
A(发令者)是叛徒:
最后,少数服从多数,都会达成一致。
证明:
- 假设有n个节点,其中有f个叛徒,那么忠臣就有n-f个
- 必须在n-f个状态复制机(接受的消息)的沟通内,就要做出决定(因为要考虑到叛徒不会发消息的情况)
- 但是收到的n-f个消息也不一定都是真的,有可能在做出决定时收到的都是叛徒的消息(叛徒比较勤快),那么n-f个消息中就有f个假的
- 那么就有n-f-f个真消息,需要保证n-f-f>f即n>3f
综上,当恶意节点为f时,只要总节点数≥3f+1,便可以达成共识的达成。
3.1.2 算法流程
开始阶段
- PBFT算法中节点有两种角色:主节点(primary)和副本(replica),即上述发令者和接收者,两种角色可以互换
- 两者的转换引入了视图(view)的概念,起到逻辑时钟的作用
- 确定主节点:p = v mod n计算
请求
- 客户端(c)发送request消息给主节点p(图中的0)
- 消息结构:
<REQUEST,o,t,c>
o
:请求的具体操作t
:追加的时间戳c
:客户端标识
预准备
- 主节点收到客户端发送来的消息后,构造
pre-prepare
消息结构体,广播到集群的其他节点(图中1、2、3) - 消息结构:
<<PRE-PREPARE,v,n,d>,m>
v
:当前视图编号n
:主节点广播消息的唯一递增序号d
:m
的消息摘要m
:客户端发来的消息
准备
- 副本收到主节点请求后,会对消息进行检查,检查通过后会将消息存储在本节点,并且变更自身状态到
PREPARE
状态。状态变更完成后,节点广播消息。 - 消息结构:
<<PREPARE,v,n,d,i>>
- i:本节点的编号
- 对消息的有效性检查如下:
- 检查消息体中的摘要
d
,是否和自己对m
生成的摘要一致,确保消息的完整 - 检查
v
是否和当前v
一致 - 检查序号
n
是否在水线h
和H
之间,避免快速消耗可用序号 - 检查之前是否接受过相同序号
n
和v
,但是不同摘要d
的消息
- 检查消息体中的摘要
提交
- 副本收到2f+1(包括自己)个一致的
PREPARE
消息后,会进入COMMIT
阶段,并且广播消息给集群中的其他节点 - 在收到
PREPARE
消息后,副本同样也会对消息进行有效性检查,检查内容同准备阶段 - 消息结构:
<COMMIT,v,n,D(m),i>
回复
副本收到2f+1(包括自己的)个一致的COMMIT
个消息后执行m
中包含的操作,其中,如果有多个m
则按照序号n
从小到大执行,执行完之后发送执行成功的消息给客户端。
4.系统流程
4.1 通行证申请
- 属性发布方AP将所需所有属性上传至令牌属性管理中心TAMC,TAMC整合所有属性发送到日志部署点LDP,LDP将属性上传至日志链LC,保证所有属性透明公开。
- 当主体S申请属性通行证时,S将自己的个人信息上传至TAMC,TAMC对主体信息进行匹配,生成相应的属性通行证token
- S将个人信息上传至密钥分发中心KDC,KDC生成对应的公私钥,将私钥给S,公钥给TAMC
- TAMC生成token后,利用S的公钥对token进行加密并发送给S,同时,TAMC将整个申请过程以及生成通行证的token_id生成日志,并将日志发送到部署点LDP中
4.2 客体上传
- 数据拥有者DO首先将所拥有的客体O上传至数据库服务器DB中,DB接收到客体O之后,对O进行hsah,生成客体摘要OH(Object Hash),然后将OH与客体存储地址A发送给数据拥有者DO,DO拿到OH和A后,将数据D上传至数据部署点DDP,DDP将D上传至客体链OC中。
- DO将访问控制策略ACS上传到策略管理点PAP,PAP对策略进行整合并将其发送到策略部署点PLA,策略部署点PLP将ACS部署到OC上
4.3 访问授权
- S将通行证上传至策略执行点PEP,PEP对token进行验证,并记录下token_id
- PEP将token发送给策略决策点PDP,PDP首先判断token_type,然后将token_type上传至策略管理点PAP,PAP根据具体的属性信息匹配ACS,将匹配到的访问控制策略ACS发送给PDP
- PDP将属性信息与对应的访问控制策略ACS发送到访问授权点AAP,AAP根据接收到的属性和访问策略ACS生成的访问凭据access,并将访问凭据access上传至策略执行点PEP。PEP将访问凭据access发送给S和日志部署点LDP。最后由LDP将访问授权日志AAL和访问凭证access部署到日志链LC上。
4.4 访问
- S将access上传到数据服务器DB中,DB对访问凭据access进行验证并判断验证结果,成功则返还对应客体O,反之则拒绝访问请求。
- 数据库服务器DB将访问凭据标识符access_id进行记录,并上传日志部署点LDP,LDP继续上链。
5.智能合约实现
5.1 日志部署点LDP
以智能合约的方式在通行证申请阶段、访问授权阶段以及访问阶段发挥作用。
- 通行证申请阶段
begin |
- 访问授权阶段
begin |
- 访问阶段
begin |
5.2 数据部署点DDP
DDP以智能合约的方式在客体上传阶段发挥作用。
begin |
5.3 策略部署点PLP
策略部署点PLP以智能合约的方式在客体上传阶段发挥作用。
begin |
5.4 策略执行点PEP
策略执行点PEP以智能合约的方式在访问授权阶段发挥作用,分别在主体S发送上传通行证以及访问授权点AAP将访问凭据access发送给策略执行点PEP的条件达成时,PEP接收访问凭据access并实现对应功能,具体过程如下:
- S发送token时
begin |
- AAP 发送访问凭据 access
当访问授权点AAP发送访问凭据access的条件达成时,PEP 首先得到 access,然后将access发送给主体S以及日志部署点LDP。