Andrew D. Gordon
Microsoft Research

Christian Haack
Radboud University

Alan Jeffrey
Bell Labs

Cryptographic Protocol Type Checker

Introduction

Applet

Examples

Download

Research Papers

Changelog

To Do List

/* * A signed message digest. * * A -> B : A, text, {| hash( msg(B,text) ) |}sA * * where * msg : a message tag * hash : a one-way hash function * sA : Alice's private signing key * * Christian Haack, v1.1.0 2004/10/25 */
/* * Include the standard prelude */
import prelude;
/* * Words used in correspondence assertions. */
public sending : Word; public to : Word;
/* * Message pattern. */
pattern Msg (a:Host) = ( b:Host, text:Public ) [ !begun(a sending text to b) ];
/* * Message tag. */
tag msg (Msg(a)) : Auth<a:Host>;
/* * We assume that principals are able to securely lookup the required * authentication keys. We formally express this by assuming the existence * of a secure lookup function of the following dependent function types: */
fun lkupAuthKey (p:Any) : AuthKey(p);
/* * The initiator. */
client Initiator (a:Host, b:Host, sA:SignKey(a)) at a is { establish Receiver at b is (socket : Socket); new (text : Public); begin! (a sending text to b); output socket is (a, text, {| hash( msg(b,text) ) |}sA); }
/* * The receiver. */
server Receiver (b:Host) at b is (socket : Socket) { input socket is (a:Un, text:Un, ctext:Un); let sA:AuthKey(a) = lkupAuthKey (a); match ctext is {| hash( msg(b,text) ) |}sA^-1 [ !begun (a sending text to b) ]; end (a sending text to b); }
/* * That's all folks. */

Cryptyc implementation Copyright © 2001-2004, Alan Jeffrey and Christian Haack
Technical reports Copyright © 2000-2004 Microsoft Research, Alan Jeffrey and Christian Haack
This material is partly based upon work supported by the National Science Foundation under Grant No. 0208549.
Last modified: 2005-12-14 06:33:53