Internet DRAFT - draft-ray-tls-encrypted-handshake
draft-ray-tls-encrypted-handshake
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]