We have built a secure compilation chain for C components based on CompCert and several smaller prototype compilation chains targeting a tagged architecture and software-fault isolation (Challenge #1, WP1 and WP3; Challenge #3, WP4). As originally planned, we used a combination of machine-checked proofs and property-based testing in Coq to provide high confidence that our compilation chains are indeed secure (Challenge #6; WP1-3, 6, 7). Achieving this required going significantly beyond the state of the art, by overcoming major conceptual challenges (detailed in the following section).
In addition to solving these main conceptual challenges, our project had several other important results:
- In addition to compartmentalization, we also proposed novel formal characterizations for the end-to-end security guarantees provided by memory safety, both heap safety and stack safety (Challenge #2, WP2).
- We built a prototype achieving secure interoperability between subsets of F* and ML, and we formally proved in F* that it achieves a variant of secure compilation (Challenge #5; WP6 and WP7).
- We extended the F* verification system with Dijkstra monads, monadic reification, monotonic state, tactics, and relational reasoning. We also built an extraction mechanism from a subset of F* called Low* to C (WP7), which opens the way for further integration with our secure compilation chain for C.
- We studied the safe interoperability between code respecting a strong static typing discipline and dynamically typed code. In particular, we contributed to a better understanding of gradual typing, parametricity, and their combination (Challenge #5, WP1-3, 6 , 7).
- We introduced SSProve, a general verification framework for structuring game-based cryptographic proofs in a modular way, by exploiting the compositional nature of protocols such at TLS (WP8).
- We introduced Luck, a new domain-specific language for property-based generators, and integrated the main innovations into QuickChick, our property-based testing framework for Coq (Challenge #6; WP1-3, 6, 7).
Our achievements have resulted in many research papers at top-tier conferences in programming languages (POPL, ICFP, ESOP, OOPSLA, PLDI) and security (CCS, CSF), and five of these papers have received distinguished paper awards. Our software and machine-checked proofs are available on GitHub.