Internet Engineering Task Force M. Ray Internet-Draft PhoneFactor, Inc. Intended status: Informational May 04, 2012 Expires: November 03, 2012 Transport Layer Security (TLS) Encrypted Handshake Extension draft-ray-tls-encrypted-handshake-00 Abstract This specification defines a Transport Layer Security (TLS) extension which allows endpoints to negotiate the use of encryption with forward secrecy at the beginning of the handshake. Two levels of functionality are defined. Implementations are free to support one or both levels, with the first level incurring no additional computational or round-trip overhead. The TLS cryptographic calculations are unchanged. Status of this Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. 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." This Internet-Draft will expire on November 03, 2012. Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents Ray Expires November 03, 2012 [Page 1] Internet-Draft Encrypted Handshake May 2012 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 2. Functional Overview . . . . . . . . . . . . . . . . . . . . . 3 3. Extension Definition . . . . . . . . . . . . . . . . . . . . . 5 4. ServerHello2a handshake message . . . . . . . . . . . . . . . 7 5. ServerHello2b handshake message . . . . . . . . . . . . . . . 8 6. ClientHello2 handshake message . . . . . . . . . . . . . . . . 9 7. Session resumption . . . . . . . . . . . . . . . . . . . . . . 9 8. Client Behavior . . . . . . . . . . . . . . . . . . . . . . . 11 9. Server Behavior . . . . . . . . . . . . . . . . . . . . . . . 14 10. Other Considerations . . . . . . . . . . . . . . . . . . . . . 15 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 12. Security Considerations . . . . . . . . . . . . . . . . . . . 16 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 17 1. Introduction Although TLS [RFC 5246] provides a variety of cryptographic options for securing application data it exposes an unnecessarily large amount of plaintext during its initial handshake. The server's identity, session resumption data, and session ticket data are all sent in the clear. When client cert authentication is used, the client's identity and the server's list of trusted root CAs is also exposed. Typically the leaked information is sufficient to allow a passive observer to fingerprint the TLS client and server applications in use, and even to learn something about the connection history of the user. This is arguably not a characteristic of an ideal data security protocol. Currently, the only defined way to fully encrypt a TLS handshake is to first perform an unencrypted TLS handshake as an anonymous client and server and then immediately renegotiate the connection all over again in the new encrypted channel. The overhead this imposes is significant, effectively doubling the number of (relatively expensive) public key operations and requiring several additional round trips. Furthermore, implementations often completely forbid both the initial anon-anon TLS connection as well as client-initiated renegotiation. Consequently, renegotiation is of limited use to endpoints desiring greater protection for their handshake data. The amount of interesting information sent in the clear will continue to increase as new protocol features and applications are enabled by new TLS extensions. But some interesting new applications may be limited by the lack of encryption during the initial handshake. Ray Expires November 03, 2012 [Page 2] Internet-Draft Encrypted Handshake May 2012 In the unmodified TLS handshake, encryption of the record layer begins seemingly as late in the process as possible. The reasons for this design decision are unclear but it seems likely to be an artifact of the historical under-use of ephemeral Diffie-Hellman (DHE) cipher suites at the time (SSLv2 did not support them at all). At the time, the need for the additional computation required by traditional Diffie-Hellman key exchange was considered expensive and for the RC4 cipher (very popular for its efficiency) DHE cipher suites have never even been defined. Before the Server Name Indication (SNI) extension [RFC 6066], it was not possible to serve multiple HTTPS sites from a single IP address, so the specific site to which the user was connecting was effectively already known. There were no TLS extensions to carry interesting plaintext, so there was little interesting plaintext to protect (client certs being a notable exception). Today we have a greater amount of interesting information present in the handshake, faster hardware, and the far more efficient Elliptic Curve DH algorithms. Some very high-traffic sites are configured to select (EC)DHE cipher suites whenever the option is presented by the client.[XXX cite] There are new extensions being proposed that would benefit from encryption in the handshake.[XXX cite NP(N)] So this appears to be an appropriate time to introduce early encryption via ephemeral key exchange into the handshake. 1.1. Requirements Language XXX reference presentation language in 5246 here? The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. 2. Functional Overview The Encrypted Handshake (EH) extension allows endpoints to perform a key exchange and begin record layer encryption as early in the handshake as possible. Two levels of protection provide flexibility for the client and server (and the implementation) to manage practical considerations and level of effort. While in general it is not possible to protect pre-authentication data from an active man-in-the-middle type attacker, this extension hides the bulk of the handshake data from a passive observer and can detect active attacks as a failed handshake. Level one provides encryption with forward secrecy for all data in the Server Hello message (including Server Hello extensions) and all data following. This level incurs no additional computational or round-trip overhead over the traditional handshake and is intended to require minimal changes to the implementation of existing libraries, but it has the limitation that data sent by the client in the Client Hello continues to be sent in the clear. Ray Expires November 03, 2012 [Page 3] Internet-Draft Encrypted Handshake May 2012 The second level of implementation encrypts all the same handshake data as the first and additionally encrypts the most interesting parts of the Client Hello (e.g. the extensions), but it requires an additional round trip to the server. Note that in the following diagrams, an asterisk (*) is used to indicate a optional or situation-dependent messages, while square brackets are placed around the [ChangeCipherSpec] message to reflect its distinct record type. For reference, the traditional TLS full handshake without Encrypted Handshake looks like this: Client Server ClientHello --------> ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] Finished --------> [ChangeCipherSpec] <-------- Finished Application Data <-------> Application Data Figure 1. Unencrypted TLS full handshake. When the use of EH level one has been negotiated, the ServerHello message is split to allow the ChangeCipherSpec record to be sent as soon as possible: Client Server ClientHello (with EH ext) --------> ServerHello2a [ChangeCipherSpec] ServerHello2b Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDone [ChangeCipherSpec] Certificate* ClientKeyExchange CertificateVerify* Finished --------> <-------- Finished Application Data <-------> Application Data Ray Expires November 03, 2012 [Page 4] Internet-Draft Encrypted Handshake May 2012 Figure 2. TLS full handshake using EH level one. When the use of EH level two has been negotiated, the ServerHello message is split and the ChangeCipherSpec record is sent early (as in level one). The protocol then performs an additional round-trip in order to allow the complete ClientHello2 to be transmitted within the encrypted channel: Client Server ClientHello (with EH ext) --------> ServerHello2a <-------- [ChangeCipherSpec] [ChangeCipherSpec] ClientHello2 --------> ServerHello2b Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* Finished --------> <-------- Finished Application Data <-------> Application Data Figure 3. TLS full handshake using EH level two. 3. Extension Definition This document defines a new TLS extension, "encrypted_handshake" (having extension type [TBD]), which both negotiates the level of EH implementation used for this handshake as well as transmits the (EC)DH parameters necessary for early key exchange. This extension is sent in both the client-to-server and server-to-client directions, however server acceptance of the use of EH is also indicated by the presence of a ServerHello2a message in response. The "extension data" field of this extension contains one of two different structures, or is empty, depending on the type of the message carrying it. Levels of support are indicated by the following enumeration. However, levels higher than are defined here are reserved for future use and receivers should treat them accordingly. enum { zero(0), one(1), two(2), inquire(255) } EncryptedHandshakeLevel; When the extension is carried on the Client Hello message it contains Ray Expires November 03, 2012 [Page 5] Internet-Draft Encrypted Handshake May 2012 an EncryptedHandshakeInfoCH structure: struct { EncryptedHandshakeLevel client_requested; EncryptedHandshakeLevel client_required; ClientDHParamSet client_dh_params_sets<0..2^16-1>; Extension conditional_extensions<0..2^16-1>; } EncryptedHandshakeInfoCH; client_requested The highest EH level being requested by the client. client_required The lowest EH level acceptable by the client. client_dh_params_sets Contains a set of (EC)DH(E) parameters for all KeyExchangeAlgorithms used by any of the cipher_suites specified in the ClientHello. The element type is defined below. conditional_extensions ClientHello-type extensions which are sent in the clear, but to be processed by the server only if the server interprets the EH extension and agrees to EH level one or higher. The definition of 'Extension' is from [TLS]. When the extension is carried on the Server Hello message it contains an EncryptedHandshakeInfoSH structure: struct { EncryptedHandshakeLevel server_max_supported; } EncryptedHandshakeInfoSH; server_max_supported The max EH level provided by the server, for informational purposes. The EH extension MAY be included on the ServerHello2a or ServerHello2b message, or it may be omitted. If present, it MUST be empty. The ClientDHParamSet structure represents a set of (EC)DH parameters and specifies with which cipher suites they may be used: Ray Expires November 03, 2012 [Page 6] Internet-Draft Encrypted Handshake May 2012 struct { CipherSuite cipher_suites<2..2^16-2>; uint16 params_size; select (KeyExchangeAlgorithm) { case dh_anon: // [TLS] case dhe_dss: case dhe_rsa: DHParams params; case ec_diffie_hellman: // [RFC 4492] ClientECDiffieHellmanPublic params; }; } ClientDHParamSet; cipher_suites The set of cipher suite(s) to which this ClientDHParamSet applies. params_size Number of bytes to follow in the params field. params The set of Diffie-Hellman parameters to be used for the specified cipher suites. 4. ServerHello2a handshake message This message forms the (unencrypted) first part of the modified Server Hello handshake message when the use of EH level one or level two has been accepted. Its purpose is to transmit to the client the minimum information necessary to complete the key exchange subsequent to a Client Hello which proposed the use of EH. struct { ProtocolVersion server_version; Random random; CipherSuite cipher_suite; EncryptedHandshakeLevel server_accepted; CompressionMethod compression_method; uint16 params_size; select (KeyExchangeAlgorithm) { case dh_anon: case dhe_dss: case dhe_rsa: ServerDHParams params; // [TLS] case ec_diffie_hellman: ServerECDHParams params; // [RFC 4492] }; Extension extensions<0..2^16-1>; } ServerHello2a; server_version, random, compression_method Defined identically to the corresponding field in the Server Hello message of the TLS version in use. Ray Expires November 03, 2012 [Page 7] Internet-Draft Encrypted Handshake May 2012 cipher_suite Defined identically to the corresponding field in the Server Hello message of the TLS version in use. On a ServerHello2a message, the selected cipher suite MUST be some type of DH cipher suite. server_accepted The Encrypted Handshake level accepted by the server for this handshake. On a ServerHello2a message, this field must indicate level one or level two. extensions ServerHello-type extensions included on the ServerHello2a handshake message. Most extensions SHOULD sent under encryption on a subsequent message, but if any are needed to establish the cipher state they MUST be included here. params_size Number of bytes in the immediately following params field, not including the params_size field itself. params Defined identically to the corresponding field in the Server Key Exchange message. However, note that in this structure the parameters are not signed. 5. ServerHello2b handshake message This message forms the (encrypted) second part of the modified ServerHello handshake message. Its purpose is to transmit to the client the information present in an ordinary ServerHello that was not transmitted in the ServerHello1a. It is sent by the server subsequent to receiving from the client either: 1. a ServerHello1a accepting EH level one behavior and ChangeCipherSpec, or 2. a ServerHello1a accepting EH level two behavior ChangeCipherSpec, and after the client's ClientHello2. struct { EncryptedHandshakeLevel server_max_supported; SessionID session_id; select (extensions_present) { case false: struct {}; case true: Extension extensions<0..2^16-1>; }; } ServerHello2b; server_max_supported Ray Expires November 03, 2012 [Page 8] Internet-Draft Encrypted Handshake May 2012 The max EH level provided by the server, for informational purposes. session_id, extensions Defined identically to the corresponding field in the Server Hello message of the TLS version in use. Ordinarily the EH extension is omitted, must be empty if present. 6. ClientHello2 handshake message This message is used to transmit information under encryption that would have otherwise been sent in the clear in the ClientHello. Certain fields such as protocol_version, client_random, and cipher_suite are always necessary in order to proceed with any type of handshake. However, in anticipation of successful negotiation of EH level two, a client MAY elect to leave the session_id field empty and extensions absent in the ClientHello in order to supply them later under encryption in ClientHello2. struct { SessionID session_id; select (extensions_present) { case false: struct {}; case true: Extension extensions<0..2^16-1>; }; } ClientHello2; session_id, extensions Defined identically to the corresponding field in the Client Hello message of the TLS version in use. Ordinarily the EH extension is omitted, must be empty if present. 7. Session resumption TLS provides a means to efficiently resume a previously established session without having to perform any asymmetric crypto or cert validation operations (often referred to as an "abbreviated handshake"). Session resumption generally involves the presence of the same Client/ServerHello extensions as a full handshake, so it has equal need of encryption. EH levels one and two are both compatible Ray Expires November 03, 2012 [Page 9] Internet-Draft Encrypted Handshake May 2012 with session resumption. Traditional TLS session resumption without EH looks like this: Client Server ClientHello --------> ServerHello [ChangeCipherSpec] <-------- Finished [ChangeCipherSpec] Finished --------> Application Data <-------> Application Data Figure 4. Unencrypted TLS abbreviated handshake. When the use of EH level one has been negotiated a handshake with session resumption looks like this: Client Server ClientHello (with EH ext) --------> ServerHello2a [ChangeCipherSpec] ServerHello2b <-------- Finished [ChangeCipherSpec] Finished --------> Application Data <-------> Application Data Figure 5. TLS abbreviated handshake with EH level one. With EH level two, the client MAY leave the session_id field empty when it is transmitted in the clear on the ClientHello, and still perform resumption based on the session_id field on ClientHello2. However, if client withholds the session_id value and the server then declines EH level two session resumption will not be possible. But because session resumption depends on the client having had recent prior interaction with the server anyway, this unpredictability is thought unlikely to become an issue in practice. Client Server ClientHello (with EH ext) --------> ServerHello2a <-------- [ChangeCipherSpec] [ChangeCipherSpec] ClientHello2 --------> ServerHello2b <-------- Finished Finished --------> Application Data <-------> Application Data Figure 6. TLS abbreviated handshake with EH level two. Ray Expires November 03, 2012 [Page 10] Internet-Draft Encrypted Handshake May 2012 XXX TODO possible optimization: the client could indicate that it wants to allow resumption without involving the key exchange. This would seem to leave any ServerHello extensions completely in the clear. But many extensions seem to be ignored or are required to hold identical values on resumption, if they could be shown to be redundant perhaps they could simply be eliminated. 8. Client Behavior The client initiates the connection and begins the handshake using the following sequence, after which the connection generally follows the TLS specification. 1. The client constructs and sends the Client Hello message and EH extension: * A client that simply wishes to query a server for its level of support SHOULD send a Client Hello containing an EH extension with a client_required value of 'inquire'. The client SHOULD set client_requested to the highest level that it supports (which may be zero). Other than this specfic case, a client SHOULD NOT set the client_required value higher than the client_requested value. * A client wishing not to use EH SHOULD send an EH extension on the Client Hello with the client_requested and client_required fields set to zero. This is semantically equivalent to sending no EH extension at all, except that the Server Hello may contain an EH extension in reply. * A client wishing to use level one EH support only SHOULD send an EH extension on the Client Hello with the client_requested field set to one. The client SHOULD set the client_required field to zero or one as appropriate. * A client which desires level two EH support but will accept level one as a fallback SHOULD send an EH extension on the Client Hello with the client_requested field set to two and the client_required field set to one. Since the protocol may fall back to level one, the client SHOULD continue send all necessary session_id and extensions on the initial Client Hello. * A client which requires level two EH support SHOULD set the client_requested and client_required fields to two. Such a client SHOULD NOT set any session_id or extension data on the Ray Expires November 03, 2012 [Page 11] Internet-Draft Encrypted Handshake May 2012 ClientHello, or send extensions other than EH and those necessary for the key exchange and the integrity of the connection. Renegotiation Info [RFC 5746] is an example of such an extension. 2. If a client, requesting level one or higher, anticipates that sensitive data could be returned via some ServerHello extension in reply, and would prefer that extension not be evaluated at all rather than have that reply transmitted in the clear, the client MUST put the requesting ClientHello extension inside the conditional_extensions section of the EH extension instead of putting it in the usual ClientHello extension section. 3. The server's response to the ClientHello informs the client of the EH level that will be in effect for the remainder of the handshake: * If the server's response is a standard Server Hello message, the server is providing EH level zero. If any EH extension is present, it MUST be ignored. * If the server's response is a ServerHello2a message, this the handshake is proceeding at EH level one or higher. The client MUST proceed with the handshake at the level indicated by the server_accepted field. (Level zero here represents an unrecoverable protocol error.) 4. Now, depending on the negotiated level: * If the client required an EH level higher than what was accepted by the server, the client SHOULD continue with the connection at least to the point of validating the server's Finished message (in order to authenticate this information). As the client continues the handshake it MUST avoid disclosing any potentially interesting info (such as a client certificate). After the server's Finished message has been received and validated the client MUST close the connection gracefully without transmitting any application data. The remainder of this section does not apply. * If EH level zero was negotiated (and no higher value was required by the client) the client continues the TLS connection as usual and the remainder of this section does not apply. * If EH level one or two was negotiated, the client handles the TLS-defined fields and extensions on the ServerHello2a in the usual way. Additionally, the client MUST examine the server- selected cipher suite and confirm that it was (a) a cipher suite the client proposed and (b) a cipher suite for which the client had provided a ClientDHParamSet in the ClientHello EH extension. Ray Expires November 03, 2012 [Page 12] Internet-Draft Encrypted Handshake May 2012 5. By combining data from the Client Hello and the ServerHello2a, the client now has everything necessary to generate the key_block. * If EH level one is in use the client SHOULD NOT send his own Change Cipher Spec record at this time, even though he could. This somewhat artificial rule is to simply to promote consistency among implementations. However, the client MUST send his CCS and switch to the new cipher state before sending any other handshake records. * If EH level two is in use, the client MUST send a Change Cipher Spec record, switch to the new cipher state, and generate and send a ClientHello2 handshake message. The session_id field SHOULD be populated with the appropriate value if it was withheld from the original ClientHello, otherwise it MUST be empty. Likewise, any ClientHello extensions not sent in the original ClientHello (either in the ClientHello extension area or in the EH extension conditional_extensions area) SHOULD be included. The normal rule of at most one of any specific type of extension MUST be followed, but it now applies to the union of all three possible ClientHello-type extension areas. 6. The client receives a ChangeCipherSpec record from the server and and the new cipher state becomes active on the server-to-client channel. 7. The client receives a ServerHello2b handshake message. The client MUST interpret the session_id and extensions the usual way, as defined for a normal ServerHello. The client MAY look at the server_max_supported value for informational purposes, but there is no guarantee that this value will remain valid for any length of time. If any EH extension is present, it MUST be ignored. 8. The remainder of the handshake proceeds as usual, with just these annotations: * We've already received the Change Cipher Spec from the server, so we don't expect to receive another. * In level one, the client will need to send a Change Cipher Spec before his next handshake message, typically a Certificate or Client Key Exchange message. In level two the client will have already sent it. Ray Expires November 03, 2012 [Page 13] Internet-Draft Encrypted Handshake May 2012 * When the (EC)DH parameters are received again (at the expected point in a non-EH handshake, e.g. the Server Key Exchange message), they MUST be compared with the server params used in the early key exchange. If the data covered by the server's signature is not byte-for-byte the same as that used to establish the current effective cipher state, the client MUST treat this condition as it would an invalid signature on the signed data itself. Even if the handshake was anonymous- anonymous, these parameters MUST be compared. 9. Server Behavior From the server's perspective, the handshake proceeds as follows: 1. The server receives a Client Hello message from the client and looks for an EH extension: * If no EH extension is present, the negotiated EH level is zero server continues the TLS connection as usual. The remainder of this section does not apply. * If an EH extension is present, the server uses the smaller of the client_requested value and the server's own maximum supported implementation level as the EH level for the handshake. The server MAY consider the client_required level in this process. For example, a server might claim to only support level zero or one, but could actually use level two if the client "required" it, i.e., threatened to waste the handshake. 2. If the negotiated EH level is zero and an EH extension was present on the Client Hello, the server SHOULD include an EH extension on the Server Hello in reply. The server SHOULD set the server_max_supported field honestly. The server MUST NOT process any extensions in the conditional_extensions. The TLS handshake continues as usual and the remainder of this section does not apply. 3. If the received client_required value is higher than the client_requested value, or it is higher than that supported by the server, the server SHOULD continue the handshake at the smaller of the client_requested and max_server_supported values. In such a case, the server's goal should be to transmit its Finished message while disclosing a minimum of information. For example, the Server Hello MUST NOT transmit a nonempty session_id (except to indicate session resumption) and it MUST NOT include extensions other than EH and those necessary for the integrity of the connection. Renegotiation Info is an example of such an extension. The server MUST NOT request client authentication. Immediately after transmitting the Server Finished message the server MUST close the connection gracefully without transferring any application data. Ray Expires November 03, 2012 [Page 14] Internet-Draft Encrypted Handshake May 2012 4. At this point, the EH level is known to be at least one. The server selects a cipher suite from those that (a) the server supports, (b) are listed in the Client Hello cipher_suites, (c) permit this type of key exchange, and (c) the client has provided a valid set of (EC)DH parameters in the EH extension. If no cipher suites of this type can be selected, the handshake fails. 5. The server generates its (EC)DH parameters and transmits a ServerHello2a. Most of the fields correspond directly to those of ServerHello, the others carry the server's (EC)DH params. The server MUST NOT include extensions other than EH and those necessary for the integrity of the connection. Renegotiation Info is an example of such an extension. 6. The server transmits its Change Cipher Spec record and switches to the new cipher state in the transmit direction. 7. If the negotiated EH level is two, the server receives a Change Cipher Spec record from the client, switches to the new cipher state in the receive direction and receives and processes a ClientHello2 message from the client. 8. Any not-yet-processed extensions from the ClientHello and ClientHello2, including those in the conditional_extensions field, should be processed at this time. 9. The server constructs and transmits a ServerHello2b message. The server SHOULD set the server_max_supported field honestly. The server SHOULD include any ServerHello-type extensions in reply that were not already sent on the ServerHello2a. 10. The remainder of the handshake proceeds as usual, with just these annotations: * In level two, we've already received the Change Cipher Spec from the client so we don't expect to receive another. * When the (EC)DH parameters are received again (at the expected point in a non-EH handshake, e.g. the Client Key Exchange message), they MUST be compared with the client params used in the early key exchange. If the data covered here is not byte-for-byte the same as that used to establish the current effective cipher state, the server MUST treat this condition as it would an invalid signature on a Certificate Verify or an invalid verify_data in the client's Finished message. Even if the handshake did not involve client authentication, these parameters MUST be compared. 10. Other Considerations Ray Expires November 03, 2012 [Page 15] Internet-Draft Encrypted Handshake May 2012 Implementers of TLS libraries that allow configuration of cipher suites (e.g. a permitted cipher suites list ordered by preference) are encouraged provide a means to configure this list separately for EH-requesting clients. This is to prevent a situation where server support of this extension is restricted by a simple server preference for non-DHE cipher suites. There are reportedly some defective servers [XXX cite?] that fail in an ungraceful manner if sent a Client Hello message larger than a certain size which is smaller than the defined maximum. Clients wishing to minimize the risk of interoperability with such servers may consider limiting the number of parameter sets they include in the Client Hello, or sending only the smaller ECDH types. It is possible that these noncompliant servers are older and less well- maintained implementations and tend not to support newer features such as ECDH. 11. IANA Considerations XXX allocation of encrypted_handshake Hello extension XXX allocation of ServerHello2a handshake message id XXX allocation of ServerHello2b handshake message id XXX allocation of ClientHello2 handshake message id 12. Security Considerations Insofar as TLS is inherently a data security protocol, this entire document is about security. However, a few points of concern are probably worth mentioning. o It cannot be repeated often enough that the early encryption negotiated by the EH extension *only* provides protection from passive eavesdropper. It *can not* resist a man-in-the-middle type active attacker who wishes to steal a sample of the plaintext the client and server intended to exchange (doing so will break the handshake however). Like TLS without EH, full protection from an active attacker only begins after the Finished messages are received and validated by each side. o It could happen that the handshake encryption so obvious in a packet capture will give users a false sense of security. The difference between unauthenticated encryption and an authenticated (and properly bound) encrypted channel is a subtle distinction even to protocol professionals. We must be vigilant to inform users of this extension of these limits and to not rely on it for protections beyond what it can deliver. Ray Expires November 03, 2012 [Page 16] Internet-Draft Encrypted Handshake May 2012 o This extension is not expected to introduce any significant new computational Denial of Service (DoS) vulnerabilities. TLS without this extension allows an attacker to obligate the server to three or more useless asymmetric crypto operations (ephemeral key exchange, server DH parameter signing, client cert signature verification, and possibly client cert signature chain validation) with no significant computation required on the part of the attacker. This extension adds no new crypto operations to an existing DHE handshake. In fact, an attacker who negotiates its use finds himself now obligated to perform an asymmetric crypto operation in order to proceed further. However, EH level two introduces an additional round trip from server to client and back. Under conditions of severe packet loss (e.g., during a DDoS event) these additional handshake packets may translate into a reduced success rate for clients. Facing a worst case scenario, a server operator may feel desperate to reduce load by disabling any excess features. Forward secrecy and client privacy being relatively abstract benefits, in the face of a very concrete service outage features such as Diffie-Hellman and EH level two will be tempting targets. o Although this extension does not modify the TLS cryptographic calculations, it does change the order of certain messages. The author does not (currently :-) believe that this introduces any new weaknesses (and it may even mitigate some) but this is certainly in need of careful expert review. XXX 13. References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC4492] Blake-Wilson, S., Bolyard, N., Gupta, V., Hawk, C. and B. Moeller, "Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)", RFC 4492, May 2006. [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, August 2008. [RFC5746] Rescorla, E., Ray, M., Dispensa, S. and N. Oskov, "Transport Layer Security (TLS) Renegotiation Indication Extension", RFC 5746, February 2010. [RFC6066] Eastlake, D., "Transport Layer Security (TLS) Extensions: Extension Definitions", RFC 6066, January 2011. Author's Address Ray Expires November 03, 2012 [Page 17] Internet-Draft Encrypted Handshake May 2012 Marsh Ray PhoneFactor, Inc. 7301 W 129th Street Overland Park, KS 66213 USA Email: marsh@extendedsubset.com Ray Expires November 03, 2012 [Page 18]