<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-barnes-oauth-pika-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title abbrev="PIKA">Proof of Issuer Key Authority (PIKA)</title>
    <seriesInfo name="Internet-Draft" value="draft-barnes-oauth-pika-00"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author fullname="Sharon Goldberg">
      <organization>BastionZero, Inc.</organization>
      <address>
        <email>goldbe@bastionzero.com</email>
      </address>
    </author>
    <date year="2024" month="April" day="09"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>openid</keyword>
    <keyword>verifiable credential</keyword>
    <keyword>openpubkey</keyword>
    <abstract>
      <?line 51?>

<t>A relying party verifying a JSON Web Token (JWT) needs to verify that the public
key used to verify the signature legitimately represents the issuer represented
in the "iss" claim of the JWT.  Today, relying parties commonly use the "iss"
claim to fetch a set of authorized signing keys over HTTPS, relying on the
security of HTTPS to establish the authority of the downloaded keys for that
issuer.  The ephemerality of this proof of authority makes it unsuitable for use
cases where a JWT might need to be verified for some time.  In this document, we
define a format for Proofs of Issuer Key Authority, which establish the
authority of a key using a signed object instead of an HTTPS connection.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://bifurcation.github.io/redistributable-jwks/draft-barnes-oauth-redistributable-jwks.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-barnes-oauth-pika/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Authorization Protocol Working Group mailing list (<eref target="mailto:oauth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/oauth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/oauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bifurcation/redistributable-jwks"/>.</t>
    </note>
  </front>
  <middle>
    <?line 63?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A relying party verifying a JSON Web Token (JWT) <xref target="RFC7519"/> needs to verify
that the public key used to verify the signature legitimately represents the
issuer represented in the "iss" claim of the JWT.</t>
      <t>Today, relying parties commonly use the <tt>iss</tt> claim to fetch a set of authorized
signing keys over HTTPS, relying on the security of HTTPS to establish the
authority of the downloaded keys for that issuer.  For example, in OpenID
Connect Discovery <xref target="OIDC-Discovery"/>, the <tt>iss</tt> claim is used to form a URL
from which issuer metadata is downloaded over HTTPS.  The issuer's JWK set is
linked via the <tt>jwks_uri</tt> field in the metadata.  The SD-JWT-VC specification
describes a similar HTTPS-based mechanism for discovering the valid keys for an
issuer (see <xref section="5" sectionFormat="of" target="I-D.ietf-oauth-sd-jwt-vc"/>).</t>
      <t>These HTTPS-based authority mechanisms are "live", in the sense that they can
only prove the authority of a key to someone who does an HTTPS transaction with
the relevant server.  The fact that the server needs to be reachable and
responsive at the time the JWT is being validated is a serious limitation in
some use cases, two examples of which are given below.</t>
      <t>In this document, we define Proofs of Issuer Key Authority (PIKA), a format for a
redistributable proof of authority for an issuer key.  As in OIDC and SD-JWT-VC,
we assume that issuers are identified by HTTPS URLs, or at least by domain
names.  A PIKA is then simply a JWT whose payload contains the
issuer key in question, and whose header contains an X.509 certificate proving
that the PIKA-signing key is authoritative for the issuer's domain name.</t>
      <figure anchor="fig-trust-model">
        <name>Trust model for PIKA or HTTPS-based discovery</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="288" viewBox="0 0 288 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 72,64 L 72,144" fill="none" stroke="black"/>
              <path d="M 120,128 L 120,160" fill="none" stroke="black"/>
              <path d="M 152,32 L 152,64" fill="none" stroke="black"/>
              <path d="M 184,160 L 184,176" fill="none" stroke="black"/>
              <path d="M 184,208 L 184,240" fill="none" stroke="black"/>
              <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
              <path d="M 256,128 L 256,160" fill="none" stroke="black"/>
              <path d="M 280,224 L 280,256" fill="none" stroke="black"/>
              <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 152,64" fill="none" stroke="black"/>
              <path d="M 120,128 L 256,128" fill="none" stroke="black"/>
              <path d="M 72,144 L 112,144" fill="none" stroke="black"/>
              <path d="M 120,160 L 256,160" fill="none" stroke="black"/>
              <path d="M 232,224 L 280,224" fill="none" stroke="black"/>
              <path d="M 184,240 L 224,240" fill="none" stroke="black"/>
              <path d="M 232,256 L 280,256" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="232,240 220,234.4 220,245.6" fill="black" transform="rotate(0,224,240)"/>
              <polygon class="arrowhead" points="120,144 108,138.4 108,149.6" fill="black" transform="rotate(0,112,144)"/>
              <g class="text">
                <text x="44" y="52">Domain</text>
                <text x="92" y="52">name</text>
                <text x="128" y="52">PKI</text>
                <text x="36" y="100">(HTTPS</text>
                <text x="80" y="100">r</text>
                <text x="112" y="100">PIKA)</text>
                <text x="156" y="148">Issuer</text>
                <text x="200" y="148">JWK</text>
                <text x="232" y="148">Set</text>
                <text x="140" y="196">(JWT</text>
                <text x="208" y="196">validation)</text>
                <text x="256" y="244">JWT</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-----------------+
| Domain name PKI |
+-------+---------+
        |
 (HTTPS or PIKA)
        |
        |     +----------------+
        +---->| Issuer JWK Set |
              +-------+--------+
                      |
               (JWT validation)
                      |
                      |     +-----+
                      +---->| JWT |
                            +-----+
]]></artwork>
        </artset>
      </figure>
      <t>This design preserves the same trust model as in the HTTPS-based proof of
authority; it just swaps the signature in the TLS handshake underlying HTTPS for
an object signature.  PIKAs are thus "redistributable" in the same
sense that an intermediate certificate would be, so that they can be verified
without the issuer being online and reachable.</t>
      <t>We also define a simple syntax for referencing PIKAs keys in metadata documents
such as OIDC Discovery metadata and SD-JWT-VC issuer metadata.</t>
      <section anchor="use-case-end-to-end-security">
        <name>Use Case: End-to-End Security</name>
        <t>In applications using MLS for end-to-end security, endpoints can authenticate to
each other using Verifiable Credentials (VCs) <xref target="I-D.barnes-mls-addl-creds"/>.
These VCs are formatted as JWTs.  In such applications, HTTPS-based proof of
authority is an availability risk to the application and to the VC issuer.</t>
        <t>The risk to the application is clear: A client joining an MLS group needs to
validate the credentials of their peers.  If part of that process entails making
an HTTPS query to validate the authority of the keys used to sign their peers'
credentials, and the relevant HTTPS server is down, then the client will not be
able to join the group and use the application.  Worse, since different peers
may have credentials from different issuers, an outage at any one of those
issuers can cause downtime for the application.</t>
        <t>The use of HTTPS to validate authority also creates unnecessary load on the VC
issuer.  Consider, for example, an MLS-based video conference with 1,000
participants presenting credentials from 10 different issuers, all of whom join
at the start of the meeting.  This situation would create a spike of around
10,000 HTTPS requests to the VC issuer.</t>
        <t>With PIKAs, the clients in a meeting can bundle the proof of authority along
with their VC, avoiding the need for any HTTPS interaction with the issuer at
all.</t>
      </section>
      <section anchor="use-case-verifying-stored-signatures">
        <name>Use Case: Verifying Stored Signatures</name>
        <t>Some applications are interested in verifying historical signatures.  For
example, a container registry might wish to demonstrate that a container was
signed by its author at some time in the past.</t>
        <t>Live HTTPS-based proofs of authority are fundamentally incompatible with these
applications, since the proof of authority they produce cannot be preserved and
reused later.  With PIKAs, a trusted timestamping authority is all
that is needed to achieve the desired properties.</t>
        <t>Suppose the registry stores the following information for each container:</t>
        <ul spacing="normal">
          <li>
            <t>A signature by the container author over the container</t>
          </li>
          <li>
            <t>A JWT attesting to the container author's identity and public key, e.g., a
Verifiable Credential or an OpenPubkey PK Token <xref target="OpenPubkey"/></t>
          </li>
          <li>
            <t>A PIKA providing the JWT issuer's key and proving its authority
for the issuer</t>
          </li>
          <li>
            <t>An assertion by the timestamping authority that all of the above artifacts
existed at a time in the past when they were all valid</t>
          </li>
        </ul>
        <t>Based on the timetamping authority's assertion, a relying party can validate
that at the specified time, the container was signed by an author with the
specified identity, and that the identity was asserted by the specified issuer.</t>
      </section>
      <section anchor="alternatives">
        <name>Alternatives</name>
        <t>An alternative design discussed in <xref section="3.5" sectionFormat="of" target="I-D.ietf-oauth-sd-jwt-vc"/>
is to simply sign the based JWT with an X.509 certified keys.  This design has a
few drawbacks relative to the design described here:</t>
        <t>First, it changes the trust model relative to HTTPS-based proof of authority.
The issuer JWT-signing key is removed as an intermediate step.  This makes it
more difficult for this design to coexist with HTTPS-based proof of identity.</t>
        <t>Second, it removes flexibility that allows for efficiency.  The extra data of
the X.509 certificate chain has to be sent every time the base JWT is sent.
Allowing the two to be decoupled allows for more flexible caching schemes.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="proof-of-issuer-key-authority-format">
      <name>Proof of Issuer Key Authority Format</name>
      <t>Because the requirements for PIKAs are similar to those for OpenID Federation
<xref target="OIDC-Federation"/>, we re-use the Federation Historical Keys Response format as
a base format for PIKAs.</t>
      <t>A PIKA is a JWT meeting the requirements of the Historical Keys Response format
in <xref target="OIDC-Federation"/>.  In particular, the JWT Claims in a PIKA <bcp14>MUST</bcp14> contain
<tt>iss</tt>, <tt>iat</tt>, and <tt>keys</tt> claims. Each JWK in the JWK Set in the <tt>keys</tt> claim
<bcp14>MUST</bcp14> contain <tt>kid</tt> and <tt>exp</tt> claims, and <bcp14>SHOULD</bcp14> contain an <tt>iat</tt> claim.</t>
      <t>A PIKA <bcp14>MUST</bcp14> also satisfy the following additional requirements:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>iss</tt> field in the JWT Claims <bcp14>MUST</bcp14> be formatted as an HTTPS URL or a
domain name.</t>
        </li>
        <li>
          <t>The JOSE Header of the PIKA <bcp14>MUST</bcp14> contain an <tt>x5c</tt> field.  The contents of this
field <bcp14>MUST</bcp14> represent a certificate chain that authenticates the domain name in
the <tt>iss</tt> field.  The domain name <bcp14>MUST</bcp14> appear as a <tt>dNSName</tt> entry in the
<tt>subjectAltName</tt> extension of the end-entity certificate.</t>
        </li>
        <li>
          <t>The <tt>alg</tt> field of the PIKA <bcp14>MUST</bcp14> represent an algorithm that is
compatible with the subject public key of the certificate in the <tt>x5c</tt>
parameter.</t>
        </li>
        <li>
          <t>The JWT Claims in a PIKA <bcp14>SHOULD</bcp14> contain an <tt>exp</tt> claim.  If an <tt>exp</tt> claim is
not present, then a relying party <bcp14>MUST</bcp14> behave as if the <tt>exp</tt> field were set
to the <tt>notAfter</tt> time in the end-entity certificate in the <tt>x5c</tt> field.</t>
        </li>
      </ul>
      <t><xref target="fig-example-pika"/> shows the contents of the JWT header and JWT payload for an
example PIKA, omitting the full certificate chain:</t>
      <figure anchor="fig-example-pika">
        <name>An example Proof of Issuer Key Authority</name>
        <artwork><![CDATA[
JWT Header:
{
  "alg": "ES256",
  "typ": "JWT",
  "x5c": ["MII..."]
}

JWT Payload:
{
  "iss": "https://server.example.com",
  "iat": 123972394272,
  "exp": 124003930272,
  "keys":
    [
      {
        "kty": "EC",
        "crv": "P-256",
        "alg": "ES256"
        "x": "qiGKLwXRJmJR_AOQpWOHXLX5uYIfzvPwDurWvmZBwvw",
        "y": "ip8nyuLpJ5NpriZzCVKiG0TteqPMkrzfNOUQ8YzeGdk"
        "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
        "iat": 123972394872,
        "exp": 123974395972
      },
      {
        "kty": "RSA",
        "n": "ng5jr...",
        "e": "AQAB",
        "kid": "8KnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMJJr",
        "iat": 123972394872,
        "exp": 123974394972
        "revoked": {
          "revoked_at": 123972495172,
          "reason": "keyCompromise",
          "reason_code": 1
        }
      }
    ]
}

JWT Signature:
// Signature over JWT Header and Claims, as defined in RFC 7519
]]></artwork>
      </figure>
      <t>A Verifier that receives such a PIKA validates it by taking the
following steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>If this PIKA was looked up using an <tt>iss</tt> value, verify that the
value of the <tt>iss</tt> claim in the PIKA is identical to the one used
to discover it.</t>
        </li>
        <li>
          <t>Verify that the PIKA is currently valid, according to its <tt>iat</tt> and <tt>exp</tt> claims.</t>
        </li>
        <li>
          <t>Verify that the certificate chain in the <tt>x5c</tt> field is currently valid from a trusted
certificate authority (see [@!RFC5280][@!RFC6125]).</t>
        </li>
        <li>
          <t>Verify that the end-entity certificate matches the <tt>iss</tt> field of the PIKA.</t>
        </li>
        <li>
          <t>Verify the signature on the PIKA using the subject public key of the
end-entity certificate</t>
        </li>
      </ol>
      <t>Before using a key in a PIKA to validate a JWT, a Verifier <bcp14>MUST</bcp14> verify that the
time at which the JWT was signed (e.g., as expressed by its <tt>iat</tt> claim) is
within the signing interval for the key.  This interval is expressed by the
<tt>iat</tt> and <tt>exp</tt> fields within the key attested to in the PIKA.</t>
    </section>
    <section anchor="referencing-proofs-of-issuer-key-authority">
      <name>Referencing Proofs of Issuer Key Authority</name>
      <t>JWT issuers commonly advertise their JWK Sets using mechanisms such as OpenID
Connect Discovery or SD-JWT-VC Credential Issuer Metadata <xref target="OIDC-Discovery"/>
        <xref target="I-D.ietf-oauth-sd-jwt-vc"/>.  These discovery mechanisms could be extended to
also provide PIKAs, using one of a few approaches.</t>
      <t>Current discovery mechanisms typically present the issuer's JWK set as a value
or link embedded in the metadata object.  Similarly, the Federation Historical
Keys endpoint in OpenID Federation provides a link from which the issuer's
historical keys may be downloaded (see Section 5.1.1 of <xref target="OIDC-Federation"/>).
These mechanisms are illustrated in <xref target="fig-issuer-metadata"/>.</t>
      <figure anchor="fig-issuer-metadata">
        <name>Current mechanisms for provided an issuer JWK Set</name>
        <sourcecode type="json"><![CDATA[
{
    // Other metadata...

    // Current mechanisms for unsigned JWKS
    "jwks_uri": "https://example.com/jwks",
    "jwks": { "keys": [ ... ] },

    // OpenID Federation historical keys
    "federation_historical_keys_endpoint": "https://example.com/historical_keys",
}
]]></sourcecode>
      </figure>
      <t>A similar field could be defined to provide a single set of issuer keys
expressed as a PIKA, either by reference or by value.  Such a mechanism requires
the issuer to list all of the keys that are currently valid in one PIKA,
requiring a Relying Party to download the whole PIKA even if they are only
interested in one key.</t>
      <t>An alternative design would allow for more specific PIKAs, covering
individual keys and referencing them by <tt>kid</tt>.  With such a design, an issuer
metadata object would contain a map like the following (showing three keys with
<tt>kid</tt> values "us-east-2024-01", "us-west-2024-01", and "us-east-2024-04"):</t>
      <figure anchor="fig-specific-pikas">
        <name>Referencing individual PIKAs by Key ID</name>
        <sourcecode type="json"><![CDATA[
{
  // Other metadata...

  "signed_jwks": {
    "us-east-2024-01": "https://example.com/signed_jwks/us-east-2024-01",
    "us-west-2024-01": "https://example.com/signed_jwks/us-east-2024-01",
    "us-east-2024-04": "https://example.com/signed_jwks/us-east-2024-01",
  }
}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The main difference between establishing the authority of issuer keys via PIKA
vs. via HTTPS is that where HTTPS is ephemeral, a PIKA can be redistribted and
verfied for some period of time (until its <tt>exp</tt> time).  Issuers should exercise
care in choosing the <tt>exp</tt> value they populate in a PIKA, in order to avoid a
key being used beyond its intended lifetime.</t>
      <t>An issuer may wish to revoke a key, in the sense of instructing verifiers that
they should no longer use the key to validate JWTs from the issuer.  PIKAs
provide both implicit and explicit revocation.  With implicit revocation, the
issuer simply removes the key from PIKAs it publishes.  With explicit
revocation, the issuer adds a <tt>revoked</tt> field to the key, as described in
<xref target="OIDC-Federation"/>.  In either case, the key will no longer be used by
verifiers once all PIKAs positively authorizing the key have expired.</t>
      <t>The above properties imply an operational trade-off for issuers.  On the one
hand, having shorter PIKA validity times means that the issuer can revoke keys
more quickly.  On the other hand, having short PIKA validity times will require
PIKAs to be signed more often, and result in higher load on endpoints by which
PIKAs are distributed.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="OIDC-Federation" target="https://openid.net/specs/openid-federation-1_0.html">
          <front>
            <title>OpenID Federation 1.0 - draft 33</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="February" day="23"/>
          </front>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="OIDC-Discovery" target="https://openid.net/specs/openid-connect-discovery-1_0.html">
          <front>
            <title>OpenID Connect Discovery 1.0 incorporating errata set 2</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="December" day="15"/>
          </front>
        </reference>
        <reference anchor="OpenPubkey" target="https://www.bastionzero.com/openpubkey">
          <front>
            <title>OpenPubkey</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.ietf-oauth-sd-jwt-vc">
          <front>
            <title>SD-JWT-based Verifiable Credentials (SD-JWT VC)</title>
            <author fullname="Oliver Terbu" initials="O." surname="Terbu">
              <organization>MATTR</organization>
            </author>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete Inc.</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This specification describes data formats as well as validation and
   processing rules to express Verifiable Credentials with JSON payloads
   with and without selective disclosure based on the SD-JWT
   [I-D.ietf-oauth-selective-disclosure-jwt] format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-sd-jwt-vc-03"/>
        </reference>
        <reference anchor="I-D.barnes-mls-addl-creds">
          <front>
            <title>Additional MLS Credentials</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This specification defines two new kinds of credentials for use
   within the Message Layer Security (MLS) credential framework:
   UserInfo Verifiable Credentials and multi-credentials.  UserInfo
   Verifiable Credentials allow clients to present credentials that
   associate OpenID Connect attributes to a signature key pair held by
   the client.  Multi-credentials allow clients to present authenticated
   attributes from multiple sources, or to present credentials in
   different formats to support groups with heterogeneous credential
   support.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-mls-addl-creds-01"/>
        </reference>
      </references>
    </references>
    <?line 380?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
H2fmFKz/OwAA

-->

</rfc>
