A verifying core for a cryptographic language compiler

  • Authors:
  • Lee Pike;Mark Shields;John Matthews

  • Affiliations:
  • Galois Connections, Beaverton, Oregon;Galois Connections, Beaverton, Oregon;Galois Connections, Beaverton, Oregon

  • Venue:
  • ACL2 '06 Proceedings of the sixth international workshop on the ACL2 theorem prover and its applications
  • Year:
  • 2006

Quantified Score

Hi-index 0.00

Visualization

Abstract

A verifying compiler is one that emits both object code and a proof of correspondence between object and source code.1 We report the use of ACL2 in building a verifying compiler for μCryptol, a stream-based language for encryption algorithm specification that targets Rockwell Collins' AAMP7 microprocessor (and is designed to compile efficiently to hardware, too). This paper reports on our success in verifying the "core" transformations of the compiler -- those transformations over the sub-language of μCryptol that begin after "higher-order" aspects of the language are compiled away, and finish just before hardware or software specific transformations are exercised. The core transformations are responsible for aggressive optimizations. We have written an ACL2 macro that automatically generates both the correspondence theorems and their proofs. The compiler also supplies measure functions that ACL2 uses to automatically prove termination of μCryptol programs, including programs with mutually-recursive cliques of streams. Our verifying compiler has proved the correctness of its core transformations for multiple algorithms, including TEA, RC6, and AES. Finally, we describe an ACL2 book of primitive operations for the general specification and verification of encryption algorithms.