ITworld.com
  Search  
ITworld Home Page ITworld Webcasts ITworld White Papers ITworld Newsletters ITworld News ITworld Topics Careers ITworld Voices ITwhirled Changing the way you view IT
Proof-carrying Code
JAVA SECURITY --- 09/13/2002

Todd Sundsted

Executable content presents special problems for users of secure systems. Not only must they worry about attackers from without scrutinizing the external interfaces to their systems for vulnerabilities, but also they have to worry about attackers subverting their systems from within.

Even as plain clever individuals -- as macro-viruses, can put a platform as the macro language in Microsoft Word to evil use clearly attests. In order to limit its potential for damage, executable content must be subject to scrutiny before being allowed to execute. There are several methods for verifying executable content and identifying erroneous or malicious code.

The Java byte-code verifier examines Java byte-code and verifies that it is safe to execute. The tests it performs ensure that a piece of code doesn't access a memory location as if it contained an integer at one point and later as if it contained a reference to a class, and that object fields and methods are always accessed via the correct class type.

The Java byte-code verifier is complicated -- early implementations suffered from bugs that lessened the security offered by the Java environment. Java byte-code verification also places most of the burden for detecting incorrect code on the shoulders of the recipient.

Proof-carrying code shifts the burden of proving that a piece of unknown code is safe to execute from the recipient to the creator. The code creator generates a formal proof that the proposed code meets the safety requirements specified by the recipient. The recipient then uses a much simpler proof-checker to check the proof against the accompanying code.

The result is less of a burden on the side of the recipient -- verifying the correctness of a proof is easier than generating the proof in the first place -- and a more secure system, because proof-carrying code theorem provers are simpler, easier to develop, and easy to prove as being themselves correct and free of bugs.

 

Todd Sundsted has been writing software since computers became available in desktop models. His interests include security, distributed computing, and the dynamics of massively fine-grained architectures. In addition to writing, Todd codes. Todd can be reached at Todd.Sundsted@itworld.com.



 Home   Newsletters  JAVA SECURITY
www.itworld.com    open.itworld.com     security.itworld.com     smallbusiness.itworld.com
storage.itworld.com     utilitycomputing.itworld.com     wireless.itworld.com

 
Contact Us   About Us   Privacy Policy    Terms of Service   Reprints  

CIO   Computerworld   CSO   GamePro   Games.net   Industry Standard   Infoworld   ITworld  
JavaWorld   LinuxWorld  MacUser   Macworld   Network World   PC World   Playlist  

DEMO   IDG Connect   IDG Knowledge Hub   IDG TechNetwork   IDG World Expo  

Copyright © Computerworld, Inc. All rights reserved

Reproduction in whole or in part in any form or medium without express written permission of Computerworld Inc. is prohibited. Computerworld and Computerworld.com and the respective logos are trademarks of International Data Group Inc.