Refinement types for secure implementations
Top Cited Papers
Open Access
- 1 January 2011
- journal article
- research article
- Published by Association for Computing Machinery (ACM) in ACM Transactions on Programming Languages and Systems
- Vol. 33 (2) , 1-45
- https://doi.org/10.1145/1890028.1890031
Abstract
We present the design and implementation of a typechecker for verifying security properties of the source code of cryptographic protocols and access control mechanisms. The underlying type theory is a λ-calculus equipped with refinement types for expressing pre- and post-conditions within first-order logic. We derive formal cryptographic primitives and represent active adversaries within the type theory. Well-typed programs enjoy assertion-based security properties, with respect to a realistic threat model including key compromise. The implementation amounts to an enhanced typechecker for the general-purpose functional language F#; typechecking generates verification conditions that are passed to an SMT solver. We describe a series of checked examples. This is the first tool to verify authentication properties of cryptographic protocols by typechecking their source code.Keywords
Funding Information
- Engineering and Physical Sciences Research Council (EP/E044956/1)
This publication has 63 references indexed in Scilit:
- Verified interoperable implementations of security protocolsACM Transactions on Programming Languages and Systems, 2008
- Lambda-RBAC: Programming with Role-Based Access ControlLogical Methods in Computer Science, 2008
- A type discipline for authorization policiesACM Transactions on Programming Languages and Systems, 2007
- Analyzing security protocols with secrecy types and logic programsJournal of the ACM, 2005
- Information flow inference for MLACM Transactions on Programming Languages and Systems, 2003
- Extended static checking for JavaACM SIGPLAN Notices, 2002
- Secrecy by typing in security protocolsJournal of the ACM, 1999
- Subtypes for specifications: predicate subtyping in PVSIEEE Transactions on Software Engineering, 1998
- Reasoning about programs in continuation-passing styleHigher-Order and Symbolic Computation, 1993
- Protection in programming languagesCommunications of the ACM, 1973