draft-ietf-tls-cached-info-17.txt | draft-ietf-tls-cached-info-18.txt | |||
---|---|---|---|---|
TLS S. Santesson | TLS S. Santesson | |||
Internet-Draft 3xA Security AB | Internet-Draft 3xA Security AB | |||
Intended status: Standards Track H. Tschofenig | Intended status: Standards Track H. Tschofenig | |||
Expires: May 17, 2015 ARM Ltd. | Expires: September 9, 2015 ARM Ltd. | |||
November 13, 2014 | March 8, 2015 | |||
Transport Layer Security (TLS) Cached Information Extension | Transport Layer Security (TLS) Cached Information Extension | |||
draft-ietf-tls-cached-info-17.txt | draft-ietf-tls-cached-info-18.txt | |||
Abstract | Abstract | |||
Transport Layer Security (TLS) handshakes often include fairly static | Transport Layer Security (TLS) handshakes often include fairly static | |||
information, such as the server certificate and a list of trusted | information, such as the server certificate and a list of trusted | |||
Certification Authorities (CAs). This information can be of | certification authorities (CAs). This information can be of | |||
considerable size, particularly if the server certificate is bundled | considerable size, particularly if the server certificate is bundled | |||
with a complete certificate chain (i.e., the certificates of | with a complete certificate chain (i.e., the certificates of | |||
intermediate CAs up to the root CA). | intermediate CAs up to the root CA). | |||
This document defines an extension that allows a TLS client to inform | This document defines an extension that allows a TLS client to inform | |||
a server of cached information, allowing the server to omit already | a server of cached information, allowing the server to omit already | |||
available information. | available information. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 40 | skipping to change at page 1, line 40 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on May 17, 2015. | This Internet-Draft will expire on September 9, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Cached Information Extension . . . . . . . . . . . . . . . . 3 | 3. Cached Information Extension . . . . . . . . . . . . . . . . 3 | |||
3.1. Certificate_list Fingerprint . . . . . . . . . . . . . . 4 | ||||
3.2. Certificate_authorities Fingerprint . . . . . . . . . . . 4 | ||||
3.3. Fingerprint Hash Algorithm . . . . . . . . . . . . . . . 4 | ||||
4. Exchange Specification . . . . . . . . . . . . . . . . . . . 5 | 4. Exchange Specification . . . . . . . . . . . . . . . . . . . 5 | |||
4.1. Omitting the Certificate List . . . . . . . . . . . . . . 5 | 4.1. Omitting the Server Certificate Message . . . . . . . . . 5 | |||
4.2. Omitting the Trusted Certificate Authorities . . . . . . 6 | 4.2. Omitting the CertificateRequest Message . . . . . . . . . 6 | |||
5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. Omitting the Certificate Status Information (OCSP | |||
Stapling and Multi OCSP Stapling) . . . . . . . . . . . . 7 | ||||
5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
7.1. New Entry to the TLS ExtensionType Registry . . . . . . . 9 | 7.1. New Entry to the TLS ExtensionType Registry . . . . . . . 10 | |||
7.2. New Registry for CachedInformationType . . . . . . . . . 9 | 7.2. New Registry for CachedInformationType . . . . . . . . . 10 | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 9 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 11 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 10 | 9.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | Appendix A. Example . . . . . . . . . . . . . . . . . . . . . . 12 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
1. Introduction | 1. Introduction | |||
Reducing the amount of information exchanged during a Transport Layer | Reducing the amount of information exchanged during a Transport Layer | |||
Security handshake to a minimum helps to improve performance in | Security handshake to a minimum helps to improve performance in | |||
environments where devices are connected to a network with a low | environments where devices are connected to a network with a low | |||
bandwidth, and lossy radio technology. With Internet of Things such | bandwidth, and lossy radio technology. With Internet of Things such | |||
environments exist, for example, when smart objects are connected | environments exist, for example, when devices use IEEE 802.15.4 or | |||
using a low power IEEE 802.15.4 radio or via Bluetooth Smart. For | Bluetooth Smart. For more information about the challenges with | |||
more information about the challenges with smart object deployments | smart object deployments please see [RFC6574]. | |||
please see [RFC6574]. | ||||
This specification defines a TLS extension that allows a client and a | This specification defines a TLS extension that allows a client and a | |||
server to exclude transmission information cached in an earlier TLS | server to exclude transmission information cached in an earlier TLS | |||
handshake. | handshake. | |||
A typical example exchange may therefore look as follows. First, the | A typical example exchange may therefore look as follows. First, the | |||
client and the server executes the usual TLS handshake. The client | client and the server executes the usual TLS handshake. The client | |||
may, for example, decide to cache the certificate provided by the | may, for example, decide to cache the certificate provided by the | |||
server. When the TLS client connects to the TLS server some time in | server. When the TLS client connects to the TLS server some time in | |||
the future, without using session resumption, it then attaches the | the future, without using session resumption, it then attaches the | |||
skipping to change at page 3, line 35 | skipping to change at page 3, line 34 | |||
This document defines a new extension type (cached_info(TBD)), which | This document defines a new extension type (cached_info(TBD)), which | |||
is used in client hello and server hello messages. The extension | is used in client hello and server hello messages. The extension | |||
type is specified as follows. | type is specified as follows. | |||
enum { | enum { | |||
cached_info(TBD), (65535) | cached_info(TBD), (65535) | |||
} ExtensionType; | } ExtensionType; | |||
The extension_data field of this extension, when included in the | The extension_data field of this extension, when included in the | |||
client hello, MUST contain the CachedInformation structure. The | client hello, MUST contain the CachedInformation structure. The | |||
client MUST NOT send multiple CachedObjects with the same | client MUST NOT send multiple CachedObjects of the same | |||
CachedInformationType. | CachedInformationType. | |||
enum { | enum { | |||
certificate_list(1), certificate_authorities(2) (255) | cert(1), cert_req(2) (255) | |||
} CachedInformationType; | } CachedInformationType; | |||
struct { | struct { | |||
select (type) { | select (type) { | |||
case client: | case client: | |||
CachedInformationType type; | CachedInformationType type; | |||
HashAlgorithm hash; | ||||
opaque hash_value<1..255>; | opaque hash_value<1..255>; | |||
case server: | case server: | |||
CachedInformationType type; | CachedInformationType type; | |||
} body; | } body; | |||
} CachedObject; | } CachedObject; | |||
struct { | struct { | |||
CachedObject cached_info<1..2^16-1>; | CachedObject cached_info<1..2^16-1>; | |||
} CachedInformation; | } CachedInformation; | |||
This document establishes a registry for CachedInformationType types; | This document defines the following types: | |||
additional values can be added following the policy described in | ||||
Section 7. | ||||
3.1. Certificate_list Fingerprint | Omitting the Server Certificate Message: | |||
When the CachedInformationType identifies a certificate_list, then | With the type field set to 'cert', the client MUST include the | |||
the hash_value field MUST include the hash calculated over the | message digest of the Certificate message in the hash_value field. | |||
certificate_list element of the Certificate payload provided by the | For this type the message digest MUST be calculated using SHA-256 | |||
TLS server in an earlier exchange, excluding the three length bytes | [RFC4634]. | |||
of the certificate_list vector. | ||||
3.2. Certificate_authorities Fingerprint | Omitting the CertificateRequest Message | |||
When the CachedInformationType identifies a certificate_authorities, | With the type set to 'cert_req', the client MUST include the | |||
then the hash_value MUST include a hash calculated over | message digest of the CertificateRequest message in the hash_value | |||
CertificateRequest payload provided by the TLS server in an earlier | field. For this type the message digest MUST be calculated using | |||
exchange, excluding the msg_type and length field. | SHA-256 [RFC4634]. | |||
3.3. Fingerprint Hash Algorithm | Omitting the Certificate Status Information (OCSP Stapling and | |||
Multiple OCSP Stapling) Message | ||||
The hash algorithm used to calculate hash values is conveyed in the | With the type set to 'cert_status', the client MUST include the | |||
'hash' field of the CachedObject element. The list of registered | message digest of the CertificateStatus message in the hash_value | |||
hash algorithms can be found in the TLS HashAlgorithm Registry, which | field. For this type the message digest MUST be calculated using | |||
was created by RFC 5246 [RFC5246]. The value zero (0) for 'none' and | SHA-256 [RFC4634]. | |||
one (1) for 'md5' is not an allowed choice for a hash algorithm and | ||||
MUST NOT be used. | New types can be added following the policy described in the IANA | |||
considerations section, see Section 7. Different message digest | ||||
algorithms for use with these types can also be added by registering | ||||
a new type that makes use of this updated message digest algorithm. | ||||
4. Exchange Specification | 4. Exchange Specification | |||
Clients supporting this extension MAY include the "cached_info" | Clients supporting this extension MAY include the "cached_info" | |||
extension in the (extended) client hello. If the client includes the | extension in the (extended) client hello. If the client includes the | |||
extension then it MUST contain one or more CachedObject attributes. | extension then it MUST contain one or more CachedObject attributes. | |||
Clients and servers MUST NOT include more than one CachedObject | ||||
attribute per info type. | ||||
A server supporting this extension MAY include the "cached_info" | A server supporting this extension MAY include the "cached_info" | |||
extension in the (extended) server hello. By returning the | extension in the (extended) server hello. By returning the | |||
"cached_info" extension the server indicates that it supports the | "cached_info" extension the server indicates that it supports the | |||
cached info types. For each indicated cached info type the server | cached info types. For each indicated cached info type the server | |||
MUST alters the transmission of respective payloads, as specified for | MUST alter the transmission of respective payloads, according to the | |||
each type. If the server includes the extension it MUST only include | rules outlined with each type. If the server includes the extension | |||
CachedObjects of a type also supported by the client (as expressed in | it MUST only include CachedObjects of a type also supported by the | |||
the client hello). | client (as expressed in the client hello). For example, if a client | |||
indicates support for 'cert' and 'cert_req' then the server cannot | ||||
respond with a "cached_info" attribute containing support for | ||||
'cert_status'. | ||||
Note that the client includes a fingerprint of the cached information | Since the client includes a fingerprint of information it cached (for | |||
to give the server enough information to determine whether cached | each indicated type) the server is able to determine whether cached | |||
information is stale. If the server supports this specification and | information is stale. If the server supports this specification and | |||
notices a mismatch between the data cached by the client and its own | notices a mismatch between the data cached by the client and its own | |||
information then the server MUST include the information in full and | information then the server MUST include the information in full and | |||
MUST NOT list the respective item in the "cached_info" extension. | MUST NOT list the respective type in the "cached_info" extension. | |||
Note: Clients may cache multiple data items for a single server if | Note: If a server is part of a hosting environment then the client | |||
those servers are part of a hosting environment. To allow the client | may have cached multiple data items for a single server. To allow | |||
to select the appropriate information from the cached it is | the client to select the appropriate information from the cache it is | |||
RECOMMENDED that the client uses information from the Server Name | RECOMMENDED that the client utilizes the Server Name Indication | |||
Indication [RFC6066]. | extension [RFC6066]. | |||
Following a successful exchange of the "cached_info" extensions in | Following a successful exchange of the "cached_info" extension in the | |||
the client and server hello, the server alters sending the | client and server hello, the server alters sending the corresponding | |||
corresponding handshake message. How information is altered from the | handshake message. How information is altered from the handshake | |||
handshake messages is defined per cached info type. Section 4.1 and | messages is defined in Section 4.1, Section 4.2 and Section 4.3 for | |||
Section 4.2 defines the syntax of the fingerprinted information. | the types defined in this specification. | |||
The handshake protocol MUST proceed using the information as if it | 4.1. Omitting the Server Certificate Message | |||
was provided in the handshake protocol. Since the Finished message | ||||
is calculated over the exchanged data it will also include the hash | ||||
of the cached data. | ||||
4.1. Omitting the Certificate List | When a ClientHello message contains the "cached_info" extension with | |||
a type set to 'cert' then the server MAY omit the Certificate message | ||||
under the following conditions: | ||||
When an object of type 'certificate_list' is provided in the client | The server software implements the "cached_info" extension defined | |||
hello, the server MAY replace the list of certificates with an empty | in this specification. | |||
sequence with an actual length field of zero (=empty vector). | ||||
The original handshake message syntax is defined in RFC 5246 | The 'cert' cached info extension is enabled (for example, a policy | |||
[RFC5246] and has the following structure: | allows the use of this extension). | |||
The server compared the value in the hash_value field of the | ||||
client-provided "cached_info" extension with the fingerprint of | ||||
the Certificate message it normally sends to clients. This check | ||||
ensures that the information cached by the client is current. | ||||
The original Certificate handshake message syntax is defined in RFC | ||||
5246 [RFC5246] and has the following structure: | ||||
opaque ASN.1Cert<1..2^24-1>; | opaque ASN.1Cert<1..2^24-1>; | |||
struct { | struct { | |||
ASN.1Cert certificate_list<0..2^24-1>; | ASN.1Cert certificate_list<0..2^24-1>; | |||
} Certificate; | } Certificate; | |||
Note that [RFC7250] allows the certificate payload to contain only | Certificate Message as defined in RFC 5246. | |||
the SubjectPublicKeyInfo instead of the full information typically | ||||
found in a certificate. Hence, when this specification is used in | ||||
combination with [RFC7250] and the negotiated certificate type is a | ||||
raw public key then the TLS server omits sending a Certificate | ||||
payload that contains an ASN.1Cert structure of the | ||||
SubjectPublicKeyInfo. | ||||
4.2. Omitting the Trusted Certificate Authorities | The fingerprint MUST be computed as follows: hash_value:=SHA- | |||
256(Certificate) | ||||
When a fingerprint for an object of type 'certificate_authorities' is | Note that RFC 7250 [RFC7250] allows the certificate payload to | |||
provided in the client hello, the server MAY replace the | contain only the SubjectPublicKeyInfo instead of the full information | |||
CertificateRequest message with an empty sequence with an actual | typically found in a certificate. Hence, when this specification is | |||
length field of zero. | used in combination with [RFC7250] and the negotiated certificate | |||
type is a raw public key then the TLS server omits sending a | ||||
Certificate payload that contains an ASN.1 Certificate structure with | ||||
the included SubjectPublicKeyInfo rather than the full certificate. | ||||
As such, this extension is compatible with the raw public key | ||||
extension defined in RFC 7250. | ||||
The original handshake message syntax is defined in RFC 5246 | 4.2. Omitting the CertificateRequest Message | |||
[RFC5246] and has the following structure: | ||||
When a fingerprint for an object of type 'cert_req' is provided in | ||||
the client hello, the server MAY omit the CertificateRequest message | ||||
under the following conditions: | ||||
The server software implements the "cached_info" extension defined | ||||
in this specification. | ||||
The 'cert_req' cached info extension is enabled (for example, a | ||||
policy allows the use of this extension). | ||||
The server compared the value in the hash_value field of the | ||||
client-provided "cached_info" extension with the fingerprint of | ||||
the CertificateRequest message it normally sends to clients. This | ||||
check ensures that the information cached by the client is | ||||
current. | ||||
The server wants to request a certificate from the client. | ||||
The original CertificateRequest handshake message syntax is defined | ||||
in RFC 5246 [RFC5246] and has the following structure: | ||||
opaque DistinguishedName<1..2^16-1>; | opaque DistinguishedName<1..2^16-1>; | |||
struct { | struct { | |||
ClientCertificateType certificate_types<1..2^8-1>; | ClientCertificateType certificate_types<1..2^8-1>; | |||
SignatureAndHashAlgorithm | SignatureAndHashAlgorithm | |||
supported_signature_algorithms<2^16-1>; | supported_signature_algorithms<2^16-1>; | |||
DistinguishedName certificate_authorities<0..2^16-1>; | DistinguishedName certificate_authorities<0..2^16-1>; | |||
} CertificateRequest; | } CertificateRequest; | |||
The fingerprint MUST be computed as follows: hash_value:=SHA- | ||||
256(CertificateRequest) | ||||
4.3. Omitting the Certificate Status Information (OCSP Stapling and | ||||
Multi OCSP Stapling) | ||||
When a fingerprint for an object of type 'cert_status' is provided in | ||||
the client hello, the server MAY omit the CertificateStatus message | ||||
under the following conditions: | ||||
The server software implements the "cert_status" extension defined | ||||
in this specification. | ||||
The 'cert_status' cached info extension is enabled (for example, a | ||||
policy allows the use of this extension). | ||||
The server compared the value in the hash_value field of the | ||||
client-provided "cached_info" extension with the fingerprint of | ||||
the CertificateStatus message it normally sends to clients. This | ||||
check ensures that the information cached by the client is | ||||
current. | ||||
Both client and server support the use of OCSP Stapling and/or | ||||
Multiple OCSP Stapling, as defined in RFC 6066 [RFC6066] and in | ||||
[RFC6961]. | ||||
The CertificateStatus message syntax, defined in [RFC6961], has the | ||||
following structure: | ||||
struct { | ||||
CertificateStatusType status_type; | ||||
select (status_type) { | ||||
case ocsp: OCSPResponse; | ||||
case ocsp_multi: OCSPResponseList; | ||||
} response; | ||||
} CertificateStatus; | ||||
opaque OCSPResponse<0..2^24-1>; | ||||
struct { | ||||
OCSPResponse ocsp_response_list<1..2^24-1>; | ||||
} OCSPResponseList; | ||||
The fingerprint MUST be computed as follows: hash_value:=SHA- | ||||
256(CertificateStatus) | ||||
5. Example | 5. Example | |||
Figure 1 illustrates an example exchange using the TLS cached info | Figure 1 illustrates an example exchange using the TLS cached info | |||
extension. In the normal TLS handshake exchange shown in flow (A) | extension. In the normal TLS handshake exchange shown in flow (A) | |||
the TLS server provides its certificate in the Certificate payload to | the TLS server provides its certificate in the Certificate payload to | |||
the client, see step [1]. This allows the client to store the | the client, see step [1]. This allows the client to store the | |||
certificate for future use. After some time the TLS client again | certificate for future use. After some time the TLS client again | |||
interacts with the same TLS server and makes use of the TLS cached | interacts with the same TLS server and makes use of the TLS cached | |||
info extension, as shown in flow (B). The TLS client indicates | info extension, as shown in flow (B). The TLS client indicates | |||
support for this specification via the "cached_info" extension, see | support for this specification via the "cached_info" extension, see | |||
[2], and indicates that it has stored the certificate from the | ||||
[2], and indicates that it has stored the 'certificate_list' from the | earlier exchange (by indicating the 'cert' type). With [3] the TLS | |||
earlier exchange. With [3] the TLS server acknowledges the supports | server acknowledges the supports of the 'cert' type and by including | |||
of this specification and informs the client that it alterned the | the value in the server hello informs the client that the certificate | |||
content of the certificate payload (see [4], as described in | payload has been omitted. | |||
Section 4.1). | ||||
(A) Initial (full) Exchange | (A) Initial (full) Exchange | |||
ClientHello -> | ClientHello -> | |||
<- ServerHello | <- ServerHello | |||
Certificate* // [1] | Certificate* // [1] | |||
ServerKeyExchange* | ServerKeyExchange* | |||
CertificateRequest* | CertificateRequest* | |||
ServerHelloDone | ServerHelloDone | |||
Certificate* | Certificate* | |||
ClientKeyExchange | ClientKeyExchange | |||
CertificateVerify* | CertificateVerify* | |||
[ChangeCipherSpec] | [ChangeCipherSpec] | |||
Finished -> | Finished -> | |||
<- [ChangeCipherSpec] | <- [ChangeCipherSpec] | |||
Finished | Finished | |||
Application Data <-------> Application Data | Application Data <-------> Application Data | |||
(B) TLS Cached Extension Usage | (B) TLS Cached Extension Usage | |||
ClientHello | ClientHello | |||
cached_info=(certificate_list) -> // [2] | cached_info=(cert) -> // [2] | |||
<- ServerHello | <- ServerHello | |||
cached_info= | cached_info=(cert) [3] | |||
(certificate_list) // [3] | ||||
Certificate* // [4] | ||||
ServerKeyExchange* | ServerKeyExchange* | |||
CertificateRequest* | ||||
ServerHelloDone | ServerHelloDone | |||
Certificate* | ||||
ClientKeyExchange | ClientKeyExchange | |||
CertificateVerify* | CertificateVerify* | |||
[ChangeCipherSpec] | [ChangeCipherSpec] | |||
Finished -> | Finished -> | |||
<- [ChangeCipherSpec] | <- [ChangeCipherSpec] | |||
Finished | Finished | |||
Application Data <-------> Application Data | Application Data <-------> Application Data | |||
Figure 1: Example Message Exchange | Figure 1: Example Message Exchange | |||
6. Security Considerations | 6. Security Considerations | |||
This specification defines a mechanism to reference stored state | This specification defines a mechanism to reference stored state | |||
using a fingerprint. Sending a fingerprint of cached information in | using a fingerprint. Sending a fingerprint of cached information in | |||
an unencrypted handshake, as the client and server hello is, may | an unencrypted handshake, as the client and server hello is, may | |||
allow an attacker or observer to correlate independent TLS exchanges. | allow an attacker or observer to correlate independent TLS exchanges. | |||
While some information elements used in this specification, such as | While some information elements used in this specification, such as | |||
server certificates, are public objects and usually not sensitive in | server certificates, are public objects and usually do not contain | |||
this regard, others may be. Those who implement and deploy this | sensitive information, other (not yet defined cached info types) may. | |||
specification should therefore make an informed decision whether the | Those who implement and deploy this specification should therefore | |||
cached information is inline with their security and privacy goals. | make an informed decision whether the cached information is inline | |||
In case of concerns, it is advised to avoid sending the fingerprint | with their security and privacy goals. In case of concerns, it is | |||
of the data objects in clear. | advised to avoid sending the fingerprint of the data objects in | |||
clear. | ||||
The hash algorithm used in this specification is required to have | The use of the cached info extension allows the server to obmit | |||
have strong collision resistance. | sending certain TLS messages. Consequently, these omitted messages | |||
are not included in the transcript of the handshake in the TLS Finish | ||||
message per value. However, since the client communicates the hash | ||||
values of the cached values in the initial handshake message the | ||||
fingerprints are included in the TLS Finish message. | ||||
Clients MUST ensure that they only cache information from legitimate | ||||
sources. For example, when the client populates the cache from a TLS | ||||
exchange then it must only cache information after the successful | ||||
completion of a TLS exchange to ensure that an attacker does not | ||||
inject incorrect information into the cache. Failure to do so allows | ||||
for man-in-the-middle attacks. | ||||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. New Entry to the TLS ExtensionType Registry | 7.1. New Entry to the TLS ExtensionType Registry | |||
IANA is requested to add an entry to the existing TLS ExtensionType | IANA is requested to add an entry to the existing TLS ExtensionType | |||
registry, defined in RFC 5246 [RFC5246], for cached_info(TBD) defined | registry, defined in RFC 5246 [RFC5246], for cached_info(TBD) defined | |||
in this document. | in this document. | |||
7.2. New Registry for CachedInformationType | 7.2. New Registry for CachedInformationType | |||
IANA is requested to establish a registry for TLS | IANA is requested to establish a registry for TLS | |||
CachedInformationType values. The first entries in the registry are | CachedInformationType values. The first entries in the registry are | |||
o certificate_list(1) | o cert(1) | |||
o certificate_authorities(2) | o cert_req(2) | |||
o cert_status(3) | ||||
The policy for adding new values to this registry, following the | The policy for adding new values to this registry, following the | |||
terminology defined in RFC 5226 [RFC5226], is as follows: | terminology defined in RFC 5226 [RFC5226], is as follows: | |||
o 0-63 (decimal): Standards Action | o 0-63 (decimal): Standards Action | |||
o 64-223 (decimal): Specification Required | o 64-223 (decimal): Specification Required | |||
o 224-255 (decimal): reserved for Private Use | o 224-255 (decimal): reserved for Private Use | |||
8. Acknowledgments | 8. Acknowledgments | |||
We would like to thank the following persons for your detailed | We would like to thank the following persons for your detailed | |||
document reviews: | document reviews: | |||
o Paul Wouters and Nikos Mavrogiannopoulos (December 2011) | o Paul Wouters and Nikos Mavrogiannopoulos (December 2011) | |||
o Rob Stradling (February 2012) | o Rob Stradling (February 2012) | |||
skipping to change at page 10, line 13 | skipping to change at page 11, line 19 | |||
document reviews: | document reviews: | |||
o Paul Wouters and Nikos Mavrogiannopoulos (December 2011) | o Paul Wouters and Nikos Mavrogiannopoulos (December 2011) | |||
o Rob Stradling (February 2012) | o Rob Stradling (February 2012) | |||
o Ondrej Mikle (in March 2012) | o Ondrej Mikle (in March 2012) | |||
o Ilari Liusvaara, Adam Langley, and Eric Rescorla (in July 2014) | o Ilari Liusvaara, Adam Langley, and Eric Rescorla (in July 2014) | |||
o Sean Turner (in August 2014) | ||||
Additionally, we would like to thank the TLS working group chairs, | Additionally, we would like to thank the TLS working group chairs, | |||
Sean Turner and Joe Salowey, as well as the responsible security area | Sean Turner and Joe Salowey, as well as the responsible security area | |||
director, Stephen Farrell, for his support. | director, Stephen Farrell, for their support. | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC3874] Housley, R., "A 224-bit One-way Hash Function: SHA-224", | [RFC3874] Housley, R., "A 224-bit One-way Hash Function: SHA-224", | |||
RFC 3874, September 2004. | RFC 3874, September 2004. | |||
[RFC4634] Eastlake, D. and T. Hansen, "US Secure Hash Algorithms | ||||
(SHA and HMAC-SHA)", RFC 4634, July 2006. | ||||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
[RFC6066] Eastlake, D., "Transport Layer Security (TLS) Extensions: | [RFC6066] Eastlake, D., "Transport Layer Security (TLS) Extensions: | |||
Extension Definitions", RFC 6066, January 2011. | Extension Definitions", RFC 6066, January 2011. | |||
[RFC6961] Pettersen, Y., "The Transport Layer Security (TLS) | ||||
Multiple Certificate Status Request Extension", RFC 6961, | ||||
June 2013. | ||||
9.2. Informative References | 9.2. Informative References | |||
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
IANA Considerations Section in RFCs", BCP 26, RFC 5226, | IANA Considerations Section in RFCs", BCP 26, RFC 5226, | |||
May 2008. | May 2008. | |||
[RFC6574] Tschofenig, H. and J. Arkko, "Report from the Smart Object | [RFC6574] Tschofenig, H. and J. Arkko, "Report from the Smart Object | |||
Workshop", RFC 6574, April 2012. | Workshop", RFC 6574, April 2012. | |||
[RFC7250] Wouters, P., Tschofenig, H., Gilmore, J., Weiler, S., and | [RFC7250] Wouters, P., Tschofenig, H., Gilmore, J., Weiler, S., and | |||
T. Kivinen, "Using Raw Public Keys in Transport Layer | T. Kivinen, "Using Raw Public Keys in Transport Layer | |||
Security (TLS) and Datagram Transport Layer Security | Security (TLS) and Datagram Transport Layer Security | |||
(DTLS)", RFC 7250, June 2014. | (DTLS)", RFC 7250, June 2014. | |||
Appendix A. Example | ||||
The Wireshark trace of an example TLS exchange shown in Figure 2 | ||||
illustrates the use of an ECC-based ciphersuite with a 256 bit key. | ||||
ECC allows for a small certificate size compared to RSA with | ||||
equivalent security strength. The Certificate message provided by | ||||
the server is with 557 bytes (including the record layer header) one | ||||
of the largest message even though it only contains a single | ||||
certificate (i.e., no intermediate CA certificates). The client- | ||||
provided Certificate message has a length of 570 bytes (also | ||||
including the record layer header). | ||||
Client --> Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Client Hello | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 121 | ||||
Handshake Protocol: Client Hello | ||||
Handshake Type: Client Hello (1) | ||||
Length: 117 | ||||
Version: TLS 1.2 (0x0303) | ||||
Random | ||||
gmt_unix_time: Jan 14, 2015 12:43:58.000000000 CET | ||||
random_bytes: c61b966bba2781c50b07c3278c43f5892b3d... | ||||
Session ID Length: 0 | ||||
Cipher Suites Length: 10 | ||||
Cipher Suites (5 suites) | ||||
Compression Methods Length: 1 | ||||
Compression Methods (1 method) | ||||
Extensions Length: 66 | ||||
Extension: server_name | ||||
Extension: signature_algorithms | ||||
Extension: elliptic_curves | ||||
Extension: ec_point_formats | ||||
Client <-- Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Hello | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 87 | ||||
Handshake Protocol: Server Hello | ||||
Handshake Type: Server Hello (2) | ||||
Length: 83 | ||||
Version: TLS 1.2 (0x0303) | ||||
Random | ||||
gmt_unix_time: Jan 14, 2015 12:43:58.000000000 CET | ||||
random_bytes: 82d3d09b44149d738b7002da4ff5a986fe11... | ||||
Session ID Length: 32 | ||||
Session ID: d069a74661088676b98db8346070278a7475b617a0... | ||||
Cipher Suite: Unknown (0xc0ad) | ||||
Compression Method: null (0) | ||||
Extensions Length: 11 | ||||
Extension: renegotiation_info | ||||
Extension: ec_point_formats | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 557 | ||||
Handshake Protocol: Certificate | ||||
Handshake Type: Certificate (11) | ||||
Length: 553 | ||||
Certificates Length: 550 | ||||
Certificates (550 bytes) | ||||
Certificate Length: 547 | ||||
Certificate (id-at-commonName=localhost, | ||||
id-at-organizationName=PolarSSL,id-at-countryName=NL) | ||||
signedCertificate | ||||
algorithmIdentifier (iso.2.840.10045.4.3.2) | ||||
Padding: 0 | ||||
encrypted: 30650231009a2c5cd7a6dba2e5640df0b94ed... | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Key Exchange | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 215 | ||||
Handshake Protocol: Server Key Exchange | ||||
Handshake Type: Server Key Exchange (12) | ||||
Length: 211 | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate Request | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 78 | ||||
Handshake Protocol: Certificate Request | ||||
Handshake Type: Certificate Request (13) | ||||
Length: 74 | ||||
Certificate types count: 1 | ||||
Certificate types (1 type) | ||||
Signature Hash Algorithms Length: 2 | ||||
Signature Hash Algorithms (1 algorithm) | ||||
Distinguished Names Length: 66 | ||||
Distinguished Names (66 bytes) | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Hello Done | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 4 | ||||
Handshake Protocol: Server Hello Done | ||||
Handshake Type: Server Hello Done (14) | ||||
Length: 0 | ||||
Client --> Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 570 | ||||
Handshake Protocol: Certificate | ||||
Handshake Type: Certificate (11) | ||||
Length: 566 | ||||
Certificates Length: 563 | ||||
Certificates (563 bytes) | ||||
Certificate Length: 560 | ||||
Certificate (id-at-commonName=PolarSSL Test Client 2, | ||||
id-at-organizationName=PolarSSL,id-at-countryName=NL) | ||||
signedCertificate | ||||
algorithmIdentifier (iso.2.840.10045.4.3.2) | ||||
Padding: 0 | ||||
encrypted: 306502304a650d7b2083a299b9a80ffc8dee8... | ||||
TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 138 | ||||
Handshake Protocol: Client Key Exchange | ||||
Handshake Type: Client Key Exchange (16) | ||||
Length: 134 | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate Verify | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 80 | ||||
Handshake Protocol: Certificate Verify | ||||
Handshake Type: Certificate Verify (15) | ||||
Length: 76 | ||||
TLSv1.2 Record Layer: Change Cipher Spec Protocol | ||||
Content Type: Change Cipher Spec (20) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 1 | ||||
Change Cipher Spec Message | ||||
TLSv1.2 Record Layer: Handshake Protocol: | ||||
Encrypted Handshake Message (TLS Finished) | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 40 | ||||
Handshake Protocol: Encrypted Handshake Message | ||||
Client <-- Server: | ||||
TLSv1.2 Record Layer: Change Cipher Spec Protocol | ||||
Content Type: Change Cipher Spec (20) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 1 | ||||
Change Cipher Spec Message | ||||
TLSv1.2 Record Layer: Handshake Protocol | ||||
Encrypted Handshake Message (TLS Finished) | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 40 | ||||
Handshake Protocol: Encrypted Handshake Message | ||||
Figure 2: Example TLS Exchange (without Cached Info Extension). | ||||
The total size of the TLS exchange shown in Figure 2 is 1932 bytes | ||||
whereas the exchange shown in Figure 3 reduces the size to 1323 bytes | ||||
by omitting the Certificate and the CertificateRequest messages. As | ||||
it can be seen, the use of the cached info extension leads to an on- | ||||
the-wire improvement of more than 600 bytes. | ||||
Client --> Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Client Hello | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 121 + 21 | ||||
Handshake Protocol: Client Hello | ||||
Handshake Type: Client Hello (1) | ||||
Length: 117 + 21 | ||||
Version: TLS 1.2 (0x0303) | ||||
Random | ||||
gmt_unix_time: Jan 14, 2015 12:43:58.000000000 CET | ||||
random_bytes: c61b966bba2781c50b07c3278c43f5892b3d... | ||||
Session ID Length: 0 | ||||
Cipher Suites Length: 10 | ||||
Cipher Suites (5 suites) | ||||
Compression Methods Length: 1 | ||||
Compression Methods (1 method) | ||||
Extensions Length: 66 | ||||
Extension: server_name | ||||
Extension: signature_algorithms | ||||
Extension: elliptic_curves | ||||
Extension: ec_point_formats | ||||
Extension: cached_info | ||||
Client <-- Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Hello | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 87 + 5 | ||||
Handshake Protocol: Server Hello | ||||
Handshake Type: Server Hello (2) | ||||
Length: 83 + 5 | ||||
Version: TLS 1.2 (0x0303) | ||||
Random | ||||
gmt_unix_time: Jan 14, 2015 12:43:58.000000000 CET | ||||
random_bytes: 82d3d09b44149d738b7002da4ff5a986fe11... | ||||
Session ID Length: 32 | ||||
Session ID: d069a74661088676b98db8346070278a7475b617a0... | ||||
Cipher Suite: Unknown (0xc0ad) | ||||
Compression Method: null (0) | ||||
Extensions Length: 11 + 5 | ||||
Extension: renegotiation_info | ||||
Extension: ec_point_formats | ||||
Extension: cached_info | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Key Exchange | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 215 | ||||
Handshake Protocol: Server Key Exchange | ||||
Handshake Type: Server Key Exchange (12) | ||||
Length: 211 | ||||
TLSv1.2 Record Layer: Handshake Protocol: Server Hello Done | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 4 | ||||
Handshake Protocol: Server Hello Done | ||||
Handshake Type: Server Hello Done (14) | ||||
Length: 0 | ||||
Client --> Server: | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 570 | ||||
Handshake Protocol: Certificate | ||||
Handshake Type: Certificate (11) | ||||
Length: 566 | ||||
Certificates Length: 563 | ||||
Certificates (563 bytes) | ||||
Certificate Length: 560 | ||||
Certificate (id-at-commonName=PolarSSL Test Client 2, | ||||
id-at-organizationName=PolarSSL,id-at-countryName=NL) | ||||
signedCertificate | ||||
algorithmIdentifier (iso.2.840.10045.4.3.2) | ||||
Padding: 0 | ||||
encrypted: 306502304a650d7b2083a299b9a80ffc8dee8... | ||||
TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 138 | ||||
Handshake Protocol: Client Key Exchange | ||||
Handshake Type: Client Key Exchange (16) | ||||
Length: 134 | ||||
TLSv1.2 Record Layer: Handshake Protocol: Certificate Verify | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 80 | ||||
Handshake Protocol: Certificate Verify | ||||
Handshake Type: Certificate Verify (15) | ||||
Length: 76 | ||||
TLSv1.2 Record Layer: Change Cipher Spec Protocol | ||||
Content Type: Change Cipher Spec (20) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 1 | ||||
Change Cipher Spec Message | ||||
TLSv1.2 Record Layer: Handshake Protocol: | ||||
Encrypted Handshake Message (TLS Finished) | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 40 | ||||
Handshake Protocol: Encrypted Handshake Message | ||||
Client <-- Server: | ||||
TLSv1.2 Record Layer: Change Cipher Spec Protocol | ||||
Content Type: Change Cipher Spec (20) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 1 | ||||
Change Cipher Spec Message | ||||
TLSv1.2 Record Layer: Handshake Protocol | ||||
Encrypted Handshake Message (TLS Finished) | ||||
Content Type: Handshake (22) | ||||
Version: TLS 1.2 (0x0303) | ||||
Length: 40 | ||||
Handshake Protocol: Encrypted Handshake Message | ||||
Figure 3: Example TLS Exchange (with Cached Info Extension). | ||||
Note: To accomplish further on-the-wire handshake size message | ||||
reductions the Certificate message sent by the client can be reduced | ||||
in size by using the Client Certificate URL extension. | ||||
Authors' Addresses | Authors' Addresses | |||
Stefan Santesson | Stefan Santesson | |||
3xA Security AB | 3xA Security AB | |||
Scheelev. 17 | Scheelev. 17 | |||
Lund 223 70 | Lund 223 70 | |||
Sweden | Sweden | |||
Email: sts@aaa-sec.com | Email: sts@aaa-sec.com | |||
Hannes Tschofenig | Hannes Tschofenig | |||
ARM Ltd. | ARM Ltd. | |||
Hall in Tirol 6060 | Hall in Tirol 6060 | |||
Austria | Austria | |||
Email: Hannes.tschofenig@gmx.net | Email: Hannes.tschofenig@gmx.net | |||
URI: http://www.tschofenig.priv.at | URI: http://www.tschofenig.priv.at | |||
End of changes. 57 change blocks. | ||||
121 lines changed or deleted | 518 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |