<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ritz-idpop-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="IDPoP">Interactive DPoP</title>
    <seriesInfo name="Internet-Draft" value="draft-ritz-idpop-00"/>
    <author fullname="Nathanael Ritz">
      <organization>Independent</organization>
      <address>
        <email>ietf@nritz.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="01"/>
    <keyword>OAuth</keyword>
    <keyword>DPoP</keyword>
    <keyword>RATS</keyword>
    <keyword>HPKE</keyword>
    <abstract>
      <?line 37?>

<t>This document describes IDPoP, an extension to DPoP <xref target="RFC9449"/> that uses a key derivation scheme to separate access control from identity. It mitigates credential exfiltration risks by requiring fresh hardware attestation to unseal identity keys via an interactive challenge.</t>
    </abstract>
  </front>
  <middle>
    <?line 41?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Standard DPoP binds tokens to keys but recent events have increased risks to exfiltration attacks where autonomous systems (such as agentic AI) leak valid credentials via prompt injection. Likewise, when malware compromises a device filesystem, attackers steal credentials and impersonate users until explicit revocation.</t>
      <t>This proposal introduces a derivation scheme separating <strong>access control</strong> (encapsulate/decapsulate) from <strong>identity</strong> (signing).</t>
    </section>
    <section anchor="three-factor-interface-model">
      <name>Three-Factor Interface Model</name>
      <t><strong>Factors:</strong></t>
      <ul spacing="normal">
        <li>
          <t><strong>PF (Provisioning Factor):</strong> Represents authorization intent (<tt>client_id</tt> + scope + audience).</t>
        </li>
        <li>
          <t><strong>EF (Evidence Factor):</strong> Confidential attestation proof (TPM quote, YubiKey HMAC-secret, biometric), never transmitted.</t>
        </li>
        <li>
          <t><strong>VF (Vault Factor):</strong> High-entropy secret, encapsulated by Evidence derived key.</t>
        </li>
      </ul>
      <t><strong>Two-Stage Derivation:</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>Access gating: <tt>K_kem = HKDF(salt=PF, ikm=EF, info="seal")</tt></t>
        </li>
        <li>
          <t>Identity derivation: <tt>K_attest = HKDF(salt=PF, ikm=VF, info="dpop")</tt></t>
        </li>
      </ol>
      <artwork><![CDATA[
        .-------------------.
        | AS-A (Verifier)   | 2. AS-A (RATS Verifier)
        | RATS Notary as    |    Appraises Evidence
        | OAuth AS          |    Derive K_kem, K_dpop
        '----+----+---------'    Seal id seed → VF_sealed
             ^    |
1. Evidence  |    | 3. Attestation Result (AR)
   conveyed  |    |    as JWT OAuth grant with:
   (as commitment)|    - requested_cnf {jkt, K_kem_pub}
             |    |    - VF_sealed
             |    v
        .----+--------.              .-------------------.
        |             |------------->|   AS-B (OAuth)    |
        |   Client    | 4. Present   |   Token Issuer    |
        | (Attester)  |    AR grant  '---+------+--------'
        |             |<-|               |      ^
        '------+------.  +---------------+      |
               |                     5. Validate AR
               | 6. Present token       Issue access token
               |    + DPoP proof                |
               |    (signed with K_dpop_priv)   |
               v                                |
        .------+-------.              7. Validate token cnf
        |  RS-B        +------------>    DPoP signature
        | (Resource    |                 with K_dpop_pub
        |  Server)     |
        '--------------'
]]></artwork>
      <t>Figure 1: OAuth Identity Chaining Flow with RATS Verifier as AS-A and "IDPoP"-aware OAuth AS-B as delegated notary</t>
      <t><em>NOTE: K_kem controls access to VF (identity key seed material). K_attest <strong>is</strong> the identity. Compromise of the identity key alone is insufficient—attacker needs to demonstrate access to notorized Evidence (EF) to derive K_kem and unseal.</em></t>
    </section>
    <section anchor="algorithms">
      <name>Algorithms</name>
      <section anchor="algorithm-1-derivekem-client">
        <name>Algorithm 1: DeriveKEM (Client)</name>
        <artwork><![CDATA[
Input:  PF, EF
Output: (K_kem_priv, K_kem_pub)

K_kem_priv = HKDF(salt=PF, ikm=EF, info="seal")
K_kem_pub  = X25519.Public(K_kem_priv)
]]></artwork>
        <section anchor="algorithm-2-encapsulatesecret-as-a">
          <name>Algorithm 2: EncapsulateSecret (AS-A)</name>
          <artwork><![CDATA[
Input:  PF, K_kem_pub (from client attestation)
Output: (VF_sealed, K_dpop_pub)

VF = Random(32)
VF_sealed = HPKE.Seal(recipient_pk=K_kem_pub, info=PF, plaintext=VF)

K_dpop_priv = HKDF(salt=PF, ikm=VF, info="dpop")
K_dpop_pub  = Ed25519.Public(K_dpop_priv)
]]></artwork>
        </section>
        <section anchor="algorithm-3-deriveidentity-client">
          <name>Algorithm 3: DeriveIdentity (Client)</name>
          <artwork><![CDATA[
Input:  PF, K_kem_priv, VF_sealed
Output: K_dpop_priv

VF = HPKE.Unseal(recipient_sk=K_kem_priv, info=PF, ciphertext=VF_sealed)
K_dpop_priv = HKDF(salt=PF, ikm=VF, info="dpop")
]]></artwork>
          <t><strong>Convergence:</strong> Client derives K_dpop_priv from (PF, VF) only after unsealing the encapsulated VF secret.</t>
        </section>
      </section>
    </section>
    <section anchor="oauth-identity-chaining-flow">
      <name>OAuth Identity Chaining Flow</name>
      <t><strong>Setup (Client → AS-A):</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>Client generates attestation evidence (EF)</t>
        </li>
        <li>
          <t>Client: <tt>K_kem_priv = DeriveKEM(PF, EF)</tt></t>
        </li>
        <li>
          <t>Client sends attestation to AS-A with <tt>K_kem_pub</tt></t>
        </li>
      </ol>
      <t><strong>Notarization (RATS Verifier as AS-A):</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>AS-A Appraises attestation Evidence</t>
        </li>
        <li>
          <t>AS-A: <tt>(VF_sealed, K_dpop_pub) = EncapsulateSeed(PF, K_kem_pub)</tt></t>
        </li>
        <li>
          <t>AS-A creates JWT grant to AS-B:</t>
        </li>
      </ol>
      <sourcecode type="json"><![CDATA[
   {
     "iss": "https://as-a.example",
     "sub": "client_id",
     "aud": "https://as-b.example",
     "iat": 1706745600,
     "exp": 1706745660,
     "jti": "grant-7f3a9c",
     "requested_cnf": {
       "jkt": "0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I",
       "K_kem_pub": {
         "kty": "OKP",
         "crv": "X25519",
         "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs"
       }
     }
   }
]]></sourcecode>
      <t><strong>Token Issuance (AS-B):</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>AS-B validates grant, issues DPoP-bound access token:</t>
        </li>
      </ol>
      <sourcecode type="json"><![CDATA[
   {
     "access_token": "eyJ...(JWT with cnf.jkt inside)...",
     "token_type": "DPoP",
     "expires_in": 3600
   }
]]></sourcecode>
      <t>The access token JWT contains:</t>
      <sourcecode type="json"><![CDATA[
   {
     "iss": "https://as-b.example",
     "sub": "client_id",
     "aud": "https://rs-b.example",
     "iat": 1706745600,
     "exp": 1706749200,
     "cnf": {
       "jkt": "0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I", // Validates the DPoP signature (Standard)
       "K_kem_pub": { // Enables the Liveness Challenge (IDPoP Extension)
         "kty": "OKP",
         "crv": "X25519",
         "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs"
       }
     }
   }
]]></sourcecode>
    </section>
    <section anchor="interactive-challenge-proofs">
      <name>Interactive Challenge &amp; Proofs</name>
      <t><strong>Interactive Challenge (AS-B → Client):</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>Client sends request with DPoP proof (no nonce or cached nonce)</t>
        </li>
        <li>
          <t>AS-B decides: "I need hardware liveness proof"</t>
        </li>
        <li>
          <t>AS-B → 401 Unauthorized</t>
        </li>
      </ol>
      <artwork><![CDATA[
    WWW-Authenticate: DPoP error="use_dpop_nonce"
    DPoP-Nonce: <Base64Url(HPKE.AuthSeal(nonce, K_kem_pub, AS_B_privkey))>
]]></artwork>
      <t><strong>Client Proof:</strong></t>
      <ol spacing="normal" type="1"><li>
          <t><tt>VF = HPKE.Unseal(K_kem_priv, VF_sealed)</tt> [proves fresh EF]</t>
        </li>
        <li>
          <t>Client extracts sealed nonce from header</t>
        </li>
        <li>
          <t>Client: nonce = HPKE.AuthUnseal(nonce_sealed, K_kem_priv, AS_B_pubkey)</t>
        </li>
        <li>
          <t>Client: <tt>K_dpop_priv = HKDF(PF, VF, "dpop")</tt></t>
        </li>
        <li>
          <t>Client creates new DPoP proof with unsealed nonce and retries:</t>
        </li>
      </ol>
      <sourcecode type="json"><![CDATA[
    {
      "typ": "idpop+jwt", // Proposed new type
      "alg": "EdDSA",
      "jwk": { // The Public Identity Key (K_dpop)
        "kty": "OKP",
        "crv": "Ed25519",
        "x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
      }
    }
    {
      "jti": "e1j3V_bKic8-LAEB",
      "htm": "POST",
      "htu": "https://rs-b.example/api",
      "iat": 1706745600,
      "ath": "fUHyO2r2Z3DZ53EsNrWBb0xWXoaNy59IiKCAqksmQEo",
      "nonce": "kH8Ws3xYnE2f7d9pQ1vR5jL4mT6oU0aC8bN3gZ7yXsA"
    }
]]></sourcecode>
      <t><strong>Verification (AS-B or RS-B):</strong></t>
      <ol spacing="normal" type="1"><li>
          <t>Verify DPoP signature with K_dpop_pub (from token's <tt>cnf.jkt</tt>)</t>
        </li>
        <li>
          <t>Verify <tt>proof.nonce == SHA256(expected_nonce)</tt></t>
        </li>
        <li>
          <t>Accept request</t>
        </li>
      </ol>
      <t><em>Note: The interactive challenge (Steps 8-10) introduces a round-trip. To mitigate latency, this challenge MAY be performed once per session or upon detecting high-risk context. The resulting <tt>nonce</tt> acts as a session binding signal for subsequent DPoP proofs, reducing overhead for high-frequency API calls.</em></t>
    </section>
    <section anchor="security-properties">
      <name>Security Properties</name>
      <ol spacing="normal" type="1"><li>
          <t><strong>No durable secrets at AS-A.</strong> Post-issuance compromise of AS-A yields no client key material. RATS Verifier (AS-A) computes <tt>K_dpop_priv</tt> transiently, extracts <tt>K_dpop_pub</tt>, discards both <tt>K_dpop_priv</tt> and secret seed material (<tt>VF</tt>).</t>
        </li>
        <li>
          <t><strong>Sealed grant confidentiality.</strong> Interception without <tt>K_kem_priv</tt> yields nothing. <tt>VF_sealed</tt> is HPKE-encrypted to <tt>K_kem_pub</tt>.</t>
        </li>
        <li>
          <t><strong>Attestation-bound unsealing.</strong> Stolen <tt>VF_sealed</tt> without device access is unusable. <tt>K_kem_priv = HKDF(PF, EF)</tt>. Unsealing <tt>VF</tt> requires fresh hardware attestation.</t>
        </li>
        <li>
          <t><strong>Key separation.</strong> <tt>K_kem</tt> controls access. <tt>K_dpop</tt> asserts identity. Compromise of signing key doesn't grant unsealing; compromise of unsealing requires live <tt>EF</tt>.</t>
        </li>
        <li>
          <t><strong>Convergent derivation.</strong> No key transport. Client derives <tt>K_dpop</tt> from (PF, VF) independently.</t>
        </li>
      </ol>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authorization-server-as-root-of-trust">
        <name>Authorization Server as Root of Trust</name>
        <t>The architecture described in this document leverages the Authorization Server (AS-A in the RATS flow, or the OAuth AS) as a Trusted Third Party (TTP). This aligns with the standard OAuth 2.0 threat model <xref target="RFC6819"/>, where the AS is already trusted to generate access tokens, sign ID tokens, and manage client credentials.</t>
        <t>While IDPoP introduces the generation and sealing of the Identity Key seed (VF) by the AS, this does not introduce a new root of trust. An AS capable of issuing a valid <tt>access_token</tt> can already impersonate the user to the Resource Server. Therefore, entrusting the AS with the transient generation of the VF seed is consistent with its existing role. The security goal of IDPoP is not to protect the client <em>from</em> the AS, but to protect the client's credentials from exfiltration <em>after</em> issuance.</t>
      </section>
      <section anchor="encapsulated-secret-transport">
        <name>Encapsulated Secret Transport</name>
        <t>This specification utilizes a Key Transport pattern where the Identity Key material (VF) is generated by the server and transmitted to the client in an HPKE-sealed envelope (VF_sealed). While Key Transport is sometimes disfavored in comparison to Key Agreement, it is necessary here to bind the identity to the specific hardware attestation presented by the client.</t>
        <t>The security of this transport relies on <strong>Hardware Binding</strong>: The VF is sealed to <tt>K_kem_pub</tt>, which is derived from the client's hardware-bound Evidence Factor (EF). Even if <tt>VF_sealed</tt> is intercepted, it remains "inert" (unusable) without the corresponding hardware-bound private key <tt>K_kem_priv</tt>.</t>
      </section>
      <section anchor="harvest-now-decrypt-later-and-forward-secrecy">
        <name>"Harvest Now, Decrypt Later" and Forward Secrecy</name>
        <t>A prominent concern with any encrypted transport of secrets is the "Harvest Now, Decrypt Later" (HNDL) strategy, where an adversary records encrypted traffic today to decrypt it in the future once quantum computing breaks current asymmetric primitives (e.g., X25519).</t>
        <t>In the context of IDPoP, the impact of HNDL is significantly mitigated by the <strong>ephemeral nature of the Identity Key</strong>:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Short-Lived Credential Utility:</strong> The VF seed is used solely to derive the DPoP signing key (<tt>K_dpop</tt>). This key is only useful for signing DPoP proofs for the validity period of the associated access token (defined by <tt>exp</tt>).</t>
          </li>
          <li>
            <t><strong>Obsolescence upon Decryption:</strong> If an adversary successfully breaks the KEM algorithm years in the future and recovers a historical <tt>VF</tt>, the associated access token will have long since expired. Unlike confidentiality keys used to encrypt persistent data (where future decryption is catastrophic), recovering an authentication key after the session window has closed yields no advantage, provided the AS enforces standard expiration (<tt>exp</tt>) and replay protection (<tt>jti</tt>).</t>
          </li>
        </ul>
        <section anchor="post-quantum-agility">
          <name>Post-Quantum Agility</name>
          <t>To further mitigate HNDL risks and ensure long-term resistance, implementations SHOULD support cryptographic agility in the HPKE configuration.</t>
          <ul spacing="normal">
            <li>
              <t><strong>Hybrid KEMs:</strong> Implementations can adopt hybrid KEMs such as <strong>X-Wing</strong> (combining X25519 and ML-KEM-768) to provide post-quantum resistance while maintaining classical security guarantees.</t>
            </li>
            <li>
              <t><strong>Algorithm Negotiation:</strong> The <tt>alg</tt> parameter in the attestation request or metadata allows the client and AS to negotiate Quantum-Resistant KEMs (e.g., ML-KEM) as they become standardized, ensuring the VF_sealed remains secure against future quantum cryptanalysis.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="dpop-proof-replay-and-pre-computation">
        <name>DPoP Proof Replay and Pre-Computation</name>
        <t>To prevent an attacker with temporary access to the signing key (or the ability to predict nonces) from pre-computing proofs, this specification mandates the use of HPKE-sealed nonces.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Liveness Requirement:</strong> By sealing the nonce to the client's <tt>K_kem_pub</tt>, the AS ensures that only a client with active access to the hardware-bound <tt>K_kem_priv</tt> can recover the nonce and sign the proof.</t>
          </li>
          <li>
            <t><strong>Mitigation of Malware:</strong> Malware capable of stealing a cached <tt>K_dpop</tt> from memory cannot pre-generate valid proofs for future requests because it cannot decrypt the future nonces without invoking the hardware anchor.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9180">
        <front>
          <title>Hybrid Public Key Encryption</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
          <author fullname="B. Lipp" initials="B." surname="Lipp"/>
          <author fullname="C. Wood" initials="C." surname="Wood"/>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
            <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9180"/>
        <seriesInfo name="DOI" value="10.17487/RFC9180"/>
      </reference>
      <reference anchor="RFC9449">
        <front>
          <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
          <author fullname="D. Fett" initials="D." surname="Fett"/>
          <author fullname="B. Campbell" initials="B." surname="Campbell"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="D. Waite" initials="D." surname="Waite"/>
          <date month="September" year="2023"/>
          <abstract>
            <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9449"/>
        <seriesInfo name="DOI" value="10.17487/RFC9449"/>
      </reference>
      <reference anchor="RFC6819">
        <front>
          <title>OAuth 2.0 Threat Model and Security Considerations</title>
          <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt"/>
          <author fullname="M. McGloin" initials="M." surname="McGloin"/>
          <author fullname="P. Hunt" initials="P." surname="Hunt"/>
          <date month="January" year="2013"/>
          <abstract>
            <t>This document gives additional security considerations for OAuth, beyond those in the OAuth 2.0 specification, based on a comprehensive threat model for the OAuth 2.0 protocol. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6819"/>
        <seriesInfo name="DOI" value="10.17487/RFC6819"/>
      </reference>
      <reference anchor="I-D.ietf-oauth-identity-chaining">
        <front>
          <title>OAuth Identity and Authorization Chaining Across Domains</title>
          <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
            <organization>SPIRL</organization>
          </author>
          <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
            <organization>SPIRL</organization>
          </author>
          <author fullname="Kelley Burgin" initials="K." surname="Burgin">
            <organization>MITRE</organization>
          </author>
          <author fullname="Michael J. Jenkins" initials="M. J." surname="Jenkins">
            <organization>NSA-CCSS</organization>
          </author>
          <author fullname="Brian Campbell" initials="B." surname="Campbell">
            <organization>Ping Identity</organization>
          </author>
          <date day="12" month="September" year="2025"/>
          <abstract>
            <t>   This specification defines a mechanism to preserve identity and
   authorization information across trust domains that use the OAuth 2.0
   Framework.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the Web Authorization
   Protocol Working Group mailing list (oauth@ietf.org), which is
   archived at https://mailarchive.ietf.org/arch/browse/oauth/.

   Source for this draft and an issue tracker can be found at
   https://github.com/oauth-wg/oauth-identity-chaining.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-chaining-06"/>
      </reference>
    </references>
    <?line 298?>

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

-->

</rfc>
