访问代码控制
随着分布式计算的不断发展，传统的基于角色的安全性模型已无法满足分布式安全的要求。
根据代码访问安全性，这里介绍一种基于证据的代码访问控制 ( EBCAC) 模型，并给出了它的一种形式化描述，该模型能实现对系统更低层次的访问控制，也就是能够从较低的代码层次和用户角色层次上进行访问控制。
Access code control
基于角色和证据
对系统代码的授权管理的支持
组成应用程序的各组件通常来自于完全不同的组织，所以 的不同可能要求不同的信任度。
用组件动态组成的系统具有独特的安全需求。
针对这种安全需求，有人提出了多种改进模型，试图在分布式环境下实现传统的角色访问控制，但这些方案大都有以下缺陷:
1) 无法解决引诱攻击问题。
来自被信任组织的组件可能需要访问敏感资源，而这些资源正常情况下需要得到保护以防止恶意代码访问。
而引诱攻击经常通过欺骗受信任的组件对敏感资源进行调用，或以低信任度组件调用高信任度组件的方式来获得合法代码的，以此访问敏感资源。
2) 角色分配困难。
有的代码，例如可移动代码可以由任意数量的用户下载和执行，而这些用户在开发时都是不了解的，因此身份无法判断，角色也就无从分配。
仅仅关心谁在运行代码的RBAC 安全模型已经不再满足要求。
EBCAC 思想最早来源于微软.NET战略中提出的代码访问安全性 (CAS) 。
这样在某个用户可以获得信任以访问某个资源的情况下，如果执行的代码不受信任，那么访问资源将被拒绝。
经过以上归纳，给出基于证据的抽象模型，并利用集合和关系的概念，给出一种简单的形式化解释。
程序集 A:程序集是 加载并运行的组织单元。
定义为一个多元组 (AId , Ver , Ds ,PK):其中 AId 是程序集标识 (即它的简单文本名称) ，Ver 是程序集的版本号，Ds 是发行者根据该程序集生成的 ，PK是与"用于创建数字签名的私钥"相对应的 ，用于验证数字签名。
由于程序集由标识、版本号组成并通过公钥和数字签名加强，这样可确保程序集版本，且发行者的身份得到确认，代码内容不被篡改。
证据集 E = { e 1， e 2 ， …， en}，ei 是一条证据， ei 定义为一个二元组 ( EType，MShip)，其中 EType 表示证据类型的集合，EType = { Id , Source}，MShip 是证据成员资格条件的 。
权限集 P:定义为一个二元组 (Ob，Op)，其中Ob(Objects) 是系统中的，客体是一种可识别的信息实体，如、目录、服务等，一个客体可以包含另外一个客体，如 owner，group name 等。
a. EvSet = a. EvSet + {e}
a. EvSet = a. EvSet - {e}
规则 3. 给证据 e 添加一条新的成员资格条件mship;
e. Mship = e. Mship + {mship}
e. EType = e. EType + {etype}
规则 4. 删除证据e的一条成员资格条件mship;
e. EType = e. EType - {etype}
EBCAC系统分为请求 、角色分配、代码预处理、安全策略、权限计算、安全审核等 6 个模块:
1.请求预处理模块
2.用户角色分配模块
该模块根据用户的身份分配角色，并根据角色分配用户的 。
4.安全策略模块
安全策略模块中定义的是安全策略，可以由 配置。
它和程序集的证据一起构成了权限计算模块的两个输入。
其核心为 级别和代码组树。
1) 安全策略
安全策略是一组由管理员事先配置好的规则，在决定允许 执行的操作时遵循此规则。
安全策略级别表示管理责任中的不同领域。
策略级别反映的是真实企业中存在着安全区域和分层管理的模型。
我们把策略级别从外到内划分为 4 个:企业级、机器级、用户级、应用程序级，各级别允许设定不同的管理员。
这种责任划分允许由企业的管理人员设置整个企业范围内的策略;而由本地的系统管理员来设置单独影响一台机器的策略，且允许不同级别的管理员对同一程序集分配不同的权限，这与现实企业安全情况一致。
3) 代码组树
代码组是运行库安全策略中的关键组件，由用户定义，它们对程序集进行分类，并设置相应的权限。
记作 f : Mship → Y 。
通过代码组可以给满足条件的程序集分配权限。
由于安全策略从外到内被分为四个层次，权限的具体计算方法是 :在同一个策略级别内部，求出所有满足成员资格条件的代码组的对应权限集，然后求它们的并集。
这样求出各个策略级别的权限集，然后计算最终的权限:最终的权限为各策略级别下程序集获得权限集的交集，只包含所有策略级别都允许的权限。
5.安全审核模块
安全审核模块执行 审核功能，检查敏感资源的调用者及其上游的间接调用者是否有足够的访问权限。
其核心是调用 ，每层中存放访问敏感资源的程序集及其上游所有函数的相关状态信息及所拥有的权限。
每层都要检查程序集要求的权限集、EBCAC 赋予程序集的权限和赋予用户角色的权限是否有冲突之处，只有当所有调用者都有访问该资源的足够权限时，才允许代码访问系统资源，如果发现有一个调用者没有足够权限，就交给异常机制处理并拒绝访问资源。
EBCAC 的最大特点在于，它实现了对更低层次 ---的授权管理的支持。
传统的RBAC 安全控制着重对及其担当的角色进行授权管理，在环境下，用户的角色的重要性已经发生很大的变化，单靠RBAC 已经无法对 进行有效控制，而 EBCAC 从根本的代码入手，根据代码身份实现授权管理。
EBCAC 的另一特点在于:安全策略及其级别的定义真实地反映了企业的安全区域和分层管理的实际情况，使系统管理员可在与企业业务管理相类似的层次上控制低层的代码访问。
EBCAC 不仅实现企业级、机器级等粗粒度的控制，还能实现用户级、程序级等细粒度代码控制。