summaryrefslogtreecommitdiff
path: root/doc/protocol/draft-hickman-netscape-ssl-00.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/protocol/draft-hickman-netscape-ssl-00.txt')
-rw-r--r--doc/protocol/draft-hickman-netscape-ssl-00.txt1510
1 files changed, 0 insertions, 1510 deletions
diff --git a/doc/protocol/draft-hickman-netscape-ssl-00.txt b/doc/protocol/draft-hickman-netscape-ssl-00.txt
deleted file mode 100644
index 5658bdff89..0000000000
--- a/doc/protocol/draft-hickman-netscape-ssl-00.txt
+++ /dev/null
@@ -1,1510 +0,0 @@
-
- Kipp E.B. Hickman
-Internet Draft Netscape Communications Corp
- April 1995 (Expires 10/95)
-
- The SSL Protocol
- <draft-hickman-netscape-ssl-00.txt>
-
-1. STATUS OF THIS MEMO
-
-This document is an Internet-Draft.Internet-Drafts are working documents
-of the Internet Engineering Task Force (IETF), its areas, and its working
-groups. Note that other groups may also distribute working documents as
-Internet-Drafts.
-
-Internet-Drafts are draft documents valid for a maximum of six months
-and may be updated, replaced, or obsoleted by other documents at any
-time. It is inappropriate to use Internet-Drafts as reference material or to
-cite them other than as "work in progress."
-
-To learn the current status of any Internet-Draft, please check the "1id-
-abstracts.txt" listing contained in the Internet- Drafts Shadow Directories
-on ds.internic.net (US East Coast), nic.nordu.net (Europe), ftp.isi.edu (US
-West Coast), or munnari.oz.au (Pacific Rim).
-2. ABSTRACT
-
-This document specifies the Secure Sockets Layer (SSL) protocol, a
-security protocol that provides privacy over the Internet. The protocol
-allows client/server applications to communicate in a way that cannot be
-eavesdropped. Server's are always authenticated and clients are optionally
-authenticated.
-
-3. INTRODUCTION
-
-The SSL Protocol is designed to provide privacy between two
-communicating applications (a client and a server). Second, the protocol is
-designed to authenticate the server, and optionally the client. SSL requires
-a reliable transport protocol (e.g. TCP) for data transmission and
-reception.
-
-The advantage of the SSL Protocol is that it is application protocol
-independent. A "higher level" application protocol (e.g. HTTP, FTP,
-TELNET, etc.) can layer on top of the SSL Protocol transparently. The
-SSL Protocol can negotiate an encryption algorithm and session key as
-well as authenticate a server before the application protocol transmits or
-receives its first byte of data. All of the application protocol data is
-transmitted encrypted, ensuring privacy.
-
-The SSL protocol provides "channel security" which has three basic
-properties:
-
- The channel is private. Encryption is used for all messages after a
-simple handshake is used to define a secret key. Symmetric
-cryptography is used for data encryption (e.g. DES, RC4, etc.)
-
- The channel is authenticated. The server endpoint of the conversation
-is always authenticated, while the client endpoint is optionally
-authenticated. Asymmetric cryptography is used for authentication
-
-Hickman [page 1]
-
-(e.g. Public Key Cryptography).
-
- The channel is reliable. The message transport includes a message
-integrity check (using a MAC). Secure hash functions (e.g. MD2,
-MD5) are used for MAC computations.
-
-The SSL protocol is actually composed of two protocols. At the lowest
-level, layered on top of some reliable transport protocol, is the "SSL
-Record Protocol". The SSL Record Protocol is used for encapsulation of
-all transmitted and received data, including the SSL Handshake Protocol,
-which is used to establish security parameters.
-4. SSL Record Protocol Specification
-
-4.1 SSL Record Header Format
-
-In SSL, all data sent is encapsulated in a record, an object which is
-composed of a header and some non-zero amount of data. Each record
-header contains a two or three byte length code. If the most significant bit
-is set in the first byte of the record length code then the record has no
-padding and the total header length will be 2 bytes, otherwise the record
-has padding and the total header length will be 3 bytes. The record header
-is transmitted before the data portion of the record.
-
-Note that in the long header case (3 bytes total), the second most
-significant bit in the first byte has special meaning. When zero, the record
-being sent is a data record. When one, the record being sent is a security
-escape (there are currently no examples of security escapes; this is
-reserved for future versions of the protocol). In either case, the length code
-describes how much data is in the record.
-
-The record length code does not include the number of bytes consumed by
-the record header (2 or 3). For the 2 byte header, the record length is
-computed by (using a "C"-like notation):
-
-RECORD-LENGTH = ((byte[0] & 0x7f) << 8)) | byte[1];
-
-Where byte[0] represents the first byte received and byte[1] the second
-byte received. When the 3 byte header is used, the record length is
-computed as follows (using a "C"-like notation):
-
-RECORD-LENGTH = ((byte[0] & 0x3f) << 8)) | byte[1];
-IS-ESCAPE = (byte[0] & 0x40) != 0;
-PADDING = byte[2];
-
-The record header defines a value called PADDING. The PADDING
-value specifies how many bytes of data were appended to the original
-record by the sender. The padding data is used to make the record length
-be a multiple of the block ciphers block size when a block cipher is used
-for encryption.
-
-The sender of a "padded" record appends the padding data to the end of its
-normal data and then encrypts the total amount (which is now a multiple
-of the block cipher's block size). The actual value of the padding data is
-unimportant, but the encrypted form of it must be transmitted for the
-receiver to properly decrypt the record. Once the total amount being
-
-Hickman [page 2]
-
-transmitted is known the header can be properly constructed with the
-PADDING value set appropriately.
-
-The receiver of a padded record decrypts the entire record data (sans
-record length and the optional padding) to get the clear data, then subtracts
-the PADDING value from the RECORD-LENGTH to determine the
-final RECORD-LENGTH. The clear form of the padding data must be
-discarded.
-
-4.1.1 SSL Record Data Format
-
-The data portion of an SSL record is composed of three components
-(transmitted and received in the order shown):
-
-MAC-DATA[MAC-SIZE]
-ACTUAL-DATA[N]
-PADDING-DATA[PADDING]
-
-ACTUAL-DATA is the actual data being transmitted (the message
-payload). PADDING-DATA is the padding data sent when a block cipher
-is used and padding is needed. Finally, MAC-DATA is the "Message
-Authentication Code".
-
-When SSL records are sent in the clear, no cipher is used.Consequently the
-amount of PADDING-DATA will be zero and the amount of MAC-
-DATA will be zero. When encryption is in effect, the PADDING-DATA
-will be a function of the cipher block size. The MAC-DATA is a function
-of the CIPHER-CHOICE (more about that later).
-
-The MAC-DATA is computed as follows:
-
-MAC-DATA = HASH[ SECRET, ACTUAL-DATA, PADDING-DATA,
-SEQUENCE-NUMBER ]
-
-Where the SECRET data is fed to the hash function first, followed by the
-ACTUAL-DATA, which is followed by the PADDING-DATA which is
-finally followed by the SEQUENCE-NUMBER. The SEQUENCE-
-NUMBER is a 32 bit value which is presented to the hash function as four
-bytes, with the first byte being the most significant byte of the sequence
-number, the second byte being the next most significant byte of the
-sequence number, the third byte being the third most significant byte, and
-the fourth byte being the least significant byte (that is, in network byte
-order or "big endian" order).
-
-MAC-SIZE is a function of the digest algorithm being used. For MD2 and
-MD5 the MAC-SIZE will be 16 bytes (128 bits).
-
-The SECRET value is a function of which party is sending the message. If
-the client is sending the message then the SECRET is the CLIENT-
-WRITE-KEY (the server will use the SERVER-READ-KEY to verify
-the MAC). If the client is receiving the message then the SECRET is the
-CLIENT-READ-KEY (the server will use the SERVER-WRITE-KEY
-to
-generate the MAC).
-
-Hickman [page 3]
-
-The SEQUENCE-NUMBER is a counter which is incremented by both
-the sender and the receiver. For each transmission direction, a pair of
-counters is kept (one by the sender, one by the receiver). Every time a
-message is sent by a sender the counter is incremented. Sequence numbers
-are 32 bit unsigned quantities and must wrap to zero after incrementing
-past 0xFFFFFFFF.
-
-The receiver of a message uses the expected value of the sequence number
-as input into the MAC HASH function (the HASH function is chosen from
-the CIPHER-CHOICE). The computed MAC-DATA must agree bit for
-bit with the transmitted MAC-DATA. If the comparison is not identity
-then the record is considered damaged, and it is to be treated as if an "I/O
-Error" had occurred (i.e. an unrecoverable error is asserted and the
-connection is closed).
-
-A final consistency check is done when a block cipher is used and the
-protocol is using encryption. The amount of data present in a record
-(RECORD-LENGTH))must be a multiple of the cipher's block size. If
-the received record is not a multiple of the cipher's block size then the
-record is considered damaged, and it is to be treated as if an "I/O Error"
-had occurred (i.e. an unrecoverable error is asserted and the connection is
-closed).
-
-The SSL Record Layer is used for all SSL communications, including
-handshake messages, security escapes and application data transfers. The
-SSL Record Layer is used by both the client and the server at all times.
-
-For a two byte header, the maximum record length is 32767 bytes. For the
-three byte header, the maximum record length is 16383 bytes. The SSL
-Handshake Protocol messages are constrained to fit in a single SSL Record
-Protocol record. Application protocol messages are allowed to consume
-multiple SSL Record Protocol record's.
-
-Before the first record is sent using SSL all sequence numbers are
-initialized to zero. The transmit sequence number is incremented after
-every message sent, starting with the CLIENT-HELLO and SERVER-
-HELLO messages.
-
-5. SSL Handshake Protocol Specification
-
-5.1 SSL Handshake Protocol Flow
-
-The SSL Handshake Protocol is used to negotiate security enhancements
-to data sent using the SSL Record Protocol. The security enhancements
-consist of authentication, symmetric encryption, and message integrity.
-
-The SSL Handshake Protocol has two major phases. The first phase is
-used to establish private communications. The second phase is used for
-client authentication.
-
-5.1.1 Phase 1
-
-The first phase is the initial connection phase where both parties
-communicate their "hello" messages. The client initiates the conversation
-by sending the CLIENT-HELLO message. The server receives the
-
-Hickman [page 4]
-
-CLIENT-HELLO message and processes it responding with the
-SERVER-HELLO message.
-
-At this point both the client and server have enough information to know
-whether or not a new "master key" is needed (The master key is used for
-production of the symmetric encryption session keys). When a new master
-key is not needed, both the client and the server proceed immediately to
-phase 2.
-
-When a new master key is needed, the SERVER-HELLO message will
-contain enough information for the client to generate it. This includes the
-server's signed certificate (more about that later), a list of bulk cipher
-specifications (see below), and a connection-id (a connection-id is a
-randomly generated value generated by the server that is used by the client
-and server during a single connection). The client generates the master key
-and responds with a CLIENT-MASTER-KEY message (or an ERROR
-message if the server information indicates that the client and server
-cannot agree on a bulk cipher).
-
-It should be noted here that each SSL endpoint uses a pair of ciphers per
-connection (for a total of four ciphers). At each endpoint, one cipher is
-used for outgoing communications, and one is used for incoming
-communications. When the client or server generate a session key, they
-actually generate two keys, the SERVER-READ-KEY (also known as the
-CLIENT-WRITE-KEY) and the SERVER-WRITE-KEY (also known
-as the CLIENT-READ-KEY). The master key is used by the client and
-server to generate the various session keys (more about that later).
-
-Finally, the server sends a SERVER-VERIFY message to the client after
-the master key has been determined. This final step authenticates the
-server, because only a server which has the appropriate public key can
-know the master key.
-
-5.1.2 Phase 2
-
-The second phase is the client authentication phase. The server has already
-been authenticated by the client in the first phase, so this phase is primarily
-used to authenticate the client. In a typical scenario, the server will require
-authentication of the client and send a REQUEST-CERTIFICATE
-message. The client will answer in the positive if it has the needed
-information, or send an ERROR message if it does not. This protocol
-specification does not define the semantics of an ERROR response to a
-server request (e.g., an implementation can ignore the error, close the
-connection, etc. and still conform to this specification). In addition, it is
-permissable for a server to cache client authentication information with the
-"session-id" cache. The server is not required to re-authenticate the client
-on every connection.
-
-When a party is done authenticating the other party, it sends its finished
-message. For the client, the CLIENT-FINISHED message contains the
-encrypted form of the CONNECTION-ID for the server to verify. If the
-verification fails, the server sends an ERROR message.
-
-Once a party has sent its finished message it must continue to listen to its
-peers messages until it too receives a finished message. Once a party has
-
-Hickman [page 5]
-
-both sent a finished message and received its peers finished message, the
-SSL handshake protocol is done. At this point the application protocol
-begins to operate (Note: the application protocol continues to be layered
-on the SSL Record Protocol).
-
-5.2 Typical Protocol Message Flow
-
-The following sequences define several typical protocol message flows for
-the SSL Handshake Protocol. In these examples we have two principals in
-the conversation: the client and the server. We use a notation commonly
-found in the literature [10]. When something is enclosed in curly braces
-"{something}key" then the something has been encrypted using "key".
-
-5.2.1 Assuming no session-identifier
-
-client-hello C -> S: challenge, cipher_specs
-server-hello S -> C: connection-id, server_certificate,
- cipher_specs
-client-master-key C -> S: {master_key}server_public_key
-client-finish C -> S: {connection-id}client_write_key
-server-verify S -> C: {challenge}server_write_key
-server-finish S -> C: {new_session_id}server_write_key
-
-5.2.2 Assuming a session-identifier was found by both client & server
-
-client-hello C -> S: challenge, session_id, cipher_specs
-server-hello S -> C: connection-id, session_id_hit
-client-finish C -> S: {connection-id}client_write_key
-server-verify S -> C: {challenge}server_write_key
-server-finish S -> C: {session_id}server_write_key
-
-5.2.3 Assuming a session-identifier was used and client authentication
-is used
-
-client-hello C -> S: challenge, session_id, cipher_specs
-server-hello S -> C: connection-id, session_id_hit
-client-finish C -> S: {connection-id}client_write_key
-server-verify S -> C: {challenge}server_write_key
-request-certificate S -> C: {auth_type,challenge'}
- server_write_key
-client-certificate C -> S: {cert_type,client_cert,
- response_data}client_write_key
-server-finish S -> C: {session_id}server_write_key
-
-In this last exchange, the response_data is a function of the auth_type.
-
-5.3 Errors
-
-Error handling in the SSL connection protocol is very simple. When an
-error is detected, the detecting party sends a message to the other party.
-Errors that are not recoverable cause the client and server to abort the
-secure connection. Servers and client are required to "forget" any session-
-identifiers associated with a failing connection.
-
-The SSL Handshake Protocol defines the following errors:
-
-
-Hickman [page 6]
-
-NO-CIPHER-ERROR
-This error is returned by the client to the server when it cannot find
-a cipher or key size that it supports that is also supported by the
-server. This error is not recoverable.
-
-NO-CERTIFICATE-ERROR
-When a REQUEST-CERTIFICATE message is sent, this error may
-be returned if the client has no certificate to reply with. This error
-is recoverable (for client authentication only).
-
-BAD-CERTIFICATE-ERROR
-This error is returned when a certificate is deemed bad by the
-receiving party. Bad means that either the signature of the
-certificate was bad or that the values in the certificate were
-inappropriate (e.g. a name in the certificate did not match the
-expected name). This error is recoverable (for client authentication
-only).
-
-UNSUPPORTED-CERTIFICATE-TYPE-ERROR
-This error is returned when a client/server receives a certificate
-type that it can't support. This error is recoverable (for client
-authentication only).
-
-5.4 SSL Handshake Protocol Messages
-
-The SSL Handshake Protocol messages are encapsulated using the SSL
-Record Protocol and are composed of two parts: a single byte message
-type code, and some data. The client and server exchange messages until
-both ends have sent their "finished" message, indicating that they are
-satisfied with the SSL Handshake Protocol conversation. While one end
-may be finished, the other may not, therefore the finished end must
-continue to receive SSL Handshake Protocol messages until it receives a
-"finished" message from its peer.
-
-After the pair of session keys has been determined by each party, the
-message bodies are encrypted. For the client, this happens after it verifies
-the session-identifier or creates a new master key and has sent it to the
-server. For the server, this happens after the session-identifier is found to
-be good, or the server receives the client's master key message.
-
-The following notation is used for SSLHP messages:
-
-char MSG-EXAMPLE
-char FIELD1
-char FIELD2
-char THING-MSB
-char THING-LSB
-char THING-DATA[(MSB<<8)|LSB];
-...
-
-This notation defines the data in the protocol message, including the
-message type code. The order is presented top to bottom, with the top most
-element being transmitted first, and the bottom most element transferred
-last.
-
-
-Hickman [page 7]
-
-For the "THING-DATA" entry, the MSB and LSB values are actually
-THING-MSB and THING-LSB (respectively) and define the number of
-bytes of data actually present in the message. For example, if THING-
-MSB were zero and THING-LSB were 8 then the THING-DATA array
-would be exactly 8 bytes long. This shorthand is used below.
-
-Length codes are unsigned values, and when the MSB and LSB are
-combined the result is an unsigned value. Unless otherwise specified
-lengths values are "length in bytes".
-
-5.5 Client Only Protocol Messages
-
-There are several messages that are only generated by clients. These
-messages are never generated by correctly functioning servers. A client
-receiving such a message closes the connection to the server and returns an
-error status to the application through some unspecified mechanism.
-
-5.5.1 CLIENT-HELLO (Phase 1; Sent in the clear)
-
-char MSG-CLIENT-HELLO
-char CLIENT-VERSION-MSB
-char CLIENT-VERSION-LSB
-char CIPHER-SPECS-LENGTH-MSB
-char CIPHER-SPECS-LENGTH-LSB
-char SESSION-ID-LENGTH-MSB
-char SESSION-ID-LENGTH-LSB
-char CHALLENGE-LENGTH-MSB
-char CHALLENGE-LENGTH-LSB
-char CIPHER-SPECS-DATA[(MSB<<8)|LSB]
-char SESSION-ID-DATA[(MSB<<8)|LSB]
-char CHALLENGE-DATA[(MSB<<8)|LSB]
-
-When a client first connects to a server it is required to send the CLIENT-
-HELLO message. The server is expecting this message from the client as
-its first message. It is an error for a client to send anything else as its
-first
-message.
-
-The client sends to the server its SSL version, its cipher specs (see below),
-some challenge data, and the session-identifier data. The session-identifier
-data is only sent if the client found a session-identifier in its cache for the
-server, and the SESSION-ID-LENGTH will be non-zero. When there is
-no session-identifier for the server SESSION-ID-LENGTH must be zero.
-The challenge data is used to authenticate the server. After the client and
-server agree on a pair of session keys, the server returns a SERVER-
-VERIFY message with the encrypted form of the CHALLENGE-DATA.
-
-Also note that the server will not send its SERVER-HELLO message
-until it has received the CLIENT-HELLO message. This is done so that
-the server can indicate the status of the client's session-identifier back to
-the client in the server's first message (i.e. to increase protocol efficiency
-and reduce the number of round trips required).
-
-The server examines the CLIENT-HELLO message and will verify that it
-can support the client version and one of the client cipher specs. The
-server can optionally edit the cipher specs, removing any entries it doesn't
-
-Hickman [page 8]
-
-choose to support. The edited version will be returned in the SERVER-
-HELLO message if the session-identifier is not in the server's cache.
-
-The CIPHER-SPECS-LENGTH must be greater than zero and a
-multiple of 3. The SESSION-ID-LENGTH must either be zero or 16.
-The CHALLENGE-LENGTH must be greater than or equal to 16 and
-less than or equal to 32.
-
-This message must be the first message sent by the client to the server.
-After the message is sent the client waits for a SERVER-HELLO
-message. Any other message returned by the server (other than ERROR)
-is disallowed.
-
-5.5.2 CLIENT-MASTER-KEY (Phase 1; Sent primarily in the clear)
-
-char MSG-CLIENT-MASTER-KEY
-char CIPHER-KIND[3]
-char CLEAR-KEY-LENGTH-MSB
-char CLEAR-KEY-LENGTH-LSB
-char ENCRYPTED-KEY-LENGTH-MSB
-char ENCRYPTED-KEY-LENGTH-LSB
-char KEY-ARG-LENGTH-MSB
-char KEY-ARG-LENGTH-LSB
-char CLEAR-KEY-DATA[MSB<<8|LSB]
-char ENCRYPTED-KEY-DATA[MSB<<8|LSB]
-char KEY-ARG-DATA[MSB<<8|LSB]
-
-The client sends this message when it has determined a master key for the
-server to use. Note that when a session-identifier has been agreed upon,
-this message is not sent.
-
-The CIPHER-KIND field indicates which cipher was chosen from the
-server's CIPHER-SPECS.
-
-The CLEAR-KEY-DATA contains the clear portion of the MASTER-
-KEY. The CLEAR-KEY-DATA is combined with the SECRET-KEY-
-DATA (described shortly) to form the MASTER-KEY, with the
-SECRET-KEY-DATA being the least significant bytes of the final
-MASTER-KEY. The ENCRYPTED-KEY-DATA contains the secret
-portions of the MASTER-KEY, encrypted using the server's public key.
-The encryption block is formatted using block type 2 from PKCS#1 [5].
-The data portion of the block is formatted as follows:
-
-char SECRET-KEY-DATA[SECRET-LENGTH]
-
-SECRET-LENGTH is the number of bytes of each session key that is
-being transmitted encrypted. The SECRET-LENGTH plus the CLEAR-
-KEY-LENGTH equals the number of bytes present in the cipher key (as
-defined by the CIPHER-KIND). It is an error if the SECRET-LENGTH
-found after decrypting the PKCS#1 formatted encryption block doesn't
-match the expected value. It is also an error if CLEAR-KEY-LENGTH is
-non-zero and the CIPHER-KIND is not an export cipher.
-
-If the key algorithm needs an argument (for example, DES-CBC's
-initialization vector) then the KEY-ARG-LENGTH fields will be non-
-
-Hickman [page 9]
-
-zero and the KEY-ARG-DATA will contain the relevant data. For the
-SSL_CK_RC2_128_CBC_WITH_MD5,
-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,
-SSL_CK_IDEA_128_CBC_WITH_MD5,
-SSL_CK_DES_64_CBC_WITH_MD5 and
-SSL_CK_DES_192_EDE3_CBC_WITH_MD5 algorithms the KEY-ARG
-data must be present and be exactly 8 bytes long.
-
-Client and server session key production is a function of the CIPHER-
-CHOICE:
-
-SSL_CK_RC4_128_WITH_MD5
-SSL_CK_RC4_128_EXPORT40_WITH_MD5
-SSL_CK_RC2_128_CBC_WITH_MD5
-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5
-SSL_CK_IDEA_128_CBC_WITH_MD5
-
-KEY-MATERIAL-0 = MD5[ MASTER-KEY, "0", CHALLENGE,
-CONNECTION-ID ]
-KEY-MATERIAL-1 = MD5[ MASTER-KEY, "1", CHALLENGE,
-CONNECTION-ID ]
-
-CLIENT-READ-KEY = KEY-MATERIAL-0[0-15]
-CLIENT-WRITE-KEY = KEY-MATERIAL-1[0-15]
-
-Where KEY-MATERIAL-0[0-15] means the first 16 bytes of the KEY-
-MATERIAL-0 data, with KEY-MATERIAL-0[0] becoming the most
-significant byte of the CLIENT-READ-KEY.
-
-Data is fed to the MD5 hash function in the order shown, from left to
-right: first the MASTER-KEY, then the "0" or "1", then the
-CHALLENGE and then finally the CONNECTION-ID.
-
-Note that the "0" means the ascii zero character (0x30), not a zero value.
-"1" means the ascii 1 character (0x31). MD5 produces 128 bits of output
-data which are used directly as the key to the cipher algorithm (The most
-significant byte of the MD5 output becomes the most significant byte of
-the key material).
-
-SSL_CK_DES_64_CBC_WITH_MD5
-
- KEY-MATERIAL-0 = MD5[ MASTER-KEY, CHALLENGE,
-CONNECTION-ID ]
-
- CLIENT-READ-KEY = KEY-MATERIAL-0[0-7]
- CLIENT-WRITE-KEY = KEY-MATERIAL-0[8-15]
-
-For DES-CBC, a single 16 bytes of key material are produced using MD5.
-The first 8 bytes of the MD5 digest are used as the CLIENT-READ-KEY
-while the remaining 8 bytes are used as the CLIENT-WRITE-KEY. The
-initialization vector is provided in the KEY-ARG-DATA. Note that the
-raw key data is not parity adjusted and that this step must be performed
-before the keys are legitimate DES keys.
-
-SSL_CK_DES_192_EDE3_CBC_WITH_MD5
-
-
-Hickman [page 10]
-
- KEY-MATERIAL-0 = MD5[ MASTER-KEY, "0", CHALLENGE,
-CONNECTION-ID ]
- KEY-MATERIAL-1 = MD5[ MASTER-KEY, "1", CHALLENGE,
-CONNECTION-ID ]
- KEY-MATERIAL-2 = MD5[ MASTER-KEY, "2", CHALLENGE,
-CONNECTION-ID ]
-
- CLIENT-READ-KEY-0 = KEY-MATERIAL-0[0-7]
- CLIENT-READ-KEY-1 = KEY-MATERIAL-0[8-15]
- CLIENT-READ-KEY-2 = KEY-MATERIAL-1[0-7]
- CLIENT-WRITE-KEY-0 = KEY-MATERIAL-1[8-15]
- CLIENT-WRITE-KEY-1 = KEY-MATERIAL-2[0-7]
- CLIENT-WRITE-KEY-2 = KEY-MATERIAL-2[8-15]
-
-Data is fed to the MD5 hash function in the order shown, from left to
-right: first the MASTER-KEY, then the "0", "1" or "2", then the
-CHALLENGE and then finally the CONNECTION-ID. Note that the
-"0" means the ascii zero character (0x30), not a zero value. "1" means the
-ascii 1 character (0x31). "2" means the ascii 2 character (0x32).
-
-A total of 6 keys are produced, 3 for the read side DES-EDE3 cipher and 3
-for the write side DES-EDE3 function. The initialization vector is
-provided in the KEY-ARG-DATA. The keys that are produced are not
-parity adjusted. This step must be performed before proper DES keys are
-usable.
-
-Recall that the MASTER-KEY is given to the server in the CLIENT-
-MASTER-KEY message. The CHALLENGE is given to the server by
-the client in the CLIENT-HELLO message. The CONNECTION-ID is
-given to the client by the server in the SERVER-HELLO message. This
-makes the resulting cipher keys a function of the original session and the
-current session. Note that the master key is never directly used to encrypt
-data, and therefore cannot be easily discovered.
-
-The CLIENT-MASTER-KEY message must be sent after the CLIENT-
-HELLO message and before the CLIENT-FINISHED message. The
-CLIENT-MASTER-KEY message must be sent if the SERVER-
-HELLO message contains a SESSION-ID-HIT value of 0.
-
-5.5.3 CLIENT-CERTIFICATE (Phase 2; Sent encrypted)
-
-char MSG-CLIENT-CERTIFICATE
-char CERTIFICATE-TYPE
-char CERTIFICATE-LENGTH-MSB
-char CERTIFICATE-LENGTH-LSB
-char RESPONSE-LENGTH-MSB
-char RESPONSE-LENGTH-LSB
-char CERTIFICATE-DATA[MSB<<8|LSB]
-char RESPONSE-DATA[MSB<<8|LSB]
-
-This message is sent by one an SSL client in response to a server
-REQUEST-CERTIFICATE message. The CERTIFICATE-DATA
-contains data defined by the CERTIFICATE-TYPE value. An ERROR
-message is sent with error code NO-CERTIFICATE-ERROR when this
-request cannot be answered properly (e.g. the receiver of the message has
-
-Hickman [page 11]
-
-no registered certificate).
-
-CERTIFICATE-TYPE is one of:
-
-SSL_X509_CERTIFICATE
-The CERTIFICATE-DATA contains an X.509 (1988) [3] signed
-certificate.
-
-The RESPONSE-DATA contains the authentication response data. This
-data is a function of the AUTHENTICATION-TYPE value sent by the
-server.
-
-When AUTHENTICATION-TYPE is
-SSL_AT_MD5_WITH_RSA_ENCRYPTION then the RESPONSE-
-DATA contains a digital signature of the following components (in the
-order shown):
-
- the KEY-MATERIAL-0
- the KEY-MATERIAL-1 (only if defined by the cipher kind)
- the KEY-MATERIAL-2 (only if defined by the cipher kind)
- the CERTIFICATE-CHALLENGE-DATA (from the
-REQUEST-CERTIFICATE message)
- the server's signed certificate (from the SERVER-HELLO
-message)
-
-The digital signature is constructed using MD5 and then encrypted using
-the clients private key, formatted according to PKCS#1's digital signature
-standard [5]. The server authenticates the client by verifying the digital
-signature using standard techniques. Note that other digest functions are
-supported. Either a new AUTHENTICATION-TYPE can be added, or
-the algorithm-id in the digital signature can be changed.
-
-This message must be sent by the client only in response to a REQUEST-
-CERTIFICATE message.
-
-5.5.4 CLIENT-FINISHED (Phase 2; Sent encrypted)
-
-char MSG-CLIENT-FINISHED
-char CONNECTION-ID[N-1]
-
-The client sends this message when it is satisfied with the server. Note that
-the client must continue to listen for server messages until it receives a
-SERVER-FINISHED message. The CONNECTION-ID data is the
-original connection-identifier the server sent with its SERVER-HELLO
-message, encrypted using the agreed upon session key.
-
-"N" is the number of bytes in the message that was sent, so "N-1" is the
-number of bytes in the message without the message header byte.
-
-For version 2 of the protocol, the client must send this message after it has
-received the SERVER-HELLO message. If the SERVER-HELLO
-message SESSION-ID-HIT flag is non-zero then the CLIENT-
-FINISHED message is sent immediately, otherwise the CLIENT-
-FINISHED message is sent after the CLIENT-MASTER-KEY message.
-
-
-Hickman [page 12]
-
-
-
-
-
-
-5.6 Server Only Protocol Messages
-
-There are several messages that are only generated by servers. The
-messages are never generated by correctly functioning clients.
-
-5.6.1 SERVER-HELLO (Phase 1; Sent in the clear)
-
-char MSG-SERVER-HELLO
-char SESSION-ID-HIT
-char CERTIFICATE-TYPE
-char SERVER-VERSION-MSB
-char SERVER-VERSION-LSB
-char CERTIFICATE-LENGTH-MSB
-char CERTIFICATE-LENGTH-LSB
-char CIPHER-SPECS-LENGTH-MSB
-char CIPHER-SPECS-LENGTH-LSB
-char CONNECTION-ID-LENGTH-MSB
-char CONNECTION-ID-LENGTH-LSB
-char CERTIFICATE-DATA[MSB<<8|LSB]
-char CIPHER-SPECS-DATA[MSB<<8|LSB]
-char CONNECTION-ID-DATA[MSB<<8|LSB]
-
-The server sends this message after receiving the clients CLIENT-
-HELLO message. The server returns the SESSION-ID-HIT flag
-indicating whether or not the received session-identifier is known by the
-server (i.e. in the server's session-identifier cache). The SESSION-ID-
-HIT flag will be non-zero if the client sent the server a session-identifier
-(in the CLIENT-HELLO message with SESSION-ID-LENGTH != 0)
-and the server found the client's session-identifier in its cache. If the
-SESSION-ID-HIT flag is non-zero then the CERTIFICATE-TYPE,
-CERTIFICATE-LENGTH and CIPHER-SPECS-LENGTH fields will
-be zero.
-
-The CERTIFICATE-TYPE value, when non-zero, has one of the values
-described above (see the information on the CLIENT-CERTIFICATE
-message).
-
-When the SESSION-ID-HIT flag is zero, the server packages up its
-certificate, its cipher specs and a connection-id to send to the client. Using
-this information the client can generate a session key and return it to the
-server with the CLIENT-MASTER-KEY message.
-
-When the SESSION-ID-HIT flag is non-zero, both the server and the
-client compute a new pair of session keys for the current session derived
-from the MASTER-KEY that was exchanged when the SESSION-ID
-was created. The SERVER-READ-KEY and SERVER-WRITE-KEY
-are derived from the original MASTER-KEY keys in the same manner as
-the CLIENT-READ-KEY and CLIENT-WRITE-KEY:
-
-SERVER-READ-KEY = CLIENT-WRITE-KEY
-SERVER-WRITE-KEY = CLIENT-READ-KEY
-
-Note that when keys are being derived and the SESSION-ID-HIT flag is
-set and the server discovers the client's session-identifier in the servers
-cache, then the KEY-ARG-DATA is used from the time when the
-
-Hickman [page 13]
-
-SESSION-ID was established. This is because the client does not send
-new KEY-ARG-DATA (recall that the KEY-ARG-DATA is sent only in
-the CLIENT-MASTER-KEY message).
-
-The CONNECTION-ID-DATA is a string of randomly generated bytes
-used by the server and client at various points in the protocol. The
-CLIENT-FINISHED message contains an encrypted version of the
-CONNECTION-ID-DATA. The length of the CONNECTION-ID must
-be between 16 and than 32 bytes, inclusive.
-
-The CIPHER-SPECS-DATA define a cipher type and key length (in bits)
-that the receiving end supports. Each SESSION-CIPHER-SPEC is 3
-bytes long and looks like this:
-
-char CIPHER-KIND-0
-char CIPHER-KIND-1
-char CIPHER-KIND-2
-
-Where CIPHER-KIND is one of:
-
-SSL_CK_RC4_128_WITH_MD5
-SSL_CK_RC4_128_EXPORT40_WITH_MD5
-SSL_CK_RC2_128_CBC_WITH_MD5
-SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5
-SSL_CK_IDEA_128_CBC_WITH_MD5
-SSL_CK_DES_64_CBC_WITH_MD5
-SSL_CK_DES_192_EDE3_CBC_WITH_MD5
-
-This list is not exhaustive and may be changed in the future.
-
-The SSL_CK_RC4_128_EXPORT40_WITH_MD5 cipher is an RC4
-cipher where some of the session key is sent in the clear and the rest is sent
-encrypted (exactly 40 bits of it). MD5 is used as the hash function for
-production of MAC's and session key's. This cipher type is provided to
-support "export" versions (i.e. versions of the protocol that can be
-distributed outside of the United States) of the client or server.
-
-An exportable implementation of the SSL Handshake Protocol will have
-secret key lengths restricted to 40 bits. For non-export implementations
-key lengths can be more generous (we recommend at least 128 bits). It is
-permissible for the client and server to have a non-intersecting set of
-stream ciphers. This, simply put, means they cannot communicate.
-
-Version 2 of the SSL Handshake Protocol defines the
-SSL_CK_RC4_128_WITH_MD5 to have a key length of 128 bits. The
-SSL_CK_RC4_128_EXPORT40_WITH_MD5 also has a key length of
-128 bits. However, only 40 of the bits are secret (the other 88 bits are sent
-in the clear by the client to the server).
-
-The SERVER-HELLO message is sent after the server receives the
-CLIENT-HELLO message, and before the server sends the SERVER-
-VERIFY message.
-5.6.2 SERVER-VERIFY (Phase 1; Sent encrypted)
-
-char MSG-SERVER-VERIFY
-
-Hickman [page 14]
-
-char CHALLENGE-DATA[N-1]
-
-The server sends this message after a pair of session keys (SERVER-
-READ-KEY and SERVER-WRITE-KEY) have been agreed upon either
-by a session-identifier or by explicit specification with the CLIENT-
-MASTER-KEY message. The message contains an encrypted copy of the
-CHALLENGE-DATA sent by the client in the CLIENT-HELLO
-message.
-
-"N" is the number of bytes in the message that was sent, so "N-1" is the
-number of bytes in the CHALLENGE-DATA without the message
-header byte.
-
-This message is used to verify the server as follows. A legitimate server
-will have the private key that corresponds to the public key contained in
-the server certificate that was transmitted in the SERVER-HELLO
-message. Accordingly, the legitimate server will be able to extract and
-reconstruct the pair of session keys (SERVER-READ-KEY and
-SERVER-WRITE-KEY). Finally, only a server that has done the
-extraction and decryption properly can correctly encrypt the
-CHALLENGE-DATA. This, in essence, "proves" that the server has the
-private key that goes with the public key in the server's certificate.
-
-The CHALLENGE-DATA must be the exact same length as originally
-sent by the client in the CLIENT-HELLO message. Its value must match
-exactly the value sent in the clear by the client in the CLIENT-HELLO
-message. The client must decrypt this message and compare the value
-received with the value sent, and only if the values are identical is the
-server to be "trusted". If the lengths do not match or the value doesn't
-match then the connection is to be closed by the client.
-
-This message must be sent by the server to the client after either detecting
-a session-identifier hit (and replying with a SERVER-HELLO message
-with SESSION-ID-HIT not equal to zero) or when the server receives the
-CLIENT-MASTER-KEY message. This message must be sent before
-any Phase 2 messages or a SERVER-FINISHED message.
-
-5.6.3 SERVER-FINISHED (Phase 2; Sent encrypted)
-
-char MSG-SERVER-FINISHED
-char SESSION-ID-DATA[N-1]
-
-The server sends this message when it is satisfied with the clients security
-handshake and is ready to proceed with transmission/reception of the
-higher level protocols data. The SESSION-ID-DATA is used by the client
-and the server at this time to add entries to their respective session-
-identifier caches. The session-identifier caches must contain a copy of the
-MASTER-KEY sent in the CLIENT-MASTER-KEY message as the
-master key is used for all subsequent session key generation.
-
-"N" is the number of bytes in the message that was sent, so "N-1" is the
-number of bytes in the SESSION-ID-DATA without the message header
-byte.
-
-This message must be sent after the SERVER-VERIFY message.
-
-Hickman [page 15]
-
-5.6.4 REQUEST-CERTIFICATE (Phase 2; Sent encrypted)
-
-char MSG-REQUEST-CERTIFICATE
-char AUTHENTICATION-TYPE
-char CERTIFICATE-CHALLENGE-DATA[N-2]
-
-A server may issue this request at any time during the second phase of the
-connection handshake, asking for the client's certificate. The client
-responds with a CLIENT-CERTIFICATE message immediately if it has
-one, or an ERROR message (with error code NO-CERTIFICATE-
-ERROR) if it doesn't. The CERTIFICATE-CHALLENGE-DATA is a
-short byte string (whose length is greater than or equal to 16 bytes and less
-than or equal to 32 bytes) that the client will use to respond to this
-message.
-
-The AUTHENTICATION-TYPE value is used to choose a particular
-means of authenticating the client. The following types are defined:
-
-SSL_AT_MD5_WITH_RSA_ENCRYPTION
-
-The SSL_AT_MD5_WITH_RSA_ENCRYPTION type requires that the
-client construct an MD5 message digest using information as described
-above in the section on the CLIENT-CERTIFICATE message. Once the
-digest is created, the client encrypts it using its private key (formatted
-according to the digital signature standard defined in PKCS#1). The server
-authenticates the client when it receives the CLIENT-CERTIFICATE
-message.
-
-This message may be sent after a SERVER-VERIFY message and before
-a SERVER-FINISHED message.
-
-5.7 Client/Server Protocol Messages
-
-These messages are generated by both the client and the server.
-
-5.7.1 ERROR (Sent clear or encrypted)
-
-char MSG-ERROR
-char ERROR-CODE-MSB
-char ERROR-CODE-LSB
-
-This message is sent when an error is detected. After the message is sent,
-the sending party shuts the connection down. The receiving party records
-the error and then shuts its connection down.
-
-This message is sent in the clear if an error occurs during session key
-negotiation. After a session key has been agreed upon, errors are sent
-encrypted like all other messages.
-
-Appendix A: ASN.1 Syntax For Certificates
-
-Certificates are used by SSL to authenticate servers and clients. SSL
-Certificates are based largely on the X.509 [3] certificates. An X.509
-certificate contains the following information (in ASN.1 [1] notation):
-
-Hickman [page 16]
-
-X.509-Certificate ::= SEQUENCE {
- certificateInfo CertificateInfo,
- signatureAlgorithm AlgorithmIdentifier,
- signature BIT STRING
-}
-
-CertificateInfo ::= SEQUENCE {
- version [0] Version DEFAULT v1988,
- serialNumber CertificateSerialNumber,
- signature AlgorithmIdentifier,
- issuer Name,
- validity Validity,
- subject Name,
- subjectPublicKeyInfo SubjectPublicKeyInfo
-}
-
-Version ::= INTEGER { v1988(0) }
-
-CertificateSerialNumber ::= INTEGER
-
-Validity ::= SEQUENCE {
- notBefore UTCTime,
- notAfter UTCTime
-}
-
-SubjectPublicKeyInfo ::= SEQUENCE {
- algorithm AlgorithmIdentifier,
- subjectPublicKey BIT STRING
-}
-
-AlgorithmIdentifier ::= SEQUENCE {
- algorithm OBJECT IDENTIFIER,
- parameters ANY DEFINED BY ALGORITHM OPTIONAL
-}
-
-For SSL's purposes we restrict the values of some of the X.509 fields:
-
- The X.509-Certificate::signatureAlgorithm and
-CertificateInfo::signature fields must be identical in value.
-
- The issuer name must resolve to a name that is deemed acceptable by
-the application using SSL. How the application using SSL does this is
-outside the scope of this memo.
-
-Certificates are validated using a few straightforward steps. First, the
-signature on the certificate is checked and if invalid, the certificate is
-invalid (either a transmission error or an attempted forgery occurred).
-Next, the CertificateInfo::issuer field is verified to be an issuer that the
-application trusts (using an unspecified mechanism). The
-CertificateInfo::validity field is checked against the current date and
-verified.
-
-Finally, the CertificateInfo::subject field is checked. This check is
-optional and depends on the level of trust required by the application using
-SSL.
-
-Hickman [page 17]
-
-Appendix B: Attribute Types and Object Identifiers
-
-SSL uses a subset of the X.520 selected attribute types as well as a
-few specific object identifiers. Future revisions of the SSL protocol
-may include support for more attribute types and more object
-identifiers.
-
-B.1 Selected attribute types
-
-commonName { attributeType 3 }
-The common name contained in the distinguished name contained
-within a certificate issuer or certificate subject.
-
-countryName { attributeType 6 }
-The country name contained in the distinguished name contained
-within a certificate issuer or certificate subject.
-
-localityName { attributeType 7 }
-The locality name contained in the distinguished name contained
-within a certificate issuer or certificate subject.
-
-stateOrProvinceName { attributeType 8 }
-The state or province name contained in the distinguished name
-contained within a certificate issuer or certificate subject.
-
-organizationName { attributeType 10 }
-The organization name contained in the distinguished name contained
-within a certificate issuer or certificate subject.
-
-organizationalUnitName { attributeType 11 }
-The organizational unit name contained in the distinguished name
-contained within a certificate issuer or certificate subject.
-
-B.2 Object identifiers
-
-md2withRSAEncryption { ... pkcs(1) 1 2 }
-The object identifier for digital signatures that use both MD2 and RSA
-encryption. Used by SSL for certificate signature verification.
-
-md5withRSAEncryption { ... pkcs(1) 1 4 }
-The object identifier for digital signatures that use both MD5 and RSA
-encryption. Used by SSL for certificate signature verification.
-
-rc4 { ... rsadsi(113549) 3 4 }
-The RC4 symmetric stream cipher algorithm used by SSL for bulk
-encryption.
-
-Appendix C: Protocol Constant Values
-
-This section describes various protocol constants. A special value needs
-mentioning - the IANA reserved port number for "https" (HTTP using
-SSL). IANA has reserved port number 443 (decimal) for "https". IANA
-has also reserved port number 465 for "ssmtp" and port number 563 for
-"snntp".
-
-Hickman [page 18]
-
-C.1 Protocol Version Codes
-
-#define SSL_CLIENT_VERSION 0x0002
-#define SSL_SERVER_VERSION 0x0002
-
-C.2 Protocol Message Codes
-
-The following values define the message codes that are used by version
-2 of the SSL Handshake Protocol.
-
-#define SSL_MT_ERROR 0
-#define SSL_MT_CLIENT_HELLO 1
-#define SSL_MT_CLIENT_MASTER_KEY 2
-#define SSL_MT_CLIENT_FINISHED 3
-#define SSL_MT_SERVER_HELLO 4
-#define SSL_MT_SERVER_VERIFY 5
-#define SSL_MT_SERVER_FINISHED 6
-#define SSL_MT_REQUEST_CERTIFICATE 7
-#define SSL_MT_CLIENT_CERTIFICATE 8
-
-C.3 Error Message Codes
-
-The following values define the error codes used by the ERROR message.
-
-#define SSL_PE_NO_CIPHER 0x0001
-#define SSL_PE_NO_CERTIFICATE 0x0002
-#define SSL_PE_BAD_CERTIFICATE 0x0004
-#define SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006
-
-C.4 Cipher Kind Values
-
-The following values define the CIPHER-KIND codes used in the
-CLIENT-HELLO and SERVER-HELLO messages.
-
-#define SSL_CK_RC4_128_WITH_MD5
- 0x01,0x00,0x80
-#define SSL_CK_RC4_128_EXPORT40_WITH_MD5
- 0x02,0x00,0x80
-#define SSL_CK_RC2_128_CBC_WITH_MD5
- 0x03,0x00,0x80
-#define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5
- 0x04,0x00,0x80
-#define SSL_CK_IDEA_128_CBC_WITH_MD5
- 0x05,0x00,0x80
-#define SSL_CK_DES_64_CBC_WITH_MD5
- 0x06,0x00,0x40
-#define SSL_CK_DES_192_EDE3_CBC_WITH_MD5
- 0x07,0x00,0xC0
-
-C.5 Certificate Type Codes
-
-The following values define the certificate type codes used in the
-SERVER-HELLO and CLIENT-CERTIFICATE messages.
-
-#define SSL_CT_X509_CERTIFICATE 0x01
-
-Hickman [page 19]
-
-C.6 Authentication Type Codes
-
-The following values define the authentication type codes used in the
-REQUEST-CERTIFICATE message.
-
-#define SSL_AT_MD5_WITH_RSA_ENCRYPTION 0x01
-
-C.7 Upper/Lower Bounds
-
-The following values define upper/lower bounds for various protocol
-parameters.
-
-#define SSL_MAX_MASTER_KEY_LENGTH_IN_BITS 256
-#define SSL_MAX_SESSION_ID_LENGTH_IN_BYTES 16
-#define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES 64
-#define SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767
-#define SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383
-
-C.8 Recommendations
-
-Because protocols have to be implemented to be of value, we recommend
-the following values for various operational parameters. This is only a
-recommendation, and not a strict requirement for conformance to the
-protocol.
-
-Session-identifier Cache Timeout
-
-Session-identifiers are kept in SSL clients and SSL servers. Session-
-identifiers should have a lifetime that serves their purpose (namely,
-reducing the number of expensive public key operations for a single
-client/server pairing). Consequently, we recommend a maximum session-
-identifier cache timeout value of 100 seconds. Given a server that can
-perform N private key operations per second, this reduces the server load
-for a particular client by a factor of 100.
-
-Appendix D: Attacks
-
-In this section we attempt to describe various attacks that might be used
-against the SSL protocol. This list is not guaranteed to be exhaustive. SSL
-was defined to thwart these attacks.
-
-D.1 Cracking Ciphers
-
-SSL depends on several cryptographic technologies. RSA Public Key
-encryption [5] is used for the exchange of the session key and client/server
-authentication. Various cryptographic algorithms are used for the session
-cipher. If successful cryptographic attacks are made against these
-technologies then SSL is no longer secure.
-
-Attacks against a specific communications session can be made by
-recording the session, and then spending some large number of compute
-cycles to crack either the session key or the RSA public key until the
-communication can be seen in the clear. This approach is easier than
-cracking the cryptographic technologies for all possible messages. Note
-that SSL tries to make the cost of such of an attack greater than the
-
-Hickman [page 20]
-
-benefits gained from a successful attack, thus making it a waste of
-money/time to perform such an attack.
-
-There have been many books [9] and papers [10] written on cryptography.
-This document does not attempt to reference them all.
-
-D.2 Clear Text Attack
-
-A clear text attack is done when the attacker has an idea of what kind of
-message is being sent using encryption. The attacker can generate a data
-base whose keys are the encrypted value of the known text (or clear text),
-and whose values are the session cipher key (we call this a "dictionary").
-Once this data base is constructed, a simple lookup function identifies the
-session key that goes with a particular encrypted value. Once the session
-key is known, the entire message stream can be decrypted. Custom
-hardware can be used to make this cost effective and very fast.
-
-Because of the very nature of SSL clear text attacks are possible. For
-example, the most common byte string sent by an HTTP client application
-to an HTTP server is "GET". SSL attempts to address this attack by using
-large session cipher keys. First, the client generates a key which is larger
-than allowed by export, and sends some of it in the clear to the server (this
-is allowed by United States government export rules). The clear portion of
-the key concatenated with the secret portion make a key which is very
-large (for RC4, exactly 128 bits).
-
-The way that this "defeats" a clear text attack is by making the amount of
-custom hardware needed prohibitively large. Every bit added to the length
-of the session cipher key increases the dictionary size by a factor of 2. By
-using a 128 bit session cipher key length the size of the dictionary required
-is beyond the ability of anyone to fabricate (it would require more atoms to
-construct than exist in the entire universe). Even if a smaller dictionary is
-to be used, it must first be generated using the clear key bits. This is a time
-consumptive process and also eliminates many possible custom hardware
-architectures (e.g. static prom arrays).
-
-The second way that SSL attacks this problem is by using large key
-lengths when permissible (e.g. in the non-export version). Large key sizes
-require larger dictionaries (just one more bit of key size doubles the size of
-the dictionary). SSL attempts to use keys that are 128 bits in length.
-
-Note that the consequence of the SSL defense is that a brute force attack
-becomes the cheapest way to attack the key. Brute force attacks have well
-known space/time tradeoffs and so it becomes possible to define a cost of
-the attack. For the 128 bit secret key, the known cost is essentially infinite.
-For the 40 bit secret key, the cost is much smaller, but still outside the
-range of the "random hacker".
-
-D.3 Replay
-
-The replay attack is simple. A bad-guy records a communication session
-between a client and server. Later, it reconnects to the server, and plays
-back the previously recorded client messages. SSL defeats this attack
-using a "nonce" (the connection-id) which is "unique" to the connection. In
-theory the bad-guy cannot predict the nonce in advance as it is based on a
-
-Hickman [page 21]
-
-set of random events outside the bad-guys control, and therefore the bad-
-guy cannot respond properly to server requests.
-
-A bad-guy with large resources can record many sessions between a client
-and a server, and attempt to choose the right session based on the nonce
-the server sends initially in its SERVER-HELLO message. However, SSL
-nonces are at least 128 bits long, so a bad-guy would need to record
-approximately 2^64 nonces to even have a 50% chance of choosing the
-right session. This number is sufficiently large that one cannot
-economically construct a device to record 2^64 messages, and therefore
-the odds are overwhelmingly against the replay attack ever being
-successful.
-
-D.4 The Man In The Middle
-
-The man in the middle attack works by having three people in a
-communications session: the client, the server, and the bad guy. The bad
-guy sits between the client and the server on the network and intercepts
-traffic that the client sends to the server, and traffic that the server
-sends to
-the client.
-
-The man in the middle operates by pretending to be the real server to the
-client. With SSL this attack is impossible because of the usage of server
-certificates. During the security connection handshake the server is
-required to provide a certificate that is signed by a certificate authority.
-Contained in the certificate is the server's public key as well as its name
-and the name of the certificate issuer. The client verifies the certificate by
-first checking the signature and then verifying that the name of the issuer
-is somebody that the client trusts.
-
-In addition, the server must encrypt something with the private key that
-goes with the public key mentioned in the certificate. This in essence is a
-single pass "challenge response" mechanism. Only a server that has both
-the certificate and the private key can respond properly to the challenge.
-
-If the man in the middle provides a phony certificate, then the signature
-check will fail. If the certificate provided by the bad guy is legitimate, but
-for the bad guy instead of for the real server, then the signature will pass
-but the name check will fail (note that the man in the middle cannot forge
-certificates without discovering a certificate authority's private key).
-
-Finally, if the bad guy provides the real server's certificate then the
-signature check will pass and the name check will pass. However, because
-the bad guy does not have the real server's private key, the bad guy cannot
-properly encode the response to the challenge code, and this check will
-fail.
-
-In the unlikely case that a bad guy happens to guess the response code to
-the challenge, the bad guy still cannot decrypt the session key and
-therefore cannot examine the encrypted data.
-
-
-Hickman [page 22]
-
-Appendix E: Terms
-
-Application Protocol
-An application protocol is a protocol that normally layers directly on
-top of TCP/IP. For example: HTTP, TELNET, FTP, and SMTP.
-
-Authentication
-Authentication is the ability of one entity to determine the identity of
-another entity. Identity is defined by this document to mean the
-binding between a public key and a name and the implicit ownership
-of the corresponding private key.
-
-Bulk Cipher
-This term is used to describe a cryptographic technique with certain
-performance properties. Bulk ciphers are used when large quantities of
-data are to be encrypted/decrypted in a timely manner. Examples
-include RC2, RC4, and IDEA.
-
-Client
-In this document client refers to the application entity that is initiates a
-connection to a server.
-
-CLIENT-READ-KEY
-The session key that the client uses to initialize the client read cipher.
-This key has the same value as the SERVER-WRITE-KEY.
-
-CLIENT-WRITE-KEY
-The session key that the client uses to initialize the client write cipher.
-This key has the same value as the SERVER-READ-KEY.
-
-MASTER-KEY
-The master key that the client and server use for all session key
-generation. The CLIENT-READ-KEY, CLIENT-WRITE-KEY,
-SERVER-READ-KEY and SERVER-WRITE-KEY are generated
-from the MASTER-KEY.
-
-MD2
-MD2 [8] is a hashing function that converts an arbitrarily long data
-stream into a digest of fixed size. This function predates MD5 [7]
-which is viewed as a more robust hash function [9].
-
-MD5
-MD5 [7] is a hashing function that converts an arbitrarily long data
-stream into a digest of fixed size. The function has certain properties
-that make it useful for security, the most important of which is it's
-inability to be reversed.
-
-Nonce
-A randomly generated value used to defeat "playback" attacks. One
-party randomly generates a nonce and sends it to the other party. The
-receiver encrypts it using the agreed upon secret key and returns it to
-the sender. Because the nonce was randomly generated by the sender
-this defeats playback attacks because the replayer can't know in
-advance the nonce the sender will generate. The receiver denies
-connections that do not have the correctly encrypted nonce.
-
-Hickman [page 23]
-
-Non-repudiable Information Exchange
-When two entities exchange information it is sometimes valuable to
-have a record of the communication that is non-repudiable. Neither
-party can then deny that the information exchange occurred. Version 2
-of the SSL protocol does not support Non-repudiable information
-exchange.
-
-Public Key Encryption
-Public key encryption is a technique that leverages asymmetric ciphers.
-A public key system consists of two keys: a public key and a private
-key. Messages encrypted with the public key can only be decrypted
-with the associated private key. Conversely, messages encrypted with
-the private key can only be decrypted with the public key. Public key
-encryption tends to be extremely compute intensive and so is not
-suitable as a bulk cipher.
-
-Privacy
-Privacy is the ability of two entities to communicate without fear of
-eavesdropping. Privacy is often implemented by encrypting the
-communications stream between the two entities.
-
-RC2, RC4
-Proprietary bulk ciphers invented by RSA (There is no good reference
-to these as they are unpublished works; however, see [9]). RC2 is
-block cipher and RC4 is a stream cipher.
-
-Server
-The server is the application entity that responds to requests for
-connections from clients. The server is passive, waiting for requests
-from clients.
-
-Session cipher
-A session cipher is a "bulk" cipher that is capable of encrypting or
-decrypting arbitrarily large amounts of data. Session ciphers are used
-primarily for performance reasons. The session ciphers used by this
-protocol are symmetric. Symmetric ciphers have the property of using
-a single key for encryption and decryption.
-
-Session identifier
-A session identifier is a random value generated by a client that
-identifies itself to a particular server. The session identifier can be
-thought of as a handle that both parties use to access a recorded secret
-key (in our case a session key). If both parties remember the session
-identifier then the implication is that the secret key is already known
-and need not be negotiated.
-
-Session key
-The key to the session cipher. In SSL there are four keys that are called
-session keys: CLIENT-READ-KEY, CLIENT-WRITE-KEY,
-SERVER-READ-KEY, and SERVER-WRITE-KEY.
-
-SERVER-READ-KEY
-The session key that the server uses to initialize the server read cipher.
-This key has the same value as the CLIENT-WRITE-KEY.
-
-
-Hickman [page 24]
-
-SERVER-WRITE-KEY
-The session key that the server uses to initialize the server write cipher.
-This key has the same value as the CLIENT-READ-KEY.
-
-Symmetric Cipher
-A symmetric cipher has the property that the same key can be used for
-decryption and encryption. An asymmetric cipher does not have this
-behavior. Some examples of symmetric ciphers: IDEA, RC2, RC4.
-
-
-
-References
-
-[1] CCITT. Recommendation X.208: "Specification of Abstract Syntax
-Notation One (ASN.1). 1988.
-
-[2] CCITT. Recommendation X.209: "Specification of Basic Encoding
-Rules for Abstract Syntax Notation One (ASN.1). 1988.
-
-[3] CCITT. Recommendation X.509: "The Directory - Authentication
-Framework". 1988.
-
-[4] CCITT. Recommendation X.520: "The Directory - Selected Attribute
-Types". 1988.
-
-[5] RSA Laboratories. PKCS #1: RSA Encryption Standard, Version 1.5,
-November 1993.
-
-[6] RSA Laboratories. PKCS #6: Extended-Certificate Syntax Standard,
-Version 1.5, November 1993.
-
-[7] R. Rivest. RFC 1321: The MD5 Message Digest Algorithm. April
-1992.
-
-[8] R. Rivest. RFC 1319: The MD2 Message Digest Algorithm. April
-1992.
-
-[9] B. Schneier. Applied Cryptography: Protocols, Algorithms, and Source
-Code in C, Published by John Wiley & Sons, Inc. 1994.
-
-[10] M. Abadi and R. Needham. Prudent engineering practice for
-cryptographic protocols. 1994.
-
-Patent Statement
-
-This version of the SSL protocol relies on the use of patented public key
-encryption technology for authentication and encryption. The Internet
-Standards Process as defined in RFC 1310 requires a written statement
-from the Patent holder that a license will be made available to applicants
-under reasonable terms and conditions prior to approving a specification as
-a Proposed, Draft or Internet Standard.
-
-The Massachusetts Institute of Technology and the Board of Trustees of
-the Leland Stanford Junior University have granted Public Key Partners
-(PKP) exclusive sub-licensing rights to the following patents issued in the
-
-Hickman [page 25]
-
-United States, and all of their corresponding foreign patents:
-
-Cryptographic Apparatus and Method ("Diffie-Hellman")
- No. 4,200,770
-
-Public Key Cryptographic Apparatus and Method ("Hellman-Merkle")
- No. 4,218,582
-
-Cryptographic Communications System and Method ("RSA")
- No. 4,405,829
-
-Exponential Cryptographic Apparatus and Method ("Hellman-Pohlig")
- No. 4,424,414
-
-These patents are stated by PKP to cover all known methods of practicing
-the art of Public Key encryption, including the variations collectively
-known as ElGamal.
-
-Public Key Partners has provided written assurance to the Internet Society
-that parties will be able to obtain, under reasonable, nondiscriminatory
-terms, the right to use the technology covered by these patents. This
-assurance is documented in RFC 1170 titled "Public Key Standards and
-Licenses". A copy of the written assurance dated April 20, 1990, may be
-obtained from the Internet Assigned Number Authority (IANA).
-
-The Internet Society, Internet Architecture Board, Internet Engineering
-Steering Group and the Corporation for National Research Initiatives take
-no position on the validity or scope of the patents and patent applications,
-nor on the appropriateness of the terms of the assurance. The Internet
-Society and other groups mentioned above have not made any
-determination as to any other intellectual property rights which may apply
-to the practice of this standard. Any further consideration of these matters
-is the user's own responsibility.
-
-Security Considerations
-
-This entire document is about security.
-
-Author's Address
-
-Kipp E.B. Hickman
-Netscape Communications Corp.
-501 East Middlefield Rd.
-Mountain View, CA 94043
-kipp@netscape.com
-
-
-Hickman [page 26]
-
-
-
-
-
-
-