Guiding a General-Purpose C Verifier to Prove Cryptographic Protocols
Open Access
- 1 June 2011
- conference paper
- Published by Institute of Electrical and Electronics Engineers (IEEE)
- Vol. 520 (10636900) , 3-17
- https://doi.org/10.1109/csf.2011.8
Abstract
We describe how to verify security properties of C code for cryptographic protocols by using a general-purpose verifier. We prove security theorems in the symbolic model of cryptography. Our techniques include: use of ghost state to attach formal algebraic terms to concrete byte arrays and to detect collisions when two distinct terms map to the same byte array, decoration of a crypto API with contracts based on symbolic terms, and expression of the attacker model in terms of C programs. We rely on the general-purpose verifier VCC, we guide VCC to prove security simply by writing suitable header files and annotations in implementation files, rather than by changing VCC itself. We formalize the symbolic model in Coq in order to justify the addition of axioms to VCC.Keywords
All Related Versions
This publication has 20 references indexed in Scilit:
- Efficient Symbolic Execution for Analysing Cryptographic Protocol ImplementationsPublished by Springer Nature ,2011
- Refinement types for secure implementationsACM Transactions on Programming Languages and Systems, 2011
- Local Verification of Global Invariants in Concurrent ProgramsPublished by Springer Nature ,2010
- From Total Store Order to Sequential Consistency: A Practical Reduction TheoremPublished by Springer Nature ,2010
- Verified interoperable implementations of security protocolsACM Transactions on Programming Languages and Systems, 2008
- Implementing a Formally Verifiable Security Protocol in Java CardPublished by Springer Nature ,2004
- A composable cryptographic library with nested operationsPublished by Association for Computing Machinery (ACM) ,2003
- Prudent engineering practice for cryptographic protocolsIEEE Transactions on Software Engineering, 1996
- On the security of public key protocolsIEEE Transactions on Information Theory, 1983
- Using encryption for authentication in large networks of computersCommunications of the ACM, 1978