| < draft-ietf-tls-oob-pubkey-07.txt | draft-ietf-tls-oob-pubkey-08.txt > | |||
|---|---|---|---|---|
| TLS P. Wouters, Ed. | TLS P. Wouters, Ed. | |||
| Internet-Draft Red Hat | Internet-Draft Red Hat | |||
| Intended status: Standards Track H. Tschofenig, Ed. | Intended status: Standards Track H. Tschofenig, Ed. | |||
| Expires: August 19, 2013 Nokia Siemens Networks | Expires: January 17, 2014 Nokia Siemens Networks | |||
| J. Gilmore | J. Gilmore | |||
| S. Weiler | S. Weiler | |||
| SPARTA, Inc. | SPARTA, Inc. | |||
| T. Kivinen | T. Kivinen | |||
| AuthenTec | AuthenTec | |||
| February 15, 2013 | July 16, 2013 | |||
| Out-of-Band Public Key Validation for Transport Layer Security (TLS) | Out-of-Band Public Key Validation for Transport Layer Security (TLS) | |||
| draft-ietf-tls-oob-pubkey-07.txt | draft-ietf-tls-oob-pubkey-08.txt | |||
| Abstract | Abstract | |||
| This document specifies a new certificate type for exchanging raw | This document specifies a new certificate type and two TLS | |||
| public keys in Transport Layer Security (TLS) and Datagram Transport | extensions, one for the client and one for the server, for exchanging | |||
| Layer Security (DTLS) for use with out-of-band public key validation. | raw public keys in Transport Layer Security (TLS) and Datagram | |||
| Currently, TLS authentication can only occur via X.509-based Public | Transport Layer Security (DTLS) for use with out-of-band public key | |||
| Key Infrastructure (PKI) or OpenPGP certificates. By specifying a | validation. | |||
| minimum resource for raw public key exchange, implementations can use | ||||
| alternative public key validation methods. | ||||
| One such alternative public key valiation method is offered by the | ||||
| DNS-Based Authentication of Named Entities (DANE) together with DNS | ||||
| Security. Another alternative is to utilize pre-configured keys, as | ||||
| is the case with sensors and other embedded devices. The usage of | ||||
| raw public keys, instead of X.509-based certificates, leads to a | ||||
| smaller code footprint. | ||||
| This document introduces the support for raw public keys in TLS. | ||||
| Status of this Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 August 19, 2013. | This Internet-Draft will expire on January 17, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. New TLS Extension . . . . . . . . . . . . . . . . . . . . . . 5 | 3. New TLS Extension . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. TLS Handshake Extension . . . . . . . . . . . . . . . . . . . 8 | 4. TLS Handshake Extension . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. Client Hello . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. Client Hello . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.2. Server Hello . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Server Hello . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.3. Certificate Request . . . . . . . . . . . . . . . . . . . 9 | 4.3. Certificate Request . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.4. Other Handshake Messages . . . . . . . . . . . . . . . . . 9 | 4.4. Other Handshake Messages . . . . . . . . . . . . . . . . 7 | |||
| 4.5. Client authentication . . . . . . . . . . . . . . . . . . 9 | 4.5. Client authentication . . . . . . . . . . . . . . . . . . 8 | |||
| 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . . 14 | 9.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
| Appendix A. Example Encoding . . . . . . . . . . . . . . . . . . 15 | Appendix A. Example Encoding . . . . . . . . . . . . . . . . . . 13 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 16 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 1. Introduction | 1. Introduction | |||
| Traditionally, TLS server public keys are obtained in PKIX containers | Traditionally, TLS client and server public keys are obtained in PKIX | |||
| in-band using the TLS handshake and validated using trust anchors | containers in-band using the TLS handshake and validated using trust | |||
| based on a [PKIX] certification authority (CA). This method can add | anchors based on a [PKIX] certification authority (CA). This method | |||
| a complicated trust relationship that is difficult to validate. | can add a complicated trust relationship that is difficult to | |||
| Examples of such complexity can be seen in [Defeating-SSL]. | validate. Examples of such complexity can be seen in | |||
| [Defeating-SSL]. | ||||
| Alternative methods are available that allow a TLS client to obtain | Alternative methods are available that allow a TLS clients/servers to | |||
| the TLS server public key: | obtain the TLS servers/client public key: | |||
| o The TLS server public key is obtained from a DNSSEC secured | o TLS clients can obtain the TLS server public key from a DNSSEC | |||
| resource records using DANE [RFC6698]. | secured resource records using DANE [RFC6698]. | |||
| o The TLS server public key is obtained from a [PKIX] certificate | o The TLS client or server public key is obtained from a [PKIX] | |||
| chain from an Lightweight Directory Access Protocol (LDAP) [LDAP] | certificate chain from an Lightweight Directory Access Protocol | |||
| server. | (LDAP) [LDAP] server or web page. | |||
| o The TLS client and server public key is provisioned into the | o The TLS client and server public key is provisioned into the | |||
| operating system firmware image, and updated via software updates. | operating system firmware image, and updated via software updates. | |||
| For example: | ||||
| Some smart objects use the UDP-based Constrained Application Protocol | Some smart objects use the UDP-based Constrained Application | |||
| (CoAP) [I-D.ietf-core-coap] to interact with a Web server to upload | Protocol (CoAP) [I-D.ietf-core-coap] to interact with a Web server | |||
| sensor data at a regular intervals, such as temperature readings. | to upload sensor data at a regular intervals, such as temperature | |||
| CoAP [I-D.ietf-core-coap] can utilize DTLS for securing the client- | readings. CoAP [I-D.ietf-core-coap] can utilize DTLS for securing | |||
| to-server communication. As part of the manufacturing process, the | the client-to-server communication. As part of the manufacturing | |||
| embeded device may be configured with the address and the public key | process, the embedded device may be configured with the address | |||
| of a dedicated CoAP server, as well as a public key for the client | and the public key of a dedicated CoAP server, as well as a public | |||
| itself. The usage of X.509-based PKIX certificates [PKIX] may not | key for the client itself. | |||
| suit all smart object deployments and would therefore be an | ||||
| unneccesarry burden. | ||||
| The Transport Layer Security (TLS) Protocol Version 1.2 [RFC5246] | The mechanism defined herein only provides authentication when an | |||
| provides a framework for extensions to TLS as well as guidelines for | out-of-band mechanism is also used to bind the public key to the | |||
| designing such extensions. This document registers a new value to | entity presenting the key. | |||
| the IANA certificate types registry for the support of raw public | ||||
| keys. | This document registers a new value to the IANA certificate types | |||
| registry for the support of raw public keys. It also defines two new | ||||
| TLS extensions, "client_certificate_type" and | ||||
| "server_certificate_type". | ||||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 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 RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| 3. New TLS Extension | 3. New TLS Extension | |||
| This section describes the changes to the TLS handshake message | This section describes the changes to the TLS handshake message | |||
| contents when raw public key certificates are to be used. Figure 4 | contents when raw public keys are to be used. Figure 4 illustrates | |||
| illustrates the exchange of messages as described in the sub-sections | the exchange of messages as described in the sub-sections below. The | |||
| below. The client and the server exchange make use of two new TLS | client and the server exchange make use of two new TLS extensions, | |||
| extensions, namely 'client_certificate_type' and | namely 'client_certificate_type' and 'server_certificate_type', and | |||
| 'server_certificate_type', and an already available IANA TLS | an already available IANA TLS Certificate Type registry | |||
| Certificate Type registry [TLS-Certificate-Types-Registry] to | [TLS-Certificate-Types-Registry] to indicate their ability and desire | |||
| indicate their ability and desire to exchange raw public keys. These | to exchange raw public keys. These raw public keys, in the form of a | |||
| raw public keys, in the form of a SubjectPublicKeyInfo structure, are | SubjectPublicKeyInfo structure, are then carried inside the | |||
| then carried inside the Certificate payload. The Certificate and the | Certificate payload. The Certificate and the SubjectPublicKeyInfo | |||
| SubjectPublicKeyInfo structure is shown in Figure 1. | structure is shown in Figure 1. | |||
| opaque ASN.1Cert<1..2^24-1>; | opaque ASN.1Cert<1..2^24-1>; | |||
| struct { | struct { | |||
| select(certificate_type){ | select(certificate_type){ | |||
| // certificate type defined in this document. | ||||
| // certificate type defined in this document. | ||||
| case RawPublicKey: | case RawPublicKey: | |||
| opaque ASN.1_subjectPublicKeyInfo<1..2^24-1>; | opaque ASN.1_subjectPublicKeyInfo<1..2^24-1>; | |||
| // X.509 certificate defined in RFC 5246 | // X.509 certificate defined in RFC 5246 | |||
| case X.509: | case X.509: | |||
| ASN.1Cert certificate_list<0..2^24-1>; | ASN.1Cert certificate_list<0..2^24-1>; | |||
| // Additional certificate type based on TLS | // Additional certificate type based on TLS | |||
| // Certificate Type Registry | // Certificate Type Registry | |||
| }; | }; | |||
| } Certificate; | } Certificate; | |||
| Figure 1: TLS Certificate Structure. | Figure 1: TLS Certificate Structure. | |||
| The SubjectPublicKeyInfo structure is defined in Section 4.1 of RFC | The SubjectPublicKeyInfo structure is defined in Section 4.1 of RFC | |||
| 5280 [PKIX] and does not only contain the raw keys, such as the | 5280 [PKIX] and does not only contain the raw keys, such as the | |||
| public exponent and the modulus of an RSA public key, but also an | public exponent and the modulus of an RSA public key, but also an | |||
| algorithm identifier. The structure, as shown in Figure 2, is | algorithm identifier. The algorithm identifier can also include | |||
| encoded in an ASN.1 format and therefore contains length information | parameters. The structure, as shown in Figure 2, is encoded in an | |||
| as well. An example is provided in Appendix A. | DER encoded ASN.1 format [X.690] and therefore contains length | |||
| information as well. An example is provided in Appendix A. | ||||
| SubjectPublicKeyInfo ::= SEQUENCE { | SubjectPublicKeyInfo ::= SEQUENCE { | |||
| algorithm AlgorithmIdentifier, | algorithm AlgorithmIdentifier, | |||
| subjectPublicKey BIT STRING } | subjectPublicKey BIT STRING } | |||
| AlgorithmIdentifier ::= SEQUENCE { | ||||
| algorithm OBJECT IDENTIFIER, | ||||
| parameters ANY DEFINED BY algorithm OPTIONAL } | ||||
| Figure 2: SubjectPublicKeyInfo ASN.1 Structure. | Figure 2: SubjectPublicKeyInfo ASN.1 Structure. | |||
| The algorithm identifiers are Object Identifiers (OIDs). RFC 3279 | The algorithm identifiers are Object Identifiers (OIDs). RFC 3279 | |||
| [RFC3279], for example, defines the following OIDs shown in Figure 3. | [RFC3279] and [RFC5480] define the following OIDs shown in Figure 3. | |||
| Key Type | Document | OID | Key Type | Document | OID | |||
| RSA | Section 2.3.1 of RFC 3279 | 1.2.840.113549.1.1 | -----------------------+----------------------------+------------------- | |||
| .......................|............................|................... | RSA | Section 2.3.1 of RFC 3279 | 1.2.840.113549.1.1 | |||
| Digital Signature | | | .......................|............................|................... | |||
| Algorithm (DSS) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1 | Digital Signature | | | |||
| .......................|............................|................... | Algorithm (DSS) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1 | |||
| Elliptic Curve | | | .......................|............................|................... | |||
| Digital Signature | | | Elliptic Curve | | | |||
| Algorithm (ECDSA) | Section 2.3.5 of RFC 3279 | 1.2.840.10045.2.1 | Digital Signature | | | |||
| Algorithm (ECDSA) | Section 2.3.5 of RFC 5480 | 1.2.840.10045.2.1 | ||||
| -----------------------+----------------------------+------------------- | ||||
| Figure 3: Example Algorithm Identifiers. | Figure 3: Example Algorithm Object Identifiers. | |||
| The message exchange in Figure 4 shows the 'client_certificate_type' | The message exchange in Figure 4 shows the 'client_certificate_type' | |||
| and 'server_certificate_type' extensions added to the client and | and 'server_certificate_type' extensions added to the client and | |||
| server hello messages. | server hello messages. | |||
| client_hello, | client_hello, | |||
| client_certificate_type | client_certificate_type | |||
| server_certificate_type -> | server_certificate_type -> | |||
| <- server_hello, | <- server_hello, | |||
| skipping to change at page 8, line 44 ¶ | skipping to change at page 7, line 11 ¶ | |||
| No new cipher suites are required to use raw public keys. All | No new cipher suites are required to use raw public keys. All | |||
| existing cipher suites that support a key exchange method compatible | existing cipher suites that support a key exchange method compatible | |||
| with the defined extension can be used. | with the defined extension can be used. | |||
| 4. TLS Handshake Extension | 4. TLS Handshake Extension | |||
| 4.1. Client Hello | 4.1. Client Hello | |||
| In order to indicate the support of out-of-band raw public keys, | In order to indicate the support of out-of-band raw public keys, | |||
| clients MUST include the 'client_certificate_type' and | clients MUST include the 'client_certificate_type' and | |||
| 'server_certificate_type' extensions extended client hello message. | 'server_certificate_type' extensions in an extended client hello | |||
| The hello extension mechanism is described in TLS 1.2 [RFC5246]. | message. The hello extension mechanism is described in TLS 1.2 | |||
| [RFC5246]. | ||||
| 4.2. Server Hello | 4.2. Server Hello | |||
| If the server receives a client hello that contains the | If the server receives a client hello that contains the | |||
| 'client_certificate_type' and 'server_certificate_type' extensions | 'client_certificate_type' and 'server_certificate_type' extensions | |||
| and chooses a cipher suite then three outcomes are possible: | and chooses a cipher suite then three outcomes are possible: | |||
| 1. The server does not support the extension defined in this | 1. The server does not support the extension defined in this | |||
| document. In this case the server returns the server hello | document. In this case the server returns the server hello | |||
| without the extensions defined in this document. | without the extensions defined in this document. | |||
| skipping to change at page 9, line 31 ¶ | skipping to change at page 7, line 41 ¶ | |||
| does not have a certificate type in common with the client. In | does not have a certificate type in common with the client. In | |||
| this case the server terminate the session with a fatal alert of | this case the server terminate the session with a fatal alert of | |||
| type "unsupported_certificate". | type "unsupported_certificate". | |||
| If the TLS server also requests a certificate from the client (via | If the TLS server also requests a certificate from the client (via | |||
| the certificate_request) it MUST include the | the certificate_request) it MUST include the | |||
| 'client_certificate_type' extension with a value chosen from the list | 'client_certificate_type' extension with a value chosen from the list | |||
| of client-supported certificates types (as provided in the | of client-supported certificates types (as provided in the | |||
| 'client_certificate_type' of the client hello). | 'client_certificate_type' of the client hello). | |||
| If the client indicated the support of raw public keys in the | If the client hello indicates support of raw public keys in the | |||
| 'client_certificate_type' extension in the client hello and the | 'client_certificate_type' extension and the server chooses to use raw | |||
| server is able to provide such raw public key then the TLS server | public keys then the TLS server MUST place the SubjectPublicKeyInfo | |||
| MUST place the SubjectPublicKeyInfo structure into the Certificate | structure into the Certificate payload. | |||
| payload. The public key algorithm MUST match the selected key | ||||
| exchange algorithm. | ||||
| 4.3. Certificate Request | 4.3. Certificate Request | |||
| The semantics of this message remain the same as in the TLS | The semantics of this message remain the same as in the TLS | |||
| specification. | specification. | |||
| 4.4. Other Handshake Messages | 4.4. Other Handshake Messages | |||
| All the other handshake messages are identical to the TLS | All the other handshake messages are identical to the TLS | |||
| specification. | specification. | |||
| 4.5. Client authentication | 4.5. Client authentication | |||
| Client authentication by the TLS server is supported only through | Client authentication by the TLS server is supported only through | |||
| authentication of the received client SubjectPublicKeyInfo via an | authentication of the received client SubjectPublicKeyInfo via an | |||
| out-of-band method. | out-of-band method. | |||
| 5. Examples | 5. Examples | |||
| skipping to change at page 10, line 17 ¶ | skipping to change at page 8, line 25 ¶ | |||
| Figure 6, Figure 7, and Figure 8 illustrate example exchanges. | Figure 6, Figure 7, and Figure 8 illustrate example exchanges. | |||
| The first example shows an exchange where the TLS client indicates | The first example shows an exchange where the TLS client indicates | |||
| its ability to receive and validate raw public keys from the server. | its ability to receive and validate raw public keys from the server. | |||
| In our example the client is quite restricted since it is unable to | In our example the client is quite restricted since it is unable to | |||
| process other certificate types sent by the server. It also does not | process other certificate types sent by the server. It also does not | |||
| have credentials (at the TLS layer) it could send. The | have credentials (at the TLS layer) it could send. The | |||
| 'client_certificate_type' extension indicates this in [1]. When the | 'client_certificate_type' extension indicates this in [1]. When the | |||
| TLS server receives the client hello it processes the | TLS server receives the client hello it processes the | |||
| 'client_certificate_type' extension. Since it also has a raw public | 'client_certificate_type' extension. Since it also has a raw public | |||
| key it indicates in [2] that it had choosen to place the | key it indicates in [2] that it had chosen to place the | |||
| SubjectPublicKeyInfo structure into the Certificate payload [3]. The | SubjectPublicKeyInfo structure into the Certificate payload [3]. The | |||
| client uses this raw public key in the TLS handshake and an out-of- | client uses this raw public key in the TLS handshake and an out-of- | |||
| band technique, such as DANE, to verify its validity. | band technique, such as DANE, to verify its validity. | |||
| client_hello, | client_hello, | |||
| server_certificate_type=(RawPublicKey) -> // [1] | server_certificate_type=(RawPublicKey) -> // [1] | |||
| <- server_hello, | <- server_hello, | |||
| server_certificate_type=(RawPublicKey), // [2] | server_certificate_type=(RawPublicKey), // [2] | |||
| certificate, // [3] | certificate, // [3] | |||
| server_key_exchange, | server_key_exchange, | |||
| server_hello_done | server_hello_done | |||
| client_key_exchange, | client_key_exchange, | |||
| change_cipher_spec, | change_cipher_spec, | |||
| finished -> | finished -> | |||
| <- change_cipher_spec, | <- change_cipher_spec, | |||
| finished | finished | |||
| Application Data <-------> Application Data | Application Data <-------> Application Data | |||
| Figure 6: Example with Raw Public Key provided by the TLS Server | Figure 6: Example with Raw Public Key provided by the TLS Server | |||
| In our second example the TLS client as well as the TLS server use | In our second example the TLS client as well as the TLS server use | |||
| raw public keys. This is a use case envisioned for smart object | raw public keys. This is a use case envisioned for smart object | |||
| networking. The TLS client in this case is an embedded device that | networking. The TLS client in this case is an embedded device that | |||
| is configured with a raw public key for use with TLS and is also able | is configured with a raw public key for use with TLS and is also able | |||
| to process raw public keys sent by the server. Therefore, it | to process raw public keys sent by the server. Therefore, it | |||
| indicates these capabilities in [1]. As in the previously shown | indicates these capabilities in [1]. As in the previously shown | |||
| example the server fulfills the client's request, indicates this via | example the server fulfills the client's request, indicates this via | |||
| the "RawPublicKey" value in the server_certificate_type payload, and | the "RawPublicKey" value in the server_certificate_type payload, and | |||
| provides a raw public key into the Certificate payload back to the | provides a raw public key into the Certificate payload back to the | |||
| client (see [3]). The TLS server, however, demands client | client (see [3]). The TLS server, however, demands client | |||
| authentication and therefore a certificate_request is added [4]. The | authentication and therefore a certificate_request is added [4]. The | |||
| certificate_type payload in [2] indicates that the TLS server accepts | certificate_type payload in [2] indicates that the TLS server accepts | |||
| raw public keys. The TLS client, who has a raw public key pre- | raw public keys. The TLS client, who has a raw public key pre- | |||
| provisioned, returns it in the Certificate payload [5] to the server. | provisioned, returns it in the Certificate payload [5] to the server. | |||
| client_hello, | client_hello, | |||
| client_certificate_type=(RawPublicKey) // [1] | client_certificate_type=(RawPublicKey) // [1] | |||
| server_certificate_type=(RawPublicKey) // [1] | server_certificate_type=(RawPublicKey) // [1] | |||
| -> | -> | |||
| <- server_hello, | <- server_hello, | |||
| server_certificate_type=(RawPublicKey)//[2] | server_certificate_type=(RawPublicKey)//[2] | |||
| certificate, // [3] | certificate, // [3] | |||
| client_certificate_type=(RawPublicKey)//[4] | client_certificate_type=(RawPublicKey)//[4] | |||
| certificate_request, // [4] | certificate_request, // [4] | |||
| server_key_exchange, | server_key_exchange, | |||
| server_hello_done | server_hello_done | |||
| certificate, // [5] | certificate, // [5] | |||
| client_key_exchange, | client_key_exchange, | |||
| change_cipher_spec, | change_cipher_spec, | |||
| finished -> | finished -> | |||
| <- change_cipher_spec, | <- change_cipher_spec, | |||
| finished | finished | |||
| Application Data <-------> Application Data | Application Data <-------> Application Data | |||
| Figure 7: Example with Raw Public Key provided by the TLS Server and | Figure 7: Example with Raw Public Key provided by the TLS Server and | |||
| the Client | the Client | |||
| In our last example we illustrate a combination of raw public key and | In our last example we illustrate a combination of raw public key and | |||
| X.509 usage. The client uses a raw public key for client | X.509 usage. The client uses a raw public key for client | |||
| authentication but the server provides an X.509 certificate. This | authentication but the server provides an X.509 certificate. This | |||
| exchange starts with the client indicating its ability to process | exchange starts with the client indicating its ability to process | |||
| X.509 certificates provided by the server, and the ability to send | X.509 certificates provided by the server, and the ability to send | |||
| raw public keys (see [1]). The server provides the X.509 certificate | raw public keys (see [1]). The server provides the X.509 certificate | |||
| in [3] with the indication present in [2]. For client authentication | in [3] with the indication present in [2]. For client authentication | |||
| the server indicates in [4] that it selected the raw public key | the server indicates in [4] that it selected the raw public key | |||
| format and requests a certificate from the client in [5]. The TLS | format and requests a certificate from the client in [5]. The TLS | |||
| client provides a raw public key in [6] after receiving and | client provides a raw public key in [6] after receiving and | |||
| processing the TLS server hello message. | processing the TLS server hello message. | |||
| client_hello, | client_hello, | |||
| server_certificate_type=(X.509) | server_certificate_type=(X.509) | |||
| client_certificate_type=(RawPublicKey) // [1] | client_certificate_type=(RawPublicKey) // [1] | |||
| -> | -> | |||
| <- server_hello, | <- server_hello, | |||
| server_certificate_type=(X.509)//[2] | server_certificate_type=(X.509)//[2] | |||
| certificate, // [3] | certificate, // [3] | |||
| client_certificate_type=(RawPublicKey)//[4] | client_certificate_type=(RawPublicKey)//[4] | |||
| certificate_request, // [5] | certificate_request, // [5] | |||
| server_key_exchange, | server_key_exchange, | |||
| server_hello_done | server_hello_done | |||
| certificate, // [6] | certificate, // [6] | |||
| client_key_exchange, | client_key_exchange, | |||
| change_cipher_spec, | change_cipher_spec, | |||
| finished -> | finished -> | |||
| <- change_cipher_spec, | <- change_cipher_spec, | |||
| finished | finished | |||
| Application Data <-------> Application Data | Application Data <-------> Application Data | |||
| Figure 8: Hybrid Certificate Example | Figure 8: Hybrid Certificate Example | |||
| 6. Security Considerations | 6. Security Considerations | |||
| The transmission of raw public keys, as described in this document, | The transmission of raw public keys, as described in this document, | |||
| provides benefits by lowering the over-the-air transmission overhead | provides benefits by lowering the over-the-air transmission overhead | |||
| since raw public keys are quite naturally smaller than an entire | since raw public keys are quite naturally smaller than an entire | |||
| certificate. There are also advantages from a codesize point of view | certificate. There are also advantages from a code size point of | |||
| for parsing and processing these keys. The crytographic procedures | view for parsing and processing these keys. The cryptographic | |||
| for assocating the public key with the possession of a private key | procedures for associating the public key with the possession of a | |||
| also follows standard procedures. | private key also follows standard procedures. | |||
| The main security challenge is, however, how to associate the public | The main security challenge is, however, how to associate the public | |||
| key with a specific entity. This information will be needed to make | key with a specific entity. Without a secure binding between | |||
| authorization decisions. Without a secure binding, man-in-the-middle | identity and key the protocol will be vulnerable to masquerade and | |||
| attacks may be the consequence. This document assumes that such | man-in-the-middle attacks. This document assumes that such binding | |||
| binding can be made out-of-band and we list a few examples in | can be made out-of-band and we list a few examples in Section 1. | |||
| Section 1. DANE [RFC6698] offers one such approach. If public keys | DANE [RFC6698] offers one such approach. In order to address these | |||
| vulnerabilities, specifications that make use of the extension MUST | ||||
| specify how the identity and public key are bound. If public keys | ||||
| are obtained using DANE, these public keys are authenticated via | are obtained using DANE, these public keys are authenticated via | |||
| DNSSEC. Pre-configured keys is another out of band method for | DNSSEC. Pre-configured keys is another out of band method for | |||
| authenticating raw public keys. While pre-configured keys are not | authenticating raw public keys. While pre-configured keys are not | |||
| suitable for a generic Web-based e-commerce environment such keys are | suitable for a generic Web-based e-commerce environment such keys are | |||
| a reasonable approach for many smart object deployments where there | a reasonable approach for many smart object deployments where there | |||
| is a close relationship between the software running on the device | is a close relationship between the software running on the device | |||
| and the server-side communication endpoint. Regardless of the chosen | and the server-side communication endpoint. Regardless of the chosen | |||
| mechanism for out-of-band public key validation an assessment of the | mechanism for out-of-band public key validation an assessment of the | |||
| most suitable approach has to be made prior to the start of a | most suitable approach has to be made prior to the start of a | |||
| deployment to ensure the security of the system. | deployment to ensure the security of the system. | |||
| skipping to change at page 13, line 39 ¶ | skipping to change at page 11, line 47 ¶ | |||
| substantially shaped the document and we would like to thank the | substantially shaped the document and we would like to thank the | |||
| meeting participants for their input. The support for hashes of | meeting participants for their input. The support for hashes of | |||
| public keys has been moved to [I-D.ietf-tls-cached-info] after the | public keys has been moved to [I-D.ietf-tls-cached-info] after the | |||
| discussions at the IETF#82 meeting. | discussions at the IETF#82 meeting. | |||
| We would like to thank the following persons for their review | We would like to thank the following persons for their review | |||
| comments: Martin Rex, Bill Frantz, Zach Shelby, Carsten Bormann, | comments: Martin Rex, Bill Frantz, Zach Shelby, Carsten Bormann, | |||
| Cullen Jennings, Rene Struik, Alper Yegin, Jim Schaad, Barry Leiba, | Cullen Jennings, Rene Struik, Alper Yegin, Jim Schaad, Barry Leiba, | |||
| Paul Hoffman, Robert Cragie, Nikos Mavrogiannopoulos, Phil Hunt, John | Paul Hoffman, Robert Cragie, Nikos Mavrogiannopoulos, Phil Hunt, John | |||
| Bradley, Klaus Hartke, Stefan Jucker, Kovatsch Matthias, Daniel Kahn | Bradley, Klaus Hartke, Stefan Jucker, Kovatsch Matthias, Daniel Kahn | |||
| Gillmor, and James Manger. Nikos Mavrogiannopoulos contributed the | Gillmor, Peter Sylvester, and James Manger. Nikos Mavrogiannopoulos | |||
| design for re-using the certificate type registry. Barry Leiba | contributed the design for re-using the certificate type registry. | |||
| contributed guidance for the IANA consideration text. Stefan Jucker, | ||||
| Kovatsch Matthias, and Klaus Hartke provided implementation feedback | ||||
| regarding the SubjectPublicKeyInfo structure. | ||||
| Finally, we would like to thank our TLS working group chairs, Eric | Barry Leiba contributed guidance for the IANA consideration text. | |||
| Rescorla and Joe Salowey, for their guidance and support. | Stefan Jucker, Kovatsch Matthias, and Klaus Hartke provided | |||
| implementation feedback regarding the SubjectPublicKeyInfo structure. | ||||
| We would like to thank our TLS working group chairs, Eric Rescorla | ||||
| and Joe Salowey, for their guidance and support. Finally, we would | ||||
| like to thank Sean Turner, who is the responsible security area | ||||
| director for this work for his review comments and suggestions. | ||||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [PKIX] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [PKIX] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, May 2008. | (CRL) Profile", RFC 5280, May 2008. | |||
| [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. | |||
| [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and | ||||
| Identifiers for the Internet X.509 Public Key | ||||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (CRL) Profile", RFC 3279, April 2002. | ||||
| [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. | |||
| [RFC5480] Turner, S., Brown, D., Yiu, K., Housley, R., and T. Polk, | ||||
| "Elliptic Curve Cryptography Subject Public Key | ||||
| Information", RFC 5480, March 2009. | ||||
| [TLS-Certificate-Types-Registry] | [TLS-Certificate-Types-Registry] | |||
| "TLS Certificate Types Registry", February 2013, <http:// | , "TLS Certificate Types Registry", February 2013, <http:/ | |||
| www.iana.org/assignments/ | /www.iana.org/assignments/tls-extensiontype-values#tls- | |||
| tls-extensiontype-values#tls-extensiontype-values-2>. | extensiontype-values-2>. | |||
| [X.690] , "Information technology - ASN.1 encoding rules: > | ||||
| Specification of Basic Encoding Rules (BER), Canonical > | ||||
| Encoding Rules (CER) and Distinguished Encoding Rules > | ||||
| (DER).", RFC 5280, 2002. | ||||
| 9.2. Informative References | 9.2. Informative References | |||
| [ASN.1-Dump] | [ASN.1-Dump] | |||
| Gutmann, P., "ASN.1 Object Dump Program", February 2013, | Gutmann, P., "ASN.1 Object Dump Program", February 2013, | |||
| <http://www.cs.auckland.ac.nz/~pgut001/>. | <http://www.cs.auckland.ac.nz/~pgut001/>. | |||
| [Defeating-SSL] | [Defeating-SSL] | |||
| Marlinspike, M., "New Tricks for Defeating SSL in | Marlinspike, M., "New Tricks for Defeating SSL in | |||
| Practice", February 2009, <http://www.blackhat.com/ | Practice", February 2009, <http://www.blackhat.com/ | |||
| presentations/bh-dc-09/Marlinspike/ | presentations/bh-dc-09/Marlinspike/BlackHat-DC-09 | |||
| BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf>. | -Marlinspike-Defeating-SSL.pdf>. | |||
| [I-D.ietf-core-coap] | [I-D.ietf-core-coap] | |||
| Shelby, Z., Hartke, K., Bormann, C., and B. Frank, | Shelby, Z., Hartke, K., and C. Bormann, "Constrained | |||
| "Constrained Application Protocol (CoAP)", | Application Protocol (CoAP)", draft-ietf-core-coap-18 | |||
| draft-ietf-core-coap-13 (work in progress), December 2012. | (work in progress), June 2013. | |||
| [I-D.ietf-tls-cached-info] | [I-D.ietf-tls-cached-info] | |||
| Santesson, S. and H. Tschofenig, "Transport Layer Security | Santesson, S. and H. Tschofenig, "Transport Layer Security | |||
| (TLS) Cached Information Extension", | (TLS) Cached Information Extension", draft-ietf-tls- | |||
| draft-ietf-tls-cached-info-13 (work in progress), | cached-info-14 (work in progress), March 2013. | |||
| September 2012. | ||||
| [LDAP] Sermersheim, J., "Lightweight Directory Access Protocol | [LDAP] Sermersheim, J., "Lightweight Directory Access Protocol | |||
| (LDAP): The Protocol", RFC 4511, June 2006. | (LDAP): The Protocol", RFC 4511, June 2006. | |||
| [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and | ||||
| Identifiers for the Internet X.509 Public Key | ||||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (CRL) Profile", RFC 3279, April 2002. | ||||
| [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | |||
| of Named Entities (DANE) Transport Layer Security (TLS) | of Named Entities (DANE) Transport Layer Security (TLS) | |||
| Protocol: TLSA", RFC 6698, August 2012. | Protocol: TLSA", RFC 6698, August 2012. | |||
| Appendix A. Example Encoding | Appendix A. Example Encoding | |||
| For example, the following hex sequence describes a | For example, the following hex sequence describes a | |||
| SubjectPublicKeyInfo structure inside the certificate payload: | SubjectPublicKeyInfo structure inside the certificate payload: | |||
| 0 1 2 3 4 5 6 7 8 9 | 0 1 2 3 4 5 6 7 8 9 | |||
| End of changes. 52 change blocks. | ||||
| 190 lines changed or deleted | 199 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||