Deductive verification of cryptographic software

We apply state-of-the art deductive verification tools to check security-relevant properties of cryptographic software, including safety, absence of error propagation, and correctness with respect to reference implementations. We also develop techniques to help us in our task, focusing on methods oriented towards increased levels of automation, in scenarios where there are clear obvious limits to such automation. These techniques allow us to integrate automatic proof tools with an interactive proof assistant, where the latter is used off-line to prove once-and-for-all fundamental lemmas about properties of programs. The techniques developed have independent interest for practical deductive verification in general.

[1]  Nick Benton,et al.  Simple relational correctness proofs for static analyses and program transformations , 2004, POPL.

[2]  K. Rustan M. Leino,et al.  A semantic approach to secure information flow , 2000, Sci. Comput. Program..

[3]  Thomas A. Henzinger,et al.  Lazy abstraction , 2002, POPL '02.

[4]  Bart Jacobs,et al.  Java Program Verification Challenges , 2002, FMCO.

[5]  Martijn Warnier,et al.  Non-interference in JML , 2005 .

[6]  Sriram K. Rajamani,et al.  The SLAM project: debugging system software via static analysis , 2002, POPL '02.

[7]  Pedro R. D'Argenio,et al.  Secure information flow by self-composition , 2004, Proceedings. 17th IEEE Computer Security Foundations Workshop, 2004..

[8]  K. Rustan M. Leino,et al.  The Spec# Programming System: An Overview , 2004, CASSIS.

[9]  Alexander Aiken,et al.  Secure Information Flow as a Safety Problem , 2005, SAS.

[10]  Anindya Banerjee,et al.  Stack-based access control and secure information flow , 2005, J. Funct. Program..

[11]  Andrew C. Myers,et al.  Language-based information-flow security , 2003, IEEE J. Sel. Areas Commun..

[12]  BanerjeeAnindya,et al.  Stack-based access control and secure information flow , 2005 .

[13]  Peter J. Denning,et al.  Certification of programs for secure information flow , 1977, CACM.

[14]  Claude Marché,et al.  The Why/Krakatoa/Caduceus Platform for Deductive Program Verification , 2007, CAV.

[15]  Jacek Chrząszcz Implementation of Modules in the Coq System , 2003 .

[16]  Daniel Leivant Logical and mathematical reasoning about imperative programs: preliminary report , 1985, POPL '85.

[17]  Peng Li,et al.  Downgrading policies and relaxed noninterference , 2005, POPL '05.

[18]  J. Filliâtre,et al.  ACSL: ANSI/ISO C Specification Language , 2008 .

[19]  Andrew C. Myers,et al.  Enforcing Robust Declassification and Qualified Robustness , 2006, J. Comput. Secur..

[20]  Bart Jacobs,et al.  JML (poster session): notations and tools supporting detailed design in Java , 2000, OOPSLA '00.

[21]  Stan Matwin,et al.  Privacy-Sensitive Information Flow with JML , 2005, CADE.

[22]  Rupak Majumdar,et al.  Software model checking , 2009, CSUR.

[23]  Steve Zdancewic,et al.  A Design for a Security-Typed Language with Certificate-Based Declassification , 2005, ESOP.

[24]  Geoffrey Smith,et al.  A Type-Based Approach to Program Security , 1997, TAPSOFT.

[25]  David A. Naumann From Coupling Relations to Mated Invariants for Checking Information Flow , 2006, ESORICS.

[26]  Andrew C. Myers,et al.  JFlow: practical mostly-static information flow control , 1999, POPL '99.

[27]  Bernard P. Zajac Applied cryptography: Protocols, algorithms, and source code in C , 1994 .

[28]  K. Rustan M. Leino,et al.  A semantic approach to secure information flow , 2000, Sci. Comput. Program..

[29]  Stephen A. Cook,et al.  Soundness and Completeness of an Axiom System for Program Verification , 1978, SIAM J. Comput..

[30]  Daniel Leivant,et al.  Logical and Mathematical Reasoning about Imperative Programs. , 1985 .

[31]  Steve Zdancewic,et al.  A Cryptographic Decentralized Label Model , 2007, 2007 IEEE Symposium on Security and Privacy (SP '07).

[32]  Felix Naumann,et al.  Data fusion , 2009, CSUR.

[33]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[34]  Bruce Schneier,et al.  Applied cryptography (2nd ed.): protocols, algorithms, and source code in C , 1995 .

[35]  David Detlefs,et al.  Simplify: a theorem prover for program checking , 2005, JACM.