Check out the new USENIX Web site.

next up previous
Next: Computing the safety predicate Up: Proof-Carrying Code Previous: A sample application and

Certifying the Safety of Programs

To create safety proofs for a program, we must prove that executing it does not violate any of the safety checks (and the postcondition, if one is given, is also satisfied). Standard techniques exist for building such proofs. Our technique is based on Floyd's verification conditions [6], because they are powerful enough to deal with unstructured assembly-language programs and a broad range of safety invariants. Similar techniques have been used before to verify assembly-language programs [2, 3].

Certification of programs involves two steps:

  1. Compute the safety predicate for the program. This essentially encodes the semantic meaning of the program in logical form and constitutes a formal statement that the program, when executed, will not violate any safe-ty checks.

  2. Generate a proof of the safety predicate, written out in a checkable form.
Both these steps are described in the following subsections.

Peter Lee
Tue Sep 17 15:37:44 EDT 1996