Related Concepts
Definition
Proof-Carrying Code (PCC) is a general mechanism for verifying that a code fragment can be executed safely on a host system. The key technical detail that makes PCC simple yet very powerful is that the code fragment is required to be accompanied by a detailed and precise explanation of why it satisfies the safety policy. This leaves the code receiver with the simple task of verifying that the explanation is correct and that it matches the code in question.
Background
More and more software systems are designed and built to be extensible and configurable dynamically. The extensions can be in the form of software upgrades, add-on modules, plugins, or applets. When the producer of the extension is not trusted, there is a need for a general mechanism that can be used to allow even untrusted system extensions to be integrated into an existing software system without compromising the stability and security of the host system.
Proof-Carrying Code...
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsRecommended Reading
Appel AW, Felty PA (2000) A semantic model of types and machine instructions for proof-carrying code. In: Conference record of the symposium on Principles of Programming Languages (POPL’00). Boston, USA, pp 243–253
Cai H, Shao Z, Vaynberg A (2007) Certified self-modifying code. In: Conference on Programming Language Design and implementation PLDI’97. Las Vegas, USA
Colby C, Lee P, Necula GC, Blau F, Plesko M, Cline K (2000) A certifying compiler for Java. ACM SIGPLAN Not 35(5):95–107
Feng X, Shao Z, Guo Y, Dong Y (2009) Certifying low-level programs with hardware interrupts and preemptive threads. J Autom Reason 42:301–347
Hamid NA, Shao Z, Trifonov V, Monnier S, Ni Z (2002) A syntactic approach to foundational proof-carrying code. In: Seventeenth IEEE symposium on logic in computer science. Copenhagen, Denmark, pp 89–100
Harper R, Honsell F, Plotkin G (1993) A framework for defining logic. J Assoc Comput Machin 40(1):143–184
Lindholm T, Yellin F (1997) The Java virtual machine Specification. The Java Series. Addison-Wesely, Reading
McCanne S, Jacobson V (1993) The BSD packet filter: a new architecture for user-level packet capture. In: The winter 1993 USENIX conference, San Diego. USENIX Association, pp 259–269
Microsoft Corporation (1996) Proposal for authenticating code via the Internet. http://www.microsoft.com/secruity/tech/authcode/authcode-f.htm. Accessed Apr 1996
Necula GC (1997) Proof-carrying code. In: Conference record of the 24th symposium on Principles of Programming Languages (POPL’97), Paris. ACM Press, pp 106–119
Necula GC, Lee P (1996) Safe kernel extensions without run-time checking. In: second symposium on operating systems design and implementations. Usenix, Seattle, USA, pp 229–243
Necula GC, Rahul SP (2001) Oracle-based checking of untrusted software. In: Conference record of the symposium on Principles of Programming Languages (POPL’01). ACM Press, London, UK, pp 142–154
Wahbe R, Lucco S, Anderson TE (1993) Graham SL efficient software-based fault isolation. In: 14th ACM symposium on operating system principles. Asheville. North Carolina, pp 203–216
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2011 Springer Science+Business Media, LLC
About this entry
Cite this entry
Necula, G. (2011). Proof-Carrying Code. In: van Tilborg, H.C.A., Jajodia, S. (eds) Encyclopedia of Cryptography and Security. Springer, Boston, MA. https://doi.org/10.1007/978-1-4419-5906-5_864
Download citation
DOI: https://doi.org/10.1007/978-1-4419-5906-5_864
Publisher Name: Springer, Boston, MA
Print ISBN: 978-1-4419-5905-8
Online ISBN: 978-1-4419-5906-5
eBook Packages: Computer ScienceReference Module Computer Science and Engineering