<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-prorock-spice-cose-sd-cwt-01" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="sd-cwt">Selective Disclosure CWTs (SD-CWT)</title><seriesInfo value="draft-prorock-spice-cose-sd-cwt-01" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="M." surname="Prorock" fullname="Michael Prorock"><organization>mesur.io</organization><address><postal><street></street>
</postal><email>mprorock@mesur.io</email>
</address></author><author initials="O." surname="Steele" fullname="Orie Steele"><organization>Transmute</organization><address><postal><street></street>
</postal><email>orie@transmute.industries</email>
</address></author><author initials="H." surname="Birkholz" fullname="Henk Birkholz"><organization>Fraunhofer SIT</organization><address><postal><street></street>
</postal><email>henk.birkholz@ietf.contact</email>
</address></author><date/>
<area>Internet</area>
<workgroup>None</workgroup>
<keyword>SPICE</keyword>
<keyword>COSE</keyword>
<keyword>CWT</keyword>
<keyword>CBOR</keyword>
<keyword>SD</keyword>

<abstract>
<t>This document describes a data minimization technique for use with CBOR Web Token (CWT) <xref target="RFC8392"></xref>.
The approach is based on SD-JWT <xref target="I-D.ietf-oauth-selective-disclosure-jwt"></xref>, with changes to align with CBOR Object Signing and Encryption (COSE).
This document updates RFC8392.</t>
</abstract>

</front>

<middle>

<section anchor="notational-conventions"><name>Notational Conventions</name>
<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<bcp14>SHALL NOT</bcp14>&quot;, &quot;<bcp14>SHOULD</bcp14>&quot;,
&quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>MAY</bcp14>&quot;, and &quot;<bcp14>OPTIONAL</bcp14>&quot; in this
document are to be interpreted as described in <xref target="RFC2119"></xref>.</t>
</section>

<section anchor="terminology"><name>Terminology</name>
<t>The terminology used in this document is inherited from RFC8392, RFC9052 and RFC9053.</t>
<t>This document defines the following new terms related to concepts originally described in SD-JWT.</t>

<dl spacing="compact">
<dt>Selective Disclosure CBOR Web Token (SD-CWT)</dt>
<dd>A CWT with claims enabling selective disclosure with key binding.</dd>
<dt>Selective Disclosure Key Binding Token (SD-CWT-KBT)</dt>
<dd>A CWT used to demonstrate possession of a confirmation method, associated to an SD-CWT.</dd>
<dt>Salted Disclosed Claims</dt>
<dd>The salted claims disclosed via an SD-CWT.</dd>
<dt>Digested Salted Disclosed Claim</dt>
<dd>A hash digest of a Salted Disclosed Claims.</dd>
<dt>Redacted keys</dt>
<dd>The hashes of claims redacted from a map data structure.</dd>
<dt>Redacted elements</dt>
<dd>The hashes of elements redacted from an array data structure.</dd>
<dt>Presented Disclosed Claimset</dt>
<dd>The CBOR map containing zero or more Redacted keys or Redacted elements.</dd>
<dt>Validated Disclosed Claimset</dt>
<dd>The CBOR map containing all mandatory to disclose claims signed by the issuer, all selectively disclosed claims presented by the holder, and ommiting all instances of redacted_keys and redacted_element claims that are present in the original sd_cwt.</dd>
<dt>Issuer</dt>
<dd>An entity that produces a Selective Disclosure CBOR Web Token.</dd>
<dt>Holder</dt>
<dd>An entity that presents a Selective Disclosure CBOR Web Token which includes a Selective Disclosure Key Binding Token.</dd>
<dt>Partial Disclosure</dt>
<dd>When a subset of the original claims protected by the Issuer, are disclosed by the Holder.</dd>
<dt>Full Disclosure</dt>
<dd>When the full set of claims protected by the Issuer, is disclosed by the Holder.</dd>
<dt>Verifier</dt>
<dd>An entity that validates a Partial or Full Disclosure by a holder.</dd>
</dl>
</section>

<section anchor="introduction"><name>Introduction</name>
<t>This document updates RFC8392, enabling the holder of a CWT to disclose or redact special claims marked disclosable by the issuer of a CWT.
The approach is modeled after SD-JWT, with changes to align with conventions from CBOR Object Signing and Encryption (COSE).
The ability to minimize disclosure of sensitive identity attributes, while demonstrating possession of key material and enabling a verifier to confirm the attributes have been unaltered by the issuer, is an important building block for many digital credential use cases.
This specification brings selective disclosure capabilities to CWT, enabling application profiles to impose additional security criteria beyond the minimum security requirements this specification requires.
Specific use cases are out of scope for this document.
However, feedback has been gathered from a wide range of stakeholders, some of which is reflected in the examples provided in the appendix.</t>

<section anchor="overview"><name>Overview</name>
<t>Figure 1: High level SD-CWT Issuance and Presentation Flow</t>

<sourcecode type="aasvg"><![CDATA[Issuer                                 Holder                                    Verifier 
  │                                      │                                          │     
  │                                      ├───┐                                      │     
  │                                      │   │ Key Gen                              │     
  │              Request SD-CWT          │◄──┘                                      │     
  │◄─────────────────────────────────────┤                                          │     
  │                                      │                                          │     
  ├─────────────────────────────────────►│             Request Nonce                │     
  │              Receive SD-CWT          ├─────────────────────────────────────────►│     
  │                                      │                                          │     
  │                                      │◄─────────────────────────────────────────┤     
  │                                      │             Receive Nonce                │     
  │                                      ├───┐                                      │     
  │                                      │   │ Redact Claims                        │     
  │                                      │◄──┘                                      │     
  │                                      │                                          │     
  │                                      ├───┐                                      │     
  │                                      │   │ Demonstrate                          │     
  │                                      │◄──┘ Posession                            │     
  │                                      │                                          │     
  │                                      │             Present SD-CWT               │     
  │                                      ├─────────────────────────────────────────►│     
  │                                      │                                          │     
]]>
</sourcecode>
<t>This diagram captures the essential details necessary to issue and present an SD-CWT.
The parameters necessary to support these processes can be obtained using transports or protocols which are out of scope for this specification.
However the following guidance is generally recommended, regardless of protocol or transport.</t>

<ol spacing="compact">
<li>The issuer SHOULD confirm the holder controls all confirmation material before issuing credentials using the <tt>cnf</tt> claim.</li>
<li>To protect against replay attacks, the verifier SHOULD provide a nonce, and reject requests that do not include an acceptable an nonce (cnonce). This guidance can be ignored in cases where replay attacks are mitigated at another layer.</li>
</ol>
</section>
</section>

<section anchor="sd-cwt-issuance"><name>SD-CWT Issuance</name>
<t>An SD-CWT is a CWT containing zero or more Digested Salted Disclosed Claim, and zero or more Salted Disclosed Claims.
The salt acts as a blinding factor, preventing a Verifier of an SD-CWT from learning claims that were not intentionally disclosed by a Holder.
A confirmation claim <tt>cnf (8)</tt> MUST be present in the CWT Claimset.
The <tt>sd_kbt</tt> MUST NOT be set by the Issuer, and MUST be set by the Holder, and is therefore marked optional in the following normative defintion of SD-CWT in CDDL:</t>

<sourcecode type="cddl"><![CDATA[
digested-salted-disclosed-claim = bstr; 
salted-disclosed-claim = salted-claim / salted-element
salted-claim = [
  bstr .size 16,  ; 128-bit salt
  (int / text),   ; claim name
  any             ; claim value
]
salted-element = [
  bstr .size 16, ; 128-bit salt
  any            ; claim value
]
sd-cwt-cnf = COSE_Key / Encrypted_COSE_Key / kid
sd-cwt = [
  protected,
  unprotected: {
    ?(sd_claims: TBD1): bstr .cbor [ + salted-disclosed-claim ],
    ?(sd_kbt: TBD2): bstr .cbor sd-cwt-kbt,
  },
  payload :  bstr .cbor {
    ?(iss: 1) => tstr, ; "https://issuer.example"
    ?(sub: 2) => tstr, ; "https://device.example"
    ?(aud: 3) => tstr, ; "https://verifier.example"
    ?(exp: 4) => int,  ; 1883000000
    ?(nbf: 5) => int,  ; 1683000000
    ?(iat: 6) => int,  ; 1683000000
    &(cnf: 8) => sd-cwt-cnf,  ; 1683000000

    ?(sd_alg: TBD4) => int,             ; -16 for sha-256
    ?(redacted_keys: TBD5) => [         ; redacted map keys
      digested-salted-disclosed-claim 
    ],

    ; redaction in an example map value that is an array 
    &(example-array-key: -65537) => [  
      123,
      { ; redacted array element
        &(redacted_element: TBD6) =>
        digested-salted-disclosed-claim 
      },
      789,
      { ; redacted array element
        &(redacted_element: TBD6) =>
        digested-salted-disclosed-claim 
      },
    ]
  }
  signature : bstr,
]
]]>
</sourcecode>
<t>As described above, an SD-CWT is a CWT with claims that require confirmation and support selective disclosure.
Confirmation mitigates risks associated with bearer token theft.
Note that new confirmation methods might be registered and used after this document is published.
Selective disclosure enables data minimization.
The mechanism through which map keys and array elements are disclosed is different, see SD-CWT Validation for details.
CWT Claims which are not explictly marked redactable by the Issuer are mandatory to disclose by the Holder.
A detailed privacy and security analysis of all mandatory and optionally disclosed claims SHOULD be performed prior to issuance.</t>
</section>

<section anchor="sd-cwt-presentation"><name>SD-CWT Presentation</name>
<t>Presentations of an SD-CWT by a Holder to a Verifier require the Holder to issue an SD-CWT-KBT.</t>
<t>The SD-CWT-KBT is essential to assuring the Verifier:</t>

<ul spacing="compact">
<li>a) the Holder of the SD-CWT controls the confirmation method chosen by the Issuer.</li>
<li>b) the Holder's disclosures have not been tampered with since confirmation occured.</li>
</ul>
<t>The SD-CWT-KBT prevents an attacker from copying and pasting disclosures, or from adding or removing disclosures without detection.
Confirmation is established according to RFC 8747, using the <tt>cnf</tt> claim in the payload of the SD-CWT.
The Digested Salted Disclosed Claim are included in the <tt>sd_hash</tt> claim in the payload of the SD-CWT-KBT.</t>
<t>The proof of possession associated with the confirmation claim in an SD-CWT is called the SD-CWT-KBT.
As noted above, SD-CWT Issuance, <tt>sd_kbt</tt> SHALL be present in every presentation of an SD-CWT by a Holder to a Verifier.</t>

<sourcecode type="cddl"><![CDATA[digested-sd-claims = bstr ; 
sd-cwt-kbt = [
  protected: bstr .cbor { 
    ?(alg: 1) => int  ; CWT algorithm
    ?(typ: 16) => int ; Explicit type according to draft-ietf-cose-typ-header-parameter
  },
  unprotected: {},
  payload : bstr .cbor {
    &(cnonce: 39) => bstr,   ; e0a156bb3f
    &(aud: 3) => tstr, ; "https://verifier.example"
    &(iat: 6) => int,  ; 1683000000
    &(sd_hash: TBD3) => digested-sd-claims, ; f0e4c2f76c589...61b1816e13b

    ?(exp: 4) => int,  ; 1883000000
    ?(nbf: 5) => int,  ; 1683000000

    ; additional CWT claims are allowed.
  }
  signature : bstr,
]
]]>
</sourcecode>
<t>Note that <tt>sd_hash</tt> is the digest using <tt>sd_alg</tt> of the <tt>sd_claims</tt> which are either Partially or Fully Redacted in the Presented SD-CWT.</t>
<t>The <tt>cnonce</tt> and <tt>audience</tt> are essential to assure the Verifier that the Holder is currently in control of the associated confirmation method, and that the holder intended to disclose the SD-CWT to the Verifier.</t>
<t>Note that <tt>cnonce</tt> is a <tt>bstr</tt> and MUST be treated as opaque to the Holder.</t>
<t>The details associated with these protocol parameters are out of scope for this document.</t>
</section>

<section anchor="sd-cwt-validation"><name>SD-CWT Validation</name>
<t>The exact order of the following steps MAY be changed, as long as all checks are performed before deciding if an SD-CWT is valid.</t>
<t>First the Verifier must validate the SD-CWT as described in {{Section 7.2 of RFC 8392}}.</t>
<t>After validation, the SD-CWT-KBT MUST be extracted from the unprotected header, and validated as described in {{Section 7.2 of RFC 8392}}.</t>
<t>The Verifier MUST confirm the <tt>sd_hash</tt> claim of the validated SD-CWT-KBT matches the hash of the <tt>sd_claims</tt> member of the unprotected header, using the hash algorithm obtained from the validated <tt>sd_alg</tt> claim of the SD-CWT.</t>
<t>Next, the Verifier MUST extract and decode the disclosed claims from the <tt>sd_claims</tt> in the unprotected header.</t>
<t>The decoded <tt>sd_claims</tt> are converted to an intermediate data structure called a Digest To Disclosed Claim Map which is used to transform the Presented Disclosed Claimset, into a Validated Disclosed Claimset.</t>
<t>The Verifier MUST compute the hash of each <tt>salted-disclosed-claim</tt>, in order to match each disclosed value to each entry of the Presented Disclosed Claimset.</t>
<t>One possible concrete representation of the intermediate data structure for the Digest To Disclosed Claim Map could be:</t>

<sourcecode type="cddl-ish"><![CDATA[{
  &(digested-salted-disclosed-claim) => salted-disclosed-claim
}
]]>
</sourcecode>
<t>The Verifier constructs an empty cbor map called the Validated Disclosed Claimset, and initializes it with all mandatory to disclose claims from the verified Presented Disclosed Claimset.</t>
<t>Next the Verifier performs a breadth first or depth first traversal of the Presented Disclosed Claimset, Validated Disclosed Claimset, using the Digest To Disclosed Claim Map to insert claims into the Validated Disclosed Claimset when they appear in the Presented Disclosed Claimset.
By performing these steps, the recipient can cryptographically verify the integrity of the protected claims and verify they have not been tampered with.
If there remain unused Digest To Disclosed Claim Map at the end of this procedure the SD-CWT MUST be considered invalid, as if the siganture had failed to verify.
Otherwise the SD-CWT is considered valid, and the Validated Disclosed Claimset is now a CWT Claimset with no claims marked for redaction.
Further validation logic can be applied to the Validated Disclosed Claimset, as it might normally be applied to a validated CWT claimset.</t>

<section anchor="credential-types"><name>Credential Types</name>
<t>This specification defines the CWT claim vct (for verifiable credential type). The vct value MUST be a case-sensitive StringOrURI (see [RFC7519]) value serving as an identifier for the type of the SD-CWT claimset. The vct value MUST be a Collision-Resistant Name as defined in Section 2 of [RFC7515].</t>
<t>This claim is defined COSE based verifiable credentials, similar to the JOSE based verifiable credentials described in Section 3.2.2.1.1 of SD-JWT-VC.</t>
<t>Profiles built on this specifiation are also encouraged to use more specific media types, as described in <eref target="https://datatracker.ietf.org/doc/draft-ietf-cose-typ-header-parameter/">draft-ietf-cose-typ-header-parameter</eref>.</t>
</section>
</section>

<section anchor="examples"><name>Examples</name>
<t>TBD - Provide more examples</t>

<section anchor="minimal-spanning-example"><name>Minimal spanning example</name>
<t>The following example contains claims needed to demonstrate redaction of key-value pairs and array elements.</t>

<sourcecode type="cbor-diag"><![CDATA[/ cose-sign1 / 18([
  / protected / << {
    / alg / 1  : -35 / ES384 /
    / typ / 16 : "application/sd+cwt"
    / kid /    : "https://issuer.example/cwt-key3"
  } >>,
  / unprotected / {
    / disclosed claims /
    / sd_claims / TBD1 : <<[  
        [
            / salt /   h'c93c7ff5...72c71e26',
            / claim /  "age_over_18",
            / value /  true
        ],
        [
            / salt /   h'399c641e...2aa18c1e',
            / claim /  "region",
            / value /  "ca" / California /
        ],
        [
            / salt /   h'82501bb4...6c655f32',
            / value /  "4.1.7"
        ]
    ]
    / sd_kbt    / TBD2 : << [
      / protected / << {
          / alg / 1 : -35 / ES384 /
          / typ / 16 : "application/kb+cwt"
      } >>,
      / unprotected / {},
      / payload / <<
        / cnonce / 39    : h'e0a156bb3f',
        / aud     / 3    : "https://verifier.example",
        / iat     / 6    : 1783000000,
        / sd_alg  / TBD4 : -16  /SHA-256/ 
        / sd_hash / TBD3 : h'c341bb...4a5f3f',  / hash of sd_claims  /
                                                / using sd_alg       /
      >>,
      / signature / h'1237af2e...6789456'
    ] >>
  },
  / payload / <<
    / iss / 1   : "https://issuer.example",
    / sub / 2   : "https://device.example",
    / exp / 2   : 1883000000,
    / iat / 2   : 1683000000,
    / cnf / 8   : {
      / cose key / 1 : {
        / alg: ES256 /  3: 35,
        / kty: EC2   /  1: 2,
        / crv: P-256 / -1: 1,
        / x / -2: h'768ed8...8626e',
        / y / -3: h'6a48cc...fd5d5'
      }
    },
    / sd_alg / TBD4        : -16, / SHA-256 /
    / redacted_keys / TBD5 : [ 
        h'abbd...efef',  / redacted age_over_18 /
        h'132d...75e7',  / redacted age_over_21 /
    ],
    / example array as map value / -65537 : [
      123,
      { TBD6 : h'45dd...87af'  / redacted_element / },
      789,
      { TBD6 : h'45dd...87af'  / redacted_element / },
    ],
    "address": {
        "country" : "us",            / United States /
        / redacted_keys / TBD5 : [
            h'adb70604...03da225b',  / redacted region /
            h'e04bdfc4...4d3d40bc'   / redacted post_code /
        ]
    }
  >>,
  / signature / h'3337af2e...66959614'
])
]]>
</sourcecode>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>Security considerations from COSE <xref target="RFC9052"></xref> and CWT <xref target="RFC8392"></xref> apply to this specificaton.</t>

<section anchor="random-numbers"><name>Random Numbers</name>
<t>Each salt used to protect disclosed claims MUST be generated independently from the salts of other claims. The salts MUST be generated from a source of entropy that is acceptable to the issuer.
Poor choice of salts can lead to brute force attacks that can reveal redacted claims.</t>
</section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="cose-header-parameters"><name>COSE Header Parameters</name>
<t>IANA is requested to add the following entries to the CWT claims registry (<eref target="https://www.iana.org/assignments/cose/cose.xhtml#header-parameters">https://www.iana.org/assignments/cose/cose.xhtml#header-parameters</eref>).</t>

<section anchor="sd-claims"><name>sd_claims</name>
<t>The following completed registration template per RFC8152 is provided:</t>
<t>Name: sd_claims
Label: TBD (requested assignment TBD1)
Value Type: bstr
Value Registry: (empty)
Description: A list of selectively disclosed claims, which were originally redacted, then later disclosed at the discretion of the sender.
Reference: RFC XXXX</t>
</section>

<section anchor="sd-kbt"><name>sd_kbt</name>
<t>The following completed registration template per RFC8152 is provided:</t>
<t>Name: sd_kbt
Label: TBD (requested assignment TBD2)
Value Type: bstr
Value Registry: (empty)
Description: Key binding token for disclosed claims
Reference: RFC XXXX</t>
</section>
</section>

<section anchor="cbor-web-token-cwt-claims"><name>CBOR Web Token (CWT) Claims</name>
<t>IANA is requested to add the following entries to the CWT claims registry (<eref target="https://www.iana.org/assignments/cwt/cwt.xhtml">https://www.iana.org/assignments/cwt/cwt.xhtml</eref>).</t>

<section anchor="sd-alg"><name>sd_alg</name>
<t>The following completed registration template per RFC8392 is provided:</t>
<t>Claim Name: sd_alg
Claim Description: Hash algorithm used for selective disclosure
JWT Claim Name: sd_alg
Claim Key: TBD (request assignment TBD4)
Claim Value Type(s): integer
Change Controller: IETF
Specification Document(s): RFC XXXX</t>
</section>

<section anchor="sd-hash"><name>sd_hash</name>
<t>The following completed registration template per RFC8392 is provided:</t>
<t>Claim Name: sd_hash
Claim Description: Hash of encoded disclosed claims
JWT Claim Name: sd_hash
Claim Key: TBD (request assignment TBD3)
Claim Value Type(s): bstr
Change Controller: IETF
Specification Document(s): RFC XXXX</t>
</section>

<section anchor="redacted-keys"><name>redacted_keys</name>
<t>The following completed registration template per RFC8392 is provided:</t>
<t>Claim Name: redacted_keys
Claim Description: Redacted claims in a map.
JWT Claim Name: redacted_keys
Claim Key: TBD (request assignment TBD5)
Claim Value Type(s): array of bstr
Change Controller: IETF
Specification Document(s): RFC XXXX</t>
</section>

<section anchor="redacted-element"><name>redacted_element</name>
<t>The following completed registration template per RFC8392 is provided:</t>
<t>Claim Name: redacted_element
Claim Description: Redacted element of an array
JWT Claim Name: redacted_element
Claim Key: TBD (request assignment TBD6)
Claim Value Type(s): array of bstr
Change Controller: IETF
Specification Document(s): RFC XXXX</t>
</section>

<section anchor="vct"><name>vct</name>
<t>The following completed registration template per RFC8392 is provided:</t>
<t>Claim Name: vct
Claim Description: Verifiable credential type
JWT Claim Name: vct
Claim Key: TBD (request assignment TBD7)
Claim Value Type(s): bstr
Change Controller: IETF
Specification Document(s): RFC XXXX</t>
</section>
</section>

<section anchor="media-types"><name>Media Types</name>
<t>This section requests the registration of new media types in <eref target="https://www.iana.org/assignments/media-types/media-types.xhtml">https://www.iana.org/assignments/media-types/media-types.xhtml</eref>.</t>

<section anchor="application-sd-cwt"><name>application/sd+cwt</name>
<t>IANA is requested to add the following entry to the media types registry in accordance with RFC6838, RFC4289, and RFC6657.</t>
<t>The following completed registration template is provided:</t>

<ul spacing="compact">
<li>Type name: application</li>
<li>Subtype name: sd+cwt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: binary</li>
<li>Security considerations: See the Security Considerations section
of RFC XXXX, and <xref target="RFC8392"></xref></li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: RFC XXXX</li>
<li>Applications that use this media type: TBD</li>
<li>Fragment identifier considerations: n/a</li>
<li>Additional information:
  Magic number(s): n/a
  File extension(s): n/a
  Macintosh file type code(s): n/a</li>
<li>Person &amp; email address to contact for further information:
Michael Prorock, mprorock@mesur.io</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Michael Prorock, mprorock@mesur.io</li>
<li>Change controller: IETF</li>
<li>Provisional registration?  No</li>
</ul>
</section>

<section anchor="application-kb-cwt"><name>application/kb+cwt</name>
<t>IANA is requested to add the following entry to the media types registry in accordance with RFC6838, RFC4289, and RFC6657.</t>
<t>The following completed registration template is provided:</t>

<ul spacing="compact">
<li>Type name: application</li>
<li>Subtype name: kb+cwt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: binary</li>
<li>Security considerations: See the Security Considerations section
of RFC XXXX, and <xref target="RFC8392"></xref></li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: RFC XXXX</li>
<li>Applications that use this media type: TBD</li>
<li>Fragment identifier considerations: n/a</li>
<li>Additional information:
  Magic number(s): n/a
  File extension(s): n/a
  Macintosh file type code(s): n/a</li>
<li>Person &amp; email address to contact for further information:
Orie Steele, orie@transmute.industries</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Orie Steele, orie@transmute.industries</li>
<li>Change controller: IETF</li>
<li>Provisional registration?  No</li>
</ul>
</section>
</section>
</section>

<section anchor="implementation-status"><name>Implementation Status</name>
<t>Note to RFC Editor: Please remove this section as well as references to {{BCP205}} before AUTH48.</t>
<t>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.</t>
<t>According to {{BCP205}}, &quot;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&quot;.</t>

<section anchor="transmute-prototype"><name>Transmute Prototype</name>
<t>Organization: Transmute Industries Inc</t>
<t>Name: <eref target="https://github.com/transmute-industries/sd-cwt">https://github.com/transmute-industries/sd-cwt</eref></t>
<t>Description: An open source implementation of this draft.</t>
<t>Maturity: Prototype</t>
<t>Coverage: The current version ('main') implements functionality similar to that described in this document, and will be revised, with breaking changes to support the generation of example data to support this specification.</t>
<t>License: Apache-2.0</t>
<t>Implementation Experience: No interop testing has been done yet. The code works as proof of concept, but is not yet production ready.</t>
<t>Contact: Orie Steele (orie@transmute.industries)</t>
</section>
</section>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>The authors would like to thank those that have worked on similar items
for providing selective disclosure mechanisms in JSON, especially:
Brent Zundel, Roy Williams, Tobias Looker, Kristina Yasuda, Daniel Fett,
Oliver Terbu, and Michael Jones.</t>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9052.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-oauth-selective-disclosure-jwt.xml"/>
</references>
</references>

<section anchor="comparison-to-sd-jwt"><name>Comparison to SD-JWT</name>
<t>SD-CWT is modeled after SD-JWT, with adjustments to align with conventions in CBOR and COSE.</t>

<section anchor="media-types-1"><name>Media Types</name>
<t>The COSE equivalent of <tt>application/sd-jwt</tt> is <tt>application/sd+cwt</tt>.</t>
<t>THe COSE equivalent of <tt>application/kb+jwt</tt> is <tt>application/kb+cwt</tt>.</t>
</section>

<section anchor="redaction-claims"><name>Redaction Claims</name>
<t>The COSE equivalent of <tt>_sd</tt> is TBD5.</t>
<t>The COSE equivalent of <tt>...</tt> is TBD6.</t>
</section>

<section anchor="issuance"><name>Issuance</name>
<t>The issuance process for SD-CWT is similar to SD-JWT, with the exception that a confirmation claim is REQUIRED.</t>
</section>

<section anchor="presentation"><name>Presentation</name>
<t>The presentation process for SD-CWT is similar to SD-JWT, with the exception that a Key Binding Token is REQUIRED.</t>
</section>

<section anchor="validation"><name>Validation</name>
<t>The validation process for SD-JWT is similar to SD-JWT, however, JSON Objects are replaced with CBOR Maps which can contain integer keys and CBOR Tags.</t>
</section>
</section>

</back>

</rfc>
