Page 332 - 《软件学报》2021年第5期
P. 332
1556 Journal of Software 软件学报 Vol.32, No.5, May 2021
End
(1) 策略信息合约 PIP Contract
在 ABAC 模型中,策略信息点 PIP 用于提供实体的各种属性和属性关系.在本文所描述的模型中,属性和属
性关系用区块链进行存储,以此来保障属性和属性关系的可信性.而 PIP Contract 主要作用为 PEP,PDP 提供属
性查询功能.为方便表示,做如下定义:
定义 1. 属性(Attr)是具有指定数据类型和值域的变量,本文使用 xAttr,x∈{s,r,a,e}分别表示主体属性、资源
属性、操作属性、环境属性;用 xAttr_Set,x∈{s,r,a,e}分别表示主体、资源、操作、环境属性集.用 xAttrVp=
〈xAttr∝attrValue〉,x∈{s,r,a,e},∝∈{>,<,=,≥,≤,≠,in,not in,between}表示属性名和属性值之间的关系,称为属性名
值对.用 xAttrVp_Set,,x∈{s,r,a,e}分别表示主体、资源、操作、环境属性名值对集合.
PIP Contract 伪代码如下所示:
算法 2.
输入:属性查询请求(attributeRequest).
输出:属性结果集(Attribute_ResultSet).
Begin
xAttr_Set=attributeRequest.xAttr_Set;
//创世块序号为 0,从序号为 1 的区块开始查询
for (i=1; i<blocks.length; i++){
//判断属性结果集中的属性是否包含请求属性集中的所有元素:若包含,则说明属性均已找到
if (attribute_ResultSet.contain(xAttr_Set))
break;
//使用布隆过滤器判断该属性是否可能在此区块中
flag=bloomfilter(xAttr_Set,currentBlock);
if (flag=1){
//从当前区块中序号为 0 的事务数据开始查询
for (j=0; j<blocks[i].trans_Data_Length; j++){
if (blocks[i].trans_Data[j].Transaction_Type=‘A’){
if (xAttr_Set.contain(blocks[i].trans_Data[j].Transaction_Data)){
attribute_ResultSet.add(blocks[i].trans_Data[j]);
}else continue;
}else continue;
}//end for
} else continue;
}//end for
return Attribute_ResultSet;
End
(2) 策略管理合约 PAP Contract
在 ABAC 模型中,策略管理点 PAP 用于对访问控制策略的管理和整合.PAP 根据 PDP 所提供的 AAR 查询
符合要求的访问控制策略,并将这些访问控制策略整合为策略集发送回 PDP 进行策略判决.在本文所述模型中,
访问控制策略由各安全域根据各自的安全需求,使用标准化、统一的细粒度属性信息进行描述,按照访问控制
策略事务数据格式封装后,发布到区块链中,由区块链进行存储,以此来保障策略的公开性和可信性.而 PAP
Contract 为 PDP Contract 提供策略查询功能.为方便描述,做如下定义:
定义 2. 属性的访问请求(AAR)由主体、资源、操作、环境的属性名值对集合构成,用四元组表示如下: