<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-santesson-r2ps-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="R2PS">Remote Two-factor Protected Services</title>
    <seriesInfo name="Internet-Draft" value="draft-santesson-r2ps-04"/>
    <author initials="S." surname="Santesson" fullname="Stefan Santesson">
      <organization abbrev="IDsec Solutions">IDsec Solutions AB</organization>
      <address>
        <postal>
          <street>Forskningsbyn Ideon</street>
          <city>Lund</city>
          <code>223 70</code>
          <country>SE</country>
        </postal>
        <email>sts@aaa-sec.com</email>
      </address>
    </author>
    <author initials="P." surname="Altmann" fullname="Peter Altmann">
      <organization abbrev="SIROS">SIROS Foundation</organization>
      <address>
        <postal>
          <city>Stockholm</city>
          <country>SE</country>
        </postal>
        <email>peter.altmann@siros.se</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <keyword>remote</keyword>
    <keyword>HSM</keyword>
    <keyword>opaque</keyword>
    <keyword>services</keyword>
    <abstract>
      <?line 102?>

<t>This document defines a generic service exchange protocol where service exchange data is protected and bound to a physical user using 1 or 2 factors (1FA and 2FA). The protocol facilitates registration and verification of either a knowledge-factor or a biometric factor in addition to a possession factor as means of achieving 2 factor protection.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-santesson-r2ps/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Razumain/r2ps-ietf-draft"/>.</t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Password-Authenticated Key Exchange (PAKE) protocols let two parties derive a shared key from a low-entropy password without disclosing it, while resisting offline guessing. An augmented PAKE (aPAKE) further protects against server compromise.</t>
      <t>This document complements the capabilities of PAKE protocols by defining a service exchange protocol that can be used to:</t>
      <ul spacing="normal">
        <li>
          <t>exchange data for a selected PAKE protocol, or any other protocol that validates a user knowledge or biometric factor, to establish a shared session key; and</t>
        </li>
        <li>
          <t>exchange service data protected under that session key.</t>
        </li>
      </ul>
      <t>This document uses the OPAQUE aPAKE <xref target="RFC9807"/> as its <bcp14>RECOMMENDED</bcp14> mechanism for verifying a knowledge factor without exposing it to the server.</t>
      <section anchor="applicability-under-the-eidas-regulation">
        <name>Applicability under the eIDAS Regulation</name>
        <t>Under the eIDAS Regulation <xref target="EU-910-2014"/>, electronic identification means issued under a notified electronic identification scheme are assigned an assurance level (low, substantial or high), with minimum requirements set out in <xref target="EU-2015-1502"/>. At assurance level high, the means must use at least two authentication factors from different categories and protect against attackers with high attack potential according to <xref target="CEM"/>, Annex B. Where the means relies on a private key, this is commonly achieved by holding the key in a tamper-resistant device and making each use of it conditional on user authentication.</t>
        <t>The European Digital Identity Wallet, introduced by <xref target="EU-2024-1183"/>, is an electronic identification means that must meet assurance level high. Its critical assets, such as private keys, are protected by a Wallet Secure Cryptographic Application (WSCA) and a Wallet Secure Cryptographic Device (WSCD) <xref target="EU-2024-2979"/>. The WSCD is a tamper-resistant device that may be local to the user's device or remote, for example a hardware security module operated by the wallet provider. The WSCA controls access to the keys protected by the WSCD.</t>
        <t>Where the WSCA and WSCD are provided as a remote service, operations such as presenting person identification data at assurance level high require the wallet instance to send requests to that service, authorized by two authentication factors verified by the WSCA. This protocol provides a framework for such service exchanges, based on two-factor user authentication, while leaving the client and server free to use any suitable authentication mechanism.</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 anchor="definitions">
        <name>Definitions</name>
        <t>The following terms have a defined meaning in this document:</t>
        <ul spacing="normal">
          <li>
            <t>context: A security scope, cryptographically separated from other contexts by a unique set of context keys held at the client and the server. The client-side context keys also represent the user's possession factor in two-factor protection modes.</t>
          </li>
          <li>
            <t>context key: A public/private key pair. Each context is bound to one context key-agreement key and one context signing key, at both the server and the client.</t>
          </li>
          <li>
            <t>protection mode: This document defines two protection modes, one-factor protection (1FA) and two-factor protection (2FA). 1FA provides protection based on one user factor (the possession factor); 2FA provides protection based on two user factors (the possession factor together with a knowledge or biometric factor).</t>
          </li>
          <li>
            <t>session: A scope bound to a session key derived from two-factor authentication of the user, which requires the user to be present to provide a knowledge or biometric factor. A session <bcp14>MAY</bcp14> be bound to a specific task.</t>
          </li>
          <li>
            <t>service type: A defined message type, with its own data structure, that can be exchanged using R2PS.</t>
          </li>
          <li>
            <t>task: Defines what a session is to achieve before it is terminated. A task <bcp14>MAY</bcp14> be negotiated when creating a session and lets the client and the server terminate the session as soon as the task completes or fails, even before the session timeout is reached.</t>
          </li>
          <li>
            <t>first factor: The user's possession factor, which corresponds to a set of client context keys.</t>
          </li>
          <li>
            <t>second factor: The user's knowledge factor or biometric factor.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="basic-structure">
      <name>Basic structure</name>
      <t>R2PS is a stateless request/response protocol. Each request and each response is carried as a JSON Web Encryption (JWE) object <xref target="RFC7516"/> in compact serialization, providing end-to-end encryption between the client and the backend server that provides the service. The JWE payload is a JSON Web Signature (JWS) object <xref target="RFC7515"/> in compact serialization, signed by the sender, that carries a request or response structure common to all exchanges together with service data identified by a service type.</t>
      <t>The backend server determines the protection mode from the JWE protected header. R2PS defines two protection modes: <tt>1FA</tt>, authenticated by a possession factor (the device key); and <tt>2FA</tt>, authenticated additionally by the user's second factor. The service type identifier carried in the inner JWS determines the structure of the service data, the operations performed, and the required protection mode.</t>
      <figure>
        <name>R2PS outer JWE and inner JWS structure</name>
        <artwork type="ascii-art"><![CDATA[
+-----------------------------------------------------------------+
| JWE  (compact serialization)                                    |
|   protected header: typ (r2ps-1fa | r2ps-2fa), alg, enc         |
|                                                                 |
| +-----------------------------------------------------------+   |
| | JWS  (compact serialization)                              |   |
| |   protected header:                                       |   |
| |     typ (r2ps-request+jws | r2ps-response+jws),           |   |
| |     alg=ES256, kid                                        |   |
| |                                                           |   |
| |   payload:                                                |   |
| |     ver, nonce, iat       (common to all exchanges)       |   |
| |     type, jwe_hash        (requests only)                 |   |
| |     data { service-specific request or response }         |   |
| +-----------------------------------------------------------+   |
+-----------------------------------------------------------------+
]]></artwork>
      </figure>
      <t>The protocol allows the client and server to agree on any number of service type identifiers, each having its own defined data structure for request and response data.</t>
      <t>While the base protocol structure has no state, the inner service data structure may be used in a process that requires state. This is defined by each service type.</t>
      <t>This specification defines a set of default service types. Other service types <bcp14>MAY</bcp14> be defined by other documents.</t>
      <section anchor="bootstrapping-the-protocol">
        <name>Bootstrapping the protocol</name>
        <t>The protocol is designed to serve the need for service exchange with many different server resources, each cryptographically separated from the others.</t>
        <t>This is achieved by means of separate "context keys" at the client and server. A security context is a named scope identified by a context id, under which a set of service types is offered with a common security and key-management policy. Each security context has its own context key set (a signing key and a key-agreement key) and is cryptographically separated from all other security contexts.</t>
        <t>The manner through which the client and server share trusted context keys is out of scope of this specification.</t>
        <t>Initial registration of a user's 2nd factor may need authorization data that was provided to the user by out-of-band means. This <bcp14>MAY</bcp14> be a one-time password or other authorization data that asserts that the user factor is provided by the intended user. The protocol facilitates exchange of such authorization data in the registration process, but the composition of this data and the means for providing this data to the user is out of scope for this specification.</t>
      </section>
      <section anchor="protection-modes-and-sessions">
        <name>Protection modes and sessions</name>
        <t>The main purpose of this protocol is to exchange service data that is protected and authenticated under two user factors: a possession factor (the device key) and a user-bound factor (knowledge or biometric). Establishing the user-bound factor must complete before a two-factor protected exchange can take place, so the protocol also provides a one-factor protection mode, protected by the possession factor alone.</t>
        <t>The one-factor protection mode <bcp14>MAY</bcp14> be used:</t>
        <ul spacing="normal">
          <li>
            <t>to register or verify a user's knowledge or biometric factor; and</t>
          </li>
          <li>
            <t>for exchanges with lower protection requirements that are permitted without the user presenting a second factor.</t>
          </li>
        </ul>
        <t>The two-factor protection mode is used within a session bound to the user having presented a second factor, as typically required when the user signs a transaction or presents an identity. A session <bcp14>MAY</bcp14> be bound to a <tt>task</tt>, which in turn <bcp14>MAY</bcp14> bind to a sequence of service exchanges, each identified by a service type. This session lets both client and server track the task's progress within the session and terminate the session as soon as the task completes or the session times out.</t>
      </section>
    </section>
    <section anchor="r2ps-protocol-components">
      <name>R2PS Protocol Components</name>
      <section anchor="outer-jwe-object">
        <name>Outer JWE object</name>
        <t>The outer JWE object <xref target="RFC7516"/> provides end-to-end encryption of the exchanged service data. It is used in one of two protection modes:</t>
        <ul spacing="normal">
          <li>
            <t><tt>1FA</tt>, where the Content Encryption Key (CEK) is derived from a static recipient key and an ephemeral sender key.</t>
          </li>
          <li>
            <t><tt>2FA</tt>, where the session key derived from authentication of the user's two factors is used directly as the CEK. This mode provides forward secrecy.</t>
          </li>
        </ul>
        <t>The recipient determines the mode from the <tt>typ</tt> parameter of the JWE protected header. The JWE protected header is the only header used; per-recipient and unprotected headers are not used.</t>
        <t>This document defines the following <tt>typ</tt> parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>r2ps-1fa</tt> : identifies the 1FA mode defined in this document.</t>
          </li>
          <li>
            <t><tt>r2ps-2fa</tt> : identifies the 2FA mode defined in this document.</t>
          </li>
        </ul>
        <t>Deployments <bcp14>MAY</bcp14> define and agree on alternative protection modes identified by other <tt>typ</tt> parameter values.</t>
        <section anchor="fa-mode">
          <name>1FA mode</name>
          <t>In <tt>1FA</tt> mode the CEK is derived using ECDH-ES <xref target="RFC7518"/>. The JWE protected header <bcp14>MUST</bcp14> contain:</t>
          <ul spacing="normal">
            <li>
              <t><tt>typ</tt>: <bcp14>MUST</bcp14> be <tt>r2ps-1fa</tt>.</t>
            </li>
            <li>
              <t><tt>alg</tt>: <bcp14>MUST</bcp14> be <tt>ECDH-ES</tt>.</t>
            </li>
            <li>
              <t><tt>enc</tt>: <bcp14>MUST</bcp14> be <tt>A256GCM</tt>.</t>
            </li>
            <li>
              <t><tt>epk</tt>: the sender's ephemeral public key.</t>
            </li>
            <li>
              <t><tt>kid</tt>: identifies the recipient's static key-agreement key: the server's static ECDH key in a request, the client's agreement key (CAK) in a response.</t>
            </li>
            <li>
              <t><tt>apu</tt>: <bcp14>MUST</bcp14> be the <tt>client_id</tt> in a request and the <tt>context</tt> in a response.</t>
            </li>
            <li>
              <t><tt>apv</tt>: <bcp14>MUST</bcp14> be the <tt>context</tt> in a request and the <tt>client_id</tt> in a response.</t>
            </li>
            <li>
              <t><tt>cty</tt>: <bcp14>MUST</bcp14> be <tt>jose</tt>.</t>
            </li>
          </ul>
          <t>where <tt>context</tt> identifies the security context and <tt>client_id</tt> is the client's identifier within that context.</t>
          <t>The resulting compact serialization is <tt>&lt;header&gt;..&lt;iv&gt;.&lt;ciphertext&gt;.&lt;tag&gt;</tt>; the encrypted-key field is empty, as ECDH-ES uses direct key agreement. The sender <bcp14>MUST</bcp14> destroy the ephemeral private key and the CEK as soon as the JWE has been constructed.</t>
        </section>
        <section anchor="fa-mode-1">
          <name>2FA mode</name>
          <t>In <tt>2FA</tt> mode the session key, derived from authentication of the user's two factors, is used directly as the CEK (<tt>dir</tt>, direct encryption). The JWE protected header <bcp14>MUST</bcp14> contain:</t>
          <ul spacing="normal">
            <li>
              <t><tt>typ</tt>: <bcp14>MUST</bcp14> be <tt>r2ps-2fa</tt>.</t>
            </li>
            <li>
              <t><tt>alg</tt>: <bcp14>MUST</bcp14> be <tt>dir</tt>.</t>
            </li>
            <li>
              <t><tt>enc</tt>: <bcp14>MUST</bcp14> be <tt>A256GCM</tt>.</t>
            </li>
            <li>
              <t><tt>kid</tt>: the <tt>2FA</tt> session identifier.</t>
            </li>
            <li>
              <t><tt>cty</tt>: <bcp14>MUST</bcp14> be <tt>jose</tt>.</t>
            </li>
          </ul>
          <t>The IV <bcp14>MUST</bcp14> be a freshly generated 96-bit random value for each message. The resulting compact serialization is <tt>&lt;header&gt;..&lt;iv&gt;.&lt;ciphertext&gt;.&lt;tag&gt;</tt>; the encrypted-key field is empty, as direct encryption uses the session key as the CEK.</t>
          <t>The <tt>2FA</tt> session identifier identifies the <tt>2FA</tt> session key that is negotiated during authentication of the users 2 factors. The <tt>2FA</tt> session key is ephemeral and <bcp14>MUST</bcp14> be destroyed after use to preserve forward secrecy.</t>
        </section>
      </section>
      <section anchor="inner-jws-object">
        <name>Inner JWS object</name>
        <t>The inner JWS object <xref target="RFC7515"/> is signed by the sender with its context signing key and carries the request or response structure common to all service types. Variant content specific to a service type resides entirely within the <tt>data</tt> member of the payload.</t>
        <t>The JWS protected header <bcp14>MUST</bcp14> contain at least:</t>
        <ul spacing="normal">
          <li>
            <t><tt>alg</tt>: <bcp14>SHOULD</bcp14> be <tt>ES256</tt>.</t>
          </li>
          <li>
            <t><tt>kid</tt>: identifies the signing key. In a request it <bcp14>MUST</bcp14> identify the client's Client Signing Key (CSK) for the security context; implementations <bcp14>SHOULD</bcp14> use the JWK Thumbprint <xref target="RFC7638"/> of the CSK public key. In a response it <bcp14>MUST</bcp14> identify the server's Server Signing Key (SSK).</t>
          </li>
          <li>
            <t><tt>typ</tt>: <bcp14>MUST</bcp14> be <tt>r2ps-request+jws</tt> in a request and <tt>r2ps-response+jws</tt> in a response.</t>
          </li>
        </ul>
        <t>The JWS payload is a JSON object. Members that hold a binary value are encoded as base64 strings as defined in <xref target="RFC4648"/>, Section 4 (the standard base64 alphabet, with padding). The following members are common to all exchanges and <bcp14>MUST</bcp14> be present in both requests and responses:</t>
        <ul spacing="normal">
          <li>
            <t><tt>ver</tt> (string): the protocol version; <tt>"1.0"</tt> for this document.</t>
          </li>
          <li>
            <t><tt>nonce</tt> (string): a base64-encoded random byte array carrying at least 16 bytes of entropy. The client generates it for each request, and the server echoes it unchanged in the corresponding response.</t>
          </li>
          <li>
            <t><tt>iat</tt> (integer): the message creation time as a Unix timestamp. The server <bcp14>MUST</bcp14> enforce a maximum <tt>iat</tt> age and <bcp14>MUST</bcp14> reject a duplicate <tt>nonce</tt> received within that window. Freshness windows and the state required for replay protection are deployment-defined.</t>
          </li>
          <li>
            <t><tt>data</tt> (object): the service-specific payload, whose structure is determined by the service type.</t>
          </li>
        </ul>
        <section anchor="request-data">
          <name>Request data</name>
          <t>In addition to the common members, a request payload <bcp14>MUST</bcp14> include the following, which <bcp14>MUST NOT</bcp14> appear in a response:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> (string): the service type identifier. It determines the structure of <tt>data</tt>, the operations performed, and the required protection mode (<tt>1FA</tt> or <tt>2FA</tt>).</t>
            </li>
            <li>
              <t><tt>jwe_hash</tt> (string): a digest binding this JWS to the JWE that encrypts it, constructed as defined below.</t>
            </li>
          </ul>
          <t>The <tt>jwe_hash</tt> binds the signed payload to the JWE protected header that carries it, preventing surreptitious forwarding (a recipient re-encrypting the inner JWS under a different JWE). It is computed over the JWE Protected Header exactly as transmitted in compact serialization. This is defined in JWE <xref target="RFC7516"/> as BASE64URL(UTF8(JWE Protected Header)), which is the octets preceding the first period in compact serialization. The sender computes the SHA-256 digest of the ASCII octets of that encoded header and carries the resulting 32-octet digest in the <tt>jwe_hash</tt> member, encoded as a base64 string.</t>
          <artwork type="ascii-art"><![CDATA[
jwe_hash = SHA-256( ASCII( BASE64URL(UTF8(JWE Protected Header)) ) )
]]></artwork>
          <t>The recipient <bcp14>MUST</bcp14> recompute <tt>jwe_hash</tt> over the received encoded JWE Protected Header and <bcp14>MUST</bcp14> reject the message on mismatch.</t>
          <t>A request <bcp14>MAY</bcp14> also carry compliance information, using the optional members below. These are carried only in requests and are not present in responses.</t>
          <ul spacing="normal">
            <li>
              <t><tt>compliance_token</tt> (string): a compliance token demonstrating that the client meets a set of predefined policy requirements. The policy, and what the token's underlying test verifies, are out of scope of this specification.</t>
            </li>
            <li>
              <t><tt>compliance_proof</tt> (string): included only together with a <tt>compliance_token</tt>. It carries information establishing that the presented token is rightfully held by the client presenting it. It is relevant only when the token does not already provide this function.</t>
            </li>
            <li>
              <t><tt>compliance_token_type</tt> (string): included only together with a <tt>compliance_token</tt>. When present, it defines the type of the token and of any present proof, their format, and, where relevant, their encoding. When absent, an established default configuration is assumed. This document defines no <tt>compliance_token_type</tt> values. It is up to the client and the server to agree on suitable profiles and their type identifier values.</t>
            </li>
          </ul>
          <t>A <tt>compliance_token</tt> <bcp14>SHOULD</bcp14> be bound to the client presenting it, so that a token captured in transit cannot be used by another party. It may be bound to a key whose possession the client demonstrates on each presentation, or to an identity that the request itself proves through its signature.</t>
          <t>See <xref target="compliance-rats"/> for how these members relate to attestation and the RATS architecture.</t>
        </section>
        <section anchor="response-data">
          <name>Response data</name>
          <section anchor="success-response">
            <name>Success Response</name>
            <t>This response <bcp14>SHOULD</bcp14> be used on successful service completion, or where error handling is provided as part of service data in the response.</t>
            <t>The response payload includes the common members only (<tt>ver</tt>, <tt>nonce</tt>, <tt>iat</tt> and  <tt>data</tt>). The <tt>nonce</tt> <bcp14>MUST</bcp14> equal the <tt>nonce</tt> of the request being answered. The response <tt>data</tt> object carries the service-specific response members defined by the service type, for example the <tt>p_data</tt> parameter.</t>
          </section>
          <section anchor="error-response">
            <name>Error response</name>
            <t>If a server fails to process a request and return a normal response, e.g. due to a missing or invalid parameter, decryption error or signature validation error, etc, it <bcp14>SHOULD</bcp14> return a suitable error response.</t>
            <t>When a HTTP API is used for service exchange, the server <bcp14>SHALL</bcp14> provide problem details as defined in <xref target="RFC9457"/>.</t>
            <t>The following response codes are <bcp14>RECOMMENDED</bcp14> for use in a HTTP API:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Response code</th>
                  <th align="left">HTTP response code</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">ILLEGAL_REQUEST_DATA</td>
                  <td align="left">400</td>
                </tr>
                <tr>
                  <td align="left">UNAUTHORIZED</td>
                  <td align="left">401</td>
                </tr>
                <tr>
                  <td align="left">ACCESS_DENIED</td>
                  <td align="left">403</td>
                </tr>
                <tr>
                  <td align="left">ILLEGAL_STATE</td>
                  <td align="left">409</td>
                </tr>
                <tr>
                  <td align="left">UNSUPPORTED_REQUEST_TYPE</td>
                  <td align="left">415</td>
                </tr>
                <tr>
                  <td align="left">SERVER_ERROR</td>
                  <td align="left">500</td>
                </tr>
                <tr>
                  <td align="left">TRY_LATER</td>
                  <td align="left">503</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
      </section>
      <section anchor="second-factor-establishment-and-session-creation">
        <name>Second factor establishment and session creation</name>
        <t>This section defines common service types for registration, update and authentication of a user's second factor to support session creation based on the user's two factors.</t>
        <t>The output of session creation is:</t>
        <ul spacing="normal">
          <li>
            <t>session key: a key suitable for direct use as the CEK in the 2FA protection mode in use; its length and parameters are determined by that mode's encryption algorithm. This key <bcp14>MUST</bcp14> be uniformly distributed, <bcp14>MUST</bcp14> be unique per session, and <bcp14>MUST</bcp14> provide forward secrecy.</t>
          </li>
          <li>
            <t>session identifier: an identifier of the session key and the properties bound to it.</t>
          </li>
          <li>
            <t>context: the context under which the session is exchanged.</t>
          </li>
          <li>
            <t>task: an optional identifier of the task to be performed within the session.</t>
          </li>
          <li>
            <t>session expiration: the time at which the session expires, regardless of whether its task has completed.</t>
          </li>
        </ul>
        <t>A second-factor authentication mechanism that already outputs a key meeting these requirements (for example, the session key produced by OPAQUE <xref target="RFC9807"/>) <bcp14>MAY</bcp14> use that key directly as the session key. Otherwise, the mechanism <bcp14>MUST</bcp14> derive a suitable key from its output, for example using HKDF <xref target="RFC5869"/>.</t>
        <section anchor="request-parameters">
          <name>Request parameters</name>
          <t>These request parameters are defined for use in the defined service types for second factor establishment and session creation.</t>
          <ul spacing="normal">
            <li>
              <t><tt>protocol</tt> : (<strong>string</strong>) - Identifier of the protocol used for two-factor authentication. This parameter defines the content of the <tt>p_data</tt> parameter in both the request and the response.</t>
            </li>
            <li>
              <t><tt>state</tt> : (<strong>string</strong>) - Identifier of the state of the protocol exchange</t>
            </li>
            <li>
              <t><tt>authorization</tt> : (<strong>byte array</strong>) - Authorization data for registration of a new second factor</t>
            </li>
            <li>
              <t><tt>authorization_type</tt> : (<strong>string</strong>) - The type of authorization data provided in the <tt>authorization</tt> parameter</t>
            </li>
            <li>
              <t><tt>task</tt> : (<strong>string</strong>) - The requested session task used to determine the set of operations that are suitable for a created session</t>
            </li>
            <li>
              <t><tt>session_duration</tt> : (<strong>integer</strong>) - The requested max duration of the created session in seconds</t>
            </li>
            <li>
              <t><tt>p_data</tt> : (defined by protocol) - The protocol-specific request data. Its content is defined by the selected protocol and the current <tt>state</tt>, and <bcp14>MAY</bcp14> be a string, an object, or null.</t>
            </li>
          </ul>
        </section>
        <section anchor="response-parameters">
          <name>Response parameters</name>
          <t>These response parameters are defined for use in the defined service types for second factor establishment and session creation.</t>
          <ul spacing="normal">
            <li>
              <t><tt>success</tt> : (<strong>boolean</strong>) - Indicates whether the server accepted and successfully processed the exchange. This member <bcp14>MUST</bcp14> be present in every response.</t>
            </li>
            <li>
              <t><tt>p_data</tt> : (defined by protocol) - The protocol-specific response data for the current protocol and <tt>state</tt>. Its content is defined by the selected protocol and <bcp14>MAY</bcp14> be a string, an object, or null.</t>
            </li>
            <li>
              <t><tt>session_id</tt> : (<strong>string</strong>) - The session identifier of a created session</t>
            </li>
            <li>
              <t><tt>task</tt> : (<strong>string</strong>) - Confirming the session task set in the session request</t>
            </li>
            <li>
              <t><tt>session_expiration_time</tt> : (<strong>integer</strong>) - The latest time this session will end expressed as seconds since epoch</t>
            </li>
          </ul>
        </section>
        <section anchor="member-presence">
          <name>Member presence</name>
          <t>Each service type specifies, in the tables below, which members appear in its requests and responses. Presence depends on the member, on the position of the exchange within the protocol's sequence, and, for responses, on whether the server reports success.</t>
          <t>The exchange position is one of:</t>
          <ul spacing="normal">
            <li>
              <t><tt>first</tt>: the first exchange of the protocol.</t>
            </li>
            <li>
              <t><tt>last</tt>: the concluding exchange of the protocol.</t>
            </li>
            <li>
              <t><tt>all</tt>: every exchange.</t>
            </li>
            <li>
              <t><tt>protocol</tt> : presence is defined by the protocol.</t>
            </li>
          </ul>
          <t>A protocol that completes in a single exchange treats that exchange as both the first and the last.</t>
          <t>The presence rule is one of:</t>
          <ul spacing="normal">
            <li>
              <t><tt>required</tt>: the member <bcp14>MUST</bcp14> be present.</t>
            </li>
            <li>
              <t><tt>optional</tt>: the member <bcp14>MAY</bcp14> be present.</t>
            </li>
            <li>
              <t><tt>required on success</tt>: the member <bcp14>MUST</bcp14> be present when <tt>success</tt> is <tt>true</tt>, and <bcp14>MUST</bcp14> be absent otherwise.</t>
            </li>
            <li>
              <t><tt>required if requested</tt>: the member <bcp14>MUST</bcp14> be present when the corresponding member was present in the request.</t>
            </li>
          </ul>
          <t>A response with <tt>success</tt> set to <tt>false</tt> contains only the <tt>success</tt> member; the presence rules in the tables below describe the success path.</t>
        </section>
        <section anchor="service-types">
          <name>Service types</name>
          <t>The following service types are defined in this section</t>
          <ul spacing="normal">
            <li>
              <t><tt>create_session</tt>: Authenticates the user's two factors and creates a session</t>
            </li>
            <li>
              <t><tt>2fa_registration</tt>: Register a user's second factor</t>
            </li>
            <li>
              <t><tt>2fa_update</tt>: Update a user's second factor</t>
            </li>
          </ul>
          <t>These service types are designed to allow any suitable protocol for authentication, registration and updates of the user's second factor. These service types have defined data structures as defined below.</t>
          <section anchor="createsession-service-type">
            <name><tt>create_session</tt> Service type</name>
            <t>This service type is used to create a session based on authentication of the user's two factors. This service type <bcp14>MUST</bcp14> be exchanged using 1FA protection mode.</t>
            <t>The <tt>create_session</tt> request contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>protocol</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>state</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>session_duration</tt></td>
                  <td align="left">first</td>
                  <td align="left">optional</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>task</tt></td>
                  <td align="left">first</td>
                  <td align="left">optional</td>
                </tr>
              </tbody>
            </table>
            <t>If <tt>session_duration</tt> is not specified, the server <bcp14>MUST</bcp14> use a default value.</t>
            <t>The <tt>create_session</tt> response contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>success</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>session_id</tt></td>
                  <td align="left">all</td>
                  <td align="left">required on success</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required on success</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>task</tt></td>
                  <td align="left">last</td>
                  <td align="left">required if requested</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>session_expiration_time</tt></td>
                  <td align="left">last</td>
                  <td align="left">required on success</td>
                </tr>
              </tbody>
            </table>
            <t>The <tt>session_id</tt> identifies the session this exchange is bound to and attempts to create. It <bcp14>MUST</bcp14> be unique within the context and is returned in every response of the exchange. A returned <tt>session_id</tt> is NOT an indication that the session has been created; that is determined by <tt>success</tt> and the protocol data in the concluding response.</t>
          </section>
          <section anchor="faregistration-service-type">
            <name><tt>2fa_registration</tt> Service type</name>
            <t>This service type is used to register a user's second factor. This service type <bcp14>MUST</bcp14> be exchanged using 1FA protection mode.</t>
            <t>The <tt>2fa_registration</tt> request contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>protocol</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>state</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>authorization</tt></td>
                  <td align="left">protocol</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>authorization_type</tt></td>
                  <td align="left">protocol</td>
                  <td align="left">optional</td>
                </tr>
              </tbody>
            </table>
            <t>The <tt>authorization</tt> member provides out-of-band authorization that the user is authorized to register a second factor. Its content is defined by <tt>authorization_type</tt>.</t>
            <t>NOTE: <tt>authorization</tt> is carried in the last exchange rather than the first so that protocols with stateless registration are supported uniformly. OPAQUE, for example, processes the <tt>evaluate</tt> (first) exchange without retaining server state; requiring authorization in the first exchange would force the server to keep state across the exchange. Placing it in the last exchange, where the server commits the registration, keeps registration stateless-friendly for all protocols.</t>
            <t>This specification defines the following <tt>authorization_type</tt> values:</t>
            <ul spacing="normal">
              <li>
                <t><tt>otp</tt> : The <tt>authorization</tt> parameter is a one-time password given to the user by out-of-band means.</t>
              </li>
            </ul>
            <t>The <tt>2fa_registration</tt> response contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>success</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required on success</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="faupdate-service-type">
            <name><tt>2fa_update</tt> Service type</name>
            <t>This service type is used to update the user's second factor under the protection of the current 2 factors. This service type <bcp14>MUST</bcp14> be exchanged using 2FA protection mode. This means that a session must already exist that is bound to the user's current 2 factors. This session <bcp14>MUST</bcp14> be bound to a task with the value <tt>2fa_update</tt> which allows one exchange of the <tt>2fa_update</tt> service type under the 2FA protection mode. This ensures that the user <bcp14>MUST</bcp14> present its second factor as part of the process to update this factor.</t>
            <t>The <tt>2fa_update</tt> request contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>protocol</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>state</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
              </tbody>
            </table>
            <t>The <tt>2fa_update</tt> response contains:</t>
            <table>
              <thead>
                <tr>
                  <th align="left">Member</th>
                  <th align="left">Exchange</th>
                  <th align="left">Presence</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>success</tt></td>
                  <td align="left">all</td>
                  <td align="left">required</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>p_data</tt></td>
                  <td align="left">all</td>
                  <td align="left">required on success</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
        <section anchor="defined-authentication-protocols">
          <name>Defined authentication protocols</name>
          <t>This specification defines the following authentication protocols:</t>
          <ul spacing="normal">
            <li>
              <t><tt>opaque</tt>: Uses OPAQUE <xref target="RFC9807"/> to send a password knowledge proof to the server. This <bcp14>SHOULD</bcp14> be used for server-side password checks.</t>
            </li>
            <li>
              <t><tt>fido2</tt>: Proves the second factor with a roaming WebAuthn authenticator. This mode <bcp14>SHOULD</bcp14> be used for device-attested flows using a FIDO2 Authenticator.</t>
            </li>
          </ul>
          <section anchor="opaque-protocol">
            <name>OPAQUE protocol</name>
            <t>Use of the OPAQUE protocol option is identified by the protocol identifier <tt>opaque</tt>.</t>
            <t>OPAQUE needs two roundtrips to complete registration or authentication and uses the following defined state identifiers in the context of this protocol:</t>
            <ul spacing="normal">
              <li>
                <t><tt>evaluate</tt> - Identifies the initial server evaluation state where the server evaluates the blinded OPRF data.</t>
              </li>
              <li>
                <t><tt>finalize</tt> - Identifies the final state where registration or authentication is finalized.</t>
              </li>
            </ul>
            <section anchor="createsession">
              <name><tt>create_session</tt></name>
              <t>Protection mode <bcp14>MUST</bcp14> be 1FA.</t>
              <t>The following OPAQUE data is exchanged between the client and server:</t>
              <table>
                <thead>
                  <tr>
                    <th align="left">State</th>
                    <th align="left">Direction</th>
                    <th align="left">p_data content</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">
                      <tt>evaluate</tt></td>
                    <td align="left">Request</td>
                    <td align="left">AKE message 1 as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>evaluate</tt></td>
                    <td align="left">Response</td>
                    <td align="left">AKE message 2 as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Request</td>
                    <td align="left">AKE message 3 as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Response</td>
                    <td align="left">null</td>
                  </tr>
                </tbody>
              </table>
            </section>
            <section anchor="faregistration">
              <name><tt>2fa_registration</tt></name>
              <t>Protection mode <bcp14>MUST</bcp14> be 1FA.</t>
              <t>Authorization data <bcp14>MUST</bcp14> be present in the <tt>finalize</tt> state of the protocol and <bcp14>MUST NOT</bcp14> be provided in the <tt>evaluate</tt> state.</t>
              <t>The following OPAQUE data is exchanged between the client and server:</t>
              <table>
                <thead>
                  <tr>
                    <th align="left">State</th>
                    <th align="left">Direction</th>
                    <th align="left">p_data content</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">
                      <tt>evaluate</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Registration request as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>evaluate</tt></td>
                    <td align="left">Response</td>
                    <td align="left">Registration response as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Registration record as Base64 encoded string</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Response</td>
                    <td align="left">null</td>
                  </tr>
                </tbody>
              </table>
            </section>
            <section anchor="faupdate">
              <name><tt>2fa_update</tt></name>
              <t>Protection mode <bcp14>MUST</bcp14> be 2FA.</t>
              <t>When OPAQUE is used in <tt>2fa_update</tt>, the data exchanged between the client and server is the same as in <tt>2fa_registration</tt>. The only difference is that the exchange is sent in 2FA protection mode, protected by the previous second-factor session key, and therefore does not need to provide any authorization data.</t>
            </section>
          </section>
          <section anchor="fido2-authenticator-protocol">
            <name>FIDO2 Authenticator protocol</name>
            <t>Use of the FIDO2 Authenticator protocol option is identified by the protocol identifier <tt>fido2</tt>.</t>
            <t>The second factor is established and verified locally by the user's FIDO2 authenticator. The resulting device attestation is verified by the server.</t>
            <t>The mechanism relies on two complementary signatures: the JWS signature, which demonstrates possession, and a WebAuthn assertion carried inside data, which demonstrates user verification.</t>
            <t>Every exchange is signed as an <tt>ES256</tt> JWS by the context signing key (CSK). In a platform or smartphone deployment the CSK is the platform's registered signing key and signs the JWS directly. In a roaming FIDO2 deployment the CSK is held by the FIDO2 authenticator, and the JWS signature is produced over the JWS signing input using the WebAuthn sign extension <xref target="WebAuthn-sign"/> (a raw signature over the supplied input). Either way the result is an ordinary ES256 JWS.</t>
            <t>The second factor is demonstrated by a regular WebAuthn assertion whose authenticator data has the user-verification (UV) flag set. The server requests UV; the authenticator prompts for a PIN or biometric and sets the UV flag in the assertion. The assertion is carried inside the <tt>p_data</tt> of a <tt>fido2</tt> request.</t>
            <t>To complete the second-factor check the server <bcp14>MUST</bcp14>:</t>
            <ol spacing="normal" type="1"><li>
                <t>Verify the assertion signature under the CSK registered for the context.</t>
              </li>
              <li>
                <t>Verify that the UV flag is set.</t>
              </li>
            </ol>
            <t>There is no server-side password-verification object for this mechanism; registration enrolls the WebAuthn credential itself.</t>
            <t>The following defined state identifiers are used in the context of this protocol:</t>
            <ul spacing="normal">
              <li>
                <t><tt>challenge</tt> - Establish a challenge for the second factor authentication.</t>
              </li>
              <li>
                <t><tt>finalize</tt> - Provide a WebAuthn signature that proves the second factor.</t>
              </li>
            </ul>
            <t>The <tt>p_data</tt> content for each state is defined per service type below. The session-key exchange used by <tt>create_session</tt> (the ephemeral keys and the session-key derivation) is out of scope of this revision and is defined separately.</t>
            <section anchor="createsession-1">
              <name><tt>create_session</tt></name>
              <t>Protection mode <bcp14>MUST</bcp14> be 1FA.</t>
              <t>FIDO2 authentication requires two round-trips; the first to establish a challenge, the second to create a WebAuthn signature that proves the second factor and to negotiate the <tt>2FA</tt> session.</t>
              <t>The following data is exchanged between the client and server:</t>
              <table>
                <thead>
                  <tr>
                    <th align="left">State</th>
                    <th align="left">Direction</th>
                    <th align="left">p_data content</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">
                      <tt>challenge</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Authentication challenge request as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>challenge</tt></td>
                    <td align="left">Response</td>
                    <td align="left">Authentication challenge response as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Authentication finalize request as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Response</td>
                    <td align="left">Authentication finalize response as JSON object</td>
                  </tr>
                </tbody>
              </table>
              <t>The <tt>challenge</tt> request <tt>p_data</tt> is <tt>null</tt>.</t>
              <t>The <tt>challenge</tt> response <tt>p_data</tt>:</t>
              <sourcecode type="json"><![CDATA[
{
  "challenge": "<base64 challenge, at least 16 bytes>",
  "token": "<opaque server state token>",
  "user_verification": "required"
}
]]></sourcecode>
              <ul spacing="normal">
                <li>
                  <t><tt>challenge</tt>: the WebAuthn challenge to be signed in the assertion.</t>
                </li>
                <li>
                  <t><tt>token</tt>: opaque server state bound to the challenge, echoed by the client in the <tt>finalize</tt> request so the server need not retain challenge state.</t>
                </li>
                <li>
                  <t><tt>user_verification</tt>: the WebAuthn user-verification requirement; <bcp14>MUST</bcp14> be <tt>required</tt>.</t>
                </li>
              </ul>
              <t>The <tt>token</tt> is an authenticated encryption of the server's challenge state under a key known only to the server. The server <bcp14>MUST</bcp14> encrypt at least the <tt>challenge</tt>, the <tt>iat</tt>, the <tt>client_id</tt>, and the <tt>context</tt>, so that the server can, on <tt>finalize</tt>, recover the issued challenge and confirm it was issued to the same client and context. The encryption algorithm is the server's choice and has no interoperability impact, since the token is produced and consumed only by the server; <tt>A256GCM</tt> is <bcp14>RECOMMENDED</bcp14>. The server <bcp14>MUST</bcp14> ensure the token cannot be replayed beyond a single authentication, for example by enforcing the <tt>iat</tt> freshness window and unique IVs.</t>
              <t>The <tt>finalize</tt> request <tt>p_data</tt>:</t>
              <sourcecode type="json"><![CDATA[
{
  "token": "<token from the challenge response>",
  "assertion": {
    "client_epub": "<base64 client ephemeral public key>",
    "credential_id": "<base64 credential id>",
    "authenticator_data": "<base64 authenticatorData>",
    "client_data": "<base64 clientDataJSON>",
    "signature": "<base64 signature>"
  }
}
]]></sourcecode>
              <t>The <tt>finalize</tt> response <tt>p_data</tt>:</t>
              <sourcecode type="json"><![CDATA[
{
  "server_epub": "<base64 server ephemeral public key>"
}
]]></sourcecode>
              <t>Both sides establish the negotiated <tt>2FA</tt> session key as follows:</t>
              <ol spacing="normal" type="1"><li>
                  <t>Compute <tt>ikm = ECDH(own ephemeral private key, peer ephemeral public key)</tt>.</t>
                </li>
                <li>
                  <t>Derive the <tt>2FA</tt> session key <tt>K = HKDF(ikm, salt, info, L)</tt> where <tt>salt</tt> is message <tt>nonce</tt> for the <tt>finalize</tt> round, <tt>info</tt> is the DST concatenated with a transcript-binding hash, and <tt>L</tt> is 32 bytes. The DST <bcp14>MUST</bcp14> be r2ps-2fa_authentication-fido2. The transcript binding hash <bcp14>MUST</bcp14> be <tt>SHA256(2fa_mode || client_epub || server_epub || task || fido2 assertion signature)</tt>.</t>
                </li>
              </ol>
            </section>
            <section anchor="faregistration-1">
              <name><tt>2fa_registration</tt></name>
              <t>Protection mode <bcp14>MUST</bcp14> be 1FA.</t>
              <t>Authorization data <bcp14>MUST</bcp14> be present in the finalize state of the protocol and <bcp14>MAY</bcp14> be present also in the challenge state.</t>
              <t>There is no server-side verification object to register for the <tt>fido2</tt> mechanism. Registration instead enrolls the WebAuthn UV-capable credential and binds it to the <tt>client_id</tt> for that security context. The request carries the result of the WebAuthn credential-creation ceremony (the attestation object and client data); the server validates it according to <xref target="WebAuthn"/> and stores the credential public key. The <tt>authorization</tt> field authorizes the enrollment, as for the other mechanisms.</t>
              <t>The flow is double-round. The client first requests a challenge. It then runs the WebAuthn credential-creation ceremony using the challenge it received in round 1.</t>
              <t>The following data is exchanged between the client and server:</t>
              <table>
                <thead>
                  <tr>
                    <th align="left">State</th>
                    <th align="left">Direction</th>
                    <th align="left">p_data content</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td align="left">
                      <tt>challenge</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Registration challenge request as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>challenge</tt></td>
                    <td align="left">Response</td>
                    <td align="left">Registration challenge response as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Request</td>
                    <td align="left">Registration finalize request as JSON object</td>
                  </tr>
                  <tr>
                    <td align="left">
                      <tt>finalize</tt></td>
                    <td align="left">Response</td>
                    <td align="left">null</td>
                  </tr>
                </tbody>
              </table>
              <t>The <tt>challenge</tt> request <tt>p_data</tt> <bcp14>MAY</bcp14> carry client capabilities or preferences; otherwise it is <tt>null</tt>.</t>
              <t>Note: Consider if this specification should define a structure for client capabilities and preferences.</t>
              <t>The <tt>challenge</tt> response <tt>p_data</tt>:</t>
              <sourcecode type="json"><![CDATA[
{
  "challenge": "<base64 challenge, at least 16 bytes>"
}
]]></sourcecode>
              <t>The <tt>finalize</tt> request <tt>p_data</tt>:</t>
              <sourcecode type="json"><![CDATA[
{
  "credential_id": "<base64 credential id>",
  "attestation_object": "<base64 attestationObject>",
  "client_data": "<base64 clientDataJSON>"
}
]]></sourcecode>
              <t>On receiving the <tt>finalize</tt> request, the server <bcp14>MUST</bcp14> validate the attestation according to <xref target="WebAuthn"/>. Specifically, the server <bcp14>MUST</bcp14>:</t>
              <ol spacing="normal" type="1"><li>
                  <t>Parse <tt>client_data</tt> (the <tt>clientDataJSON</tt>) and verify that its <tt>type</tt> field is exactly <tt>"webauthn.create"</tt>.</t>
                </li>
                <li>
                  <t>Verify that the <tt>challenge</tt> in <tt>client_data</tt> matches the <tt>challenge</tt> issued in the <tt>challenge</tt> response.</t>
                </li>
                <li>
                  <t>Verify that the <tt>origin</tt> in <tt>client_data</tt> matches the Relying Party's expected origin.</t>
                </li>
                <li>
                  <t>Decode <tt>attestation_object</tt> and verify that the <tt>rpIdHash</tt> in the authenticator data is the SHA-256 hash of the Relying Party ID.</t>
                </li>
                <li>
                  <t>Verify that the User Present (UP) flag in the authenticator data is set.</t>
                </li>
                <li>
                  <t>Verify that the User Verified (UV) flag in the authenticator data is set.</t>
                </li>
                <li>
                  <t>Verify the attestation statement's signature using the verification procedure for the attestation format.</t>
                </li>
              </ol>
              <t>On success, the server extracts the credential identifier and credential public key from the attested credential data, and binds the <tt>credential_id</tt> and public key to the <tt>client_id</tt> in that security context. This credential is the one from which UV assertions are required in subsequent <tt>create_session</tt> exchanges.</t>
              <t>On success, the <tt>finalize</tt> response <tt>p_data</tt> is <tt>null</tt>.</t>
            </section>
            <section anchor="faupdate-1">
              <name><tt>2fa_update</tt></name>
              <t>When the FIDO2 Authenticator protocol is used in <tt>2fa_update</tt>, the data exchanged between the client and server is the same as in <tt>2fa_registration</tt>. The only difference is that the exchange is sent in 2FA protection mode, protected by the previous second-factor session key, and therefore does not need to provide any authorization data.</t>
            </section>
          </section>
        </section>
      </section>
    </section>
    <section anchor="hardening-of-knowledge-factors">
      <name>Hardening of knowledge factors</name>
      <section anchor="purpose-and-applicability">
        <name>Purpose and applicability</name>
        <t>A knowledge factor such as a short PIN has a small value space. This section specifies two complementary mechanisms that raise the cost of
testing candidate values:</t>
        <ol spacing="normal" type="1"><li>
            <t>Key stretching, which increases the cost of each guess.</t>
          </li>
          <li>
            <t>A Device-Enhanced Password (DE-PWD) makes each guess depend on a client-held secret.
Neither mechanism increases the entropy of the knowledge factor. DE-PWD makes OPAQUE's password input depend additionally on a client-held high entropy secret.</t>
          </li>
        </ol>
        <t>These mechanisms apply to the server-verified knowledge factor used with the <tt>opaque</tt> protocol.</t>
      </section>
      <section anchor="key-stretching-in-opaque">
        <name>Key stretching in OPAQUE</name>
        <t>OPAQUE applies a key stretching function (KSF) to the OPRF output on the client (Section 10.8 of <xref target="RFC9807"/>). Deployments <bcp14>SHOULD</bcp14> select a memory-hard KSF, with parameters suited to their client platforms, from those supported by their OPAQUE configuration. The KSF and its parameters <bcp14>MUST</bcp14> be identical at registration and authentication.</t>
        <t>Key stretching does not prevent offline dictionary attacks by an attacker who obtains the server's OPRF secrets and credential records (Section 10.11 of <xref target="RFC9807"/>). Deployments that use short PINs <bcp14>SHOULD</bcp14> therefore also use a DE-PWD.</t>
      </section>
      <section anchor="device-enhanced-passwords">
        <name>Device-enhanced passwords</name>
        <t>A device-enhanced password (DE-PWD) is derived on the client from the knowledge factor and a client-held secret. It replaces the knowledge factor as OPAQUE's password input. The client <bcp14>MUST</bcp14> apply the same derivation at registration, at authentication, and when re-registering after a change of knowledge factor.</t>
        <t>A DE-PWD is <bcp14>RECOMMENDED</bcp14> where hardening must remain effective after disclosure of the server's OPRF secrets and credential records. The client <bcp14>MUST NOT</bcp14> transmit the DE-PWD or any secret intermediate value; only the resulting OPAQUE messages are sent. This protection assumes that the attacker cannot obtain the client-held secret or obtain DE-PWD values for arbitrary password guesses through any interface available to the attacker.</t>
        <t>The client-held secret <bcp14>SHOULD</bcp14> be protected by device hardware. The profile below uses the private client context agreement key (CAK). An implementation that uses the CAK both for this derivation and for R2PS key agreement <bcp14>MUST</bcp14> keep the two uses separate and <bcp14>MUST NOT</bcp14> expose raw shared secrets.</t>
        <section anchor="device-enhanced-passwords-using-p-256">
          <name>Device enhanced passwords using P-256</name>
          <t>This derivation applies to contexts whose client CAK is a P-256 key. It combines the hash to curve <tt>P256_XMD:SHA-256_SSWU_RO_</tt> suite (Section 8.2 of <xref target="RFC9380"/>), P-256 scalar multiplication, and HKDF-SHA-256 <xref target="RFC5869"/>.</t>
          <t>The inputs are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>password</tt>: the UTF-8 encoding of the knowledge factor. This derivation performs no normalization, trimming, or case folding.</t>
            </li>
            <li>
              <t><tt>d</tt>: the private scalar of the client's registered P-256 CAK.</t>
            </li>
            <li>
              <t><tt>context</tt>, <tt>client_id</tt>: the UTF-8 encodings of the corresponding R2PS identifiers.</t>
            </li>
          </ul>
          <t><tt>||</tt> denotes byte-string concatenation. <tt>LP(x)</tt> denotes the length of <tt>x</tt> in octets as a 4-octet unsigned big-endian integer, followed by
<tt>x</tt>. Inputs whose length cannot be so encoded <bcp14>MUST</bcp14> be rejected.</t>
          <t>The client computes <tt>de_pwd</tt> as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>P = hash_to_curve(password)</tt>, using the suite above with either the suite's default DST or an application specific one, encoded as ASCII without a terminating zero octet.</t>
            </li>
            <li>
              <t><tt>Q = d * P</tt>. If <tt>P</tt> or <tt>Q</tt> is the point at infinity, the derivation <bcp14>MUST</bcp14> fail.</t>
            </li>
            <li>
              <t><tt>ikm</tt> is the affine x-coordinate of <tt>Q</tt>, encoded as a 32-octet unsigned big-endian integer, including leading zero octets. This is the raw ECDH shared secret.</t>
            </li>
            <li>
              <t><tt>prk = HKDF-Extract(salt, ikm)</tt>, using SHA-256 and a <tt>salt</tt> of 32 zero octets.</t>
            </li>
            <li>
              <t><tt>de_pwd = HKDF-Expand(prk, info, 32)</tt>, where <tt>info = LP(context) || LP(client_id)</tt>.</t>
            </li>
          </ol>
          <t>The 32-octet <tt>de_pwd</tt> <bcp14>MUST</bcp14> be used directly as OPAQUE's password input. OPAQUE's KSF is applied at its normal position in the protocol.</t>
          <t>The derivation and its inputs <bcp14>MUST</bcp14> be fixed for the registered credential. Use of this derivation is part of the context configuration.</t>
        </section>
      </section>
    </section>
    <section anchor="compliance-rats">
      <name>Compliance tokens and RATS</name>
      <t>The <tt>compliance_token</tt>, <tt>compliance_proof</tt>, and <tt>compliance_token_type</tt> request members let a client show that it meets a server's compliance policy, such as device integrity, operating-system or application version and integrity, or key protection. This follows the passport model of the Remote ATtestation procedureS (RATS) architecture <xref target="RFC9334"/>: a Verifier tests the client and issues the token, and the R2PS server, as Relying Party, appraises it against its own policy. The Entity Attestation Token (EAT) <xref target="RFC9711"/> is one common token format; others can be used equally well. What the Verifier tests, and how the server comes to trust it, are out of scope.</t>
      <t>A token is obtained once and presented on many requests; its validity alone does not show that the party presenting it now is the one it describes. The token can therefore be bound to the presenter, in several ways:</t>
      <ul spacing="normal">
        <li>
          <t>Bound to a key, typically a device key. An EAT, for example, may be key-bound through a confirmation (<tt>cnf</tt>) claim <xref target="RFC7800"/> <xref target="RFC8747"/>. When a token is key-bound in this way, the client can provide proof of possession of that key in <tt>compliance_proof</tt>. Such proof-of-possession data can be a signature, produced with the bound key, over data unique to the request, such as the request <tt>nonce</tt>.</t>
        </li>
        <li>
          <t>Bound to an identity that the request itself verifies. Because every request is signed and thereby proves the client's identity, a reusable token bound to that identity needs no separate proof; the request's own signature binds it to the presenter.</t>
        </li>
      </ul>
      <t>This specification mandates no particular token, binding, or proof. The <tt>compliance_token_type</tt> identifies the profile in use, agreed between the parties.</t>
    </section>
    <section anchor="definition-of-service-types">
      <name>Definition of service types</name>
      <t>This document defines only the basic service types needed to establish two-factor protected sessions and to register and update the user's second factor (a knowledge or biometric factor): <tt>create_session</tt>, <tt>2fa_registration</tt>, and <tt>2fa_update</tt>.</t>
      <t>Other service data exchanges -- for example server-side HSM key generation, signing with a server-side HSM key, and similar operations -- require new service types, each with its own data structure and protection mode, agreed between the client and the server. Other documents may define new service types for use with this protocol.</t>
      <t>The identifiers used for service types need only be unambiguous within the client and server agreement in which they are used; ensuring this is the responsibility of the agreeing parties.</t>
      <t>NOTE: A registry for service type identifiers is requested from IANA in <xref target="iana"/>, giving a common place to register service types intended for use across deployments.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security of R2PS rests on the context keys held by the client and the server. This document does not define how a client is bootstrapped or how the parties come to hold each other's trusted public keys; that exchange, and the ongoing storage of the keys, <bcp14>MUST</bcp14> be done in a secure and trustworthy manner, because every guarantee this protocol provides follows from it. Disclosure or misuse of a client's private context keys undermines all of the protection the parties rely on.</t>
      <t>A low-entropy knowledge factor, such as a short PIN, increases the chance of success for exhaustive guessing and raises the protection required for server-side secrets. When low-entropy knowledge factors are used, implementers <bcp14>SHOULD</bcp14> consider the strategies described in the "Hardening of knowledge factors" section.</t>
      <t>Using the same knowledge factor in more than one security context is dangerous when those contexts protect it to different degrees. An adversary who obtains the factor where it is least protected could reuse it in a more security-critical context. This risk is heightened if the adversary has gained possession of the user's device before the factor can be revoked.</t>
      <t>The client device <bcp14>MUST NOT</bcp14> store the user's knowledge factor and <bcp14>MUST NOT</bcp14> use a stored knowledge factor in any protocol exchange. A stored knowledge factor is in effect a possession factor; relying on it reduces the user's authentication to a single factor and defeats the purpose of two-factor protection.</t>
      <t>Accepting clients that do not meet minimum policy requirements can compromise a client and the keys it holds. Where a deployment's security policy requires it, a server is <bcp14>RECOMMENDED</bcp14> to require a compliance token (<xref target="compliance-rats"/>) demonstrating that the client meets minimum security requirements for its operating system, key store, and critical applications before relying on the client. Some obligations this protocol places on the client cannot be observed from the protocol exchange itself, such as never storing the knowledge factor and generating a fresh IV for every encrypted message; a compliance token is one means by which a server can gain assurance that the client meets them.</t>
      <t>Because the JWE is the outer object, a server performs decryption work before it can authenticate the inner signature, so unauthenticated requests can be used to consume server resources. A deployment of this protocol should consider applying suitable measures to mitigate the risk of denial-of-service attacks.</t>
      <t>Each service type requires a specific protection mode, signalled in the JWE header. A server needs to confirm that a request's protection mode matches the mode its service type requires and reject it otherwise; without this check, an operation that requires two-factor protection could be accepted under one-factor protection.</t>
      <t>In 2FA mode the session key is used directly as the content-encryption key for every message, in both directions, so a fresh, non-repeating per-message IV is essential. Because GCM is counter-based, reusing an IV under the session key repeats the keystream. Repeating IV values therefore undermines the protection properties of the encryption layer of the protocol. The sender <bcp14>MUST</bcp14> generate a new random 96-bit IV for every encrypted message to get the full confidentiality protection offered by the protocol.</t>
      <t>The security considerations of the cryptographic building blocks used by this protocol apply: JSON Web Signature <xref target="RFC7515"/>, JSON Web Encryption <xref target="RFC7516"/>, and the JOSE algorithms <xref target="RFC7518"/>; HKDF <xref target="RFC5869"/> where a profile derives a session key; OPAQUE <xref target="RFC9807"/> for the <tt>opaque</tt> mechanism; WebAuthn for the <tt>fido2</tt> mechanism; and the RATS architecture <xref target="RFC9334"/> and the Entity Attestation Token <xref target="RFC9711"/> for compliance tokens.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="r2ps-service-types-registry">
        <name>R2PS Service Types registry</name>
        <t>IANA is requested to create a new registry group "Remote Two-Factor Protected Services (R2PS)" containing the "R2PS Service Types" registry.</t>
        <t>The registration policy for this registry is Specification Required <xref target="RFC8126"/>. Each entry has the following fields:</t>
        <ul spacing="normal">
          <li>
            <t>Service Type: the identifier string carried in the <tt>type</tt> member of a request.</t>
          </li>
          <li>
            <t>Description: a short description of the service type.</t>
          </li>
          <li>
            <t>Reference: the specification that defines the service type.</t>
          </li>
        </ul>
        <t>The initial contents of the registry are:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Service Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>create_session</tt></td>
              <td align="left">Authenticate the user's two factors and create a session</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">
                <tt>2fa_registration</tt></td>
              <td align="left">Register the user's second factor</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">
                <tt>2fa_update</tt></td>
              <td align="left">Update the user's second factor</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>When reviewing a registration request, the Designated Expert verifies that a permanent and publicly available specification defines the service type, including its identifier, the request and response data it carries, and the protection mode it requires, and that the requested identifier is unambiguous and not already registered.</t>
      </section>
      <section anchor="media-type-registrations">
        <name>Media Type registrations</name>
        <t>IANA is requested to register the following media types in the "Media Types" registry <xref target="RFC6838"/>. These correspond to the JWS and JWE <tt>typ</tt> header parameter values defined in this document; as noted in <xref target="RFC7515"/>, the <tt>application/</tt> prefix is omitted when such a value is carried in a <tt>typ</tt> header.</t>
        <t>The four media types share the following registration template, differing only in the Subtype name and the description under "Applications that use this media type":</t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: binary; the value is a JWS or JWE object in compact serialization <xref target="RFC7515"/> <xref target="RFC7516"/>.</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="security-considerations"/> of this document, as well as <xref target="RFC7515"/> and <xref target="RFC7516"/>.</t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: This document.</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information: Deprecated alias names: N/A; Magic number(s): N/A; File extension(s): N/A; Macintosh file type code(s): N/A</t>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: The authors of this document.</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: N/A</t>
          </li>
          <li>
            <t>Author: The authors of this document.</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
        </ul>
        <t>The Subtype names and descriptions are:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Subtype name</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>r2ps-request+jws</tt></td>
              <td align="left">An R2PS inner JWS carrying a service request.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>r2ps-response+jws</tt></td>
              <td align="left">An R2PS inner JWS carrying a service response.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>r2ps-1fa</tt></td>
              <td align="left">An R2PS outer JWE in <tt>1FA</tt> protection mode.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>r2ps-2fa</tt></td>
              <td align="left">An R2PS outer JWE in <tt>2FA</tt> protection mode.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</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 Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7516">
          <front>
            <title>JSON Web Encryption (JWE)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Hildebrand" initials="J." surname="Hildebrand"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Encryption (JWE) represents encrypted content using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries defined by that specification. Related digital signature and Message Authentication Code (MAC) capabilities are described in the separate JSON Web Signature (JWS) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7516"/>
          <seriesInfo name="DOI" value="10.17487/RFC7516"/>
        </reference>
        <reference anchor="RFC7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
        <reference anchor="RFC7638">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="RFC9807">
          <front>
            <title>The OPAQUE Augmented Password-Authenticated Key Exchange (aPAKE) Protocol</title>
            <author fullname="D. Bourdrez" initials="D." surname="Bourdrez"/>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="K. Lewi" initials="K." surname="Lewi"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2025"/>
            <abstract>
              <t>This document describes the OPAQUE protocol, an Augmented (or Asymmetric) Password-Authenticated Key Exchange (aPAKE) protocol that supports mutual authentication in a client-server setting without reliance on PKI and with security against pre-computation attacks upon server compromise. In addition, the protocol provides forward secrecy and the ability to hide the password from the server, even during password registration. This document specifies the core OPAQUE protocol and one instantiation based on 3DH. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9807"/>
          <seriesInfo name="DOI" value="10.17487/RFC9807"/>
        </reference>
        <reference anchor="RFC9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="S. Dalal" initials="S." surname="Dalal"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
              <t>This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="WebAuthn" target="https://www.w3.org/TR/webauthn-3/">
          <front>
            <title>Web Authentication: An API for Accessing Public Key Credentials Level 3</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-sign" target="https://yubicolabs.github.io/webauthn-sign-extension/4/">
          <front>
            <title>Web Authentication sign extension: Signing arbitrary data using the Web Authentication API (Work in Progress)</title>
            <author>
              <organization>YubicoLabs</organization>
            </author>
            <date year="2025"/>
          </front>
        </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="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7800">
          <front>
            <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7800"/>
          <seriesInfo name="DOI" value="10.17487/RFC7800"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8747">
          <front>
            <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8747"/>
          <seriesInfo name="DOI" value="10.17487/RFC8747"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="CEM" target="https://www.commoncriteriaportal.org/">
          <front>
            <title>Common Methodology for Information Technology Security Evaluation (CEM:2022), Revision 1</title>
            <author>
              <organization>Common Criteria</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="EU-910-2014" target="http://data.europa.eu/eli/reg/2014/910/oj">
          <front>
            <title>Regulation (EU) No 910/2014 on electronic identification and trust services for electronic transactions in the internal market and repealing Directive 1999/93/EC</title>
            <author>
              <organization>European Parliament and Council</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="EU-2015-1502" target="http://data.europa.eu/eli/reg_impl/2015/1502/oj">
          <front>
            <title>Commission Implementing Regulation (EU) 2015/1502 on setting out minimum technical specifications and procedures for assurance levels for electronic identification means pursuant to Article 8(3) of Regulation (EU) No 910/2014 of the European Parliament and of the Council on electronic identification and trust services for electronic transactions in the internal market</title>
            <author>
              <organization>European Commission</organization>
            </author>
            <date year="2015"/>
          </front>
        </reference>
        <reference anchor="EU-2024-1183" target="http://data.europa.eu/eli/reg/2024/1183/oj">
          <front>
            <title>Regulation (EU) 2024/1183 amending Regulation (EU) No 910/2014 as regards establishing the European Digital Identity Framework</title>
            <author>
              <organization>European Parliament and Council</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="EU-2024-2979" target="http://data.europa.eu/eli/reg_impl/2024/2979/oj">
          <front>
            <title>Commission Implementing Regulation (EU) 2024/2979 laying down rules for the application of Regulation (EU) No 910/2014 as regards the integrity and core functionalities of European Digital Identity Wallets</title>
            <author>
              <organization>European Commission</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 824?>

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

-->

</rfc>
