draft-ietf-tls-cached-info-18.txt | draft-ietf-tls-cached-info-19.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: September 9, 2015 ARM Ltd. | Expires: September 24, 2015 ARM Ltd. | |||
March 8, 2015 | March 23, 2015 | |||
Transport Layer Security (TLS) Cached Information Extension | Transport Layer Security (TLS) Cached Information Extension | |||
draft-ietf-tls-cached-info-18.txt | draft-ietf-tls-cached-info-19.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). | |||
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 September 9, 2015. | This Internet-Draft will expire on September 24, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 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 | |||
skipping to change at page 2, line 16 | skipping to change at page 2, line 16 | |||
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 | |||
4. Exchange Specification . . . . . . . . . . . . . . . . . . . 5 | 4. Exchange Specification . . . . . . . . . . . . . . . . . . . 4 | |||
4.1. Omitting the Server Certificate Message . . . . . . . . . 5 | 4.1. Server Certificate Message . . . . . . . . . . . . . . . 5 | |||
4.2. Omitting the CertificateRequest Message . . . . . . . . . 6 | 4.2. CertificateRequest Message . . . . . . . . . . . . . . . 6 | |||
4.3. Omitting the Certificate Status Information (OCSP | 5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
Stapling and Multi OCSP Stapling) . . . . . . . . . . . . 7 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
5. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 7.1. New Entry to the TLS ExtensionType Registry . . . . . . . 9 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 7.2. New Registry for CachedInformationType . . . . . . . . . 9 | |||
7.1. New Entry to the TLS ExtensionType Registry . . . . . . . 10 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
7.2. New Registry for CachedInformationType . . . . . . . . . 10 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 11 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 10 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9.2. Informative References . . . . . . . . . . . . . . . . . 10 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 11 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 12 | ||||
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 devices use IEEE 802.15.4 or | environments exist, for example, when devices use IEEE 802.15.4 or | |||
Bluetooth Smart. For more information about the challenges with | Bluetooth Smart. For more information about the challenges with | |||
smart object deployments please see [RFC6574]. | smart object deployments 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 full TLS handshake. The client | |||
may, for example, decide to cache the certificate provided by the | then caches the certificate provided by the server. When the TLS | |||
server. When the TLS client connects to the TLS server some time in | client connects to the TLS server some time in the future, without | |||
the future, without using session resumption, it then attaches the | using session resumption, it then attaches the cached_info extension | |||
cached_info extension defined in this document to the client hello | defined in this document to the client hello message to indicate that | |||
message to indicate that it had cached the certificate, and it | it had cached the certificate, and it provides the fingerprint of it. | |||
provides the fingerprint of it. If the server's certificate has not | If the server's certificate has not changed then the TLS server does | |||
changed then the TLS server does not need to send its' certificate | not need to send its' certificate and the corresponding certificate | |||
and the corresponding certificate list again. In case information | chain again. In case information has changed, which can be seen from | |||
has changed, which can be seen from the fingerprint provided by the | the fingerprint provided by the client, the certificate payload is | |||
client, the certificate payload is transmitted to the client to allow | transmitted to the client to allow the client to update the cache. | |||
the client to update the cache. | ||||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "MUST", "MUST NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "MUST", "MUST NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
This document refers to the TLS protocol but the description is | This document refers to the TLS protocol but the description is | |||
equally applicable to DTLS as well. | equally applicable to DTLS as well. | |||
skipping to change at page 3, line 34 | skipping to change at page 3, line 30 | |||
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 of the same | client MAY send multiple CachedObjects of the same | |||
CachedInformationType. | CachedInformationType. This may, for example, be the case when the | |||
client has cached multiple certificates from a server. | ||||
enum { | enum { | |||
cert(1), cert_req(2) (255) | cert(1), cert_req(2) (255) | |||
} CachedInformationType; | } CachedInformationType; | |||
struct { | struct { | |||
select (type) { | select (type) { | |||
case client: | case client: | |||
CachedInformationType type; | CachedInformationType type; | |||
opaque hash_value<1..255>; | opaque hash_value<1..255>; | |||
skipping to change at page 4, line 39 | skipping to change at page 4, line 39 | |||
For this type the message digest MUST be calculated using SHA-256 | For this type the message digest MUST be calculated using SHA-256 | |||
[RFC4634]. | [RFC4634]. | |||
Omitting the CertificateRequest Message | Omitting the CertificateRequest Message | |||
With the type set to 'cert_req', the client MUST include the | With the type set to 'cert_req', the client MUST include the | |||
message digest of the CertificateRequest message in the hash_value | message digest of the CertificateRequest message in the hash_value | |||
field. For this type the message digest MUST be calculated using | field. For this type the message digest MUST be calculated using | |||
SHA-256 [RFC4634]. | SHA-256 [RFC4634]. | |||
Omitting the Certificate Status Information (OCSP Stapling and | ||||
Multiple OCSP Stapling) Message | ||||
With the type set to 'cert_status', the client MUST include the | ||||
message digest of the CertificateStatus message in the hash_value | ||||
field. For this type the message digest MUST be calculated using | ||||
SHA-256 [RFC4634]. | ||||
New types can be added following the policy described in the IANA | New types can be added following the policy described in the IANA | |||
considerations section, see Section 7. Different message digest | considerations section, see Section 7. Different message digest | |||
algorithms for use with these types can also be added by registering | algorithms for use with these types can also be added by registering | |||
a new type that makes use of this updated message digest algorithm. | 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. | |||
skipping to change at page 5, line 39 | skipping to change at page 5, line 29 | |||
Note: If a server is part of a hosting environment then the client | Note: If a server is part of a hosting environment then the client | |||
may have cached multiple data items for a single server. To allow | may have cached multiple data items for a single server. To allow | |||
the client to select the appropriate information from the cache it is | the client to select the appropriate information from the cache it is | |||
RECOMMENDED that the client utilizes the Server Name Indication | RECOMMENDED that the client utilizes the Server Name Indication | |||
extension [RFC6066]. | extension [RFC6066]. | |||
Following a successful exchange of the "cached_info" extension in the | Following a successful exchange of the "cached_info" extension in the | |||
client and server hello, the server alters sending the corresponding | client and server hello, the server alters sending the corresponding | |||
handshake message. How information is altered from the handshake | handshake message. How information is altered from the handshake | |||
messages is defined in Section 4.1, Section 4.2 and Section 4.3 for | messages is defined in Section 4.1, and in Section 4.2 for the types | |||
the types defined in this specification. | defined in this specification. | |||
4.1. Omitting the Server Certificate Message | 4.1. Server Certificate Message | |||
When a ClientHello message contains the "cached_info" extension with | When a ClientHello message contains the "cached_info" extension with | |||
a type set to 'cert' then the server MAY omit the Certificate message | a type set to 'cert' then the server MAY send the Certificate message | |||
under the following conditions: | shown in Figure 2 under the following conditions: | |||
The server software implements the "cached_info" extension defined | The server software implements the "cached_info" extension defined | |||
in this specification. | in this specification. | |||
The 'cert' cached info extension is enabled (for example, a policy | The 'cert' cached info extension is enabled (for example, a policy | |||
allows the use of this extension). | allows the use of this extension). | |||
The server compared the value in the hash_value field of the | The server compared the value in the hash_value field of the | |||
client-provided "cached_info" extension with the fingerprint of | client-provided "cached_info" extension with the fingerprint of | |||
the Certificate message it normally sends to clients. This check | the Certificate message it normally sends to clients. This check | |||
ensures that the information cached by the client is current. | ensures that the information cached by the client is current. | |||
The original Certificate handshake message syntax is defined in RFC | The original Certificate handshake message syntax is defined in RFC | |||
5246 [RFC5246] and has the following structure: | 5246 [RFC5246] and has the structure shown in Figure 1. | |||
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; | |||
Certificate Message as defined in RFC 5246. | Figure 1: Certificate Message as defined in RFC 5246. | |||
The new structure of the CertificateRequest message is shown in | ||||
Figure 2. | ||||
struct { | ||||
opaque hash_value<1..255>; | ||||
} CertificateRequest; | ||||
Figure 2: Cached Info Certificate Message. | ||||
The fingerprint MUST be computed as follows: hash_value:=SHA- | The fingerprint MUST be computed as follows: hash_value:=SHA- | |||
256(Certificate) | 256(Certificate) | |||
Note that RFC 7250 [RFC7250] allows the certificate payload to | Note that RFC 7250 [RFC7250] allows the certificate payload to | |||
contain only the SubjectPublicKeyInfo instead of the full information | contain only the SubjectPublicKeyInfo instead of the full information | |||
typically found in a certificate. Hence, when this specification is | typically found in a certificate. Hence, when this specification is | |||
used in combination with [RFC7250] and the negotiated certificate | used in combination with [RFC7250] and the negotiated certificate | |||
type is a raw public key then the TLS server omits sending a | type is a raw public key then the TLS server omits sending a | |||
Certificate payload that contains an ASN.1 Certificate structure with | Certificate payload that contains an ASN.1 Certificate structure with | |||
the included SubjectPublicKeyInfo rather than the full certificate. | the included SubjectPublicKeyInfo rather than the full certificate. | |||
As such, this extension is compatible with the raw public key | As such, this extension is compatible with the raw public key | |||
extension defined in RFC 7250. | extension defined in RFC 7250. | |||
4.2. Omitting the CertificateRequest Message | 4.2. CertificateRequest Message | |||
When a fingerprint for an object of type 'cert_req' is provided in | When a fingerprint for an object of type 'cert_req' is provided in | |||
the client hello, the server MAY omit the CertificateRequest message | the client hello, the server MAY omit the CertificateRequest message | |||
under the following conditions: | under the following conditions: | |||
The server software implements the "cached_info" extension defined | The server software implements the "cached_info" extension defined | |||
in this specification. | in this specification. | |||
The 'cert_req' cached info extension is enabled (for example, a | The 'cert_req' cached info extension is enabled (for example, a | |||
policy allows the use of this extension). | policy allows the use of this extension). | |||
skipping to change at page 7, line 19 | skipping to change at page 7, line 19 | |||
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- | Figure 3: CertificateRequest Message as defined in RFC 5246. | |||
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 { | The new structure of the CertificateRequest message is shown in | |||
CertificateStatusType status_type; | Figure 4. | |||
select (status_type) { | ||||
case ocsp: OCSPResponse; | ||||
case ocsp_multi: OCSPResponseList; | ||||
} response; | ||||
} CertificateStatus; | ||||
opaque OCSPResponse<0..2^24-1>; | struct { | |||
opaque hash_value<1..255>; | ||||
} CertificateRequest; | ||||
struct { | Figure 4: Cached Info CertificateRequest Message. | |||
OCSPResponse ocsp_response_list<1..2^24-1>; | ||||
} OCSPResponseList; | ||||
The fingerprint MUST be computed as follows: hash_value:=SHA- | The fingerprint MUST be computed as follows: hash_value:=SHA- | |||
256(CertificateStatus) | 256(CertificateRequest) | |||
5. Example | 5. Example | |||
Figure 1 illustrates an example exchange using the TLS cached info | Figure 5 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 from the | |||
earlier exchange (by indicating the 'cert' type). With [3] the TLS | earlier exchange (by indicating the 'cert' type). With [3] the TLS | |||
server acknowledges the supports of the 'cert' type and by including | server acknowledges the supports of the 'cert' type and by including | |||
the value in the server hello informs the client that the certificate | the value in the server hello informs the client that the content of | |||
payload has been omitted. | the certificate payload contains the fingerprint of the certificate | |||
instead of the RFC 5246-defined payload of the certificate message in | ||||
message [4]. | ||||
(A) Initial (full) Exchange | (A) Initial (full) Exchange | |||
ClientHello -> | ClientHello -> | |||
<- ServerHello | <- ServerHello | |||
Certificate* // [1] | Certificate* // [1] | |||
ServerKeyExchange* | ServerKeyExchange* | |||
CertificateRequest* | CertificateRequest* | |||
ServerHelloDone | ServerHelloDone | |||
skipping to change at page 9, line 31 | skipping to change at page 8, line 31 | |||
Finished | Finished | |||
Application Data <-------> Application Data | Application Data <-------> Application Data | |||
(B) TLS Cached Extension Usage | (B) TLS Cached Extension Usage | |||
ClientHello | ClientHello | |||
cached_info=(cert) -> // [2] | cached_info=(cert) -> // [2] | |||
<- ServerHello | <- ServerHello | |||
cached_info=(cert) [3] | cached_info=(cert) [3] | |||
Certificate [4] | ||||
ServerKeyExchange* | ServerKeyExchange* | |||
ServerHelloDone | ServerHelloDone | |||
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 5: 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 do not contain | server certificates, are public objects and usually do not contain | |||
sensitive information, other (not yet defined cached info types) may. | sensitive information, other (not yet defined cached info types) may. | |||
Those who implement and deploy this specification should therefore | Those who implement and deploy this specification should therefore | |||
make an informed decision whether the cached information is inline | make an informed decision whether the cached information is inline | |||
with their security and privacy goals. In case of concerns, it is | with their security and privacy goals. In case of concerns, it is | |||
advised to avoid sending the fingerprint of the data objects in | advised to avoid sending the fingerprint of the data objects in | |||
clear. | clear. | |||
The use of the cached info extension allows the server to obmit | The use of the cached info extension allows the server to obmit | |||
skipping to change at page 10, line 45 | skipping to change at page 9, line 45 | |||
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 cert(1) | o cert(1) | |||
o cert_req(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 | |||
skipping to change at page 11, line 32 | skipping to change at page 10, line 32 | |||
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 their 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", | ||||
RFC 3874, September 2004. | ||||
[RFC4634] Eastlake, D. and T. Hansen, "US Secure Hash Algorithms | [RFC4634] Eastlake, D. and T. Hansen, "US Secure Hash Algorithms | |||
(SHA and HMAC-SHA)", RFC 4634, July 2006. | (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. 28 change blocks. | ||||
411 lines changed or deleted | 64 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/ |