<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-oauth-selective-disclosure-jwt-06" submissionType="IETF" category="std" xml:lang="en" consensus="true">

<front>
<title abbrev="SD-JWT">Selective Disclosure for JWTs (SD-JWT)</title><seriesInfo value="draft-ietf-oauth-selective-disclosure-jwt-06" stream="IETF" status="standard" name="Internet-Draft"/>
<author initials="D." surname="Fett" fullname="Daniel Fett"><organization>Authlete</organization><address><postal><street/>
</postal><email>mail@danielfett.de</email>
<uri>https://danielfett.de/</uri>
</address></author>
<author initials="K." surname="Yasuda" fullname="Kristina Yasuda"><organization>Microsoft</organization><address><postal><street/>
</postal><email>Kristina.Yasuda@microsoft.com</email>
</address></author>
<author initials="B." surname="Campbell" fullname="Brian Campbell"><organization>Ping Identity</organization><address><postal><street/>
</postal><email>bcampbell@pingidentity.com</email>
</address></author>
<date/>
<area>Security</area>
<workgroup>Web Authorization Protocol</workgroup>
<keyword>security</keyword>
<keyword>oauth2</keyword>

<abstract>
<t>This specification defines a mechanism for selective disclosure of individual elements of a JSON object
used as the payload of a JSON Web Signature (JWS) structure.
It encompasses various applications, including but not limited to the selective disclosure of JSON Web Token (JWT) claims.</t>
</abstract>

<note title="Discussion Venues" removeInRFC="true">
<t>Discussion of this document takes place on the
    Web Authorization Protocol Working Group mailing list (oauth@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.</t>
<t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/oauth-wg/oauth-selective-disclosure-jwt"/>.</t>
</note>
</front>

<middle>

<section anchor="Introduction"><name>Introduction</name>
<t>This document specifies conventions for creating JSON Web Signature (JWS) <xref target="RFC7515"/>
structures with JSON <xref target="RFC8259"/> objects as the payload while supporting selective disclosure of individual elements of that JSON.
Because JSON Web Token (JWT) <xref target="RFC7519"/> is a very prevalent application of JWS with a JSON payload, the selective disclosure of JWT claims receives primary treatment herein. However, that does not preclude the mechanism's applicability to other or more general applications of JWS with JSON payloads.</t>
<t>The JSON-based representation of claims in a signed JWT is
secured against modification using JWS digital
signatures. A consumer of a signed JWT that has checked the
signature can safely assume that the contents of the token have not been
modified.  However, anyone receiving an unencrypted JWT can read all the
claims. Likewise, anyone with the decryption key receiving encrypted JWT
can also read all the claims.</t>
<t>One of the common use cases of a signed JWT is representing a user's
identity. As long as the signed JWT is one-time
use, it typically only contains those claims the user has consented to
disclose to a specific Verifier. However, there is an increasing number
of use cases where a signed JWT is created once and then used a number
of times by the user (the "Holder" of the JWT). In such use cases, the signed JWT needs
to contain the superset of all claims the user of the
signed JWT might want to disclose to Verifiers at some point. The
ability to selectively disclose a subset of these claims depending on
the Verifier becomes crucial to ensure minimum disclosure and prevent
Verifiers from obtaining claims irrelevant for the transaction at hand.
SD-JWTs defined in this document enable such selective disclosure of JWT claims.</t>
<t>One example of a multi-use JWT is a verifiable credential, an Issuer-signed
credential that contains the claims about a subject, and whose authenticity can be
cryptographically verified.</t>
<t>Similar to the JWT specification on which it builds, this document is a product of the
Web Authorization Protocol (oauth) working group. However, while both JWT and SD-JWT
have potential OAuth 2.0 applications, their utility and application is certainly not constrained to OAuth 2.0.
JWT was developed as a general-purpose token format and has seen widespread usage in a
variety of applications. SD-JWT is a selective disclosure mechanism for JWT and is
similarly intended to be general-purpose specification.</t>
<t>While JWTs with claims describing natural persons are a common use case, the
mechanisms defined in this document can be used for other use cases as well.</t>
<t>In an SD-JWT, claims can be hidden, but cryptographically
protected against undetected modification. "Claims" here refers to both
object properties (key-value pairs) as well as array elements. When issuing the SD-JWT to
the Holder, the Issuer includes the cleartext counterparts of all hidden
claims, the so-called Disclosures, outside the signed part of the SD-JWT.</t>
<t>The Holder decides which claims to disclose to a particular Verifier and includes the respective
Disclosures in the SD-JWT to that Verifier. The Verifier
has to verify that all disclosed claim values were part of the original
Issuer-signed JWT. The Verifier will not, however, learn any claim
values not disclosed in the Disclosures.</t>
<t>This document also specifies an optional mechanism for Key Binding,
which is the concept of binding an SD-JWT to a Holder's public key
and requiring that the Holder prove possession of the corresponding
private key when presenting the SD-JWT.
The strength of the binding is conditional upon the trust
in the protection of the private key of the key pair an SD-JWT is bound to.</t>
<t>SD-JWT can be used with any JSON-based representation of claims, including JSON-LD.</t>
<t>This specification aims to be easy to implement and to leverage
established and widely used data formats and cryptographic algorithms
wherever possible.</t>

<section anchor="feature-summary"><name>Feature Summary</name>

<ul>
<li><t>This specification defines</t>

<ul>
<li>a format for the payload of an Issuer-signed JWT containing selectively disclosable claims that include object properties (key-value pairs), array elements, and nested data structures built from these,</li>
<li>a format for data associated with the JWT that enables selectively disclosing those claims,</li>
<li>facilities for binding the JWT to a key and associated data to prove possession thereof, and</li>
<li>a format, extending the JWS Compact Serialization, for the combined transport of the JWT and associated data that is suitable for both issuance and presentation.</li>
</ul></li>
<li>An alternate format utilizing the JWS JSON Serialization is also specified.</li>
<li>This specification enables combining selectively disclosable claims with
clear-text claims that are always disclosed.</li>
<li>For selectively disclosable claims that are object properties, both the key and value are always blinded.</li>
</ul>
</section>

<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
<t><strong>base64url</strong> denotes the URL-safe base64 encoding without padding defined in
Section 2 of <xref target="RFC7515"/>.</t>
</section>
</section>

<section anchor="terms-and-definitions"><name>Terms and Definitions</name>

<dl>
<dt>Selective disclosure:</dt>
<dd>Process of a Holder disclosing to a Verifier a subset of claims contained in a claim set issued by an Issuer.</dd>
<dt>Selectively Disclosable JWT (SD-JWT):</dt>
<dd>A composite structure, consisting of an Issuer-signed JWT (JWS, <xref target="RFC7515"/>), Disclosures, and optionally a Key Binding JWT
that supports selective disclosure as defined in this document. It can contain both regular claims and digests of selectively-disclosable claims.</dd>
<dt>Disclosure:</dt>
<dd>A combination of a salt, a cleartext claim name (present when the claim is a key-value pair and absent when the claim is an array element), and a cleartext claim value, all of which are used to calculate a digest for the respective claim.</dd>
<dt>Key Binding:</dt>
<dd>Ability of the Holder to prove legitimate possession of an SD-JWT by proving
control over the same private key during the issuance and presentation. An SD-JWT with Key Binding contains
a public key, or a reference to a public key, that matches to the private key controlled by the Holder.</dd>
<dt>Key Binding JWT:</dt>
<dd>A JWT for proving Key Binding as defined in <xref target="kb-jwt"/>.</dd>
<dt>Issuer:</dt>
<dd>An entity that creates SD-JWTs.</dd>
<dt>Holder:</dt>
<dd>An entity that received SD-JWTs from the Issuer and has control over them.</dd>
<dt>Verifier:</dt>
<dd>An entity that requests, checks, and extracts the claims from an SD-JWT with its respective Disclosures.</dd>
</dl>
</section>

<section anchor="flow-diagram"><name>Flow Diagram</name>
<figure><name>SD-JWT Issuance and Presentation Flow
</name>
<sourcecode type="ascii-art">           +------------+
           |            |
           |   Issuer   |
           |            |
           +------------+
                 |
            Issues SD-JWT
      including all Disclosures
                 |
                 v
           +------------+
           |            |
           |   Holder   |
           |            |
           +------------+
                 |
           Presents SD-JWT
    including selected Disclosures
                 |
                 v
           +-------------+
           |             |+
           |  Verifiers  ||+
           |             |||
           +-------------+||
            +-------------+|
             +-------------+
</sourcecode>
</figure>
</section>

<section anchor="concepts"><name>Concepts</name>
<t>This section describes SD-JWTs with their respective Disclosures and Key Binding at a
conceptual level, abstracting from the data formats described in <xref target="data_formats"/>.</t>

<section anchor="sd-jwt-and-disclosures"><name>SD-JWT and Disclosures</name>
<t>An SD-JWT, at its core, is a digitally signed JSON document containing digests over the selectively disclosable claims with the Disclosures outside the document. Disclosures can be omitted without breaking the signature, and modifying them can be detected. Selectively disclosable claims can be individual object properties (key-value pairs) or array elements.</t>
<t>Each digest value ensures the integrity of, and maps to, the respective Disclosure.  Digest values are calculated using a hash function over the Disclosures, each of which contains a cryptographically secure random salt, the claim name (only when the claim is an object property), and the claim value. The Disclosures are sent to the Holder as part of the SD-JWT in the format defined in <xref target="data_formats"/>.</t>
<t>An SD-JWT MAY also contain clear-text claims that are always disclosed to the Verifier.</t>
</section>

<section anchor="disclosing-to-a-verifier"><name>Disclosing to a Verifier</name>
<t>To disclose to a Verifier a subset of the SD-JWT claim values, a Holder sends only the Disclosures of those selectively released claims to the Verifier as part of the SD-JWT.</t>
</section>

<section anchor="optional-key-binding"><name>Optional Key Binding</name>
<t>Key Binding is an optional feature. When Key Binding is required by the use-case, the SD-JWT MUST contain information about the key material controlled by the Holder.</t>
<t>Note: How the public key is included in SD-JWT is out of scope of this document. It can be passed by value or by reference.</t>
<t>For presenting an SD-JWT to a Verifier that enforces Key Binding, the Holder
creates a signed document, the Key Binding JWT as defined in <xref target="kb-jwt"/>, using
its private key. This document contains a nonce to ensure the freshness of the signature, an audience value to
indicate the intended audience for the document, and a hash that ensures the
integrity of the data sent from the Holder to the Verifier. Details of the format of Key Binding JWTs are
described in <xref target="kb-jwt"/>.</t>
<t>Note that there may be other ways to send a Key Binding JWT to the Verifier or for the Holder to prove possession of the key material included in an SD-JWT. In these cases, inclusion of the Key Binding JWT in the SD-JWT is not required.</t>
</section>

<section anchor="verification"><name>Verification</name>
<t>At a high level, the Verifier</t>

<ul>
<li>receives the SD-JWT from the Holder and verifies its signature using the Issuer's public key,</li>
<li>verifies the Key Binding JWT, if Key Binding is required by the Verifier's policy, using the public key included in the SD-JWT,</li>
<li>calculates the digests over the Holder-Selected Disclosures and verifies that each digest is contained in the SD-JWT.</li>
</ul>
<t>The detailed algorithm is described in <xref target="verifier_verification"/>.</t>
</section>
</section>

<section anchor="data_formats"><name>SD-JWT Data Formats</name>
<t>An SD-JWT is composed of the following:</t>

<ul>
<li>an Issuer-signed JWT,</li>
<li>zero or more Disclosures, and</li>
<li>optionally a Key Binding JWT.</li>
</ul>
<t>The individual parts will be explained in the following subsections.</t>
<t>The serialized format for the SD-JWT is the concatenation of each part delineated with a single tilde ('~') character as follows:</t>

<artwork>&lt;Issuer-signed JWT&gt;~&lt;Disclosure 1&gt;~&lt;Disclosure 2&gt;~...~&lt;Disclosure N&gt;~&lt;optional KB-JWT&gt;

</artwork>
<t>The order of the tilde separated values MUST be the Issuer-signed JWT, followed by any number of Disclosures, and lastly the optional Key Binding JWT.
In the case that there is no Key Binding JWT, the last element MUST be an empty string and the last separating tilde character MUST NOT be omitted.</t>
<t>The Disclosures are linked to the Issuer-signed JWT through the
digest values included therein.</t>
<t>When issuing to a Holder, the Issuer includes all the relevant Disclosures in the SD-JWT.</t>
<t>When presenting to a Verifier, the Holder sends only the selected set of the Disclosures in the SD-JWT.</t>
<t>The Holder MAY send any subset of the Disclosures to the Verifier, i.e.,
none, some, or all Disclosures. For data that the Holder does not want to reveal
to the Verifier, the Holder MUST NOT send Disclosures or reveal the salt values in any
other way.</t>
<t>A Holder MUST NOT send a Disclosure that was not included in the SD-JWT or send
a Disclosure more than once.</t>

<section anchor="issuer-signed-jwt-payload"><name>Issuer-signed JWT Payload</name>
<t>An SD-JWT has a JWT component that MUST be signed using the Issuer's private key.
It MUST use a JWS asymmetric digital signature algorithm. It
MUST NOT use <tt>none</tt> or an identifier for a symmetric algorithm (MAC).</t>
<t>The payload of an SD-JWT is a JSON object according to the following rules:</t>

<ol>
<li>The payload MAY contain the <tt>_sd_alg</tt> key described in <xref target="hash_function_claim"/>.</li>
<li>The payload MAY contain one or more digests of Disclosures to enable selective disclosure of the respective claims, created and formatted as described in <xref target="creating_disclosures"/>.</li>
<li>The payload MAY contain one or more decoy digests to obscure the actual number of claims in the SD-JWT, created and formatted as described in <xref target="decoy_digests"/>.</li>
<li>The payload MAY contain one or more non-selectively disclosable claims.</li>
<li>The payload MAY contain the Holder's public key(s) or reference(s) thereto, as explained in <xref target="holder_public_key_claim"/>.</li>
<li>The payload MAY contain further claims such as <tt>iss</tt>, <tt>iat</tt>, etc. as defined or required by the application using SD-JWTs.</li>
<li>The payload MUST NOT contain the reserved claims <tt>_sd</tt> or <tt>...</tt> except for the purpose of transporting digests as described below.</li>
</ol>
<t>The same digest value MUST NOT appear more than once in the SD-JWT.</t>
<t>Applications of SD-JWT SHOULD be explicitly typed using the <tt>typ</tt> header parameter. See <xref target="explicit_typing"/> for more details.</t>
<t>It is the Issuer who decides which claims are selectively disclosable and which are not. End-User claims MAY be included as plaintext as well, e.g., if hiding the particular claims from the Verifier is not required in the intended use case. See <xref target="sd-validity-claims"/> for considerations on making validity-controlling claims such as <tt>exp</tt> selectively disclosable.</t>
<t>Claims that are not selectively disclosable are included in the SD-JWT in plaintext just as they would be in any other JSON structure.</t>

<section anchor="hash_function_claim"><name>Hash Function Claim</name>
<t>The claim <tt>_sd_alg</tt> indicates the hash algorithm used by the Issuer to generate
the digests as described in <xref target="creating_disclosures"/>. When used, this claim MUST
appear at the top level of the SD-JWT payload. It
MUST NOT be used in any object nested within the payload. If the  <tt>_sd_alg</tt>
claim is not present at the top level, a default value of <tt>sha-256</tt> MUST be used.</t>
<t>The hash algorithm identifier MUST be a hash algorithm value from the "Hash Name
String" column in the IANA "Named Information Hash Algorithm" registry
<xref target="IANA.Hash.Algorithms"/> or a value defined in another specification and/or
profile of this specification.</t>
<t>To promote interoperability, implementations MUST support the <tt>sha-256</tt> hash
algorithm.</t>
<t>See <xref target="security_considerations"/> for requirements regarding entropy of the salt,
minimum length of the salt, and choice of a hash algorithm.</t>
</section>

<section anchor="holder_public_key_claim"><name>Holder Public Key Claim</name>
<t>If the Issuer wants to enable Key Binding, it includes a public key
associated with the Holder, or a reference thereto.</t>
<t>It is out of the scope of this document to describe how the Holder key pair is
established. For example, the Holder MAY create a key pair and provide a public key to the Issuer,
the Issuer MAY create the key pair for the Holder, or
Holder and Issuer MAY use pre-established key material.</t>
<t>Note: The examples in this document use the <tt>cnf</tt> claim defined in <xref target="RFC7800"/> to include
the raw public key by value in SD-JWT.</t>
</section>
</section>

<section anchor="creating_disclosures"><name>Disclosures</name>
<t>Disclosures are created differently depending on whether a claim is an object property (key-value pair) or an array element.</t>

<ul>
<li>For a claim that is an object property, the Issuer creates a Disclosure as described in <xref target="disclosures_for_object_properties"/>.</li>
<li>For a claim that is an array element, the Issuer creates a Disclosure as described in <xref target="disclosures_for_array_elements"/>.</li>
</ul>

<section anchor="disclosures_for_object_properties"><name>Disclosures for Object Properties</name>
<t>For each claim that is an object property and that is to be made selectively disclosable, the Issuer MUST create a Disclosure as follows:</t>

<ul>
<li><t>Create an array of three elements in this order:</t>

<ol>
<li>A salt value. MUST be a string. See <xref target="salt-entropy"/> and <xref target="salt_minlength"/> for security considerations. It is RECOMMENDED to base64url-encode minimum 128 bits of cryptographically secure random data, producing a string. The salt value MUST be unique for each claim that is to be selectively disclosed. The Issuer MUST NOT disclose the salt value to any party other than the Holder.</li>
<li>The claim name, or key, as it would be used in a regular JWT payload. The value MUST be a string. The value MUST NOT be <tt>_sd</tt>, <tt>...</tt>, or a claim name existing in the object as a non-selectively disclosable claim.</li>
<li>The claim value, as it would be used in a regular JWT payload. The value MAY be of any type that is allowed in JSON, including numbers, strings, booleans, arrays, and objects.</li>
</ol></li>
<li>JSON-encode the array, producing an UTF-8 string.</li>
<li>base64url-encode the byte representation of the UTF-8 string, producing a US-ASCII <xref target="RFC0020"/> string. This string is the Disclosure.</li>
</ul>
<t>The order is decided based on the readability considerations: salts would have a
constant length within the SD-JWT, claim names would be around the same length
all the time, and claim values would vary in size, potentially being large
objects.</t>
<t>The following example illustrates the steps described above.</t>
<t>The array is created as follows:</t>

<sourcecode type="json">["_26bc4LT-ac6q2KI6cBW5es", "family_name", "Möbius"]
</sourcecode>
<t>The resulting Disclosure would be: <tt>WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNw7ZiaXVzIl0</tt></t>
<t>Note that variations in whitespace, encoding of Unicode characters, ordering of object properties, etc., are allowed
in the JSON representation and no canonicalization needs be performed before base64url-encoding.
For example, the following strings are all valid and encode the
same claim value "Möbius":</t>

<ul>
<li>A different way to encode the unicode umlaut:<br/>
<tt>WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNX</tt><br/>
<tt>HUwMGY2Yml1cyJd</tt></li>
<li>No white space:<br/>
<tt>WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsImZhbWlseV9uYW1lIiwiTcO2Y</tt><br/>
<tt>ml1cyJd</tt></li>
<li>Newline characters between elements:<br/>
<tt>WwoiXzI2YmM0TFQtYWM2cTJLSTZjQlc1ZXMiLAoiZmFtaWx5X25hbWUiLAoiT</tt><br/>
<tt>cO2Yml1cyIKXQ</tt></li>
</ul>
<t>See <xref target="disclosure_format_considerations"/> for some further considerations on the Disclosure format approach.</t>
</section>

<section anchor="disclosures_for_array_elements"><name>Disclosures for Array Elements</name>
<t>For each claim that is an array element and that is to be made selectively disclosable, the Issuer MUST create a Disclosure as follows:</t>

<ul>
<li><t>The array MUST contain two elements in this order:</t>

<ol>
<li>The salt value as described in <xref target="disclosures_for_object_properties"/>.</li>
<li>The array element that is to be hidden. This value MAY be of any type that is allowed in JSON, including numbers, strings, booleans, arrays, and objects.</li>
</ol></li>
</ul>
<t>The Disclosure string is created by JSON-encoding this array and base64url-encoding the byte representation of the resulting string as described in <xref target="disclosures_for_object_properties"/>. The same considerations regarding
variations in the result of the JSON encoding apply.</t>
<t>For example, a Disclosure for the second element of the <tt>nationalities</tt> array in the following claim set:</t>

<sourcecode type="json">{
  "nationalities": ["DE", "FR"]
}
</sourcecode>
<t>could be created by first creating the following array:</t>

<sourcecode type="json">["lklxF5jMYlGTPUovMNIvCA", "FR"]
</sourcecode>
<t>The resulting Disclosure would be: <tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgIkZSIl0</tt></t>
</section>

<section anchor="hashing_disclosures"><name>Hashing Disclosures</name>
<t>For embedding the Disclosures in the SD-JWT, the Disclosures are hashed using the hash algorithm specified in the <tt>_sd_alg</tt> claim described in <xref target="hash_function_claim"/>. The resulting digest is then included in the SD-JWT payload instead of the original claim value, as described next.</t>
<t>The digest MUST be taken over the US-ASCII bytes of the base64url-encoded Disclosure. This follows the convention in JWS <xref target="RFC7515"/> and JWE <xref target="RFC7516"/>. The bytes of the digest MUST then be base64url-encoded.</t>
<t>It is important to note that:</t>

<ul>
<li>The input to the hash function MUST be the base64url-encoded Disclosure, not the bytes encoded by the base64url string.</li>
<li>The bytes of the output of the hash function MUST be base64url-encoded, and are not the bytes making up the (often used) hex representation of the bytes of the digest.</li>
</ul>
<t>For example, the SHA-256 digest of the Disclosure
<tt>WyI2cU1RdlJMNWhhaiIsICJmYW1pbHlfbmFtZSIsICJNw7ZiaXVzIl0</tt> would be
<tt>uutlBuYeMDyjLLTpf6Jxi7yNkEF35jdyWMn9U7b_RYY</tt>.</t>
<t>The SHA-256 digest of the Disclosure
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgIkZSIl0</tt> would be
<tt>w0I8EKcdCtUPkGCNUrfwVp2xEgNjtoIDlOxc9-PlOhs</tt>.</t>
</section>

<section anchor="embedding_disclosure_digests"><name>Embedding Disclosure Digests in SD-JWTs</name>
<t>For selectively disclosable claims, the digests of the Disclosures are embedded into the Issuer-signed JWT instead of the claims themselves. The precise way of embedding depends on whether a claim is an object property (key-value pair) or an array element.</t>

<ul>
<li>For a claim that is an object property, the Issuer embeds a Disclosure digest as described in <xref target="embedding_object_properties"/>.</li>
<li>For a claim that is an array element, the Issuer creates a Disclosure digest as described in <xref target="embedding_array_elements"/>.</li>
</ul>

<section anchor="embedding_object_properties"><name>Object Properties</name>
<t>Digests of Disclosures for object properties are added to an array under the new
key <tt>_sd</tt> in the object. The <tt>_sd</tt> key MUST refer to an array of strings, each
string being a digest of a Disclosure or a decoy digest as described in <xref target="decoy_digests"/>.</t>
<t>The array MAY be empty in case the Issuer decided not to selectively disclose
any of the claims at that level. However, it is RECOMMENDED to omit the <tt>_sd</tt>
key in this case to save space.</t>
<t>The Issuer MUST hide the original order of the claims in the array. To ensure
this, it is RECOMMENDED to shuffle the array of hashes, e.g., by sorting it
alphanumerically or randomly, after potentially adding
decoy digests as described in <xref target="decoy_digests"/>. The precise method does not matter as long as it
does not depend on the original order of elements.</t>
<t>For example, using the digest of the object property Disclosure created above,
the Issuer could create the following SD-JWT payload to make <tt>family_name</tt>
selectively disclosable:</t>

<sourcecode type="json">{
  "given_name": "Alice",
  "_sd": ["uutlBuYeMDyjLLTpf6Jxi7yNkEF35jdyWMn9U7b_RYY"]
}
</sourcecode>
</section>

<section anchor="embedding_array_elements"><name>Array Elements</name>
<t>Digests of Disclosures for array elements are added to the array in the same
position as the original claim value in the array. For each digest, an object
of the form <tt>{"...": "&lt;digest&gt;"}</tt> is added to the array. The key MUST always be the
string <tt>...</tt> (three dots). The value MUST be the digest of the Disclosure created as
described in <xref target="hashing_disclosures"/>. There MUST NOT be any other keys in the
object.</t>
<t>For example, using the digest of the array element Disclosure created above,
the Issuer could create the following SD-JWT payload to make the second element
of the <tt>nationalities</tt> array selectively disclosable:</t>

<sourcecode type="json">{
  "nationalities":
    ["DE", {"...": "w0I8EKcdCtUPkGCNUrfwVp2xEgNjtoIDlOxc9-PlOhs"}]
}
</sourcecode>
<t>As described in <xref target="verifier_verification"/>, Verifiers ignore all selectively
disclosable array elements for which they did not receive a Disclosure. In the
example above, the verification process would output an array with only one
element unless a matching Disclosure for the second element is received.</t>
</section>
</section>

<section anchor="decoy_digests"><name>Decoy Digests</name>
<t>An Issuer MAY add additional digests to the SD-JWT payload that are not associated with
any claim.  The purpose of such "decoy" digests is to make it more difficult for
an attacker to see the original number of claims contained in the SD-JWT. Decoy
digests MAY be added both to the <tt>_sd</tt> array for objects as well as in arrays.</t>
<t>It is RECOMMENDED to create the decoy digests by hashing over a
cryptographically secure random number. The bytes of the digest MUST then be
base64url-encoded as above. The same digest function as for the Disclosures MUST
be used.</t>
<t>For decoy digests, no Disclosure is sent to the Holder, i.e., the Holder will
see digests that do not correspond to any Disclosure. See
<xref target="decoy_digests_privacy"/> for additional privacy considerations.</t>
<t>To ensure readability and replicability, the examples in this specification do
not contain decoy digests unless explicitly stated. For an example
with decoy digests, see <xref target="example-simple_structured"/>.</t>
</section>
</section>

<section anchor="kb-jwt"><name>Key Binding JWT</name>
<t>This section defines the contents of the optional Key Binding JWT, which
the Holder MAY include in the SD-JWT to prove the Key Binding to the Verifier.</t>
<t>The JWT MUST contain the following elements:</t>

<ul>
<li><t>in the JOSE header,</t>

<ul>
<li><tt>typ</tt>: REQUIRED. MUST be <tt>kb+jwt</tt>, which explicitly types the Key Binding JWT as recommended in Section 3.11 of <xref target="RFC8725"/>.</li>
<li><tt>alg</tt>: REQUIRED. A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. MUST NOT be <tt>none</tt> or an identifier for a symmetric algorithm (MAC).</li>
</ul></li>
<li><t>in the JWT payload,</t>

<ul>
<li><tt>iat</tt>: REQUIRED. The value of this claim MUST be the time at which the Key Binding JWT was issued using the syntax defined in <xref target="RFC7519"/>.</li>
<li><tt>aud</tt>: REQUIRED. The intended receiver of the Key Binding JWT. How the value is represented is up to the protocol used and out of scope of this specification.</li>
<li><tt>nonce</tt>: REQUIRED. Ensures the freshness of the signature. The value type of this claim MUST be a string. How this value is obtained is up to the protocol used and out of scope of this specification.</li>
<li><tt>_sd_hash</tt>: REQUIRED. The base64url-encoded hash digest over the Issuer-signed JWT and the selected Disclosures as defined below.</li>
</ul></li>
</ul>

<section anchor="integrity-protection-of-the-presentation"><name>Integrity Protection of the Presentation</name>
<t>The hash digest in <tt>_sd_hash</tt> ensures the integrity of the Presentation. It MUST
be taken over the US-ASCII bytes preceding the KB-JWT in the Presentation, i.e.,
the Issuer-signed JWT, a tilde character, and zero or more Disclosures selected
for presentation to the Verifier, each followed by a tilde character:</t>

<artwork>&lt;Issuer-signed JWT&gt;~&lt;Disclosure 1&gt;~&lt;Disclosure 2&gt;~...~&lt;Disclosure N&gt;~
</artwork>
<t>The bytes of the digest MUST then be base64url-encoded.</t>
<t>The same hash algorithm as for the Disclosures MUST be used (defined by
the <tt>_sd_alg</tt> element in the Issuer-signed JWT or the default value, as defined
in <xref target="hash_function_claim"/>).</t>
</section>

<section anchor="validating-the-key-binding-jwt"><name>Validating the Key Binding JWT</name>
<t>To validate the signature on the Key Binding JWT, the Verifier MUST use the key material in the SD-JWT. If it is not clear from the SD-JWT, the Key Binding JWT MUST specify which key material the Verifier needs to use to validate the Key Binding JWT signature using JOSE header parameters such as <tt>kid</tt> and <tt>x5c</tt>.</t>
<t>Whether to require Key Binding is up to the Verifier's policy, based on the set
of trust requirements such as trust frameworks it belongs to. See
<xref target="key_binding_security"/> for security considerations.</t>
</section>

<section anchor="alternatives-to-a-key-binding-jwt"><name>Alternatives to a Key Binding JWT</name>
<t>Other ways of proving Key Binding MAY be used when supported by the Verifier,
e.g., when the presented SD-JWT without a Key Binding JWT is itself embedded in a
signed JWT. See <xref target="enveloping"/> for details.</t>
</section>
</section>
</section>

<section anchor="example-1"><name>Example 1: SD-JWT</name>
<t>In this example, a simple SD-JWT is demonstrated. This example is split into issuance and presentation.</t>
<t>Note: Throughout the examples in this document, line breaks had to be added to
JSON strings and base64-encoded strings to adhere to the 72 character limit for
lines in RFCs and for readability. JSON does not allow line breaks within strings.</t>

<section anchor="issuance"><name>Issuance</name>
<t>The Issuer is using the following input claim set:</t>

<sourcecode type="json">{
  "sub": "user_42",
  "given_name": "John",
  "family_name": "Doe",
  "email": "johndoe@example.com",
  "phone_number": "+1-202-555-0101",
  "phone_number_verified": true,
  "address": {
    "street_address": "123 Main St",
    "locality": "Anytown",
    "region": "Anystate",
    "country": "US"
  },
  "birthdate": "1940-01-01",
  "updated_at": 1570000000,
  "nationalities": [
    "US",
    "DE"
  ]
}
</sourcecode>
<t>The Issuer in this case made the following decisions:</t>

<ul>
<li>The <tt>nationalities</tt> array is always visible, but its contents are selectively disclosable.</li>
<li>The <tt>sub</tt> element and essential verification data (<tt>iss</tt>, <tt>iat</tt>, <tt>cnf</tt>, etc.) are always visible.</li>
<li>All other End-User claims are selectively disclosable.</li>
<li>For <tt>address</tt>, the Issuer is using a flat structure, i.e., all of the claims
in the <tt>address</tt> claim can only be disclosed in full. Other options are
discussed in <xref target="nested_data"/>.</li>
</ul>
<t>The following payload is used for the SD-JWT:</t>

<sourcecode type="json">{
  "_sd": [
    "CrQe7S5kqBAHt-nMYXgc6bdt2SH5aTY1sU_M-PgkjPI",
    "JzYjH4svliH0R3PyEMfeZu6Jt69u5qehZo7F7EPYlSE",
    "PorFbpKuVu6xymJagvkFsFXAbRoc2JGlAUA2BA4o7cI",
    "TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo",
    "XQ_3kPKt1XyX7KANkqVR6yZ2Va5NrPIvPYbyMvRKBMM",
    "XzFrzwscM6Gn6CJDc6vVK8BkMnfG8vOSKfpPIZdAfdE",
    "gbOsI4Edq2x2Kw-w5wPEzakob9hV1cRD0ATN3oQL9JM",
    "jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4"
  ],
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "sub": "user_42",
  "nationalities": [
    {
      "...": "pFndjkZ_VCzmyTa6UjlZo3dh-ko8aIKQc9DlGzhaVYo"
    },
    {
      "...": "7Cf6JkPudry3lcbwHgeZ8khAv1U1OSlerP0VkBJrWZ0"
    }
  ],
  "_sd_alg": "sha-256",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
</sourcecode>
<t>The following Disclosures are created by the Issuer:</t>
<t><strong>Claim <tt>given_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9o</tt><br/>
<tt>biJd</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "given_name", "John"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRv</tt><br/>
<tt>ZSJd</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "family_name", "Doe"]</tt></li>
</ul>
<t><strong>Claim <tt>email</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>JzYjH4svliH0R3PyEMfeZu6Jt69u5qehZo7F7EPYlSE</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VA</tt><br/>
<tt>ZXhhbXBsZS5jb20iXQ</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "email", "johndoe@example.com"]</tt></li>
</ul>
<t><strong>Claim <tt>phone_number</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>PorFbpKuVu6xymJagvkFsFXAbRoc2JGlAUA2BA4o7cI</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251bWJlciIsICIr</tt><br/>
<tt>MS0yMDItNTU1LTAxMDEiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "phone_number",</tt><br/>
<tt>"+1-202-555-0101"]</tt></li>
</ul>
<t><strong>Claim <tt>phone_number_verified</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>XQ_3kPKt1XyX7KANkqVR6yZ2Va5NrPIvPYbyMvRKBMM</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInBob25lX251bWJlcl92ZXJp</tt><br/>
<tt>ZmllZCIsIHRydWVd</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "phone_number_verified", true]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>XzFrzwscM6Gn6CJDc6vVK8BkMnfG8vOSKfpPIZdAfdE</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZHJlc3MiLCB7InN0cmVl</tt><br/>
<tt>dF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRv</tt><br/>
<tt>d24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "address", {"street_address":</tt><br/>
<tt>"123 Main St", "locality": "Anytown", "region": "Anystate",</tt><br/>
<tt>"country": "US"}]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>gbOsI4Edq2x2Kw-w5wPEzakob9hV1cRD0ATN3oQL9JM</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImJpcnRoZGF0ZSIsICIxOTQw</tt><br/>
<tt>LTAxLTAxIl0</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "birthdate", "1940-01-01"]</tt></li>
</ul>
<t><strong>Claim <tt>updated_at</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>CrQe7S5kqBAHt-nMYXgc6bdt2SH5aTY1sU_M-PgkjPI</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgInVwZGF0ZWRfYXQiLCAxNTcw</tt><br/>
<tt>MDAwMDAwXQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "updated_at", 1570000000]</tt></li>
</ul>
<t><strong>Array Entry</strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>pFndjkZ_VCzmyTa6UjlZo3dh-ko8aIKQc9DlGzhaVYo</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgIlVTIl0</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "US"]</tt></li>
</ul>
<t><strong>Array Entry</strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>7Cf6JkPudry3lcbwHgeZ8khAv1U1OSlerP0VkBJrWZ0</tt></li>
<li>Disclosure:<br/>
<tt>WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgIkRFIl0</tt></li>
<li>Contents:
<tt>["nPuoQnkRFq3BIeAm7AnXFA", "DE"]</tt></li>
</ul>
<t>The payload is then signed by the Issuer to create a JWT like the following:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIkNyUWU3UzVrcUJBSHQtbk1ZWGdjNmJkd
DJTSDVhVFkxc1VfTS1QZ2tqUEkiLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5d
TVxZWhabzdGN0VQWWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEFiUm9jMkpHb
EFVQTJCQTRvN2NJIiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3Jae
mZVYW9tTG8iLCAiWFFfM2tQS3QxWHlYN0tBTmtxVlI2eVoyVmE1TnJQSXZQWWJ5TXZSS
0JNTSIsICJYekZyendzY002R242Q0pEYzZ2Vks4QmtNbmZHOHZPU0tmcFBJWmRBZmRFI
iwgImdiT3NJNEVkcTJ4Mkt3LXc1d1BFemFrb2I5aFYxY1JEMEFUTjNvUUw5Sk0iLCAia
nN1OXlWdWx3UVFsaEZsTV8zSmx6TWFTRnpnbGhRRzBEcGZheVF3TFVLNCJdLCAiaXNzI
jogImh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwgImlhdCI6IDE2ODMwMDAwMDAsI
CJleHAiOiAxODgzMDAwMDAwLCAic3ViIjogInVzZXJfNDIiLCAibmF0aW9uYWxpdGllc
yI6IFt7Ii4uLiI6ICJwRm5kamtaX1ZDem15VGE2VWpsWm8zZGgta284YUlLUWM5RGxHe
mhhVllvIn0sIHsiLi4uIjogIjdDZjZKa1B1ZHJ5M2xjYndIZ2VaOGtoQXYxVTFPU2xlc
lAwVmtCSnJXWjAifV0sICJfc2RfYWxnIjogInNoYS0yNTYiLCAiY25mIjogeyJqd2siO
iB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAieCI6ICJUQ0FFUjE5WnZ1M09IR
jRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwgInkiOiAiWnhqaVdXYlpNUUdIV
ldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9fX0.OeQrinudSFTXNysz2NuNQ
rwWJv-P9gQ-Ce3wWEYZkxngeA4GKfPfApdNzBa40dH1urt8tXhW2WQl-I00v8teuw
</sourcecode>
<t>The issued SD-JWT might look as follows:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIkNyUWU3UzVrcUJBSHQtbk1ZWGdjNmJkd
DJTSDVhVFkxc1VfTS1QZ2tqUEkiLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5d
TVxZWhabzdGN0VQWWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEFiUm9jMkpHb
EFVQTJCQTRvN2NJIiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3Jae
mZVYW9tTG8iLCAiWFFfM2tQS3QxWHlYN0tBTmtxVlI2eVoyVmE1TnJQSXZQWWJ5TXZSS
0JNTSIsICJYekZyendzY002R242Q0pEYzZ2Vks4QmtNbmZHOHZPU0tmcFBJWmRBZmRFI
iwgImdiT3NJNEVkcTJ4Mkt3LXc1d1BFemFrb2I5aFYxY1JEMEFUTjNvUUw5Sk0iLCAia
nN1OXlWdWx3UVFsaEZsTV8zSmx6TWFTRnpnbGhRRzBEcGZheVF3TFVLNCJdLCAiaXNzI
jogImh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwgImlhdCI6IDE2ODMwMDAwMDAsI
CJleHAiOiAxODgzMDAwMDAwLCAic3ViIjogInVzZXJfNDIiLCAibmF0aW9uYWxpdGllc
yI6IFt7Ii4uLiI6ICJwRm5kamtaX1ZDem15VGE2VWpsWm8zZGgta284YUlLUWM5RGxHe
mhhVllvIn0sIHsiLi4uIjogIjdDZjZKa1B1ZHJ5M2xjYndIZ2VaOGtoQXYxVTFPU2xlc
lAwVmtCSnJXWjAifV0sICJfc2RfYWxnIjogInNoYS0yNTYiLCAiY25mIjogeyJqd2siO
iB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAieCI6ICJUQ0FFUjE5WnZ1M09IR
jRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwgInkiOiAiWnhqaVdXYlpNUUdIV
ldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9fX0.OeQrinudSFTXNysz2NuNQ
rwWJv-P9gQ-Ce3wWEYZkxngeA4GKfPfApdNzBa40dH1urt8tXhW2WQl-I00v8teuw~Wy
IyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd~WyJlb
HVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRvZSJd~WyI2SWo3
dE0tYTVpVlBHYm9TNXRtdlZBIiwgImVtYWlsIiwgImpvaG5kb2VAZXhhbXBsZS5jb20i
XQ~WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgInBob25lX251bWJlciIsICIrMS0yM
DItNTU1LTAxMDEiXQ~WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInBob25lX251bW
Jlcl92ZXJpZmllZCIsIHRydWVd~WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZ
HJlc3MiLCB7InN0cmVldF9hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5I
jogIkFueXRvd24iLCAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMif
V0~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImJpcnRoZGF0ZSIsICIxOTQwLTAxL
TAxIl0~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgInVwZGF0ZWRfYXQiLCAxNTcwM
DAwMDAwXQ~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgIlVTIl0~WyJuUHVvUW5rUk
ZxM0JJZUFtN0FuWEZBIiwgIkRFIl0~
</sourcecode>
</section>

<section anchor="presentation"><name>Presentation</name>
<t>The following non-normative example shows an associated SD-JWT Presentation as
it would be sent from the Holder to the Verifier. Note that it consists of six
<tt>~</tt>-separated parts, with the Issuer-signed JWT as shown above in the beginning,
four Disclosures (for the claims <tt>given_name</tt>, <tt>family_name</tt>, <tt>address</tt>, and
<tt>nationalities</tt>) in the middle, and the Key Binding JWT as the last element.</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIkNyUWU3UzVrcUJBSHQtbk1ZWGdjNmJkd
DJTSDVhVFkxc1VfTS1QZ2tqUEkiLCAiSnpZakg0c3ZsaUgwUjNQeUVNZmVadTZKdDY5d
TVxZWhabzdGN0VQWWxTRSIsICJQb3JGYnBLdVZ1Nnh5bUphZ3ZrRnNGWEFiUm9jMkpHb
EFVQTJCQTRvN2NJIiwgIlRHZjRvTGJnd2Q1SlFhSHlLVlFaVTlVZEdFMHc1cnREc3Jae
mZVYW9tTG8iLCAiWFFfM2tQS3QxWHlYN0tBTmtxVlI2eVoyVmE1TnJQSXZQWWJ5TXZSS
0JNTSIsICJYekZyendzY002R242Q0pEYzZ2Vks4QmtNbmZHOHZPU0tmcFBJWmRBZmRFI
iwgImdiT3NJNEVkcTJ4Mkt3LXc1d1BFemFrb2I5aFYxY1JEMEFUTjNvUUw5Sk0iLCAia
nN1OXlWdWx3UVFsaEZsTV8zSmx6TWFTRnpnbGhRRzBEcGZheVF3TFVLNCJdLCAiaXNzI
jogImh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwgImlhdCI6IDE2ODMwMDAwMDAsI
CJleHAiOiAxODgzMDAwMDAwLCAic3ViIjogInVzZXJfNDIiLCAibmF0aW9uYWxpdGllc
yI6IFt7Ii4uLiI6ICJwRm5kamtaX1ZDem15VGE2VWpsWm8zZGgta284YUlLUWM5RGxHe
mhhVllvIn0sIHsiLi4uIjogIjdDZjZKa1B1ZHJ5M2xjYndIZ2VaOGtoQXYxVTFPU2xlc
lAwVmtCSnJXWjAifV0sICJfc2RfYWxnIjogInNoYS0yNTYiLCAiY25mIjogeyJqd2siO
iB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAieCI6ICJUQ0FFUjE5WnZ1M09IR
jRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwgInkiOiAiWnhqaVdXYlpNUUdIV
ldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9fX0.OeQrinudSFTXNysz2NuNQ
rwWJv-P9gQ-Ce3wWEYZkxngeA4GKfPfApdNzBa40dH1urt8tXhW2WQl-I00v8teuw~Wy
JlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIkRvZSJd~WyJBS
ngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZHJlc3MiLCB7InN0cmVldF9hZGRyZXNzI
jogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iLCAicmVnaW9uIjogI
kFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5ST
jl3IiwgImdpdmVuX25hbWUiLCAiSm9obiJd~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNB
IiwgIlVTIl0~eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImtiK2p3dCJ9.eyJub25jZSI
6ICIxMjM0NTY3ODkwIiwgImF1ZCI6ICJodHRwczovL3ZlcmlmaWVyLmV4YW1wbGUub3J
nIiwgImlhdCI6IDE2OTgwNzc3OTAsICJfc2RfaGFzaCI6ICIzNHQ4dkNDX2NfdlZMbk9
hZEJ0d2g0ZEZ2QkVyU2w5ektPcXdtNmloVF9VIn0.ZlotfwqF9NUTRAShrd8jGSJEB6e
3Z3EKm-AD5udfzggxfK-lQM4TCKbHK81eV088YTKl-UfM7WSyQpx5wpNpZw
</sourcecode>
<t>The following Key Binding JWT payload was created and signed for this presentation by the Holder:</t>

<sourcecode type="json">{
  "nonce": "1234567890",
  "aud": "https://verifier.example.org",
  "iat": 1698077790,
  "_sd_hash": "34t8vCC_c_vVLnOadBtwh4dFvBErSl9zKOqwm6ihT_U"
}
</sourcecode>
</section>
</section>

<section anchor="nested_data"><name>Considerations on Nested Data in SD-JWTs</name>
<t>Being JSON, an object in an SD-JWT payload MAY contain key-value pairs where the value is another object or objects MAY be elements in arrays. In SD-JWT, the Issuer decides for each claim individually, on each level of the JSON, whether the claim should be selectively disclosable or not. This choice can be made on each level independent from whether keys higher in the hierarchy are selectively disclosable.</t>
<t>From this it follows that the <tt>_sd</tt> key containing digests MAY appear multiple
times in an SD-JWT, and likewise, there MAY be multiple arrays within the
hierarchy with each having selectively disclosable elements. Digests of
selectively disclosable claims MAY even appear within other Disclosures.</t>
<t>The following examples illustrate some of the options an Issuer has. It is up to the Issuer to decide which structure to use, depending on, for example, the expected use cases for the SD-JWT, requirements for privacy, size considerations, or ecosystem requirements. For more examples with nested structures, see <xref target="example-simple_structured"/> and <xref target="example-complex-structured-sd-jwt"/>.</t>
<t>The following input claim set is used as an example throughout this section:</t>

<sourcecode type="json">{
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "address": {
    "street_address": "Schulstr. 12",
    "locality": "Schulpforta",
    "region": "Sachsen-Anhalt",
    "country": "DE"
  }
}
</sourcecode>
<t>Important: The following examples of the structures are non-normative and are not intended to
represent all possible options. They are also not meant to define or restrict
how <tt>address</tt> can be represented in an SD-JWT.</t>

<section anchor="example-flat-sd-jwt"><name>Example: Flat SD-JWT</name>
<t>The Issuer can decide to treat the <tt>address</tt> claim as a block that can either be disclosed completely or not at all. The following example shows that in this case, the entire <tt>address</tt> claim is treated as an object in the Disclosure.</t>

<sourcecode type="json">{
  "_sd": [
    "fOBUSQvo46yQO-wRwXBcGqvnbKIueISEL961_Sjd4do"
  ],
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>The Issuer would create the following Disclosure:</t>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>fOBUSQvo46yQO-wRwXBcGqvnbKIueISEL961_Sjd4do</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImFkZHJlc3MiLCB7InN0cmVl</tt><br/>
<tt>dF9hZGRyZXNzIjogIlNjaHVsc3RyLiAxMiIsICJsb2NhbGl0eSI6ICJTY2h1</tt><br/>
<tt>bHBmb3J0YSIsICJyZWdpb24iOiAiU2FjaHNlbi1BbmhhbHQiLCAiY291bnRy</tt><br/>
<tt>eSI6ICJERSJ9XQ</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "address", {"street_address":</tt><br/>
<tt>"Schulstr. 12", "locality": "Schulpforta", "region":</tt><br/>
<tt>"Sachsen-Anhalt", "country": "DE"}]</tt></li>
</ul>
</section>

<section anchor="example-structured-sd-jwt"><name>Example: Structured SD-JWT</name>
<t>The Issuer may instead decide to make the <tt>address</tt> claim contents selectively disclosable individually:</t>

<sourcecode type="json">{
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "address": {
    "_sd": [
      "6vh9bq-zS4GKM_7GpggVbYzzu6oOGXrmNVGPHP75Ud0",
      "9gjVuXtdFROCgRrtNcGUXmF65rdezi_6Er_j76kmYyM",
      "KURDPh4ZC19-3tiz-Df39V8eidy1oV3a3H1Da2N0g88",
      "WN9r9dCBJ8HTCsS2jKASxTjEyW5m5x65_Z_2ro2jfXM"
    ]
  },
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>In this case, the Issuer would use the following data in the Disclosures for the <tt>address</tt> sub-claims:</t>
<t><strong>Claim <tt>street_address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>9gjVuXtdFROCgRrtNcGUXmF65rdezi_6Er_j76kmYyM</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInN0cmVldF9hZGRyZXNzIiwg</tt><br/>
<tt>IlNjaHVsc3RyLiAxMiJd</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "street_address", "Schulstr. 12"]</tt></li>
</ul>
<t><strong>Claim <tt>locality</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>6vh9bq-zS4GKM_7GpggVbYzzu6oOGXrmNVGPHP75Ud0</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImxvY2FsaXR5IiwgIlNjaHVs</tt><br/>
<tt>cGZvcnRhIl0</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "locality", "Schulpforta"]</tt></li>
</ul>
<t><strong>Claim <tt>region</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>KURDPh4ZC19-3tiz-Df39V8eidy1oV3a3H1Da2N0g88</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgInJlZ2lvbiIsICJTYWNoc2Vu</tt><br/>
<tt>LUFuaGFsdCJd</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "region", "Sachsen-Anhalt"]</tt></li>
</ul>
<t><strong>Claim <tt>country</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>WN9r9dCBJ8HTCsS2jKASxTjEyW5m5x65_Z_2ro2jfXM</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImNvdW50cnkiLCAiREUiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "country", "DE"]</tt></li>
</ul>
<t>The Issuer may also make one sub-claim of <tt>address</tt> non-selectively disclosable and hide only the other sub-claims:</t>

<sourcecode type="json">{
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "address": {
    "_sd": [
      "6vh9bq-zS4GKM_7GpggVbYzzu6oOGXrmNVGPHP75Ud0",
      "9gjVuXtdFROCgRrtNcGUXmF65rdezi_6Er_j76kmYyM",
      "KURDPh4ZC19-3tiz-Df39V8eidy1oV3a3H1Da2N0g88"
    ],
    "country": "DE"
  },
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>In this case there would be no Disclosure for <tt>country</tt> since it is provided in the clear.</t>
</section>

<section anchor="example-sd-jwt-with-recursive-disclosures"><name>Example: SD-JWT with Recursive Disclosures</name>
<t>The Issuer may also decide to make the <tt>address</tt> claim contents selectively disclosable recursively, i.e., the <tt>address</tt> claim is made selectively disclosable as well as its sub-claims:</t>

<sourcecode type="json">{
  "_sd": [
    "HvrKX6fPV0v9K_yCVFBiLFHsMaxcD_114Em6VT8x1lg"
  ],
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>The Issuer creates Disclosures first for the sub-claims and then includes their digests in the Disclosure for the <tt>address</tt> claim:</t>
<t><strong>Claim <tt>street_address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>9gjVuXtdFROCgRrtNcGUXmF65rdezi_6Er_j76kmYyM</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInN0cmVldF9hZGRyZXNzIiwg</tt><br/>
<tt>IlNjaHVsc3RyLiAxMiJd</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "street_address", "Schulstr. 12"]</tt></li>
</ul>
<t><strong>Claim <tt>locality</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>6vh9bq-zS4GKM_7GpggVbYzzu6oOGXrmNVGPHP75Ud0</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImxvY2FsaXR5IiwgIlNjaHVs</tt><br/>
<tt>cGZvcnRhIl0</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "locality", "Schulpforta"]</tt></li>
</ul>
<t><strong>Claim <tt>region</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>KURDPh4ZC19-3tiz-Df39V8eidy1oV3a3H1Da2N0g88</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgInJlZ2lvbiIsICJTYWNoc2Vu</tt><br/>
<tt>LUFuaGFsdCJd</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "region", "Sachsen-Anhalt"]</tt></li>
</ul>
<t><strong>Claim <tt>country</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>WN9r9dCBJ8HTCsS2jKASxTjEyW5m5x65_Z_2ro2jfXM</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImNvdW50cnkiLCAiREUiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "country", "DE"]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>HvrKX6fPV0v9K_yCVFBiLFHsMaxcD_114Em6VT8x1lg</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImFkZHJlc3MiLCB7Il9zZCI6</tt><br/>
<tt>IFsiNnZoOWJxLXpTNEdLTV83R3BnZ1ZiWXp6dTZvT0dYcm1OVkdQSFA3NVVk</tt><br/>
<tt>MCIsICI5Z2pWdVh0ZEZST0NnUnJ0TmNHVVhtRjY1cmRlemlfNkVyX2o3Nmtt</tt><br/>
<tt>WXlNIiwgIktVUkRQaDRaQzE5LTN0aXotRGYzOVY4ZWlkeTFvVjNhM0gxRGEy</tt><br/>
<tt>TjBnODgiLCAiV045cjlkQ0JKOEhUQ3NTMmpLQVN4VGpFeVc1bTV4NjVfWl8y</tt><br/>
<tt>cm8yamZYTSJdfV0</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "address", {"_sd":</tt><br/>
<tt>["6vh9bq-zS4GKM_7GpggVbYzzu6oOGXrmNVGPHP75Ud0",</tt><br/>
<tt>"9gjVuXtdFROCgRrtNcGUXmF65rdezi_6Er_j76kmYyM",</tt><br/>
<tt>"KURDPh4ZC19-3tiz-Df39V8eidy1oV3a3H1Da2N0g88",</tt><br/>
<tt>"WN9r9dCBJ8HTCsS2jKASxTjEyW5m5x65_Z_2ro2jfXM"]}]</tt></li>
</ul>
</section>
</section>

<section anchor="verification-1"><name>Verification and Processing</name>

<section anchor="sd_jwt_verification"><name>Verification of the SD-JWT</name>
<t>Upon receiving an SD-JWT, a Holder or a Verifier MUST ensure that</t>

<ul>
<li>the Issuer-signed JWT is valid, i.e., it is signed by the Issuer and the signature is valid, and</li>
<li>all Disclosures are correct, i.e., their digests are referenced in the Issuer-signed JWT.</li>
</ul>
<t>The Holder or the Verifier MUST perform the following (or equivalent) steps when receiving
an SD-JWT:</t>

<ol>
<li>Separate the SD-JWT into the Issuer-signed JWT, the Disclosures (if any), and the Key Binding JWT (if present).</li>
<li><t>Validate the Issuer-signed JWT:</t>

<ol>
<li>Ensure that a signing algorithm was used that was deemed secure for the application. Refer to <xref target="RFC8725"/>, Sections 3.1 and 3.2 for details. The <tt>none</tt> algorithm MUST NOT be accepted.</li>
<li>Validate the signature over the Issuer-signed JWT.</li>
<li>Validate the Issuer and that the signing key belongs to this Issuer.</li>
<li>Check that the <tt>_sd_alg</tt> claim value is understood and the hash algorithm is deemed secure.</li>
</ol></li>
<li><t>Process the Disclosures and embedded digests in the Issuer-signed JWT as follows:</t>

<ol>
<li><t>For each Disclosure provided:</t>

<ol>
<li>Calculate the digest over the base64url-encoded string as described in <xref target="hashing_disclosures"/>.</li>
</ol></li>
<li><t>(*) Identify all embedded digests in the Issuer-signed JWT as follows:</t>

<ol>
<li>Find all objects having an <tt>_sd</tt> key that refers to an array of strings.</li>
<li>Find all array elements that are objects with one key, that key being <tt>...</tt> and referring to a string.</li>
</ol></li>
<li><t>(**) For each embedded digest found in the previous step:</t>

<ol>
<li>Compare the value with the digests calculated previously and find the matching Disclosure. If no such Disclosure can be found, the digest MUST be ignored.</li>
<li><t>If the digest was found in an object's <tt>_sd</tt> key:</t>

<ol>
<li>If the respective Disclosure is not a JSON-encoded array of three elements (salt, claim name, claim value), the SD-JWT MUST be rejected.</li>
<li>If the claim name is <tt>_sd</tt> or <tt>...</tt>, the SD-JWT MUST be rejected.</li>
<li>If the claim name already exists at the level of the <tt>_sd</tt> key, the SD-JWT MUST be rejected.</li>
<li>Insert, at the level of the <tt>_sd</tt> key, a new claim using the claim name and claim value from the Disclosure.</li>
<li>Recursively process the value using the steps described in (*) and (**).</li>
</ol></li>
<li><t>If the digest was found in an array element:</t>

<ol>
<li>If the respective Disclosure is not a JSON-encoded array of two elements (salt, value), the SD-JWT MUST be rejected.</li>
<li>Replace the array element with the value from the Disclosure.</li>
<li>Recursively process the value using the steps described in (*) and (**).</li>
</ol></li>
</ol></li>
<li>If any digests were found more than once in the previous step, the SD-JWT MUST be rejected.</li>
<li>Remove all array elements for which the digest was not found in the previous step.</li>
<li>Remove all <tt>_sd</tt> keys and their contents from the Issuer-signed JWT payload.</li>
<li>Remove the claim <tt>_sd_alg</tt> from the SD-JWT payload.</li>
</ol></li>
<li>Check that the SD-JWT is valid using claims such as <tt>nbf</tt>, <tt>iat</tt>, and <tt>exp</tt> in the processed payload. If a required validity-controlling claim is missing (see <xref target="sd-validity-claims"/>), the SD-JWT MUST be rejected.</li>
</ol>
<t>If any step fails, the SD-JWT is not valid and processing MUST be aborted.</t>
<t>It is up to the Holder how to maintain the mapping between the Disclosures and the plaintext claim values to be able to display them to the End-User when needed.</t>
</section>

<section anchor="holder_verification"><name>Processing by the Holder</name>
<t>If a Key Binding JWT is received by a Holder, the SD-JWT SHOULD be rejected.</t>
<t>For presentation to a Verifier, the Holder MUST perform the following (or equivalent) steps:</t>

<ol>
<li>Decide which Disclosures to release to the Verifier, obtaining proper End-User consent if necessary.</li>
<li>If Key Binding is required, create a Key Binding JWT.</li>
<li>Assemble the SD-JWT for Presentation, including the Issuer-signed JWT, the selected Disclosures and, if applicable, the Key Binding JWT.</li>
<li>Send the Presentation to the Verifier.</li>
</ol>
</section>

<section anchor="verifier_verification"><name>Verification by the Verifier</name>
<t>Upon receiving a Presentation, in addition to the checks outlined in <xref target="sd_jwt_verification"/>, Verifiers MUST ensure that</t>

<ul>
<li>if Key Binding is required, the Key Binding JWT is signed by the Holder and valid.</li>
</ul>
<t>To this end, Verifiers MUST follow the following steps (or equivalent):</t>

<ol>
<li>Determine if Key Binding is to be checked according to the Verifier's policy
for the use case at hand. This decision MUST NOT be based on whether
a Key Binding JWT is provided by the Holder or not. Refer to <xref target="key_binding_security"/> for
details.</li>
<li>Process the SD-JWT as defined in <xref target="sd_jwt_verification"/>.</li>
<li><t>If Key Binding is required:</t>

<ol>
<li>If Key Binding is provided by means not defined in this specification, verify the Key Binding according to the method used.</li>
<li><t>Otherwise, verify the Key Binding JWT as follows:</t>

<ol>
<li>If a Key Binding JWT is not provided, the Verifier MUST reject the Presentation.</li>
<li>Determine the public key for the Holder from the SD-JWT.</li>
<li>Ensure that a signing algorithm was used that was deemed secure for the application. Refer to <xref target="RFC8725"/>, Sections 3.1 and 3.2 for details. The <tt>none</tt> algorithm MUST NOT be accepted.</li>
<li>Validate the signature over the Key Binding JWT.</li>
<li>Check that the <tt>typ</tt> of the Key Binding JWT is <tt>kb+jwt</tt>.</li>
<li>Check that the creation time of the Key Binding JWT, as determined by the <tt>iat</tt> claim, is within an acceptable window.</li>
<li>Determine that the Key Binding JWT is bound to the current transaction and was created for this Verifier (replay protection) by validating <tt>nonce</tt> and <tt>aud</tt> claims.</li>
<li>Calculate the digest over the Issuer-signed JWT and Disclosures as defined in <xref target="integrity-protection-of-the-presentation"/> and verify that it matches the value of the <tt>_sd_hash</tt> claim in the Key Binding JWT.</li>
<li>Check that the Key Binding JWT is valid in all other respects, per <xref target="RFC7519"/> and <xref target="RFC8725"/>.</li>
</ol></li>
</ol></li>
</ol>
<t>If any step fails, the Presentation is not valid and processing MUST be aborted.</t>
<t>Otherwise, the processed SD-JWT payload can be passed to the application to be used for the intended purpose.</t>
</section>
</section>

<section anchor="json_serialization"><name>JWS JSON Serialization</name>
<t>This section describes an optional alternate format for SD-JWT using the JWS JSON Serialization from <xref target="RFC7515"/>.</t>
<t>For both the General and Flattened JSON Serialization, the SD-JWT is represented as a JSON object according
to Section 7.2 of <xref target="RFC7515"/>. The disclosures (both for issuance and presentation) SHOULD be included in the
serialized JWS using the member name <tt>disclosures</tt> at the top-level of the JSON object (the same level as the <tt>payload</tt> member). The
value of the <tt>disclosures</tt> member is an array of strings where each element is an individual Disclosure
as described in <xref target="creating_disclosures"/>. The Issuer includes a Disclosure for each selectively
disclosable claim of the SD-JWT payload, whereas the Holder includes only the Disclosures
selected for the given presentation.</t>
<t>Alternative methods for conveying the disclosures MAY be used (such as including them in a <tt>disclosures</tt>
member of an outer JSON structure also containing the JSON Serialized SD-JWT) as dictated by a specific
application or transport protocol. However, the details of such approaches fall outside the scope of this
specification.</t>
<t>Verification of the JWS JSON serialized SD-JWT follows the same rules defined in <xref target="verification"/>,
except that the SD-JWT does not need to be split into component parts, the disclosures
can be found in the respective member of the JSON object (or elsewhere), and Key Binding (if applicable)
will be provided by means not specifically defined in this specification.</t>
<t>Using a payload similar to that from <eref target="#example-1">Example 1</eref>, the following is a non-normative example of
a JWS JSON serialized SD-JWT from an Issuer with all the respective Disclosures.</t>

<sourcecode type="json">{
  "payload": "eyJfc2QiOiBbIjRIQm42YUlZM1d0dUdHV1R4LXFVajZjZGs2V0JwWn
    lnbHRkRmF2UGE3TFkiLCAiOHNtMVFDZjAyMXBObkhBQ0k1c1A0bTRLWmd5Tk9PQV
    ljVGo5SE5hQzF3WSIsICJTRE43OU5McEFuSFBta3JkZVlkRWE4OVhaZHNrME04RE
    tZU1FPVTJaeFFjIiwgIlh6RnJ6d3NjTTZHbjZDSkRjNnZWSzhCa01uZkc4dk9TS2
    ZwUElaZEFmZEUiLCAiZ2JPc0k0RWRxMngyS3ctdzV3UEV6YWtvYjloVjFjUkQwQV
    ROM29RTDlKTSIsICJqTUNYVnotLTliOHgzN1ljb0RmWFFpbnp3MXdaY2NjZkZSQk
    NGR3FkRzJvIiwgIm9LSTFHZDJmd041V3d2amxGa29oaWRHdmltLTMxT3VsUjNxMG
    hyRE8wNzgiXSwgImlzcyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsIC
    JpYXQiOiAxNjgzMDAwMDAwLCAiZXhwIjogMTg4MzAwMDAwMCwgIl9zZF9hbGciOi
    Aic2hhLTI1NiJ9",
  "protected": "eyJhbGciOiAiRVMyNTYifQ",
  "signature": "9tz3nIr4COwA4VjSkRwk6v1Dt62Q4-zwdidjlCHogtdAYLdtMtbe
    we6b009hobPl3DeG4n-ZNESaS-WMiFWGgA",
  "disclosures": [
    "WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInN1YiIsICJqb2huX2RvZV80MiJ
      d",
    "WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImdpdmVuX25hbWUiLCAiSm9obiJ
      d",
    "WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImZhbWlseV9uYW1lIiwgIkRvZSJ
      d",
    "WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImVtYWlsIiwgImpvaG5kb2VAZXh
      hbXBsZS5jb20iXQ",
    "WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInBob25lX251bWJlciIsICIrMS0
      yMDItNTU1LTAxMDEiXQ",
    "WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZHJlc3MiLCB7InN0cmVldF9
      hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iL
      CAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0",
    "WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImJpcnRoZGF0ZSIsICIxOTQwLTA
      xLTAxIl0"
  ]
}
</sourcecode>
<t>Below is a non-normative example of a presentation of the JWS JSON serialized SD-JWT, where the Holder
has selected to disclose <tt>given_name</tt>, <tt>family_name</tt>, and <tt>address</tt>.</t>

<sourcecode type="json">{
  "payload": "eyJfc2QiOiBbIjRIQm42YUlZM1d0dUdHV1R4LXFVajZjZGs2V0JwWn
    lnbHRkRmF2UGE3TFkiLCAiOHNtMVFDZjAyMXBObkhBQ0k1c1A0bTRLWmd5Tk9PQV
    ljVGo5SE5hQzF3WSIsICJTRE43OU5McEFuSFBta3JkZVlkRWE4OVhaZHNrME04RE
    tZU1FPVTJaeFFjIiwgIlh6RnJ6d3NjTTZHbjZDSkRjNnZWSzhCa01uZkc4dk9TS2
    ZwUElaZEFmZEUiLCAiZ2JPc0k0RWRxMngyS3ctdzV3UEV6YWtvYjloVjFjUkQwQV
    ROM29RTDlKTSIsICJqTUNYVnotLTliOHgzN1ljb0RmWFFpbnp3MXdaY2NjZkZSQk
    NGR3FkRzJvIiwgIm9LSTFHZDJmd041V3d2amxGa29oaWRHdmltLTMxT3VsUjNxMG
    hyRE8wNzgiXSwgImlzcyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsIC
    JpYXQiOiAxNjgzMDAwMDAwLCAiZXhwIjogMTg4MzAwMDAwMCwgIl9zZF9hbGciOi
    Aic2hhLTI1NiJ9",
  "protected": "eyJhbGciOiAiRVMyNTYifQ",
  "signature": "9tz3nIr4COwA4VjSkRwk6v1Dt62Q4-zwdidjlCHogtdAYLdtMtbe
    we6b009hobPl3DeG4n-ZNESaS-WMiFWGgA",
  "disclosures": [
    "WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImZhbWlseV9uYW1lIiwgIkRvZSJ
      d",
    "WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZHJlc3MiLCB7InN0cmVldF9
      hZGRyZXNzIjogIjEyMyBNYWluIFN0IiwgImxvY2FsaXR5IjogIkFueXRvd24iL
      CAicmVnaW9uIjogIkFueXN0YXRlIiwgImNvdW50cnkiOiAiVVMifV0",
    "WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImdpdmVuX25hbWUiLCAiSm9obiJ
      d"
  ]
}
</sourcecode>
</section>

<section anchor="enveloping"><name>Enveloping SD-JWTs</name>
<t>In some applications or transport protocols, it is desirable to encapsulate an SD-JWT into an outer JWT container. For example, an implementation may enclose multiple credentials and presentations, independent of their format, in a JWT to enable application-layer encryption during transport.</t>
<t>For such use cases, a compact serialized SD-JWT SHOULD be included as a single string value and a JSON serialized SD-JWT SHOULD be included as a JSON object value. Key Binding MAY be achieved by signing the envelope JWT instead of including a separate Key Binding JWT.</t>
<t>The following non-normative example payload shows a compact serialized SD-JWT Presentation enveloped in a JWT.
The SD-JWT is shown as the value of an <tt>_sd_jwt</tt> claim where <tt>eyJhbGci...emhlaUJhZzBZ</tt> is the Issuer-signed JWT and <tt>eyJhb...dYALCGg</tt> is a Disclosure. The SD-JWT does not contain a Key Binding JWT as the outer container can be signed instead.</t>

<artwork>{
  "aud": "https://verifier.example.org",
  "iat": 1580000000,
  "nonce": "iRnRdKuu1AtLM4ltc16by2XF0accSeutUescRw6BWC14",
  "_sd_jwt": "eyJhbGci...emhlaUJhZzBZ~eyJhb...dYALCGg~"
}
</artwork>
<t>This next non-normative example payload shows a JSON serialized SD-JWT enveloped in a JWT.
The JSON serialized SD-JWT appears as the value of an <tt>_js_sd_jwt</tt> claim and the disclosures are included separately as a top-level claim.
Key Binding is achieved by the signature on the enclosing JWT.</t>

<artwork>{
  "aud": "https://verifier.example.org",
  "iat": 2813308004,
  "nonce": "8z8z9X3jUtbthem84swFAzp4aqlHf-sCqQ6eM_qmpUQ",
  "_js_sd_jwt": {
    "protected": "eyJhbGciOiAiRVMyNTYifQ",
    "payload": "eyJfc2QiOiBbIjRIQm42YUlZM1d0dUdHV1R4LX...1NiJ9",
    "signature": "y_b8KFVc2GZ1n-...PKsjU3Q",
  }
  "disclosures": [
    "WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImZhbWlseV9uYW1...vZSJd",
    "WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImFkZHJlc3MiLC...iVVMifV0",
    "WyJlbHVWNU9nM2dTTklJO...V9BIiwgImdpdmVuX25hbWUiLCAiSm9obiJd"
 ]
}
</artwork>
<t>Other specifications or profiles of this specification may define alternative formats for transporting an SD-JWT that envelope multiple such SD-JWTs into one object and provide Key Binding and integrity protection of the presentation using means other than the Key Binding JWT.</t>
</section>

<section anchor="security_considerations"><name>Security Considerations</name>
<t>Security considerations in this section help achieve the following properties:</t>
<t><strong>Selective Disclosure:</strong> An adversary in the role of the Verifier cannot obtain
information from an SD-JWT about any claim name or claim value that was not
explicitly disclosed by the Holder unless that information can be derived from
other disclosed claims or sources other than the presented SD-JWT.</t>
<t><strong>Integrity:</strong> A malicious Holder cannot modify names or values of selectively disclosable claims without detection by the Verifier.</t>
<t>Additionally, as described in <xref target="key_binding_security"/>, the application of Key Binding can ensure that the presenter of an SD-JWT credential is the legitimate Holder of the credential.</t>

<section anchor="sec-is-jwt"><name>Mandatory Signing of the Issuer-signed JWT</name>
<t>The Issuer-signed JWT MUST be signed by the Issuer to protect integrity of the issued
claims. An attacker can modify or add claims if this JWT is not signed (e.g.,
change the "email" attribute to take over the victim's account or add an
attribute indicating a fake academic qualification).</t>
<t>The Verifier MUST always check the signature of the Issuer-signed JWT to ensure that it
has not been tampered with since the issuance. The Issuer-signed JWT MUST be rejected if the signature cannot be verified.</t>
<t>The security of the Issuer-signed JWT depends on the security of the signature algorithm.
Any of the JWS asymmetric digital signature algorithms registered in <xref target="IANA.JWS.Algorithms"/>
can be used, including post-quantum algorithms, when they are ready.</t>
</section>

<section anchor="sec-disclosures"><name>Manipulation of Disclosures</name>
<t>Holders can manipulate the Disclosures by changing the values of the claims
before sending them to the Verifier. The Verifier MUST check the Disclosures to
ensure that the values of the claims are correct, i.e., the digests of the Disclosures are actually present in the signed SD-JWT.</t>
<t>A naive Verifier that extracts
all claim values from the Disclosures (without checking the hashes) and inserts them into the SD-JWT payload
is vulnerable to this attack. However, in a structured SD-JWT, without comparing the digests of the
Disclosures, such an implementation could not determine the correct place in a
nested object where a claim needs to be inserted. Therefore, the naive implementation
would not only be insecure, but also incorrect.</t>
<t>The steps described in <xref target="verifier_verification"/> ensure that the Verifier
checks the Disclosures correctly.</t>
</section>

<section anchor="salt-entropy"><name>Entropy of the salt</name>
<t>The security model that conceals the plaintext claims relies on the fact
that salts not revealed to an attacker cannot be learned or guessed by
the attacker, even if other salts have been revealed. It is vitally
important to adhere to this principle. As such, each salt MUST be created
in such a manner that it is cryptographically random, long enough, and
has high entropy that it is not practical for the attacker to guess. A
new salt MUST be chosen for each claim independently from other salts.</t>
</section>

<section anchor="salt_minlength"><name>Minimum length of the salt</name>
<t>The RECOMMENDED minimum length of the randomly-generated portion of the salt is 128 bits.</t>
<t>The Issuer MUST ensure that a new salt value is chosen for each claim,
including when the same claim name occurs at different places in the
structure of the SD-JWT. This can be seen in Example 3 in the Appendix,
where multiple claims with the name <tt>type</tt> appear, but each of them has
a different salt.</t>
</section>

<section anchor="choice-of-a-hash-algorithm"><name>Choice of a Hash Algorithm</name>
<t>For the security of this scheme, the hash algorithm is required to be preimage resistant and second-preimage
resistant, i.e., it is infeasible to calculate the salt and claim value that result in
a particular digest, and, for any salt and claim value pair, it is infeasible to find a different salt and claim value pair that
result in the same digest, respectively.</t>
<t>Hash algorithms that do not meet the aforementioned requirements MUST NOT be used.
Inclusion in the "Named Information Hash Algorithm" registry <xref target="IANA.Hash.Algorithms"/>
alone does not indicate a hash algorithm's suitability for use in SD-JWT (it contains several
heavily truncated digests, such as <tt>sha-256-32</tt> and <tt>sha-256-64</tt>, which are unfit for security
applications).</t>
<t>Furthermore, the hash algorithms MD2, MD4, MD5, and SHA-1
revealed fundamental weaknesses and they MUST NOT be used.</t>
</section>

<section anchor="key_binding_security"><name>Key Binding</name>
<t>Key Binding aims to ensure that the presenter of an SD-JWT credential is actually the legitimate Holder of the credential.
An SD-JWT with Key Binding contains a public key, or a reference to a public key, that corresponds to a private key possessed by the Holder.
The Verifier requires that the Holder prove possession of that private key when presenting the SD-JWT credential.</t>
<t>Without Key Binding, a Verifier only gets the proof that the
credential was issued by a particular Issuer, but the credential itself
can be replayed by anyone who gets access to it. This means that, for
example, after a credential was leaked to an attacker, the attacker can
present the credential to any verifier that does not require a
binding. But also a malicious Verifier to which the Holder presented the
credential can present the credential to another Verifier if that other
Verifier does not require Key Binding.</t>
<t>Verifiers MUST decide whether Key Binding is required for a
particular use case before verifying a credential. This decision
can be informed by various factors including, but not limited to the following:
business requirements, the use case, the type of
binding between a Holder and its credential that is required for a use
case, the sensitivity of the use case, the expected properties of a
credential, the type and contents of other credentials expected to be
presented at the same time, etc.</t>
<t>It is important that a Verifier does not make its security policy
decisions based on data that can be influenced by an attacker or that
can be misinterpreted. For this reason, when deciding whether Key
Binding is required or not, Verifiers MUST NOT take into account</t>

<ul>
<li>whether a Key Binding JWT is present or not, as an attacker can
remove the Key Binding JWT from any Presentation and present it to the
Verifier, or</li>
<li>whether Key Binding data is present in the SD-JWT or not, as the
Issuer might have added the key to the SD-JWT in a format/claim that
is not recognized by the Verifier.</li>
</ul>
<t>If a Verifier has decided that Key Binding is required for a
particular use case and the Key Binding is not present, does not fulfill the requirements
(e.g., on the signing algorithm), or no recognized
Key Binding data is present in the SD-JWT, the Verifier will reject the
presentation, as described in <xref target="verifier_verification"/>.</t>
</section>

<section anchor="blinding-claim-names"><name>Blinding Claim Names</name>
<t>SD-JWT ensures that names of claims that are selectively disclosable are
always blinded. This prevents an attacker from learning the names of the
disclosable claims. However, the names of the claims that are not
disclosable are not blinded. This includes the keys of objects that themselves
are not blinded, but contain disclosable claims. This limitation
needs to be taken into account by Issuers when creating the structure of
the SD-JWT.</t>
</section>

<section anchor="sd-validity-claims"><name>Selectively-Disclosable Validity Claims</name>
<t>Claims controlling the validity of the SD-JWT, such as <tt>nbf</tt>, <tt>iat</tt>, and <tt>exp</tt>,
are usually included in plaintext in the SD-JWT payload, but MAY be
selectively disclosable instead. In this case, however, it is up to the Holder
to release the claims to the Verifier. A malicious Holder may try to hide, for
example, an expiration time (<tt>exp</tt>) in order to get a Verifier that "fails open"
to accept an expired SD-JWT.</t>
<t>Verifiers therefore MUST ensure that all claims they deem necessary for checking
the validity of the SD-JWT are present (or disclosed, respectively) before
checking the validity and accepting the SD-JWT. This is implemented in the last
step of the verification defined in <xref target="sd_jwt_verification"/>.</t>
<t>The precise set of required validity claims will typically be defined by
ecosystem rules or the credential format and MAY include claims other than
<tt>nbf</tt>, <tt>iat</tt>, and <tt>exp</tt>.</t>
</section>

<section anchor="issuer_signature_key_distribution"><name>Issuer Signature Key Distribution and Rotation</name>
<t>This specification does not define how signature verification keys of
Issuers are distributed to Verifiers. However, it is RECOMMENDED that
Issuers publish their keys in a way that allows for efficient and secure
key rotation and revocation, for example, by publishing keys at a
predefined location using the JSON Web Key Set (JWKS) format <xref target="RFC7517"/>.
Verifiers need to ensure that they are not using expired or revoked keys
for signature verification using reasonable and appropriate means for the given
key-distribution method.</t>
</section>

<section anchor="forwarding-credentials"><name>Forwarding Credentials</name>
<t>When Key Binding is not enforced,
any entity in possession of an SD-JWT Presentation can forward the contents to third parties.
When doing so, that entity may remove Disclosures such that the receiver
learns only a subset of the claims contained in the original SD-JWT.</t>
<t>For example, a device manufacturer might produce an SD-JWT
containing information about upstream and downstream supply chain contributors.
Each supply chain party can verify only the claims that were selectively disclosed to them
by an upstream party, and they can choose to further reduce the disclosed claims
when presenting to a downstream party.</t>
<t>In some scenarios this behavior could be desirable,
but if it is not, Issuers need to support and Verifiers need to enforce Key Binding.</t>
</section>

<section anchor="integrity-of-presentation"><name>Integrity of Presentation</name>
<t>In a Presentation, the Issuer-signed JWT is integrity-protected by the Issuer's
signature, and the Disclosures are integrity-protected by the digests included
in the Issuer-signed JWT. If used, the KB-JWT, besides proving Key Binding, protects the integrity of the
set of Disclosures the Holder disclosed.</t>
</section>

<section anchor="explicit_typing"><name>Explicit Typing</name>
<t>Section 3.11 of <xref target="RFC8725"/> describes the use of explicit typing to prevent confusion attacks
in which one kind of JWT is mistaken for another. SD-JWTs are also potentially
vulnerable to such confusion attacks, so it is RECOMMENDED to specify an explicit type
by including the <tt>typ</tt> header parameter when the SD-JWT is issued, and for Verifiers to check this value.</t>
<t>When explicit typing is employed for an SD-JWT, it is RECOMMENDED that a media type name of the format
"application/example+sd-jwt" be used, where "example" is replaced by the identifier for the specific kind of SD-JWT.
The definition of <tt>typ</tt> in Section 4.1.9 of <xref target="RFC7515"/> recommends that the "application/" prefix be omitted, so
"example+sd-jwt" would be the value of the <tt>typ</tt> header parameter.</t>
</section>
</section>

<section anchor="privacy_considerations"><name>Privacy Considerations</name>
<t>The privacy principles of <xref target="ISO.29100"/> should be adhered to.</t>

<section anchor="storage-of-signed-user-data"><name>Storage of Signed User Data</name>
<t>Wherever End-User data is stored, it represents a potential
target for an attacker. This target can be of particularly
high value when the data is signed by a trusted authority like an
official national identity service. For example, in OpenID Connect,
signed ID Tokens can be stored by Relying Parties. In the case of
SD-JWT, Holders have to store SD-JWTs,
and Issuers and Verifiers may decide to do so as well.</t>
<t>Not surprisingly, a leak of such data risks revealing private data of End-Users
to third parties. Signed End-User data, the authenticity of which
can be easily verified by third parties, further exacerbates the risk.
As discussed in <xref target="key_binding_security"/>, leaked
SD-JWTs may also allow attackers to impersonate Holders unless Key
Binding is enforced and the attacker does not have access to the
Holder's cryptographic keys. Altogether, leaked SD-JWT credentials may have
a high monetary value on black markets.</t>
<t>Due to these risks, systems implementing SD-JWT SHOULD be designed to minimize
the amount of data that is stored. All involved parties SHOULD store SD-JWTs
containing privacy-sensitive data only for as long as needed, including in log
files.</t>
<t>After Issuance, Issuers SHOULD NOT store the Issuer-signed JWT or the respective
Disclosures if they contain privacy-sensitive data.</t>
<t>Holders SHOULD store SD-JWTs only in
encrypted form, and, wherever possible, use hardware-backed encryption
in particular for the private Key Binding key. Decentralized storage
of data, e.g., on End-User devices, SHOULD be preferred for End-User
credentials over centralized storage. Expired SD-JWTs SHOULD be deleted
as soon as possible.</t>
<t>After Verification, Verifiers SHOULD NOT store the Issuer-signed JWT or the
respective Disclosures if they contain privacy-sensitive data. It may be
sufficient to store the result of the verification and any End-User data that is
needed for the application.</t>
<t>If reliable and secure key rotation and revocation is ensured according
to <xref target="issuer_signature_key_distribution"/>, Issuers may opt to publish
expired or revoked private signing keys (after a grace period that
ensures that the keys are not cached any longer at any Verifier). This
reduces the value of any leaked credentials as the signatures on them
can no longer be trusted to originate from the Issuer.</t>
</section>

<section anchor="confidentiality-during-transport"><name>Confidentiality during Transport</name>
<t>If the SD-JWT is transmitted over an insecure
channel during issuance or presentation, an adversary may be able to
intercept and read the End-User's personal data or correlate the information with previous uses of the same SD-JWT.</t>
<t>Usually, transport protocols for issuance and presentation of credentials
are designed to protect the confidentiality of the transmitted data, for
example, by requiring the use of TLS.</t>
<t>This specification therefore considers the confidentiality of the data to be
provided by the transport protocol and does not specify any encryption
mechanism.</t>
<t>Implementers MUST ensure that the transport protocol provides confidentiality
if the privacy of End-User data or correlation attacks by passive observers are a concern.</t>
<t>To encrypt the SD-JWT when transmitted over an insecure channel, implementers MAY use JSON Web Encryption (JWE) <xref target="RFC7516"/> by nesting the SD-JWT as the plaintext payload of a JWE.
Especially, when an SD-JWT is transmitted via a URL and information may be stored/cached in the browser or end up in web server logs, the SD-JWT SHOULD be encrypted using JWE.</t>
</section>

<section anchor="decoy_digests_privacy"><name>Decoy Digests</name>
<t>The use of decoy digests is RECOMMENDED when the number of claims (or the existence of particular claims) can be a side-channel disclosing information about otherwise undisclosed claims. In particular, if a claim in an SD-JWT is present only if a certain condition is met (e.g., a membership number is only contained if the End-User is a member of a group), the Issuer SHOULD add decoy digests when the condition is not met.</t>
<t>Decoy digests increase the size of the SD-JWT. The number of decoy digests (or whether to use them at all) is a trade-off between the size of the SD-JWT and the privacy of the End-User's data.</t>
</section>

<section anchor="unlinkability"><name>Unlinkability</name>
<t>Colluding Issuer/Verifier or Verifier/Verifier pairs could link issuance/presentation
or two presentation sessions to the same user on the basis of unique values encoded in the SD-JWT
(Issuer signature, salts, digests, etc.).</t>
<t>To prevent these types of linkability, various methods, including but not limited to the following ones can be used:</t>

<ul>
<li>Use advanced cryptographic schemes, outside the scope of this specification.</li>
<li>Issue a batch of SD-JWTs to the Holder to enable the Holder to use a unique SD-JWT per Verifier. This only helps with Verifier/Verifier unlinkability.</li>
</ul>
</section>

<section anchor="issuer-identifier"><name>Issuer Identifier</name>
<t>An Issuer issuing only one type of SD-JWT might have privacy implications, because if the Holder has an SD-JWT issued by that Issuer, its type and claim names can be determined.</t>
<t>For example, if the National Cancer Institute only issued SD-JWTs with cancer registry information, it is possible to deduce that the Holder owning its SD-JWT is a cancer patient.</t>
<t>Moreover, the issuer identifier alone may reveal information about the user.</t>
<t>For example, when a military organization or a drug rehabilitation center issues a vaccine credential, verifiers can deduce that the holder is a military member or may have a substance use disorder.</t>
<t>To mitigate this issue, a group of issuers may elect to use a common Issuer identifier. A group signature scheme outside the scope of this specification may also be used, instead of an individual signature.</t>
</section>
</section>

<section anchor="Acknowledgements"><name>Acknowledgements</name>
<t>We would like to thank
Alen Horvat,
Anders Rundgren,
Arjan Geluk,
Christian Bormann,
Christian Paquin,
David Bakker,
David Waite,
Fabian Hauck,
Filip Skokan,
Giuseppe De Marco,
John Mattsson,
Justin Richer,
Kushal Das,
Matthew Miller,
Mike Jones,
Mike Prorock,
Nat Sakimura,
Oliver Terbu,
Orie Steele,
Paul Bastian,
Pieter Kasselman,
Ryosuke Abe,
Shawn Butterfield,
Simon Schulz,
Tobias Looker,
Takahiko Kawasaki,
Torsten Lodderstedt,
Vittorio Bertocci, and
Yaron Sheffer
for their contributions (some of which substantial) to this draft and to the initial set of implementations.</t>
<t>The work on this draft was started at OAuth Security Workshop 2022 in Trondheim, Norway.</t>
</section>

<section anchor="iana_considerations"><name>IANA Considerations</name>

<section anchor="json-web-token-claims-registration"><name>JSON Web Token Claims Registration</name>
<t>This specification requests registration of the following Claims in the
IANA "JSON Web Token Claims" registry <xref target="IANA.JWT"/> established by <xref target="RFC7519"/>.</t>

<ul>
<li>Claim Name: <tt>_sd</tt></li>
<li>Claim Description: Digests of Disclosures for object properties</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s):  [[ <xref target="embedding_object_properties"/> of this specification ]]</li>
</ul>
<t><br/>
</t>

<ul>
<li>Claim Name: <tt>...</tt></li>
<li>Claim Description: Digest of the Disclosure for an array element</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s):  [[ <xref target="embedding_array_elements"/> of this specification ]]</li>
</ul>
<t><br/>
</t>

<ul>
<li>Claim Name: <tt>_sd_alg</tt></li>
<li>Claim Description: Hash algorithm used to generate disclosure digests and digest over presentation</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s):  [[ <xref target="hash_function_claim"/> of this specification ]]</li>
</ul>
<t><br/>
</t>

<ul>
<li>Claim Name: <tt>_sd_hash</tt></li>
<li>Claim Description: Digest of the Issuer-signed JWT and Disclosures in a Presentation</li>
<li>Change Controller: IETF</li>
<li>Specification Document(s):  [[ <xref target="kb-jwt"/> of this specification ]]</li>
</ul>
</section>

<section anchor="media-type-registration"><name>Media Type Registration</name>
<t>This section requests registration of the following media types <xref target="RFC2046"/> in
the "Media Types" registry <xref target="IANA.MediaTypes"/> in the manner described
in <xref target="RFC6838"/>.</t>
<t>To indicate that the content is an SD-JWT:</t>

<ul>
<li>Type name: application</li>
<li>Subtype name: sd-jwt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: binary; application/sd-jwt values are a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') or tilde ('~') characters.</li>
<li>Security considerations: See the Security Considerations section of [[ this specification ]], <xref target="RFC7519"/>, and <xref target="RFC8725"/>.</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: [[ this specification ]]</li>
<li>Applications that use this media type: TBD</li>
<li>Fragment identifier considerations: n/a</li>
<li><t>Additional information:</t>

<ul>
<li>Magic number(s): n/a</li>
<li>File extension(s): n/a</li>
<li>Macintosh file type code(s): n/a</li>
</ul></li>
<li>Person &amp; email address to contact for further information: Daniel Fett, mail@danielfett.de</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Daniel Fett, mail@danielfett.de</li>
<li>Change Controller: IETF</li>
<li>Provisional registration?  No</li>
</ul>
<t><br/>

To indicate that the content is a JWS JSON serialized SD-JWT:</t>

<ul>
<li>Type name: application</li>
<li>Subtype name: sd-jwt+json</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: binary; application/sd-jwt+json values are represented as a JSON Object; UTF-8 encoding SHOULD be employed for the JSON object.</li>
<li>Security considerations: See the Security Considerations section of [[ this specification ]], and <xref target="RFC7515"/>.</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: [[ this specification ]]</li>
<li>Applications that use this media type: TBD</li>
<li>Fragment identifier considerations: n/a</li>
<li><t>Additional information:</t>

<ul>
<li>Magic number(s): n/a</li>
<li>File extension(s): n/a</li>
<li>Macintosh file type code(s): n/a</li>
</ul></li>
<li>Person &amp; email address to contact for further information: Daniel Fett, mail@danielfett.de</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Daniel Fett, mail@danielfett.de</li>
<li>Change Controller: IETF</li>
<li>Provisional registration?  No</li>
</ul>
<t><br/>

To indicate that the content is a Key Binding JWT:</t>

<ul>
<li>Type name: application</li>
<li>Subtype name: kb+jwt</li>
<li>Required parameters: n/a</li>
<li>Optional parameters: n/a</li>
<li>Encoding considerations: binary; A Key Binding JWT is a JWT; JWT values are encoded as a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') characters.</li>
<li>Security considerations: See the Security Considerations section of [[ this specification ]], <xref target="RFC7519"/>, and <xref target="RFC8725"/>.</li>
<li>Interoperability considerations: n/a</li>
<li>Published specification: [[ this specification ]]</li>
<li>Applications that use this media type: TBD</li>
<li>Fragment identifier considerations: n/a</li>
<li><t>Additional information:</t>

<ul>
<li>Magic number(s): n/a</li>
<li>File extension(s): n/a</li>
<li>Macintosh file type code(s): n/a</li>
</ul></li>
<li>Person &amp; email address to contact for further information: Daniel Fett, mail@danielfett.de</li>
<li>Intended usage: COMMON</li>
<li>Restrictions on usage: none</li>
<li>Author: Daniel Fett, mail@danielfett.de</li>
<li>Change Controller: IETF</li>
<li>Provisional registration?  No</li>
</ul>
</section>

<section anchor="structured-syntax-suffix-registration"><name>Structured Syntax Suffix Registration</name>
<t>This section requests registration of the "+sd-jwt" structured syntax suffix in
the "Structured Syntax Suffix" registry <xref target="IANA.StructuredSuffix"/> in
the manner described in [RFC6838], which can be used to indicate that
the media type is encoded as an SD-JWT.</t>

<ul>
<li>Name: SD-JWT</li>
<li>+suffix: +sd-jwt</li>
<li>References: [[ this specification ]]</li>
<li>Encoding considerations: binary; SD-JWT values are a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') or tilde ('~') characters.</li>
<li>Interoperability considerations: n/a</li>
<li>Fragment identifier considerations: n/a</li>
<li>Security considerations: See the Security Considerations section of [[ this specification ]], <xref target="RFC7519"/>, and <xref target="RFC8725"/>.</li>
<li>Contact: Daniel Fett, mail@danielfett.de</li>
<li>Author/Change controller: IESG</li>
</ul>
</section>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7516.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7519.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
</references>
<references><name>Informative References</name>
<reference anchor="EUDIW.ARF" target="https://digital-strategy.ec.europa.eu/en/library/european-digital-identity-wallet-architecture-and-reference-framework">
  <front>
    <title>The European Digital Identity Wallet Architecture and Reference Framework</title>
    <author fullname="European Commission"/>
    <date/>
  </front>
</reference>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.terbu-sd-jwt-vc.xml"/>
<reference anchor="IANA.Hash.Algorithms" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
  <front>
    <title>Named Information Hash Algorithm</title>
    <author fullname="IANA"/>
    <date/>
  </front>
</reference>
<reference anchor="IANA.JWS.Algorithms" target="https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms">
  <front>
    <title>JSON Web Signature and Encryption Algorithms</title>
    <author fullname="IANA"/>
    <date/>
  </front>
</reference>
<reference anchor="IANA.JWT" target="https://www.iana.org/assignments/jwt">
  <front>
    <title>JSON Web Token Claims</title>
    <author>
      <organization>IANA</organization>
    </author>
    <date/>
  </front>
</reference>
<reference anchor="IANA.MediaTypes" target="https://www.iana.org/assignments/media-types/media-types.xhtml">
  <front>
    <title>Media Types</title>
    <author fullname="IANA"/>
    <date/>
  </front>
</reference>
<reference anchor="IANA.StructuredSuffix" target="https://www.iana.org/assignments/media-type-structured-suffix/media-type-structured-suffix.xhtml">
  <front>
    <title>Structured Syntax Suffixs</title>
    <author fullname="IANA"/>
    <date/>
  </front>
</reference>
<reference anchor="ISO.29100" target="https://standards.iso.org/ittf/PubliclyAvailableStandards/index.html">
  <front>
    <title>ISO/IEC 29100:2011 Information technology — Security techniques — Privacy framework</title>
    <author fullname="ISO"/>
    <date/>
  </front>
</reference>
<reference anchor="OIDC.IDA" target="https://openid.net/specs/openid-connect-4-identity-assurance-1_0-13.html">
  <front>
    <title>OpenID Connect for Identity Assurance 1.0</title>
    <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
      <organization>yes.com</organization>
    </author>
    <author fullname="Daniel Fett" initials="D." surname="Fett">
      <organization>yes.com</organization>
    </author>
    <author fullname="Mark Haine" initials="M." surname="Haine">
      <organization>Considrd.Consulting Ltd</organization>
    </author>
    <author fullname="Alberto Pulido" initials="A." surname="Pulido">
      <organization>Santander</organization>
    </author>
    <author fullname="Kai Lehmann" initials="K." surname="Lehmann">
      <organization>1&amp;1 Mail &amp; Media Development &amp; Technology GmbH</organization>
    </author>
    <author fullname="Kosuke Koiwai" initials="K." surname="Koiwai">
      <organization>KDDI Corporation</organization>
    </author>
    <date/>
  </front>
</reference>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.0020.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7517.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7800.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8725.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml"/>
<reference anchor="VC_DATA_v2.0" target="https://www.w3.org/TR/vc-data-model-2.0/">
  <front>
    <title>Verifiable Credentials Data Model 2.0</title>
    <author fullname="Manu Sporny">
      <organization>Digital Bazaar</organization>
    </author>
    <author fullname="Orie Steele">
      <organization>Transmute</organization>
    </author>
    <author fullname="Michael B. Jones">
      <organization>Microsoft</organization>
    </author>
    <author fullname="Gabe Cohen">
      <organization>Block</organization>
    </author>
    <author fullname="Oliver Terbu">
      <organization>Spruce Systems. Inc.</organization>
    </author>
    <date year="2023" month="Mar" day="07"/>
  </front>
</reference>
</references>

<section anchor="additional-examples"><name>Additional Examples</name>
<t>All of the following examples are non-normative.</t>

<section anchor="example-simple_structured"><name>Example 2: Handling Structured Claims</name>
<t>In this example, in contrast to <eref target="#example-1">Example 1</eref>, the Issuer decided to create a structured object for the <tt>address</tt> claim, allowing to separately disclose individual members of the claim.</t>
<t>The Issuer is using the following input claim set:</t>

<sourcecode type="json">{
  "sub": "6c5c0a49-b589-431d-bae7-219122a9ec2c",
  "given_name": "太郎",
  "family_name": "山田",
  "email": "\"unusual email address\"@example.jp",
  "phone_number": "+81-80-1234-5678",
  "address": {
    "street_address": "東京都港区芝公園４丁目２−８",
    "locality": "東京都",
    "region": "港区",
    "country": "JP"
  },
  "birthdate": "1940-01-01"
}
</sourcecode>
<t>The Issuer also decided to add decoy digests to prevent the Verifier from deducing the true number of claims.</t>
<t>The following payload is used for the SD-JWT:</t>

<sourcecode type="json">{
  "_sd": [
    "C9inp6YoRaEXR427zYJP7Qrk1WH_8bdwOA_YUrUnGQU",
    "Kuet1yAa0HIQvYnOVd59hcViO9Ug6J2kSfqYRBeowvE",
    "MMldOFFzB2d0umlmpTIaGerhWdU_PpYfLvKhh_f_9aY",
    "X6ZAYOII2vPN40V7xExZwVwz7yRmLNcVwt5DL8RLv4g",
    "Y34zmIo0QLLOtdMpXGwjBgLvr17yEhhYT0FGofR-aIE",
    "fyGp0WTwwPv2JDQln1lSiaeobZsMWA10bQ5989-9DTs",
    "ommFAicVT8LGHCB0uywx7fYuo3MHYKO15cz-RZEYM5Q",
    "s0BKYsLWxQQeU8tVlltM7MKsIRTrEIa1PkJmqxBBf5U"
  ],
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "address": {
    "_sd": [
      "6aUhzYhZ7SJ1kVmagQAO3u2ETN2CC1aHheZpKnaF0_E",
      "AzLlFobkJ2xiaupREPyoJz-9-NSldB6Cgjr7fUyoHzg",
      "PzzcVu0qbMuBGSjulfewzkesD9zutOExn5EWNwkrQ-k",
      "b2Dkw0jcIF9rGg8_PF8ZcvncW7zwZj5ryBWvXfrpzek",
      "cPYJHIZ8Vu-f9CCyVub2UfgEk8jvvXezwK1p_JneeXQ",
      "glT3hrSU7fSWgwF5UDZmWwBTw32gnUldIhi8hGVCaV4",
      "rvJd6iq6T5ejmsBMoGwuNXh9qAAFATAci40oidEeVsA",
      "uNHoWYhXsZhVJCNE2Dqy-zqt7t69gJKy5QaFv7GrMX4"
    ]
  },
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>The following Disclosures are created:</t>
<t><strong>Claim <tt>sub</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>X6ZAYOII2vPN40V7xExZwVwz7yRmLNcVwt5DL8RLv4g</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInN1YiIsICI2YzVjMGE0OS1i</tt><br/>
<tt>NTg5LTQzMWQtYmFlNy0yMTkxMjJhOWVjMmMiXQ</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "sub",</tt><br/>
<tt>"6c5c0a49-b589-431d-bae7-219122a9ec2c"]</tt></li>
</ul>
<t><strong>Claim <tt>given_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>ommFAicVT8LGHCB0uywx7fYuo3MHYKO15cz-RZEYM5Q</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImdpdmVuX25hbWUiLCAiXHU1</tt><br/>
<tt>OTJhXHU5MGNlIl0</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "given_name", "\u592a\u90ce"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>C9inp6YoRaEXR427zYJP7Qrk1WH_8bdwOA_YUrUnGQU</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgImZhbWlseV9uYW1lIiwgIlx1</tt><br/>
<tt>NWM3MVx1NzUzMCJd</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "family_name", "\u5c71\u7530"]</tt></li>
</ul>
<t><strong>Claim <tt>email</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Kuet1yAa0HIQvYnOVd59hcViO9Ug6J2kSfqYRBeowvE</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgImVtYWlsIiwgIlwidW51c3Vh</tt><br/>
<tt>bCBlbWFpbCBhZGRyZXNzXCJAZXhhbXBsZS5qcCJd</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "email", "\"unusual email</tt><br/>
<tt>address\"@example.jp"]</tt></li>
</ul>
<t><strong>Claim <tt>phone_number</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>s0BKYsLWxQQeU8tVlltM7MKsIRTrEIa1PkJmqxBBf5U</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInBob25lX251bWJlciIsICIr</tt><br/>
<tt>ODEtODAtMTIzNC01Njc4Il0</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "phone_number",</tt><br/>
<tt>"+81-80-1234-5678"]</tt></li>
</ul>
<t><strong>Claim <tt>street_address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>6aUhzYhZ7SJ1kVmagQAO3u2ETN2CC1aHheZpKnaF0_E</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgInN0cmVldF9hZGRyZXNzIiwg</tt><br/>
<tt>Ilx1Njc3MVx1NGVhY1x1OTBmZFx1NmUyZlx1NTMzYVx1ODI5ZFx1NTE2Y1x1</tt><br/>
<tt>NTcxMlx1ZmYxNFx1NGUwMVx1NzZlZVx1ZmYxMlx1MjIxMlx1ZmYxOCJd</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "street_address", "\u6771\u4eac\u</tt><br/>
<tt>90fd\u6e2f\u533a\u829d\u516c\u5712\uff14\u4e01\u76ee\uff12\u</tt><br/>
<tt>2212\uff18"]</tt></li>
</ul>
<t><strong>Claim <tt>locality</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>rvJd6iq6T5ejmsBMoGwuNXh9qAAFATAci40oidEeVsA</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImxvY2FsaXR5IiwgIlx1Njc3</tt><br/>
<tt>MVx1NGVhY1x1OTBmZCJd</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "locality", "\u6771\u4eac\u90fd"]</tt></li>
</ul>
<t><strong>Claim <tt>region</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>PzzcVu0qbMuBGSjulfewzkesD9zutOExn5EWNwkrQ-k</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgInJlZ2lvbiIsICJcdTZlMmZc</tt><br/>
<tt>dTUzM2EiXQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "region", "\u6e2f\u533a"]</tt></li>
</ul>
<t><strong>Claim <tt>country</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>uNHoWYhXsZhVJCNE2Dqy-zqt7t69gJKy5QaFv7GrMX4</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImNvdW50cnkiLCAiSlAiXQ</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "country", "JP"]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>MMldOFFzB2d0umlmpTIaGerhWdU_PpYfLvKhh_f_9aY</tt></li>
<li>Disclosure:<br/>
<tt>WyJ5eXRWYmRBUEdjZ2wyckk0QzlHU29nIiwgImJpcnRoZGF0ZSIsICIxOTQw</tt><br/>
<tt>LTAxLTAxIl0</tt></li>
<li>Contents:
<tt>["yytVbdAPGcgl2rI4C9GSog", "birthdate", "1940-01-01"]</tt></li>
</ul>
<t>The following decoy digests are added:</t>

<ul>
<li><tt>AzLlFobkJ2xiaupREPyoJz-9-NSldB6Cgjr7fUyoHzg</tt></li>
<li><tt>cPYJHIZ8Vu-f9CCyVub2UfgEk8jvvXezwK1p_JneeXQ</tt></li>
<li><tt>glT3hrSU7fSWgwF5UDZmWwBTw32gnUldIhi8hGVCaV4</tt></li>
<li><tt>b2Dkw0jcIF9rGg8_PF8ZcvncW7zwZj5ryBWvXfrpzek</tt></li>
<li><tt>fyGp0WTwwPv2JDQln1lSiaeobZsMWA10bQ5989-9DTs</tt></li>
<li><tt>Y34zmIo0QLLOtdMpXGwjBgLvr17yEhhYT0FGofR-aIE</tt></li>
</ul>
<t>The following is how a presentation of the SD-JWT that discloses only <tt>region</tt>
and <tt>country</tt> of the <tt>address</tt> property and without a Key Binding JWT could look like:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIkM5aW5wNllvUmFFWFI0Mjd6WUpQN1Fya
zFXSF84YmR3T0FfWVVyVW5HUVUiLCAiS3VldDF5QWEwSElRdlluT1ZkNTloY1ZpTzlVZ
zZKMmtTZnFZUkJlb3d2RSIsICJNTWxkT0ZGekIyZDB1bWxtcFRJYUdlcmhXZFVfUHBZZ
kx2S2hoX2ZfOWFZIiwgIlg2WkFZT0lJMnZQTjQwVjd4RXhad1Z3ejd5Um1MTmNWd3Q1R
Ew4Ukx2NGciLCAiWTM0em1JbzBRTExPdGRNcFhHd2pCZ0x2cjE3eUVoaFlUMEZHb2ZSL
WFJRSIsICJmeUdwMFdUd3dQdjJKRFFsbjFsU2lhZW9iWnNNV0ExMGJRNTk4OS05RFRzI
iwgIm9tbUZBaWNWVDhMR0hDQjB1eXd4N2ZZdW8zTUhZS08xNWN6LVJaRVlNNVEiLCAic
zBCS1lzTFd4UVFlVTh0VmxsdE03TUtzSVJUckVJYTFQa0ptcXhCQmY1VSJdLCAiaXNzI
jogImh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwgImlhdCI6IDE2ODMwMDAwMDAsI
CJleHAiOiAxODgzMDAwMDAwLCAiYWRkcmVzcyI6IHsiX3NkIjogWyI2YVVoelloWjdTS
jFrVm1hZ1FBTzN1MkVUTjJDQzFhSGhlWnBLbmFGMF9FIiwgIkF6TGxGb2JrSjJ4aWF1c
FJFUHlvSnotOS1OU2xkQjZDZ2pyN2ZVeW9IemciLCAiUHp6Y1Z1MHFiTXVCR1NqdWxmZ
Xd6a2VzRDl6dXRPRXhuNUVXTndrclEtayIsICJiMkRrdzBqY0lGOXJHZzhfUEY4WmN2b
mNXN3p3Wmo1cnlCV3ZYZnJwemVrIiwgImNQWUpISVo4VnUtZjlDQ3lWdWIyVWZnRWs4a
nZ2WGV6d0sxcF9KbmVlWFEiLCAiZ2xUM2hyU1U3ZlNXZ3dGNVVEWm1Xd0JUdzMyZ25Vb
GRJaGk4aEdWQ2FWNCIsICJydkpkNmlxNlQ1ZWptc0JNb0d3dU5YaDlxQUFGQVRBY2k0M
G9pZEVlVnNBIiwgInVOSG9XWWhYc1poVkpDTkUyRHF5LXpxdDd0NjlnSkt5NVFhRnY3R
3JNWDQiXX0sICJfc2RfYWxnIjogInNoYS0yNTYifQ.IjE4EfnYu1RZ1uz6yqtFh5Lppq
36VC4VeSr-hLDFpZ9zqBNmMrT5JHLLXTuMJqKQp3NIzDsLaft4GK5bYyfqhg~WyJHMDJ
OU3JRZmpGWFE3SW8wOXN5YWpBIiwgInJlZ2lvbiIsICJcdTZlMmZcdTUzM2EiXQ~WyJs
a2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImNvdW50cnkiLCAiSlAiXQ~
</sourcecode>
</section>

<section anchor="example-complex-structured-sd-jwt"><name>Example 3 - Complex Structured SD-JWT</name>
<t>In this example, an SD-JWT with a complex object is represented. The data
structures defined in OIDC4IDA <xref target="OIDC.IDA"/> are used.</t>
<t>The Issuer is using the following input claim set:</t>

<sourcecode type="json">{
  "verified_claims": {
    "verification": {
      "trust_framework": "de_aml",
      "time": "2012-04-23T18:25Z",
      "verification_process": "f24c6f-6d3f-4ec5-973e-b0d8506f3bc7",
      "evidence": [
        {
          "type": "document",
          "method": "pipp",
          "time": "2012-04-22T11:30Z",
          "document": {
            "type": "idcard",
            "issuer": {
              "name": "Stadt Augsburg",
              "country": "DE"
            },
            "number": "53554554",
            "date_of_issuance": "2010-03-23",
            "date_of_expiry": "2020-03-22"
          }
        }
      ]
    },
    "claims": {
      "given_name": "Max",
      "family_name": "Müller",
      "nationalities": [
        "DE"
      ],
      "birthdate": "1956-01-28",
      "place_of_birth": {
        "country": "IS",
        "locality": "Þykkvabæjarklaustur"
      },
      "address": {
        "locality": "Maxstadt",
        "postal_code": "12344",
        "country": "DE",
        "street_address": "Weidenstraße 22"
      }
    }
  },
  "birth_middle_name": "Timotheus",
  "salutation": "Dr.",
  "msisdn": "49123456789"
}
</sourcecode>
<t>The following payload is used for the SD-JWT:</t>

<sourcecode type="json">{
  "_sd": [
    "-aSznId9mWM8ocuQolCllsxVggq1-vHW4OtnhUtVmWw",
    "IKbrYNn3vA7WEFrysvbdBJjDDU_EvQIr0W18vTRpUSg",
    "otkxuT14nBiwzNJ3MPaOitOl9pVnXOaEHal_xkyNfKI"
  ],
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "verified_claims": {
    "verification": {
      "_sd": [
        "7h4UE9qScvDKodXVCuoKfKBJpVBfXMF_TmAGVaZe3Sc",
        "vTwe3raHIFYgFA3xaUD2aMxFz5oDo8iBu05qKlOg9Lw"
      ],
      "trust_framework": "de_aml",
      "evidence": [
        {
          "...": "tYJ0TDucyZZCRMbROG4qRO5vkPSFRxFhUELc18CSl3k"
        }
      ]
    },
    "claims": {
      "_sd": [
        "RiOiCn6_w5ZHaadkQMrcQJf0Jte5RwurRs54231DTlo",
        "S_498bbpKzB6Eanftss0xc7cOaoneRr3pKr7NdRmsMo",
        "WNA-UNK7F_zhsAb9syWO6IIQ1uHlTmOU8r8CvJ0cIMk",
        "Wxh_sV3iRH9bgrTBJi-aYHNCLt-vjhX1sd-igOf_9lk",
        "_O-wJiH3enSB4ROHntToQT8JmLtz-mhO2f1c89XoerQ",
        "hvDXhwmGcJQsBCA2OtjuLAcwAMpDsaU0nkovcKOqWNE"
      ]
    }
  },
  "_sd_alg": "sha-256"
}
</sourcecode>
<t>The following Disclosures are created by the Issuer:</t>
<t><strong>Claim <tt>time</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>vTwe3raHIFYgFA3xaUD2aMxFz5oDo8iBu05qKlOg9Lw</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInRpbWUiLCAiMjAxMi0wNC0y</tt><br/>
<tt>M1QxODoyNVoiXQ</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "time", "2012-04-23T18:25Z"]</tt></li>
</ul>
<t><strong>Claim <tt>verification_process</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>7h4UE9qScvDKodXVCuoKfKBJpVBfXMF_TmAGVaZe3Sc</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgInZlcmlmaWNhdGlvbl9wcm9j</tt><br/>
<tt>ZXNzIiwgImYyNGM2Zi02ZDNmLTRlYzUtOTczZS1iMGQ4NTA2ZjNiYzciXQ</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "verification_process",</tt><br/>
<tt>"f24c6f-6d3f-4ec5-973e-b0d8506f3bc7"]</tt></li>
</ul>
<t><strong>Claim <tt>type</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>G5EnhOAOoU9X_6QMNvzFXjpEA_Rc-AEtm1bG_wcaKIk</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgInR5cGUiLCAiZG9jdW1lbnQi</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "type", "document"]</tt></li>
</ul>
<t><strong>Claim <tt>method</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>WpxQ4HSoEtcTmCCKOeDslB_emucYLz2oO8oHNr1bEVQ</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgIm1ldGhvZCIsICJwaXBwIl0</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "method", "pipp"]</tt></li>
</ul>
<t><strong>Claim <tt>time</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>9wpjVPWuD7PK0nsQDL8B06lmdgV3LVybhHydQpTNyLI</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgInRpbWUiLCAiMjAxMi0wNC0y</tt><br/>
<tt>MlQxMTozMFoiXQ</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "time", "2012-04-22T11:30Z"]</tt></li>
</ul>
<t><strong>Claim <tt>document</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>IhwFrWUB63RcZq9yvgZ0XPc7Gowh3O2kqXeBIswg1B4</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImRvY3VtZW50IiwgeyJ0eXBl</tt><br/>
<tt>IjogImlkY2FyZCIsICJpc3N1ZXIiOiB7Im5hbWUiOiAiU3RhZHQgQXVnc2J1</tt><br/>
<tt>cmciLCAiY291bnRyeSI6ICJERSJ9LCAibnVtYmVyIjogIjUzNTU0NTU0Iiwg</tt><br/>
<tt>ImRhdGVfb2ZfaXNzdWFuY2UiOiAiMjAxMC0wMy0yMyIsICJkYXRlX29mX2V4</tt><br/>
<tt>cGlyeSI6ICIyMDIwLTAzLTIyIn1d</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "document", {"type": "idcard",</tt><br/>
<tt>"issuer": {"name": "Stadt Augsburg", "country": "DE"},</tt><br/>
<tt>"number": "53554554", "date_of_issuance": "2010-03-23",</tt><br/>
<tt>"date_of_expiry": "2020-03-22"}]</tt></li>
</ul>
<t><strong>Array Entry</strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>tYJ0TDucyZZCRMbROG4qRO5vkPSFRxFhUELc18CSl3k</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgeyJfc2QiOiBbIjl3cGpWUFd1</tt><br/>
<tt>RDdQSzBuc1FETDhCMDZsbWRnVjNMVnliaEh5ZFFwVE55TEkiLCAiRzVFbmhP</tt><br/>
<tt>QU9vVTlYXzZRTU52ekZYanBFQV9SYy1BRXRtMWJHX3djYUtJayIsICJJaHdG</tt><br/>
<tt>cldVQjYzUmNacTl5dmdaMFhQYzdHb3doM08ya3FYZUJJc3dnMUI0IiwgIldw</tt><br/>
<tt>eFE0SFNvRXRjVG1DQ0tPZURzbEJfZW11Y1lMejJvTzhvSE5yMWJFVlEiXX1d</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", {"_sd":</tt><br/>
<tt>["9wpjVPWuD7PK0nsQDL8B06lmdgV3LVybhHydQpTNyLI",</tt><br/>
<tt>"G5EnhOAOoU9X_6QMNvzFXjpEA_Rc-AEtm1bG_wcaKIk",</tt><br/>
<tt>"IhwFrWUB63RcZq9yvgZ0XPc7Gowh3O2kqXeBIswg1B4",</tt><br/>
<tt>"WpxQ4HSoEtcTmCCKOeDslB_emucYLz2oO8oHNr1bEVQ"]}]</tt></li>
</ul>
<t><strong>Claim <tt>given_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>S_498bbpKzB6Eanftss0xc7cOaoneRr3pKr7NdRmsMo</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImdpdmVuX25hbWUiLCAiTWF4</tt><br/>
<tt>Il0</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "given_name", "Max"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Wxh_sV3iRH9bgrTBJi-aYHNCLt-vjhX1sd-igOf_9lk</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImZhbWlseV9uYW1lIiwgIk1c</tt><br/>
<tt>dTAwZmNsbGVyIl0</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "family_name", "M\u00fcller"]</tt></li>
</ul>
<t><strong>Claim <tt>nationalities</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>hvDXhwmGcJQsBCA2OtjuLAcwAMpDsaU0nkovcKOqWNE</tt></li>
<li>Disclosure:<br/>
<tt>WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgIm5hdGlvbmFsaXRpZXMiLCBb</tt><br/>
<tt>IkRFIl1d</tt></li>
<li>Contents:
<tt>["nPuoQnkRFq3BIeAm7AnXFA", "nationalities", ["DE"]]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>WNA-UNK7F_zhsAb9syWO6IIQ1uHlTmOU8r8CvJ0cIMk</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YlBzMUlxdVpOYTBoa2FGenp6Wk53IiwgImJpcnRoZGF0ZSIsICIxOTU2</tt><br/>
<tt>LTAxLTI4Il0</tt></li>
<li>Contents:
<tt>["5bPs1IquZNa0hkaFzzzZNw", "birthdate", "1956-01-28"]</tt></li>
</ul>
<t><strong>Claim <tt>place_of_birth</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>RiOiCn6_w5ZHaadkQMrcQJf0Jte5RwurRs54231DTlo</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YTJXMF9OcmxFWnpmcW1rXzdQcS13IiwgInBsYWNlX29mX2JpcnRoIiwg</tt><br/>
<tt>eyJjb3VudHJ5IjogIklTIiwgImxvY2FsaXR5IjogIlx1MDBkZXlra3ZhYlx1</tt><br/>
<tt>MDBlNmphcmtsYXVzdHVyIn1d</tt></li>
<li>Contents:
<tt>["5a2W0_NrlEZzfqmk_7Pq-w", "place_of_birth", {"country":</tt><br/>
<tt>"IS", "locality": "\u00deykkvab\u00e6jarklaustur"}]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>_O-wJiH3enSB4ROHntToQT8JmLtz-mhO2f1c89XoerQ</tt></li>
<li>Disclosure:<br/>
<tt>WyJ5MXNWVTV3ZGZKYWhWZGd3UGdTN1JRIiwgImFkZHJlc3MiLCB7ImxvY2Fs</tt><br/>
<tt>aXR5IjogIk1heHN0YWR0IiwgInBvc3RhbF9jb2RlIjogIjEyMzQ0IiwgImNv</tt><br/>
<tt>dW50cnkiOiAiREUiLCAic3RyZWV0X2FkZHJlc3MiOiAiV2VpZGVuc3RyYVx1</tt><br/>
<tt>MDBkZmUgMjIifV0</tt></li>
<li>Contents:
<tt>["y1sVU5wdfJahVdgwPgS7RQ", "address", {"locality":</tt><br/>
<tt>"Maxstadt", "postal_code": "12344", "country": "DE",</tt><br/>
<tt>"street_address": "Weidenstra\u00dfe 22"}]</tt></li>
</ul>
<t><strong>Claim <tt>birth_middle_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>otkxuT14nBiwzNJ3MPaOitOl9pVnXOaEHal_xkyNfKI</tt></li>
<li>Disclosure:<br/>
<tt>WyJIYlE0WDhzclZXM1FEeG5JSmRxeU9BIiwgImJpcnRoX21pZGRsZV9uYW1l</tt><br/>
<tt>IiwgIlRpbW90aGV1cyJd</tt></li>
<li>Contents:
<tt>["HbQ4X8srVW3QDxnIJdqyOA", "birth_middle_name", "Timotheus"]</tt></li>
</ul>
<t><strong>Claim <tt>salutation</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>-aSznId9mWM8ocuQolCllsxVggq1-vHW4OtnhUtVmWw</tt></li>
<li>Disclosure:<br/>
<tt>WyJDOUdTb3VqdmlKcXVFZ1lmb2pDYjFBIiwgInNhbHV0YXRpb24iLCAiRHIu</tt><br/>
<tt>Il0</tt></li>
<li>Contents:
<tt>["C9GSoujviJquEgYfojCb1A", "salutation", "Dr."]</tt></li>
</ul>
<t><strong>Claim <tt>msisdn</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>IKbrYNn3vA7WEFrysvbdBJjDDU_EvQIr0W18vTRpUSg</tt></li>
<li>Disclosure:<br/>
<tt>WyJreDVrRjE3Vi14MEptd1V4OXZndnR3IiwgIm1zaXNkbiIsICI0OTEyMzQ1</tt><br/>
<tt>Njc4OSJd</tt></li>
<li>Contents:
<tt>["kx5kF17V-x0JmwUx9vgvtw", "msisdn", "49123456789"]</tt></li>
</ul>
<t>The following is how a presentation of the SD-JWT
without a Key Binding JWT could look like:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIi1hU3puSWQ5bVdNOG9jdVFvbENsbHN4V
mdncTEtdkhXNE90bmhVdFZtV3ciLCAiSUticllObjN2QTdXRUZyeXN2YmRCSmpERFVfR
XZRSXIwVzE4dlRScFVTZyIsICJvdGt4dVQxNG5CaXd6TkozTVBhT2l0T2w5cFZuWE9hR
UhhbF94a3lOZktJIl0sICJpc3MiOiAiaHR0cHM6Ly9pc3N1ZXIuZXhhbXBsZS5jb20iL
CAiaWF0IjogMTY4MzAwMDAwMCwgImV4cCI6IDE4ODMwMDAwMDAsICJ2ZXJpZmllZF9jb
GFpbXMiOiB7InZlcmlmaWNhdGlvbiI6IHsiX3NkIjogWyI3aDRVRTlxU2N2REtvZFhWQ
3VvS2ZLQkpwVkJmWE1GX1RtQUdWYVplM1NjIiwgInZUd2UzcmFISUZZZ0ZBM3hhVUQyY
U14Rno1b0RvOGlCdTA1cUtsT2c5THciXSwgInRydXN0X2ZyYW1ld29yayI6ICJkZV9hb
WwiLCAiZXZpZGVuY2UiOiBbeyIuLi4iOiAidFlKMFREdWN5WlpDUk1iUk9HNHFSTzV2a
1BTRlJ4RmhVRUxjMThDU2wzayJ9XX0sICJjbGFpbXMiOiB7Il9zZCI6IFsiUmlPaUNuN
l93NVpIYWFka1FNcmNRSmYwSnRlNVJ3dXJSczU0MjMxRFRsbyIsICJTXzQ5OGJicEt6Q
jZFYW5mdHNzMHhjN2NPYW9uZVJyM3BLcjdOZFJtc01vIiwgIldOQS1VTks3Rl96aHNBY
jlzeVdPNklJUTF1SGxUbU9VOHI4Q3ZKMGNJTWsiLCAiV3hoX3NWM2lSSDliZ3JUQkppL
WFZSE5DTHQtdmpoWDFzZC1pZ09mXzlsayIsICJfTy13SmlIM2VuU0I0Uk9IbnRUb1FUO
EptTHR6LW1oTzJmMWM4OVhvZXJRIiwgImh2RFhod21HY0pRc0JDQTJPdGp1TEFjd0FNc
ERzYVUwbmtvdmNLT3FXTkUiXX19LCAiX3NkX2FsZyI6ICJzaGEtMjU2In0.kbfpTas9_
-dLMgyeUxIXuBGLtCZUO2bG9JA7v73ebzpX1LA5MBtQsyZZut-Bm3_TW8sTqLCDPUN4Z
C5pKCyQig~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgInRpbWUiLCAiMjAxMi0wNC
0yM1QxODoyNVoiXQ~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgeyJfc2QiOiBbIjl
3cGpWUFd1RDdQSzBuc1FETDhCMDZsbWRnVjNMVnliaEh5ZFFwVE55TEkiLCAiRzVFbmh
PQU9vVTlYXzZRTU52ekZYanBFQV9SYy1BRXRtMWJHX3djYUtJayIsICJJaHdGcldVQjY
zUmNacTl5dmdaMFhQYzdHb3doM08ya3FYZUJJc3dnMUI0IiwgIldweFE0SFNvRXRjVG1
DQ0tPZURzbEJfZW11Y1lMejJvTzhvSE5yMWJFVlEiXX1d~WyJlSThaV205UW5LUHBOUG
VOZW5IZGhRIiwgIm1ldGhvZCIsICJwaXBwIl0~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YW
pBIiwgImdpdmVuX25hbWUiLCAiTWF4Il0~WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIi
wgImZhbWlseV9uYW1lIiwgIk1cdTAwZmNsbGVyIl0~WyJ5MXNWVTV3ZGZKYWhWZGd3UG
dTN1JRIiwgImFkZHJlc3MiLCB7ImxvY2FsaXR5IjogIk1heHN0YWR0IiwgInBvc3RhbF
9jb2RlIjogIjEyMzQ0IiwgImNvdW50cnkiOiAiREUiLCAic3RyZWV0X2FkZHJlc3MiOi
AiV2VpZGVuc3RyYVx1MDBkZmUgMjIifV0~
</sourcecode>
<t>After the validation, the Verifier will have the following data for further processing:</t>

<sourcecode type="json">{
  "iss": "https://issuer.example.com",
  "iat": 1683000000,
  "exp": 1883000000,
  "verified_claims": {
    "verification": {
      "trust_framework": "de_aml",
      "evidence": [
        {
          "method": "pipp"
        }
      ],
      "time": "2012-04-23T18:25Z"
    },
    "claims": {
      "given_name": "Max",
      "family_name": "Müller",
      "address": {
        "locality": "Maxstadt",
        "postal_code": "12344",
        "country": "DE",
        "street_address": "Weidenstraße 22"
      }
    }
  }
}
</sourcecode>
</section>

<section anchor="example-4a-sd-jwt-based-verifiable-credentials-sd-jwt-vc"><name>Example 4a - SD-JWT-based Verifiable Credentials (SD-JWT VC)</name>
<t>In this example, the artifacts defined in this specification are used to represent
SD-JWT-based Verifiable Credentials (SD-JWT VC) as defined in <xref target="I-D.terbu-sd-jwt-vc"/>.
Person Identification Data (PID) defined in <xref target="EUDIW.ARF"/> is used.</t>
<t>Key Binding is applied
using the Holder's public key passed in a <tt>cnf</tt> claim in the SD-JWT.</t>
<t>The Issuer is using the following input claim set:</t>

<sourcecode type="json">{
  "iss": "https://pid-provider.memberstate.example.eu",
  "iat": 1541493724,
  "type": "PersonIdentificationData",
  "first_name": "Erika",
  "family_name": "Mustermann",
  "nationalities": [
    "DE"
  ],
  "birth_family_name": "Schmidt",
  "birthdate": "1973-01-01",
  "address": {
    "postal_code": "12345",
    "locality": "Irgendwo",
    "street_address": "Sonnenstrasse 23",
    "country_code": "DE"
  },
  "is_over_18": true,
  "is_over_21": true,
  "is_over_65": false
}
</sourcecode>
<t>The following is the issued SD-JWT:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIjBuOXl6RlNXdktfQlVIaWFNaG0xMmdoc
kN0VmFockdKNl8ta1pQLXlTcTQiLCAiQ2gtREJjTDNrYjRWYkhJd3Rrbm5aZE5VSHRoR
XE5TVpqb0ZkZzZpZGlobyIsICJEVzdnRlZaU3V5cjQyWVNZeDhwOHJWS0VrdEp6SjN1R
kltZW5tSkJJbWRzIiwgIkkwMGZjRlVvRFhDdWNwNXl5MnVqcVBzc0RWR2FXTmlVbGlOe
l9hd0QwZ2MiLCAiWDlNYVBhRldtUVlwZkhFZHl0UmRhY2xuWW9FcnU4RXp0QkVVUXVXT
2U0NCIsICJkOHFrZlBkb2UyUFlFOTNkNU1fZ0JMMWdabHBGUktDYzBkMWxhb2RfX3MwI
iwgImxJM0wwaHNlQ1JXbVVQZzgyVkNVTl9hMTdzTUxfNjRRZ0E0SkZUWURGREUiLCAic
HVNcEdMb0FHUmJjc0FnNTBVWjBoaFFMS0NMNnF6eFNLNDMwNGtCbjNfSSIsICJ6VTQ1M
mxrR2JFS2g4WnVIXzhLeDNDVXZuMUY0eTFnWkxxbERUZ1hfOFBrIl0sICJpc3MiOiAia
HR0cHM6Ly9waWQtcHJvdmlkZXIubWVtYmVyc3RhdGUuZXhhbXBsZS5ldSIsICJpYXQiO
iAxNTQxNDkzNzI0LCAiZXhwIjogMTg4MzAwMDAwMCwgInR5cGUiOiAiUGVyc29uSWRlb
nRpZmljYXRpb25EYXRhIiwgIl9zZF9hbGciOiAic2hhLTI1NiIsICJjbmYiOiB7Imp3a
yI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIsICJ4IjogIlRDQUVSMTladnUzT
0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMiLCAieSI6ICJaeGppV1diWk1RR
0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpRIn19fQ.9hyAKjlth_-BLWKYWk
zg-oshIAKIauwC-y8w-a2bWyPGnZ8SE9ijvDEPEdddIi2EFJlt76fK-vN2QcMLCrNR7Q
~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImZpcnN0X25hbWUiLCAiRXJpa2EiXQ~
WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIk11c3Rlcm1h
bm4iXQ~WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgIkRFIl0~WyJlSThaV205UW5LU
HBOUGVOZW5IZGhRIiwgIm5hdGlvbmFsaXRpZXMiLCBbeyIuLi4iOiAiSnVMMzJRWER6a
XpsLUw2Q0xyZnhmanBac1gzTzZ2c2ZwQ1ZkMWprd0pZZyJ9XV0~WyJRZ19PNjR6cUF4Z
TQxMmExMDhpcm9BIiwgImJpcnRoX2ZhbWlseV9uYW1lIiwgIlNjaG1pZHQiXQ~WyJBSn
gtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOTczLTAxLTAxIl0~Wy
JQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImFkZHJlc3MiLCB7InBvc3RhbF9jb2RlIj
ogIjEyMzQ1IiwgImxvY2FsaXR5IjogIklyZ2VuZHdvIiwgInN0cmVldF9hZGRyZXNzIj
ogIlNvbm5lbnN0cmFzc2UgMjMiLCAiY291bnRyeV9jb2RlIjogIkRFIn1d~WyJHMDJOU
3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMTgiLCB0cnVlXQ~WyJsa2x4RjVqTV
lsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfMjEiLCB0cnVlXQ~WyJuUHVvUW5rUkZxM0J
JZUFtN0FuWEZBIiwgImlzX292ZXJfNjUiLCBmYWxzZV0~
</sourcecode>
<t>The following payload is used for the SD-JWT:</t>

<sourcecode type="json">{
  "_sd": [
    "0n9yzFSWvK_BUHiaMhm12ghrCtVahrGJ6_-kZP-ySq4",
    "Ch-DBcL3kb4VbHIwtknnZdNUHthEq9MZjoFdg6idiho",
    "DW7gFVZSuyr42YSYx8p8rVKEktJzJ3uFImenmJBImds",
    "I00fcFUoDXCucp5yy2ujqPssDVGaWNiUliNz_awD0gc",
    "X9MaPaFWmQYpfHEdytRdaclnYoEru8EztBEUQuWOe44",
    "d8qkfPdoe2PYE93d5M_gBL1gZlpFRKCc0d1laod__s0",
    "lI3L0hseCRWmUPg82VCUN_a17sML_64QgA4JFTYDFDE",
    "puMpGLoAGRbcsAg50UZ0hhQLKCL6qzxSK4304kBn3_I",
    "zU452lkGbEKh8ZuH_8Kx3CUvn1F4y1gZLqlDTgX_8Pk"
  ],
  "iss": "https://pid-provider.memberstate.example.eu",
  "iat": 1541493724,
  "exp": 1883000000,
  "type": "PersonIdentificationData",
  "_sd_alg": "sha-256",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
</sourcecode>
<t>The following Disclosures are created by the Issuer:</t>
<t><strong>Claim <tt>first_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Ch-DBcL3kb4VbHIwtknnZdNUHthEq9MZjoFdg6idiho</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImZpcnN0X25hbWUiLCAiRXJp</tt><br/>
<tt>a2EiXQ</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "first_name", "Erika"]</tt></li>
</ul>
<t><strong>Claim <tt>family_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>I00fcFUoDXCucp5yy2ujqPssDVGaWNiUliNz_awD0gc</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgImZhbWlseV9uYW1lIiwgIk11</tt><br/>
<tt>c3Rlcm1hbm4iXQ</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "family_name", "Mustermann"]</tt></li>
</ul>
<t><strong>Array Entry</strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>JuL32QXDzizl-L6CLrfxfjpZsX3O6vsfpCVd1jkwJYg</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgIkRFIl0</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "DE"]</tt></li>
</ul>
<t><strong>Claim <tt>nationalities</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>zU452lkGbEKh8ZuH_8Kx3CUvn1F4y1gZLqlDTgX_8Pk</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgIm5hdGlvbmFsaXRpZXMiLCBb</tt><br/>
<tt>eyIuLi4iOiAiSnVMMzJRWER6aXpsLUw2Q0xyZnhmanBac1gzTzZ2c2ZwQ1Zk</tt><br/>
<tt>MWprd0pZZyJ9XV0</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "nationalities", [{"...":</tt><br/>
<tt>"JuL32QXDzizl-L6CLrfxfjpZsX3O6vsfpCVd1jkwJYg"}]]</tt></li>
</ul>
<t><strong>Claim <tt>birth_family_name</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>X9MaPaFWmQYpfHEdytRdaclnYoEru8EztBEUQuWOe44</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImJpcnRoX2ZhbWlseV9uYW1l</tt><br/>
<tt>IiwgIlNjaG1pZHQiXQ</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "birth_family_name", "Schmidt"]</tt></li>
</ul>
<t><strong>Claim <tt>birthdate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>0n9yzFSWvK_BUHiaMhm12ghrCtVahrGJ6_-kZP-ySq4</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImJpcnRoZGF0ZSIsICIxOTcz</tt><br/>
<tt>LTAxLTAxIl0</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "birthdate", "1973-01-01"]</tt></li>
</ul>
<t><strong>Claim <tt>address</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>d8qkfPdoe2PYE93d5M_gBL1gZlpFRKCc0d1laod__s0</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgImFkZHJlc3MiLCB7InBvc3Rh</tt><br/>
<tt>bF9jb2RlIjogIjEyMzQ1IiwgImxvY2FsaXR5IjogIklyZ2VuZHdvIiwgInN0</tt><br/>
<tt>cmVldF9hZGRyZXNzIjogIlNvbm5lbnN0cmFzc2UgMjMiLCAiY291bnRyeV9j</tt><br/>
<tt>b2RlIjogIkRFIn1d</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "address", {"postal_code":</tt><br/>
<tt>"12345", "locality": "Irgendwo", "street_address":</tt><br/>
<tt>"Sonnenstrasse 23", "country_code": "DE"}]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_18</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>puMpGLoAGRbcsAg50UZ0hhQLKCL6qzxSK4304kBn3_I</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMTgiLCB0cnVl</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "is_over_18", true]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_21</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>lI3L0hseCRWmUPg82VCUN_a17sML_64QgA4JFTYDFDE</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImlzX292ZXJfMjEiLCB0cnVl</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "is_over_21", true]</tt></li>
</ul>
<t><strong>Claim <tt>is_over_65</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>DW7gFVZSuyr42YSYx8p8rVKEktJzJ3uFImenmJBImds</tt></li>
<li>Disclosure:<br/>
<tt>WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgImlzX292ZXJfNjUiLCBmYWxz</tt><br/>
<tt>ZV0</tt></li>
<li>Contents:
<tt>["nPuoQnkRFq3BIeAm7AnXFA", "is_over_65", false]</tt></li>
</ul>
<t>The following is how a presentation of the SD-JWT with a Key Binding JWT that discloses only nationality and the fact that the person is over 18 years old could look like:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJfc2QiOiBbIjBuOXl6RlNXdktfQlVIaWFNaG0xMmdoc
kN0VmFockdKNl8ta1pQLXlTcTQiLCAiQ2gtREJjTDNrYjRWYkhJd3Rrbm5aZE5VSHRoR
XE5TVpqb0ZkZzZpZGlobyIsICJEVzdnRlZaU3V5cjQyWVNZeDhwOHJWS0VrdEp6SjN1R
kltZW5tSkJJbWRzIiwgIkkwMGZjRlVvRFhDdWNwNXl5MnVqcVBzc0RWR2FXTmlVbGlOe
l9hd0QwZ2MiLCAiWDlNYVBhRldtUVlwZkhFZHl0UmRhY2xuWW9FcnU4RXp0QkVVUXVXT
2U0NCIsICJkOHFrZlBkb2UyUFlFOTNkNU1fZ0JMMWdabHBGUktDYzBkMWxhb2RfX3MwI
iwgImxJM0wwaHNlQ1JXbVVQZzgyVkNVTl9hMTdzTUxfNjRRZ0E0SkZUWURGREUiLCAic
HVNcEdMb0FHUmJjc0FnNTBVWjBoaFFMS0NMNnF6eFNLNDMwNGtCbjNfSSIsICJ6VTQ1M
mxrR2JFS2g4WnVIXzhLeDNDVXZuMUY0eTFnWkxxbERUZ1hfOFBrIl0sICJpc3MiOiAia
HR0cHM6Ly9waWQtcHJvdmlkZXIubWVtYmVyc3RhdGUuZXhhbXBsZS5ldSIsICJpYXQiO
iAxNTQxNDkzNzI0LCAiZXhwIjogMTg4MzAwMDAwMCwgInR5cGUiOiAiUGVyc29uSWRlb
nRpZmljYXRpb25EYXRhIiwgIl9zZF9hbGciOiAic2hhLTI1NiIsICJjbmYiOiB7Imp3a
yI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIsICJ4IjogIlRDQUVSMTladnUzT
0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMiLCAieSI6ICJaeGppV1diWk1RR
0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpRIn19fQ.9hyAKjlth_-BLWKYWk
zg-oshIAKIauwC-y8w-a2bWyPGnZ8SE9ijvDEPEdddIi2EFJlt76fK-vN2QcMLCrNR7Q
~WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImlzX292ZXJfMTgiLCB0cnVlXQ~WyJl
SThaV205UW5LUHBOUGVOZW5IZGhRIiwgIm5hdGlvbmFsaXRpZXMiLCBbeyIuLi4iOiAi
SnVMMzJRWER6aXpsLUw2Q0xyZnhmanBac1gzTzZ2c2ZwQ1ZkMWprd0pZZyJ9XV0~WyI2
SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgIkRFIl0~eyJhbGciOiAiRVMyNTYiLCAidHlw
IjogImtiK2p3dCJ9.eyJub25jZSI6ICIxMjM0NTY3ODkwIiwgImF1ZCI6ICJodHRwczo
vL3ZlcmlmaWVyLmV4YW1wbGUub3JnIiwgImlhdCI6IDE2OTgwNzc3OTAsICJfc2RfaGF
zaCI6ICJXTlNjU2w2MVpucnhtTS13LVlRYnBIM21uVGhDVy1HUHd1bk5Vd1RWaDU0In0
.W5jjtJfj3ejo33gQdp7iNNeSvEQsxv2x9tzNN_uIw9UtaAPTRC0gB4VJDe8H7T55Khh
qf67eGPrpbuOzjkU8PQ
</sourcecode>
<t>The following is the payload of a corresponding Key Binding JWT:</t>

<sourcecode type="json">{
  "nonce": "1234567890",
  "aud": "https://verifier.example.org",
  "iat": 1698077790,
  "_sd_hash": "WNScSl61ZnrxmM-w-YQbpH3mnThCW-GPwunNUwTVh54"
}
</sourcecode>
<t>After the validation, the Verifier will have the following data for further processing:</t>

<sourcecode type="json">{
  "iss": "https://pid-provider.memberstate.example.eu",
  "iat": 1541493724,
  "exp": 1883000000,
  "type": "PersonIdentificationData",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  },
  "is_over_18": true,
  "nationalities": [
    "DE"
  ]
}
</sourcecode>
</section>

<section anchor="example-4b-w3c-verifiable-credentials-data-model-v2-0"><name>Example 4b - W3C Verifiable Credentials Data Model v2.0</name>
<t>In this example, the artifacts defined in this specification are used to represent a payload
that is represented as a W3C Verifiable Credentials Data Model v2.0 <xref target="VC_DATA_v2.0"/>.</t>
<t>Key Binding is applied
using the Holder's public key passed in a <tt>cnf</tt> claim in the SD-JWT.</t>
<t>The Issuer is using the following input claim set:</t>

<sourcecode type="json">{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/vaccination/v1"
  ],
  "type": [
    "VerifiableCredential",
    "VaccinationCertificate"
  ],
  "issuer": "https://example.com/issuer",
  "issuanceDate": "2023-02-09T11:01:59Z",
  "expirationDate": "2028-02-08T11:01:59Z",
  "name": "COVID-19 Vaccination Certificate",
  "description": "COVID-19 Vaccination Certificate",
  "credentialSubject": {
    "vaccine": {
      "type": "Vaccine",
      "atcCode": "J07BX03",
      "medicinalProductName": "COVID-19 Vaccine Moderna",
      "marketingAuthorizationHolder": "Moderna Biotech"
    },
    "nextVaccinationDate": "2021-08-16T13:40:12Z",
    "countryOfVaccination": "GE",
    "dateOfVaccination": "2021-06-23T13:40:12Z",
    "order": "3/3",
    "recipient": {
      "type": "VaccineRecipient",
      "gender": "Female",
      "birthDate": "1961-08-17",
      "givenName": "Marion",
      "familyName": "Mustermann"
    },
    "type": "VaccinationEvent",
    "administeringCentre": "Praxis Sommergarten",
    "batchNumber": "1626382736",
    "healthProfessional": "883110000015376"
  }
}
</sourcecode>
<t>The following is the issued SD-JWT:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJAY29udGV4dCI6IFsiaHR0cHM6Ly93d3cudzMub3JnL
zIwMTgvY3JlZGVudGlhbHMvdjEiLCAiaHR0cHM6Ly93M2lkLm9yZy92YWNjaW5hdGlvb
i92MSJdLCAidHlwZSI6IFsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCAiVmFjY2luYXRpb
25DZXJ0aWZpY2F0ZSJdLCAiaXNzdWVyIjogImh0dHBzOi8vZXhhbXBsZS5jb20vaXNzd
WVyIiwgImlzc3VhbmNlRGF0ZSI6ICIyMDIzLTAyLTA5VDExOjAxOjU5WiIsICJleHBpc
mF0aW9uRGF0ZSI6ICIyMDI4LTAyLTA4VDExOjAxOjU5WiIsICJuYW1lIjogIkNPVklEL
TE5IFZhY2NpbmF0aW9uIENlcnRpZmljYXRlIiwgImRlc2NyaXB0aW9uIjogIkNPVklEL
TE5IFZhY2NpbmF0aW9uIENlcnRpZmljYXRlIiwgImNyZWRlbnRpYWxTdWJqZWN0Ijoge
yJfc2QiOiBbIjFWX0stOGxEUThpRlhCRlhiWlk5ZWhxUjRIYWJXQ2k1VDB5Ykl6WlBld
3ciLCAiSnpqTGd0UDI5ZFAtQjN0ZDEyUDY3NGdGbUsyenk4MUhNdEJnZjZDSk5XZyIsI
CJSMmZHYmZBMDdaX1lsa3FtTlp5bWExeHl5eDFYc3RJaVM2QjFZYmwySlo0IiwgIlRDb
XpybDdLMmdldl9kdTdwY01JeXpSTEhwLVllZy1GbF9jeHRyVXZQeGciLCAiVjdrSkJMS
zc4VG1WRE9tcmZKN1p1VVBIdUtfMmNjN3laUmE0cVYxdHh3TSIsICJiMGVVc3ZHUC1PR
ERkRm9ZNE5semxYYzN0RHNsV0p0Q0pGNzVOdzhPal9nIiwgInpKS19lU01YandNOGRYb
U1aTG5JOEZHTTA4ekozX3ViR2VFTUotNVRCeTAiXSwgInZhY2NpbmUiOiB7Il9zZCI6I
FsiMWNGNWhMd2toTU5JYXFmV0pyWEk3Tk1XZWRMLTlmNlkyUEE1MnlQalNaSSIsICJIa
Xk2V1d1ZUxENWJuMTYyOTh0UHY3R1hobWxkTURPVG5CaS1DWmJwaE5vIiwgIkxiMDI3c
TY5MWpYWGwtakM3M3ZpOGViT2o5c214M0MtX29nN2dBNFRCUUUiXSwgInR5cGUiOiAiV
mFjY2luZSJ9LCAicmVjaXBpZW50IjogeyJfc2QiOiBbIjFsU1FCTlkyNHEwVGg2T0d6d
GhxLTctNGw2Y0FheHJZWE9HWnBlV19sbkEiLCAiM256THE4MU0yb04wNndkdjFzaEh2T
0VKVnhaNUtMbWREa0hFREpBQldFSSIsICJQbjFzV2kwNkc0TEpybm4tX1JUMFJiTV9IV
GR4blBKUXVYMmZ6V3ZfSk9VIiwgImxGOXV6ZHN3N0hwbEdMYzcxNFRyNFdPN01HSnphN
3R0N1FGbGVDWDRJdHciXSwgInR5cGUiOiAiVmFjY2luZVJlY2lwaWVudCJ9LCAidHlwZ
SI6ICJWYWNjaW5hdGlvbkV2ZW50In0sICJfc2RfYWxnIjogInNoYS0yNTYiLCAiY25mI
jogeyJqd2siOiB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAieCI6ICJUQ0FFU
jE5WnZ1M09IRjRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwgInkiOiAiWnhqa
VdXYlpNUUdIVldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9fX0.l7byWDsTt
DOjFbWS4lko-3mkeeZwzUYw6ZicrJurES_gzs6EK_svPiVwj5g6evb_nmLWpK2_cXQ_J
0cjH0XnGw~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImF0Y0NvZGUiLCAiSjA3Ql
gwMyJd~WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgIm1lZGljaW5hbFByb2R1Y3ROY
W1lIiwgIkNPVklELTE5IFZhY2NpbmUgTW9kZXJuYSJd~WyI2SWo3dE0tYTVpVlBHYm9T
NXRtdlZBIiwgIm1hcmtldGluZ0F1dGhvcml6YXRpb25Ib2xkZXIiLCAiTW9kZXJuYSBC
aW90ZWNoIl0~WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgIm5leHRWYWNjaW5hdGlv
bkRhdGUiLCAiMjAyMS0wOC0xNlQxMzo0MDoxMloiXQ~WyJRZ19PNjR6cUF4ZTQxMmExM
Dhpcm9BIiwgImNvdW50cnlPZlZhY2NpbmF0aW9uIiwgIkdFIl0~WyJBSngtMDk1VlByc
FR0TjRRTU9xUk9BIiwgImRhdGVPZlZhY2NpbmF0aW9uIiwgIjIwMjEtMDYtMjNUMTM6N
DA6MTJaIl0~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgIm9yZGVyIiwgIjMvMyJd~
WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImdlbmRlciIsICJGZW1hbGUiXQ~WyJsa
2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImJpcnRoRGF0ZSIsICIxOTYxLTA4LTE3Il0~W
yJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgImdpdmVuTmFtZSIsICJNYXJpb24iXQ~Wy
I1YlBzMUlxdVpOYTBoa2FGenp6Wk53IiwgImZhbWlseU5hbWUiLCAiTXVzdGVybWFubi
Jd~WyI1YTJXMF9OcmxFWnpmcW1rXzdQcS13IiwgImFkbWluaXN0ZXJpbmdDZW50cmUiL
CAiUHJheGlzIFNvbW1lcmdhcnRlbiJd~WyJ5MXNWVTV3ZGZKYWhWZGd3UGdTN1JRIiwg
ImJhdGNoTnVtYmVyIiwgIjE2MjYzODI3MzYiXQ~WyJIYlE0WDhzclZXM1FEeG5JSmRxe
U9BIiwgImhlYWx0aFByb2Zlc3Npb25hbCIsICI4ODMxMTAwMDAwMTUzNzYiXQ~
</sourcecode>
<t>The following payload is used for the SD-JWT:</t>

<sourcecode type="json">{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/vaccination/v1"
  ],
  "type": [
    "VerifiableCredential",
    "VaccinationCertificate"
  ],
  "issuer": "https://example.com/issuer",
  "issuanceDate": "2023-02-09T11:01:59Z",
  "expirationDate": "2028-02-08T11:01:59Z",
  "name": "COVID-19 Vaccination Certificate",
  "description": "COVID-19 Vaccination Certificate",
  "credentialSubject": {
    "_sd": [
      "1V_K-8lDQ8iFXBFXbZY9ehqR4HabWCi5T0ybIzZPeww",
      "JzjLgtP29dP-B3td12P674gFmK2zy81HMtBgf6CJNWg",
      "R2fGbfA07Z_YlkqmNZyma1xyyx1XstIiS6B1Ybl2JZ4",
      "TCmzrl7K2gev_du7pcMIyzRLHp-Yeg-Fl_cxtrUvPxg",
      "V7kJBLK78TmVDOmrfJ7ZuUPHuK_2cc7yZRa4qV1txwM",
      "b0eUsvGP-ODDdFoY4NlzlXc3tDslWJtCJF75Nw8Oj_g",
      "zJK_eSMXjwM8dXmMZLnI8FGM08zJ3_ubGeEMJ-5TBy0"
    ],
    "vaccine": {
      "_sd": [
        "1cF5hLwkhMNIaqfWJrXI7NMWedL-9f6Y2PA52yPjSZI",
        "Hiy6WWueLD5bn16298tPv7GXhmldMDOTnBi-CZbphNo",
        "Lb027q691jXXl-jC73vi8ebOj9smx3C-_og7gA4TBQE"
      ],
      "type": "Vaccine"
    },
    "recipient": {
      "_sd": [
        "1lSQBNY24q0Th6OGzthq-7-4l6cAaxrYXOGZpeW_lnA",
        "3nzLq81M2oN06wdv1shHvOEJVxZ5KLmdDkHEDJABWEI",
        "Pn1sWi06G4LJrnn-_RT0RbM_HTdxnPJQuX2fzWv_JOU",
        "lF9uzdsw7HplGLc714Tr4WO7MGJza7tt7QFleCX4Itw"
      ],
      "type": "VaccineRecipient"
    },
    "type": "VaccinationEvent"
  },
  "_sd_alg": "sha-256",
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
</sourcecode>
<t>The following Disclosures are created by the Issuer:</t>
<t><strong>Claim <tt>atcCode</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>1cF5hLwkhMNIaqfWJrXI7NMWedL-9f6Y2PA52yPjSZI</tt></li>
<li>Disclosure:<br/>
<tt>WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImF0Y0NvZGUiLCAiSjA3Qlgw</tt><br/>
<tt>MyJd</tt></li>
<li>Contents:
<tt>["2GLC42sKQveCfGfryNRN9w", "atcCode", "J07BX03"]</tt></li>
</ul>
<t><strong>Claim <tt>medicinalProductName</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Hiy6WWueLD5bn16298tPv7GXhmldMDOTnBi-CZbphNo</tt></li>
<li>Disclosure:<br/>
<tt>WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgIm1lZGljaW5hbFByb2R1Y3RO</tt><br/>
<tt>YW1lIiwgIkNPVklELTE5IFZhY2NpbmUgTW9kZXJuYSJd</tt></li>
<li>Contents:
<tt>["eluV5Og3gSNII8EYnsxA_A", "medicinalProductName", "COVID-19</tt><br/>
<tt>Vaccine Moderna"]</tt></li>
</ul>
<t><strong>Claim <tt>marketingAuthorizationHolder</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Lb027q691jXXl-jC73vi8ebOj9smx3C-_og7gA4TBQE</tt></li>
<li>Disclosure:<br/>
<tt>WyI2SWo3dE0tYTVpVlBHYm9TNXRtdlZBIiwgIm1hcmtldGluZ0F1dGhvcml6</tt><br/>
<tt>YXRpb25Ib2xkZXIiLCAiTW9kZXJuYSBCaW90ZWNoIl0</tt></li>
<li>Contents:
<tt>["6Ij7tM-a5iVPGboS5tmvVA", "marketingAuthorizationHolder",</tt><br/>
<tt>"Moderna Biotech"]</tt></li>
</ul>
<t><strong>Claim <tt>nextVaccinationDate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>R2fGbfA07Z_YlkqmNZyma1xyyx1XstIiS6B1Ybl2JZ4</tt></li>
<li>Disclosure:<br/>
<tt>WyJlSThaV205UW5LUHBOUGVOZW5IZGhRIiwgIm5leHRWYWNjaW5hdGlvbkRh</tt><br/>
<tt>dGUiLCAiMjAyMS0wOC0xNlQxMzo0MDoxMloiXQ</tt></li>
<li>Contents:
<tt>["eI8ZWm9QnKPpNPeNenHdhQ", "nextVaccinationDate",</tt><br/>
<tt>"2021-08-16T13:40:12Z"]</tt></li>
</ul>
<t><strong>Claim <tt>countryOfVaccination</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>JzjLgtP29dP-B3td12P674gFmK2zy81HMtBgf6CJNWg</tt></li>
<li>Disclosure:<br/>
<tt>WyJRZ19PNjR6cUF4ZTQxMmExMDhpcm9BIiwgImNvdW50cnlPZlZhY2NpbmF0</tt><br/>
<tt>aW9uIiwgIkdFIl0</tt></li>
<li>Contents:
<tt>["Qg_O64zqAxe412a108iroA", "countryOfVaccination", "GE"]</tt></li>
</ul>
<t><strong>Claim <tt>dateOfVaccination</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>zJK_eSMXjwM8dXmMZLnI8FGM08zJ3_ubGeEMJ-5TBy0</tt></li>
<li>Disclosure:<br/>
<tt>WyJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImRhdGVPZlZhY2NpbmF0aW9u</tt><br/>
<tt>IiwgIjIwMjEtMDYtMjNUMTM6NDA6MTJaIl0</tt></li>
<li>Contents:
<tt>["AJx-095VPrpTtN4QMOqROA", "dateOfVaccination",</tt><br/>
<tt>"2021-06-23T13:40:12Z"]</tt></li>
</ul>
<t><strong>Claim <tt>order</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>b0eUsvGP-ODDdFoY4NlzlXc3tDslWJtCJF75Nw8Oj_g</tt></li>
<li>Disclosure:<br/>
<tt>WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgIm9yZGVyIiwgIjMvMyJd</tt></li>
<li>Contents:
<tt>["Pc33JM2LchcU_lHggv_ufQ", "order", "3/3"]</tt></li>
</ul>
<t><strong>Claim <tt>gender</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>3nzLq81M2oN06wdv1shHvOEJVxZ5KLmdDkHEDJABWEI</tt></li>
<li>Disclosure:<br/>
<tt>WyJHMDJOU3JRZmpGWFE3SW8wOXN5YWpBIiwgImdlbmRlciIsICJGZW1hbGUi</tt><br/>
<tt>XQ</tt></li>
<li>Contents:
<tt>["G02NSrQfjFXQ7Io09syajA", "gender", "Female"]</tt></li>
</ul>
<t><strong>Claim <tt>birthDate</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>Pn1sWi06G4LJrnn-_RT0RbM_HTdxnPJQuX2fzWv_JOU</tt></li>
<li>Disclosure:<br/>
<tt>WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgImJpcnRoRGF0ZSIsICIxOTYx</tt><br/>
<tt>LTA4LTE3Il0</tt></li>
<li>Contents:
<tt>["lklxF5jMYlGTPUovMNIvCA", "birthDate", "1961-08-17"]</tt></li>
</ul>
<t><strong>Claim <tt>givenName</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>lF9uzdsw7HplGLc714Tr4WO7MGJza7tt7QFleCX4Itw</tt></li>
<li>Disclosure:<br/>
<tt>WyJuUHVvUW5rUkZxM0JJZUFtN0FuWEZBIiwgImdpdmVuTmFtZSIsICJNYXJp</tt><br/>
<tt>b24iXQ</tt></li>
<li>Contents:
<tt>["nPuoQnkRFq3BIeAm7AnXFA", "givenName", "Marion"]</tt></li>
</ul>
<t><strong>Claim <tt>familyName</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>1lSQBNY24q0Th6OGzthq-7-4l6cAaxrYXOGZpeW_lnA</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YlBzMUlxdVpOYTBoa2FGenp6Wk53IiwgImZhbWlseU5hbWUiLCAiTXVz</tt><br/>
<tt>dGVybWFubiJd</tt></li>
<li>Contents:
<tt>["5bPs1IquZNa0hkaFzzzZNw", "familyName", "Mustermann"]</tt></li>
</ul>
<t><strong>Claim <tt>administeringCentre</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>TCmzrl7K2gev_du7pcMIyzRLHp-Yeg-Fl_cxtrUvPxg</tt></li>
<li>Disclosure:<br/>
<tt>WyI1YTJXMF9OcmxFWnpmcW1rXzdQcS13IiwgImFkbWluaXN0ZXJpbmdDZW50</tt><br/>
<tt>cmUiLCAiUHJheGlzIFNvbW1lcmdhcnRlbiJd</tt></li>
<li>Contents:
<tt>["5a2W0_NrlEZzfqmk_7Pq-w", "administeringCentre", "Praxis</tt><br/>
<tt>Sommergarten"]</tt></li>
</ul>
<t><strong>Claim <tt>batchNumber</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>V7kJBLK78TmVDOmrfJ7ZuUPHuK_2cc7yZRa4qV1txwM</tt></li>
<li>Disclosure:<br/>
<tt>WyJ5MXNWVTV3ZGZKYWhWZGd3UGdTN1JRIiwgImJhdGNoTnVtYmVyIiwgIjE2</tt><br/>
<tt>MjYzODI3MzYiXQ</tt></li>
<li>Contents:
<tt>["y1sVU5wdfJahVdgwPgS7RQ", "batchNumber", "1626382736"]</tt></li>
</ul>
<t><strong>Claim <tt>healthProfessional</tt></strong>:</t>

<ul>
<li>SHA-256 Hash: <tt>1V_K-8lDQ8iFXBFXbZY9ehqR4HabWCi5T0ybIzZPeww</tt></li>
<li>Disclosure:<br/>
<tt>WyJIYlE0WDhzclZXM1FEeG5JSmRxeU9BIiwgImhlYWx0aFByb2Zlc3Npb25h</tt><br/>
<tt>bCIsICI4ODMxMTAwMDAwMTUzNzYiXQ</tt></li>
<li>Contents:
<tt>["HbQ4X8srVW3QDxnIJdqyOA", "healthProfessional",</tt><br/>
<tt>"883110000015376"]</tt></li>
</ul>
<t>The following is how a presentation of the SD-JWT with Key Binding JWT that discloses only <tt>type</tt>, <tt>medicinalProductName</tt>, <tt>atcCode</tt> of the vaccine, <tt>type</tt> of the <tt>recipient</tt>, <tt>type</tt>, <tt>order</tt> and <tt>dateOfVaccination</tt> could look like:</t>

<sourcecode type="txt">eyJhbGciOiAiRVMyNTYifQ.eyJAY29udGV4dCI6IFsiaHR0cHM6Ly93d3cudzMub3JnL
zIwMTgvY3JlZGVudGlhbHMvdjEiLCAiaHR0cHM6Ly93M2lkLm9yZy92YWNjaW5hdGlvb
i92MSJdLCAidHlwZSI6IFsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCAiVmFjY2luYXRpb
25DZXJ0aWZpY2F0ZSJdLCAiaXNzdWVyIjogImh0dHBzOi8vZXhhbXBsZS5jb20vaXNzd
WVyIiwgImlzc3VhbmNlRGF0ZSI6ICIyMDIzLTAyLTA5VDExOjAxOjU5WiIsICJleHBpc
mF0aW9uRGF0ZSI6ICIyMDI4LTAyLTA4VDExOjAxOjU5WiIsICJuYW1lIjogIkNPVklEL
TE5IFZhY2NpbmF0aW9uIENlcnRpZmljYXRlIiwgImRlc2NyaXB0aW9uIjogIkNPVklEL
TE5IFZhY2NpbmF0aW9uIENlcnRpZmljYXRlIiwgImNyZWRlbnRpYWxTdWJqZWN0Ijoge
yJfc2QiOiBbIjFWX0stOGxEUThpRlhCRlhiWlk5ZWhxUjRIYWJXQ2k1VDB5Ykl6WlBld
3ciLCAiSnpqTGd0UDI5ZFAtQjN0ZDEyUDY3NGdGbUsyenk4MUhNdEJnZjZDSk5XZyIsI
CJSMmZHYmZBMDdaX1lsa3FtTlp5bWExeHl5eDFYc3RJaVM2QjFZYmwySlo0IiwgIlRDb
XpybDdLMmdldl9kdTdwY01JeXpSTEhwLVllZy1GbF9jeHRyVXZQeGciLCAiVjdrSkJMS
zc4VG1WRE9tcmZKN1p1VVBIdUtfMmNjN3laUmE0cVYxdHh3TSIsICJiMGVVc3ZHUC1PR
ERkRm9ZNE5semxYYzN0RHNsV0p0Q0pGNzVOdzhPal9nIiwgInpKS19lU01YandNOGRYb
U1aTG5JOEZHTTA4ekozX3ViR2VFTUotNVRCeTAiXSwgInZhY2NpbmUiOiB7Il9zZCI6I
FsiMWNGNWhMd2toTU5JYXFmV0pyWEk3Tk1XZWRMLTlmNlkyUEE1MnlQalNaSSIsICJIa
Xk2V1d1ZUxENWJuMTYyOTh0UHY3R1hobWxkTURPVG5CaS1DWmJwaE5vIiwgIkxiMDI3c
TY5MWpYWGwtakM3M3ZpOGViT2o5c214M0MtX29nN2dBNFRCUUUiXSwgInR5cGUiOiAiV
mFjY2luZSJ9LCAicmVjaXBpZW50IjogeyJfc2QiOiBbIjFsU1FCTlkyNHEwVGg2T0d6d
GhxLTctNGw2Y0FheHJZWE9HWnBlV19sbkEiLCAiM256THE4MU0yb04wNndkdjFzaEh2T
0VKVnhaNUtMbWREa0hFREpBQldFSSIsICJQbjFzV2kwNkc0TEpybm4tX1JUMFJiTV9IV
GR4blBKUXVYMmZ6V3ZfSk9VIiwgImxGOXV6ZHN3N0hwbEdMYzcxNFRyNFdPN01HSnphN
3R0N1FGbGVDWDRJdHciXSwgInR5cGUiOiAiVmFjY2luZVJlY2lwaWVudCJ9LCAidHlwZ
SI6ICJWYWNjaW5hdGlvbkV2ZW50In0sICJfc2RfYWxnIjogInNoYS0yNTYiLCAiY25mI
jogeyJqd2siOiB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAieCI6ICJUQ0FFU
jE5WnZ1M09IRjRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwgInkiOiAiWnhqa
VdXYlpNUUdIVldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9fX0.l7byWDsTt
DOjFbWS4lko-3mkeeZwzUYw6ZicrJurES_gzs6EK_svPiVwj5g6evb_nmLWpK2_cXQ_J
0cjH0XnGw~WyJQYzMzSk0yTGNoY1VfbEhnZ3ZfdWZRIiwgIm9yZGVyIiwgIjMvMyJd~W
yJBSngtMDk1VlBycFR0TjRRTU9xUk9BIiwgImRhdGVPZlZhY2NpbmF0aW9uIiwgIjIwM
jEtMDYtMjNUMTM6NDA6MTJaIl0~WyIyR0xDNDJzS1F2ZUNmR2ZyeU5STjl3IiwgImF0Y
0NvZGUiLCAiSjA3QlgwMyJd~WyJlbHVWNU9nM2dTTklJOEVZbnN4QV9BIiwgIm1lZGlj
aW5hbFByb2R1Y3ROYW1lIiwgIkNPVklELTE5IFZhY2NpbmUgTW9kZXJuYSJd~eyJhbGc
iOiAiRVMyNTYiLCAidHlwIjogImtiK2p3dCJ9.eyJub25jZSI6ICIxMjM0NTY3ODkwIi
wgImF1ZCI6ICJodHRwczovL3ZlcmlmaWVyLmV4YW1wbGUub3JnIiwgImlhdCI6IDE2OT
gwNzc3OTAsICJfc2RfaGFzaCI6ICJ1MXpzTkxGUXhlVkVGcFRmT1Z1NFRjSTNaYjdDX1
UzYTFFNGVzQVlRLXpZIn0.LLaMyLVXmAC5YVj29d8T-QbyJaxORbMCuWtxnw8VLZHjz9
kyyMMTFaOfGb3CZmytVWfwXIYXevyBfsR4Ir5EQA
</sourcecode>
<t>After the validation, the Verifier will have the following data for further processing:</t>

<sourcecode type="json">{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/vaccination/v1"
  ],
  "type": [
    "VerifiableCredential",
    "VaccinationCertificate"
  ],
  "issuer": "https://example.com/issuer",
  "issuanceDate": "2023-02-09T11:01:59Z",
  "expirationDate": "2028-02-08T11:01:59Z",
  "name": "COVID-19 Vaccination Certificate",
  "description": "COVID-19 Vaccination Certificate",
  "credentialSubject": {
    "vaccine": {
      "type": "Vaccine",
      "atcCode": "J07BX03",
      "medicinalProductName": "COVID-19 Vaccine Moderna"
    },
    "recipient": {
      "type": "VaccineRecipient"
    },
    "type": "VaccinationEvent",
    "order": "3/3",
    "dateOfVaccination": "2021-06-23T13:40:12Z"
  },
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
    }
  }
}
</sourcecode>
</section>

<section anchor="elliptic-curve-key-used-in-the-examples"><name>Elliptic Curve Key Used in the Examples</name>
<t>The following Elliptic Curve public key, represented in JWK format, can be used to validate the Issuer signatures in the above examples:</t>

<artwork>{
  "kty": "EC",
  "crv": "P-256",
  "x": "b28d4MwZMjw8-00CG4xfnn9SLMVMM19SlqZpVb_uNtQ",
  "y": "Xv5zWwuoaTgdS6hV43yI6gBwTnjukmFQQnJ_kCxzqk8"
}
</artwork>
<t>The public key used to validate a Key Binding JWT can be found in the examples as the content of the <tt>cnf</tt> claim.</t>
</section>
</section>

<section anchor="disclosure_format_considerations"><name>Disclosure Format Considerations</name>
<t>As described in <xref target="creating_disclosures"/>, the Disclosure structure is JSON containing salt and the
cleartext content of a claim, which is base64url encoded. The encoded value is the input used to calculate
a digest for the respective claim. The inclusion of digest value in the signed JWT ensures the integrity of
the claim value. Using encoded content as the input to the integrity mechanism is conceptually similar to the
approach in JWS and particularly useful when the content, like JSON, can have differences but be semantically
equivalent. Some further discussion of the considerations around this design decision follows.</t>
<t>When receiving an SD-JWT, a Verifier must
be able to re-compute digests of the disclosed claim values and, given
the same input values, obtain the same digest values as signed by the
Issuer.</t>
<t>Usually, JSON-based formats transport claim values as simple properties of a JSON object such as this:</t>

<artwork>...
  "family_name": "Möbius",
  "address": {
    "street_address": "Schulstr. 12",
    "locality": "Schulpforta"
  }
...
</artwork>
<t>However, a problem arises when computation over the data need to be performed and verified, like signing or computing digests. Common signature schemes require the same byte string as input to the
signature verification as was used for creating the signature. In the digest approach outlined above, the same problem exists: for the Issuer and the
Verifier to arrive at the same digest, the same byte string must be hashed.</t>
<t>JSON, however, does not prescribe a unique encoding for data, but allows for variations in the encoded string. The data above, for example, can be encoded as</t>

<artwork>...
"family_name": "M\u00f6bius",
"address": {
  "street_address": "Schulstr. 12",
  "locality": "Schulpforta"
}
...
</artwork>
<t>or as</t>

<artwork>...
"family_name": "Möbius",
"address": {"locality":"Schulpforta", "street_address":"Schulstr. 12"}
...
</artwork>
<t>The two representations of the value in <tt>family_name</tt> are very different on the byte-level, but yield
equivalent objects. Same for the representations of <tt>address</tt>, varying in white space and order of elements in the object.</t>
<t>The variations in white space, ordering of object properties, and
encoding of Unicode characters are all allowed by the JSON
specification, including further variations, e.g., concerning
floating-point numbers, as described in <xref target="RFC8785"/>. Variations can be
introduced whenever JSON data is serialized or deserialized and unless
dealt with, will lead to different digests and the inability to verify
signatures.</t>
<t>There are generally two approaches to deal with this problem:</t>

<ol>
<li>Canonicalization: The data is transferred in JSON format, potentially
introducing variations in its representation, but is transformed into a
canonical form before computing a digest. Both the Issuer and the Verifier
must use the same canonicalization algorithm to arrive at the same byte
string for computing a digest.</li>
<li>Source string hardening: Instead of transferring data in a format that
may introduce variations, a representation of the data is serialized.
This representation is then used as the hashing input at the Verifier,
but also transferred to the Verifier and used for the same digest
calculation there. This means that the Verifier can easily compute and check the
digest of the byte string before finally deserializing and
accessing the data.</li>
</ol>
<t>Mixed approaches are conceivable, i.e., transferring both the original JSON data
plus a string suitable for computing a digest, but such approaches can easily lead to
undetected inconsistencies resulting in time-of-check-time-of-use type security
vulnerabilities.</t>
<t>In this specification, the source string hardening approach is used, as
it allows for simple and reliable interoperability without the
requirement for a canonicalization library. To harden the source string,
any serialization format that supports the necessary data types could
be used in theory, like protobuf, msgpack, or pickle. In this
specification, JSON is used and plaintext values of each Disclosure are encoded using base64url-encoding
for transport. This approach means that SD-JWTs can be implemented purely based
on widely available JWT, JSON, and Base64 encoding and decoding libraries.</t>
<t>A Verifier can then easily check the digest over the source string before
extracting the original JSON data. Variations in the encoding of the source
string are implicitly tolerated by the Verifier, as the digest is computed over a
predefined byte string and not over a JSON object.</t>
<t>It is important to note that the Disclosures are neither intended nor
suitable for direct consumption by
an application that needs to access the disclosed claim values after the verification by the Verifier. The
Disclosures are only intended to be used by a Verifier to check
the digests over the source strings and to extract the original JSON
data. The original JSON data is then used by the application. See
<xref target="verifier_verification"/> for details.</t>
</section>

<section anchor="document-history"><name>Document History</name>
<t>[[ To be removed from the final specification ]]</t>
<t>-06</t>

<ul>
<li>Added hash of Issuer-signed part and Disclosures in KB-JWT</li>
<li>Fix minor issues in some examples</li>
<li>Added IANA media type registration request for the JSON Serialization</li>
<li>More precise wording around storing artifacts with sensitive data</li>
<li>The claim name <tt>_sd</tt> or <tt>...</tt> must not be used in a disclosure.</li>
<li>Added JWT claims registration requests to IANA</li>
<li>Ensure claims that control validity are checked after decoding payload</li>
<li>Restructure sections around data formats and Example 1</li>
<li>Update JSON Serialization to remove the kb_jwt member and allow for the disclosures to be conveyed elsewhere</li>
<li>Expand the Enveloping SD-JWTs section to also discuss enveloping JSON serialized SD-JWTs</li>
</ul>
<t>-05</t>

<ul>
<li>Consolidate processing rules for Holder and Verifier</li>
<li>Add support for selective disclosure of array elements.</li>
<li>Consolidate SD-JWT terminology and format</li>
<li>Use the term Key Binding rather than Holder Binding</li>
<li>Defined the structure of the Key Binding JWT</li>
<li>Added a JWS JSON Serialization</li>
<li>Added initial IANA media type and structured suffix registration requests</li>
<li>Added recommendation for explicit typing of SD-JWTs</li>
<li>Added considerations around forwarding credentials</li>
<li>Removed Example 2b and merged the demo of decoy digests into Example 2a</li>
<li>Improved example for allowed variations in Disclosures</li>
<li>Added some text to the Abstract and Introduction to be more inclusive of JWS with JSON</li>
<li>Added some security considerations text about the scope of the Key Binding JWT</li>
<li>Aligned examples structure and used the term input claim set</li>
<li>Replaced the general SD-JWT VC example with one based on Person Identification Data (PID) from the European Digital Identity Wallet Architecture and Reference Framework</li>
<li>Added/clarified some privacy considerations in Confidentiality during Transport</li>
<li>No longer recommending a claim name for enveloped SD-JWTs</li>
<li>Mention prospective future PQ algs for JWS</li>
<li>Include the public key in the draft, which can be used to verify the issuer signature examples</li>
<li>Clarify that <tt>_sd_alg</tt> can only be at the top level of the SD-JWT payload</li>
<li>Externalized the SD-JWT library that generates examples</li>
<li>Attempt to improve description of security properties</li>
</ul>
<t>-04</t>

<ul>
<li>Improve description of processing of disclosures</li>
</ul>
<t>-03</t>

<ul>
<li>Clarify that other specifications may define enveloping multiple Combined Formats for Presentation</li>
<li>Add an example of W3C vc-data-model that uses a JSON-LD object as the claims set</li>
<li>Clarify requirements for the combined formats for issuance and presentation</li>
<li>Added overview of the Security Considerations section</li>
<li>Enhanced examples in the Privacy Considerations section</li>
<li>Allow for recursive disclosures</li>
<li>Discussion on holder binding and privacy of stored credentials</li>
<li>Add some context about SD-JWT being general-purpose despite being a product of the OAuth WG</li>
<li>More explicitly say that SD-JWTs have to be signed asymmetrically (no MAC and no <tt>none</tt>)</li>
<li>Make sha-256 the default hash algorithm, if the hash alg claim is omitted</li>
<li>Use ES256 instead of RS256 in examples</li>
<li>Rename and move the c14n challenges section to an appendix</li>
<li>A bit more in security considerations for Choice of a Hash Algorithm (1st &amp; 2nd preimage resistant and not majorly truncated)</li>
<li>Remove the notational figures from the Concepts section</li>
<li>Change salt to always be a string (rather than any JSON type)</li>
<li>Fix the Document History (which had a premature list for -03)</li>
</ul>
<t>-02</t>

<ul>
<li>Disclosures are now delivered not as a JWT but as separate base64url-encoded JSON objects.</li>
<li>In the SD-JWT, digests are collected under a <tt>_sd</tt> claim per level.</li>
<li>Terms "II-Disclosures" and "HS-Disclosures" are replaced with "Disclosures".</li>
<li>Holder Binding is now separate from delivering the Disclosures and implemented, if required, with a separate JWT.</li>
<li>Examples updated and modified to properly explain the specifics of the new SD-JWT format.</li>
<li>Examples are now pulled in from the examples directory, not inlined.</li>
<li>Updated and automated the W3C VC example.</li>
<li>Added examples with multibyte characters to show that the specification and demo code work well with UTF-8.</li>
<li>reverted back to hash alg from digest derivation alg (renamed to <tt>_sd_alg</tt>)</li>
<li>reformatted</li>
</ul>
<t>-01</t>

<ul>
<li>introduced blinded claim names</li>
<li>explained why JSON-encoding of values is needed</li>
<li>explained merging algorithm ("processing model")</li>
<li>generalized hash alg to digest derivation alg which also enables HMAC to calculate digests</li>
<li><tt>_sd_hash_alg</tt> renamed to <tt>sd_digest_derivation_alg</tt></li>
<li>Salt/Value Container (SVC) renamed to Issuer-Issued Disclosures (II-Disclosures)</li>
<li>SD-JWT-Release (SD-JWT-R) renamed to Holder-Selected Disclosures (HS-Disclosures)</li>
<li><tt>sd_disclosure</tt> in II-Disclosures renamed to <tt>sd_ii_disclosures</tt></li>
<li><tt>sd_disclosure</tt> in HS-Disclosures renamed to <tt>sd_hs_disclosures</tt></li>
<li>clarified relationship between <tt>sd_hs_disclosure</tt> and SD-JWT</li>
<li>clarified combined formats for issuance and presentation</li>
<li>clarified security requirements for blinded claim names</li>
<li>improved description of Holder Binding security considerations - especially around the usage of "alg=none".</li>
<li>updated examples</li>
<li>text clarifications</li>
<li>fixed <tt>cnf</tt> structure in examples</li>
<li>added feature summary</li>
</ul>
<t>-00</t>

<ul>
<li>Upload as draft-ietf-oauth-selective-disclosure-jwt-00</li>
</ul>
<t>[[ pre Working Group Adoption: ]]</t>
<t>-02</t>

<ul>
<li>Added acknowledgements</li>
<li>Improved Security Considerations</li>
<li>Stressed entropy requirements for salts</li>
<li>Python reference implementation clean-up and refactoring</li>
<li><tt>hash_alg</tt> renamed to <tt>_sd_hash_alg</tt></li>
</ul>
<t>-01</t>

<ul>
<li>Editorial fixes</li>
<li>Added <tt>hash_alg</tt> claim</li>
<li>Renamed <tt>_sd</tt> to <tt>sd_digests</tt> and <tt>sd_release</tt></li>
<li>Added descriptions on Holder Binding - more work to do</li>
<li>Clarify that signing the SD-JWT is mandatory</li>
</ul>
<t>-00</t>

<ul>
<li>Renamed to SD-JWT (focus on JWT instead of JWS since signature is optional)</li>
<li>Make Holder Binding optional</li>
<li>Rename proof to release, since when there is no signature, the term "proof" can be misleading</li>
<li>Improved the structure of the description</li>
<li>Described verification steps</li>
<li>All examples generated from python demo implementation</li>
<li>Examples for structured objects</li>
</ul>
</section>

</back>

</rfc>
