rfc9338.original | rfc9338.txt | |||
---|---|---|---|---|
COSE Working Group J. Schaad | Internet Engineering Task Force (IETF) J. Schaad | |||
Internet-Draft August Cellars | Request for Comments: 9338 August Cellars | |||
Updates: 9052 (if approved) R. Housley, Ed. | STD: 96 December 2022 | |||
Intended status: Standards Track Vigil Security | Updates: 9052 | |||
Expires: 24 March 2023 20 September 2022 | Category: Standards Track | |||
ISSN: 2070-1721 | ||||
CBOR Object Signing and Encryption (COSE): Countersignatures | CBOR Object Signing and Encryption (COSE): Countersignatures | |||
draft-ietf-cose-countersign-10 | ||||
Abstract | Abstract | |||
Concise Binary Object Representation (CBOR) is a data format designed | Concise Binary Object Representation (CBOR) is a data format designed | |||
for small code size and small message size. CBOR Object Signing and | for small code size and small message size. CBOR Object Signing and | |||
Encryption (COSE) defines a set of security services for CBOR. This | Encryption (COSE) defines a set of security services for CBOR. This | |||
document defines a countersignature algorithm along with the needed | document defines a countersignature algorithm along with the needed | |||
header parameters and CBOR tags for COSE. This document updates RFC | header parameters and CBOR tags for COSE. This document updates RFC | |||
9052. | 9052. | |||
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 24 March 2023. | 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/rfc9338. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 Revised BSD License text as | to this document. Code Components extracted from this document must | |||
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 Revised 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Requirements Terminology . . . . . . . . . . . . . . . . 4 | 1.1. Requirements Terminology | |||
1.2. CBOR Grammar . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. CBOR Grammar | |||
1.3. Document Terminology . . . . . . . . . . . . . . . . . . 4 | 1.3. Document Terminology | |||
2. Countersignature Header Parameters . . . . . . . . . . . . . 5 | 2. Countersignature Header Parameters | |||
3. Version 2 Countersignatures . . . . . . . . . . . . . . . . . 6 | 3. Version 2 Countersignatures | |||
3.1. Full Countersignatures . . . . . . . . . . . . . . . . . 7 | 3.1. Full Countersignatures | |||
3.2. Abbreviated Countersignatures . . . . . . . . . . . . . . 8 | 3.2. Abbreviated Countersignatures | |||
3.3. Signing and Verification Process . . . . . . . . . . . . 8 | 3.3. Signing and Verification Process | |||
4. CBOR Encoding Restrictions . . . . . . . . . . . . . . . . . 10 | 4. CBOR Encoding Restrictions | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 5. IANA Considerations | |||
5.1. CBOR Tag Assignment . . . . . . . . . . . . . . . . . . . 11 | 5.1. CBOR Tags Registry | |||
5.2. COSE Header Parameters Registry . . . . . . . . . . . . . 11 | 5.2. COSE Header Parameters Registry | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 6. Security Considerations | |||
7. Implementation Status . . . . . . . . . . . . . . . . . . . . 12 | 7. References | |||
7.1. Author's Versions . . . . . . . . . . . . . . . . . . . . 12 | 7.1. Normative References | |||
7.2. COSE Testing Library . . . . . . . . . . . . . . . . . . 13 | 7.2. Informative References | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | Appendix A. Examples | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 13 | A.1. Examples of Signed Messages | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 14 | A.1.1. Countersignature | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 15 | A.2. Examples of Signed1 Messages | |||
A.1. Use of Early Code Points . . . . . . . . . . . . . . . . 16 | A.2.1. Countersignature | |||
A.2. Examples of Signed Messages . . . . . . . . . . . . . . . 16 | A.3. Examples of Enveloped Messages | |||
A.2.1. Countersignature . . . . . . . . . . . . . . . . . . 16 | A.3.1. Countersignature on Encrypted Content | |||
A.3. Examples of Signed1 Messages . . . . . . . . . . . . . . 17 | A.4. Examples of Encrypted Messages | |||
A.3.1. Countersignature . . . . . . . . . . . . . . . . . . 17 | A.4.1. Countersignature on Encrypted Content | |||
A.4. Examples of Enveloped Messages . . . . . . . . . . . . . 18 | A.5. Examples of MACed Messages | |||
A.4.1. Countersignature on Encrypted Content . . . . . . . . 18 | A.5.1. Countersignature on MAC Content | |||
A.5. Examples of Encrypted Messages . . . . . . . . . . . . . 19 | A.6. Examples of MAC0 Messages | |||
A.5.1. Countersignature on Encrypted Content . . . . . . . . 20 | A.6.1. Countersignature on MAC0 Content | |||
A.6. Examples of MACed Messages . . . . . . . . . . . . . . . 20 | Acknowledgments | |||
A.6.1. Countersignature on MAC Content . . . . . . . . . . . 20 | Author's Address | |||
A.7. Examples of MAC0 Messages . . . . . . . . . . . . . . . . 21 | ||||
A.7.1. Countersignature on MAC0 Content . . . . . . . . . . 21 | ||||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
1. Introduction | 1. Introduction | |||
There has been an increased focus on small, constrained devices that | There has been an increased focus on small, constrained devices that | |||
make up the Internet of Things (IoT). One of the standards that has | make up the Internet of Things (IoT). One of the standards that has | |||
come out of this process is "Concise Binary Object Representation | come out of this process is "Concise Binary Object Representation | |||
(CBOR)" [RFC8949]. CBOR extended the data model of the JavaScript | (CBOR)" [RFC8949]. CBOR extended the data model of the JavaScript | |||
Object Notation (JSON) [STD90] by allowing for binary data, among | Object Notation (JSON) [STD90] by allowing for binary data, among | |||
other changes. CBOR has been adopted by several of the IETF working | other changes. CBOR has been adopted by several of the IETF working | |||
groups dealing with the IoT world as their method of encoding data | groups dealing with the IoT world as their method of encoding data | |||
structures. CBOR was designed specifically to be small in terms of | structures. CBOR was designed specifically to be small in terms of | |||
both messages transported and implementation size and to have a | both messages transported and implementation size and to have a | |||
schema-free decoder. A need exists to provide message security | schema-free decoder. A need exists to provide message security | |||
services for IoT, and using CBOR as the message-encoding format makes | services for IoT, and using CBOR as the message-encoding format makes | |||
sense. | sense. | |||
A countersignature is a second signature that confirms the primary | A countersignature is a second signature that confirms the primary | |||
signature. During the process of advancing COSE to Internet | signature. During the process of advancing CBOR Object Signing and | |||
Standard, it was noticed that the description of the security | Encryption (COSE) to Internet Standard, it was noticed that the | |||
properties of countersignatures was incorrect for the COSE_Sign1 | description of the security properties of countersignatures was | |||
structure in Section 4.5 of [RFC8152]. To remedy this situation, the | incorrect for the COSE_Sign1 structure mentioned in Section 4.5 of | |||
working group decided to remove all of the countersignature text from | [RFC8152]. To remedy this situation, the COSE Working Group decided | |||
[RFC9052], which obsoletes [RFC8152]. This document defines a new | to remove all of the countersignature text from [RFC9052], which | |||
countersignature with the desired security properties. | obsoletes [RFC8152]. This document defines a new countersignature | |||
with the desired security properties. | ||||
The problem with the previous countersignature algorithm was that the | The problem with the previous countersignature algorithm was that the | |||
cryptographically computed value was not always included. The | cryptographically computed value was not always included. The | |||
initial assumption that the cryptographic value was in the third slot | initial assumption that the cryptographic value was in the third slot | |||
of the array was known not to be true at the time, but in the case of | of the array was known not to be true at the time, but in the case of | |||
the MAC structures this was not deemed to be an issue. The new | the Message Authentication Code (MAC) structures this was not deemed | |||
algorithm defined in this document requires the inclusion of more | to be an issue. The new algorithm defined in this document requires | |||
values for the countersignature computation. The exception to this | the inclusion of more values for the countersignature computation. | |||
is the COSE_Signature structure where there is no cryptographic | The exception to this is the COSE_Signature structure where there is | |||
computed value. | no cryptographically computed value. | |||
The new algorithm defined in this document is designed to produce the | The new algorithm defined in this document is designed to produce the | |||
same countersignature value in those cases where the computed | same countersignature value in those cases where the computed | |||
cryptographic value was already included. This means that for those | cryptographic value was already included. This means that for those | |||
structures the only thing that would need to be done is to change the | structures the only thing that would need to be done is to change the | |||
value of the header parameter. | value of the header parameter. | |||
With the publication of this document, implementers are encouraged to | With the publication of this document, implementers are encouraged to | |||
migrate uses of the previous countersignature algorithm to the one | migrate uses of the previous countersignature algorithm to the one | |||
specified in this document. In particular, uses of | specified in this document. In particular, uses of | |||
skipping to change at page 4, line 18 ¶ | skipping to change at line 147 ¶ | |||
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. | |||
1.2. CBOR Grammar | 1.2. CBOR Grammar | |||
CBOR grammar in this document uses the CBOR Data Definition Language | CBOR grammar in this document uses the Concise Data Definition | |||
(CDDL) [RFC8610]. | Language (CDDL) [RFC8610]. | |||
The collected CDDL can be extracted from the XML version of this | The collected CDDL can be extracted from the XML version of this | |||
document via the following XPath expression below. (Depending on the | document via the XPath expression below. (Depending on the XPath | |||
XPath evaluator one is using, it may be necessary to deal with > | evaluator one is using, it may be necessary to deal with > as an | |||
as an entity.) | entity.) | |||
//sourcecode[@type='cddl']/text() | //sourcecode[@type='cddl']/text() | |||
CDDL expects the initial non-terminal symbol to be the first symbol | CDDL expects the initial non-terminal symbol to be the first symbol | |||
in the file. For this reason, the first fragment of CDDL is | in the file. For this reason, the first fragment of CDDL is | |||
presented here. | presented here. | |||
start = COSE_Countersignature_Tagged / Internal_Types | start = COSE_Countersignature_Tagged / Internal_Types | |||
; This is defined to make the tool quieter: | ; This is defined to make the tool quieter: | |||
Internal_Types = Countersign_structure / COSE_Countersignature0 | Internal_Types = Countersign_structure / COSE_Countersignature0 | |||
The non-terminal Internal_Types is defined for dealing with the | The non-terminal Internal_Types is defined for dealing with the | |||
automated validation tools used during the writing of this document. | automated validation tools used during the writing of this document. | |||
It references those non-terminals that are used for security | It references those non-terminals that are used for security | |||
computations but are not emitted for transport. | computations but are not emitted for transport. | |||
1.3. Document Terminology | 1.3. Document Terminology | |||
In this document, we use the following terminology: | In this document, we use the following terminology. | |||
"Byte" is a synonym for "octet". | "Byte" is a synonym for "octet". | |||
Constrained Application Protocol (CoAP) is a specialized web transfer | The Constrained Application Protocol (CoAP) is a specialized web | |||
protocol for use in constrained systems. It is defined in [RFC7252]. | transfer protocol for use in constrained systems. It is defined in | |||
[RFC7252]. | ||||
"Context" is used throughout the document to represent information | "Context" is used throughout this document to represent information | |||
that is not part of the COSE message. Information which is part of | that is not part of the COSE message. Information that is part of | |||
the context can come from different sources including: protocol | the context can come from different sources, including protocol | |||
interactions, associated key structures, and application | interactions, associated key structures, and application | |||
configuration. The context to use can be implicit, identified using | configuration. The context to use can be implicit, identified using | |||
the "kid context" header parameter defined in [RFC8613], or | either the "kid context" header parameter defined in [RFC8613] or a | |||
identified by a protocol-specific identifier. Context should | protocol-specific identifier. Context should generally be included | |||
generally be included in the cryptographic construction; for more | in the cryptographic construction; for more details, see Section 4.4 | |||
details see Section 4.3 of [RFC9052]. | of [RFC9052]. | |||
The term "byte string" is used for sequences of bytes, while the term | The term "byte string" is used for sequences of bytes, while the term | |||
"text string" is used for sequences of characters. | "text string" is used for sequences of characters. | |||
2. Countersignature Header Parameters | 2. Countersignature Header Parameters | |||
This section defines a set of common header parameters. A summary of | This section defines a set of common header parameters. A summary of | |||
these header parameters can be found in Table 1. This table should | these header parameters can be found in Table 1. This table should | |||
be consulted to determine the value of label and the type of the | be consulted to determine the value of the label and the type of the | |||
value. | value. | |||
The set of header parameters defined in this section are: | The set of header parameters defined in this section is: | |||
V2 countersignature: This header parameter holds one or more | V2 countersignature: This header parameter holds one or more | |||
countersignature values. Countersignatures provide a method of | countersignature values. Countersignatures provide a method of | |||
having a second party sign some data. The countersignature header | having a second party sign some data. The countersignature header | |||
parameter can occur as an unprotected attribute in any of the | parameter can occur as an unprotected attribute in any of the | |||
following structures that are defined in [RFC9052]: COSE_Sign1, | following structures that are defined in [RFC9052]: COSE_Sign1, | |||
COSE_Signature, COSE_Encrypt, COSE_recipient, COSE_Encrypt0, | COSE_Signature, COSE_Encrypt, COSE_recipient, COSE_Encrypt0, | |||
COSE_Mac, and COSE_Mac0. Details of version 2 countersignatures | COSE_Mac, and COSE_Mac0. Details of version 2 countersignatures | |||
are found in Section 3. | are found in Section 3. | |||
+===========+=====+========================+==========+=============+ | +=================+=====+==========================+================+ | |||
|Name |Label|Value Type | Value | Description | | |Name |Label| Value Type |Description | | |||
| | | | Registry | | | +=================+=====+==========================+================+ | |||
+===========+=====+========================+==========+=============+ | |Countersignature |11 | COSE_Countersignature / |V2 | | |||
|counter |TBD10|COSE_Countersignature / | | V2 counter | | |version 2 | | [+ COSE_Countersignature |countersignature| | |||
|signature | |[+ COSE_Countersignature| | signature | | | | | ] |attribute | | |||
|version 2 | |] | | attribute | | +-----------------+-----+--------------------------+----------------+ | |||
+-----------+-----+------------------------+----------+-------------+ | |Countersignature0|12 | COSE_Countersignature0 |V2 Abbreviated | | |||
|counter |TBD11|COSE_Countersignature0 | | Abbreviated | | |version 2 | | |Countersignature| | |||
|signature 0| | | | Counter | | +-----------------+-----+--------------------------+----------------+ | |||
|version 2 | | | | signature | | ||||
| | | | | vesion 2 | | ||||
+-----------+-----+------------------------+----------+-------------+ | ||||
Table 1: Common Header Parameters | Table 1: Common Header Parameters | |||
The CDDL fragment that represents the set of header parameters | The CDDL fragment that represents the set of header parameters | |||
defined in this section is given below. Each of the header | defined in this section is given below. Each of the header | |||
parameters is tagged as optional because they do not need to be in | parameters is tagged as optional because they do not need to be in | |||
every map; however, the header parameters required in specific maps | every map; however, the header parameters required in specific maps | |||
are discussed above. | are discussed above. | |||
CountersignatureV2_header = ( | CountersignatureV2_header = ( | |||
TBD10 => COSE_Countersignature / [+COSE_Countersignature] | ? 11 => COSE_Countersignature / [+ COSE_Countersignature] | |||
) | ) | |||
Countersignature0V2_header = ( | Countersignature0V2_header = ( | |||
TBD11 => COSE_Countersignature0 | ? 12 => COSE_Countersignature0 | |||
) | ) | |||
3. Version 2 Countersignatures | 3. Version 2 Countersignatures | |||
A countersignature is normally defined as a second signature that | A countersignature is normally defined as a second signature that | |||
confirms a primary signature. A normal example of a countersignature | confirms a primary signature. A normal example of a countersignature | |||
is the signature that a notary public places on a document as | is the signature that a notary public places on a document as | |||
witnessing that you have signed the document. A notary typically | witnessing that you have signed the document. A notary typically | |||
includes a timestamp to indicate when notarization occurs; however, | includes a timestamp to indicate when notarization occurs; however, | |||
such a timestamp has not yet been defined for COSE. A timestamp, | such a timestamp has not yet been defined for COSE. A timestamp, | |||
once defined in a future document, might be included as a protected | once defined in a future document, might be included as a protected | |||
header parameter. Thus applying a countersignature to either the | header parameter. Thus, applying a countersignature to either the | |||
COSE_Signature or COSE_Sign1 objects match this traditional | COSE_Signature or COSE_Sign1 objects matches this traditional | |||
definition. This document extends the context of a countersignature | definition. This document extends the context of a countersignature | |||
to allow it to be applied to all of the security structures defined. | to allow it to be applied to all of the security structures defined. | |||
The countersignature needs to be treated as a separate operation from | The countersignature needs to be treated as a separate operation from | |||
the initial operation even if it is applied by the same user as is | the initial operation even if it is applied by the same user, as is | |||
done in [I-D.ietf-core-oscore-groupcomm]. | done in [GROUP-OSCORE]. | |||
COSE supports two different forms for countersignatures. Full | COSE supports two different forms for countersignatures. Full | |||
countersignatures use the structure COSE_Countersignature, which has | countersignatures use the structure COSE_Countersignature, which has | |||
the same structure as COSE_Signature. Thus, full countersignatures | the same structure as COSE_Signature. Thus, full countersignatures | |||
can have protected and unprotected attributes, including chained | can have protected and unprotected attributes, including chained | |||
countersignatures. Abbreviated countersignatures use the structure | countersignatures. Abbreviated countersignatures use the structure | |||
COSE_Countersignature0. This structure only contains the signature | COSE_Countersignature0. This structure only contains the signature | |||
value and nothing else. The structures cannot be converted between | value and nothing else. The structures cannot be converted between | |||
each other; as the signature computation includes a parameter | each other; as the signature computation includes a parameter | |||
identifying which structure is being used, the converted structure | identifying which structure is being used, the converted structure | |||
will fail signature validation. | will fail signature validation. | |||
The version 2 countersignature changes the algorithm used for | The version 2 countersignature changes the algorithm used for | |||
computing the signature from the original version that is specified | computing the signature from the original version that is specified | |||
Section 4.5 of [RFC8152]. The new version now includes the | in Section 4.5 of [RFC8152]. The new version now includes the | |||
cryptographic material generated for all of the structures rather | cryptographic material generated for all of the structures rather | |||
than just for a subset. | than just for a subset. | |||
COSE was designed for uniformity in how the data structures are | COSE was designed for uniformity in how the data structures are | |||
specified. One result of this is that for COSE one can expand the | specified. One result of this is that for COSE one can expand the | |||
concept of countersignatures beyond just the idea of signing a | concept of countersignatures beyond just the idea of signing a | |||
signature to being able to sign most of the structures without having | signature to being able to sign most of the structures without having | |||
to create a new signing layer. When creating a countersignature, one | to create a new signing layer. When creating a countersignature, one | |||
needs to be clear about the security properties that result. When | needs to be clear about the security properties that result. When | |||
done on a COSE_Signature or COSE_Sign1, the normal countersignature | done on a COSE_Signature or COSE_Sign1, the normal countersignature | |||
semantics are preserved. That is, the countersignature makes a | semantics are preserved. That is, the countersignature makes a | |||
statement about the existence of a signature and, when used with a | statement about the existence of a signature and, when used with a | |||
yet-to-be-specified timestamp, a point in time at which the signature | yet-to-be-specified timestamp, a point in time at which the signature | |||
exists. When done on a COSE_Mac or COSE_Mac0, the payload is | exists. When done on a COSE_Mac or COSE_Mac0, the payload is | |||
included as well as the MAC value. When done on a COSE_Encrypt or | included as well as the MAC value. When done on a COSE_Encrypt or | |||
COSE_Encrypt0, the existence of the encrypted data is attested to. | COSE_Encrypt0, the existence of the encrypted data is attested to. | |||
It should be noted that there is a distinction between attesting to | It should be noted that there is a distinction between attesting to | |||
the encrypted data as opposed to attesting to the unencrypted data. | the encrypted data as opposed to attesting to the unencrypted data. | |||
If the latter is what is desired, then one needs to apply a signature | If the latter is what is desired, then one needs to apply a signature | |||
to the data and then encrypt that. It is always possible to | to the data and then encrypt that. It is always possible to | |||
construct cases where the use of two different keys will appear to | construct cases where the use of two different keys results in | |||
result in a successful decryption (the tag check success), but which | successful decryption, where the tag check succeeds, but two | |||
produce two completely different plaintexts. This situation is not | completely different plaintexts are produced. This situation is not | |||
detectable by a countersignature on the encrypted data. | detectable by a countersignature on the encrypted data. | |||
3.1. Full Countersignatures | 3.1. Full Countersignatures | |||
The COSE_Countersignature structure allows for the same set of | The COSE_Countersignature structure allows for the same set of | |||
capabilities as a COSE_Signature. This means that all of the | capabilities as a COSE_Signature. This means that all of the | |||
capabilities of a signature are duplicated with this structure. | capabilities of a signature are duplicated with this structure. | |||
Specifically, the countersigner does not need to be related to the | Specifically, the countersigner does not need to be related to the | |||
producer of what is being countersigned as key and algorithm | producer of what is being countersigned, as key and algorithm | |||
identification can be placed in the countersignature attributes. | identification can be placed in the countersignature attributes. | |||
This also means that the countersignature can itself be | This also means that the countersignature can itself be | |||
countersigned. This is a feature required by protocols such as long- | countersigned. This is a feature required by protocols such as long- | |||
term archiving services. More information on how countersignatures | term archiving services. More information on how countersignatures | |||
are used can be found in the evidence record syntax described in | are used can be found in the evidence record syntax described in | |||
[RFC4998]. | [RFC4998]. | |||
The full countersignature structure can be encoded as either tagged | The full countersignature structure can be encoded as either tagged | |||
or untagged depending on the context. A tagged COSE_Countersignature | or untagged, depending on the context. A tagged | |||
structure is identified by the CBOR tag TBD0. The countersignature | COSE_Countersignature structure is identified by the CBOR tag 19. | |||
structure is the same as that used for a signer on a signed object. | The countersignature structure is the same as that used for a signer | |||
The CDDL fragment for full countersignatures is: | on a signed object. The CDDL fragment for full countersignatures is: | |||
COSE_Countersignature_Tagged = #6.TBD0(COSE_Countersignature) | COSE_Countersignature_Tagged = #6.19(COSE_Countersignature) | |||
COSE_Countersignature = COSE_Signature | COSE_Countersignature = COSE_Signature | |||
The details of the fields of a countersignature can be found in | The details of the fields of a countersignature can be found in | |||
Section 4.1 of [RFC9052]. | Section 4.1 of [RFC9052]. | |||
An example of a countersignature on a signature can be found in | An example of a countersignature on a signature can be found in | |||
Appendix A.2.1. An example of a countersignature in an encryption | Appendix A.1.1. An example of a countersignature in an encryption | |||
object can be found in Appendix A.4.1. | object can be found in Appendix A.3.1. | |||
It should be noted that only a signature algorithm with appendix (see | It should be noted that only a signature algorithm with appendix (see | |||
Section 8.1 of [RFC9052]) can be used for countersignatures. This is | Section 8.1 of [RFC9052]) can be used for countersignatures. This is | |||
because the body should be able to be processed without having to | because the body should be able to be processed without having to | |||
evaluate the countersignature, and this is not possible for signature | evaluate the countersignature, and this is not possible for signature | |||
schemes with message recovery. | schemes with message recovery. | |||
3.2. Abbreviated Countersignatures | 3.2. Abbreviated Countersignatures | |||
Abbreviated countersignatures support encrypted group messaging, | Abbreviated countersignatures support encrypted group messaging where | |||
where identification of the message originator is required, but there | identification of the message originator is required but there is a | |||
is a desire to keep the countersignature as small as possible. For | desire to keep the countersignature as small as possible. For | |||
abbreviated countersignatures, there is no provision for any | abbreviated countersignatures, there is no provision for any | |||
protected attributes related to the signing operation. That is, the | protected attributes related to the signing operation. That is, the | |||
parameters for computing or verifying the abbreviated | parameters for computing or verifying the abbreviated | |||
countersignature are provided by the same context used to describe | countersignature are provided by the same context used to describe | |||
the encryption, signature, or MAC processing. | the encryption, signature, or MAC processing. | |||
The CDDL fragment for the abbreviated countersignatures is: | The CDDL fragment for the abbreviated countersignatures is: | |||
COSE_Countersignature0 = bstr | COSE_Countersignature0 = bstr | |||
skipping to change at page 8, line 44 ¶ | skipping to change at line 360 ¶ | |||
3.3. Signing and Verification Process | 3.3. Signing and Verification Process | |||
In order to create a signature, a well-defined byte string is needed. | In order to create a signature, a well-defined byte string is needed. | |||
The Countersign_structure is used to create the canonical form. This | The Countersign_structure is used to create the canonical form. This | |||
signing and verification process takes in the countersignature target | signing and verification process takes in the countersignature target | |||
structure (COSE_Signature, COSE_Sign1, COSE_Sign, COSE_Mac, | structure (COSE_Signature, COSE_Sign1, COSE_Sign, COSE_Mac, | |||
COSE_Mac0, COSE_Encrypt, or COSE_Encrypt0), the signer information | COSE_Mac0, COSE_Encrypt, or COSE_Encrypt0), the signer information | |||
(COSE_Signature), and the application data (external source). A | (COSE_Signature), and the application data (external source). A | |||
Countersign_structure is a CBOR array. The target structure of the | Countersign_structure is a CBOR array. The target structure of the | |||
countersignature needs to have all of its cryptographic functions | countersignature needs to have all of its cryptographic functions | |||
finalized before the computing the signature. The fields of the | finalized before computing the signature. The fields of the | |||
Countersign_structure in order are: | Countersign_structure, in order, are: | |||
context: A context text string identifying the context of the | context: A context text string identifying the context of the | |||
signature. The context text string is one of the following: | signature. The context text string is one of the following: | |||
"CounterSignature" for countersignatures using the | * "CounterSignature" for countersignatures using the | |||
COSE_Countersignature structure when other_fields is absent. | COSE_Countersignature structure when other_fields is absent. | |||
"CounterSignature0" for countersignatures using the | * "CounterSignature0" for countersignatures using the | |||
COSE_Countersignature0 structure when other_fields is absent. | COSE_Countersignature0 structure when other_fields is absent. | |||
"CounterSignatureV2" for countersignatures using the | * "CounterSignatureV2" for countersignatures using the | |||
COSE_Countersignature structure when other_fields is present. | COSE_Countersignature structure when other_fields is present. | |||
"CounterSignature0V2" for countersignatures using the | * "CounterSignature0V2" for countersignatures using the | |||
COSE_Countersignature0 structure when other_fields is present. | COSE_Countersignature0 structure when other_fields is present. | |||
body_protected: The serialized protected attributes from the target | body_protected: The serialized protected attributes from the target | |||
structure encoded in a bstr type. If there are no protected | structure, encoded in a bstr type. If there are no protected | |||
attributes, a zero-length byte string is used. | attributes, a zero-length byte string is used. | |||
sign_protected: The serialized protected attributes from the signer | sign_protected: The serialized protected attributes from the signer | |||
structure encoded in a bstr type. If there are no protected | structure, encoded in a bstr type. If there are no protected | |||
attributes, a zero-length byte string is used. This field is | attributes, a zero-length byte string is used. This field is | |||
omitted for the Countersignature0V2 attribute. | omitted for the Countersignature0V2 attribute. | |||
external_aad: The externally supplied additional authenticated data | external_aad: The externally supplied additional authenticated data | |||
(AAD) from the application is encoded in a bstr type. If this | (AAD) from the application, encoded in a bstr type. If this field | |||
field is not supplied, it defaults to a zero-length byte string. | is not supplied, it defaults to a zero-length byte string. (See | |||
(See Section 4.3 of [RFC9052] for application guidance on | Section 4.4 of [RFC9052] for application guidance on constructing | |||
constructing this field.) | this field.) | |||
payload: The payload to be signed encoded in a bstr type. The | payload: The payload to be signed, encoded in a bstr type. The | |||
payload is placed here independent of how it is transported. | payload is placed here independently of how it is transported. | |||
other_fields: If there are only two bstr fields in the target | other_fields: Omitted if there are only two bstr fields in the | |||
structure, this field is omitted. The field is an array of all | target structure. This field is an array of all bstr fields after | |||
bstr fields after the second. As an example, this would be an | the second. As an example, this would be an array of one element | |||
array of one element for the COSE_Sign1 structure containing the | for the COSE_Sign1 structure containing the signature value. | |||
signature value. | ||||
The CDDL fragment that describes the above text is: | The CDDL fragment that describes the above text is: | |||
Countersign_structure = [ | Countersign_structure = [ | |||
context : "CounterSignature" / "CounterSignature0" / | context : "CounterSignature" / "CounterSignature0" / | |||
"CounterSignatureV2" / "CounterSignature0V2" /, | "CounterSignatureV2" / "CounterSignature0V2" /, | |||
body_protected : empty_or_serialized_map, | body_protected : empty_or_serialized_map, | |||
? sign_protected : empty_or_serialized_map, | ? sign_protected : empty_or_serialized_map, | |||
external_aad : bstr, | external_aad : bstr, | |||
payload : bstr, | payload : bstr, | |||
? other_fields : [ + bstr ] | ? other_fields : [+ bstr ] | |||
] | ] | |||
How to compute a countersignature: | How to compute a countersignature: | |||
1. Create a Countersign_structure and populate it with the | 1. Create a Countersign_structure and populate it with the | |||
appropriate fields. | appropriate fields. | |||
2. Create the value ToBeSigned by encoding the Countersign_structure | 2. Create the value ToBeSigned by encoding the Countersign_structure | |||
to a byte string, using the encoding described in Section 4. | to a byte string, using the encoding described in Section 4. | |||
3. Call the signature creation algorithm passing in K (the key to | 3. Call the signature creation algorithm passing in K (the key to | |||
sign with), alg (the algorithm to sign with), and ToBeSigned (the | sign with), alg (the algorithm to sign with), and ToBeSigned (the | |||
value to sign). | value to sign). | |||
4. Place the resulting signature value in the correct location. | 4. Place the resulting signature value in the correct location. | |||
This is the "signature" field of the COSE_Countersignature | This is the "signature" field of the COSE_Countersignature | |||
structure for full countersignatures (see Section 3.1). This is | structure for full countersignatures (see Section 3.1). This is | |||
the value of the Countersignature0 attribute for abbreviated | the value of the Countersignature0 attribute for abbreviated | |||
countersignatures (see Section 3.2). | countersignatures (see Section 3.2). | |||
The steps for verifying a countersignature are: | The steps for verifying a countersignature: | |||
1. Create a Countersign_structure and populate it with the | 1. Create a Countersign_structure and populate it with the | |||
appropriate fields. | appropriate fields. | |||
2. Create the value ToBeSigned by encoding the Countersign_structure | 2. Create the value ToBeSigned by encoding the Countersign_structure | |||
to a byte string, using the encoding described in Section 4. | to a byte string, using the encoding described in Section 4. | |||
3. Call the signature verification algorithm passing in K (the key | 3. Call the signature verification algorithm passing in K (the key | |||
to verify with), alg (the algorithm used sign with), ToBeSigned | to verify with), alg (the algorithm used to sign with), | |||
(the value to sign), and sig (the signature to be verified). | ToBeSigned (the value to sign), and sig (the signature to be | |||
verified). | ||||
In addition to performing the signature verification, the application | In addition to performing the signature verification, the application | |||
performs the appropriate checks to ensure that the key is correctly | performs the appropriate checks to ensure that the key is correctly | |||
paired with the signing identity and that the signing identity is | paired with the signing identity and that the signing identity is | |||
authorized before performing actions. | authorized before performing actions. | |||
4. CBOR Encoding Restrictions | 4. CBOR Encoding Restrictions | |||
The deterministic encoding rules are defined in Section 4.2 of | The deterministic encoding rules are defined in Section 4.2 of | |||
[RFC8949]. These rules are further narrowed in Section 9 of | [RFC8949]. These rules are further narrowed in Section 9 of | |||
[RFC9052]. The narrowed deterministic encoding rules MUST be used to | [RFC9052]. The narrowed deterministic encoding rules MUST be used to | |||
ensure that all implementations generate the same byte string for the | ensure that all implementations generate the same byte string for the | |||
"to be signed" value. | "to be signed" value. | |||
5. IANA Considerations | 5. IANA Considerations | |||
The registries and registrations listed below were created during | The registries and registrations listed below were created during the | |||
processing of [RFC8152]. The majority of the actions are to update | processing of [RFC8152]. The majority of the actions are to update | |||
the references to point to this document. | the references to point to this document. | |||
5.1. CBOR Tag Assignment | 5.1. CBOR Tags Registry | |||
IANA is requested to assign a new tag for the CounterSignature type | ||||
in the "CBOR Tags" registry. | ||||
* Tag: TBD0 | ||||
* Data Item: COSE_Countersignature | IANA created a registry titled "CBOR Tags" registry as part of | |||
processing RFC 7049, which was subsequently replaced by [RFC8949]. | ||||
* Semantics: COSE standalone V2 countersignature | IANA has assigned a new tag for the CounterSignature type in the | |||
"CBOR Tags" registry. | ||||
* Reference: [[this document]] | Tag: 19 | |||
Data Item: COSE_Countersignature | ||||
Semantics: COSE standalone V2 countersignature | ||||
Reference: RFC 9338 | ||||
5.2. COSE Header Parameters Registry | 5.2. COSE Header Parameters Registry | |||
IANA created a registry titled "COSE Header Parameters" as part of | IANA created a registry titled "COSE Header Parameters" as part of | |||
processing [RFC8152]. | processing [RFC8152]. | |||
IANA is requested to register the following new items in the | IANA has registered the Countersignature version 2 (label 11) and | |||
registry. For these entries, the Value Registry column will be blank | Countersignature0 version 2 (label 12) in the "COSE Header | |||
and the Reference column will be [[This Document]]. | Parameters" registry. For these entries, the "Value Type" and | |||
"Description" are shown in Table 1, the "Value Registry" is blank, | ||||
and the "Reference" is "RFC 9338". | ||||
+===================+=====+========================+================+ | +=================+=====+==========================+================+ | |||
| Name |Label|Value Type |Description | | |Name |Label| Value Type |Description | | |||
+===================+=====+========================+================+ | +=================+=====+==========================+================+ | |||
| Countersignature |TBD10|COSE_Countersignature / |V2 | | |Countersignature |11 | COSE_Countersignature / |V2 | | |||
| version 2 | |[+ COSE_Countersignature|countersignature| | |version 2 | | [+ COSE_Countersignature |countersignature| | |||
| | |] |attribute | | | | | ] |attribute | | |||
+-------------------+-----+------------------------+----------------+ | +-----------------+-----+--------------------------+----------------+ | |||
| Countersignature0 |TBD11|COSE_Countersignature0 |V2 Abbreviated | | |Countersignature0|12 | COSE_Countersignature0 |V2 Abbreviated | | |||
| version 2 | | |Countersignature| | |version 2 | | |Countersignature| | |||
+-------------------+-----+------------------------+----------------+ | +-----------------+-----+--------------------------+----------------+ | |||
Table 2: New Common Header Parameters | Table 2: New Common Header Parameters | |||
IANA is requested to modify the Description field for "counter | IANA has modified the existing "Description" field for "counter | |||
signature" and "CounterSignature0" to include the words "(Deprecated | signature" (7) and "CounterSignature0" (9) to include the words | |||
by [[This Document]])". | "(Deprecated by RFC 9338)". | |||
6. Security Considerations | 6. Security Considerations | |||
Please review the Security Consideration in [RFC9052]; these | Please review the Security Considerations section in [RFC9052]; these | |||
considerations apply to this document as well, especially the need | considerations apply to this document as well, especially the need | |||
for implementations to protect private key material. | for implementations to protect private key material. | |||
When either COSE_Encrypt and COSE_Mac is used and more than two | When either COSE_Encrypt or COSE_Mac is used and more than two | |||
parties share the key, data origin authentication is not provided. | parties share the key, data origin authentication is not provided. | |||
Any party that knows the message-authentication key can compute a | Any party that knows the message-authentication key can compute a | |||
valid authentication tag; therefore, the contents could originate | valid authentication tag; therefore, the contents could originate | |||
from any one of the parties that share the key. | from any one of the parties that share the key. | |||
Countersignatures of COSE_Encrypt and COSE_Mac with short | Countersignatures of COSE_Encrypt and COSE_Mac with short | |||
authentication tags do not provide the security properties associated | authentication tags do not provide the security properties associated | |||
with the same algorithm used in COSE_Sign. To provide 128-bit | with the same algorithm used in COSE_Sign. To provide 128-bit | |||
security against collision attacks, the tag length MUST be at least | security against collision attacks, the tag length MUST be at least | |||
256-bits. A countersignature of a COSE_Mac with AES-MAC (using a | 256 bits. A countersignature of a COSE_Mac with AES-MAC (using a | |||
128-bit key or larger) provides at most 64 bits of integrity | 128-bit key or larger) provides at most 64 bits of integrity | |||
protection. Similarly, a countersignature of a COSE_Encrypt with | protection. Similarly, a countersignature of a COSE_Encrypt with | |||
AES-CCM-16-64-128 provides at most 32 bits of integrity protection. | AES-CCM-16-64-128 provides at most 32 bits of integrity protection. | |||
7. Implementation Status | 7. References | |||
This section is to be removed before publishing as an RFC. | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in [RFC7942]. | ||||
The description of implementations in this section is intended to | ||||
assist the IETF in its decision processes in progressing drafts to | ||||
RFCs. Please note that the listing of any individual implementation | ||||
here does not imply endorsement by the IETF. Furthermore, no effort | ||||
has been spent to verify the information presented here that was | ||||
supplied by IETF contributors. This is not intended as, and must not | ||||
be construed to be, a catalog of available implementations or their | ||||
features. Readers are advised to note that other implementations may | ||||
exist. | ||||
According to [RFC7942], "this will allow reviewers and working groups | ||||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. | ||||
It is up to the individual working groups to use this information as | ||||
they see fit". | ||||
7.1. Author's Versions | ||||
There are three different implementations that have been created by | ||||
the author of the document both to create the examples that are | ||||
included in the document and to validate the structures and | ||||
methodology used in the design of COSE. | ||||
* Implementation Location: https://github.com/cose-wg | ||||
* Primary Maintainer: Jim Schaad | ||||
* Languages: There are two different languages that are currently | ||||
supported: Java and C#. | ||||
* Cryptography: The Java and C# libraries use Bouncy Castle to | ||||
provide the required cryptography. | ||||
* Coverage: Both implementations can produce and consume both the | ||||
old and new countersignatures. | ||||
* Testing: All of the examples in the example library are generated | ||||
by the C# library and then validated using the Java and C | ||||
libraries. Both libraries have tests to allow for the creating of | ||||
the same messages that are in the example library followed by | ||||
validating them. These are not compared against the example | ||||
library. The Java and C# libraries have unit testing included. | ||||
Not all of the MUST statements in the document have been | ||||
implemented as part of the libraries. One such statement is the | ||||
requirement that unique labels be present. | ||||
* Licensing: Revised BSD License | ||||
7.2. COSE Testing Library | ||||
* Implementation Location: https://github.com/cose-wg/Examples | ||||
* Primary Maintainer: Jim Schaad | ||||
* Description: A set of tests for the COSE library is provided as | ||||
part of the implementation effort. Both success and fail tests | ||||
have been provided. All of the examples in this document are part | ||||
of this example set. | ||||
* Coverage: An attempt has been made to have test cases for every | ||||
message type and algorithm in the document. However, examples | ||||
dealing with countersignatures, and ECDH with Curve25519 and | ||||
Goldilocks are missing. | ||||
* Licensing: Public Domain | ||||
8. References | ||||
8.1. Normative References | 7.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, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[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>. | |||
[RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): | [RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
Structures and Process", STD 96, RFC 9052, | Structures and Process", STD 96, RFC 9052, | |||
DOI 10.17487/RFC9052, August 2022, | DOI 10.17487/RFC9052, August 2022, | |||
<https://www.rfc-editor.org/info/rfc9052>. | <https://www.rfc-editor.org/info/rfc9052>. | |||
8.2. Informative References | 7.2. Informative References | |||
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | ||||
Definition Language (CDDL): A Notational Convention to | ||||
Express Concise Binary Object Representation (CBOR) and | ||||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | ||||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | ||||
[RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | ||||
RFC 8152, DOI 10.17487/RFC8152, July 2017, | ||||
<https://www.rfc-editor.org/info/rfc8152>. | ||||
[STD90] Turner, S., "EST (Enrollment over Secure Transport) | [CBORDIAG] Bormann, C., "CBOR diagnostic utilities", commit 1952a04, | |||
Extensions", RFC 8295, January 2018. | September 2022, <https://github.com/cabo/cbor-diag>. | |||
<https://www.rfc-editor.org/info/std90> | [GROUP-OSCORE] | |||
Tiloca, M., Selander, G., Palombini, F., Mattsson, J., and | ||||
J. Park, "Group OSCORE - Secure Group Communication for | ||||
CoAP", Work in Progress, Internet-Draft, draft-ietf-core- | ||||
oscore-groupcomm-16, 24 October 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-core- | ||||
oscore-groupcomm-16>. | ||||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC4998] Gondrom, T., Brandner, R., and U. Pordesch, "Evidence | |||
Representation (CBOR)", STD 94, RFC 8949, | Record Syntax (ERS)", RFC 4998, DOI 10.17487/RFC4998, | |||
DOI 10.17487/RFC8949, December 2020, | August 2007, <https://www.rfc-editor.org/info/rfc4998>. | |||
<https://www.rfc-editor.org/info/rfc8949>. | ||||
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
Code: The Implementation Status Section", BCP 205, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | <https://www.rfc-editor.org/info/rfc8152>. | |||
<https://www.rfc-editor.org/info/rfc7942>. | ||||
[RFC4998] Gondrom, T., Brandner, R., and U. Pordesch, "Evidence | ||||
Record Syntax (ERS)", RFC 4998, DOI 10.17487/RFC4998, | ||||
August 2007, <https://www.rfc-editor.org/info/rfc4998>. | ||||
[I-D.ietf-core-oscore-groupcomm] | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
Tiloca, M., Selander, G., Palombini, F., Mattsson, J. P., | Definition Language (CDDL): A Notational Convention to | |||
and J. Park, "Group OSCORE - Secure Group Communication | Express Concise Binary Object Representation (CBOR) and | |||
for CoAP", Work in Progress, Internet-Draft, draft-ietf- | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
core-oscore-groupcomm-15, 5 September 2022, | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
<https://www.ietf.org/archive/id/draft-ietf-core-oscore- | ||||
groupcomm-15.txt>. | ||||
[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>. | |||
[CBORDIAG] Bormann, C., "CBOR diagnostic utilities", | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
<https://github.com/cabo/cbor-diag>. | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | ||||
<https://www.rfc-editor.org/info/rfc8949>. | ||||
[STD90] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | ||||
Interchange Format", STD 90, RFC 8259, December 2017. | ||||
<https://www.rfc-editor.org/info/std90> | ||||
Appendix A. Examples | Appendix A. Examples | |||
This appendix includes a set of examples that show the different | This appendix includes a set of examples that show the different | |||
features and message types that have been defined in this document. | features and message types that have been defined in this document. | |||
To make the examples easier to read, they are presented using the | To make the examples easier to read, they are presented using the | |||
extended CBOR diagnostic notation (defined in [RFC8610]) rather than | extended CBOR diagnostic notation (defined in [RFC8610]) rather than | |||
as a binary dump. | as a binary dump. | |||
The examples are presented using the CBOR's diagnostic notation. A | The examples are presented using the CBOR diagnostic notation. A | |||
Ruby-based tool exists [CBORDIAG] that can convert between the | Ruby-based tool exists [CBORDIAG] that can convert between the | |||
diagnostic notation and binary. The referenced webpage includes | diagnostic notation and binary. The referenced webpage includes | |||
installation instructions. | installation instructions. | |||
The diagnostic notation can be converted into binary files using the | The diagnostic notation can be converted into binary files using the | |||
following command line: | following command line: | |||
diag2cbor.rb < inputfile > outputfile | diag2cbor.rb < inputfile > outputfile | |||
The examples can be extracted from the XML version of this document | The examples can be extracted from the XML version of this document | |||
via an XPath expression as all of the sourcecode is tagged with the | via an XPath expression, as all of the sourcecode is tagged with the | |||
attribute type="CBORdiag". (Depending on the XPath evaluator one is | attribute 'type="cbor-diag"'. (Depending on the XPath evaluator one | |||
using, it may be necessary to deal with > as an entity.) | is using, it may be necessary to deal with > as an entity.) | |||
//sourcecode[@type='CDDL']/text() | //sourcecode[@type='cbor-diag']/text() | |||
A.1. Use of Early Code Points | This appendix uses the following terms: | |||
This section is to be removed before publishing as an RFC. | AES-GCM: AES Galois/Counter Mode | |||
The examples in this Appendix use code points proposed for early | CEK: content-encryption key | |||
allocation by IANA. When IANA makes the allocation, these examples | ||||
will be updated as needed. | ||||
A.2. Examples of Signed Messages | ECDH: Elliptic Curve Diffie-Hellman | |||
A.2.1. Countersignature | ECDH-ES: Elliptic Curve Diffie-Hellman Ephemeral Static | |||
ECDSA: Elliptic Curve Digital Signature Algorithm | ||||
EdDSA: Edwards-curve Digital Signature Algorithm | ||||
HKDF: HMAC-based Key Derivation Function | ||||
HMAC: Hashed Message Authentication Code | ||||
A.1. Examples of Signed Messages | ||||
A.1.1. Countersignature | ||||
This example uses the following: | This example uses the following: | |||
* Signature Algorithm: ECDSA w/ SHA-256, Curve P-256 | Signature Algorithm: ECDSA with SHA-256, Curve P-256 | |||
* The same header parameters are used for both the signature and the | The same header parameters are used for both the signature and the | |||
countersignature. | countersignature. | |||
The size of the binary file is 180 bytes. | ||||
Size of binary file is 180 bytes | ||||
98( | 98( | |||
[ | [ | |||
/ protected / h'', | / protected / h'', | |||
/ unprotected / { | / unprotected / { | |||
/ countersign / 11:[ | / countersign / 11:[ | |||
/ protected h'a10126' / << { | / protected h'a10126' / << { | |||
/ alg / 1:-7 / ECDSA 256 / | / alg / 1:-7 / ECDSA 256 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ kid / 4:'11' | / kid / 4: '11' | |||
}, | }, | |||
/ signature / h'5ac05e289d5d0e1b0a7f048a5d2b643813ded50bc9e4 | / signature / h'5ac05e289d5d0e1b0a7f048a5d2b643813ded50bc9e4 | |||
9220f4f7278f85f19d4a77d655c9d3b51e805a74b099e1e085aacd97fc29d72f887e | 9220f4f7278f85f19d4a77d655c9d3b51e805a74b099e1e085aacd97fc29d72f887e | |||
8802bb6650cceb2c' | 8802bb6650cceb2c' | |||
] | ] | |||
}, | }, | |||
/ payload / 'This is the content.', | / payload / 'This is the content.', | |||
/ signatures / [ | / signatures / [ | |||
[ | [ | |||
/ protected h'a10126' / << { | / protected h'a10126' / << { | |||
/ alg / 1:-7 / ECDSA 256 / | / alg / 1:-7 / ECDSA 256 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ kid / 4:'11' | / kid / 4: '11' | |||
}, | }, | |||
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb | / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb | |||
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b | 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b | |||
98f53afd2fa0f30a' | 98f53afd2fa0f30a' | |||
] | ] | |||
] | ] | |||
] | ] | |||
) | ) | |||
A.3. Examples of Signed1 Messages | A.2. Examples of Signed1 Messages | |||
A.3.1. Countersignature | A.2.1. Countersignature | |||
This example uses the following: | This example uses the following: | |||
* Signature Algorithm: ECDSA w/ SHA-256, Curve P-256 | Signature Algorithm: ECDSA with SHA-256, Curve P-256 | |||
* Countersignature Algorithm: ECDSA w/ SHA-512, Curve P-521 | Countersignature Algorithm: ECDSA with SHA-512, Curve P-521 | |||
The size of the binary file is 275 bytes. | ||||
Size of binary file is 275 bytes | ||||
18( | 18( | |||
[ | [ | |||
/ protected h'A201260300' / << { | / protected h'A201260300' / << { | |||
/ alg / 1:-7, / ECDSA 256 / | / alg / 1:-7, / ECDSA 256 / | |||
/ ctyp / 3:0 | / ctyp / 3:0 | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ kid / 4: "11", | / kid / 4: '11', | |||
/ countersign / 11: [ | / countersign / 11: [ | |||
/ protected h'A1013823' / << { | / protected h'A1013823' / << { | |||
/ alg / 1:-36 / ECDSA 512 / | / alg / 1:-36 / ECDSA 512 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ kid / 4: "bilbo.baggins@hobbiton.example" | / kid / 4: 'bilbo.baggins@hobbiton.example' | |||
}, | }, | |||
/ signature / h'01B1291B0E60A79C459A4A9184A0D393E034B34AF069 | / signature / h'01B1291B0E60A79C459A4A9184A0D393E034B34AF069 | |||
A1CCA34F5A913AFFFF698002295FA9F8FCBFB6FDFF59132FC0C406E98754A98F1FBF | A1CCA34F5A913AFFFF698002295FA9F8FCBFB6FDFF59132FC0C406E98754A98F1FBF | |||
E81C03095F481856BC470170227206FA5BEE3C0431C56A66824E7AAF692985952E31 | E81C03095F481856BC470170227206FA5BEE3C0431C56A66824E7AAF692985952E31 | |||
271434B2BA2E47A335C658B5E995AEB5D63CF2D0CED367D3E4CC8FFFD53B70D115BA | 271434B2BA2E47A335C658B5E995AEB5D63CF2D0CED367D3E4CC8FFFD53B70D115BA | |||
A9E86961FBD1A5CF' | A9E86961FBD1A5CF' | |||
] | ] | |||
}, | }, | |||
/ payload / 'This is the content.', | / payload / 'This is the content.', | |||
/ signature / h'BB587D6B15F47BFD54D2CBFCECEF75451E92B08A514BD439 | / signature / h'BB587D6B15F47BFD54D2CBFCECEF75451E92B08A514BD439 | |||
FA3AA65C6AC92DF0D7328C4A47529B32ADD3DD1B4E940071C021E9A8F2641F1D8E3B | FA3AA65C6AC92DF0D7328C4A47529B32ADD3DD1B4E940071C021E9A8F2641F1D8E3B | |||
053DDD65AE52' | 053DDD65AE52' | |||
] | ] | |||
) | ) | |||
A.4. Examples of Enveloped Messages | A.3. Examples of Enveloped Messages | |||
A.4.1. Countersignature on Encrypted Content | A.3.1. Countersignature on Encrypted Content | |||
This example uses the following: | This example uses the following: | |||
* CEK: AES-GCM w/ 128-bit key | CEK: AES-GCM with 128-bit key | |||
* Recipient class: ECDH Ephemeral-Static, Curve P-256 | Recipient Class: ECDH Ephemeral-Static, Curve P-256 | |||
* Countersignature Algorithm: ECDSA w/ SHA-512, Curve P-521 | Countersignature Algorithm: ECDSA with SHA-512, Curve P-521 | |||
The size of the binary file is 326 bytes. | ||||
Size of binary file is 326 bytes | ||||
96( | 96( | |||
[ | [ | |||
/ protected h'a10101' / << { | / protected h'a10101' / << { | |||
/ alg / 1:1 / AES-GCM 128 / | / alg / 1:1 / AES-GCM 128 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ iv / 5:h'c9cf4df2fe6c632bf7886413', | / iv / 5:h'c9cf4df2fe6c632bf7886413', | |||
/ countersign / 11:[ | / countersign / 11:[ | |||
/ protected h'a1013823' / << { | / protected h'a1013823' / << { | |||
/ alg / 1:-36 / ES512 / | / alg / 1:-36 / ES512 / | |||
} >> , | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ kid / 4:'bilbo.baggins@hobbiton.example' | / kid / 4: 'bilbo.baggins@hobbiton.example' | |||
}, | }, | |||
/ signature / h'00929663c8789bb28177ae28467e66377da12302d7f9 | / signature / h'00929663c8789bb28177ae28467e66377da12302d7f9 | |||
594d2999afa5dfa531294f8896f2b6cdf1740014f4c7f1a358e3a6cf57f4ed6fb02f | 594d2999afa5dfa531294f8896f2b6cdf1740014f4c7f1a358e3a6cf57f4ed6fb02f | |||
cf8f7aa989f5dfd07f0700a3a7d8f3c604ba70fa9411bd10c2591b483e1d2c31de00 | cf8f7aa989f5dfd07f0700a3a7d8f3c604ba70fa9411bd10c2591b483e1d2c31de00 | |||
3183e434d8fba18f17a4c7e3dfa003ac1cf3d30d44d2533c4989d3ac38c38b71481c | 3183e434d8fba18f17a4c7e3dfa003ac1cf3d30d44d2533c4989d3ac38c38b71481c | |||
c3430c9d65e7ddff' | c3430c9d65e7ddff' | |||
] | ] | |||
}, | }, | |||
/ ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 | / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 | |||
c52a357da7a644b8070a151b0', | c52a357da7a644b8070a151b0', | |||
/ recipients / [ | / recipients / [ | |||
[ | [ | |||
/ protected h'a1013818' / << { | / protected h'a1013818' / << { | |||
/ alg / 1:-25 / ECDH-ES + HKDF-256 / | / alg / 1:-25 / ECDH-ES + HKDF-256 / | |||
} >> , | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ ephemeral / -1:{ | / ephemeral / -1:{ | |||
/ kty / 1:2, | / kty / 1:2, | |||
/ crv / -1:1, | / crv / -1:1, | |||
/ x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf | / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf | |||
bf054e1c7b4d91d6280', | bf054e1c7b4d91d6280', | |||
/ y / -3:true | / y / -3:true | |||
}, | }, | |||
/ kid / 4:'meriadoc.brandybuck@buckland.example' | / kid / 4: 'meriadoc.brandybuck@buckland.example' | |||
}, | }, | |||
/ ciphertext / h'' | / ciphertext / h'' | |||
] | ] | |||
] | ] | |||
] | ] | |||
) | ) | |||
A.5. Examples of Encrypted Messages | A.4. Examples of Encrypted Messages | |||
A.5.1. Countersignature on Encrypted Content | ||||
A.4.1. Countersignature on Encrypted Content | ||||
This example uses the following: | This example uses the following: | |||
* CEK: AES-GCM w/ 128-bit key | CEK: AES-GCM with 128-bit key | |||
* Countersignature algorithm: EdDSA with Curve Ed25519 | Countersignature Algorithm: EdDSA with Curve Ed25519 | |||
Size of binary file is 136 bytes | The size of the binary file is 136 bytes. | |||
16( | 16( | |||
[ | [ | |||
/ protected h'A10101' / << { | / protected h'A10101' / << { | |||
/ alg / 1:1 / AES-GCM 128 / | / alg / 1:1 / AES-GCM 128 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ iv / 5: h'02D1F7E6F26C43D4868D87CE', | / iv / 5: h'02D1F7E6F26C43D4868D87CE', | |||
/ countersign / 11: [ | / countersign / 11: [ | |||
/ protected h'A10127' / << { | / protected h'A10127' / << { | |||
skipping to change at page 20, line 38 ¶ | skipping to change at line 814 ¶ | |||
/ signature / h'E10439154CC75C7A3A5391491F88651E0292FD0FE0E0 | / signature / h'E10439154CC75C7A3A5391491F88651E0292FD0FE0E0 | |||
2CF740547EAF6677B4A4040B8ECA16DB592881262F77B14C1A086C02268B17171CA1 | 2CF740547EAF6677B4A4040B8ECA16DB592881262F77B14C1A086C02268B17171CA1 | |||
6BE4B8595F8C0A08' | 6BE4B8595F8C0A08' | |||
] | ] | |||
}, | }, | |||
/ ciphertext / h'60973A94BB2898009EE52ECFD9AB1DD25867374B162E2C0 | / ciphertext / h'60973A94BB2898009EE52ECFD9AB1DD25867374B162E2C0 | |||
3568B41F57C3CC16F9166250A' | 3568B41F57C3CC16F9166250A' | |||
] | ] | |||
) | ) | |||
A.6. Examples of MACed Messages | A.5. Examples of MACed Messages | |||
A.6.1. Countersignature on MAC Content | A.5.1. Countersignature on MAC Content | |||
This example uses the following: | This example uses the following: | |||
* MAC algorithm: HMAC/SHA-256 with 256-bit key | MAC Algorithm: HMAC/SHA-256 with 256-bit key | |||
* Countersignature algorithm: EdDSA with Curve Ed25519 | Countersignature Algorithm: EdDSA with Curve Ed25519 | |||
The size of the binary file is 159 bytes. | ||||
Size of binary file is 159 bytes | ||||
97( | 97( | |||
[ | [ | |||
/ protected h'A10105' / << { | / protected h'A10105' / << { | |||
/ alg / 1:5 / HS256 / | / alg / 1:5 / HS256 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ countersign / 11: [ | / countersign / 11: [ | |||
/ protected h'A10127' / << { | / protected h'A10127' / << { | |||
/ alg / 1:-8 / EdDSA / | / alg / 1:-8 / EdDSA / | |||
} >>, | } >>, | |||
skipping to change at page 21, line 38 ¶ | skipping to change at line 860 ¶ | |||
/ unprotected / { | / unprotected / { | |||
/ alg / 1: -6, / direct / | / alg / 1: -6, / direct / | |||
/ kid / 4: 'our-secret' | / kid / 4: 'our-secret' | |||
}, | }, | |||
/ ciphertext / h'' | / ciphertext / h'' | |||
] | ] | |||
] | ] | |||
] | ] | |||
) | ) | |||
A.7. Examples of MAC0 Messages | A.6. Examples of MAC0 Messages | |||
A.7.1. Countersignature on MAC0 Content | A.6.1. Countersignature on MAC0 Content | |||
This example uses the following: | This example uses the following: | |||
* MAC algorithm: HMAC/SHA-256 with 256-bit key | MAC Algorithm: HMAC/SHA-256 with 256-bit key | |||
* Countersignature algorithm: EdDSA with Curve Ed25519 | Countersignature Algorithm: EdDSA with Curve Ed25519 | |||
The size of the binary file is 159 bytes. | ||||
Size of binary file is 159 bytes | ||||
17( | 17( | |||
[ | [ | |||
/ protected h'A10105' / << { | / protected h'A10105' / << { | |||
/ alg / 1:5 / HS256 / | / alg / 1:5 / HS256 / | |||
} >>, | } >>, | |||
/ unprotected / { | / unprotected / { | |||
/ countersign / 11: [ | / countersign / 11: [ | |||
/ protected h'A10127' / << { | / protected h'A10127' / << { | |||
/ alg / 1:-8 / EdDSA / | / alg / 1:-8 / EdDSA / | |||
} >>, | } >>, | |||
skipping to change at page 22, line 30 ¶ | skipping to change at line 898 ¶ | |||
] | ] | |||
}, | }, | |||
/ payload / 'This is the content.', | / payload / 'This is the content.', | |||
/ tag / h'A1A848D3471F9D61EE49018D244C824772F223AD4F935293F1789F | / tag / h'A1A848D3471F9D61EE49018D244C824772F223AD4F935293F1789F | |||
C3A08D8C58' | C3A08D8C58' | |||
] | ] | |||
) | ) | |||
Acknowledgments | Acknowledgments | |||
This document is a product of the COSE working group of the IETF. | This document is a product of the COSE Working Group of the IETF. | |||
The initial version of the specification was based to some degree on | The initial draft version of the specification was based to some | |||
the outputs of the JOSE and S/MIME working groups. | degree on the outputs of the JOSE and S/MIME Working Groups. | |||
Jim Schaad passed on 3 October 2020. This document is primarily his | Jim Schaad passed on 3 October 2020. This document is primarily his | |||
work. Russ Housley served as the document editor after Jim's | work. Russ Housley served as the document editor after Jim's | |||
untimely death, mostly helping with the approval and publication | untimely death, mostly helping with the approval and publication | |||
processes. Jim deserves all credit for the technical content. | processes. Jim deserves all credit for the technical content. | |||
Jim Schaad and Jonathan Hammell provided the examples in the | Jim Schaad and Jonathan Hammell provided the examples in Appendix A. | |||
Appendix. | ||||
The reviews by Carsten Borman, Ben Kaduk, and Elwyn Davies greatly | The reviews by Carsten Bormann, Ben Kaduk, and Elwyn Davies greatly | |||
improved the clarity of the document. | improved the clarity of the document. | |||
{{{ RFC EDITOR: Please remove Russ Housley as an author of this | Author's Address | |||
document at publication. Jim Schaad should be listed as the sole | ||||
author. }}} | ||||
Authors' Addresses | ||||
Jim Schaad | Jim Schaad | |||
August Cellars | August Cellars | |||
United States of America | United States of America | |||
Email: ietf@augustcellars.com | ||||
Russ Housley (editor) | ||||
Vigil Security, LLC | ||||
United States of America | ||||
Email: housley@vigilsec.com | ||||
End of changes. 113 change blocks. | ||||
350 lines changed or deleted | 279 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |