Page 333 - 《软件学报》2021年第5期
P. 333

张建标  等:一种基于区块链的域间访问控制模型                                                         1557


                                      AAR=〈sAttrVp_Set,rAttrVp_Set,aAttrVp_Set,eAttrVp_Set〉.
                    四元组中,sAttrVp_Set 表示主体属性名值对集合,rAttrVp_Set 表示资源属性名值对集合,aAttrVp_Set 表示操
                 作属性名值对集合,eAttrVp_Set 表示环境属性名值对集合.
                    AAR 的含义为:“属性为 sAttrVp_Set 的主体在环境属性 eAttrVp_Set 条件下,对资源 rAttrVp_Set 进行
                 aAttrVp_ Set 的操作请求”.
                    定义 3.  访问控制策略(Policy)定义了对资源进行特定操作所需要的属性集合.用三元组表示如下:
                                          Policy←〈pAttr_Set,Rule,CombiningAlgorithm〉.
                    三元组中,pAttr_Set 表示策略的属性集合,Rule 表示规则集合,CombiningAlgorithm 表示合并算法.
                    pAttr_Set 用四元组表示如下:
                                         pAttr_Set=〈sAttr_Set,rAttr_Set,aAttr_Set,eAttr_Set〉.
                    四元组中,sAttr_Set 表示主体属性集合;rAttr_Set 表示资源属性集合;aAttr_Set 表示操作属性集合; eAttr_Set
                 表示环境属性集合,用来判断该策略是否满足请求.
                    Rule 表示规则集合:Rule={rule_1,rule_2,…,rule_n},其中,rule_n 表示第 n 条规则.rule 用四元组表示如下:
                                   rule=Result←〈sAttrVp_Set,rAttrVp_Set,aAttrVp_Set,eAttrVp_Set〉.
                    四元组中,sAttrVp_Set 表示主体属性名值对集合,rAttrVp_Set 表示资源属性名值对集合,aAttrVp_Set 表示操
                 作属性名值对集合,eAttrVp_Set 表示环境属性名值对集合.Result 表示规则的判决结果,Result∈(Permit,Deny)
                    CombiningAlgorithm 为用来解决策略冲突的合并算法,用来解决规则集判定冲突问题.
                    PAP Contract 伪代码如下所示.
                    算法 3.
                    输入:AAR.
                    输出:策略结果集(Policy_ResultSet).
                    Begin
                    rAttrVp_Set=AAR.rAttrVp_Set;
                    //创世块序号为 0,从序号为 1 的区块开始查询
                    for (i=1; i<blocks.length; i++){
                    //使用布隆过滤器判断包含该属性的策略是否可能在此区块中
                    flag=bloomfilter(rAttrVp_Set,currentBlock);
                    if (flag=1){
                    //从当前区块中序号为 0 的事务记录开始查询
                    for (j=0; j<blocks[i].trans_Data_Length; j++){
                      if (blocks[i].trans_Data[j].Transaction_Type=‘P’){
                        if (rAttrVp_Set.contain(blocks[i].trans_Data[j].
                          Transaction_Data(pAttr_Set.rAttr_Set))){
                          Policy_ResultSet.add(blocks[i].trans_Data[j]);
                            }else continue;
                          }else continue;
                        }//end for
                      }else continue;
                    }//end for
                    return Policy_ResultSet;
                    End
   328   329   330   331   332   333   334   335   336   337   338