rfc9360.original | rfc9360.txt | |||
---|---|---|---|---|
Network Working Group J. Schaad | Internet Engineering Task Force (IETF) J. Schaad | |||
Internet-Draft August Cellars | Request for Comments: 9360 August Cellars | |||
Intended status: Standards Track 25 May 2022 | Category: Standards Track February 2023 | |||
Expires: 26 November 2022 | ISSN: 2070-1721 | |||
CBOR Object Signing and Encryption (COSE): Header parameters for | CBOR Object Signing and Encryption (COSE): Header Parameters for | |||
carrying and referencing X.509 certificates | Carrying and Referencing X.509 Certificates | |||
draft-ietf-cose-x509-09 | ||||
Abstract | Abstract | |||
The CBOR Signing And Encrypted Message (COSE) structure uses | The CBOR Object Signing and Encryption (COSE) message structure uses | |||
references to keys in general. For some algorithms, additional | references to keys in general. For some algorithms, additional | |||
properties are defined which carry parameters relating to keys as | properties are defined that carry parameters relating to keys as | |||
needed. The COSE Key structure is used for transporting keys outside | needed. The COSE Key structure is used for transporting keys outside | |||
of COSE messages. This document extends the way that keys can be | of COSE messages. This document extends the way that keys can be | |||
identified and transported by providing attributes that refer to or | identified and transported by providing attributes that refer to or | |||
contain X.509 certificates. | contain X.509 certificates. | |||
Contributing to this document | ||||
This note is to be removed before publishing as an RFC. | ||||
The source for this draft is being maintained in GitHub. Suggested | ||||
changes should be submitted as pull requests at https://github.com/ | ||||
cose-wg/X509. Instructions are on that page as well. Editorial | ||||
changes can be managed in GitHub, but any substantial issues need to | ||||
be discussed on the COSE mailing list. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 26 November 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9360. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Requirements Terminology . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Terminology | |||
2. X.509 COSE Header Parameters . . . . . . . . . . . . . . . . 3 | 2. X.509 COSE Header Parameters | |||
3. X.509 certificates and static-static ECDH . . . . . . . . . . 8 | 3. X.509 Certificates and Static-Static ECDH | |||
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 4. IANA Considerations | |||
4.1. COSE Header Parameter Registry . . . . . . . . . . . . . 9 | 4.1. COSE Header Parameters Registry | |||
4.2. COSE Header Algorithm Parameter Registry . . . . . . . . 9 | 4.2. COSE Header Algorithm Parameters Registry | |||
4.3. Media Type application/cose-x509 . . . . . . . . . . . . 10 | 4.3. Media Type application/cose-x509 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 5. Security Considerations | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 6. References | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 6.1. Normative References | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 13 | 6.2. Informative References | |||
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 14 | Acknowledgements | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14 | Author's Address | |||
1. Introduction | 1. Introduction | |||
In the process of writing [RFC8152], the working group discussed | In the process of writing [RFC8152] and [RFC9052], the CBOR Object | |||
X.509 certificates [RFC5280] and decided that no use cases were | Signing and Encryption (COSE) Working Group discussed X.509 | |||
presented that showed a need to support certificates. Since that | certificates [RFC5280] and decided that no use cases were presented | |||
time, a number of cases have been defined in which X.509 certificate | that showed a need to support certificates. Since that time, a | |||
support is necessary, and by implication, applications will need a | number of cases have been defined in which X.509 certificate support | |||
documented and consistent way to handle such certificates. This | is necessary, and by implication, applications will need a documented | |||
document defines a set of attributes that will allow applications to | and consistent way to handle such certificates. This document | |||
transport and refer to X.509 certificates in a consistent manner. | defines a set of attributes that will allow applications to transport | |||
and refer to X.509 certificates in a consistent manner. | ||||
In some of these cases, a constrained device is being deployed in the | In some of these cases, a constrained device is being deployed in the | |||
context of an existing X.509 PKI: for example, | context of an existing X.509 PKI: for example, [Constrained-BRSKI] | |||
[I-D.ietf-anima-constrained-voucher] describes a device enrollment | describes a device enrollment solution that relies on the presence of | |||
solution that relies on the presence of a factory-installed | a factory-installed certificate on the device. [EDHOC] was also | |||
certificate on the device. The [I-D.ietf-lake-edhoc] draft was also | written with the idea that long-term certificates could be used to | |||
written with the idea that long term certificates could be used to | provide for authentication of devices and establish session keys. | |||
provide for authentication of devices, and uses them to establish | Another possible scenario is the use of COSE as the basis for a | |||
session keys. Another possible scenario is the use of COSE as the | secure messaging application. This scenario assumes the presence of | |||
basis for a secure messaging application. This scenario assumes the | long-term keys and a central authentication authority. Basing such | |||
presence of long term keys and a central authentication authority. | an application on public key certificates allows it to make use of | |||
Basing such an application on public key certificates allows it to | well-established key management disciplines. | |||
make use of well established key management disciplines. | ||||
1.1. Requirements Terminology | 1.1. Requirements 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", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. X.509 COSE Header Parameters | 2. X.509 COSE Header Parameters | |||
The use of X.509 certificates allows for an existing trust | The use of X.509 certificates allows for an existing trust | |||
infrastructure to be used with COSE. This includes the full suite of | infrastructure to be used with COSE. This includes the full suite of | |||
enrollment protocols, trust anchors, trust chaining and revocation | enrollment protocols, trust anchors, trust chaining, and revocation | |||
checking that have been defined over time by the IETF and other | checking that have been defined over time by the IETF and other | |||
organizations. The key structures that have been defined in COSE | organizations. The Concise Binary Object Representation (CBOR) key | |||
currently do not support all of these properties, although some may | structures [RFC8949] that have been defined in COSE currently do not | |||
be found in COSE Web Tokens (CWT) [RFC8392]. | support all of these properties, although some may be found in CBOR | |||
Web Tokens (CWTs) [RFC8392]. | ||||
It is not necessarily expected that constrained devices themselves | It is not necessarily expected that constrained devices themselves | |||
will evaluate and process X.509 certificates: it is perfectly | will evaluate and process X.509 certificates: it is perfectly | |||
reasonable for a constrained device to be provisioned with a | reasonable for a constrained device to be provisioned with a | |||
certificate that it subsequently provides to a relying party - along | certificate that it subsequently provides to a relying party -- along | |||
with a signature or encrypted message - on the assumption that the | with a signature or encrypted message -- on the assumption that the | |||
relying party is not a constrained device, and is capable of | relying party is not a constrained device and is capable of | |||
performing the required certificate evaluation and processing. It is | performing the required certificate evaluation and processing. It is | |||
also reasonable that a constrained device would have the hash of a | also reasonable that a constrained device would have the hash of a | |||
certificate associated with a public key and be configured to use a | certificate associated with a public key and be configured to use a | |||
public key for that thumbprint, but without performing the | public key for that thumbprint, but without performing the | |||
certificate evaluation or even having the entire certificate. In any | certificate evaluation or even having the entire certificate. In any | |||
case, there still needs to be an entity that is responsible for | case, there still needs to be an entity that is responsible for | |||
handling the possible certificate revocation. | handling the possible certificate revocation. | |||
Parties that intend to rely on the assertions made by a certificate | Parties that intend to rely on the assertions made by a certificate | |||
obtained from any of these methods still need to validate it. This | obtained from any of these methods still need to validate it. This | |||
validation can be done according to the PKIX rules in [RFC5280] or by | validation can be done according to the PKIX rules specified in | |||
using a different trust structure, such as a trusted certificate | [RFC5280] or by using a different trust structure, such as a trusted | |||
distributor for self-signed certificates. The PKIX validation | certificate distributor for self-signed certificates. The PKIX | |||
includes matching against the trust anchors configured for the | validation includes matching against the trust anchors configured for | |||
application. These rules apply when the validation succeeds in a | the application. These rules apply when the validation succeeds in a | |||
single step as well as when certificate chains need to be built. If | single step as well as when certificate chains need to be built. If | |||
the application cannot establish trust in the certificate, the public | the application cannot establish trust in the certificate, the public | |||
key contained in the certificate cannot be used for cryptographic | key contained in the certificate cannot be used for cryptographic | |||
operations. | operations. | |||
The header parameters defined in this document are: | The header parameters defined in this document are as follows: | |||
x5bag: This header parameter contains a bag of X.509 certificates. | x5bag: This header parameter contains a bag of X.509 certificates. | |||
The set of certificates in this header parameter is unordered and | The set of certificates in this header parameter is unordered and | |||
may contain self-signed certificates. Note that there could be | may contain self-signed certificates. Note that there could be | |||
duplicate certificates. The certificate bag can contain | duplicate certificates. The certificate bag can contain | |||
certificates which are completely extraneous to the message. (An | certificates that are completely extraneous to the message. (An | |||
example of this would be where a signed message is being used to | example of this would be where a signed message is being used to | |||
transport a certificate containing a key agreement key.) As the | transport a certificate containing a key agreement key.) As the | |||
certificates are unordered, the party evaluating the signature | certificates are unordered, the party evaluating the signature | |||
will need to be capable of building the certificate path as | will need to be capable of building the certificate path as | |||
necessary. That party will also have to take into account that | necessary. That party will also have to take into account that | |||
the bag may not contain the full set of certificates needed to | the bag may not contain the full set of certificates needed to | |||
build any particular chain. | build any particular chain. | |||
The trust mechanism MUST process any certificates in this | The trust mechanism MUST process any certificates in this | |||
parameter as untrusted input. The presence of a self-signed | parameter as untrusted input. The presence of a self-signed | |||
certificate in the parameter MUST NOT cause the update of the set | certificate in the parameter MUST NOT cause the update of the set | |||
of trust anchors without some out-of-band confirmation. As the | of trust anchors without some out-of-band confirmation. As the | |||
contents of this header parameter are untrusted input, the header | contents of this header parameter are untrusted input, the header | |||
parameter can be in either the protected or unprotected header | parameter can be in either the protected or unprotected header | |||
bucket. Sending the header parameter in the unprotected header | bucket. Sending the header parameter in the unprotected header | |||
bucket allows an intermediary to remove or add certificates. | bucket allows an intermediary to remove or add certificates. | |||
The end-entity certificate MUST be integrity protected by COSE. | The end-entity certificate MUST be integrity protected by COSE. | |||
This can e.g. be done by sending the header parameter in the | This can, for example, be done by sending the header parameter in | |||
protected header, sending a x5bag in the unprotected header | the protected header, sending an 'x5bag' in the unprotected header | |||
combined with a x5t in the protected header, or including the end- | combined with an 'x5t' in the protected header, or including the | |||
entity certificate in the external_aad. | end-entity certificate in the external_aad. | |||
This header parameter allows for a single X.509 certificate or a | This header parameter allows for a single X.509 certificate or a | |||
bag of X.509 certificates to be carried in the message. | bag of X.509 certificates to be carried in the message. | |||
* If a single certificate is conveyed, it is placed in a CBOR | * If a single certificate is conveyed, it is placed in a CBOR | |||
byte string. | byte string. | |||
* If multiple certificates are conveyed, a CBOR array of byte | * If multiple certificates are conveyed, a CBOR array of byte | |||
strings is used, with each certificate being in its own byte | strings is used, with each certificate being in its own byte | |||
string. | string. | |||
x5chain: This header parameter contains an ordered array of X.509 | x5chain: This header parameter contains an ordered array of X.509 | |||
certificates. The certificates are to be ordered starting with | certificates. The certificates are to be ordered starting with | |||
the certificate containing the end-entity key followed by the | the certificate containing the end-entity key followed by the | |||
certificate which signed it and so on. There is no requirement | certificate that signed it, and so on. There is no requirement | |||
for the entire chain to be present in the element if there is | for the entire chain to be present in the element if there is | |||
reason to believe that the relying party already has, or can | reason to believe that the relying party already has, or can | |||
locate the missing certificates. This means that the relying | locate, the missing certificates. This means that the relying | |||
party is still required to do path building, but that a candidate | party is still required to do path building but that a candidate | |||
path is proposed in this header parameter. | path is proposed in this header parameter. | |||
The trust mechanism MUST process any certificates in this | The trust mechanism MUST process any certificates in this | |||
parameter as untrusted input. The presence of a self-signed | parameter as untrusted input. The presence of a self-signed | |||
certificate in the parameter MUST NOT cause the update of the set | certificate in the parameter MUST NOT cause the update of the set | |||
of trust anchors without some out-of-band confirmation. As the | of trust anchors without some out-of-band confirmation. As the | |||
contents of this header parameter are untrusted input, the header | contents of this header parameter are untrusted input, the header | |||
parameter can be in either the protected or unprotected header | parameter can be in either the protected or unprotected header | |||
bucket. Sending the header parameter in the unprotected header | bucket. Sending the header parameter in the unprotected header | |||
bucket allows an intermediary to remove or add certificates. | bucket allows an intermediary to remove or add certificates. | |||
The end-entity certificate MUST be integrity protected by COSE. | The end-entity certificate MUST be integrity protected by COSE. | |||
This can e.g. be done by sending the header parameter in the | This can, for example, be done by sending the header parameter in | |||
protected header, sending a x5chain in the unprotected header | the protected header, sending an 'x5chain' in the unprotected | |||
combined with a x5t in the protected header, or including the end- | header combined with an 'x5t' in the protected header, or | |||
entity certificate in the external_aad as. | including the end-entity certificate in the external_aad. | |||
This header parameter allows for a single X.509 certificate or a | This header parameter allows for a single X.509 certificate or a | |||
chain of X.509 certificates to be carried in the message. | chain of X.509 certificates to be carried in the message. | |||
* If a single certificate is conveyed, it is placed in a CBOR | * If a single certificate is conveyed, it is placed in a CBOR | |||
byte string. | byte string. | |||
* If multiple certificates are conveyed, a CBOR array of byte | * If multiple certificates are conveyed, a CBOR array of byte | |||
strings is used, with each certificate being in its own byte | strings is used, with each certificate being in its own byte | |||
string. | string. | |||
x5t: This header parameter identifies the end-entity X.509 | x5t: This header parameter identifies the end-entity X.509 | |||
certificate by a hash value (a thumbprint). The 'x5t' header | certificate by a hash value (a thumbprint). The 'x5t' header | |||
parameter is represented as an array of two elements. The first | parameter is represented as an array of two elements. The first | |||
element is an algorithm identifier which is an integer or a string | element is an algorithm identifier that is an integer or a string | |||
containing the hash algorithm identifier corresponding to the | containing the hash algorithm identifier corresponding to the | |||
Value column (integer or text string) of the algorithm registered | Value column (integer or text string) of the algorithm registered | |||
in the "COSE Algorithms" registry | in the "COSE Algorithms" registry (see | |||
https://www.iana.org/assignments/cose/cose.xhtml#algorithms. The | <https://www.iana.org/assignments/cose/>). The second element is | |||
second element is a binary string containing the hash value | a binary string containing the hash value computed over the DER- | |||
computed over the DER encoded certificate. | encoded certificate. | |||
As this header parameter does not provide any trust, the header | As this header parameter does not provide any trust, the header | |||
parameter can be in either a protected or unprotected header | parameter can be in either a protected or unprotected header | |||
bucket. | bucket. | |||
The identification of the end-entity certificate MUST be integrity | The identification of the end-entity certificate MUST be integrity | |||
protected by COSE. This can be done by sending the header | protected by COSE. This can be done by sending the header | |||
parameter in the protected header or including the end-entity | parameter in the protected header or including the end-entity | |||
certificate in the external_aad. | certificate in the external_aad. | |||
The 'x5t' header parameter can be used alone or together with the | The 'x5t' header parameter can be used alone or together with the | |||
'x5bag', 'x5chain', or 'x5u' header parameters to provide | 'x5bag', 'x5chain', or 'x5u' header parameters to provide | |||
integrity protection of the end-entity certificate. | integrity protection of the end-entity certificate. | |||
For interoperability, applications which use this header parameter | For interoperability, applications that use this header parameter | |||
MUST support the hash algorithm 'SHA-256', but can use other hash | MUST support the hash algorithm 'SHA-256' but can use other hash | |||
algorithms. This requirement allows for different implementations | algorithms. This requirement allows for different implementations | |||
to be configured to use an interoperable algorithm, but does not | to be configured to use an interoperable algorithm, but does not | |||
preclude the use (by prior agreement) of other algorithms. | preclude the use (by prior agreement) of other algorithms. | |||
RFC Editor please remove the following two paragraphs: | ||||
During AD review, a question was raised about how effective the | ||||
previous statement is in terms of dealing with a MTI algorithm. | ||||
There needs to be some type of arrangement between the parties to | ||||
agree that a specific hash algorithm is going to be used in | ||||
computing the thumbprint. Making it a MUST use would make that | ||||
true, but it then means that agility is going to be very | ||||
difficult. | ||||
The worry is that while SHA-256 may be mandatory, if a sender | ||||
supports SHA-256 but only sends SHA-512 then the recipient which | ||||
only does SHA-256 would not be able to use the thumbprint. In | ||||
that case both applications would conform to the specification, | ||||
but still not be able to inter-operate. | ||||
x5u: This header parameter provides the ability to identify an X.509 | x5u: This header parameter provides the ability to identify an X.509 | |||
certificate by a URI [RFC3986]. It contains a CBOR text string. | certificate by a URI [RFC3986]. It contains a CBOR text string. | |||
The referenced resource can be any of the following media types: | The referenced resource can be any of the following media types: | |||
* application/pkix-cert [RFC2585] | * application/pkix-cert [RFC2585] | |||
* application/pkcs7-mime; smime-type="certs-only" [RFC8551] | * application/pkcs7-mime; smime-type="certs-only" [RFC8551] | |||
* application/cose-x509 Section 4.3 | * application/cose-x509 (Section 4.3) | |||
* application/cose-x509; usage=chain Section 4.3 | * application/cose-x509; usage=chain (Section 4.3) | |||
When the application/cose-x509 media type is used, the data is a | When the application/cose-x509 media type is used, the data is a | |||
CBOR sequence of single-entry COSE_X509 structures (encoding | CBOR sequence of single-entry COSE_X509 structures (encoding | |||
"bstr"). If the parameter "usage" is set to "chain", this | "bstr"). If the parameter "usage" is set to "chain", this | |||
sequence indicates a certificate chain. | sequence indicates a certificate chain. | |||
The end-entity certificate MUST be integrity protected by COSE. | The end-entity certificate MUST be integrity protected by COSE. | |||
This can e.g. be done by sending the x5u in the unprotected or | This can, for example, be done by sending the 'x5u' in the | |||
protected header combined with a x5t in the protected header, or | unprotected or protected header combined with an 'x5t' in the | |||
including the end-entity certificate in the external_aad. As the | protected header, or including the end-entity certificate in the | |||
end-entity certificate is integrity protected by COSE, the URI | external_aad. As the end-entity certificate is integrity | |||
does not need to provide any protection. | protected by COSE, the URI does not need to provide any | |||
protection. | ||||
If a retrieved certificate does not chain to an existing trust | If a retrieved certificate does not chain to an existing trust | |||
anchor, that certificate MUST NOT be trusted unless the URI | anchor, that certificate MUST NOT be trusted unless the URI | |||
provided integrity protection and server authentication and the | provides integrity protection and server authentication and the | |||
server is configured as trusted to provide new trust anchors or if | server is configured as trusted to provide new trust anchors or if | |||
an out-of-band confirmation can be received for trusting the | an out-of-band confirmation can be received for trusting the | |||
retrieved certificate. In case an HTTP or CoAP GET request is | retrieved certificate. If an HTTP or Constrained Application | |||
used to retrieve a certificate, TLS [RFC8446], DTLS | Protocol (CoAP) GET request is used to retrieve a certificate, TLS | |||
[I-D.ietf-tls-dtls13] or OSCORE [RFC8613] SHOULD be used. | [RFC8446], DTLS [RFC9147], or Object Security for Constrained | |||
RESTful Environments (OSCORE) [RFC8613] SHOULD be used. | ||||
The header parameters are used in the following locations: | The header parameters are used in the following locations: | |||
* COSE_Signature and COSE_Sign1 objects: in these objects they | COSE_Signature and COSE_Sign1 objects: In these objects, the | |||
identify the certificate to be used for validating the signature. | parameters identify the certificate to be used for validating the | |||
signature. | ||||
* COSE_recipient objects: in this location they identify the | COSE_recipient objects: In this location, the parameters identify | |||
certificate for the recipient of the message. | the certificate for the recipient of the message. | |||
The labels assigned to each header parameter can be found in the | The labels assigned to each header parameter can be found in Table 1. | |||
following table. | ||||
+=========+=======+===============+=====================+ | +=========+=======+===============+=====================+ | |||
| Name | Label | Value Type | Description | | | Name | Label | Value Type | Description | | |||
+=========+=======+===============+=====================+ | +=========+=======+===============+=====================+ | |||
| x5bag | 32 | COSE_X509 | An unordered bag of | | | x5bag | 32 | COSE_X509 | An unordered bag of | | |||
| | | | X.509 certificates | | | | | | X.509 certificates | | |||
+---------+-------+---------------+---------------------+ | +---------+-------+---------------+---------------------+ | |||
| x5chain | 33 | COSE_X509 | An ordered chain of | | | x5chain | 33 | COSE_X509 | An ordered chain of | | |||
| | | | X.509 certificates | | | | | | X.509 certificates | | |||
+---------+-------+---------------+---------------------+ | +---------+-------+---------------+---------------------+ | |||
| x5t | 34 | COSE_CertHash | Hash of an X.509 | | | x5t | 34 | COSE_CertHash | Hash of an X.509 | | |||
| | | | certificate | | | | | | certificate | | |||
+---------+-------+---------------+---------------------+ | +---------+-------+---------------+---------------------+ | |||
| x5u | 35 | uri | URI pointing to an | | | x5u | 35 | uri | URI pointing to an | | |||
| | | | X.509 certificate | | | | | | X.509 certificate | | |||
+---------+-------+---------------+---------------------+ | +---------+-------+---------------+---------------------+ | |||
Table 1: X.509 COSE Header Parameters | Table 1: X.509 COSE Header Parameters | |||
Below is an equivalent CDDL [RFC8610] description of the text above. | Below is an equivalent Concise Data Definition Language (CDDL) | |||
description (see [RFC8610]) of the text above. | ||||
COSE_X509 = bstr / [ 2*certs: bstr ] | COSE_X509 = bstr / [ 2*certs: bstr ] | |||
COSE_CertHash = [ hashAlg: (int / tstr), hashValue: bstr ] | COSE_CertHash = [ hashAlg: (int / tstr), hashValue: bstr ] | |||
The content of the bstr are the bytes of a DER encoded certificate. | The contents of "bstr" are the bytes of a DER-encoded certificate. | |||
3. X.509 certificates and static-static ECDH | 3. X.509 Certificates and Static-Static ECDH | |||
The header parameters defined in the previous section are used to | The header parameters defined in the previous section are used to | |||
identify the recipient certificates for the ECDH key agreement | identify the recipient certificates for the Elliptic Curve Diffie- | |||
algorithms. In this section we define the algorithm specific | Hellman (ECDH) key agreement algorithms. In this section, we define | |||
parameters that are used for identifying or transporting the sender's | the algorithm-specific parameters that are used for identifying or | |||
key for static-static key agreement algorithms. | transporting the sender's key for static-static key agreement | |||
algorithms. | ||||
These attributes are defined analogously to those in the previous | These attributes are defined analogously to those in the previous | |||
section. There is no definition for the certificate bag, as the same | section. There is no definition for the certificate bag, as the same | |||
attribute would be used for both the sender and recipient | attribute would be used for both the sender and recipient | |||
certificates. | certificates. | |||
x5chain-sender: This header parameter contains the chain of | x5chain-sender: | |||
certificates starting with the sender's key exchange certificate. | This header parameter contains the chain of certificates starting | |||
The structure is the same as 'x5chain'. | with the sender's key exchange certificate. The structure is the | |||
same as 'x5chain'. | ||||
x5t-sender: This header parameter contains the hash value for the | x5t-sender: | |||
sender's key exchange certificate. The structure is the same as | This header parameter contains the hash value for the sender's key | |||
'x5t'. | exchange certificate. The structure is the same as 'x5t'. | |||
x5u-sender: This header parameter contains a URI for the sender's | x5u-sender: | |||
key exchange certificate. The structure and processing are the | This header parameter contains a URI for the sender's key exchange | |||
same as 'x5u'. | certificate. The structure and processing are the same as 'x5u'. | |||
+===============+=====+=============+===================+===========+ | +==============+=====+=============+===================+===========+ | |||
|Name |Label|Type | Algorithm |Description| | |Name |Label|Type | Algorithm |Description| | |||
+===============+=====+=============+===================+===========+ | +==============+=====+=============+===================+===========+ | |||
|x5t-sender |TBD |COSE_CertHash| ECDH-SS+HKDF-256, |Thumbprint | | |x5t-sender |-27 |COSE_CertHash| ECDH-SS+HKDF-256, |Thumbprint | | |||
| | | | ECDH-SS+HKDF-512, |for the | | | | | | ECDH-SS+HKDF-512, |for the | | |||
| | | | ECDH-SS+A128KW, |sender's | | | | | | ECDH-SS+A128KW, |sender's | | |||
| | | | ECDH-SS+A192KW, |X.509 | | | | | | ECDH-SS+A192KW, |X.509 | | |||
| | | | ECDH-SS+A256KW |certificate| | | | | | ECDH-SS+A256KW |certificate| | |||
+---------------+-----+-------------+-------------------+-----------+ | +--------------+-----+-------------+-------------------+-----------+ | |||
|x5u-sender |TBD |uri | ECDH-SS+HKDF-256, |URI for the| | |x5u-sender |-28 |uri | ECDH-SS+HKDF-256, |URI for the| | |||
| | | | ECDH-SS+HKDF-512, |sender's | | | | | | ECDH-SS+HKDF-512, |sender's | | |||
| | | | ECDH-SS+A128KW, |X.509 | | | | | | ECDH-SS+A128KW, |X.509 | | |||
| | | | ECDH-SS+A192KW, |certificate| | | | | | ECDH-SS+A192KW, |certificate| | |||
| | | | ECDH-SS+A256KW | | | | | | | ECDH-SS+A256KW | | | |||
+---------------+-----+-------------+-------------------+-----------+ | +--------------+-----+-------------+-------------------+-----------+ | |||
|x5chain-sender |TBD |COSE_X509 | ECDH-SS+HKDF-256, |static key | | |x5chain-sender|-29 |COSE_X509 | ECDH-SS+HKDF-256, |static key | | |||
| | | | ECDH-SS+HKDF-512, |X.509 | | | | | | ECDH-SS+HKDF-512, |X.509 | | |||
| | | | ECDH-SS+A128KW, |certificate| | | | | | ECDH-SS+A128KW, |certificate| | |||
| | | | ECDH-SS+A192KW, |chain | | | | | | ECDH-SS+A192KW, |chain | | |||
| | | | ECDH-SS+A256KW | | | | | | | ECDH-SS+A256KW | | | |||
+---------------+-----+-------------+-------------------+-----------+ | +--------------+-----+-------------+-------------------+-----------+ | |||
Table 2: Static ECDH Algorithm Values | Table 2: Static ECDH Algorithm Values | |||
4. IANA Considerations | 4. IANA Considerations | |||
4.1. COSE Header Parameter Registry | 4.1. COSE Header Parameters Registry | |||
IANA is requested to register the new COSE Header parameters in | IANA has registered the new COSE Header parameters in Table 1 in the | |||
Table 1 in the "COSE Header Parameters" registry. The "Value | "COSE Header Parameters" registry. The "Value Registry" field is | |||
Registry" field is empty for all of the items. For each item, the | empty for all of the items. For each item, the "Reference" field | |||
'Reference' field points to this document. | points to this document. | |||
4.2. COSE Header Algorithm Parameter Registry | 4.2. COSE Header Algorithm Parameters Registry | |||
IANA is requested to register the new COSE Header Algorithm | IANA has registered the new COSE Header Algorithm parameters in | |||
parameters in Table 2 in the "COSE Header Algorithm Parameters" | Table 2 in the "COSE Header Algorithm Parameters" registry. For each | |||
registry. For each item, the 'Reference' field points to this | item, the "Reference" field points to this document. | |||
document. | ||||
4.3. Media Type application/cose-x509 | 4.3. Media Type application/cose-x509 | |||
When the application/cose-x509 media type is used, the data is a CBOR | When the application/cose-x509 media type is used, the data is a CBOR | |||
sequence of single-entry COSE_X509 structures (encoding "bstr"). If | sequence of single-entry COSE_X509 structures (encoding "bstr"). If | |||
the parameter "usage" is set to "chain", this sequence indicates a | the parameter "usage" is set to "chain", this sequence indicates a | |||
certificate chain. | certificate chain. | |||
IANA is requested to register the following media type [RFC6838]: | IANA has registered the following media type [RFC6838]: | |||
Type name: application | Type name: application | |||
Subtype name: cose-x509 | Subtype name: cose-x509 | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: usage | Optional parameters: usage | |||
* Can be absent to provide no further information about the | * Can be absent to provide no further information about the | |||
intended meaning of the order in the CBOR sequence of | intended meaning of the order in the CBOR sequence of | |||
certificates. | certificates. | |||
* Can be set to "chain" to indicate that the sequence of data | * Can be set to "chain" to indicate that the sequence of data | |||
items is to be interpreted as a certificate chain. | items is to be interpreted as a certificate chain. | |||
Encoding considerations: binary | Encoding considerations: binary | |||
Security considerations: See the Security Considerations section of | Security considerations: See the Security Considerations section of | |||
RFCthis. | RFC 9360. | |||
Interoperability considerations: N/A | Interoperability considerations: N/A | |||
Published specification: RFCthis | Published specification: RFC 9360 | |||
Applications that use this media type: Applications that employ COSE | Applications that use this media type: Applications that employ COSE | |||
and use X.509 as a certificate type. | and use X.509 as a certificate type. | |||
Fragment identifier considerations: N/A | Fragment identifier considerations: N/A | |||
Additional information: Deprecated alias names for this type: N/A | Additional information: | |||
Magic number(s): N/A | ||||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | Deprecated alias names for this type: N/A | |||
Magic number(s): N/A | ||||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | ||||
Person & email address to contact for further information: | Person & email address to contact for further information: | |||
iesg@ietf.org | iesg@ietf.org | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: COSE WG | Author: COSE WG | |||
Change controller: IESG | Change controller: IESG | |||
Provisional registration? (standards tree only): no | ||||
5. Security Considerations | 5. Security Considerations | |||
Establishing trust in a certificate is a vital part of processing. A | Establishing trust in a certificate is a vital part of processing. A | |||
major component of establishing trust is determining what the set of | major component of establishing trust is determining what the set of | |||
trust anchors are for the process. A new self-signed certificate | trust anchors are for the process. A new self-signed certificate | |||
appearing on the client cannot be a trigger to modify the set of | appearing on the client cannot be a trigger to modify the set of | |||
trust anchors, because a well-defined trust-establishment process is | trust anchors, because a well-defined trust-establishment process is | |||
required. One common way for a new trust anchor to be added (or | required. One common way for a new trust anchor to be added to (or | |||
removed) from a device is by doing a new firmware upgrade. | removed from) a device is by doing a new firmware upgrade. | |||
In constrained systems, there is a trade-off between the order of | In constrained systems, there is a trade-off between the order of | |||
checking the signature and checking the certificate for validity. | checking the signature and checking the certificate for validity. | |||
Validating certificates can require that network resources be | Validating certificates can require that network resources be | |||
accessed in order to get revocation information or retrieve | accessed in order to get revocation information or retrieve | |||
certificates during path building. The resulting network access can | certificates during path building. The resulting network access can | |||
consume power and network bandwidth. On the other hand, if the | consume power and network bandwidth. On the other hand, if the | |||
certificates are validated after the signature is validated, an | certificates are validated after the signature is validated, an | |||
oracle can potentially be built based on detecting the network | oracle can potentially be built based on detecting the network | |||
resources which is only done if the signature validation passes. In | resources, which is only done if the signature validation passes. In | |||
any event, both the signature and certificate validation MUST be | any event, both the signature validation and the certificate | |||
completed successfully before acting on any requests. | validation MUST be completed successfully before acting on any | |||
requests. | ||||
Unless it is known that the CA required proof-of-possession of the | Unless it is known that the Certificate Authority (CA) required proof | |||
subject's private key to issue an end-entity certificate, the end- | of possession of the subject's private key to issue an end-entity | |||
entity certificate MUST be integrity protected by COSE. Without | certificate, the end-entity certificate MUST be integrity protected | |||
proof-of-possession, an attacker can trick the CA to issue an | by COSE. Without proof of possession, an attacker can trick the CA | |||
identity-misbinding certificate with someone else's "borrowed" | into issuing an identity-misbinding certificate with someone else's | |||
public-key but with a different subject. A MITM attacker can then | "borrowed" public key but with a different subject. An on-path | |||
perform an identity-misbinding attack by replacing the real end- | attacker can then perform an identity-misbinding attack by replacing | |||
entity certificate in COSE with such an identity-misbinding | the real end-entity certificate in COSE with such an identity- | |||
certificate. | misbinding certificate. | |||
End-entity X.509 certificates contain identities that a passive on- | End-entity X.509 certificates contain identities that a passive on- | |||
path attacker eavesdropping on the conversation can use to identify | path attacker eavesdropping on the conversation can use to identify | |||
and track the subject. COSE does not provide identity protection by | and track the subject. COSE does not provide identity protection by | |||
itself and the x5t and x5u header parameters are just alternative | itself, and the 'x5t' and 'x5u' header parameters are just | |||
permanent identifiers and can also be used to track the subject. To | alternative permanent identifiers and can also be used to track the | |||
provide identity protection, COSE can be sent inside another security | subject. To provide identity protection, COSE can be sent inside | |||
protocol providing confidentiality. | another security protocol providing confidentiality. | |||
Before using the key in a certificate, the key MUST be checked | Before using the key in a certificate, the key MUST be checked | |||
against the algorithm to be used and any algorithm specific checks | against the algorithm to be used, and any algorithm-specific checks | |||
need to be made. These checks can include validating that points are | need to be made. These checks can include validating that points are | |||
on curves for elliptical curve algorithms, and that sizes of RSA keys | on curves for elliptical curve algorithms and that the sizes of RSA | |||
are of an acceptable size. The use of unvalidated keys can lead | keys are within an acceptable range. The use of unvalidated keys can | |||
either to loss of security or excessive consumption of resources (for | lead to either loss of security or excessive consumption of resources | |||
example using a 200K RSA key). | (for example, using a 200K RSA key). | |||
When processing the x5u header parameter the security considerations | When processing the 'x5u' header parameter, the security | |||
of [RFC3986] and specifically those defined in Section 7.1 of | considerations of [RFC3986], and specifically those defined in | |||
[RFC3986] also apply. | Section 7.1 of [RFC3986], also apply. | |||
Regardless of the source, certification path validation is an | Regardless of the source, certification path validation is an | |||
important part of establishing trust in a certificate. Section 6 of | important part of establishing trust in a certificate. Section 6 of | |||
[RFC5280] provides guidance for the path validation. The security | [RFC5280] provides guidance for the path validation. The security | |||
considerations of [RFC5280] are also important for the correct usage | considerations of [RFC5280] are also important for the correct usage | |||
of this document. | of this document. | |||
Protecting the integrity of the x5bag, x5chain and x5t contents by | Protecting the integrity of the 'x5bag', 'x5chain', and 'x5t' | |||
placing them in the protected header bucket can help mitigate some | contents by placing them in the protected header bucket can help | |||
risks of a misbehaving certificate authority (cf. Section 5.1 of | mitigate some risks of a misbehaving CA (cf. Section 5.1 of | |||
[RFC2634]). | [RFC2634]). | |||
The security of the algorithm used for 'x5t' does not affect the | The security of the algorithm used for 'x5t' does not affect the | |||
security of the system as this header parameter selects which | security of the system, as this header parameter selects which | |||
certificate that is already present on the system should be used, but | certificate that is already present on the system should be used, but | |||
it does not provide any trust. | it does not provide any trust. | |||
6. References | 6. References | |||
6.1. Normative References | 6.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
skipping to change at page 13, line 24 ¶ | skipping to change at line 531 ¶ | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
[RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Structures and Process", STD 96, RFC 9052, | ||||
DOI 10.17487/RFC9052, August 2022, | ||||
<https://www.rfc-editor.org/info/rfc9052>. | ||||
6.2. Informative References | 6.2. Informative References | |||
[I-D.ietf-anima-constrained-voucher] | [Constrained-BRSKI] | |||
Richardson, M., Stok, P. V. D., Kampanakis, P., and E. | Richardson, M., van der Stok, P., Kampanakis, P., and E. | |||
Dijk, "Constrained Bootstrapping Remote Secure Key | Dijk, "Constrained Bootstrapping Remote Secure Key | |||
Infrastructure (BRSKI)", Work in Progress, Internet-Draft, | Infrastructure (BRSKI)", Work in Progress, Internet-Draft, | |||
draft-ietf-anima-constrained-voucher-17, 7 April 2022, | draft-ietf-anima-constrained-voucher-19, 2 January 2023, | |||
<https://www.ietf.org/archive/id/draft-ietf-anima- | <https://datatracker.ietf.org/doc/html/draft-ietf-anima- | |||
constrained-voucher-17.txt>. | constrained-voucher-19>. | |||
[I-D.ietf-lake-edhoc] | [EDHOC] Selander, G., Preuß Mattsson, J., and F. Palombini, | |||
Selander, G., Mattsson, J. P., and F. Palombini, | ||||
"Ephemeral Diffie-Hellman Over COSE (EDHOC)", Work in | "Ephemeral Diffie-Hellman Over COSE (EDHOC)", Work in | |||
Progress, Internet-Draft, draft-ietf-lake-edhoc-14, 18 May | Progress, Internet-Draft, draft-ietf-lake-edhoc-19, 3 | |||
2022, <https://www.ietf.org/archive/id/draft-ietf-lake- | February 2023, <https://datatracker.ietf.org/doc/html/ | |||
edhoc-14.txt>. | draft-ietf-lake-edhoc-19>. | |||
[I-D.ietf-tls-dtls13] | ||||
Rescorla, E., Tschofenig, H., and N. Modadugu, "The | ||||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", Work in Progress, Internet-Draft, draft-ietf-tls- | ||||
dtls13-43, 30 April 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-tls- | ||||
dtls13-43.txt>. | ||||
[RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | [RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key | |||
Infrastructure Operational Protocols: FTP and HTTP", | Infrastructure Operational Protocols: FTP and HTTP", | |||
RFC 2585, DOI 10.17487/RFC2585, May 1999, | RFC 2585, DOI 10.17487/RFC2585, May 1999, | |||
<https://www.rfc-editor.org/info/rfc2585>. | <https://www.rfc-editor.org/info/rfc2585>. | |||
[RFC2634] Hoffman, P., Ed., "Enhanced Security Services for S/MIME", | [RFC2634] Hoffman, P., Ed., "Enhanced Security Services for S/MIME", | |||
RFC 2634, DOI 10.17487/RFC2634, June 1999, | RFC 2634, DOI 10.17487/RFC2634, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2634>. | <https://www.rfc-editor.org/info/rfc2634>. | |||
skipping to change at page 14, line 43 ¶ | skipping to change at line 595 ¶ | |||
Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
"Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
(OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
<https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
Appendix A. Acknowledgements | [RFC9147] Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
Datagram Transport Layer Security (DTLS) Protocol Version | ||||
1.3", RFC 9147, DOI 10.17487/RFC9147, April 2022, | ||||
<https://www.rfc-editor.org/info/rfc9147>. | ||||
Acknowledgements | ||||
Jim Schaad passed on 3 October 2020. This document is primarily his | ||||
work. Ivaylo Petrov served as the document editor after Jim's | ||||
untimely death, mostly helping with the approval and publication | ||||
processes. Jim deserves all credit for the technical content. | ||||
Author's Address | Author's Address | |||
Jim Schaad | Jim Schaad | |||
August Cellars | August Cellars | |||
Email: ietf@augustcellars.com | ||||
End of changes. 71 change blocks. | ||||
246 lines changed or deleted | 227 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |