Share on Facebook Share on Twitter Email
Answers.com

Code signing

 

A method of ensuring that an executable program has come from a valid software publisher and has not been altered by anyone in between. Also known as "object signing," an EXE, CAB, driver or other executable file is digitally signed and transmitted along with a digital certificate from a certification authority (CA) such as VeriSign www.verisign.com) or Thawte www.thawte.com).

Verifying the Signed Certificate

After the code-signed executable is downloaded from a Web site, its certificate is extracted by the user's browser. From an internal list of certificate authorities (CAs) and their public keys, the browser uses the appropriate public key to verify the signature in the certificate. Once verified, it means that the software publisher is who it claims to be, and the public key in the certificate belongs to that publisher.

Verifying the Signed Executable

Next, the publisher's public key is used to verify the signature created from the executable's binary content. The public key decrypts the signature back into the digest, which is compared to the newly computed digest at the client side. If they match, the executable is verified to have come from the publisher without being tampered with. For more on certificate verification, see digital certificate and digital signature.

Object and Code Signing

Although both terms are used interchangeably, object signing refers to any files delivered in this manner, while code signing refers specifically to executables, which is the major concern these days when downloading so many active elements from the Internet. Authenticode is Microsoft's code signing system, and Object Signing is Netscape's system.

The Code Signing Process
The combination of the signed digital certificate and the signed executable file ensures that the executable has come from a valid publisher and has not been tampered with.

Download Computer Desktop Encyclopedia to your iPhone/iTouch

Search unanswered questions...
Enter a question here...
Search: All sources Community Q&A Reference topics
Wikipedia: Code signing
Top

Code signing is the process of digitally signing executables and scripts to confirm the software author and guarantee that the code has not been altered or corrupted since it was signed by use of a cryptographic hash.

Contents

Overview

Code signing can provide several valuable features. The most common use of code signing is to provide security when deploying; in some languages, it can also be used to help prevent namespace conflicts. Almost every code signing implementation will provide some sort of digital signature mechanism to verify the identity of the author or build system, and a checksum to verify that the object has not been modified. It can also be used to provide versioning information about an object or to store other meta data about an object.

Providing security

Many code signing implementations will provide a way to sign the code using private and public key systems, similar to the process employed by SSL or SSH. For example, in the case of .NET, the developer uses a key to sign his libraries or executables each time he builds. This key will be unique to a developer or group or sometimes per application or object. The developer can either generate this key on his own or obtain one from a trusted certificate authority (CA).

It is particularly valuable in distributed environments, where the source of a given piece of code may not be immediately evident - for example Java applets, ActiveX controls and other active web and browser scripting code. Another major usage is to safely provide updates and patches to existing software. Most Linux distributions, as well as both Apple Mac OS X and Microsoft Windows update services use code signing to ensure that it is not possible to maliciously distribute code via the patch system. It allows them to not have to worry about distribution security, such as mirror sites which may not be under the authors' complete control, or any other intermediate piece of the deployment.

Trusted identification using a certificate authority (CA)

The public key used for code signing should be traceable back to a trusted root authority, preferably using a secure public key infrastructure (PKI). This does not ensure that the code itself can be trusted, only that it comes from the stated source (or more explicitly, from a particular private key). A certificate authority provides a root trust level which is able to assign trust to others by proxy. If a user is set to trust one of these certificate authorities and receives an executable signed with a key generated by that CA, he can choose to trust the executable by proxy. In many frameworks and operating systems, a number of existing publicly trusted authorities will be pre-installed (such as VeriSign or COMODO, GoDaddy and GlobalSign). When inside a large group of users, such as a large company, it is commonplace to employ a private internal certificate authority suitable for providing the same features of public certificate authority but for deploying signed objects internally.

Alternative to CAs

The other model is where developers can choose to provide their own self-generated key. In this scenario, the user would normally have to obtain the public key in some fashion directly from the developer to verify the object is from him for the first time. Many code signing systems will store the public key inside the signature. Some software frameworks and OSs that check the code's signature before executing will allow you to choose to trust that developer from that point on after the first run. An application developer can provide a similar system by including the public keys with the installer. The key can then be used to ensure that any subsequent objects that need to run, such as upgrades, plugins, or another application, are all verified as coming from that same developer.

Problems

Like any security measure, code signing can be defeated. Users can be tricked into running unsigned code, or even into running code that refuses to validate, and the system only remains secure as long as the private key remains private.

It is also important to note that code signing does not protect the end user from any malicious activity or unintentional software bugs by the software author - it merely ensures that the software has not been modified by anyone other than the author.

Implementations

IBM's Lotus Notes has had PKI signing of code from Release 1, and both client and server software have execution control lists to control what levels of access to data, environment and file system are permitted for given users. Individual design elements, including active items such as scripts, actions and agents, are always signed using the editor's ID file, which includes both the editor's and the domain's public keys. Core templates such as the mail template are signed with a dedicated ID held by the Lotus template development team.

Signed JavaScript is also popular; signed scripts are allowed to perform additional actions such as cross-domain referencing.

Microsoft implements a form of code signing (based on Authenticode) provided for Microsoft tested drivers. Since drivers run in the kernel, they can destabilize the system or open the system to security holes. For this reason, Microsoft tests drivers submitted to its WHQL program. After the driver has passed, Microsoft signs that version of the driver as being safe. Installing drivers that are not validated with Microsoft is possible after accepting to allow the installation in a prompt warning the user that the code is unsigned. For .NET (managed) code, there is an additional mechanism called Strong Name Signing that uses Public/Private keys and SHA1 hash as opposed to Certificates. However, Microsoft discourages to rely on Strong Name Signing as a replacement for Authenticode [1].

References

External links


 
 

 

Copyrights:

Computer Desktop Encyclopedia. THIS DEFINITION IS FOR PERSONAL USE ONLY.
All other reproduction is strictly prohibited without permission from the publisher.
© 1981-2010 The Computer Language Company Inc.  All rights reserved.  Read more
Wikipedia. This article is licensed under the Creative Commons Attribution/Share-Alike License. It uses material from the Wikipedia article "Code signing" Read more