Software Contracts for Security§
Component-based software engineering is an approach for building complex systems from seperate components that interact via clearly defined interfaces. "Design by Contract" is a programming methodology that facilitates this approach by attaching executable specifications, called software contracts, to components to ensure that each component correctly interacts with the rest of the system.
Existing work on software contracts has focused almost exclusively on contracts for functional correctness. In my work, I explore how software contracts are also an effective mechanism for specifying and enforcing security properties.
By tracking and controlling the flow of information within an entire system, information-flow security can express and enforce strong and precise security policies with high assurance. My research on information flow has ranged from designing new type systems and enforcement mechanisms for policies like assured information erasure and progress-sensitive security to developing static analyses that make it easier to apply information-flow security to existing programs.
Logic programming is a programming paradigm where computations are declaratively specified as collections of logical relations. Logic programming excels at clearly defining search and inference problems. In my work, I have applied logic programming to simplify the development of programs for model-checking security properties and synthesizing disparate sources of provenance data.