<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwenkschuster-wimse-credential-exchange-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.26.0 -->
  <front>
    <title abbrev="WIMSE Credential Exchange">WIMSE Credential Exchange</title>
    <seriesInfo name="Internet-Draft" value="draft-schwenkschuster-wimse-credential-exchange-00"/>
    <author fullname="Arndt Schwenkschuster" role="editor">
      <organization>SPIRL</organization>
      <address>
        <email>arndts.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="04"/>
    <area>AREA</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload</keyword>
    <keyword>identity</keyword>
    <keyword>credential</keyword>
    <keyword>exchange</keyword>
    <abstract>
      <?line 41?>

<t>WIMSE defines Workload Identity and its representation through credentials. Typically, a credential is provisioned to the workload, allowing it to represent itself. The credential format is usually chosen by the platform. Common formats are JSON Web Tokens or X.509 certificates. However, workloads often encounter situations where a different identity or credential is required.</t>
      <t>This document describes various situations where a workload requires another credential. It also outlines different ways this can be acchieved and compares them.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-wimse.github.io/draft-ietf-wimse-s2s-protocol/draft-ietf-wimse-s2s-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schwenkschuster-wimse-credential-exchange/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/arndt-s"/>.</t>
    </note>
  </front>
  <middle>
    <?line 47?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Workload Identity credentials come in all shapes and forms. JSON Web Tokens are popular but also X.509 certificates are commonly used. When a workload is provisioned it can be assumed that it gets all of the following</t>
      <ul spacing="normal">
        <li>
          <t>an identity in the form of an identifier.</t>
        </li>
        <li>
          <t>one or multiple credentials that allow the workload to represent itself (as that identity). Multiple credentials are often different types but representing the same identity.</t>
        </li>
        <li>
          <t>an indication of trust domain. (TODO not sure)</t>
        </li>
      </ul>
      <t>Identity, credential and trust domain enable the workload to interact within its environment, communicate to sibling workloads (same trust domain), access APIs inside that trust domain or provide an API itself.</t>
      <section anchor="needs">
        <name>Needs</name>
        <t>Why a workload cannot use its existing credential can have lots of reasons and subsequent need. The following list highlights the most common ones and is certainly not complete.</t>
        <section anchor="change-in-format">
          <name>Change in format</name>
          <t>Workloads may require a different format representing the same identity in the same trust domain. Some concrete examples are:</t>
          <ul spacing="normal">
            <li>
              <t>initial credential was an X.509 certificate but infrastructure requires application-level authentication such as JWT or Workload Identity Tokens as defined in (TODO).</t>
            </li>
            <li>
              <t>initial credential was a JWT bound to a key, requiring to be presented along with proof of possession but the peer does not support it and requires a Bearer credential.</t>
            </li>
          </ul>
          <t>Credential format is dificult to define. Some formats are opague to the workload and should remain that way. For instance how an OAuth Bearer token is construct and whether it carries claims or not is not a concern of the workload. That a Bearer token is required, however, is. Hence, for example, a change in format between a Bearer token and an X.509 certificate is certainly a change in format the workload can require. A different encoding of a Bearer token on the other hand is not and this specification is not meant for this.</t>
        </section>
        <section anchor="change-in-scope">
          <name>Change in scope</name>
          <t>A credential in the same format representing the same identity but scoped differently. Examples are:</t>
          <ul spacing="normal">
            <li>
              <t>A JWT credential audienced to interact with the Workload platform but access to other workloads are required. The workload is in need of JWTs with different, dedicated audiences.</t>
            </li>
            <li>
              <t>A X.509 credential allowing the workload to TODO based on X.509 Key Usage extension but the workload requires additonal usages.</t>
            </li>
          </ul>
          <t>Generally, scope should already be present and configured approperately with the workload platform only issuing narrowly scoped credentials to the workload.</t>
          <t>In some situation the platform may only support the provisioning of a single credential and not support scoping it. If those cannot be requested by the platform itself an exchange may be necessary.</t>
        </section>
        <section anchor="change-in-identity">
          <name>Change in identity</name>
          <t>A workload may be known under multiple identities. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A workload identity representing an exact physical instance may be eligable for a workload identity representing a logical unit that consists of many phyiscal instances. Another example is a workload running in a specific region being eligable for a more broader, geo scoped identity.</t>
            </li>
            <li>
              <t>A workload that can act on behalf of other workloads. These workloads often are part of infrastructure such as API-Gateways, proxies or service meshes in container environments.</t>
            </li>
          </ul>
        </section>
        <section anchor="change-in-trust-domain">
          <name>Change in trust domain</name>
          <t>A provisioned workload identity is often part of a trust domain that is coupled to infrastructure or deployment. Workloads often require to intercept with other workloads or access outside resources located in other trust domains or reside in different trust domains. This requires the client workload to retrieve an identity of the other trust domain. Examples here include:</t>
          <ul spacing="normal">
            <li>
              <t>Federation (a workload identity federates to a identity in a different trust domain). In existing workload identity environment OAuth2 with Token Exchange (TODO) and Assertion framework (TODO) are popular.</t>
            </li>
            <li>
              <t>A workload requires a credential of "higher trust" to interact with other workloads. This "higher trust" is facilitated by another trust domain. For instance a workload requiring a WebPKI certificate to offer a service to the world wide web.</t>
            </li>
          </ul>
        </section>
        <section anchor="missing-provisioning-support">
          <name>Missing provisioning support</name>
          <t>A workload platform may not support the provisioning of credentials required by the workload. Technically, any of these would likely fall under the reasons above but it's a very common reason and often falls into multiple categories. As an example:</t>
          <ul spacing="normal">
            <li>
              <t>Workload platform provisions identity &amp; credential in the form of a simple signed document that carries the attributes attested by the platform but gives not access in any way.</t>
            </li>
          </ul>
        </section>
        <section anchor="combinations">
          <name>Combinations</name>
          <t>Reasons and needs to exchange credentials are often not binary. A change in trust domain effectively is a change in identity too. A change in format can require a change in trust domain because formats come with different trust structures and security promises. E.g. a trust domain issuing JSON Web Tokens may not be able to issue WebPKI certificates.</t>
        </section>
      </section>
      <section anchor="provisioning-re-previsioning-exchange">
        <name>Provisioning, re-previsioning &amp; exchange</name>
        <t>Once a workload requires a different credential it has multiple options to retrieve it. Based on the need the list of options shrinks. We differientate between the following 3 main options:</t>
        <dl newline="true">
          <dt>Provisioning</dt>
          <dd>
            <t>The initial credential(s) the workload is provisioned with are modified. This is often a matter of configuration within the platform. For instance a service account token in Kubernetes is projected with a different audience. Or a new credential is provisioned alongside the existing credential.</t>
          </dd>
          <dt>Re-provisioning</dt>
          <dd>
            <t>Workloads are able to request credentials without authentication. This can be in addition to an initial credential or the way the initial credential is delivered in the first place. This approach allows the workload to request credential in the exact format, scope and identity it requires.</t>
          </dd>
          <dt>Credential exchange</dt>
          <dd>
            <t>Workload use a provisioned credential to authenticate a delivery of a different credential. The significant difference here is that this is an authenticated action, compared to the other above, which are unauthenticated.</t>
          </dd>
        </dl>
        <t>If a workload is in need of a different format, identity or scope it is always reccomended to use the initial provisioning or re-provisioning instead of a credential exchange. These approaches have generally a higher assurance and are more secure than exchange an already provisioned credential.</t>
        <t>The following table gives some guidance based on the need:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Need</th>
              <th align="left">Preferred mechanism</th>
              <th align="left">Other options (in order)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Change in trust domain</td>
              <td align="left">Credential exchange</td>
              <td align="left">None</td>
            </tr>
            <tr>
              <td align="left">Change in identity</td>
              <td align="left">Provisioning</td>
              <td align="left">1) Re-provisioning<br/>2) credential exchange</td>
            </tr>
            <tr>
              <td align="left">Change in scope</td>
              <td align="left">Provisioning</td>
              <td align="left">1) Re-provisioning<br/>2) credential exchange</td>
            </tr>
            <tr>
              <td align="left">Change in format</td>
              <td align="left">Provisioning</td>
              <td align="left">1) Re-provisioning<br/>2) credential exchange</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="exchange-patterns">
        <name>Exchange patterns</name>
        <section anchor="format-specific-exchange">
          <name>Format-specific exchange</name>
          <t>Existing trust &amp; identity framework often consist of a protocol or framework to exchange credentials. Leveraging this makes use of existing adoption and specific guidelines.</t>
          <t>The following bullets give an overview of the existing patterns and when to use them based on the needs given above:</t>
          <ul spacing="normal">
            <li>
              <t>OAuth Token Exchange <xref target="RFC8693"/> is:
              </t>
              <ul spacing="normal">
                <li>
                  <t>meant for a change in scope.</t>
                </li>
                <li>
                  <t>meant for a change in identity.</t>
                </li>
                <li>
                  <t>to a certain extend meant for a change in format (limited).</t>
                </li>
                <li>
                  <t>NOT meant for a change in trust domain.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>OAuth Assertion Framework <xref target="RFC7521"/> is:
              </t>
              <ul spacing="normal">
                <li>
                  <t>meant for a change in trust domain. As a result of the change in trust domain, a change in identity, scope &amp; potentially format is unavoidable but not the primary use case.</t>
                </li>
                <li>
                  <t>NOT meant for inter-domain exchanges.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>X.509 Certificate Management Protocol <xref target="RFC4210"/>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Is this valid here? If yes, write about it.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Enrollment over Secure Transport <xref target="RFC7030"/>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Profile of <xref target="RFC4210"/>?</t>
                </li>
                <li>
                  <t>Is this valid here? If yes, write about it.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>SPIFFE federation:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Not a credential exchange but rather allowing for identities of different trust domains to trust each other and communicate securely. For SPIFFE the credential formats are JWT and X.509.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="on-behalf-of-exchange">
          <name>On-behalf-of exchange</name>
          <t>Workload environments can be highly dynamic and connected with a high variety of resources protected by different identity frameworks and formats. A format-agnostic, exchange component that exchanges credentials on behalf of the workload may be desired to remain control of credential issuance. For instance to enforce policy, collect audit trails or ease management.</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="808" viewBox="0 0 808 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,224" fill="none" stroke="black"/>
                <path d="M 72,96 L 72,112" fill="none" stroke="black"/>
                <path d="M 72,144 L 72,160" fill="none" stroke="black"/>
                <path d="M 152,32 L 152,96" fill="none" stroke="black"/>
                <path d="M 216,160 L 216,224" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,96" fill="none" stroke="black"/>
                <path d="M 368,96 L 368,128" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 480,32 L 480,96" fill="none" stroke="black"/>
                <path d="M 624,32 L 624,96" fill="none" stroke="black"/>
                <path d="M 800,32 L 800,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                <path d="M 280,32 L 480,32" fill="none" stroke="black"/>
                <path d="M 624,32 L 800,32" fill="none" stroke="black"/>
                <path d="M 152,64 L 272,64" fill="none" stroke="black"/>
                <path d="M 480,64 L 616,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 64,96" fill="none" stroke="black"/>
                <path d="M 80,96 L 152,96" fill="none" stroke="black"/>
                <path d="M 280,96 L 480,96" fill="none" stroke="black"/>
                <path d="M 624,96 L 800,96" fill="none" stroke="black"/>
                <path d="M 8,160 L 216,160" fill="none" stroke="black"/>
                <path d="M 224,192 L 368,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 216,224" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="624,64 612,58.4 612,69.6" fill="black" transform="rotate(0,616,64)"/>
                <polygon class="arrowhead" points="280,64 268,58.4 268,69.6" fill="black" transform="rotate(0,272,64)"/>
                <polygon class="arrowhead" points="232,192 220,186.4 220,197.6" fill="black" transform="rotate(180,224,192)"/>
                <polygon class="arrowhead" points="80,96 68,90.4 68,101.6" fill="black" transform="rotate(270,72,96)"/>
                <g class="text">
                  <text x="200" y="36">2)request</text>
                  <text x="536" y="36">4)request</text>
                  <text x="220" y="52">credential</text>
                  <text x="556" y="52">credential</text>
                  <text x="60" y="68">Workload</text>
                  <text x="340" y="68">Credential</text>
                  <text x="424" y="68">Exchanger</text>
                  <text x="684" y="68">Credential</text>
                  <text x="756" y="68">issuer</text>
                  <text x="56" y="132">1)initial</text>
                  <text x="148" y="132">provisioning</text>
                  <text x="324" y="148">3)</text>
                  <text x="372" y="148">validate</text>
                  <text x="60" y="196">Workload</text>
                  <text x="132" y="196">Platform</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-----------------+ 2)request     +------------------------+  4)request      +---------------------+
|                 |   credential  |                        |    credential   |                     |
|  Workload       +-------------->|  Credential Exchanger  +---------------->|  Credential issuer  |
|                 |               |                        |                 |                     |
+-------^---------+               +----------+-------------+                 +---------------------+
        |                                    |
  1)initial provisioning                     |
        |                              3) validate
+-------+-----------------+                  |
|                         |                  |
|  Workload Platform      |<-----------------+
|                         |
+-------------------------+
]]></artwork>
          </artset>
          <t>TODO: describe steps</t>
          <t>The author believes that a specific protocol that fits all credential formats and trust frameworks is not feasable while remaining the existing security promises of the format or framework. It rather believes that a profile for each scenario is the best way forward and welcomes them to profile this specificiation for their concrete use cases. As a general guidance it is reccommended
* to narrowly scope the scenarios and don't build a one-fits-all exchange for a specific format.
* to decouple authentication and access control from the actual exchange as best as possible. E.g. a credential of one profile should be allowed as a mean of authentication to exchange to a credential of a different profile, regardless if the profiles are aware of each other or not.</t>
          <t>The "Credential Exchanger" shown in the figure may be the Workload Platform itself that offers this capability. Potentially also in a "re-provisioning" way without authentication.</t>
        </section>
      </section>
    </section>
    <section anchor="consideration">
      <name>Consideration</name>
      <t>TODO: add more.</t>
      <section anchor="credential-exchange-cannot-increase-trust">
        <name>Credential exchange cannot increase trust</name>
        <t>A credential exchange is an authenticated way to retrieve credential(s). Thus, the issued credential cannot have higher trust than the credential that was used to authenticate the request. This is particularly relevant when a credential is required which format and frameworks is of a higher trust than the one that was used to authenticate the request. This includes exchanging credentials not requiring proof of key possession to credentials carrying it.</t>
        <t>Generally, these situations are not reccommended and should be avoided. Workloads <bcp14>SHOULD</bcp14> be provisioned with the credential of the highest trust and only retrieve less-trusted credentials via credential exchange.</t>
        <t>Alternatively, the authentication request should be enriched with additional identification that increases the level of authentication. E.g. authentication and additional proof of platform attestation.</t>
      </section>
      <section anchor="credential-exchange-cannot-replace-provisioning">
        <name>Credential exchange cannot replace provisioning</name>
        <t>Because credential exchange is authenticated it cannot replace provisioning. Without an initial credential a workload cannot facilitate credential exchange as there's no proof the workload is eligable for the requested credential.</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="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC4210">
        <front>
          <title>Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)</title>
          <author fullname="C. Adams" initials="C." surname="Adams"/>
          <author fullname="S. Farrell" initials="S." surname="Farrell"/>
          <author fullname="T. Kause" initials="T." surname="Kause"/>
          <author fullname="T. Mononen" initials="T." surname="Mononen"/>
          <date month="September" year="2005"/>
          <abstract>
            <t>This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides on-line interactions between PKI components, including an exchange between a Certification Authority (CA) and a client system. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4210"/>
        <seriesInfo name="DOI" value="10.17487/RFC4210"/>
      </reference>
      <reference anchor="RFC7030">
        <front>
          <title>Enrollment over Secure Transport</title>
          <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
          <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
          <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
          <date month="October" year="2013"/>
          <abstract>
            <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7030"/>
        <seriesInfo name="DOI" value="10.17487/RFC7030"/>
      </reference>
      <reference anchor="RFC7521">
        <front>
          <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="Y. Goland" initials="Y." surname="Goland"/>
          <date month="May" year="2015"/>
          <abstract>
            <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
            <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
            <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7521"/>
        <seriesInfo name="DOI" value="10.17487/RFC7521"/>
      </reference>
      <reference anchor="RFC8693">
        <front>
          <title>OAuth 2.0 Token Exchange</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
          <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="January" year="2020"/>
          <abstract>
            <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8693"/>
        <seriesInfo name="DOI" value="10.17487/RFC8693"/>
      </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>
    <?line 236?>

<section anchor="document-history">
      <name>Document History</name>
      <t><cref>RFC Editor: please remove before publication.</cref></t>
      <section anchor="draft-schwenkschuster-wimse-credential-exchange-00">
        <name>draft-schwenkschuster-wimse-credential-exchange-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial individual draft &amp; write up.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Big shoutout to the WIMSE token exchange design team (Dean Saxe, Yaroslav Rosomakho, Andrii Deinega, Dmitry Izumskiy, Ken McCracken and George Fletcher) that have done amazing groundlaying work in this area.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61b/3LbRpL+H08xp1Ql1oakf+5tovI5q8hSoo1t6SylfKmr
u6ohMCTnBAI8DECaiZ1n2WfZJ7v+umcADAg5udy5diMKHMz09I+vv+4ZTafT
pLZ1bk7U0bvL1zfn6qwymSlqq3N1/j5d6WJpjhI9n1dm++kxqa7Nsqz2J8oW
izJJsjIt9Jomziq9qKcuXe1McUc/Glebarqza2emaTvT1PiZpo8eJa6Zr61z
tizq/YamuDy/vUiKZj031UmS0UInSVoWzhSucSeqrhqTkHRPE10ZfaJO356f
JruyultWZbOB1PQ5L3WmLnmxek8iqtdNXlt1sydp1uq82NqqLNb0tTtK7sye
Xs9OEjVVO/8uPlv/Oj53kuO3IHyyNUVD0in1R9dWSrbML9piqb7DRHi+1jan
56y4v1pTL2ZltcQXukpX9MWqrjfu5OFDjMMjuzWzMOwhHjycV+XOmYc8w0O8
ubT1qpnTu7oqMrIRnuWkXlf35sMc091SLDaTV2a2fCh2lW/ZmO6Jm26qsi7T
Mv/0t7NVvc6PkkQ39aqsWM9q0eS5OMwphFE3scOQZErRTnRhf9Y1ecaJurm+
fPuKnxvRDe/C8ab/usSjWVqueUBVwsVNZuuySpKirNY0x5YN9fbi7NmTx4/8
x788etp+/POTxySMc6bCemqRlzv55qt//vrpibot70zRWT6B27fzJtPpVOm5
qyud1kkicZOZhS2MU4c+oYtM2dqpymwqQ35d8xZVvSLjL1c9Z3Mzdbvf2FTn
+X6idO8bZZ0i/W4twsZkqi7pddP6Lw3OaQPwKFvjy3YpLGzyBU1Mw3vzyW4w
beMarKfSVUkvqPmeZ96Qp2DMTJ2V6zUUxC84MoNRf7u5eqPembloyZHl1L/N
/vzoa5VCmwsLtKC9fF/uzNZUk1ZMGrmoodYiLZuC7K6crRvWhlO7laGptcrs
YkGfIHpQIM0fq6Iy/91YejJLktsV/U5w1CDEyAgureyczLDVlS0bN7ZCECdM
Q5sqStp0f5WZuqxJqa5UZVPnbNhOsJ3eO9ISLZxq0hjNmVJE0l4ztjX55UZj
WppzPRNvWdssy8mPPlOXRV2VWZNCJvKdA2/puQNmMoAUMpByK71hUTO2Bel3
aAaYZlNuGgIINW+8+IeG4XEpW5XM3jhSo3q3IrP0NDNwN3KqsFPnSNPkgCt4
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
UYm/H5sl/wOGH2XoFTcAAA==

-->

</rfc>
