| < draft-ietf-tls-oob-pubkey-09.txt | draft-ietf-tls-oob-pubkey-10.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: January 31, 2014 Nokia Siemens Networks | Expires: April 22, 2014 Nokia Solutions and Networks | |||
| J. Gilmore | J. Gilmore | |||
| S. Weiler | S. Weiler | |||
| SPARTA, Inc. | SPARTA, Inc. | |||
| T. Kivinen | T. Kivinen | |||
| AuthenTec | AuthenTec | |||
| July 30, 2013 | October 19, 2013 | |||
| Out-of-Band Public Key Validation for Transport Layer Security (TLS) | Using Raw Public Keys in Transport Layer Security (TLS) and Datagram | |||
| draft-ietf-tls-oob-pubkey-09.txt | Transport Layer Security (DTLS) | |||
| draft-ietf-tls-oob-pubkey-10.txt | ||||
| Abstract | Abstract | |||
| This document specifies a new certificate type and two TLS | This document specifies a new certificate type and two TLS extensions | |||
| extensions, one for the client and one for the server, for exchanging | for exchanging raw public keys in Transport Layer Security (TLS) and | |||
| raw public keys in Transport Layer Security (TLS) and Datagram | Datagram Transport Layer Security (DTLS) for use with out-of-band | |||
| Transport Layer Security (DTLS) for use with out-of-band public key | public key validation. | |||
| validation. | ||||
| 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 January 31, 2014. | This Internet-Draft will expire on April 22, 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. New TLS Extension . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Structure of the Raw Public Key Extension . . . . . . . . . . 4 | |||
| 4. TLS Handshake Extension . . . . . . . . . . . . . . . . . . . 7 | 4. TLS Client and Server Handshake Behavior . . . . . . . . . . 6 | |||
| 4.1. Client Hello . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Client Hello . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.2. Server Hello . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. Server Hello . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.3. Certificate Request . . . . . . . . . . . . . . . . . . . 7 | 4.3. Client Authentication . . . . . . . . . . . . . . . . . . 8 | |||
| 4.4. Other Handshake Messages . . . . . . . . . . . . . . . . 8 | ||||
| 4.5. Client authentication . . . . . . . . . . . . . . . . . . 8 | ||||
| 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 5.1. TLS Server uses Raw Public Key . . . . . . . . . . . . . 8 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 5.2. TLS Client and Server use Raw Public Keys . . . . . . . . 9 | |||
| 5.3. Combined Usage of Raw Public Keys and X.509 Certificate . 10 | ||||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | ||||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 13 | 9.2. Informative References . . . . . . . . . . . . . . . . . 14 | |||
| Appendix A. Example Encoding . . . . . . . . . . . . . . . . . . 13 | Appendix A. Example Encoding . . . . . . . . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 14 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 1. Introduction | 1. Introduction | |||
| Traditionally, TLS client and server public keys are obtained in PKIX | Traditionally, TLS client and server public keys are obtained in PKIX | |||
| containers in-band using the TLS handshake and validated using trust | containers in-band as part of the TLS handshake procedure and are | |||
| anchors based on a [PKIX] certification authority (CA). This method | validated using trust anchors based on a PKIX certification authority | |||
| can add a complicated trust relationship that is difficult to | (CA) [RFC5280]. This method can add a complicated trust relationship | |||
| validate. Examples of such complexity can be seen in | that is difficult to validate. Examples of such complexity can be | |||
| [Defeating-SSL]. | seen in [Defeating-SSL]. | |||
| Alternative methods are available that allow a TLS clients/servers to | Alternative methods are available that allow a TLS clients/servers to | |||
| obtain the TLS servers/client public key: | obtain the TLS servers/client public key: | |||
| o TLS clients can obtain the TLS server public key from a DNSSEC | o TLS clients can obtain the TLS server public key from a DNSSEC | |||
| secured resource records using DANE [RFC6698]. | secured resource records using DANE [RFC6698]. | |||
| o The TLS client or server public key is obtained from a [PKIX] | o The TLS client or server public key is obtained from a certificate | |||
| certificate chain from an Lightweight Directory Access Protocol | chain via a Lightweight Directory Access Protocol (LDAP) [RFC4511] | |||
| (LDAP) [LDAP] server or web page. | 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: | For example: | |||
| Some smart objects use the UDP-based Constrained Application | Some smart objects use the UDP-based Constrained Application | |||
| Protocol (CoAP) [I-D.ietf-core-coap] to interact with a Web server | Protocol (CoAP) [I-D.ietf-core-coap] to interact with a Web server | |||
| to upload sensor data at a regular intervals, such as temperature | to upload sensor data at a regular intervals, such as temperature | |||
| readings. CoAP [I-D.ietf-core-coap] can utilize DTLS for securing | readings. CoAP [I-D.ietf-core-coap] can utilize DTLS for securing | |||
| the client-to-server communication. As part of the manufacturing | the client-to-server communication. As part of the manufacturing | |||
| process, the embedded device may be configured with the address | process, the embedded device may be configured with the address | |||
| and the public key of a dedicated CoAP server, as well as a public | and the public key of a dedicated CoAP server, as well as a public | |||
| key for the client itself. | /private key pair for the client itself. | |||
| This document introduces the use of raw public keys in TLS/DTLS. Raw | ||||
| public key thereby means that only a sub-set of the information found | ||||
| in typical certificates is utilized, namely the SubjectPublicKeyInfo | ||||
| structure of a PKIX certificates that carries the parameters | ||||
| necessary to describe the public key. Other parameters also found in | ||||
| a PKIX certificate are omitted. A consequence of omitting various | ||||
| certificate related structures is that the resulting raw public key | ||||
| is fairly small (compared to the original certificate) and does not | ||||
| require codepaths for the ASN.1 parser, for certificate path | ||||
| validation and other PKIX related processing tasks. To further | ||||
| reduce the size of the exchanged information this specification can | ||||
| be combined with the TLS Cached Info extension | ||||
| [I-D.ietf-tls-cached-info], which enables TLS endpoints to just | ||||
| exchange fingerprints of their public keys (rather than the full | ||||
| public keys). | ||||
| The mechanism defined herein only provides authentication when an | The mechanism defined herein only provides authentication when an | |||
| out-of-band mechanism is also used to bind the public key to the | out-of-band mechanism is also used to bind the public key to the | |||
| entity presenting the key. | entity presenting the key. | |||
| This document registers a new value to the IANA certificate types | This document is structured as follows: Section 3 defines the | |||
| registry for the support of raw public keys. It also defines two new | structure of the two new TLS extensions "client_certificate_type" and | |||
| TLS extensions, "client_certificate_type" and | "server_certificate_type", which can be used as part of an extended | |||
| "server_certificate_type". | TLS handshake when raw public keys are to be used. Section 4 defines | |||
| the behavior of the TLS client and the TLS server. Example exchanges | ||||
| are described in Section 5. Finally, in Section 7 this document also | ||||
| registers a new value to the IANA certificate types registry for the | ||||
| support of raw public keys. | ||||
| 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 | We use the terms 'TLS server' and 'server' as well as 'TLS client' | |||
| and 'client' interchangable. | ||||
| This section describes the changes to the TLS handshake message | 3. Structure of the Raw Public Key Extension | |||
| contents when raw public keys are to be used. Figure 4 illustrates | ||||
| the exchange of messages as described in the sub-sections below. The | This section defines the two TLS extensions 'client_certificate_type' | |||
| client and the server exchange make use of two new TLS extensions, | and 'server_certificate_type', which can be used as part of an | |||
| namely 'client_certificate_type' and 'server_certificate_type', and | extended TLS handshake when raw public keys are used. Section 4 | |||
| an already available IANA TLS Certificate Type registry | defines the behavior of the TLS client and the TLS server using this | |||
| [TLS-Certificate-Types-Registry] to indicate their ability and desire | extension. | |||
| to exchange raw public keys. These raw public keys, in the form of a | ||||
| SubjectPublicKeyInfo structure, are then carried inside the | This specification reuses the SubjectPublicKeyInfo structure to | |||
| Certificate payload. The Certificate and the SubjectPublicKeyInfo | encode the raw public key and to convey that information within the | |||
| structure is shown in Figure 1. | TLS handshake the Certificate payload is utilized as a container, as | |||
| shown in Figure 1. The shown Certificate structure is an adaptation | ||||
| of its original form [RFC5246]. | ||||
| 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: Certificate Payload as a Container for the Raw Public Key. | |||
| 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 [RFC5280] 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 algorithm identifier can also include | algorithm identifier. The algorithm identifier can also include | |||
| parameters. The structure, as shown in Figure 2, is encoded in an | parameters. The structure, as shown in Figure 2, is represented in a | |||
| DER encoded ASN.1 format [X.690] and therefore contains length | DER encoded ASN.1 format [X.690] and therefore contains length | |||
| information as well. An example is provided in Appendix A. | 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 { | AlgorithmIdentifier ::= SEQUENCE { | |||
| algorithm OBJECT IDENTIFIER, | algorithm OBJECT IDENTIFIER, | |||
| parameters ANY DEFINED BY algorithm OPTIONAL } | parameters ANY DEFINED BY algorithm OPTIONAL } | |||
| skipping to change at page 4, line 47 ¶ | skipping to change at page 5, line 25 ¶ | |||
| The algorithm identifiers are Object Identifiers (OIDs). RFC 3279 | The algorithm identifiers are Object Identifiers (OIDs). RFC 3279 | |||
| [RFC3279] and [RFC5480], for example, define the following OIDs shown | [RFC3279] and [RFC5480], for example, define the following OIDs shown | |||
| in Figure 3. Note that this list is not exhaustive and more OIDs may | in Figure 3. Note that this list is not exhaustive and more OIDs may | |||
| be defined in future RFCs. RFC 5480 also defines a number of OIDs. | be defined in future RFCs. RFC 5480 also defines a number of OIDs. | |||
| 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 | | | Digital Signature | | | |||
| Algorithm (DSS) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1 | Algorithm (DSA) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1 | |||
| .......................|............................|................... | .......................|............................|................... | |||
| Elliptic Curve | | | Elliptic Curve | | | |||
| Digital Signature | | | Digital Signature | | | |||
| Algorithm (ECDSA) | Section 2 of RFC 5480 | 1.2.840.10045.2.1 | Algorithm (ECDSA) | Section 2 of RFC 5480 | 1.2.840.10045.2.1 | |||
| -----------------------+----------------------------+------------------- | -----------------------+----------------------------+------------------- | |||
| Figure 3: Example Algorithm Object Identifiers. | Figure 3: Example Algorithm Object Identifiers. | |||
| The message exchange in Figure 4 shows the 'client_certificate_type' | The extension format for extended client hellos and extended server, | |||
| and 'server_certificate_type' extensions added to the client and | via the "extension_data" field, is used to carry the | |||
| server hello messages. | ClientCertTypeExtension and the ServerCertTypeExtension structures. | |||
| These two structures are shown in Figure 4. The CertificateType | ||||
| structure is an enum with values taken from the 'TLS Certificate | ||||
| Type' registry [TLS-Certificate-Types-Registry]. | ||||
| struct { | ||||
| select(ClientOrServerExtension) | ||||
| case client: | ||||
| CertificateType client_certificate_types<1..2^8-1>; | ||||
| case server: | ||||
| CertificateType client_certificate_type; | ||||
| } | ||||
| } ClientCertTypeExtension; | ||||
| struct { | ||||
| select(ClientOrServerExtension) | ||||
| case client: | ||||
| CertificateType server_certificate_types<1..2^8-1>; | ||||
| case server: | ||||
| CertificateType server_certificate_type; | ||||
| } | ||||
| } ServerCertTypeExtension; | ||||
| Figure 4: CertTypeExtension Structure. | ||||
| 4. TLS Client and Server Handshake Behavior | ||||
| This specification extends the ClientHello and the ServerHello | ||||
| messages, according to the extension procedures defined in [RFC5246]. | ||||
| It does not extend or modify any other TLS message. | ||||
| Note: No new cipher suites are required to use raw public keys. All | ||||
| existing cipher suites that support a key exchange method compatible | ||||
| with the defined extension can be used. | ||||
| The high-level message exchange in Figure 5 shows the | ||||
| 'client_certificate_type' and 'server_certificate_type' extensions | ||||
| added to the client and server hello messages. | ||||
| client_hello, | client_hello, | |||
| client_certificate_type | client_certificate_type, | |||
| server_certificate_type -> | server_certificate_type -> | |||
| <- server_hello, | <- server_hello, | |||
| client_certificate_type, | client_certificate_type, | |||
| server_certificate_type, | server_certificate_type, | |||
| certificate, | certificate, | |||
| server_key_exchange, | server_key_exchange, | |||
| certificate_request, | certificate_request, | |||
| server_hello_done | server_hello_done | |||
| certificate, | certificate, | |||
| client_key_exchange, | client_key_exchange, | |||
| certificate_verify, | certificate_verify, | |||
| 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 5: Basic Raw Public Key TLS Exchange. | ||||
| Figure 4: Basic Raw Public Key TLS Exchange. | 4.1. Client Hello | |||
| The semantic of the two extensions is defined as follows: | ||||
| The 'client_certificate_type' and 'server_certificate_type' sent | ||||
| in the client hello, may carry a list of supported certificate | ||||
| types, sorted by client preference. It is a list in the case | ||||
| where the client supports multiple certificate types. These | ||||
| extension MUST be omitted if the client only supports X.509 | ||||
| certificates. The 'client_certificate_type' sent in the client | ||||
| hello indicates the certificate types the client is able to | ||||
| provide to the server, when requested using a certificate_request | ||||
| message. The 'server_certificate_type' in the client hello | ||||
| indicates the type of certificates the client is able to process | ||||
| when provided by the server in a subsequent certificate payload. | ||||
| The 'client_certificate_type' returned in the server hello | ||||
| indicates the certificate type found in the attached certificate | ||||
| payload. Only a single value is permitted. The | ||||
| 'server_certificate_type' in the server hello indicates the type | ||||
| of certificates the client is requested to provide in a subsequent | ||||
| certificate payload. The value conveyed in the | ||||
| 'server_certificate_type' MUST be selected from one of the values | ||||
| provided in the 'server_certificate_type' sent in the client | ||||
| hello. If the server does not send a certificate_request payload | ||||
| or none of the certificates supported by the client (as indicated | ||||
| in the 'server_certificate_type' in the client hello) match the | ||||
| server-supported certificate types the 'server_certificate_type' | ||||
| payload sent in the server hello is omitted. | ||||
| The "extension_data" field of this extension contains the | ||||
| ClientCertTypeExtension or the ServerCertTypeExtension structure, as | ||||
| shown in Figure 5. The CertificateType structure is an enum with | ||||
| with values from TLS Certificate Type Registry. | ||||
| struct { | ||||
| select(ClientOrServerExtension) | ||||
| case client: | ||||
| CertificateType client_certificate_types<1..2^8-1>; | ||||
| case server: | ||||
| CertificateType client_certificate_type; | ||||
| } | ||||
| } ClientCertTypeExtension; | ||||
| struct { | ||||
| select(ClientOrServerExtension) | ||||
| case client: | ||||
| CertificateType server_certificate_types<1..2^8-1>; | ||||
| case server: | ||||
| CertificateType server_certificate_type; | ||||
| } | ||||
| } ServerCertTypeExtension; | ||||
| Figure 5: CertTypeExtension Structure. | In order to indicate the support of raw public keys, clients include | |||
| the 'client_certificate_type' and/or the 'server_certificate_type' | ||||
| extensions in an extended client hello message. The hello extension | ||||
| mechanism is described in Section 7.4.1.4 of TLS 1.2 [RFC5246]. | ||||
| No new cipher suites are required to use raw public keys. All | The 'client_certificate_type' sent in the client hello indicates the | |||
| existing cipher suites that support a key exchange method compatible | certificate types the client is able to provide to the server, when | |||
| with the defined extension can be used. | requested using a certificate_request message. | |||
| 4. TLS Handshake Extension | The 'server_certificate_type' in the client hello indicates the types | |||
| of certificates the client is able to process when provided by the | ||||
| server in a subsequent certificate payload. | ||||
| 4.1. Client Hello | The 'client_certificate_type' and 'server_certificate_type' sent in | |||
| the client hello may carry a list of supported certificate types, | ||||
| sorted by client preference. It is a list in the case where the | ||||
| client supports multiple certificate types. | ||||
| In order to indicate the support of out-of-band raw public keys, | The TLS client MUST omit the 'client_certificate_type' extension in | |||
| clients MUST include the 'client_certificate_type' and | the client hello if it does not possess a client certificate or is | |||
| 'server_certificate_type' extensions in an extended client hello | not configured to use one with the given TLS server. The TLS client | |||
| message. The hello extension mechanism is described in TLS 1.2 | MUST omit the 'server_certificate_type' extension in the client hello | |||
| [RFC5246]. | if it is unable to process any certificate types from the server | |||
| (which is a situation that should not occur in normal circumstances). | ||||
| 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. | |||
| 2. The server supports the extension defined in this document and | 2. The server supports the extension defined in this document but it | |||
| does not have a certificate type in common with the client. Then | ||||
| the server terminates the session with a fatal alert of type | ||||
| "unsupported_certificate". | ||||
| 3. The server supports the extensions defined in this document and | ||||
| has at least one certificate type in common with the client. In | has at least one certificate type in common with the client. In | |||
| this case it returns the 'server_certificate_type' and indicates | this case the processing rules described below are followed. | |||
| the selected certificate type value. | ||||
| 3. The server supports the extension defined in this document but | If the client hello indicates support of raw public keys in the | |||
| does not have a certificate type in common with the client. In | 'client_certificate_type' extension and the server chooses to use raw | |||
| this case the server terminate the session with a fatal alert of | public keys then the TLS server MUST place the SubjectPublicKeyInfo | |||
| type "unsupported_certificate". | structure into the Certificate payload. | |||
| 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 message) 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 hello indicates support of raw public keys in the | If the server does not send a certificate_request payload (for | |||
| 'client_certificate_type' extension and the server chooses to use raw | example, because client authentication happens at the application | |||
| public keys then the TLS server MUST place the SubjectPublicKeyInfo | layer or no client authentication is required) or none of the | |||
| structure into the Certificate payload. | certificates supported by the client (as indicated in the | |||
| 'server_certificate_type' in the client hello) match the server- | ||||
| supported certificate types then the 'server_certificate_type' | ||||
| payload in the server hello is omitted. | ||||
| 4.3. Certificate Request | 4.3. Client Authentication | |||
| The semantics of this message remain the same as in the TLS | ||||
| specification. | ||||
| 4.4. Other Handshake Messages | Authentication of the TLS client to the TLS server is supported only | |||
| through authentication of the received client SubjectPublicKeyInfo | ||||
| via an out-of-band method. | ||||
| All the other handshake messages are identical to the TLS | 5. Examples | |||
| specification. | ||||
| 4.5. Client authentication | This section illustrates a number of possible usage scenarios. | |||
| Client authentication by the TLS server is supported only through | 5.1. TLS Server uses Raw Public Key | |||
| authentication of the received client SubjectPublicKeyInfo via an | ||||
| out-of-band method. | ||||
| 5. Examples | This section shows an example where the TLS client indicates 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 | ||||
| process other certificate types sent by the server. It also does not | ||||
| have credentials (at the TLS layer) it could send to the server and | ||||
| therefore omits the 'client_certificate_type' extension. Hence, the | ||||
| client only populates the 'server_certificate_type' extension with | ||||
| the raw public key type, as shown in [1]. | ||||
| Figure 6, Figure 7, and Figure 8 illustrate example exchanges. | When the TLS server receives the client hello it processes the | |||
| extension. Since it has a raw public key it indicates in [2] that it | ||||
| had chosen to place the SubjectPublicKeyInfo structure into the | ||||
| Certificate payload [3]. | ||||
| The first example shows an exchange where the TLS client indicates | The client uses this raw public key in the TLS handshake together | |||
| its ability to receive and validate raw public keys from the server. | with an out-of-band validation technique, such as DANE, to verify it. | |||
| 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 | ||||
| have credentials (at the TLS layer) it could send. The | ||||
| 'client_certificate_type' extension indicates this in [1]. When the | ||||
| TLS server receives the client hello it processes the | ||||
| 'client_certificate_type' extension. Since it also has a raw public | ||||
| key it indicates in [2] that it had chosen to place the | ||||
| SubjectPublicKeyInfo structure into the Certificate payload [3]. The | ||||
| client uses this raw public key in the TLS handshake and an out-of- | ||||
| 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 | 5.2. TLS Client and Server use Raw Public Keys | |||
| raw public keys. This is a use case envisioned for smart object | ||||
| networking. The TLS client in this case is an embedded device that | This section shows an example where the TLS client as well as the TLS | |||
| is configured with a raw public key for use with TLS and is also able | server use raw public keys. This is a use case envisioned for smart | |||
| to process raw public keys sent by the server. Therefore, it | object 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 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. | |||
| skipping to change at page 9, line 47 ¶ | skipping to change at page 10, line 18 ¶ | |||
| 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 | 5.3. Combined Usage of Raw Public Keys and X.509 Certificate | |||
| X.509 usage. The client uses a raw public key for client | ||||
| This section shows an example combining raw public keys and X.509 | ||||
| certificates. 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. | |||
| skipping to change at page 10, line 32 ¶ | skipping to change at page 11, line 4 ¶ | |||
| 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 code size point of | certificate. There are also advantages from a code size point of | |||
| view for parsing and processing these keys. The cryptographic | view for parsing and processing these keys. The cryptographic | |||
| procedures for associating the public key with the possession of a | procedures for associating the public key with the possession of a | |||
| private key 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. Without a secure binding between | key with a specific entity. Without a secure binding between | |||
| identity and key the protocol will be vulnerable to masquerade and | identity and key, the protocol will be vulnerable to masquerade and | |||
| man-in-the-middle attacks. This document assumes that such binding | man-in-the-middle attacks. This document assumes that such binding | |||
| can be made out-of-band and we list a few examples in Section 1. | can be made out-of-band and we list a few examples in Section 1. | |||
| DANE [RFC6698] offers one such approach. In order to address these | DANE [RFC6698] offers one such approach. In order to address these | |||
| vulnerabilities, specifications that make use of the extension MUST | vulnerabilities, specifications that make use of the extension MUST | |||
| specify how the identity and public key are bound. In addition to | specify how the identity and public key are bound. In addition to | |||
| ensuring the binding is done out-of-band an implementation also needs | ensuring the binding is done out-of-band an implementation also needs | |||
| to check the status of that binding. | to check the status of that binding. | |||
| If public keys are obtained using DANE, these public keys are | If public keys are obtained using DANE, these public keys are | |||
| authenticated via DNSSEC. Pre-configured keys is another out of band | authenticated via DNSSEC. Pre-configured keys is another out of | |||
| method for authenticating raw public keys. While pre-configured keys | band method for authenticating raw public keys. While pre- | |||
| are not suitable for a generic Web-based e-commerce environment such | configured keys are not suitable for a generic Web-based | |||
| keys are a reasonable approach for many smart object deployments | e-commerce environment such keys are a reasonable approach for | |||
| where there is a close relationship between the software running on | many smart object deployments where there is a close relationship | |||
| the device and the server-side communication endpoint. Regardless of | between the software running on the device and the server-side | |||
| the chosen mechanism for out-of-band public key validation an | communication endpoint. Regardless of the chosen mechanism for | |||
| assessment of the most suitable approach has to be made prior to the | out-of-band public key validation an assessment of the most | |||
| start of a deployment to ensure the security of the system. | suitable approach has to be made prior to the start of a | |||
| deployment to ensure the security of the system. | ||||
| A downgrading attack is another possibility for an adversary to gain | ||||
| advantages. Thereby, an attacker might try to influence the | ||||
| handshake exchange to make the parties select different certificate | ||||
| types than they would normally choose. | ||||
| For this attack, an attacker must actively change one or more | ||||
| handshake messages. If this occurs, the client and server will | ||||
| compute different values for the handshake message hashes. As a | ||||
| result, the parties will not accept each others' Finished messages. | ||||
| Without the master_secret, the attacker cannot repair the Finished | ||||
| messages, so the attack will be discovered. | ||||
| 7. IANA Considerations | 7. IANA Considerations | |||
| IANA is asked to register a new value in the "TLS Certificate Types" | IANA is asked to register a new value in the "TLS Certificate Types" | |||
| registry of Transport Layer Security (TLS) Extensions | registry of Transport Layer Security (TLS) Extensions | |||
| [TLS-Certificate-Types-Registry], as follows: | [TLS-Certificate-Types-Registry], as follows: | |||
| Value: 2 | Value: 2 | |||
| Description: Raw Public Key | Description: Raw Public Key | |||
| Reference: [[THIS RFC]] | Reference: [[THIS RFC]] | |||
| skipping to change at page 12, line 18 ¶ | skipping to change at page 12, line 40 ¶ | |||
| 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, Peter Sylvester, Hauke Mehrtens, and James Manger. Nikos | Gillmor, Peter Sylvester, Hauke Mehrtens, Alexey Melnikov, and James | |||
| Mavrogiannopoulos contributed the design for re-using the certificate | Manger. Nikos Mavrogiannopoulos contributed the design for re-using | |||
| type registry. Barry Leiba contributed guidance for the IANA | the certificate type registry. Barry Leiba contributed guidance for | |||
| consideration text. Stefan Jucker, Kovatsch Matthias, and Klaus | the IANA consideration text. Stefan Jucker, Kovatsch Matthias, and | |||
| Hartke provided implementation feedback regarding the | Klaus Hartke provided implementation feedback regarding the | |||
| SubjectPublicKeyInfo structure. | SubjectPublicKeyInfo structure. | |||
| Christer Holmberg provided the General Area (Gen-Art) review, Yaron | ||||
| Sheffer provided the Security Directorate (SecDir) review, Bert | ||||
| Greevenbosch provided the Applications Area Directorate review, and | ||||
| Linda Dunbar provided the Operations Directorate review. | ||||
| We would like to thank our TLS working group chairs, Eric Rescorla | We would like to thank our TLS working group chairs, Eric Rescorla | |||
| and Joe Salowey, for their guidance and support. Finally, we would | and Joe Salowey, for their guidance and support. Finally, we would | |||
| like to thank Sean Turner, who is the responsible security area | like to thank Sean Turner, who is the responsible security area | |||
| director for this work for his review comments and suggestions. | 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., | ||||
| Housley, R., and W. Polk, "Internet X.509 Public Key | ||||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (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 | [RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and | |||
| Identifiers for the Internet X.509 Public Key | Identifiers for the Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 3279, April 2002. | (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. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | ||||
| Housley, R., and W. Polk, "Internet X.509 Public Key | ||||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (CRL) Profile", RFC 5280, May 2008. | ||||
| [RFC5480] Turner, S., Brown, D., Yiu, K., Housley, R., and T. Polk, | [RFC5480] Turner, S., Brown, D., Yiu, K., Housley, R., and T. Polk, | |||
| "Elliptic Curve Cryptography Subject Public Key | "Elliptic Curve Cryptography Subject Public Key | |||
| Information", RFC 5480, March 2009. | 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/tls-extensiontype-values#tls- | /www.iana.org/assignments/tls-extensiontype-values#tls- | |||
| extensiontype-values-2>. | extensiontype-values-2>. | |||
| [X.690] , "Information technology - ASN.1 encoding rules: > | [X.690] ITU, "ITU-T Recommendation X.690 (2002) | ISO/IEC | |||
| Specification of Basic Encoding Rules (BER), Canonical > | 8825-1:2002, Information technology - ASN.1 encoding | |||
| Encoding Rules (CER) and Distinguished Encoding Rules > | rules: Specification of Basic Encoding Rules (BER), | |||
| (DER).", RFC 5280, 2002. | Canonical Encoding Rules (CER) and Distinguished Encoding | |||
| Rules (DER)", 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/ | |||
| skipping to change at page 13, line 35 ¶ | skipping to change at page 14, line 25 ¶ | |||
| -Marlinspike-Defeating-SSL.pdf>. | -Marlinspike-Defeating-SSL.pdf>. | |||
| [I-D.ietf-core-coap] | [I-D.ietf-core-coap] | |||
| Shelby, Z., Hartke, K., and C. Bormann, "Constrained | Shelby, Z., Hartke, K., and C. Bormann, "Constrained | |||
| Application Protocol (CoAP)", draft-ietf-core-coap-18 | Application Protocol (CoAP)", draft-ietf-core-coap-18 | |||
| (work in progress), June 2013. | (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", draft-ietf-tls- | (TLS) Cached Information Extension", draft-ietf-tls- | |||
| cached-info-14 (work in progress), March 2013. | cached-info-15 (work in progress), October 2013. | |||
| [LDAP] Sermersheim, J., "Lightweight Directory Access Protocol | [RFC4511] Sermersheim, J., "Lightweight Directory Access Protocol | |||
| (LDAP): The Protocol", RFC 4511, June 2006. | (LDAP): The Protocol", RFC 4511, June 2006. | |||
| [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 | The following example hex sequence describes a SubjectPublicKeyInfo | |||
| SubjectPublicKeyInfo structure inside the certificate payload: | 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 | |||
| ---+------+-----+-----+-----+-----+-----+-----+-----+-----+----- | ---+------+-----+-----+-----+-----+-----+-----+-----+-----+----- | |||
| 1 | 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, | 1 | 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, | |||
| 2 | 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, | 2 | 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, | |||
| 3 | 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcd, | 3 | 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcd, | |||
| 4 | 0xfd, 0x89, 0x48, 0xbe, 0x36, 0xb9, 0x95, 0x76, 0xd4, 0x13, | 4 | 0xfd, 0x89, 0x48, 0xbe, 0x36, 0xb9, 0x95, 0x76, 0xd4, 0x13, | |||
| 5 | 0x30, 0x0e, 0xbf, 0xb2, 0xed, 0x67, 0x0a, 0xc0, 0x16, 0x3f, | 5 | 0x30, 0x0e, 0xbf, 0xb2, 0xed, 0x67, 0x0a, 0xc0, 0x16, 0x3f, | |||
| 6 | 0x51, 0x09, 0x9d, 0x29, 0x2f, 0xb2, 0x6d, 0x3f, 0x3e, 0x6c, | 6 | 0x51, 0x09, 0x9d, 0x29, 0x2f, 0xb2, 0x6d, 0x3f, 0x3e, 0x6c, | |||
| 7 | 0x2f, 0x90, 0x80, 0xa1, 0x71, 0xdf, 0xbe, 0x38, 0xc5, 0xcb, | 7 | 0x2f, 0x90, 0x80, 0xa1, 0x71, 0xdf, 0xbe, 0x38, 0xc5, 0xcb, | |||
| skipping to change at page 14, line 23 ¶ | skipping to change at page 15, line 13 ¶ | |||
| 11 | 0xa2, 0x84, 0xf8, 0x65, 0xc7, 0xce, 0x2d, 0x96, 0x17, 0xaa, | 11 | 0xa2, 0x84, 0xf8, 0x65, 0xc7, 0xce, 0x2d, 0x96, 0x17, 0xaa, | |||
| 12 | 0x91, 0xf8, 0x61, 0x04, 0x50, 0x70, 0xeb, 0xb4, 0x43, 0xb7, | 12 | 0x91, 0xf8, 0x61, 0x04, 0x50, 0x70, 0xeb, 0xb4, 0x43, 0xb7, | |||
| 13 | 0xdc, 0x9a, 0xcc, 0x31, 0x01, 0x14, 0xd4, 0xcd, 0xcc, 0xc2, | 13 | 0xdc, 0x9a, 0xcc, 0x31, 0x01, 0x14, 0xd4, 0xcd, 0xcc, 0xc2, | |||
| 14 | 0x37, 0x6d, 0x69, 0x82, 0xd6, 0xc6, 0xc4, 0xbe, 0xf2, 0x34, | 14 | 0x37, 0x6d, 0x69, 0x82, 0xd6, 0xc6, 0xc4, 0xbe, 0xf2, 0x34, | |||
| 15 | 0xa5, 0xc9, 0xa6, 0x19, 0x53, 0x32, 0x7a, 0x86, 0x0e, 0x91, | 15 | 0xa5, 0xc9, 0xa6, 0x19, 0x53, 0x32, 0x7a, 0x86, 0x0e, 0x91, | |||
| 16 | 0x82, 0x0f, 0xa1, 0x42, 0x54, 0xaa, 0x01, 0x02, 0x03, 0x01, | 16 | 0x82, 0x0f, 0xa1, 0x42, 0x54, 0xaa, 0x01, 0x02, 0x03, 0x01, | |||
| 17 | 0x00, 0x01 | 17 | 0x00, 0x01 | |||
| Figure 9: Example SubjectPublicKeyInfo Structure Byte Sequence. | Figure 9: Example SubjectPublicKeyInfo Structure Byte Sequence. | |||
| The decoded byte-sequence shown in Figure 9 (for example using | We used Peter Gutmann's ASN.1 decoder [ASN.1-Dump] to turn the above- | |||
| Peter's ASN.1 decoder [ASN.1-Dump]) illustrates the structure, as | shown byte-sequence into an ASN.1 structure, as shown in of the | |||
| shown in Figure 10. | Figure 10. | |||
| Offset Length Description | Offset Length Description | |||
| ------------------------------------------------------------------- | ------------------------------------------------------------------- | |||
| 0 3+159: SEQUENCE { | 0 3+159: SEQUENCE { | |||
| 3 2+13: SEQUENCE { | 3 2+13: SEQUENCE { | |||
| 5 2+9: OBJECT IDENTIFIER Value (1 2 840 113549 1 1 1) | 5 2+9: OBJECT IDENTIFIER Value (1 2 840 113549 1 1 1) | |||
| : PKCS #1, rsaEncryption | : PKCS #1, rsaEncryption | |||
| 16 2+0: NULL | 16 2+0: NULL | |||
| : } | : } | |||
| 18 3+141: BIT STRING, encapsulates { | 18 3+141: BIT STRING, encapsulates { | |||
| skipping to change at page 15, line 4 ¶ | skipping to change at page 15, line 36 ¶ | |||
| 22 3+137: SEQUENCE { | 22 3+137: SEQUENCE { | |||
| 25 3+129: INTEGER Value (1024 bit) | 25 3+129: INTEGER Value (1024 bit) | |||
| 157 2+3: INTEGER Value (65537) | 157 2+3: INTEGER Value (65537) | |||
| : } | : } | |||
| : } | : } | |||
| : } | : } | |||
| Figure 10: Decoding of Example SubjectPublicKeyInfo Structure. | Figure 10: Decoding of Example SubjectPublicKeyInfo Structure. | |||
| Authors' Addresses | Authors' Addresses | |||
| Paul Wouters (editor) | Paul Wouters (editor) | |||
| Red Hat | Red Hat | |||
| Email: paul@nohats.ca | Email: paul@nohats.ca | |||
| Hannes Tschofenig (editor) | Hannes Tschofenig (editor) | |||
| Nokia Siemens Networks | Nokia Solutions and Networks | |||
| Linnoitustie 6 | Linnoitustie 6 | |||
| Espoo 02600 | Espoo 02600 | |||
| Finland | Finland | |||
| Phone: +358 (50) 4871445 | Phone: +358 (50) 4871445 | |||
| Email: Hannes.Tschofenig@gmx.net | Email: Hannes.Tschofenig@gmx.net | |||
| URI: http://www.tschofenig.priv.at | URI: http://www.tschofenig.priv.at | |||
| John Gilmore | John Gilmore | |||
| PO Box 170608 | PO Box 170608 | |||
| End of changes. 63 change blocks. | ||||
| 201 lines changed or deleted | 247 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/ | ||||