Cryptographic Verification by Typing for a Sample Protocol Implementation
Type systems are effective tools for verifying the security of cryptographic protocols and implementations. They provide automation,
modularity and scalability, and have been applied to large protocols. In this tutorial, we illustrate the use of types for
verifying authenticity properties, first using a symbolic model of cryptography, then relying on a concrete computational
We introduce refinement types (that is, types carrying formulas to record invariants) for programs written in F# and verified
by F7, an SMT-based type checker.
We describe a sample authenticated RPC protocol, we implement it in F#, and we specify its security against active adversaries.
We develop a sample symbolic library, we present its main cryptographic invariants, and we show that our RPC implementation
is perfectly secure when linked to this symbolic library.
We implement the same library using concrete cryptographic primitives, we make a standard computational assumption, and we
show that our RPC implementation is also secure with overwhelming probability when linked to this concrete library.