安全类型语言设计与抽象解释在语言安全中的应用
1. 安全类型语言基础
在安全类型语言的设计中,有一些基础的规则和概念。例如,存在如下的逻辑表达式规则:
- (R [p1, p2, …, pn] p = R (p1 ∧p2 ∧ … ∧pn) p)
- (R p [p1, p2, …, pn] = R p (p1 ∧p2 ∧ … ∧pn))
- (T [p1, p2, …, pn] = T (p1 ∨p2 ∨ … ∨pn))
以数据 true{R p1 [p2, p3]}{T [p1, p2]}
为例,它有两个安全策略。第一个是机密性策略,表明数据归 (p1) 所有,且 (p1) 允许 (p2) 和 (p3) 读取该数据;第二个是完整性策略,说明 (p1) 和 (p2) 都信任该数据。
传统的分散式标签表示如 {p1 : p2, p3; p2 : p3 ! p1, p2}
,而这里采用的表示 {R p1 [p2, p3]}{R p2 p3}{T [p1 p2]}
虽然稍显冗长,但在子类型化方面更容易指定其语义,并且可以通过指定子类型极性统一添加新的策略构造函数。
2. 作为子类型化的降级机制
语言中存在多种有意泄露信息的降级机制,主要包括:
1. 将某些数据降级到较低的标签。
2. 一个主体将权限委托给其他主体。
3. 一个主体将某些数据降级给其他主体以供读取。
4. 一个主体认可某些数据的完整性。
这里的创新之处在于将降级建模为子类型化。如果相关主体明确将权限引