| rfc9942.original | rfc9942.txt | |||
|---|---|---|---|---|
| COSE O. Steele | Internet Engineering Task Force (IETF) O. Steele | |||
| Internet-Draft Tradeverifyd | Request for Comments: 9942 Tradeverifyd | |||
| Intended status: Standards Track H. Birkholz | Category: Standards Track H. Birkholz | |||
| Expires: 5 June 2026 Fraunhofer SIT | ISSN: 2070-1721 Fraunhofer SIT | |||
| A. Delignat-Lavaud | A. Delignat-Lavaud | |||
| C. Fournet | C. Fournet | |||
| Microsoft | Microsoft | |||
| 2 December 2025 | March 2026 | |||
| COSE (CBOR Object Signing and Encryption) Receipts | CBOR Object Signing and Encryption (COSE) Receipts | |||
| draft-ietf-cose-merkle-tree-proofs-18 | ||||
| Abstract | Abstract | |||
| COSE (CBOR Object Signing and Encryption) Receipts prove properties | CBOR Object Signing and Encryption (COSE) Receipts prove properties | |||
| of a verifiable data structure to a verifier. Verifiable data | of a Verifiable Data Structure (VDS) to a verifier. Verifiable Data | |||
| structures and associated proof types enable security properties, | Structures and associated proof types enable security properties, | |||
| such as minimal disclosure, transparency and non-equivocation. | such as minimal disclosure, transparency, and non-equivocation. | |||
| Transparency helps maintain trust over time, and has been applied to | Transparency helps maintain trust over time and has been applied to | |||
| certificates, end to end encrypted messaging systems, and supply | certificates, end-to-end encrypted messaging systems, and supply | |||
| chain security. This specification enables concise transparency | chain security. This specification enables concise transparency- | |||
| oriented systems, by building on CBOR (Concise Binary Object | oriented systems by building on Concise Binary Object Representation | |||
| Representation) and COSE. The extensibility of the approach is | (CBOR) and COSE. The extensibility of the approach is demonstrated | |||
| demonstrated by providing CBOR encodings for Merkle inclusion and | by providing CBOR encodings for Merkle inclusion and consistency | |||
| consistency proofs. | proofs. | |||
| Discussion Venues | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this document takes place on the CBOR Object Signing | ||||
| and Encryption Working Group mailing list (cose@ietf.org), which is | ||||
| archived at https://mailarchive.ietf.org/arch/browse/cose/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/cose-wg/draft-ietf-cose-merkle-tree-proofs. | ||||
| 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 5 June 2026. | 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/rfc9942. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2026 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 Notation . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Notation | |||
| 2. New COSE Header Parameters . . . . . . . . . . . . . . . . . 3 | 2. New COSE Header Parameters | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Terminology | |||
| 4. Verifiable Data Structures in CBOR . . . . . . . . . . . . . 5 | 4. Verifiable Data Structures in CBOR | |||
| 4.1. Structures . . . . . . . . . . . . . . . . . . . . . . . 5 | 4.1. Structures | |||
| 4.2. Proofs . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4.2. Proofs | |||
| 4.3. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. Usage | |||
| 4.4. Profiles . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.4. Profiles | |||
| 4.4.1. Registration Requirements . . . . . . . . . . . . . . 10 | 4.4.1. Registration Requirements | |||
| 5. RFC9162_SHA256 . . . . . . . . . . . . . . . . . . . . . . . 10 | 5. RFC9162_SHA256 | |||
| 5.1. Verifiable Data Structure . . . . . . . . . . . . . . . . 10 | 5.1. Verifiable Data Structure | |||
| 5.2. Inclusion Proof . . . . . . . . . . . . . . . . . . . . . 10 | 5.2. Inclusion Proof | |||
| 5.2.1. Receipt of Inclusion . . . . . . . . . . . . . . . . 11 | 5.2.1. Receipt of Inclusion | |||
| 5.3. Consistency Proof . . . . . . . . . . . . . . . . . . . . 13 | 5.3. Consistency Proof | |||
| 5.3.1. Receipt of Consistency . . . . . . . . . . . . . . . 13 | 5.3.1. Receipt of Consistency | |||
| 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 15 | 6. Privacy Considerations | |||
| 6.1. Log Length . . . . . . . . . . . . . . . . . . . . . . . 16 | 6.1. Log Length | |||
| 6.2. Header Parameters . . . . . . . . . . . . . . . . . . . . 16 | 6.2. Header Parameters | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 7. Security Considerations | |||
| 7.1. Choice of Signature Algorithms . . . . . . . . . . . . . 16 | 7.1. Choice of Signature Algorithms | |||
| 7.2. Validity Period . . . . . . . . . . . . . . . . . . . . . 16 | 7.2. Validity Period | |||
| 7.3. Status Updates . . . . . . . . . . . . . . . . . . . . . 16 | 7.3. Status Updates | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 8. IANA Considerations | |||
| 8.1. COSE Header Parameter . . . . . . . . . . . . . . . . . . 17 | 8.1. COSE Header Parameter | |||
| 8.2. Verifiable Data Structure Registries . . . . . . . . . . 18 | 8.2. Verifiable Data Structure Registries | |||
| 8.2.1. Expert Review . . . . . . . . . . . . . . . . . . . . 18 | 8.2.1. Expert Review | |||
| 8.2.2. COSE Verifiable Data Structure Algorithms . . . . . . 18 | 8.2.2. Templates and Initial Contents | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 | 9. References | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 9.1. Normative References | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 20 | 9.2. Informative References | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 21 | Acknowledgements | |||
| Appendix A. Implementation Status . . . . . . . . . . . . . . . 22 | Contributors | |||
| A.1. Transmute Prototype . . . . . . . . . . . . . . . . . . . 22 | Authors' Addresses | |||
| Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 1. Introduction | 1. Introduction | |||
| COSE Receipts are signed proofs that include metadata about certain | COSE Receipts are signed proofs that include metadata about certain | |||
| states of a verifiable data structure (VDS) that are true when the | states of a Verifiable Data Structure (VDS) that are true when the | |||
| COSE Receipt was issued. COSE Receipts can include proofs that a | COSE Receipt was issued. COSE Receipts can include proofs that a | |||
| document is in a database (proof of inclusion), that a database is | document is in a database (proof of inclusion), that a database is | |||
| append only (proof of consistency), that a smaller set of statements | append only (proof of consistency), that a smaller set of statements | |||
| are contained in a large set of statements (proof of disclosure, a | are contained in a large set of statements (proof of disclosure, a | |||
| special case of proof of inclusion), or proof that certain data is | special case of proof of inclusion), or that certain data is not yet | |||
| not yet present in a database (proofs of non inclusion). Different | present in a database (proof of non-inclusion). Different VDSs can | |||
| VDS can produce different verifiable data structure proofs (VDP). | produce different Verifiable Data structure Proofs (VDP). The | |||
| The combination of representations of various VDS and VDP can | combination of representations of various VDSs and VDP can | |||
| significantly increase the burden for implementers and create | significantly increase the burden for implementers and create | |||
| interoperability challenges for transparency services. This document | interoperability challenges for transparency services. This document | |||
| describes how to convey VDS and associated VDP types in unified COSE | describes how to convey VDS and associated VDP types in unified COSE | |||
| envelopes. | envelopes. | |||
| 1.1. Requirements Notation | 1.1. Requirements Notation | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. New COSE Header Parameters | 2. New COSE Header Parameters | |||
| This document defines three new COSE header parameters, which are | This document defines three new COSE header parameters, which are | |||
| introduced up-front in this Section and elaborated on later in this | introduced up front in this section and elaborated on later in this | |||
| document. | document. | |||
| TBD_0 (requested assignment 394): A COSE header parameter named | 394: A COSE header parameter named receipts with a value type of | |||
| receipts with a value type of array where the array contains one | array where the array contains one or more COSE Receipts as | |||
| or more COSE Receipts as specified in this document. | specified in this document. | |||
| TBD_1 (requested assignment 395): A COSE header parameter named vds | 395: A COSE header parameter named vds (for Verifiable Data | |||
| (Verifiable Data Structure), which conveys the algorithm | Structure), which conveys the algorithm identifier for a | |||
| identifier for a verifiable data structure. Correspondingly, this | Verifiable Data Structure. Correspondingly, see Section 8.2.2.1 | |||
| document introduces a new registry (Section 8.2.2) defining the | for a registry defining the integers used to identify Verifiable | |||
| integers used to identify verifiable data structures. | Data Structures. | |||
| TBD_2 (requested assignment 396): A COSE header parameter named vdp | 396: A COSE header parameter named vdp (for Verifiable Data | |||
| (short for "verifiable data structure proofs"), which conveys a | Structure Proofs), which conveys a map containing Verifiable Data | |||
| map containing verifiable data structure proofs organized by proof | Structure Proofs organized by proof type. Correspondingly, see | |||
| type. Correspondingly, this document introduces a new registry | Section 8.2.2.2 for a registry defining the integers used to | |||
| (Table 2) defining the integers used to identify verifiable data | identify Verifiable Data Structure proof types. | |||
| structure proof types. | ||||
| 3. Terminology | 3. Terminology | |||
| CDDL: Concise Data Definition Language (CDDL) is defined in | CDDL: Concise Data Definition Language (CDDL) is defined in | |||
| [RFC8610]. | [RFC8610]. | |||
| EDN: CBOR Extended Diagnostic Notation (EDN) is defined in | EDN: CBOR Extended Diagnostic Notation (EDN) is defined in | |||
| [RFC8949], where it is referred to as "diagnostic notation", and | [RFC8949], where it is referred to as "diagnostic notation", and | |||
| is revised in [I-D.draft-ietf-cbor-edn-literals]. | is revised in [CBOR-EDN]. | |||
| Verifiable Data Structure (VDS): A data structure which supports one | Verifiable Data Structure (VDS): A data structure that supports one | |||
| or more Verifiable Data Structure Proof Types. This property | or more Verifiable Data Structure Proof Types. This property | |||
| describes an algorithm used to maintain a verifiable data | describes an algorithm used to maintain a Verifiable Data | |||
| structure, for example a binary Merkle tree algorithm. | Structure, for example, a binary Merkle tree algorithm. | |||
| Verifiable Data Structure Proofs (VDP): A data structure used to | Verifiable Data Structure Proofs (VDP): A data structure used to | |||
| convey proof types for proving different properties, such as | convey proof types for proving different properties, such as | |||
| authentication, inclusion, consistency, and freshness. Parameters | authentication, inclusion, consistency, and freshness. Parameters | |||
| can include multiple proofs of a given type, or multiple types of | can include multiple proofs of a given type or multiple types of | |||
| proof (inclusion and consistency). | proof (inclusion and consistency). | |||
| Proof Type: A property that can be obtained by verifying a given | Proof Type: A property that can be obtained by verifying a given | |||
| proof over one or more entries in a Verifiable Data Structure. | proof over one or more entries in a Verifiable Data Structure. | |||
| For example, a VDS, such as a binary Merkle tree, can support | For example, a VDS, such as a binary Merkle tree, can support | |||
| proofs of type "inclusion" where each proof confirms that a given | proofs of type "inclusion" where each proof confirms that a given | |||
| entry is included in a Merkle root. | entry is included in a Merkle root. | |||
| Proof Value: An encoding of a Proof Type in CBOR [RFC8949]. | Proof Value: An encoding of a Proof Type in CBOR [RFC8949]. | |||
| Entry: An entry in a verifiable data structure for which proofs can | Entry: An entry in a Verifiable Data Structure for which proofs can | |||
| be derived. | be derived. | |||
| Receipt: A COSE object, as defined in [RFC9052], containing the | Receipt: A COSE object, as defined in [RFC9052], containing the | |||
| header parameters necessary to convey VDP for an associated VDS. | header parameters necessary to convey VDP for an associated VDS. | |||
| 4. Verifiable Data Structures in CBOR | 4. Verifiable Data Structures in CBOR | |||
| This section describes representations of verifiable data structure | This section describes representations of Verifiable Data Structure | |||
| proofs in [RFC8949]. For example, construction of a Merkle tree | Proofs in [RFC8949]. For example, construction of a Merkle tree leaf | |||
| leaf, or an inclusion proof from a leaf to a Merkle root, might have | or an inclusion proof from a leaf to a Merkle root might have several | |||
| several different representations, depending on the verifiable data | different representations, depending on the Verifiable Data Structure | |||
| structure used. Differences in representations are necessary to | used. Differences in representations are necessary to support | |||
| support efficient verification, unique security or privacy | efficient verification, unique security or privacy properties, and | |||
| properties, and for compatibility with specific implementations. | for compatibility with specific implementations. This document | |||
| This document defines two extension points for enabling verifiable | defines two extension points for enabling Verifiable Data Structures | |||
| data structures with COSE and provides concrete examples for the | with COSE and provides concrete examples for the structures and | |||
| structures and proofs defined in Section 2.1.3 of [RFC9162] and | proofs defined in Section 2.1.3 of [RFC9162] and Section 2.1.4 of | |||
| Section 2.1.4 of [RFC9162]. The design of these structures is | [RFC9162]. The design of these structures is influenced by the | |||
| influenced by the conventions established for COSE Keys. | conventions established for COSE Keys. | |||
| 4.1. Structures | 4.1. Structures | |||
| Similar to COSE Key Types (https://www.iana.org/assignments/cose/ | Similar to COSE Key Types [IANA.cose_header-parameters], different | |||
| cose.xhtml#key-type), different verifiable data structures support | Verifiable Data Structures support different algorithms. | |||
| different algorithms. | ||||
| This document establishes a registry of verifiable data structure | This document establishes a registry of Verifiable Data Structure | |||
| algorithms, see Section 8.2.2 for details. | algorithms; see Section 8.2.2.1 for details. | |||
| 4.2. Proofs | 4.2. Proofs | |||
| Similar to COSE Key Type Parameters | Similar to COSE Key Type Parameters [IANA.cose_header-parameters], as | |||
| (https://www.iana.org/assignments/cose/cose.xhtml#key-type- | EC2 keys (1: 2) require and give meaning to specific parameters, such | |||
| parameters), as EC2 keys (1: 2) keys require and give meaning to | as -1 (crv), -2 (x), -3 (y), -4 (d), RFC9162_SHA256 (395: 1) supports | |||
| specific parameters, such as -1 (crv), -2 (x), -3 (y), -4 (d), | both (-1) inclusion and (-2) consistency proofs. | |||
| RFC9162_SHA256 (TBD_1 (requested assignment 395) : 1) supports both | ||||
| (-1) inclusion and (-2) consistency proofs. | ||||
| This document establishes a registry of verifiable data structure | This document establishes a registry of Verifiable Data Structure | |||
| algorithm proofs, see Table 2 for details. | Proofs; see Section 8.2.2.2 for details. | |||
| Proof types are specific to their associated "verifiable data | Proof types are specific to their associated "Verifiable Data | |||
| structure", for example, different Merkle trees might support | Structure"; for example, different Merkle trees might support | |||
| different representations of "inclusion proof" or "consistency | different representations of "inclusion proof" or "consistency | |||
| proof". Implementers should not expect interoperability across | proof". Implementers should not expect interoperability across | |||
| "verifiable data structures". Security analysis MUST be conducted | "Verifiable Data Structures". Security analysis MUST be conducted | |||
| prior to migrating to new structures to ensure the new security and | prior to migrating to new structures to ensure the new security and | |||
| privacy assumptions are acceptable for the use case. | privacy assumptions are acceptable for the use case. | |||
| 4.3. Usage | 4.3. Usage | |||
| This document registers a new COSE Header Parameter receipts (TBD_0 | This document registers a new COSE Header Parameter receipts (394) to | |||
| (requested assignment 394)) to enable Receipts to be conveyed in the | enable Receipts to be conveyed in the protected and unprotected | |||
| protected and unprotected headers of COSE Objects. | headers of COSE Objects. | |||
| When the receipts header parameter is present, the verifier MUST | When the receipts header parameter is present, the verifier MUST | |||
| confirm that the associated verifiable data structure and verifiable | confirm that the associated Verifiable Data Structure and Verifiable | |||
| data structure proofs match entries present in the registries | Data Structure Proofs match entries present in the registries | |||
| established in this specification, including values added in | established in this specification, including values added in | |||
| subsequent registrations.. | subsequent registrations. | |||
| Receipts MUST be tagged as COSE_Sign1. | Receipts MUST be tagged as COSE_Sign1. | |||
| The following [RFC8610] definition is provided: | The following definition from [RFC8610] is provided: | |||
| Signature_With_Receipt = #6.18(COSE_Sign1) | Signature_With_Receipt = #6.18(COSE_Sign1) | |||
| cose.label = int / text | cose.label = int / text | |||
| cose.values = any | cose.values = any | |||
| Protected_Header = { | Protected_Header = { | |||
| * cose.label => cose.values | * cose.label => cose.values | |||
| } | } | |||
| skipping to change at page 6, line 44 ¶ | skipping to change at line 254 ¶ | |||
| COSE_Sign1 = [ | COSE_Sign1 = [ | |||
| protected : bstr .cbor Protected_Header, | protected : bstr .cbor Protected_Header, | |||
| unprotected : Unprotected_Header, | unprotected : Unprotected_Header, | |||
| payload : bstr / nil, | payload : bstr / nil, | |||
| signature : bstr | signature : bstr | |||
| ] | ] | |||
| Receipt = Receipt_For_Inclusion / Receipt_For_Consistency | Receipt = Receipt_For_Inclusion / Receipt_For_Consistency | |||
| ; Note the the proof formats shown here are for RFC9162_SHA256. | ; Note the proof formats shown here are for RFC9162_SHA256. | |||
| ; Other verifiable data structures may have different proof formats. | ; Other Verifiable Data Structures may have different proof formats. | |||
| Receipt_For_Inclusion = #6.18(Signed_Inclusion_Proof) | Receipt_For_Inclusion = #6.18(Signed_Inclusion_Proof) | |||
| Signed_Inclusion_Proof = [ | Signed_Inclusion_Proof = [ | |||
| protected : bstr .cbor RFC9162_SHA256_Inclusion_Protected_Header | protected : bstr .cbor RFC9162_SHA256_Inclusion_Protected_Header | |||
| unprotected : RFC9162_SHA256_Inclusion_Unprotected_Header | unprotected : RFC9162_SHA256_Inclusion_Unprotected_Header | |||
| payload : bstr / nil | payload : bstr / nil | |||
| signature : bstr | signature : bstr | |||
| ] | ] | |||
| skipping to change at page 8, line 4 ¶ | skipping to change at line 308 ¶ | |||
| RFC9162_SHA256_Consistency_Protected_Header = { | RFC9162_SHA256_Consistency_Protected_Header = { | |||
| &(alg: 1) => int, | &(alg: 1) => int, | |||
| &(vds: 395) => int, | &(vds: 395) => int, | |||
| * cose.label => cose.values | * cose.label => cose.values | |||
| } | } | |||
| RFC9162_SHA256_Consistency_Unprotected_Header = { | RFC9162_SHA256_Consistency_Unprotected_Header = { | |||
| &(vdp: 396) => RFC9162_SHA256_Verifiable_Consistency_Proofs | &(vdp: 396) => RFC9162_SHA256_Verifiable_Consistency_Proofs | |||
| * cose.label => cose.values | * cose.label => cose.values | |||
| } | } | |||
| RFC9162_SHA256_Verifiable_Consistency_Proofs = { | RFC9162_SHA256_Verifiable_Consistency_Proofs = { | |||
| &(consistency-proof: -2) => RFC9162_SHA256_Consistency_Proofs | &(consistency-proof: -2) => RFC9162_SHA256_Consistency_Proofs | |||
| } | } | |||
| RFC9162_SHA256_Consistency_Proofs = [ + RFC9162_SHA256_Consistency_Proof ] | RFC9162_SHA256_Consistency_Proofs = [ + RFC9162_SHA256_Consistency_Proof ] | |||
| RFC9162_SHA256_Consistency_Proof = bstr .cbor [ | RFC9162_SHA256_Consistency_Proof = bstr .cbor [ | |||
| tree_size_1: uint, | tree_size_1: uint, | |||
| tree_size_2: uint, | tree_size_2: uint, | |||
| consistency_path: [ + bstr ] | consistency_path: [ + bstr ] | |||
| ] | ] | |||
| Figure 1: CDDL for a COSE Sign1 with attached receipts | Figure 1: CDDL for a COSE Sign1 with Attached Receipts | |||
| The following informative EDN is provided: | The following informative EDN is provided: | |||
| / cose-sign1 / 18([ | / cose-sign1 / 18([ | |||
| / protected / <<{ | / protected / <<{ | |||
| / kid / 4 : h'bc297b51...e4edf0de', | / kid / 4 : h'bc297b51...e4edf0de', | |||
| / algorithm / 1 : -7, # ES256 | / algorithm / 1 : -7, # ES256 | |||
| }>>, | }>>, | |||
| / unprotected / { | / unprotected / { | |||
| / receipts / 394 : { | / receipts / 394 : { | |||
| skipping to change at page 9, line 27 ¶ | skipping to change at line 379 ¶ | |||
| }, | }, | |||
| / payload / null, | / payload / null, | |||
| / signature / h'36581f38...a5581960' | / signature / h'36581f38...a5581960' | |||
| ])>> | ])>> | |||
| }, | }, | |||
| }, | }, | |||
| / payload / h'0167c57c...deeed6d4', | / payload / h'0167c57c...deeed6d4', | |||
| / signature / h'2544f2ed...5840893b' | / signature / h'2544f2ed...5840893b' | |||
| ]) | ]) | |||
| Figure 2: An example COSE Signature with multiple receipts | Figure 2: An Example COSE Signature with Multiple Receipts | |||
| The specific structure of COSE Receipts is dependent on the structure | The specific structure of COSE Receipts is dependent on the structure | |||
| of the COSE_Sign1 payload and the verifiable data structure proofs | of the COSE_Sign1 payload and the Verifiable Data Structure Proofs | |||
| contained in the COSE_Sign1 unprotected header. The CDDL definition | contained in the COSE_Sign1 unprotected header. The CDDL definition | |||
| for verifiable data structure proofs is specific to each verifiable | for Verifiable Data Structure Proofs is specific to each Verifiable | |||
| data structure. This document describes proofs for RFC9162_SHA256 in | Data Structure. This document describes proofs for RFC9162_SHA256 in | |||
| the following sections. | the following sections. | |||
| 4.4. Profiles | 4.4. Profiles | |||
| New verifiable data structures can require the definition of a | New Verifiable Data Structures can require the definition of a | |||
| profile. The payload in such definitions SHOULD be detached. | profile. The payload in such definitions SHOULD be detached. | |||
| Detached payloads force verifiers to recompute the root from the | Detached payloads force verifiers to recompute the root from the | |||
| proof and protect against implementation errors where the signature | proof and protect against implementation errors where the signature | |||
| is verified but the payload is incompatible with the proof. Profiles | is verified but the payload is incompatible with the proof. Profiles | |||
| of proof signatures that define additional protected header | of proof signatures that define additional protected header | |||
| parameters are encouraged to make their presence mandatory to ensure | parameters are encouraged to make their presence mandatory to ensure | |||
| that claims are processed with their intended semantics. One way to | that claims are processed with their intended semantics. One way to | |||
| include this information in the COSE structure is use of the typ | include this information in the COSE structure is use of the typ | |||
| (type) Header Parameter, see [RFC9596] and the similar guidance | (type) Header Parameter; see [RFC9596] and the similar guidance | |||
| provided in [RFC9597]. | provided in [RFC9597]. | |||
| 4.4.1. Registration Requirements | 4.4.1. Registration Requirements | |||
| Each verifiable data structure specification applying for inclusion | Each Verifiable Data Structure specification applying for inclusion | |||
| in this registry MUST define how to encode the verifiable data | in this registry MUST define how to encode the Verifiable Data | |||
| structure identifier and its proof types in CBOR. Each specification | Structure identifier and its proof types in CBOR. Each specification | |||
| MUST define how to produce and consume the supported proof types. | MUST define how to produce and consume the supported proof types. | |||
| See Section 5 as an example. | See Section 5 as an example. | |||
| Where a specification supports a choice of hash algorithm, a separate | Where a specification supports a choice of hash algorithm, a separate | |||
| IANA registration must be made for each supported algorithm. For | IANA registration must be made for each supported algorithm. For | |||
| example, to provide support for SHA256 and SHA3_256 with Merkle | example, to provide support for SHA256 and SHA3_256 with Merkle | |||
| Consistency and Inclusion Proofs defined respectively in | Inclusion Proofs and Merkle Consistency Proofs defined, respectively, | |||
| Section 2.1.3 of [RFC9162] and Section 2.1.4 of [RFC9162], both | in Section 2.1.3 of [RFC9162] and Section 2.1.4 of [RFC9162], both | |||
| "RFC9162_SHA256" and "RFC9162_SHA3_256" require entries in the | "RFC9162_SHA256" and "RFC9162_SHA3_256" require entries in the | |||
| relevant IANA registries. This document only defines | relevant IANA registries. This document only defines | |||
| "RFC9162_SHA256". | "RFC9162_SHA256". | |||
| 5. RFC9162_SHA256 | 5. RFC9162_SHA256 | |||
| This section defines how the data structure described in Section 2.1 | This section defines how the data structure described in Section 2.1 | |||
| of [RFC9162] is mapped to the terminology defined in this document, | of [RFC9162] is mapped to the terminology defined in this document, | |||
| using [RFC8949] and [RFC9053]. | using [RFC8949] and [RFC9053]. | |||
| 5.1. Verifiable Data Structure | 5.1. Verifiable Data Structure | |||
| The integer identifier for this Verifiable Data Structure is 1. The | The integer identifier for this Verifiable Data Structure is 1. The | |||
| string identifier for this Verifiable Data Structure is | string identifier for this Verifiable Data Structure is | |||
| "RFC9162_SHA256", a Merkle Tree where SHA256 is used as the hash | "RFC9162_SHA256", a Merkle Tree where SHA256 is used as the hash | |||
| algorithm. See Table 2. See Section 2.1.1 of [RFC9162] (Definition | algorithm (see Table 2). See Section 2.1.1 of [RFC9162] for a | |||
| of the Merkle Tree), for a complete description of this verifiable | complete description of this Verifiable Data Structure. | |||
| data structure. | ||||
| 5.2. Inclusion Proof | 5.2. Inclusion Proof | |||
| See Section 2.1.3.1 of [RFC9162] (Generating an Inclusion Proof), for | See Section 2.1.3.1 of [RFC9162] for a complete description of this | |||
| a complete description of this verifiable data structure proof type. | Verifiable Data Structure Proof type. | |||
| The CBOR representation of an inclusion proof for RFC9162_SHA256 is: | The CBOR representation of an inclusion proof for RFC9162_SHA256 is: | |||
| inclusion-proof = bstr .cbor [ | inclusion-proof = bstr .cbor [ | |||
| ; tree size at current Merkle root | ; tree size at current Merkle root | |||
| tree-size: uint | tree-size: uint | |||
| ; index of leaf in tree | ; index of leaf in tree | |||
| leaf-index: uint | leaf-index: uint | |||
| ; path from leaf to current Merkle root | ; path from leaf to current Merkle root | |||
| inclusion-path: [ + bstr ] | inclusion-path: [ + bstr ] | |||
| ] | ] | |||
| Figure 3: CBOR Encoded RFC9162 Inclusion Proof | Figure 3: CBOR-Encoded Inclusion Proof for RFC9162_SHA256 | |||
| The term leaf-index is used for alignment with the use established in | The term leaf-index is used for alignment with the use established in | |||
| Section 2.1.3.2 of [RFC9162]. | Section 2.1.3.2 of [RFC9162]. | |||
| Note that [RFC9162] defines inclusion proofs only for leaf nodes, and | Note that [RFC9162] defines inclusion proofs only for leaf nodes, and | |||
| that: | that: | |||
| If leaf_index is greater than or equal to tree_size, then fail the | | If leaf_index is greater than or equal to tree_size, then fail the | |||
| proof verification. | | proof verification. | |||
| The identifying index of a leaf node is relative to all nodes in the | The identifying index of a leaf node is relative to all nodes in the | |||
| tree size for which the proof was obtained. | tree size for which the proof was obtained. | |||
| 5.2.1. Receipt of Inclusion | 5.2.1. Receipt of Inclusion | |||
| In a signed inclusion proof, the payload is the Merkle tree root that | In a signed inclusion proof, the payload is the Merkle tree root that | |||
| corresponds to the log at size tree-size. The protected header for | corresponds to the log at size tree-size. The protected header for | |||
| an RFC9162_SHA256 inclusion proof signature is: | an RFC9162_SHA256 inclusion proof signature is: | |||
| protected-header-map = { | protected-header-map = { | |||
| &(alg: 1) => int | &(alg: 1) => int | |||
| &(vds: 395) => int | &(vds: 395) => int | |||
| * cose-label => cose-value | * cose-label => cose-value | |||
| } | } | |||
| Figure 4: Protected Header for a Receipt of Inclusion | Figure 4: Protected Header for a Receipt of Inclusion | |||
| * alg (label: 1): REQUIRED. Signature algorithm identifier. Value | alg (label: 1): REQUIRED. Signature algorithm identifier. Value | |||
| type: int. | type: int. | |||
| * vds (label: TBD_1 (requested assignment 395)): REQUIRED. | vds (label: 395): REQUIRED. Verifiable Data Structure algorithm | |||
| Verifiable data structure algorithm identifier. Value type: int. | identifier. Value type: int. | |||
| The unprotected header for an RFC9162_SHA256 inclusion proof | The unprotected header for an RFC9162_SHA256 inclusion proof | |||
| signature is: | signature is: | |||
| inclusion-proofs = [ + inclusion-proof ] | inclusion-proofs = [ + inclusion-proof ] | |||
| verifiable-proofs = { | verifiable-proofs = { | |||
| &(inclusion-proof: -1) => inclusion-proofs | &(inclusion-proof: -1) => inclusion-proofs | |||
| } | } | |||
| unprotected-header-map = { | unprotected-header-map = { | |||
| &(vdp: 396) => verifiable-proofs | &(vdp: 396) => verifiable-proofs | |||
| * cose-label => cose-value | * cose-label => cose-value | |||
| } | } | |||
| Figure 5: A Verifiable Data Structure Proofs in an Unprotected Header | Figure 5: A Verifiable Data Structure Proofs in an Unprotected Header | |||
| * vdp (label: TBD_2 (requested assignment 396)): REQUIRED. | vdp (label: 396): REQUIRED. Verifiable Data Structure Proofs. | |||
| Verifiable data structure proofs. Value type: Map. | Value type: Map. | |||
| * inclusion-proof (label: -1): REQUIRED. Inclusion proofs. Value | inclusion-proof (label: -1): REQUIRED. Inclusion proofs. Value | |||
| type: Array of bstr. | type: Array of bstr. | |||
| The payload of an RFC9162_SHA256 inclusion proof signature is the | The payload of an RFC9162_SHA256 inclusion proof signature is the | |||
| Merkle tree hash as defined in [RFC9162]. | Merkle tree hash as defined in [RFC9162]. | |||
| An EDN example for a Receipt containing an inclusion proof for | An EDN example for a Receipt containing an inclusion proof for | |||
| RFC9162_SHA256 with a detached payload (see Section 4.4) is: | RFC9162_SHA256 with a detached payload (see Section 4.4) is: | |||
| / cose-sign1 / 18([ | / cose-sign1 / 18([ | |||
| / protected / <<{ | / protected / <<{ | |||
| skipping to change at page 13, line 8 ¶ | skipping to change at line 541 ¶ | |||
| }, | }, | |||
| / payload / null, | / payload / null, | |||
| / signature / h'de24f0cc...9a5ade89' | / signature / h'de24f0cc...9a5ade89' | |||
| ]) | ]) | |||
| Figure 6: Receipt of Inclusion | Figure 6: Receipt of Inclusion | |||
| The VDS in the protected header is necessary to understand the | The VDS in the protected header is necessary to understand the | |||
| inclusion proof structure in the unprotected header. | inclusion proof structure in the unprotected header. | |||
| The inclusion proof and signature are verified in order. First the | The inclusion proof and signature are verified in order. First, the | |||
| verifier applies the inclusion proof to a possible entry (set member) | verifier applies the inclusion proof to a possible entry (set member) | |||
| bytes. If this process fails, the inclusion proof may have been | bytes. If this process fails, the inclusion proof may have been | |||
| tampered with. If this process succeeds, the result is a Merkle | tampered with. If this process succeeds, the result is a Merkle | |||
| root, which in the attached as the COSE Sign1 payload. Second the | root, which in the attached as the COSE Sign1 payload. Second, the | |||
| verifier checks the signature of the COSE Sign1. If the resulting | verifier checks the signature of the COSE Sign1. If the resulting | |||
| signature verifies, the Receipt has proved inclusion of the entry in | signature can be verified, the Receipt has proved inclusion of the | |||
| the verifiable data structure. If the resulting signature does not | entry in the Verifiable Data Structure. If the resulting signature | |||
| verify, the signature may have been tampered with. | cannot be verified, the signature may have been tampered with. | |||
| 5.3. Consistency Proof | 5.3. Consistency Proof | |||
| See Section 2.1.4.1 of [RFC9162] (Generating a Consistency Proof), | See Section 2.1.4.1 of [RFC9162] for a complete description of this | |||
| for a complete description of this verifiable data structure proof | Verifiable Data Structure Proof type. | |||
| type. | ||||
| The cbor representation of a consistency proof for RFC9162_SHA256 is: | The cbor representation of a consistency proof for RFC9162_SHA256 is: | |||
| consistency-proof = bstr .cbor [ | consistency-proof = bstr .cbor [ | |||
| ; older Merkle root tree size | ; older Merkle root tree size | |||
| tree-size-1: uint | tree-size-1: uint | |||
| ; newer Merkle root tree size | ; newer Merkle root tree size | |||
| tree-size-2: uint | tree-size-2: uint | |||
| ; path from older Merkle root to newer Merkle root. | ; path from older Merkle root to newer Merkle root. | |||
| consistency-path: [ + bstr ] | consistency-path: [ + bstr ] | |||
| ] | ] | |||
| Figure 7: CBOR Encoded RFC9162 Consistency Proof | Figure 7: CBOR-Encoded Consistency Proof for RFC9162_SHA256 | |||
| 5.3.1. Receipt of Consistency | 5.3.1. Receipt of Consistency | |||
| In a signed consistency proof, the newer Merkle tree root (proven to | In a signed consistency proof, the newer Merkle tree root (proven to | |||
| be consistent with an older Merkle tree root) is an attached payload | be consistent with an older Merkle tree root), is an attached payload | |||
| and corresponds to the log at size tree-size-2. | and corresponds to the log at size tree-size-2. | |||
| The protected header for an RFC9162_SHA256 consistency proof | The protected header for an RFC9162_SHA256 consistency proof | |||
| signature is: | signature is: | |||
| protected-header-map = { | protected-header-map = { | |||
| &(alg: 1) => int | &(alg: 1) => int | |||
| &(vds: 395) => int | &(vds: 395) => int | |||
| * cose-label => cose-value | * cose-label => cose-value | |||
| } | } | |||
| Figure 8: Protected Header for a Receipt of Consistency | Figure 8: Protected Header for a Receipt of Consistency | |||
| * alg (label: 1): REQUIRED. Signature algorithm identifier. Value | alg (label: 1): REQUIRED. Signature algorithm identifier. Value | |||
| type: int. | type: int. | |||
| * vds (label: TBD_1 (requested assignment 395)): REQUIRED. | vds (label: 395): REQUIRED. Verifiable Data Structure algorithm | |||
| Verifiable data structure algorithm identifier. Value type: int. | identifier. Value type: int. | |||
| The unprotected header for an RFC9162_SHA256 consistency proof | The unprotected header for an RFC9162_SHA256 consistency proof | |||
| signature is: | signature is: | |||
| consistency-proofs = [ + consistency-proof ] | consistency-proofs = [ + consistency-proof ] | |||
| verifiable-proofs = { | verifiable-proofs = { | |||
| &(consistency-proof: -2) => consistency-proofs | &(consistency-proof: -2) => consistency-proofs | |||
| } | } | |||
| unprotected-header-map = { | unprotected-header-map = { | |||
| &(vdp: 396) => verifiable-proofs | &(vdp: 396) => verifiable-proofs | |||
| * cose-label => cose-value | * cose-label => cose-value | |||
| } | } | |||
| * vdp (label: TBD_2 (requested assignment 396)): REQUIRED. | vdp (label: 396): REQUIRED. Verifiable Data Structure Proofs. | |||
| Verifiable data structure proofs. Value type: Map. | Value type: Map. | |||
| * consistency-proof (label: -2): REQUIRED. Consistency proofs. | consistency-proof (label: -2): REQUIRED. Consistency proofs. Value | |||
| Value type: Array of bstr. | type: Array of bstr. | |||
| The payload of an RFC9162_SHA256 consistency proof signature is: The | The payload of an RFC9162_SHA256 consistency proof signature is: The | |||
| newer Merkle tree hash as defined in [RFC9162]. | newer Merkle tree hash as defined in [RFC9162]. | |||
| An example EDN for a Receipt containing a consistency proof for | An EDN example for a Receipt containing a consistency proof for | |||
| RFC9162_SHA256 with a detached payload (see Section 4.4) is: | RFC9162_SHA256 with a detached payload (see Section 4.4) is: | |||
| / cose-sign1 / 18([ | / cose-sign1 / 18([ | |||
| / protected / <<{ | / protected / <<{ | |||
| / algorithm / 1 : -7, # ES256 | / algorithm / 1 : -7, # ES256 | |||
| / vds / 395 : 1, # RFC9162 SHA-256 | / vds / 395 : 1, # RFC9162 SHA-256 | |||
| }>>, | }>>, | |||
| / unprotected / { | / unprotected / { | |||
| / proofs / 396 : { | / proofs / 396 : { | |||
| / consistency / -2 : [ | / consistency / -2 : [ | |||
| skipping to change at page 15, line 30 ¶ | skipping to change at line 647 ¶ | |||
| h'249efab6...b7614ccd', | h'249efab6...b7614ccd', | |||
| h'85dd6293...38914dc1' | h'85dd6293...38914dc1' | |||
| ]>> | ]>> | |||
| ], | ], | |||
| }, | }, | |||
| }, | }, | |||
| / payload / null, | / payload / null, | |||
| / signature / h'94469f73...52de67a1' | / signature / h'94469f73...52de67a1' | |||
| ]) | ]) | |||
| Figure 9: Example consistency receipt | Figure 9: Example Consistency Receipt | |||
| The VDS in the protected header is necessary to understand the | The VDS in the protected header is necessary to understand the | |||
| consistency proof structure in the unprotected header. | consistency proof structure in the unprotected header. | |||
| The signature and consistency proof are verified in order. | The signature and consistency proof are verified in order. | |||
| First the verifier checks the signature on the COSE Sign1. If the | First, the verifier checks the signature on the COSE Sign1. If the | |||
| verification fails, the consistency proof is not checked. Second the | verification fails, the consistency proof is not checked. Second, | |||
| consistency proof is checked by applying a previous inclusion proof, | the consistency proof is checked by applying a previous inclusion | |||
| to the consistency proof. If the verification fails, the append only | proof to the consistency proof. If the verification fails, the | |||
| property of the verifiable data structure is not assured. This | append only property of the Verifiable Data Structure is not assured. | |||
| approach is specific to RFC9162_SHA256, different verifiable data | This approach is specific to RFC9162_SHA256; different Verifiable | |||
| structures may not support consistency proofs. It is recommended | Data Structures may not support consistency proofs. It is | |||
| that implementations return a single boolean result for Receipt | recommended that implementations return a single boolean result for | |||
| verification operations, to reduce the chance of accepting a valid | Receipt-verification operations to reduce the chance of accepting a | |||
| signature over an invalid consistency proof. | valid signature over an invalid consistency proof. | |||
| 6. Privacy Considerations | 6. Privacy Considerations | |||
| The privacy considerations section of [RFC9162] and [RFC9053] apply | The privacy considerations section of [RFC9162] and [RFC9053] apply | |||
| to this document. | to this document. | |||
| 6.1. Log Length | 6.1. Log Length | |||
| Some structures and proofs leak the size of the log at the time of | Some structures and proofs leak the size of the log at the time of | |||
| inclusion. In the case that a log only stores certain kinds of | inclusion. In the case that a log only stores certain kinds of | |||
| skipping to change at page 16, line 23 ¶ | skipping to change at line 688 ¶ | |||
| 6.2. Header Parameters | 6.2. Header Parameters | |||
| Additional header parameters can reveal information about the | Additional header parameters can reveal information about the | |||
| transparency service or its log entries. The receipt producer MUST | transparency service or its log entries. The receipt producer MUST | |||
| perform a privacy analysis for all mandatory fields in profiles based | perform a privacy analysis for all mandatory fields in profiles based | |||
| on this specification. | on this specification. | |||
| 7. Security Considerations | 7. Security Considerations | |||
| See the security considerations section of: | See the Security Considerations sections of: | |||
| * [RFC9162] | * [RFC9162] | |||
| * [RFC9053] | * [RFC9053] | |||
| 7.1. Choice of Signature Algorithms | 7.1. Choice of Signature Algorithms | |||
| A security analysis ought to be performed to ensure that the digital | A security analysis ought to be performed to ensure that the digital | |||
| signature algorithm alg has the appropriate strength to secure | signature algorithm alg has the appropriate strength to secure | |||
| receipts. | receipts. | |||
| It is recommended to select signature algorithms that share | It is recommended to select signature algorithms that share | |||
| cryptographic components with the verifiable data structure used, for | cryptographic components with the Verifiable Data Structure used; for | |||
| example: Both RFC9162_SHA256 and ES256 depend on the sha-256 hash | example, both RFC9162_SHA256 and ES256 depend on the sha-256 hash | |||
| function. | function. | |||
| 7.2. Validity Period | 7.2. Validity Period | |||
| In some cases, receipts MAY include strict validity periods, for | In some cases, receipts MAY include strict validity periods, for | |||
| example, activation not too far in the future, or expiration, not too | example, activation not too far in the future or expiration not too | |||
| far in the past. See the iat, nbf, and exp claims in [RFC8392], for | far in the past. See the iat, nbf, and exp claims in [RFC8392] for | |||
| one way to accomplish this. The details of expressing validity | one way to accomplish this. The details of expressing validity | |||
| periods are out of scope for this document. | periods are out of scope for this document. | |||
| 7.3. Status Updates | 7.3. Status Updates | |||
| In some cases, receipts should be "revocable" or "suspendible", after | In some cases, receipts should be "revocable" or "suspendable" after | |||
| being issued, regardless of their validity period. The details of | being issued, regardless of their validity period. The details of | |||
| expressing statuses are out of scope for this document. | expressing statuses are out of scope for this document. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| 8.1. COSE Header Parameter | 8.1. COSE Header Parameter | |||
| IANA is requested to add the COSE header parameters defined in | IANA has added the COSE header parameters defined in Section 2, and | |||
| Section 2, as listed in Table 1, to the "COSE Header Parameters" | as listed in Table 1, to the "COSE Header Parameters" subregistry | |||
| registry [IANA.cose_header-parameters] in the 'Integer values from | [IANA.cose_header-parameters] in the "CBOR Object Signing and | |||
| 256 to 65535' range ('Specification Required' Registration | Encryption (COSE)" registry group. These COSE header parameters fall | |||
| Procedure). The Value Registry for "vds" is the COSE Verifiable Data | in the 'Integer values from 256 to 65535' range (with a Specification | |||
| Structure registry. The map labels in the "vdp" are assigned from | Required registration procedure (see [RFC8126])). The Value Registry | |||
| the COSE Verifiable Data Structure Proofs registry. | listed for "vds" is the "COSE Verifiable Data Structure Algorithm" | |||
| subregistry. The map labels in the "vdp" are assigned from the "COSE | ||||
| Verifiable Data Structure Proofs" subregistry. | ||||
| +========+=============+=====+============+=============+=========+ | +==========+=======+=======+============+==============+===========+ | |||
| |Name | Label |Value| Value | Description |Reference| | | Name | Label | Value | Value | Description | Reference | | |||
| | | |Type | Registry | | | | | | | Type | Registry | | | | |||
| +========+=============+=====+============+=============+=========+ | +==========+=======+=======+============+==============+===========+ | |||
| |receipts| TBD_0 |array| | Priority |RFCthis, | | | receipts | 394 | array | | Priority | RFC 9942, | | |||
| | | (requested | | | ordered |Section 2| | | | | | | ordered | Section 2 | | |||
| | | assignment: | | | sequence of | | | | | | | | sequence of | | | |||
| | | 394) | | | CBOR | | | | | | | | CBOR encoded | | | |||
| | | | | | encoded | | | | | | | | Receipts | | | |||
| | | | | | Receipts | | | +----------+-------+-------+------------+--------------+-----------+ | |||
| +--------+-------------+-----+------------+-------------+---------+ | | vds | 395 | int | COSE | Algorithm | RFC 9942, | | |||
| |vds | TBD_1 |int | COSE | Algorithm |RFCthis, | | | | | | Verifiable | identifier | Section 2 | | |||
| | | (requested | | Verifiable | identifier |Section 2| | | | | | Data | for | | | |||
| | | assignment: | | Data | for | | | | | | | Structure | Verifiable | | | |||
| | | 395) | | Structure | verifiable | | | | | | | | Data | | | |||
| | | | | | data | | | | | | | | Structures | | | |||
| | | | | | structures, | | | | | | | | that is used | | | |||
| | | | | | used to | | | | | | | | to produce | | | |||
| | | | | | produce | | | | | | | | Verifiable | | | |||
| | | | | | verifiable | | | | | | | | Data | | | |||
| | | | | | data | | | | | | | | Structure | | | |||
| | | | | | structure | | | | | | | | Proofs | | | |||
| | | | | | proofs | | | +----------+-------+-------+------------+--------------+-----------+ | |||
| +--------+-------------+-----+------------+-------------+---------+ | | vdp | 396 | map | map key in | Location for | RFC 9942, | | |||
| |vdp | TBD_2 |map | map key in | Location |RFCthis, | | | | | | COSE | Verifiable | Section 2 | | |||
| | | (requested | | COSE | for |Section 2| | | | | | Verifiable | Data | | | |||
| | | assignment: | | Verifiable | verifiable | | | | | | | Data | Structure | | | |||
| | | 396) | | Data | data | | | | | | | Structure | Proofs in | | | |||
| | | | | Structure | structure | | | | | | | Proofs | COSE Header | | | |||
| | | | | Proofs | proofs in | | | | | | | | Parameters | | | |||
| | | | | | COSE Header | | | +----------+-------+-------+------------+--------------+-----------+ | |||
| | | | | | Parameters | | | ||||
| +--------+-------------+-----+------------+-------------+---------+ | ||||
| Table 1: Newly registered COSE Header Parameters | Table 1: Newly Registered COSE Header Parameters | |||
| 8.2. Verifiable Data Structure Registries | 8.2. Verifiable Data Structure Registries | |||
| IANA established the COSE Verifiable Data Structure Algorithms and | IANA established the "COSE Verifiable Data Structure Algorithms" and | |||
| COSE Verifiable Data Structure Proofs registries under a | "COSE Verifiable Data Structure Proofs" subregistries under a | |||
| Specification Required policy as described in Section 4.6 of | Specification Required policy as described in Section 4.6 of | |||
| [RFC8126]. | [RFC8126]. | |||
| 8.2.1. Expert Review | 8.2.1. Expert Review | |||
| Expert reviewers should take into consideration the following points: | Expert reviewers (see [RFC8126]) should take into consideration the | |||
| following points: | ||||
| * Experts are advised to assign the next available positive integer | * Experts are advised to assign the next available positive integer | |||
| for verifiable data structures. | for Verifiable Data Structures. | |||
| * Point squatting should be discouraged. Reviewers are encouraged | * Point squatting should be discouraged. Reviewers are encouraged | |||
| to get sufficient information for registration requests to ensure | to get sufficient information for registration requests to ensure | |||
| that the usage is not going to duplicate one that is already | that the usage is not going to duplicate one that is already | |||
| registered, and that the point is likely to be used in | registered and that the point is likely to be used in deployments. | |||
| deployments. | ||||
| * Specifications are required for all point assignments. Early | * Specifications are required for all point assignments. early | |||
| Allocation is permissible, see Section 2 of [RFC7120]. | allocation is permissible, see Section 2 of [RFC7120]. | |||
| * It is not permissible to assign points in COSE Verifiable Data | * It is not permissible to assign points in COSE Verifiable Data | |||
| Structure Algorithms, for which no corresponding COSE Verifiable | Structure Algorithms for which no corresponding COSE Verifiable | |||
| Data Structure Proofs entry exists, and vice versa. | Data Structure Proofs entry exists, and vice versa. | |||
| * The Change Controller for related registrations of structures and | * The change controller for related registrations of structures and | |||
| proofs should be the same. | proofs should be the same. | |||
| 8.2.2. COSE Verifiable Data Structure Algorithms | 8.2.2. Templates and Initial Contents | |||
| Registration Template: | 8.2.2.1. COSE Verifiable Data Structure Algorithms Registry | |||
| * Name: This is a descriptive name for the verifiable data structure | Registration Template: | |||
| that enables easier reference to the item. | Name: | |||
| This is a descriptive name for the Verifiable Data Structure | ||||
| that enables easier reference to the item. | ||||
| * Value: This is the value used to identify the verifiable data | Value: | |||
| structure. | This is the value used to identify the Verifiable Data | |||
| Structure. | ||||
| * Description: This field contains a brief description of the | Description: | |||
| verifiable data structure. | This field contains a brief description of the Verifiable Data | |||
| Structure. | ||||
| * Reference: This contains a pointer to the public specification for | Reference: | |||
| the verifiable data structure. | This contains a pointer to the public specification for the | |||
| Verifiable Data Structure. | ||||
| * Change Controller: For Standards Track RFCs, list the "IETF". For | Change Controller: | |||
| others, give the name of the responsible party. Other details | For Standards Track RFCs, list the "IETF". For others, give | |||
| (e.g., postal address, email address, home page URI) may also be | the name of the responsible party. Other details (e.g., postal | |||
| included. | address, email address, home page URI) may also be included. | |||
| Initial contents: | +================+=======+===============+============+===========+ | |||
| | Name | Value | Description | Change | Reference | | ||||
| | | | | Controller | | | ||||
| +================+=======+===============+============+===========+ | ||||
| | Reserved | 0 | Reserved | | RFC 9942 | | ||||
| +----------------+-------+---------------+------------+-----------+ | ||||
| | RFC9162_SHA256 | 1 | SHA256 Binary | IETF | Section | | ||||
| | | | Merkle Tree | | 2.1 of | | ||||
| | | | | | [RFC9162] | | ||||
| +----------------+-------+---------------+------------+-----------+ | ||||
| +================+=======+===========================+==============+ | Table 2: COSE Verifiable Data Structure Algorithms Initial | |||
| | Name | Value | Description | Reference | | Registry Contents | |||
| +================+=======+===========================+==============+ | ||||
| | Reserved | 0 | Reserved | Reserved | | ||||
| +----------------+-------+---------------------------+--------------+ | ||||
| | RFC9162_SHA256 | 1 | SHA256 Binary | Section 2.1 | | ||||
| | | | Merkle Tree | of [RFC9162] | | ||||
| +----------------+-------+---------------------------+--------------+ | ||||
| Table 2: COSE Verifiable Data Structure Algorithms | 8.2.2.2. COSE Verifiable Data Structure Proofs Registry | |||
| Registration Template: | Registration Template: | |||
| Verifiable Data Structure: | ||||
| This value used identifies the related Verifiable Data | ||||
| Structure. | ||||
| * Verifiable Data Structure: This value used identifies the related | Name: | |||
| verifiable data structure. | This is a descriptive name for the proof type that enables | |||
| easier reference to the item. | ||||
| * Name: This is a descriptive name for the proof type that enables | ||||
| easier reference to the item. | ||||
| * Label: This is the value used to identify the verifiable data | ||||
| structure proof type. | ||||
| * CBOR Type: This contains the CBOR type for the value portion of | ||||
| the label. | ||||
| * Description: This field contains a brief description of the proof | ||||
| type. | ||||
| * Reference: This contains a pointer to the public specification for | Label: | |||
| the proof type. | This is the value used to identify the Verifiable Data | |||
| Structure Proof type. | ||||
| * Change Controller: For Standards Track RFCs, list the "IETF". For | CBOR Type: | |||
| others, give the name of the responsible party. Other details | This contains the CBOR type for the value portion of the label. | |||
| (e.g., postal address, email address, home page URI) may also be | ||||
| included. | ||||
| Initial contents: | Description: | |||
| This field contains a brief description of the proof type. | ||||
| +============+=============+=====+=======+=============+===========+ | Reference: | |||
| | Verifiable | Name |Label| CBOR | Description | Reference | | This contains a pointer to the public specification for the | |||
| | Data | | | Type | | | | proof type. | |||
| | Structure | | | | | | | ||||
| +============+=============+=====+=======+=============+===========+ | ||||
| | 1 | inclusion |-1 | array | Proof of | RFCthis, | | ||||
| | | proofs | | (of | inclusion | Section | | ||||
| | | | | bstr) | | 5.2 | | ||||
| +------------+-------------+-----+-------+-------------+-----------+ | ||||
| | 1 | consistency |-2 | array | Proof of | RFCthis, | | ||||
| | | proofs | | (of | append only | Section | | ||||
| | | | | bstr) | property | 5.3 | | ||||
| +------------+-------------+-----+-------+-------------+-----------+ | ||||
| Table 3: COSE Verifiable Data Structure Proofs | Change Controller: | |||
| For Standards Track RFCs, list the "IETF". For others, give | ||||
| the name of the responsible party. Other details (e.g., postal | ||||
| address, email address, home page URI) may also be included. | ||||
| 9. Acknowledgements | +==========+===========+=====+=====+===========+==========+=========+ | |||
| |Verifiable|Name |Label|CBOR |Description|Change |Reference| | ||||
| |Data | | |Type | |Controller| | | ||||
| |Structure | | | | | | | | ||||
| +==========+===========+=====+=====+===========+==========+=========+ | ||||
| |1 |inclusion |-1 |array|Proof of |IETF |RFC 9942,| | ||||
| | |proofs | |(of |inclusion | |Section | | ||||
| | | | |bstr)| | |5.2 | | ||||
| +----------+-----------+-----+-----+-----------+----------+---------+ | ||||
| |1 |consistency|-2 |array|Proof of |IETF |RFC 9942,| | ||||
| | |proofs | |(of |append only| |Section | | ||||
| | | | |bstr)|property | |5.3 | | ||||
| +----------+-----------+-----+-----+-----------+----------+---------+ | ||||
| We would like to thank Maik Riechert, Jon Geater, Michael B. Jones, | Table 3: COSE Verifiable Data Structure Proofs Initial Registry | |||
| Mike Prorock, Ilari Liusvaara, Amaury Chamayou, for their | Contents | |||
| contributions (some of which substantial) to this draft and to the | ||||
| initial set of implementations. | ||||
| 10. References | 9. References | |||
| 10.1. Normative References | 9.1. Normative References | |||
| [IANA.cose_header-parameters] | [IANA.cose_header-parameters] | |||
| IANA, "COSE Header Parameters", | IANA, "COSE Header Parameters", | |||
| <https://www.iana.org/assignments/cose>. | <https://www.iana.org/assignments/cose>. | |||
| [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/rfc/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/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
| Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
| Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
| JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
| June 2019, <https://www.rfc-editor.org/rfc/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
| [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
| Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
| DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
| [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): | [RFC9053] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
| Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, | Initial Algorithms", RFC 9053, DOI 10.17487/RFC9053, | |||
| August 2022, <https://www.rfc-editor.org/rfc/rfc9053>. | August 2022, <https://www.rfc-editor.org/info/rfc9053>. | |||
| [RFC9162] Laurie, B., Messeri, E., and R. Stradling, "Certificate | [RFC9162] Laurie, B., Messeri, E., and R. Stradling, "Certificate | |||
| Transparency Version 2.0", RFC 9162, DOI 10.17487/RFC9162, | Transparency Version 2.0", RFC 9162, DOI 10.17487/RFC9162, | |||
| December 2021, <https://www.rfc-editor.org/rfc/rfc9162>. | December 2021, <https://www.rfc-editor.org/info/rfc9162>. | |||
| [RFC9596] Jones, M.B. and O. Steele, "CBOR Object Signing and | [RFC9596] Jones, M.B. and O. Steele, "CBOR Object Signing and | |||
| Encryption (COSE) "typ" (type) Header Parameter", | Encryption (COSE) "typ" (type) Header Parameter", | |||
| RFC 9596, DOI 10.17487/RFC9596, June 2024, | RFC 9596, DOI 10.17487/RFC9596, June 2024, | |||
| <https://www.rfc-editor.org/rfc/rfc9596>. | <https://www.rfc-editor.org/info/rfc9596>. | |||
| [RFC9597] Looker, T. and M.B. Jones, "CBOR Web Token (CWT) Claims in | [RFC9597] Looker, T. and M.B. Jones, "CBOR Web Token (CWT) Claims in | |||
| COSE Headers", RFC 9597, DOI 10.17487/RFC9597, June 2024, | COSE Headers", RFC 9597, DOI 10.17487/RFC9597, June 2024, | |||
| <https://www.rfc-editor.org/rfc/rfc9597>. | <https://www.rfc-editor.org/info/rfc9597>. | |||
| 10.2. Informative References | ||||
| [BCP205] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | 9.2. Informative References | |||
| Code: The Implementation Status Section", BCP 205, | ||||
| RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
| <https://www.rfc-editor.org/rfc/rfc7942>. | ||||
| [I-D.draft-ietf-cbor-edn-literals] | [CBOR-EDN] Bormann, C., "CBOR Extended Diagnostic Notation (EDN)", | |||
| Bormann, C., "CBOR Extended Diagnostic Notation (EDN)", | ||||
| Work in Progress, Internet-Draft, draft-ietf-cbor-edn- | Work in Progress, Internet-Draft, draft-ietf-cbor-edn- | |||
| literals-19, 16 October 2025, | literals-20, 2 March 2026, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-cbor- | <https://datatracker.ietf.org/doc/html/draft-ietf-cbor- | |||
| edn-literals-19>. | edn-literals-20>. | |||
| [RFC7120] Cotton, M., "Early IANA Allocation of Standards Track Code | [RFC7120] Cotton, M., "Early IANA Allocation of Standards Track Code | |||
| Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | |||
| 2014, <https://www.rfc-editor.org/rfc/rfc7120>. | 2014, <https://www.rfc-editor.org/info/rfc7120>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | |||
| "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | |||
| May 2018, <https://www.rfc-editor.org/rfc/rfc8392>. | May 2018, <https://www.rfc-editor.org/info/rfc8392>. | |||
| [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/rfc/rfc9052>. | <https://www.rfc-editor.org/info/rfc9052>. | |||
| Appendix A. Implementation Status | ||||
| Note to RFC Editor: Please remove this section as well as references | ||||
| to [BCP205] before AUTH48. | ||||
| 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 [BCP205]. | ||||
| 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 [BCP205], "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". | ||||
| A.1. Transmute Prototype | ||||
| An open-source implementation was initiated and is maintained by the | Acknowledgements | |||
| Transmute Industries Inc. - Transmute. An application demonstrating | ||||
| the concepts is available at COSE SCITT Receipts (https://github.com/ | ||||
| transmute-industries/cose?tab=readme-ov-file#transparent-statement) | ||||
| Implementation URL: https://github.com/transmute-industries/cose | We would like to thank Maik Riechert, Jon Geater, Michael B. Jones, | |||
| Maturity: The code's level of maturity is considered to be | Mike Prorock, Ilari Liusvaara, and Amaury Chamayou for their | |||
| "prototype". Coverage and Version Compatibility: The current version | contributions (some of which substantial) to this document and to the | |||
| ('main') implements the verifiable data structure algorithm, | initial set of implementations. | |||
| inclusion proof and consistency proof concepts of this draft. | ||||
| License: The project and all corresponding code and data maintained | ||||
| on GitHub are provided under the Apache License, version 2. Contact: | ||||
| Orie Steele (orie@transmute.industries) | ||||
| Contributors | Contributors | |||
| Amaury Chamayou | Amaury Chamayou | |||
| Microsoft | Microsoft | |||
| United Kingdom | United Kingdom | |||
| Email: amaury.chamayou@microsoft.com | Email: amaury.chamayou@microsoft.com | |||
| Steve Lasker | Steve Lasker | |||
| Email: stevenlasker@hotmail.com | Email: stevenlasker@hotmail.com | |||
| Robert Martin | Robert Martin | |||
| MITRE Corporation | MITRE Corporation | |||
| United States | United States of America | |||
| Email: ramartin@mitre.org | Email: ramartin@mitre.org | |||
| Monty Wiseman | Monty Wiseman | |||
| United States of America | United States of America | |||
| Email: mwiseman32@acm.org | Email: mwiseman32@acm.org | |||
| Roy Williams | Roy Williams | |||
| United States of America | United States of America | |||
| Email: roywill@msn.com | Email: roywill@msn.com | |||
| Authors' Addresses | Authors' Addresses | |||
| Orie Steele | Orie Steele | |||
| Tradeverifyd | Tradeverifyd | |||
| United States | United States of America | |||
| Email: orie@or13.io | Email: orie@or13.io | |||
| Henk Birkholz | Henk Birkholz | |||
| Fraunhofer SIT | Fraunhofer SIT | |||
| Rheinstrasse 75 | Rheinstrasse 75 | |||
| 64295 Darmstadt | 64295 Darmstadt | |||
| Germany | Germany | |||
| Email: henk.birkholz@ietf.contact | Email: henk.birkholz@ietf.contact | |||
| Antoine Delignat-Lavaud | Antoine Delignat-Lavaud | |||
| End of changes. 119 change blocks. | ||||
| 389 lines changed or deleted | 332 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||