[摘要] 本文分别从静态和动态两个方面深层次剖析了控制策略,主要从动态控制方法主要从执行和编译两个方面分析,尤其深层次研究了基于执行机制的隐式信息流问题,提出利用栈和队列把隐式转换为显式信息流策略,提出了链队列的思想。

[关键词] 访问控制 静态策略 动态策略 隐式信息流

一、静态的访问控制策略

1.访问控制矩阵

最经典的描述保护系统的方法是访问控制矩阵,它也是计算机安全中的最基本的抽象表示方法。如下图

2.访问控制表

将访问控制矩阵中所有客体所代表的列存储下来就构成了访问控制表。这样每一个客体就与一个序对的集合相关联,而每一序对包含一个主体和一个权限的集合,指定的主体就可以使用这些权限来访问相关联的客体。则图对应的访问控制表为:

acl(file1)={(process1,rwo),(process2 ,a)}
acl(file2)={(process1,r),(process2,ro)}
acl(process1)={(process1,rweo),(process2,r)}
acl(process2)={(process1,w),(process2,rweo)}

3.能力表

概念上能力表就像访问控制矩阵的行。每一个主体都与一个序对集合关联,每一序对都包含一个客体一个权限集合。与此表关联的主体能够根据序对中指示的权限访问序对中的客体。如图1中对应的能力表为:

cap(process1)={(file1,rwo),(file2,r),(process1,rweo),(process2,w)}
cap(process2)={(file1,a),(file2,ro),(process1,r),(process2,rweo)}

静态访问控制策略还有锁与钥匙和基于环的访问控制两种方法。

二、动态访问控制策略中的信息流控制

1.基于编译器的机制

基于编译器的机制目的是检验程序中的信息流是否经过授权。

2.基于执行的机制

基于执行的机制的目标是防止信息流违反安全策略。假设赋值语句If x=1theny:=a 的显式安全验证条件是x≤y,则当x≠1时,而x=high而y=low的情况下就会导致信息从x流向了y,造成了隐式安全信息流的发生即没有判断出x≠1是不符合信息流策略的。解决的方法是引入程序计数器(pc)。

3.基于栈和队列的机制――隐式信息流解决方法

定义五种指令含义:

(1)x:=x+1 等价于if pc ≤x then x:=x+1;else skip

(2)条件语句

if x=0 then goto n else x:=x-1等价于
if x=0 then {push(pc,pc),pc:=lub(pc,x);pc:=n;}
else{if pc≤x then {x:=x-1;} else skip}

(3)return 语句相当于pop(pc,pc)返回给最后一个if语句之后的那个语句。

(4)分支语句

if’x=0 then goto n else x:=x-1等价于
if x=0 then { if x≤pcthen {pc:=n;} else skip }
else{ if pc≤x then {x:=x-1;} else skip }

①栈与程序

push(x,x)表示将变量x及安全类型 x压入栈中,而pop(x,x)表示从程序栈中弹出栈顶数据及安全类型。

根据以上的规则下列程序假设x=1,y=0,z=0在下列程序中用栈的形式来表示出来如下表,以达到把隐式信息流转变成显式信息流的目的。

②链队列与程序

同样可以用链队列的形式表示出来。把每一个元素分为三部分:变量和安全级别以及指针。同样假设x=1,y=0,z=0。初始队列由x、y、z、pc组成,随着程序的运行把元素和安全类别插入队列中,pc的变化只跟程序分支有关系,即程序的分支对pc赋值。每当队列中插入或者删除元素时都要判定pc的安全级别。删除的元素变量参与运算。

参考文献:

[1](美)S.巴斯朱洪译:计算机算法:设计和分析引论.上海:复旦大学出版社,1985

[2]严蔚敏吴伟民:数据结构.北京:清华大学出版社,2002,2

[3](美)MattBishop:计算机安全学―安全的艺术与科学.王立斌译.北京:电子工业出版社,2005