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

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


                 据,可以及时地使用已经被写入区块链且合适的属性对其进行描述.虽然各机构所使用的是同一套属性标准,但
                 更加细化的属性对实体的描述也更加丰富,策略也可以根据需求自行制定.例如,C 的一条策略规则可以为
                   Permit←〈{s_ID≠NULL,s_Role=retailer,s_Level≥3,s_Name≠NULL},{r_Name=“product”,r_Level≤private},
                          {a=read},{e_Time between (9:00,17:30)}〉.
                 其中,s_ID,s_Name 由主体提供且不能为空;s_Role 为 retailer,r_Name 为“product”;s_Level 大于等于 3(3 级以上
                 零售商);r_Level 小于等于 private(private 或 public);操作为“read”; e_Time 在 9:00~17:30 区间内.如果访问请求
                 满足以上条件,那么授权为 Permit.


















                                          Fig.8    Relationship of supply chain institutions
                                                  图 8   供应链各机构关系
                    当 D 想要比较名为“product”的产品在 B,C 两家中间商的定价时,经过以下步骤获取资源访问权限.
                    步骤 1. D 机构用户发送跨域原始请求 NAR 给 D 机构的 PEP;
                    步骤 2. D 机构 PEP 调用 PIP Contract 请求属性结果集.
                    步骤 3. PIP Contract 以请求为输入在区块链中查询属性结果集.
                    步骤 4. PIP Contract 将查询到的属性结果集作为输出返回给 D 机构 PEP;
                    步骤 5. PEP 首先根据属性结果集将 NAR 构造为 AAR 如下:
                    AAR=〈{s_ID=2,s_Role=retailer,s_Level=4,s_Name=‘D’},{r_Name=“product”,r_Level=private},{a=read},
                         {e_Time=12:00,e_Location=“London”}〉.
                    如果 D 不希望公开请求,那么分别使用 B 机构、C 机构的公钥对 AAR 进行加密如下.
                    •   B:Transaction_Data(PK B ,PK B (AAR D )).
                    •   C:Transaction_Data(PK C ,PK C (AAR D )).
                    最后,按照请求类型事务格式将两个加密后的 AAR 封装为请求类型事务,先后经区块链网络广播.
                    区块链中的网络节点负责验证并转发该事务,共识节点负责将该事务打包进区块后广播;
                    步骤 6. B,C 机构跨域节点收到该事务,解析出 AAR,调用 PDP Contract,PDP Contract 会调用 PAP Contract,PIP
                 Contract 获得策略结果集和属性结果集进行访问控制判定并返回判定结果;
                    步骤 7.  B,C 机构跨域节点根据判定结果进行数据封装,如果结果是 Permit,则将 D 机构所请求的资源 url
                 链接用 D 的公钥加密,连同访问控制结果和 D 的公钥一并封装为响应事务的 Transaction_Data,如下所示.
                    •   B:Transaction_Data(PK D ,Permit,PK D (url B )).
                    •   C:Transaction_Data(PK D ,Permit,PK D (url C )).
                    最后,将所有数据封装为响应类型事务,经区块链网络广播;如果结果为 Deny,资源 url 为空.
                    区块链中的网络节点负责验证并转发该事务,共识节点负责将该事务打包进区块后广播;
                    步骤 8. D 机构 PEP 收到该响应后,解析得到访问控制结果和资源 url 密文,解密后进行资源访问;
   330   331   332   333   334   335   336   337   338   339   340