Introduction...3 Terms in this Document...3 Conditions for Secure Operation...3 Requirements...3 Key Generation Requirements...



Similar documents
Hushmail Express Password Encryption in Hushmail. Brian Smith Hush Communications

Webmail Using the Hush Encryption Engine

PGP - Pretty Good Privacy

Dashlane Security Whitepaper

How To Encrypt Data With Encryption

IT Networks & Security CERT Luncheon Series: Cryptography

Enterprise Security Critical Standards Summary

Introduction to Cryptography

SSL A discussion of the Secure Socket Layer

DRAFT Standard Statement Encryption

Secure Sockets Layer (SSL ) / Transport Layer Security (TLS) Network Security Products S31213

Ciphire Mail. Abstract

SSL Protect your users, start with yourself

Encryption, Data Integrity, Digital Certificates, and SSL. Developed by. Jerry Scott. SSL Primer-1-1

Online signature API. Terms used in this document. The API in brief. Version 0.20,

Overview of CSS SSL. SSL Cryptography Overview CHAPTER

Using etoken for SSL Web Authentication. SSL V3.0 Overview

Entrust Managed Services PKI. Getting started with digital certificates and Entrust Managed Services PKI. Document issue: 1.0

BlackBerry Enterprise Service 10. Secure Work Space for ios and Android Version: Security Note

HMRC Secure Electronic Transfer (SET)

OPENID AUTHENTICATION SECURITY

Criteria for web application security check. Version

SENSE Security overview 2014

WS_FTP Professional 12. Security Guide

GNUTLS. a Transport Layer Security Library This is a Draft document Applies to GnuTLS by Nikos Mavroyanopoulos

Connected from everywhere. Cryptelo completely protects your data. Data transmitted to the server. Data sharing (both files and directory structure)

Accellion Secure File Transfer Cryptographic Module Security Policy Document Version 1.0. Accellion, Inc.

Security Technical. Overview. BlackBerry Enterprise Server for Microsoft Exchange. Version: 5.0 Service Pack: 4

SBClient SSL. Ehab AbuShmais

Chapter 8. Network Security

Computer System Management: Hosting Servers, Miscellaneous

Security. Learning Objectives. This module will help you...

FileCloud Security FAQ

IBM i Version 7.3. Security Digital Certificate Manager IBM

Security Technical. Overview. BlackBerry Enterprise Service 10. BlackBerry Device Service Solution Version: 10.2

Is your data safe out there? -A white Paper on Online Security

FIPS Non- Proprietary Security Policy. McAfee SIEM Cryptographic Module, Version 1.0

WiMAX Public Key Infrastructure (PKI) Users Overview

Xerox DocuShare Security Features. Security White Paper

You re FREE Guide SSL. (Secure Sockets Layer) webvisions

PowerChute TM Network Shutdown Security Features & Deployment

Configuring SSL Termination

Security Digital Certificate Manager

BlackBerry Enterprise Server 5.0 SP3 and BlackBerry 7.1

Secure Network Communications FIPS Non Proprietary Security Policy

Sync Security and Privacy Brief

Chapter 6 Electronic Mail Security

Overview. SSL Cryptography Overview CHAPTER 1

Strong Encryption for Public Key Management through SSL

Nortel Networks, Inc. VPN Client Software (Software Version: 7_11.101) FIPS Non-Proprietary Security Policy

SubmitedBy: Name Reg No Address. Mirza Kashif Abrar T079 kasmir07 (at) student.hh.se

BlackBerry Enterprise Solution Security Release Technical Overview

Security Digital Certificate Manager

The Misuse of RC4 in Microsoft Word and Excel

, ) I Transport Layer Security

The Security Behind Sticky Password

MOTOROLA MESSAGING SERVER SERVER AND MOTOROLA MYMAIL DESKTOP PLUS MODULE OVERVIEW. Security Policy REV 1.3, 10/2002

Secure Sockets Layer

Usable Crypto: Introducing minilock. Nadim Kobeissi HOPE X, NYC, 2014

Understanding digital certificates

Security. Contents. S Wireless Personal, Local, Metropolitan, and Wide Area Networks 1

Configuring Security Features of Session Recording

Security in Android apps

CrashPlan Security SECURITY CONTEXT TECHNOLOGY

Pulse Secure, LLC. January 9, 2015

ERserver. iseries. Secure Sockets Layer (SSL)

Blaze Vault Online Backup. Whitepaper Data Security

Design Notes for an Efficient Password-Authenticated Key Exchange Implementation Using Human-Memorable Passwords

Chapter 7 Transport-Level Security

Sharing Secrets Using Encryption Facility

Certificate Management. PAN-OS Administrator s Guide. Version 7.0

2007 Microsoft Office System Document Encryption

CSE/EE 461 Lecture 23

WIRELESS LAN SECURITY FUNDAMENTALS

Secure Shell SSH provides support for secure remote login, secure file transfer, and secure TCP/IP and X11 forwarding. It can automatically encrypt,

Transport Layer Security Protocols

Introduction to Security and PIX Firewall

RFG Secure FTP. Web Interface

Alliance Key Manager Solution Brief

Cryptography and Network Security

E-commerce. Security. Learning objectives. Internet Security Issues: Overview. Managing Risk-1. Managing Risk-2. Computer Security Classifications

WS_FTP Professional 12

High Security Online Backup. A Cyphertite White Paper February, Cloud-Based Backup Storage Threat Models

Key Management Interoperability Protocol (KMIP)

Computer Security: Principles and Practice

HTTPS: Transport-Layer Security (TLS), aka Secure Sockets Layer (SSL)

BlackBerry Enterprise Solution

Securing your Online Data Transfer with SSL

Global Client Access Managed Communications Solutions. JPMorgan - Global Client Access. Managed Internet Solutions (EC Gateway)

WS_FTP Professional 12. Security Guide

ERserver. iseries. Securing applications with SSL

Cryptography and Network Security Chapter 15

SkyRecon Cryptographic Module (SCM)

User Guide Supplement. S/MIME Support Package for BlackBerry Smartphones BlackBerry Pearl 8100 Series

Architecture and Data Flow Overview. BlackBerry Enterprise Service Version: Quick Reference


Websense Content Gateway HTTPS Configuration

CS 393 Network Security. Nasir Memon Polytechnic University Module 11 Secure

Electronic Mail Security

Transcription:

Hush Encryption Engine White Paper

Introduction...3 Terms in this Document...3 Conditions for Secure Operation...3 Requirements...3 Key Generation Requirements...4 Passphrase Requirements...4 Data Requirements...4 Private Key Requirements...4 Embodiment...4 Java Core...4 OpenPGP Component...4 Key Server Communications Component...4 Primary API Component...4 Convenience Wrappers...5 Applet Wrapper...5 DLL Wrapper (Hush_IEngine)...5 Illustration...5 Functionality...5 Initialization...5 Public Key Operations...6 Operations...6 Verification of Keys and Alias...6 Caching...6 State Transition Diagram...6 Authentication...7 Private Alias...7 Authentication with the Server...8 Encryption of the Private Keys...8 State Transition Diagram...8 Digitally Signed Requests...9 Key Generation...10 Preconditions...10 Process...10 Encryption, Decryption, Signing and Verification Operations...12 Additional Authentication Functionality...12 Error Handling...12 Error Handling in the Applet Wrapper...12 Error Handling in the COM Wrapper (Hush_IEngine)...12 Cryptographic Implementation...12 Algorithms...12 Supported Algorithms...12 Default Algorithms...13 Handling of Key Material...13 Pseudo-Random Number Generation...13 Start-up...13

Introduction The Hush Encryption Engine is a client-side component, which interacts with a corresponding Key Server and enables a variety of encryption and digital signature operations. It maintains the best possible balance of high security and ease-of-use, enabling developers to build high security applications that require the end-user to have only a minimal understanding of public-key cryptography. The Hush Encryption Engine provides only minimal user interface functionality. It exposes an API, which a separate user interface layer should access. Terms in this Document Client This is the processing device utilized by the end-user to perform key generation, encryption, or signature operations using the Hush Encryption Engine. Key Server This is the processing device to which the Hush Encryption Engine connects to store and retrieve public keys and encrypted private keys. Alias A string used to identify a user (an owner of a public key) on the key server. It is usually in the form of an email address, such as username@domain.com. Passphrase A secret string, known only to the end-user and never revealed to any other party, which is used to a) generate the value needed to retrieve encrypted private keys from the Key Server and b) decrypt said encrypted private keys. Conditions for Secure Operation The Hush Encryption Engine requires that the following conditions hold true for secure operation. All statements made in this document assume that these conditions hold. 1. The end-user is using a legitimate copy of the Hush Encryption Engine. 2. The means by which the end-user interacts with the Hush Encryption Engine have not been compromised. This means that the user interface used to access the Hush Encryption Engine must be sufficiently secure. 3. Data used to seed the random number generator in the Hush Encryption Engine during key generation is sufficiently random. 4. The end-user has chosen a sufficiently secure passphrase. The Hush Encryption Engine does not enforce passphrase length or complexity requirements. This function should be provided by the interface layer. 5. The private key belonging to the Certificate Authority used by the Hush Encryption Engine to verify certificates retrieved from the Key Server has not been compromised. 6. The connection between the Hush Encryption Engine and the Key Server is trusted, generally because an SSL certificate signed by a trusted authority provides validation. Requirements The Hush Encryption Engine fulfills the following requirements.

Key Generation Requirements 1. Public and private keys must be generated on the Client machine, and stored on the Key Server in such a way that an administrator cannot gain access to the private keys. 2. The Hush Encryption Engine must provide a means for random input to seed a pseudo-random number generator for key generation, and store a random seed with the private key that can be used to provide entropy for future operations. Passphrase Requirements 1. The passphrase must never leave the Client in either key generation or key access. 2. Any use of the passphrase must utilize salt and iterated hashing in order to provide maximum protection against brute force and dictionary attacks. Data Requirements 1. All data encryption, decryption, signing, and verification operations performed on data must occur on the Client. Private Key Requirements 1. Private keys must never be transmitted off the Client in unencrypted form. Embodiment Java Core The functional portion of the Hush Encryption Engine is written in Java, and is compatible with Java 1.1.8. The latest source code can always be obtained at the Hushmail.com website in the downloads section. It contains the following sections: OpenPGP Component The OpenPGP component is embodied by the com.hush.pgp package and subpackages. It is a complete implementation of the OpenPGP standard as described in RFC2440. The cryptographic algorithms are provided by BouncyCastle (http://www.bouncycastle.org), and are contained in the org.bouncycastle.crypto package and sub-packages. Key Server Communications Component The Key Server Communications component is a series of classes that communicate with the Key Server via HTTPS and XML. The networking components are contained in the com.hush.net and com.hush.hee.net packages. Primary API Component The class com.hush.hee.hushencryptionenginecore provides an exposed API, which is the primary API that should be used by Java developers integrating the Hush Encryption Engine into their Java application. The com.hush.hee.keymanagementservices class offer a finer level of control for key management operations.

Convenience Wrappers Applet Wrapper The class com.hush.core.security.applet.hushencryptionengine is an Applet class which exposes a LiveConnect API to allow the Hush Encryption Engine to be utilized in a web browser context. It wraps com.hush.hee.hushencryptionenginecore. In a web browser context, this applet and all required classes must be delivered in a digitally signed package. This package will be either a JAR file (HushEncryptionEngine.jar) or a Microsoft CAB file (HushEncryptionEngine.cab). The methods on the applet can be accessed through either JavaScript or VBScript. DLL Wrapper (Hush_IEngine) The Hush Encryption Engine is available in an ActiveX DLL (Hush Encryption Engine DLL), which can be integrated into Visual Studio applications. This access is provided through the com.hush.hee.com.crypto class, which is a wrapper on com.hush.hee.hushencryptionenginecore. Illustration Functionality Initialization Figure 1 The Hush Encryption Engine must be initialized before any operations are performed. Initialization is achieved by setting values that will be required by future operations. The primary parameters that must be set during initialization are the key server addresses and the Customer ID, which is a value used to identify the originator of new keys. For more information on setting these values, see the API documentation.

Public Key Operations A variety of operations can be performed using only public keys. These operations can be performed immediately after initialization. The necessary keys will be retrieved from the specified key servers. Operations Encryption and digital signature verification options require only public keys. Verification of Keys and Alias All public keys must be verified after they are retrieved. Verification ensures the integrity of the key, and also ensures that the key is properly associated with the alias that was used to retrieve it. 1. Self-signatures are verified over both key material and Alias. 2. CA signature is verified over both key material and Alias. The CA key to be used for verification is hard-coded into the Hush Encryption Engine. Caching All retrieved and verified public keys are cached in the Hush Encryption Engine until the instance of the Hush Encryption Engine is destroyed. State Transition Diagram Figure 2 shows the states through which the Engine passes during the retrieval of a public key.

Figure 2 Authentication Authentication involves the retrieval and decryption of a private key from a Key Server. Private keys are required for all public key decryption and signing operations. Private Alias Private keys are indexed on the server by a value called the Private Alias. Mixing the Alias and the Passphrase together using a secure one-way hash function generates the Private Alias. Thus, the Private Alias cannot be associated with any particular Alias. Any data indexed by the Private Alias, including private keys, is stripped of any information that may associate it with the Alias. This means that private keys are stored anonymously. If an attacker gains complete access to the database in which the keys are stored, that attacker will be unable to determine which encrypted private key belongs to which user, thus making the process of compromising any particular private key significantly more complex. The Private Alias is generated as follows: 1. A SHA1 hash function is initialized. 2. The Alias, UTF-8 encoded, is input to the hash function. 3. A newline (0x0A) is input to the hash function. 4. The Passphrase, UTF-8 encoded, is input to the hash function.

5. Steps 2, 3, and 4 are repeated until a total of exactly 1048576 (2 20 ) octets have been input to the hash function. 6. The result of the hash function is hex encoded, high nybble first, using lowercase letters. Authentication with the Server During the authentication step, the Private Alias is sent to the Key Server via the defined protocol. The server responds by either indicating that no key for that value was found, or by returning one or more encrypted private keys and an encrypted random seed. Because a completely unique Private Alias is generated for every combination of Alias and Passphrase, it is not possible to restrict access attempts based on the Alias without compromising the anonymous nature of the private key storage. However, access attempts may, on a per Key Server basis, be restricted based on originating IP address. Access attempts may also be limited by the application that is utilizing the Hush Encryption Engine. Encryption of the Private Keys Refer to RFC 2440 for a more detail description of the components described here. The encrypted package in which the private keys are stored consists of a PGP symmetrically encrypted session key packet (type 3) followed by a symmetrically encrypted data packet (type 9). The passphrase is used to generate the session key as specified in the packets. The decrypted content of the symmetrically encrypted data packet does not contain a literal data packet, as would normally be the case for an OpenPGP message. Instead it contains a secret key packet (type 5) and a secret subkey packet (type 7). These packets contain the secret key material with no further encryption. User ID and signature packets may also be included, but are not necessary. State Transition Diagram Figure 3 shows the states through which the Engine passes during the retrieval of a private key.

Figure 3 Digitally Signed Requests In addition to allowing the creation of signatures on documents and the decryption of private data, the private key allows administrative operations to be performed by allowing digitally signed requests to be sent to the Key Server. The Key Server verifies the digital signature on the request and verifies that the signer has sufficient permissions to perform the requested operation. Operations requiring digitally signed authorization include: 1. Addition/removal of domains under a Customer ID 2. Addition/removal of new administrators 3. Pre-activation of Aliases for new accounts on domains requiring pre-activation (See: Registration Options on the Hush Key Server Network) 4. Passphrase recovery (if enabled) 5. Certificate revocation

6. Editing of public keys 7. Deletion of public keys 8. Setting or retrieving a passphrase expiration time Key Generation Keys can be generated on the Client by the Hush Encryption Engine and uploaded to the Key Server. Preconditions Before keys are generated, the Hush Encryption Engine pseudo-random number generator should be seeded with a reasonable amount of entropy. This can be done either by using set seed method, or by accessing an existing private key, which will result in the PRNG being seeded with that random seed. A method is also provided for confirming that the desired Alias is available before key generation. This prevents a user from having to go through the entire process of key generation before discovering that an alias is unavailable. See the API documentation for more information. Process The Figure 4 shows the process by which keys are generated and uploaded, tracking the transfer of control between Client and Key Server.

Figure 4

Encryption, Decryption, Signing and Verification Operations A wide range of encryption, decryption, signing, and verification functionality is available through the Engine interface, including operations that act on text, binary data, files, and URLs. For more information, refer to the relevant API documentation. Additional Authentication Functionality The Engine offers an API that can be used to store username, hostname, and password information that can be used to log into an external service. The password is stored encrypted with the private key. This functionality is primarily used in Hushmail to provide authentication to the IMAP server on which email is stored. Error Handling Errors in the core component of the Engine (com.hush.hee.hushencryptionenginecore) are handled using the exception infrastructure that is standard in Java application. The exceptions are thrown to the top level, where they can be interpreted and handled by the application layer as needed. Error Handling in the Applet Wrapper LiveConnect does not support exceptions, and so a different error-handling infrastructure is used. When an error occurs, the associated exception is stored. A call to getlasterror will then return true. A call to getlasterrormsg will return the relevant error message. The intent is that after each LiveConnect call; the JavaScript should then call getlasterror to determine if an error has occurred. Error Handling in the COM Wrapper (Hush_IEngine) In the COM wrapper, exceptions are converted to integer return codes. See the API documentation for information on the meanings of the different return code. More detailed error messages, including stack trace, can be retrieved with a call to getlasterror. Cryptographic Implementation The Engine conforms to the OpenPGP standard as specified by RFC2440, and that document covers most of the information needed to understand the cryptographic functions of the Engine. Algorithms Supported Algorithms The Engine supports the following algorithms: AES (Rijndael) Triple DES Blowfish Twofish CAST5 IDEA MD5 SHA1 RIPEMD160

RSA DSA ElGamal Default Algorithms By default, the Engine will use the following algorithms: Symmetric Encryption: AES with a 256-bit key Public Key Encryption: ElGamal with a 2048 bit key Signatures: DSA with a 1024 bit key Message Digests: SHA1 (160 bit) Handling of Key Material Whenever possible, key material is stored in byte arrays, which are overwritten with zeros after use. However, in the case of public key operations, this is not possible, because the Java BigInteger object is immutable. For these operations, it is necessary to rely on the garbage collector in the Java Virtual Machine to clean up key material. Key material is never explicitly written to disk, but it could theoretically be placed in a swap file, especially in the case of the immutable objects. Pseudo-Random Number Generation Pseudo-random number generation in the Engine is provided by a Blum Blum Shub implementation using SHA1 as a mixing function. Blum Blum Shub is considered to be one of the strongest pseudo-random number generators available. See RFC1750. The generator is generally seeded with data gathered from mouse movement at key generation. A random seed derived at that point from the generator is stored with the private key, encrypted, and used as a seed in each future private key access. The random seed is also updated at the end of sessions in which the private key is used. Start-up Start-up of the Engine involves a call to the init method, which initializes start up variables and performs self-tests if enabled. The start-up variables include Customer ID and Key Server specifications, and may include other options specific to the wrapper (COM or applet) in use. See the API documentation for details. If self-tests are enabled, then a brief test is performed on every algorithm supported by the Engine. See the list of supported algorithms in the previous section.