1 Introduction
For 35 years or more, computer security researchers have explored techniques for ensuring that a software system correctly enforces its security policy, and that, as a result, the software exhibits a desirable security property [22]. A notable success toward this goal has been work on defining programming language-based techniques for enforcing information flow security policies [32]. A common form of information flow policy defines a set of security levels that can be ordered as a lattice, where sensitive data within a program is assigned a label derived from this lattice. Correct enforcement of this policy implies that a program exhibits some flavor of noninterference, which states that no information visible at level can be leaked onto a channel visible to level . By including the notion of a security label in a programming language's types, one can show that a correctly typed program is certain to enforce its security policy [41]. This approach has been implemented successfully in the Jif [10] and FlowCaml [30] languages.