diff options
Diffstat (limited to 'doc/rfc/rfc9338.txt')
-rw-r--r-- | doc/rfc/rfc9338.txt | 921 |
1 files changed, 921 insertions, 0 deletions
diff --git a/doc/rfc/rfc9338.txt b/doc/rfc/rfc9338.txt new file mode 100644 index 0000000..13ff28f --- /dev/null +++ b/doc/rfc/rfc9338.txt @@ -0,0 +1,921 @@ + + + + +Internet Engineering Task Force (IETF) J. Schaad +Request for Comments: 9338 August Cellars +STD: 96 December 2022 +Updates: 9052 +Category: Standards Track +ISSN: 2070-1721 + + + CBOR Object Signing and Encryption (COSE): Countersignatures + +Abstract + + Concise Binary Object Representation (CBOR) is a data format designed + for small code size and small message size. CBOR Object Signing and + Encryption (COSE) defines a set of security services for CBOR. This + document defines a countersignature algorithm along with the needed + header parameters and CBOR tags for COSE. This document updates RFC + 9052. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + 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 (c) 2022 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Revised BSD License text as described in Section 4.e of the + Trust Legal Provisions and are provided without warranty as described + in the Revised BSD License. + +Table of Contents + + 1. Introduction + 1.1. Requirements Terminology + 1.2. CBOR Grammar + 1.3. Document Terminology + 2. Countersignature Header Parameters + 3. Version 2 Countersignatures + 3.1. Full Countersignatures + 3.2. Abbreviated Countersignatures + 3.3. Signing and Verification Process + 4. CBOR Encoding Restrictions + 5. IANA Considerations + 5.1. CBOR Tags Registry + 5.2. COSE Header Parameters Registry + 6. Security Considerations + 7. References + 7.1. Normative References + 7.2. Informative References + Appendix A. Examples + A.1. Examples of Signed Messages + A.1.1. Countersignature + A.2. Examples of Signed1 Messages + A.2.1. Countersignature + A.3. Examples of Enveloped Messages + A.3.1. Countersignature on Encrypted Content + A.4. Examples of Encrypted Messages + A.4.1. Countersignature on Encrypted Content + A.5. Examples of MACed Messages + A.5.1. Countersignature on MAC Content + A.6. Examples of MAC0 Messages + A.6.1. Countersignature on MAC0 Content + Acknowledgments + Author's Address + +1. Introduction + + There has been an increased focus on small, constrained devices that + make up the Internet of Things (IoT). One of the standards that has + come out of this process is "Concise Binary Object Representation + (CBOR)" [RFC8949]. CBOR extended the data model of the JavaScript + Object Notation (JSON) [STD90] by allowing for binary data, among + other changes. CBOR has been adopted by several of the IETF working + groups dealing with the IoT world as their method of encoding data + structures. CBOR was designed specifically to be small in terms of + both messages transported and implementation size and to have a + schema-free decoder. A need exists to provide message security + services for IoT, and using CBOR as the message-encoding format makes + sense. + + A countersignature is a second signature that confirms the primary + signature. During the process of advancing CBOR Object Signing and + Encryption (COSE) to Internet Standard, it was noticed that the + description of the security properties of countersignatures was + incorrect for the COSE_Sign1 structure mentioned in Section 4.5 of + [RFC8152]. To remedy this situation, the COSE Working Group decided + to remove all of the countersignature text from [RFC9052], which + obsoletes [RFC8152]. This document defines a new countersignature + with the desired security properties. + + The problem with the previous countersignature algorithm was that the + cryptographically computed value was not always included. The + 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 + the Message Authentication Code (MAC) structures this was not deemed + to be an issue. The new algorithm defined in this document requires + the inclusion of more values for the countersignature computation. + The exception to this is the COSE_Signature structure where there is + no cryptographically computed value. + + The new algorithm defined in this document is designed to produce the + same countersignature value in those cases where the computed + cryptographic value was already included. This means that for those + structures the only thing that would need to be done is to change the + value of the header parameter. + + With the publication of this document, implementers are encouraged to + migrate uses of the previous countersignature algorithm to the one + specified in this document. In particular, uses of + "CounterSignature" will migrate to "CounterSignatureV2", and uses of + "CounterSignature0" will migrate to "CounterSignature0V2". In + addition, verification of "CounterSignature" must be supported by new + implementations to remain compatible with senders that adhere to + [RFC8152], which assumes that all implementations will understand + "CounterSignature" as header parameter label 7. Likewise, + verification of "CounterSignature0" may be supported for further + compatibility. + +1.1. Requirements Terminology + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all + capitals, as shown here. + +1.2. CBOR Grammar + + CBOR grammar in this document uses the Concise Data Definition + Language (CDDL) [RFC8610]. + + The collected CDDL can be extracted from the XML version of this + document via the XPath expression below. (Depending on the XPath + evaluator one is using, it may be necessary to deal with > as an + entity.) + + //sourcecode[@type='cddl']/text() + + CDDL expects the initial non-terminal symbol to be the first symbol + in the file. For this reason, the first fragment of CDDL is + presented here. + + start = COSE_Countersignature_Tagged / Internal_Types + + ; This is defined to make the tool quieter: + Internal_Types = Countersign_structure / COSE_Countersignature0 + + The non-terminal Internal_Types is defined for dealing with the + automated validation tools used during the writing of this document. + It references those non-terminals that are used for security + computations but are not emitted for transport. + +1.3. Document Terminology + + In this document, we use the following terminology. + + "Byte" is a synonym for "octet". + + The Constrained Application Protocol (CoAP) is a specialized web + transfer protocol for use in constrained systems. It is defined in + [RFC7252]. + + "Context" is used throughout this document to represent information + that is not part of the COSE message. Information that is part of + the context can come from different sources, including protocol + interactions, associated key structures, and application + configuration. The context to use can be implicit, identified using + either the "kid context" header parameter defined in [RFC8613] or a + protocol-specific identifier. Context should generally be included + in the cryptographic construction; for more details, see Section 4.4 + of [RFC9052]. + + The term "byte string" is used for sequences of bytes, while the term + "text string" is used for sequences of characters. + +2. Countersignature Header Parameters + + This section defines a set of common header parameters. A summary of + these header parameters can be found in Table 1. This table should + be consulted to determine the value of the label and the type of the + value. + + The set of header parameters defined in this section is: + + V2 countersignature: This header parameter holds one or more + countersignature values. Countersignatures provide a method of + having a second party sign some data. The countersignature header + parameter can occur as an unprotected attribute in any of the + following structures that are defined in [RFC9052]: COSE_Sign1, + COSE_Signature, COSE_Encrypt, COSE_recipient, COSE_Encrypt0, + COSE_Mac, and COSE_Mac0. Details of version 2 countersignatures + are found in Section 3. + + +=================+=====+==========================+================+ + |Name |Label| Value Type |Description | + +=================+=====+==========================+================+ + |Countersignature |11 | COSE_Countersignature / |V2 | + |version 2 | | [+ COSE_Countersignature |countersignature| + | | | ] |attribute | + +-----------------+-----+--------------------------+----------------+ + |Countersignature0|12 | COSE_Countersignature0 |V2 Abbreviated | + |version 2 | | |Countersignature| + +-----------------+-----+--------------------------+----------------+ + + Table 1: Common Header Parameters + + The CDDL fragment that represents the set of header parameters + defined in this section is given below. Each of the header + parameters is tagged as optional because they do not need to be in + every map; however, the header parameters required in specific maps + are discussed above. + + CountersignatureV2_header = ( + ? 11 => COSE_Countersignature / [+ COSE_Countersignature] + ) + + Countersignature0V2_header = ( + ? 12 => COSE_Countersignature0 + ) + +3. Version 2 Countersignatures + + A countersignature is normally defined as a second signature that + confirms a primary signature. A normal example of a countersignature + is the signature that a notary public places on a document as + witnessing that you have signed the document. A notary typically + includes a timestamp to indicate when notarization occurs; however, + such a timestamp has not yet been defined for COSE. A timestamp, + once defined in a future document, might be included as a protected + header parameter. Thus, applying a countersignature to either the + COSE_Signature or COSE_Sign1 objects matches this traditional + definition. This document extends the context of a countersignature + 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 initial operation even if it is applied by the same user, as is + done in [GROUP-OSCORE]. + + COSE supports two different forms for countersignatures. Full + countersignatures use the structure COSE_Countersignature, which has + the same structure as COSE_Signature. Thus, full countersignatures + can have protected and unprotected attributes, including chained + countersignatures. Abbreviated countersignatures use the structure + COSE_Countersignature0. This structure only contains the signature + value and nothing else. The structures cannot be converted between + each other; as the signature computation includes a parameter + identifying which structure is being used, the converted structure + will fail signature validation. + + The version 2 countersignature changes the algorithm used for + computing the signature from the original version that is specified + in Section 4.5 of [RFC8152]. The new version now includes the + cryptographic material generated for all of the structures rather + than just for a subset. + + COSE was designed for uniformity in how the data structures are + specified. One result of this is that for COSE one can expand the + concept of countersignatures beyond just the idea of signing a + signature to being able to sign most of the structures without having + to create a new signing layer. When creating a countersignature, one + needs to be clear about the security properties that result. When + done on a COSE_Signature or COSE_Sign1, the normal countersignature + semantics are preserved. That is, the countersignature makes 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 + 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 + COSE_Encrypt0, the existence of the encrypted data is attested to. + It should be noted that there is a distinction between attesting to + 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 + to the data and then encrypt that. It is always possible to + construct cases where the use of two different keys results in + successful decryption, where the tag check succeeds, but two + completely different plaintexts are produced. This situation is not + detectable by a countersignature on the encrypted data. + +3.1. Full Countersignatures + + The COSE_Countersignature structure allows for the same set of + capabilities as a COSE_Signature. This means that all of the + capabilities of a signature are duplicated with this structure. + Specifically, the countersigner does not need to be related to the + producer of what is being countersigned, as key and algorithm + identification can be placed in the countersignature attributes. + This also means that the countersignature can itself be + countersigned. This is a feature required by protocols such as long- + term archiving services. More information on how countersignatures + are used can be found in the evidence record syntax described in + [RFC4998]. + + The full countersignature structure can be encoded as either tagged + or untagged, depending on the context. A tagged + COSE_Countersignature structure is identified by the CBOR tag 19. + The countersignature structure is the same as that used for a signer + on a signed object. The CDDL fragment for full countersignatures is: + + COSE_Countersignature_Tagged = #6.19(COSE_Countersignature) + COSE_Countersignature = COSE_Signature + + The details of the fields of a countersignature can be found in + Section 4.1 of [RFC9052]. + + An example of a countersignature on a signature can be found in + Appendix A.1.1. An example of a countersignature in an encryption + object can be found in Appendix A.3.1. + + It should be noted that only a signature algorithm with appendix (see + Section 8.1 of [RFC9052]) can be used for countersignatures. This is + because the body should be able to be processed without having to + evaluate the countersignature, and this is not possible for signature + schemes with message recovery. + +3.2. Abbreviated Countersignatures + + Abbreviated countersignatures support encrypted group messaging where + identification of the message originator is required but there is a + desire to keep the countersignature as small as possible. For + abbreviated countersignatures, there is no provision for any + protected attributes related to the signing operation. That is, the + parameters for computing or verifying the abbreviated + countersignature are provided by the same context used to describe + the encryption, signature, or MAC processing. + + The CDDL fragment for the abbreviated countersignatures is: + + COSE_Countersignature0 = bstr + + The byte string representing the signature value is placed in the + Countersignature0 attribute. This attribute is then encoded as an + unprotected header parameter. + +3.3. Signing and Verification Process + + In order to create a signature, a well-defined byte string is needed. + The Countersign_structure is used to create the canonical form. This + signing and verification process takes in the countersignature target + structure (COSE_Signature, COSE_Sign1, COSE_Sign, COSE_Mac, + COSE_Mac0, COSE_Encrypt, or COSE_Encrypt0), the signer information + (COSE_Signature), and the application data (external source). A + Countersign_structure is a CBOR array. The target structure of the + countersignature needs to have all of its cryptographic functions + finalized before computing the signature. The fields of the + Countersign_structure, in order, are: + + context: A context text string identifying the context of the + signature. The context text string is one of the following: + + * "CounterSignature" for countersignatures using the + COSE_Countersignature structure when other_fields is absent. + + * "CounterSignature0" for countersignatures using the + COSE_Countersignature0 structure when other_fields is absent. + + * "CounterSignatureV2" for countersignatures using the + COSE_Countersignature structure when other_fields is present. + + * "CounterSignature0V2" for countersignatures using the + COSE_Countersignature0 structure when other_fields is present. + + body_protected: The serialized protected attributes from the target + structure, encoded in a bstr type. If there are no protected + attributes, a zero-length byte string is used. + + sign_protected: The serialized protected attributes from the signer + structure, encoded in a bstr type. If there are no protected + attributes, a zero-length byte string is used. This field is + omitted for the Countersignature0V2 attribute. + + external_aad: The externally supplied additional authenticated data + (AAD) from the application, encoded in a bstr type. If this field + is not supplied, it defaults to a zero-length byte string. (See + Section 4.4 of [RFC9052] for application guidance on constructing + this field.) + + payload: The payload to be signed, encoded in a bstr type. The + payload is placed here independently of how it is transported. + + other_fields: Omitted if there are only two bstr fields in the + target structure. This field is an array of all bstr fields after + the second. As an example, this would be an array of one element + for the COSE_Sign1 structure containing the signature value. + + The CDDL fragment that describes the above text is: + + Countersign_structure = [ + context : "CounterSignature" / "CounterSignature0" / + "CounterSignatureV2" / "CounterSignature0V2" /, + body_protected : empty_or_serialized_map, + ? sign_protected : empty_or_serialized_map, + external_aad : bstr, + payload : bstr, + ? other_fields : [+ bstr ] + ] + + How to compute a countersignature: + + 1. Create a Countersign_structure and populate it with the + appropriate fields. + + 2. Create the value ToBeSigned by encoding the Countersign_structure + to a byte string, using the encoding described in Section 4. + + 3. Call the signature creation algorithm passing in K (the key to + sign with), alg (the algorithm to sign with), and ToBeSigned (the + value to sign). + + 4. Place the resulting signature value in the correct location. + This is the "signature" field of the COSE_Countersignature + structure for full countersignatures (see Section 3.1). This is + the value of the Countersignature0 attribute for abbreviated + countersignatures (see Section 3.2). + + The steps for verifying a countersignature: + + 1. Create a Countersign_structure and populate it with the + appropriate fields. + + 2. Create the value ToBeSigned by encoding the Countersign_structure + to a byte string, using the encoding described in Section 4. + + 3. Call the signature verification algorithm passing in K (the key + to verify with), alg (the algorithm used to sign with), + ToBeSigned (the value to sign), and sig (the signature to be + verified). + + In addition to performing the signature verification, the application + performs the appropriate checks to ensure that the key is correctly + paired with the signing identity and that the signing identity is + authorized before performing actions. + +4. CBOR Encoding Restrictions + + The deterministic encoding rules are defined in Section 4.2 of + [RFC8949]. These rules are further narrowed in Section 9 of + [RFC9052]. The narrowed deterministic encoding rules MUST be used to + ensure that all implementations generate the same byte string for the + "to be signed" value. + +5. IANA Considerations + + The registries and registrations listed below were created during the + processing of [RFC8152]. The majority of the actions are to update + the references to point to this document. + +5.1. CBOR Tags Registry + + IANA created a registry titled "CBOR Tags" registry as part of + processing RFC 7049, which was subsequently replaced by [RFC8949]. + + IANA has assigned a new tag for the CounterSignature type in the + "CBOR Tags" registry. + + Tag: 19 + Data Item: COSE_Countersignature + Semantics: COSE standalone V2 countersignature + Reference: RFC 9338 + +5.2. COSE Header Parameters Registry + + IANA created a registry titled "COSE Header Parameters" as part of + processing [RFC8152]. + + IANA has registered the Countersignature version 2 (label 11) and + Countersignature0 version 2 (label 12) in the "COSE Header + 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 | + +=================+=====+==========================+================+ + |Countersignature |11 | COSE_Countersignature / |V2 | + |version 2 | | [+ COSE_Countersignature |countersignature| + | | | ] |attribute | + +-----------------+-----+--------------------------+----------------+ + |Countersignature0|12 | COSE_Countersignature0 |V2 Abbreviated | + |version 2 | | |Countersignature| + +-----------------+-----+--------------------------+----------------+ + + Table 2: New Common Header Parameters + + IANA has modified the existing "Description" field for "counter + signature" (7) and "CounterSignature0" (9) to include the words + "(Deprecated by RFC 9338)". + +6. Security Considerations + + Please review the Security Considerations section in [RFC9052]; these + considerations apply to this document as well, especially the need + for implementations to protect private key material. + + When either COSE_Encrypt or COSE_Mac is used and more than two + parties share the key, data origin authentication is not provided. + Any party that knows the message-authentication key can compute a + valid authentication tag; therefore, the contents could originate + from any one of the parties that share the key. + + Countersignatures of COSE_Encrypt and COSE_Mac with short + authentication tags do not provide the security properties associated + with the same algorithm used in COSE_Sign. To provide 128-bit + security against collision attacks, the tag length MUST be at least + 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 + protection. Similarly, a countersignature of a COSE_Encrypt with + AES-CCM-16-64-128 provides at most 32 bits of integrity protection. + +7. References + +7.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [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>. + +7.2. Informative References + + [CBORDIAG] Bormann, C., "CBOR diagnostic utilities", commit 1952a04, + September 2022, <https://github.com/cabo/cbor-diag>. + + [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>. + + [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>. + + [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained + Application Protocol (CoAP)", RFC 7252, + DOI 10.17487/RFC7252, June 2014, + <https://www.rfc-editor.org/info/rfc7252>. + + [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", + RFC 8152, DOI 10.17487/RFC8152, July 2017, + <https://www.rfc-editor.org/info/rfc8152>. + + [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>. + + [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, + "Object Security for Constrained RESTful Environments + (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, + <https://www.rfc-editor.org/info/rfc8613>. + + [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object + 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 + + This appendix includes a set of examples that show the different + features and message types that have been defined in this document. + To make the examples easier to read, they are presented using the + extended CBOR diagnostic notation (defined in [RFC8610]) rather than + as a binary dump. + + The examples are presented using the CBOR diagnostic notation. A + Ruby-based tool exists [CBORDIAG] that can convert between the + diagnostic notation and binary. The referenced webpage includes + installation instructions. + + The diagnostic notation can be converted into binary files using the + following command line: + + diag2cbor.rb < inputfile > outputfile + + 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 + attribute 'type="cbor-diag"'. (Depending on the XPath evaluator one + is using, it may be necessary to deal with > as an entity.) + + //sourcecode[@type='cbor-diag']/text() + + This appendix uses the following terms: + + AES-GCM: AES Galois/Counter Mode + + CEK: content-encryption key + + ECDH: Elliptic Curve Diffie-Hellman + + 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: + + Signature Algorithm: ECDSA with SHA-256, Curve P-256 + + The same header parameters are used for both the signature and the + countersignature. + + The size of the binary file is 180 bytes. + + 98( + [ + / protected / h'', + / unprotected / { + / countersign / 11:[ + / protected h'a10126' / << { + / alg / 1:-7 / ECDSA 256 / + } >>, + / unprotected / { + / kid / 4: '11' + }, + / signature / h'5ac05e289d5d0e1b0a7f048a5d2b643813ded50bc9e4 + 9220f4f7278f85f19d4a77d655c9d3b51e805a74b099e1e085aacd97fc29d72f887e + 8802bb6650cceb2c' + ] + }, + / payload / 'This is the content.', + / signatures / [ + [ + / protected h'a10126' / << { + / alg / 1:-7 / ECDSA 256 / + } >>, + / unprotected / { + / kid / 4: '11' + }, + / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb + 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b + 98f53afd2fa0f30a' + ] + ] + ] + ) + +A.2. Examples of Signed1 Messages + +A.2.1. Countersignature + + This example uses the following: + + Signature Algorithm: ECDSA with SHA-256, Curve P-256 + + Countersignature Algorithm: ECDSA with SHA-512, Curve P-521 + + The size of the binary file is 275 bytes. + + 18( + [ + / protected h'A201260300' / << { + / alg / 1:-7, / ECDSA 256 / + / ctyp / 3:0 + } >>, + / unprotected / { + / kid / 4: '11', + / countersign / 11: [ + / protected h'A1013823' / << { + / alg / 1:-36 / ECDSA 512 / + } >>, + / unprotected / { + / kid / 4: 'bilbo.baggins@hobbiton.example' + }, + / signature / h'01B1291B0E60A79C459A4A9184A0D393E034B34AF069 + A1CCA34F5A913AFFFF698002295FA9F8FCBFB6FDFF59132FC0C406E98754A98F1FBF + E81C03095F481856BC470170227206FA5BEE3C0431C56A66824E7AAF692985952E31 + 271434B2BA2E47A335C658B5E995AEB5D63CF2D0CED367D3E4CC8FFFD53B70D115BA + A9E86961FBD1A5CF' + ] + }, + / payload / 'This is the content.', + / signature / h'BB587D6B15F47BFD54D2CBFCECEF75451E92B08A514BD439 + FA3AA65C6AC92DF0D7328C4A47529B32ADD3DD1B4E940071C021E9A8F2641F1D8E3B + 053DDD65AE52' + ] + ) + +A.3. Examples of Enveloped Messages + +A.3.1. Countersignature on Encrypted Content + + This example uses the following: + + CEK: AES-GCM with 128-bit key + + Recipient Class: ECDH Ephemeral-Static, Curve P-256 + + Countersignature Algorithm: ECDSA with SHA-512, Curve P-521 + + The size of the binary file is 326 bytes. + + 96( + [ + / protected h'a10101' / << { + / alg / 1:1 / AES-GCM 128 / + } >>, + / unprotected / { + / iv / 5:h'c9cf4df2fe6c632bf7886413', + / countersign / 11:[ + / protected h'a1013823' / << { + / alg / 1:-36 / ES512 / + } >>, + / unprotected / { + / kid / 4: 'bilbo.baggins@hobbiton.example' + }, + / signature / h'00929663c8789bb28177ae28467e66377da12302d7f9 + 594d2999afa5dfa531294f8896f2b6cdf1740014f4c7f1a358e3a6cf57f4ed6fb02f + cf8f7aa989f5dfd07f0700a3a7d8f3c604ba70fa9411bd10c2591b483e1d2c31de00 + 3183e434d8fba18f17a4c7e3dfa003ac1cf3d30d44d2533c4989d3ac38c38b71481c + c3430c9d65e7ddff' + ] + }, + / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 + c52a357da7a644b8070a151b0', + / recipients / [ + [ + / protected h'a1013818' / << { + / alg / 1:-25 / ECDH-ES + HKDF-256 / + } >>, + / unprotected / { + / ephemeral / -1:{ + / kty / 1:2, + / crv / -1:1, + / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf + bf054e1c7b4d91d6280', + / y / -3:true + }, + / kid / 4: 'meriadoc.brandybuck@buckland.example' + }, + / ciphertext / h'' + ] + ] + ] + ) + +A.4. Examples of Encrypted Messages + +A.4.1. Countersignature on Encrypted Content + + This example uses the following: + + CEK: AES-GCM with 128-bit key + + Countersignature Algorithm: EdDSA with Curve Ed25519 + + The size of the binary file is 136 bytes. + + 16( + [ + / protected h'A10101' / << { + / alg / 1:1 / AES-GCM 128 / + } >>, + / unprotected / { + / iv / 5: h'02D1F7E6F26C43D4868D87CE', + / countersign / 11: [ + / protected h'A10127' / << { + / alg / 1:-8 / EdDSA with Ed25519 / + } >>, + / unprotected / { + / kid / 4: '11' + }, + / signature / h'E10439154CC75C7A3A5391491F88651E0292FD0FE0E0 + 2CF740547EAF6677B4A4040B8ECA16DB592881262F77B14C1A086C02268B17171CA1 + 6BE4B8595F8C0A08' + ] + }, + / ciphertext / h'60973A94BB2898009EE52ECFD9AB1DD25867374B162E2C0 + 3568B41F57C3CC16F9166250A' + ] + ) + +A.5. Examples of MACed Messages + +A.5.1. Countersignature on MAC Content + + This example uses the following: + + MAC Algorithm: HMAC/SHA-256 with 256-bit key + + Countersignature Algorithm: EdDSA with Curve Ed25519 + + The size of the binary file is 159 bytes. + + 97( + [ + / protected h'A10105' / << { + / alg / 1:5 / HS256 / + } >>, + / unprotected / { + / countersign / 11: [ + / protected h'A10127' / << { + / alg / 1:-8 / EdDSA / + } >>, + / unprotected / { + / kid / 4: '11' + }, + / signature / h'602566F4A311DC860740D2DF54D4864555E85BC036EA + 5A6CF7905B96E499C5F66B01C4997F6A20C37C37543ADEA1D705347D38A5B13594B2 + 9583DD741F455101' + ] + }, + / payload / 'This is the content.', + / tag / h'2BDCC89F058216B8A208DDC6D8B54AA91F48BD63484986565105C9 + AD5A6682F6', + / recipients / [ + [ + / protected / h'', + / unprotected / { + / alg / 1: -6, / direct / + / kid / 4: 'our-secret' + }, + / ciphertext / h'' + ] + ] + ] + ) + +A.6. Examples of MAC0 Messages + +A.6.1. Countersignature on MAC0 Content + + This example uses the following: + + MAC Algorithm: HMAC/SHA-256 with 256-bit key + + Countersignature Algorithm: EdDSA with Curve Ed25519 + + The size of the binary file is 159 bytes. + + 17( + [ + / protected h'A10105' / << { + / alg / 1:5 / HS256 / + } >>, + / unprotected / { + / countersign / 11: [ + / protected h'A10127' / << { + / alg / 1:-8 / EdDSA / + } >>, + / unprotected / { + / kid / 4: '11' + }, + / signature / h'968A315DF6B4F26362E11F4CFD2F2F4E76232F39657B + F1598837FF9332CDDD7581E248116549451F81EF823DA5974F885B681D3D6E38FC41 + 42D8F8E9E7DC8F0D' + ] + }, + / payload / 'This is the content.', + / tag / h'A1A848D3471F9D61EE49018D244C824772F223AD4F935293F1789F + C3A08D8C58' + ] + ) + +Acknowledgments + + This document is a product of the COSE Working Group of the IETF. + + The initial draft version of the specification was based to some + degree on the outputs of the JOSE and S/MIME Working Groups. + + Jim Schaad passed on 3 October 2020. This document is primarily his + work. Russ Housley 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. + + Jim Schaad and Jonathan Hammell provided the examples in Appendix A. + + The reviews by Carsten Bormann, Ben Kaduk, and Elwyn Davies greatly + improved the clarity of the document. + +Author's Address + + Jim Schaad + August Cellars + United States of America |