Re: Proof-Carrying Code
Mark S. Miller (markm@caplet.com)
Wed, 08 Dec 1999 22:24:08 -0800
At 09:19 AM 12/6/99 , Paul E. Baclace wrote:
>I just ran across this...thought you might be interested:
>
>http://foxnet.cs.cmu.edu/afs/cs.cmu.edu/project/fox/mosaic/people/petel/papers/pcc/pcc.html
Thanks Paul, I'd come across PCC before, but this message got me to take a
closer look. Thanks. I'm taking the liberty of cc'ing this response to
the e-lang list
Since E is already a safe/secure simple language (as is Trusty Scheme), I
don't need PCC for basic safety. There are two ways I can see where PCC
might fit into the future of E:
- If A wants B not to compile A's E code to Java bytecodes (or whatever
instructions) before running them on B's platform, but rather wants B to run
A's pre-compiled code, it suffices for A to provide an E source parse tree,
the compiled target, and a proof that the target is a valid compilation
(describes the same computation) as the source. The cool thing is, the PCC
issue of "what is the kernel's security policy?" that the proof must satisfy
is, for us, always simply equivalence with an E source program, since E
already defines all the remaining "kernel security policy" issues.
- As an extension of the auditor technique. Right now, all my auditors,
like "confined", prove simple enough properties that they always perform
this proof directly on the un-augmented source parse tree. However, we have
already run across the fascinating case
http://eros.cis.upenn.edu/~majordomo/e-lang/1076.html of MarcS's fully
unprivileged implementation of sealer/unsealer pairs, which behaves in a
confined fashion, but necessarily violates the properties any simple
confinement auditor would use to prove confinement. In this case, we can
(and will) solve the problem by adopting MarcS's code into the TCB, and
causing it to be recognized as confined by decree. However, this is a
dangerous kind of move that must be used very rarely, and can only be used
by us TCB designers, and not by our users.
Were the "confined" auditor to be a PCC consumer, and were the notion of
"confinement" stated as an abstract property, such that it were possible to
prove that MarcS's code is actually confined, then MarcS, without privilege,
could contribute his code to other's E systems along with a proof,
constructed by MarcS, that this code satisfies the abstract confinement
property.
Needless to say, if this is in E's future, it's not the immediate
future. It all adds value, but none of it is required to meet E's goals.
I'd rather wait until there is more software engineering experience actually
using PCC in Scheme- or ML-like languages before diving in. Of course, E is
open source, so if anyone else wants to experiment with it along these
lines, feel free, and we'd love to hear about it!
Cheers,
--MarkM