<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-geng-acme-public-key-07" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="ACME PK Challenge">Automated Certificate Management Environment (ACME) Extension for Public Key Challenges</title>
    <seriesInfo name="Internet-Draft" value="draft-geng-acme-public-key-07"/>
    <author initials="F." surname="Geng" fullname="Feng Geng">
      <organization>Huawei Technologies</organization>
      <address>
        <email>gengfeng@huawei.com</email>
      </address>
    </author>
    <author initials="P." surname="Wu" fullname="Panyu Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>wupanyu3@huawei.com</email>
      </address>
    </author>
    <author initials="L." surname="Xia" fullname="Liang Xia">
      <organization>Huawei Technologies</organization>
      <address>
        <email>frank.xialiang@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Chen" fullname="Xin Chen">
      <organization>TrustAsia</organization>
      <address>
        <email>palos.chen@trustasia.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="14"/>
    <workgroup>Automated Certificate Management Environment Working Group</workgroup>
    <keyword/>
    <keyword/>
    <keyword/>
    <abstract>
      <?line 87?>

<t>The Automatic Certificate Management Environment (ACME) <xref target="RFC8555"/> requires a PKCS#10 Certificate Signing Request (CSR) at the finalization stage. This document defines a new ACME challenge type, "pk-01", that allows a client to prove possession of a private key directly, without constructing a CSR. The primary motivation is to support key types that cannot generate CSR self-signatures, notably post-quantum Key Encapsulation Mechanism (KEM) keys. The client declares the public key via a <tt>popKey</tt> field in the "newOrder" request; the server attaches the "pk-01" challenge to existing identifier authorizations. When all required authorizations are satisfied, the ACME server issues a certificate using the validated public key and the authorized identifiers, eliminating the need for a CSR in the finalization stage.</t>
    </abstract>
  </front>
  <middle>
    <?line 91?>

<section anchor="intro">
      <name>Introduction</name>
      <section anchor="background-and-motivation">
        <name>Background and Motivation</name>
        <t>In the current ACME flow, the applicant submits a PKCS#10 <xref target="RFC2986"/> CSR at the finalization stage. The CSR carries both the certificate public key and a self-signature over the CSR contents; the former is used for certificate issuance, while the latter serves as a proof of possession for the public key. Actually, it merely indicates that someone wanted to associate this key with these domain names at a certain time, the signature in CSR is not proof of key possession.</t>
        <t>This extension enables CSR-less certificate issuance. It is important to be precise about the motivations:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Primary motivation: KEM-only keys.</strong> Key-encapsulation mechanisms (such as ML-KEM <xref target="FIPS-203"/>) cannot produce digital signatures. This is a hard cryptographic constraint, not a mere inconvenience. Protocols that use KEM public keys for authentication or encryption (e.g., KEMTLS) require a certificate issuance path that does not assume signature-capable keys. Without a mechanism like "pk-01", automated certificate management for these key types is impossible.</t>
          </li>
          <li>
            <t><strong>Secondary motivation: eliminating client-side ASN.1/DER encoding.</strong> Constructing a valid PKCS#10 CSR requires an ASN.1/DER encoding toolchain. For resource-constrained devices, this adds code complexity. However, many devices that can perform TLS handshakes and JWS signatures already have suﬃcient resources for CSR generation. The elimination of CSR is therefore a convenience, not a necessity, for most deployments.</t>
          </li>
        </ul>
        <t>This document does not claim that CSR is fundamentally broken or that the PKCS#10 format is inherently problematic. The CSR self-signature mechanism has served the Internet well for decades. The "pk-01" challenge exists primarily because post-quantum cryptography introduces key types that are incompatible with that mechanism.</t>
        <section anchor="use-cases-and-deployment-scenarios-informative">
          <name>Use Cases and Deployment Scenarios (Informative)</name>
          <t>The design described in this document is motivated by concrete deployment scenarios. The value of Proof-of-Possession (PoP) varies significantly across these scenarios, and implementers should understand which benefits apply to their use cases.</t>
          <ul spacing="normal">
            <li>
              <t><strong>KEM-Only Public Keys (Post-Quantum and Beyond).</strong> This is the primary use case. Without "pk-01", automated certificate management for KEM keys is impossible. The security value of PoP here is absolute: it is the only way to prove possession.</t>
            </li>
            <li>
              <t><strong>Resource-Constrained Devices (IoT).</strong> Microcontrollers and deeply embedded systems benefit from the elimination of ASN.1/DER encoding. For these devices, "pk-01" reduces code complexity. However, the security value of PoP in this scenario is identical to that of CSR-based PoP, only the implementation cost diﬀers.</t>
            </li>
            <li>
              <t><strong>Composition of Identity and Key Attestation.</strong> In environments where a CA must validate both device identity (e.g., via hardware attestation) and private key possession, "pk-01" allows these two orthogonal assertions to be verified independently. This is the scenario where PoP provides the greatest security value beyond the KEM use case, because it prevents a device that passes identity checks from using a key it does not control.</t>
            </li>
            <li>
              <t><strong>Escrowed Encryption Keys.</strong> In some cryptographic infrastructures, encryption private keys are centrally escrowed by a Key Management Centre (KMC). The KMC acts as a proxy holding the private key on behalf of the client. When applying for an encryption certificate, the KMC must prove possession of the escrowed key. "pk-01" enables this without requiring the KMC to construct a CSR for each certificate.</t>
            </li>
            <li>
              <t><strong>Proxy Certificate Management (Enterprise Network Management Scenario).</strong> In enterprise environments, a Network Management System (NMS) may act as a proxy to request certificates on behalf of end devices that are resource-constrained or do not run an ACME client natively. The PoP mechanism of "pk-01" ensures that even when an order is initiated by a proxy, the private key holder (the end device) must be online to complete the proof. A proxy cannot pass the challenge without assistance from the device’s private key. When used together with device-attest-01, the CA can further verify that the public key contained in popKey originates from a trusted device, rather than a key generated by the proxy.</t>
            </li>
          </ul>
          <t>For standard DNS-based Web PKI certificate issuance, where the applicant proves domain control via dns-01 or http-01, the additional security provided by PoP — whether via CSR or "pk-01" — is marginal. An attacker who can pass domain control challenges can simply generate their own key pair and prove possession of it. The primary security function of PoP in this context is to ensure that the certified public key is well-formed and corresponds to a private key the applicant actually holds, which prevents accidental misconfiguration rather than active attacks.</t>
        </section>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document defines:</t>
        <ul spacing="normal">
          <li>
            <t>A new field <tt>popKey</tt> in the "newOrder" request, through which the client declares the public key to be certified.</t>
          </li>
          <li>
            <t>A new ACME challenge type: "pk-01", which can be included in authorizations for any identifier type.</t>
          </li>
          <li>
            <t>Two proof-of-possession modes within the challenge: one for signature keys and the other for KEM keys.</t>
          </li>
          <li>
            <t>A finalization stage that omits the CSR when all required authorizations contain a valid "pk-01" challenge.</t>
          </li>
        </ul>
        <t>Identifier-control validation (for DNS names, email addresses, etc.) continues to be performed by existing ACME challenge types (dns-01, http-01, tls-alpn-01, email-reply-00, etc.); the "pk-01" challenge solely proves private key possession. <strong>This extension does not modify, overload, or replace any existing challenge type.</strong></t>
        <t><strong>Scope limitation regarding application‑level use of KEM certificates:</strong><br/>
This document defines a mechanism to issue X.509 certificates containing KEM public keys (e.g., ML‑KEM) and to prove possession of the corresponding private keys. However, the use of such certificates in application protocols (including TLS 1.3, S/MIME, and others) is <strong>not</strong> defined by this document and requires separate standardization. Implementers and deployers should not assume that KEM certificates will work in existing protocol stacks without further updates. This draft provides the necessary infrastructure; the application‑level integration is left for future work.</t>
      </section>
      <section anchor="relationship-to-other-acme-extensions">
        <name>Relationship to Other ACME Extensions</name>
        <t>This extension is designed to be used orthogonally with several ongoing ACME working group eﬀorts. Implementers and deployers should note the following relationships:</t>
        <ul spacing="normal">
          <li>
            <t>Device Attestation (acme-device-attest): Device attestation establishes the identity and trusted state of a device itself, typically using hardware-backed attestation evidence (e.g., TPM quotes). The "pk-01" challenge addresses a diﬀerent layer: it proves that the requester holds the private key corresponding to the public key to be certified. In a device-certificate enrollment scenario, these two mechanisms complement each other: device attestation confirms which device is requesting a certificate, while "pk-01" confirms that the device actually controls the keypair that will be bound to that certificate. An authorization may contain both a device-attestation challenge and a pk-01 challenge; their validations are independent, and the CA's issuance policy can require both to succeed.</t>
          </li>
          <li>
            <t>Remote Attestation (acme-rats): Similar to device attestation, remote attestation procedures evaluate the security posture of the requesting environment. "pk-01" does not duplicate or replace these mechanisms; it provides a pure PoP primitive that can be composed with attestation-based authorizations to satisfy comprehensive certificate enrollment policies.</t>
          </li>
          <li>
            <t>ACME Profiles (acme-profiles): When a certificate's subject and SAN are not fully determined by identifiers (e.g., if only a "pk-01" challenge is used without other identifiers – see CA policy), clients <strong>MAY</strong> use the profiles extension <xref target="I-D.aaron-acme-profiles"/> to express preferences for how the CA should populate those fields.</t>
          </li>
        </ul>
      </section>
      <section anchor="relationship-to-prior-ietf-work-on-proof-of-possession">
        <name>Relationship to Prior IETF Work on Proof-of-Possession</name>
        <t>This document builds on several established IETF standards:</t>
        <ul spacing="normal">
          <li>
            <t>JOSE Unencoded Payload <xref target="RFC7797"/>: To avoid JSON serialization ambiguities, "pk-01" binds the proof to the raw newOrder JWS payload (the exact bytes received) rather than a re-serialized JSON object. This follows the precedent of using the "on-the-wire" representation for cryptographic operations.</t>
          </li>
          <li>
            <t>Proof-of-Possession Key Semantics <xref target="RFC7800"/> <xref target="RFC8747"/>: This RFC formalized the notion of a PoP key bound to a security token. In this document, the public key carried in the <tt>popKey</tt> field and the "pk-01" challenge is a PoP key, and the ACME order is the binding context. Successful completion of the "pk-01" challenge proves that the client holds the private key corresponding to this PoP key.</t>
          </li>
          <li>
            <t>OAuth 2.0 DPoP <xref target="RFC9449"/>: Demonstrates an application-layer PoP mechanism using server-generated nonces and context binding. In the ACME framework, "pk-01" can be viewed as an analogue of DPoP: it proves possession of the certificate key bound to an ACME order. DPoP's successful deployment in production environments confirms the viability and security of such application-layer PoP mechanisms. However, unlike DPoP (where individual requests are short-lived and failures are cheap), certificate issuance is a high-cost and non-ephemeral operation. ACME's challenge/authorization state machine provides a natural place to perform PoP validation before the order becomes "ready", so that finalization remains an atomic, deterministic step. Embedding PoP validation into the authorization phase is therefore a deliberate engineering decision that leverages ACME's existing infrastructure, rather than introducing a separate, decoupled proof submission mechanism.</t>
          </li>
        </ul>
      </section>
      <section anchor="protocol-overview">
        <name>Protocol Overview</name>
        <t>The following diagram provides a high-level overview of the "pk-01" protocol interaction. It illustrates the complete lifecycle from the client's initial "newOrder" request through certificate issuance, covering both the server capability discovery phase and the parallel execution of identifier-control challenges alongside the "pk-01" proof-of-possession challenge.</t>
        <figure anchor="fig-pk-1">
          <name>High-level overview of the "pk-01</name>
          <artwork><![CDATA[
CLIENT                                      SERVER
   |                                          |
   |--- (0) GET /directory ------------------>| // Discover server capabilities
   |<-- {..., popSupported: true} ------------|
   |                                          |
   |--- (1) POST /newOrder ------------------>| // Declare identifiers + popKey
   | { identifiers: [dns: example.com],       |
   | popKey: <SPKI> }                         |
   |                                          | // Validate popKey, create order
   |                                          | // Attach "pk-01" to authorization(s)
   |                                          |
   |<-- (2) order { status: "pending",        |
   | authorizations: [                        |
   | { challenges: [                          |
   |    dns-01: {token},                      |
   |    pk-01: {key: <SPKI>,                  |
   |            popNonce | ciphertext}        |
   |    ]}                                    |
   | ],                                       |
   | popKeyAccepted: true }                   |
   |                                          |
   +---- Parallel Challenge Responses --------+
   |                                          |
   |(3a) Complete dns-01                      |
   |(3b) Compute PoP proof & POST /chall/pk01 |
   +------------------------------------------+
   |                                          |
   |[All challenges valid -> status: ready]   |
   |--- (4) POST /order/xyz/finalize {} ----->| // CSR-less finalization
   |<-- (5) certificate ----------------------|
   |                                          |
]]></artwork>
        </figure>
        <t>Diagram Legend:</t>
        <ul spacing="normal">
          <li>
            <t><strong>(0) Capability Discovery</strong>: The client queries the server's Directory metadata to determine "pk-01" support before initiating an order. If <tt>popSupported</tt> is absent or false, the client falls back to standard CSR-based ACME.</t>
          </li>
          <li>
            <t><strong>(1) Order Creation</strong>: The client declares both the identity identifiers (e.g., DNS name) and the certificate public key (<tt>popKey</tt>) in the "newOrder" request.</t>
          </li>
          <li>
            <t><strong>(2) Authorization Response</strong>: The server returns authorizations containing standard identifier-control challenges (e.g., dns-01) alongside the "pk-01" challenge. The "pk-01" challenge object contains either a nonce (for signature keys) or a challenge_ciphertext (for KEM keys).</t>
          </li>
          <li>
            <t><strong>(3a) Identifier Control</strong>: The client completes the standard challenge(s) to prove control of the requested identifiers.</t>
          </li>
          <li>
            <t><strong>(3b) Proof-of-Possession</strong>: In parallel, the client constructs the cryptographic proof for the "pk-01" challenge and submits it to the challenge URL. The server validates the proof and transitions the challenge state accordingly.</t>
          </li>
          <li>
            <t><strong>(4) Finalization</strong>: Once all challenges are valid, the order becomes ready. The client sends an empty {} finalize request, signalling that no CSR is required.</t>
          </li>
          <li>
            <t><strong>(5) Certificate Issuance</strong>: The server issues the certificate using the authorized identifiers and the validated public key from <tt>popKey</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="design-philosophy-what-pk-01-is-and-is-not">
        <name>Design Philosophy: What pk-01 Is and Is Not</name>
        <t>The "pk-01" challenge serves one purpose: proving that the applicant possesses the private key corresponding to a declared public key. It is intentionally minimal. Several design choices derived from the following philosophy.</t>
        <ul spacing="normal">
          <li>
            <t>It is a challenge, not a new protocol layer. This reuses ACME's existing authorization state machine, error handling, and finalization gating. The Working Group discussed alternative designs (e.g., a separate PoP endpoint, a reusable PoP token). These alternatives oﬀer architectural cleanliness at the cost of additional protocol complexity. This document chooses the pragmatic path of integration over abstraction. Future extensions may revisit this choice.</t>
          </li>
          <li>
            <t>It does not replace CSR for all use cases. Clients that already have CSR generation capabilities and are using signature keys may continue to use the standard CSR-based flow. "pk-01" is not a deprecation of CSR.</t>
          </li>
          <li>
            <t>It does not solve KEM certificate revocation. The inability of KEM keys to sign revocation requests is a cryptographic limitation, not a protocol deficiency. Section 7.5 discusses this honestly.</t>
          </li>
        </ul>
      </section>
      <section anchor="server-capability-advertisement">
        <name>Server Capability Advertisement</name>
        <t>An ACME server that supports the "pk-01" challenge <strong>SHOULD</strong> advertise this capability in its Directory metadata, so that clients can determine support before initiating an order:</t>
        <artwork><![CDATA[
{
  "newNonce": "https://acme.example.com/acme/new-nonce",
  "newAccount": "https://acme.example.com/acme/new-acct",
  "newOrder": "https://acme.example.com/acme/new-order",
  "meta": {
    "popSupported": true
  }
}
]]></artwork>
        <t>The <tt>popSupported</tt> field, located inside the "meta" object, is a boolean. If true, the server supports the "pk-01" challenge type and the <tt>popKey</tt> field in newOrder requests. If absent or false, the server does not support "pk-01", and clients <strong>SHOULD NOT</strong> include <tt>popKey</tt> in their requests. This allows clients to avoid unnecessary popKey submissions and to choose a compatible CA upfront when CSR-less operation is required. Clients <strong>SHOULD NOT</strong> assume that a server advertising <tt>popSupported</tt>: true fully implements this specification. If a client encounters behavior that violates the requirements of this document (e.g., a server ignoring <tt>popKey</tt> despite advertising support), it <strong>SHOULD</strong> report the incompatibility to the server operator and fall back to standard CSR-based ACME. The server <strong>MUST</strong> maintain support for "pk-01" throughout the entire lifetime of any order that includes "pk-01" challenges. If "pk-01" support is disabled while there are outstanding orders containing "pk-01" challenges, those orders <strong>MUST</strong> be immediately transitioned to the invalid state with an appropriate error description.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<strong>MUST</strong>", "<strong>MUST NOT</strong>", "<strong>REQUIRED</strong>", "<strong>SHALL</strong>", "<strong>SHALL NOT</strong>", "<strong>SHOULD</strong>", "<strong>SHOULD NOT</strong>", "<strong>RECOMMENDED</strong>", "<strong>NOT RECOMMENDED</strong>", "<strong>MAY</strong>", and "<strong>OPTIONAL</strong>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <t>This document uses the following terminology:</t>
      <ul spacing="normal">
        <li>
          <t>ACME Client: An ACME client as defined in <xref target="RFC8555"/>. In this document, "client" and "applicant" (the entity holding the private key to be certified) refer to the same entity in most scenarios.</t>
        </li>
        <li>
          <t>ACME Server: An ACME server as defined in <xref target="RFC8555"/>, operated by a Certification Authority (CA) or its delegated service.</t>
        </li>
        <li>
          <t><tt>popKey</tt>: A field in the "newOrder" request through which the client declares the public key to be certified. Its value is the Base64URL encoding (without padding) of the DER-encoded SubjectPublicKeyInfo (SPKI) <xref target="RFC5480"/>. The value <strong>MUST NOT</strong> contain any whitespace or non-Base64URL characters.</t>
        </li>
        <li>
          <t><tt>popSupported</tt>: A field in the Directory metadata indicating that the server supports the "pk-01" challenge and associated fields.</t>
        </li>
        <li>
          <t>pk-01 Challenge: A challenge type defined in this document that proves possession of a private key. It is attached to an authorization for an identifier (e.g., dns), but the proof does not depend on that identifier; it purely demonstrates control of the key.</t>
        </li>
        <li>
          <t>PoP Key: The public key whose possession is being proved, encoded in the key field of the "pk-01" challenge object. Its value is byte-identical to the <tt>popKey</tt> provided in the "newOrder" request.</t>
        </li>
        <li>
          <t>Signature key: An asymmetric key capable of digital signature operations (e.g., ECDSA, Ed25519, RSASSA-PSS, ML-DSA, SLH-DSA).</t>
        </li>
        <li>
          <t>KEM key: An asymmetric key capable of Key Encapsulation Mechanism operations (e.g., ML-KEM).</t>
        </li>
        <li>
          <t>Proof of Possession (PoP): A cryptographic mechanism by which the requester proves possession of the private key corresponding to a declared public key. For signature keys, the PoP is a signature over challenge material; for KEM keys, it is a MAC derived from a shared secret obtained through KEM decapsulation.</t>
        </li>
        <li>
          <t>raw_newOrder: The exact byte sequence of the JSON payload of the "newOrder" request, i.e., the raw bytes of the JWS protected payload after Base64URL decoding and before JSON parsing.</t>
        </li>
        <li>
          <t>newOrder_hash: SHA-256(raw_newOrder).</t>
        </li>
        <li>
          <t>Base64URL encoding: All Base64URL encodings in this document use the unpadded form (base64url-without-padding, per <xref target="RFC7515"/> Section 2), consistent with ACME <xref target="RFC8555"/> and the JOSE ecosystem. Encoded values <strong>MUST NOT</strong> contain any whitespace characters.</t>
        </li>
      </ul>
    </section>
    <section anchor="declaring-the-public-key-the-popkey-field">
      <name>Declaring the Public Key: the popKey Field</name>
      <section anchor="the-popkey-field-in-neworder">
        <name>The popKey Field in newOrder</name>
        <t>Clients <strong>SHOULD</strong> use the popKey/pk-01 flow when they possess key types that cannot produce CSR self-signatures (e.g., KEM keys). Clients that already have CSR generation capabilities and are using signature keys may continue to use the standard CSR-based flow described in <xref target="RFC8555"/>.</t>
        <t>A client that wishes to use the CSR-less flow declares the public key to be certified by including a popKey field in the "newOrder" request:</t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json
{
  "identifiers": [
      { "type": "dns", "value": "example.com" }
  ],
  "popKey": "<base64url(DER-encoded SPKI)>"
}
]]></artwork>
        <t>Field description:</t>
        <ul spacing="normal">
          <li>
            <t>popKey (OPTIONAL): The Base64URL encoding (without padding) of the DER-encoded SubjectPublicKeyInfo (SPKI) <xref target="RFC5480"/> of the public key to be certified.</t>
          </li>
        </ul>
        <t>The <tt>popKey</tt> field is not an identifier. It does not appear in the identifiers array and does not create a separate authorization. It is purely a declaration of the public key for which the client intends to prove possession.</t>
      </section>
      <section anchor="server-processing-of-popkey">
        <name>Server Processing of popKey</name>
        <t>Upon receiving a "newOrder" request with a <tt>popKey</tt> field, the server:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>MUST</strong> validate that the popKey value decodes to a well-formed SPKI conforming to  <xref target="X.690"/> Section 11 distinguished encoding (strict DER), and that it contains no non-Base64URL characters or whitespace.</t>
          </li>
          <li>
            <t><strong>MUST</strong> verify that the AlgorithmIdentifier in the SPKI corresponds to an algorithm listed in Section 5.1 (signature keys) or Section 5.2 (KEM keys). If the algorithm is not supported or the key parameters (e.g., RSA modulus length) do not meet the CA's policy, the server <strong>MUST</strong> return a urn:ietf:params:acme:error:badPublicKey error with a detail field describing the incompatibility (e.g., "RSA key length 2048 is below the required minimum of 3072").</t>
          </li>
          <li>
            <t><strong>MUST</strong> verify that the public key in <tt>popKey</tt> differs from the account public key of the ACME account placing the order. If they are identical, the server <strong>MUST</strong> reject the request with urn:ietf:params:acme:error:badPublicKey (consistent with the considerations on separating certificate keys from account keys in <xref target="RFC8555"/> Section 11.1).</t>
          </li>
          <li>
            <t>If validation fails for any reason, the server <strong>MUST</strong> reject the "newOrder" request with error type urn:ietf:params:acme:error:badPublicKey.</t>
          </li>
          <li>
            <t>If validation succeeds, the server <strong>MUST</strong> store the SPKI bytes as received and associate them with the order.</t>
          </li>
          <li>
            <t>When creating authorizations for the order, the server <strong>MUST</strong> include a "pk-01" challenge in each authorization. The key field of each "pk-01" challenge <strong>MUST</strong> be byte-identical to the validated <tt>popKey</tt> value.</t>
          </li>
        </ol>
        <t>If the server does not support "pk-01", it <strong>MUST</strong> reject the request with a new error type urn:ietf:params:acme:error:popNotSupported (see Section 8.4). There is no silent fallback. This is a deliberate design choice to avoid ambiguous protocol states. Clients that require CSR-less operation should select a CA that advertises popSupported: true.</t>
        <t>If the server receives a newOrder without a <tt>popKey</tt> and the server's policy requires PoP (e.g., for a specific account), the server <strong>MUST</strong> reject the order with a popNotSupported or a popKeyRejectedByPolicy error (if the server otherwise supports pk-01 but the account lacks permission). Servers <strong>MUST NOT</strong> silently assume knowledge of the client's public key through out-of-band means; the PoP flow is initiated solely by the client providing popKey.</t>
      </section>
      <section anchor="order-object-echo-of-popkey">
        <name>Order Object Echo of popKey</name>
        <t>The server <strong>MUST</strong> include the accepted <tt>popKey</tt> value and a <tt>popKeyAccepted</tt> field set to true in the order object when it intends to attempt using "pk-01":</t>
        <artwork><![CDATA[
{
  "status": "pending",
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "authorizations": [
    "https://acme.example.com/acme/authz/abc123"
  ],
  "popKey": "<base64url(DER-encoded SPKI)>",
  "popKeyAccepted": true,
  "finalize": "https://acme.example.com/acme/finalize/xyz"
}
]]></artwork>
        <t>The presence of <tt>popKeyAccepted: true</tt> indicates that the server has recorded the public key and will attempt to create the necessary pk-01 challenges; it does not guarantee that the order will eventually succeed (e.g., later authorization creation may fail). Clients MUST continue to monitor the order status and handle failures as usual.</t>
        <t>A server implementing this specification never "ignores" <tt>popKey</tt>: it either accepts it and uses "pk-01" (popKeyAccepted: true), or rejects the order with popNotSupported (see Section 3.2). A legacy server that does not implement this specification will silently ignore popKey per <xref target="RFC8555"/>'s treatment of unrecognized fields, and the order object it returns will not contain a popKeyAccepted field. Clients <strong>MUST</strong> therefore treat the absence of the <tt>popKeyAccepted</tt> field in the order object as an indication that the server did not process popKey, and either fall back to CSR-based finalization or abandon the order.</t>
        <t>If the server later discovers that it cannot attach pk-01 challenges to all required authorizations (e.g., due to identifier type incompatibility), it MUST transition the order to <tt>invalid</tt> with an appropriate error (e.g., <tt>malformed</tt> or <tt>unsupportedIdentifier</tt>). The <tt>popKeyAccepted</tt> field, once set to true, is not changed; clients rely on the order status to detect final outcome.</t>
        <t>The client can use this field to confirm that the server correctly received the public key and intends to use pk-01. The server <strong>MUST</strong> ensure that the echoed popKey (when <tt>popKeyAccepted</tt> is true) is byte-identical to the value received in the "newOrder" request.</t>
        <t>When a client detects that the server did not process popKey (no <tt>popKeyAccepted</tt> field in the order object), the client <strong>SHOULD</strong> cache this information for the duration of the ACME session or account lifetime, and <strong>SHOULD NOT</strong> include popKey in subsequent "newOrder" requests to the same server. The client <strong>MAY</strong> clear this cache if it detects a change in the <tt>popSupported</tt> field of the server's directory object.</t>
      </section>
    </section>
    <section anchor="the-pk-01-challenge">
      <name>The pk-01 Challenge</name>
      <section anchor="attachment-to-authorizations">
        <name>Attachment to Authorizations</name>
        <t>An ACME server that has received a valid <tt>popKey</tt> in the "newOrder" request includes a "pk-01" challenge in one or more authorization objects returned for the order. The presence of the challenge signals that the server intends to use the validated public key for certificate issuance and will not accept the CSR at finalization.</t>
        <t>If the order contains multiple authorizations (e.g., for diﬀerent identifier types), and the server's policy requires PoP for this order, the server <strong>MUST</strong> include a "pk-01" challenge in all authorizations associated with the order. All such "pk-01" challenges <strong>MUST</strong> carry the same public key (matching the popKey). This symmetric treatment prevents any timing or processing-order vulnerabilities and keeps the authorization state model consistent.</t>
        <t>An authorization containing a "pk-01" challenge is bound to a specific order's <tt>popKey</tt> and <tt>newOrder_hash</tt>. The authorization reuse permitted by <xref target="RFC8555"/> Section 7.1.4 therefore does not apply to such authorizations: the server <strong>MUST NOT</strong> associate an authorization containing a "pk-01" challenge (regardless of its state) with any other order, and <strong>MUST</strong> create fresh authorizations with fresh "pk-01" challenges for every new order that includes a <tt>popKey</tt>.</t>
        <t>The "pk-01" challenge expires along with its containing authorization. If the authorization expires, the "pk-01" challenge <strong>MUST</strong> be automatically transitioned to invalid.</t>
      </section>
      <section anchor="challenge-object-fields">
        <name>Challenge Object Fields</name>
        <t>The "pk-01" challenge appears inside an authorization's challenges array. The set of fields in the challenge object depends on whether the key is a signature key or a KEM key, as determined by the server from the key field (which mirrors the <tt>popKey</tt>).</t>
        <section anchor="challenge-object-for-signature-keys">
          <name>Challenge Object for Signature Keys</name>
          <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/abc123",
  "status": "pending",
  "key": "<base64url(DER-encoded SPKI)>",
  "popNonce": "Kz3mVpQeRd9fLwYbN5hXuT6oJsIc0vAg2nEp1yMrFqZ"
}
]]></artwork>
          <t>Field descriptions:</t>
          <ul spacing="normal">
            <li>
              <t>type: Fixed value "pk-01".</t>
            </li>
            <li>
              <t>url, status: Per <xref target="RFC8555"/> Section 7.1.5 standard semantics.</t>
            </li>
            <li>
              <t>key (REQUIRED): The Base64URL encoding (without padding) of the DER-encoded SubjectPublicKeyInfo (SPKI) of the public key to be certified. This value <strong>MUST</strong> be byte-identical to the <tt>popKey</tt> provided by the client in the "newOrder" request. While the key field is always identical to the <tt>popKey</tt>, it provides a useful consistency check in multi-authorization orders: the client can verify that all authorizations reference the same public key without having stored the <tt>popKey</tt> separately.</t>
            </li>
            <li>
              <t>popNonce (REQUIRED for signature keys, mutually exclusive with challenge_ciphertext): A random value generated by the ACME server independently for this challenge, Base64URL-encoded, with at least 128 bits of entropy <xref target="RFC4086"/>. The nonce <strong>MUST</strong> be generated using a Cryptographically Secure Pseudorandom number Generator (CSPRNG) as specified in <xref target="RFC4086"/>, preferably one compliant with NIST SP 800-90A. The same nonce <strong>MUST NOT</strong> be used for multiple challenges.This field is named <tt>popNonce</tt> to avoid confusion with the Replay-Nonce HTTP header and the nonce parameter in the JWS protected header used for anti-replay in ACME.</t>
            </li>
          </ul>
        </section>
        <section anchor="challenge-object-for-kem-keys">
          <name>Challenge Object for KEM Keys</name>
          <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/def456",
  "status": "pending",
  "key": "<base64url(DER-encoded SPKI)>",
  "challenge_ciphertext": "Af2x3..."
}
]]></artwork>
          <t>Field descriptions:</t>
          <ul spacing="normal">
            <li>
              <t>type, url, status, key: Same as above.</t>
            </li>
            <li>
              <t>challenge_ciphertext (REQUIRED for KEM keys, mutually exclusive with nonce): The Base64URL encoding of the ciphertext produced by the server's KEM Encapsulate operation using the public key from the <tt>key</tt> field. The KEM algorithm used is uniquely determined by the AlgorithmIdentifier in the SPKI (see Section 5.2).</t>
            </li>
            <li>
              <t>kdf_version (OPTIONAL, integer): Indicates the version of the KDF (Key Derivation Function) used to derive <tt>mac_key</tt> from the shared secret. When absent, the value defaults to 1, which corresponds to the construction specified in Section 5.2 (HKDF-Extract with empty salt, HKDF-Expand with info "ACME-pk-01-KEM v1"). If a future version of this specification defines a different KDF, a client or server supporting that version MUST use the corresponding <tt>kdf_version</tt> value. The presence of this field allows protocol evolution without creating a new challenge type.</t>
            </li>
          </ul>
          <t>The <tt>nonce</tt> and <tt>challenge_ciphertext</tt> fields are mutually exclusive: each "pk-01" challenge object <strong>MUST</strong> contain exactly one of them. The server determines which field to use based on the key type declared in the key field.</t>
        </section>
      </section>
      <section anchor="multiple-pk-01-challenges-in-an-order">
        <name>Multiple pk-01 Challenges in an Order</name>
        <t>As stated in Section 4.1, an order containing multiple authorizations <strong>MUST</strong> include a "pk-01" challenge in each authorization when the server requires PoP. All such challenges <strong>MUST</strong> carry the same key value (byte-identical SPKI). The server <strong>MUST</strong> verify this consistency at the time the authorizations are created. If the server's policy requires PoP, and it cannot create consistent "pk-01" challenges across all authorizations (e.g., because diﬀerent authorization types have diﬀerent challenge templates), the server <strong>MUST</strong> reject the newOrder request. As an additional safeguard, the server <strong>SHOULD</strong> re-verify consistency before transitioning the order to ready.</t>
        <t>All required challenges (both identifier-control and pk-01) <strong>MUST</strong> reach the valid state before the order transitions to ready. If any "pk-01" challenge in any authorization transitions to invalid, the entire order <strong>MUST</strong> be immediately transitioned to invalid, regardless of the state of other challenges.</t>
      </section>
    </section>
    <section anchor="proof-of-possession-execution">
      <name>Proof-of-Possession Execution</name>
      <section anchor="pop-for-signature-keys">
        <name>PoP for Signature Keys</name>
        <t>In signature key mode, the "pk-01" challenge object contains the <tt>nonce</tt> field. The applicant constructs the proof as follows:</t>
        <t>1) Let <tt>raw_newOrder</tt> be the exact JSON payload bytes of the "newOrder" request.</t>
        <t>2) Compute newOrder_hash = SHA-256(raw_newOrder).</t>
        <t>3) Let <tt>popNonce_bytes</tt> be the raw bytes obtained by Base64URL-decoding the nonce field.</t>
        <t>4)  Construct the message to be signed:</t>
        <artwork><![CDATA[
to_sign = "ACME-pk-01-sig v1:" || popNonce_bytes || newOrder_hash
]]></artwork>
        <t>where <tt>||</tt> denotes raw byte concatenation and "ACME-pk-01-sig v1:" is a fixed 18-byte ASCII domain separation prefix. Since <tt>newOrder_hash</tt> has a fixed length of 32 bytes, the concatenation is unambiguous. The domain separation prefix is mandatory: the private key corresponding to popKey is likely to be used later in other protocols (e.g., TLS handshake signatures), and the nonce is an arbitrary byte string chosen by the server; without domain separation, a malicious server could induce the client to sign a message that is meaningful in another protocol context. The prefix isolates this signature context from all other uses of the same key pair.</t>
        <t>5) Compute the signature:</t>
        <artwork><![CDATA[
proof = base64url( Sign(privateKey, to_sign) )
]]></artwork>
        <t>Sign(key, message) denotes a complete signing operation over message (with hashing internal to the algorithm). The caller <strong>MUST NOT</strong> pre-hash message before invocation. For ML-DSA and SLH-DSA, the pure signing mode <strong>MUST</strong> be used and the context string <tt>ctx</tt> <strong>MUST</strong> be the empty string (domain separation is already provided by the <tt>to_sign</tt> prefix).</t>
        <t>The signature algorithm is determined by the key type declared in the key field's SPKI. For Ed25519, ML-DSA, and SLH-DSA, the algorithm field of the SPKI uses the parameter-set-specific OID directly (the parameters field <strong>MUST</strong> be absent); implementations <strong>MUST</strong> use the complete OID for algorithm identification and <strong>MUST NOT</strong> rely solely on OID prefix matching. For EC keys, the algorithm field is id-ecPublicKey (1.2.840.10045.2.1) and the specific curve is identified by the namedCurve OID in the parameters. For RSA keys, the algorithm field is rsaEncryption (1.2.840.113549.1.1.1); signature verification always uses RSASSA-PSS (PS256) regardless of the algorithm OID in the SPKI.
Clients MUST generate signatures using RSASSA-PSS with SHA-256, MGF1 with SHA-256, a salt length of 32 bytes, and a trailer field value of 0xBC. If a client uses PKCS#1 v1.5 padding or any other signature algorithm, the server MUST reject the challenge with error type urn:ietf:params:acme:error:badPoP and SHOULD include a detail field indicating “RSA signature algorithm mismatch – expected RSASSA-PSS”.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Key type</th>
              <th align="left">SPKI algorithm identification</th>
              <th align="left">Signature algorithm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">EC P-256</td>
              <td align="left">id-ecPublicKey (1.2.840.10045.2.1), namedCurve = secp256r1 (1.2.840.10045.3.1.7)</td>
              <td align="left">ECDSA with SHA-256</td>
            </tr>
            <tr>
              <td align="left">EC P-384</td>
              <td align="left">id-ecPublicKey (1.2.840.10045.2.1), namedCurve = secp384r1 (1.3.132.0.34)</td>
              <td align="left">ECDSA with SHA-384</td>
            </tr>
            <tr>
              <td align="left">Ed25519</td>
              <td align="left">1.3.101.112</td>
              <td align="left">Ed25519 (PureEdDSA, <xref target="RFC8032"/>)</td>
            </tr>
            <tr>
              <td align="left">RSA</td>
              <td align="left">rsaEncryption (1.2.840.113549.1.1.1)</td>
              <td align="left">RSASSA-PSS with SHA-256</td>
            </tr>
            <tr>
              <td align="left">ML-DSA-44</td>
              <td align="left">2.16.840.1.101.3.4.3.1</td>
              <td align="left">ML-DSA-44 <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">ML-DSA-65</td>
              <td align="left">2.16.840.1.101.3.4.3.2</td>
              <td align="left">ML-DSA-65 <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">ML-DSA-87</td>
              <td align="left">2.16.840.1.101.3.4.3.3</td>
              <td align="left">ML-DSA-87 <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-128s</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-128s <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-128f</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-128f <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-192s</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-192s <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-192f</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-192f <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-256s</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-256s <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-256f</td>
              <td align="left">(TBD – see NIST CSOR)</td>
              <td align="left">SLH-DSA-SHA2-256f <xref target="FIPS-205"/></td>
            </tr>
          </tbody>
        </table>
        <t>Note: The key type names for SLH-DSA follow the naming convention established in FIPS 205. These names use hyphens and include the hash function family (SHA2), security level (128/192/256), and parameter size variant ("s" for small, "f" for fast). This diﬀers from the ML-DSA naming convention but reflects the nomenclature standardized by NIST.</t>
        <t>The client <strong>MUST</strong> use the signature algorithm corresponding to the declared public key type.</t>
        <t>The modulus length of an RSA key <strong>SHOULD</strong> be at least 2048 bits; the server <strong>MAY</strong> reject RSA keys with modulus length less than 2048 bits and return the urn:ietf:params:acme:error:badPublicKey error. CA policy <strong>MAY</strong> require a minimum length above this baseline (e.g., 3072 bits); in that case the required minimum <strong>SHOULD</strong> be stated in the detail field of the badPublicKey error (the examples in Section 3.2 and Section 9.1.5 illustrate such a policy).</t>
        <t>Byte encoding of signature values:</t>
        <ul spacing="normal">
          <li>
            <t>ECDSA: <strong>MUST</strong> use the IEEE P1363 compact format (<tt>r || s</tt>, fixed length equal to twice the byte length of the curve order), per <xref target="RFC7518"/> Section 3.4; ASN.1 DER encoding <strong>MUST NOT</strong> be used.
<em>Note: This encoding is only required for the proof-of-possession signature in the pk-01 challenge. It does not affect the format of signatures that appear in the issued X.509 certificate (which remain ASN.1 DER encoded).</em></t>
          </li>
          <li>
            <t>RSASSA-PSS: <strong>MUST</strong> use the PS256 algorithm as defined in <xref target="RFC7518"/> Section 3.5. This specifies RSASSA-PSS with SHA-256, MGF1 with SHA-256, a salt length of 32 bytes, and a trailer field value of 0xBC.</t>
          </li>
          <li>
            <t>Ed25519: <strong>MUST</strong> use the 64-byte signature encoding defined in <xref target="RFC8032"/> Section 5.1.</t>
          </li>
          <li>
            <t>ML-DSA-44 / 65 / 87: <strong>MUST</strong> use the byte encoding defined in <xref target="FIPS-204"/>.</t>
          </li>
          <li>
            <t>SLH-DSA-SHA2-*: <strong>MUST</strong> use the byte encoding defined in {{FIPS-205 Section 8.2.</t>
          </li>
        </ul>
      </section>
      <section anchor="pop-for-kem-keys">
        <name>PoP for KEM Keys</name>
        <t>In KEM key mode, the "pk-01" challenge object contains the <tt>challenge_ciphertext</tt> field. The KEM algorithm is uniquely determined by the AlgorithmIdentifier in the key field's SPKI. The AlgorithmIdentifier OID includes the parameter set identifier.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Key type</th>
              <th align="left">Public key Length (bytes)</th>
              <th align="left">SPKI AlgorithmIdentifier OID</th>
              <th align="left">Standard</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-KEM-512</td>
              <td align="left">768</td>
              <td align="left">2.16.840.1.101.3.4.4.1</td>
              <td align="left">ML-KEM-512 <xref target="FIPS-203"/></td>
            </tr>
            <tr>
              <td align="left">ML-KEM-768</td>
              <td align="left">1088</td>
              <td align="left">2.16.840.1.101.3.4.4.2</td>
              <td align="left">ML-KEM-768 <xref target="FIPS-203"/></td>
            </tr>
            <tr>
              <td align="left">ML-KEM-1024</td>
              <td align="left">1568</td>
              <td align="left">2.16.840.1.101.3.4.4.3</td>
              <td align="left">ML-KEM-1024 <xref target="FIPS-203"/></td>
            </tr>
          </tbody>
        </table>
        <t>The server and client perform the following steps:</t>
        <t><strong>Server-side (challenge creation):</strong></t>
        <t>1) Execute KEM Encapsulate using the public key from the key field, obtaining a shared secret <tt>shared_secret</tt> and a ciphertext <tt>ct</tt>.</t>
        <t>2) Derive a MAC key:</t>
        <artwork><![CDATA[
prk = HKDF-Extract(salt = "", IKM = shared_secret)
mac_key = HKDF-Expand(prk, info = "ACME-pk-01-KEM v1", L = 32)
]]></artwork>
        <t>The empty salt is used because the shared secret output by ML-KEM possesses sufficient entropy; per <xref target="RFC5869"/>, an empty salt is equivalent to the default all-zero salt, consistent with the provisions for the default salt in two-step (extract-then-expand) key derivation in <xref target="NIST-SP-800-56C"/>. See <xref target="RFC5869"/> for HKDF.</t>
        <t>3) Store <tt>mac_key</tt> in the order record (associated with this challenge). shared_secret, prk, and all intermediate states from the Encapsulate process <strong>MUST</strong> be destroyed after <tt>mac_key</tt> is derived.</t>
        <t>4) The server <strong>MUST</strong> verify that the length of the ciphertext ct produced by Encapsulate matches the expected ciphertext length for the declared KEM algorithm (as listed in the table above). A length mismatch indicates an implementation or library error, and the server <strong>MUST</strong> abort challenge creation.</t>
        <t>5) Fill the <tt>challenge_ciphertext</tt> field with the Base64URL encoding of <tt>ct</tt>.</t>
        <t><strong>Client-side (proof generation):</strong></t>
        <t>1) Let <tt>ct</tt> be the raw bytes obtained by Base64URL-decoding the <tt>challenge_ciphertext</tt> field.</t>
        <t>2) Perform KEM Decapsulate(ct) using the private key corresponding to the public key in the key field, obtaining <tt>shared_secret</tt>.</t>
        <t>3) The client MUST verify that the KEM Decapsulate operation succeeds and that the resulting <tt>shared_secret</tt> is not all-zero nor any other pre‑defined error value (as specified by the KEM algorithm). If decapsulation fails or the shared secret is invalid, the client MUST abort the challenge and MUST NOT submit a proof. The client SHOULD report the error to the user or operator.</t>
        <t>4) Derive <tt>mac_key</tt> using the same parameters as the server:</t>
        <artwork><![CDATA[
prk = HKDF-Extract(salt = "", IKM = shared_secret)
mac_key = HKDF-Expand(prk, info = "ACME-pk-01-KEM v1", L = 32)
]]></artwork>
        <t>5) Compute newOrder_hash = SHA-256(raw_newOrder).</t>
        <t>6) Compute the proof:</t>
        <artwork><![CDATA[
proof = base64url( HMAC-SHA-256(mac_key, newOrder_hash) )
]]></artwork>
        <t>The applicant <strong>MUST NOT</strong> use shared_secret directly as the HMAC key; <tt>mac_key</tt> <strong>MUST</strong> be derived via HKDF. After submitting the proof, the client SHOULD immediately destroy <tt>shared_secret</tt>, <tt>prk</tt>, and <tt>mac_key</tt> from memory (e.g., by overwriting with zeros) to reduce the risk of key material exposure, especially in multi‑tenant environments. The HMAC serves as an implicit key confirmation: if the client does not possess the correct KEM private key, the derived mac_key will diﬀer from the server's, and the HMAC verification will fail. This provides assurance to the server that the client successfully completed the KEM decapsulation and holds the corresponding private key.</t>
        <t>If the challenge object contains a <tt>kdf_version</tt> field, the client and server MUST use the KDF parameters corresponding to that version. Version 1 is defined in this document. Future versions will be defined in separate specifications.</t>
      </section>
      <section anchor="client-response-submission">
        <name>Client Response Submission</name>
        <t>After constructing the proof, the client submits it to the challenge url via an authenticated ACME POST:</t>
        <artwork><![CDATA[
POST /acme/chall/abc123 HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json
{
  "proof": "<base64url-encoded proof>"
}
]]></artwork>
        <t>The <tt>proof</tt> field carries the signature (signature key mode) or HMAC (KEM key mode) as computed above.</t>
      </section>
      <section anchor="server-validation">
        <name>Server Validation</name>
        <t>Upon receiving the response, the server:</t>
        <ol spacing="normal" type="1"><li>
            <t>Retrieves the previously stored <tt>newOrder_hash</tt> and challenge-specific material (popNonce_bytes for signature mode, mac_key for KEM mode).</t>
          </li>
          <li>
            <t>Selects the validation path based on the field present in the challenge object:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Signature key mode:</strong> Constructs to_sign = "ACME-pk-01-sig v1:" ‖ popNonce_bytes ‖ newOrder_hash (see Section 5.1), and verifies the signature using the public key from the key field.</t>
              </li>
              <li>
                <t><strong>KEM key mode:</strong> Computes HMAC-SHA-256(mac_key, newOrder_hash) and compares it (using constant-time comparison) with the submitted proof.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If validation succeeds, the challenge state is set to valid; if it fails, to invalid with error urn:ietf:params:acme:error:badPoP.</t>
          </li>
          <li>
            <t>Once the challenge reaches a terminal state, the server <strong>MUST</strong> immediately destroy the locally stored <tt>popNonce</tt> (signature key mode) or <tt>mac_key</tt> (KEM key mode). Any subsequent request carrying the same proof or referencing a consumed popNonce <strong>MUST</strong> be rejected.</t>
          </li>
        </ol>
        <t>If a "pk-01" challenge fails validation, it <strong>MUST</strong> be immediately transitioned to <tt>invalid</tt>. Clients <strong>MUST NOT</strong> retry the same challenge URL. Unlike identifier-control challenges such as dns-01, where transient failures (e.g., DNS propagation delays) are common and retries are appropriate, a "pk-01" failure indicates a cryptographic mismatch between the declared public key and the proving private key. This is not a transient condition; retrying the same challenge with the same key would not succeed. To attempt PoP again, a new order <strong>MUST</strong> be created.</t>
      </section>
      <section anchor="order-binding">
        <name>Order Binding</name>
        <t>Both <tt>to_sign</tt> (signature key mode) and <tt>newOrder_hash</tt> (KEM key mode, used as HMAC input) include SHA-256(raw_newOrder). This binds the proof to the entire byte sequence of the "newOrder" request, including the identifiers array, the <tt>popKey</tt> field, and any other fields. Any modification to <tt>raw_newOrder</tt> will cause PoP verification to fail. This ensures that the public key is cryptographically bound to the specific set of identifiers in the order.</t>
        <t>Note: This specification binds the proof to the raw JWS payload bytes of the "newOrder" request to avoid JSON serialization ambiguities. Implementations <strong>MUST</strong> follow the guidance in Section 9.1.1 to capture these bytes correctly. Future revisions of this specification may consider alternative binding mechanisms (e.g., a canonicalized representation of the order's semantic content) if deployment experience reveals interoperability challenges with the current approach.</t>
      </section>
      <section anchor="design-rationale-why-a-challenge">
        <name>Design Rationale: Why a Challenge?</name>
        <t>During the development of this document, an alternative design path was discussed: making proof-of-possession a standalone mechanism outside the ACME challenge framework (e.g., a separate server-declared PoP endpoint). This document elects to model PoP as an ACME challenge for the following engineering reasons:</t>
        <ul spacing="normal">
          <li>
            <t>Reuse of the authorization state machine: ACME already defines a robust lifecycle for challenges (pending -&gt; processing -&gt; valid/invalid) with well-understood error handling, retry semantics, and finalization gating (order only becomes ready when all challenges are valid). By representing PoP as a challenge, we inherit this infrastructure without introducing a parallel state machine.</t>
          </li>
          <li>
            <t>Natural composition with identifier-control challenges: In a typical order, authorizations contain both identity challenges (dns-01) and a "pk-01" challenge. Both must reach valid before the order enters ready. The challenge model makes this composition declarative and transparent.</t>
          </li>
          <li>
            <t>Preserving finalization atomicity: Certificate issuance is a high-cost, non-ephemeral operation. Placing PoP inside a challenge guarantees that the order only reaches ready when both identifier control and private key possession have been confirmed, preserving the deterministic semantics of finalization that are central to ACME's reliability.</t>
          </li>
          <li>
            <t>Minimal changes to the ACME ecosystem: Introducing a new, out-of-band PoP mechanism would require changes to ACME client and server state management beyond what is already provided. The challenge approach minimizes the delta.</t>
          </li>
        </ul>
        <t>A comparison with OAuth 2.0 DPoP <xref target="RFC9449"/> is instructive. DPoP attaches a PoP proof to every protected HTTP request, which is appropriate for a resource-access protocol where requests are short-lived and failures are cheap. In contrast, ACME certificate orders are long-lived, multi-step transactions culminating in a cryptographic credential with significant lifetime and security impact. Moving PoP validation to the finalization step (as DPoP would suggest by analogy) would expose clients to costly order failures after all other challenges have been completed. Placing PoP inside a challenge, as this document does, ensures that the order only reaches "ready" when both conditions are met, avoiding late failures.</t>
        <t>Note: This design choice does not preclude future work from defining additional, non-challenge PoP mechanisms if the need arises. The "pk-01" challenge demonstrates that the challenge abstraction is suﬃciently general to support cryptographic proof-of-possession while maintaining full backward compatibility with <xref target="RFC8555"/>.</t>
      </section>
      <section anchor="kem-pop-key-derivation-versioning">
        <name>KEM PoP Key Derivation Versioning</name>
        <t>The HKDF info string "ACME-pk-01-KEM v1" includes a version indicator ("v1") to accommodate potential future changes to the key derivation parameters (e.g., diﬀerent HKDF hash functions, alternative salt values, or distinct MAC algorithms). If it determines that the KDF parameters need to be updated in the future, the following options are available, and the appropriate choice will be made based on the nature of the change:</t>
        <ul spacing="normal">
          <li>
            <t>For incompatible changes to the KDF parameters, a new challenge type (e.g., "pk-02") would be defined with updated parameters. This approach is appropriate when the change would cause a server and client using diﬀerent parameters to derive diﬀerent MAC keys, leading to verification failures.</t>
          </li>
          <li>
            <t>For backwards-compatible additions, additional algorithms could be registered alongside the existing ones in the IANA registry (see Appendix A.3) without changing the KDF parameters.</t>
          </li>
        </ul>
        <t>The version indicator in the <tt>info</tt> string serves primarily as a self-documenting feature, making key derivation logs and debugging output unambiguous about which parameter set is in use. Implementers <strong>MUST</strong> use the info string exactly as specified ("ACME-pk-01-KEM v1") and <strong>MUST NOT</strong> substitute a diﬀerent version unless a future specification defines a new challenge type.</t>
      </section>
    </section>
    <section anchor="finalization">
      <name>Finalization</name>
      <section anchor="order-readiness-with-pk-01">
        <name>Order Readiness with pk-01</name>
        <t>An order that contains one or more "pk-01" challenges across its authorizations transitions to ready only when all those challenges are valid (and all other required challenges are also valid). The server <strong>MUST</strong> ensure that all "pk-01" challenges in the order carry the same key (which matches the popKey); if a mismatch is detected at any point, the order <strong>MUST</strong> be considered invalid.</t>
        <t>As specified in Section 4.3, if any "pk-01" challenge in any authorization transitions to invalid, the entire order <strong>MUST</strong> be immediately transitioned to invalid.</t>
      </section>
      <section anchor="finalize-request">
        <name>Finalize Request</name>
        <t>If the order has any "pk-01" challenges that were successfully validated, the client <strong>MUST</strong> send an empty finalize request:</t>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{}
]]></artwork>
        <t>The empty object {} is a valid JSON payload. Server implementations <strong>MUST</strong> accept an empty JSON object as the finalize request body when the order contains pk-01 challenges. Note: the JWS payload <strong>MUST</strong> be exactly {}. An empty-string payload carries POST-as-GET semantics in ACME (<xref target="RFC8555"/> Section 6.3), and the server <strong>MUST NOT</strong> interpret a POST-as-GET request sent to the finalize URL as a finalization request.</t>
        <t>The server <strong>MUST</strong> reject any finalize request that contains a csr field when the order includes "pk-01" challenges, returning a urn:ietf:params:acme:error:malformed error. The server <strong>MUST NOT</strong> attempt to extract a public key from the CSR or compare it with the popKey; the presence of a CSR in a "pk-01" order is a protocol error.</t>
        <t>If the order does not contain any "pk-01" challenge, the standard <xref target="RFC8555"/> finalization flow applies, and the client <strong>MUST</strong> submit a PKCS#10 CSR.</t>
      </section>
      <section anchor="certificate-issuance">
        <name>Certificate Issuance</name>
        <t>When issuing the certificate, the server uses:</t>
        <ul spacing="normal">
          <li>
            <t>Public key: The SPKI from the validated <tt>popKey / key</tt> field.</t>
          </li>
          <li>
            <t>Identifiers: The authorized identifiers from the order (e.g., dns names) populate the SAN extension. Subject DN may be determined by CA policy or a profile extension.</t>
          </li>
        </ul>
        <t>Before writing the public key into the certificate, the server <strong>MUST</strong> confirm that the SPKI is byte-for-byte identical to the SPKI from the popKey field. The server MUST NOT perform any DER normalization or re-encoding.</t>
        <t>The signature algorithm used by the CA when signing the issued certificate (e.g., <tt>sha256WithRSAEncryption</tt>, <tt>RSASSA-PSS</tt>, or <tt>ecdsa-with-SHA256</tt>) is determined by the CA's policy and is independent of the proof-of-possession signature algorithm used in the pk-01 challenge. CAs MAY continue to use their existing certificate signature algorithms; the pk-01 challenge does not impose any constraint on the certificate's own signature algorithm.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="security-model-and-threat-analysis">
        <name>Security Model and Threat Analysis</name>
        <t>The "pk-01" challenge provides a cryptographic proof that, at the time the challenge completes, the requesting entity possesses the private key corresponding to the public key declared in the popKey field. This proof does not imply any form of identifier control; identifier authorization remains the sole responsibility of existing ACME challenge types (dns-01, http-01, tls-alpn-01, email-reply-00, etc.).</t>
        <t>Security value of PoP across deployment scenarios. The value of PoP varies significantly depending on the deployment context:</t>
        <ul spacing="normal">
          <li>
            <t>Standard Web PKI (dns-01/http-01): An attacker who can pass domain control challenges can generate their own key pair. PoP here prevents accidental misconfiguration (e.g., submitting a malformed public key) but does not materially increase security against an active adversary. The primary security control in Web PKI is identifier control validation, not PoP.</t>
          </li>
          <li>
            <t>Device attestation: When combined with hardware attestation, PoP provides significant additional security. It ensures that the key whose possession is proved is the same key that the attested device controls. Without PoP, a device could pass attestation checks but then use a diﬀerent key for the certificate, breaking the binding between device identity and the certified public key.</t>
          </li>
          <li>
            <t>Escrowed encryption keys: When a KMC holds encryption keys on behalf of clients, PoP proves that the KMC actually possesses the escrowed key it claims to hold. This prevents a KMC from requesting certificates for keys it does not control.</t>
          </li>
          <li>
            <t>Proxy Certificate Management: When a network management platform requests certificates as a proxy, PoP serves as a critical security anchor. It mandates that the device (the private key holder) must be online and participate in the certificate issuance process. Even if the proxy controls order creation, it cannot bypass PoP to obtain certificates for keys outside the device's control. In proxy scenarios, PoP delivers security benefits comparable to device attestation, as it distinguishes between a proxy merely claiming to act on behalf of a device and genuine consent from the device itself. When combined with device-attest-01, a complete trust chain can be established from the device's hardware identity to the public key in the certificate.</t>
          </li>
          <li>
            <t>KEM keys: For KEM keys, PoP is not merely a security enhancement; it is the only available mechanism to prove key possession, since KEM keys cannot sign.</t>
          </li>
        </ul>
        <t>The overall security of a certificate issuance that includes "pk-01" rests on the joint satisfaction of two independent properties:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Identifier control:</strong> One or more identifier-specific challenges prove that the requester controls the identifiers to be included in the certificate's SAN (or other identity fields).</t>
          </li>
          <li>
            <t><strong>Private key possession:</strong> The "pk-01" challenge proves that the requester holds the private key corresponding to the public key that will be bound into the certificate.</t>
          </li>
        </ol>
        <t>When both conditions are met, the issued certificate cryptographically binds a controlled identifier to a controlled public key. Neither challenge type alone is suﬃcient for secure issuance.</t>
        <t>Threats outside the scope of "pk-01":</t>
        <ul spacing="normal">
          <li>
            <t>A malicious actor who legitimately controls a domain name but submits a "newOrder" with a <tt>popKey</tt> containing a third party's public key will succeed in the identifier-control challenges but will be unable to complete the "pk-01" challenge (because they do not possess the corresponding private key). The order will not become ready.</t>
          </li>
          <li>
            <t>A malicious actor who legitimately possesses a private key but does not control any authorized identifier will succeed in "pk-01" but will fail the identifier-control challenges. Again, the order will not become ready.</t>
          </li>
          <li>
            <t>"pk-01" does not defend against certificate requests originating from entities that have legitimately obtained control of both the authorized identifier and the certificate private key through out-of-band compromise. Such scenarios must be addressed through account security, revocation infrastructure, and operational practices.</t>
          </li>
        </ul>
        <t><strong>Warning on partial proof-of-possession for multi‑identifier certificates:</strong><br/>
When an order contains multiple identifiers and the CA's policy requires proof-of-possession (pk-01) only for a subset of those identifiers (e.g., only for device identifiers but not for DNS names), the overall security of the resulting certificate is limited by the weakest identifier validation. An attacker who can compromise the validation of an identifier that does not require PoP could potentially obtain a certificate that binds a controlled identifier to a public key without proving possession of the corresponding private key. CAs SHOULD either require PoP for all identifiers in a certificate or clearly document the risks of partial PoP in their Certificate Policy (CP) and Certificate Practice Statement (CPS).</t>
      </section>
      <section anchor="cryptographic-binding">
        <name>Cryptographic Binding</name>
        <t>The cryptographic binding between the certificate public key and the authorized identifiers is jointly established by the "pk-01" challenge and the byte-level public key consistency check at finalization: the PoP input includes SHA-256(raw_newOrder), binding the signature or MAC to the entire byte sequence of the "newOrder" request (including the <tt>identifiers</tt> array, the <tt>popKey</tt> field, and any other extension fields); when issuing the certificate, the server further requires the certificate public key to be byte-identical to the SPKI from the <tt>popKey</tt> field (see Section 6.3). Together, these constitute an end-to-end binding between the authorized identifiers and the public key of the issued certificate.</t>
      </section>
      <section anchor="nonce-and-kem-key-management">
        <name>Nonce and KEM Key Management</name>
        <t>The popNonce field <strong>MUST</strong> have at least 128 bits of entropy <xref target="RFC4086"/> and <strong>MUST NOT</strong> contain characters outside the Base64URL alphabet (including the padding character =). The <tt>popNonce</tt> <strong>MUST</strong> be generated using the CSPRNG as specified in <xref target="RFC4086"/>, preferably one compliant with NIST SP 800-90A. The same nonce <strong>MUST NOT</strong> be used for multiple challenges; once the challenge enters a terminal state, the server <strong>MUST</strong> immediately mark the nonce as consumed, and any subsequent request carrying the same <tt>popNonce</tt> <strong>MUST</strong> be rejected.</t>
        <t>To manage memory in high‑volume deployments, servers <strong>MAY</strong> implement nonce tracking using a time‑based sliding window (e.g., remember consumed nonces for a limited period, such as twice the maximum expected challenge lifetime, after which the nonce can be forgotten). Servers <strong>SHOULD</strong> ensure that the window is long enough to cover all legitimate retries and finalisation attempts.</t>
        <t>The <tt>popNonce</tt> value is transmitted over HTTPS and is protected in transit by TLS. However, if the <tt>popNonce</tt> is exposed through server logs, debugging output, or error messages, an attacker who obtains the <tt>popNonce</tt> before the legitimate client submits its proof could potentially pre-compute a valid signature. Servers <strong>SHOULD NOT</strong> log the raw nonce value; instead, they <strong>SHOULD</strong> log a cryptographic hash of the nonce (e.g., SHA-256(popNonce_bytes)).</t>
        <t>In KEM key mode, mac_key <strong>MUST</strong> be derived via HKDF <xref target="RFC5869"/> from <tt>shared_secret</tt> obtained through KEM Decapsulate; using shared_secret directly as the HMAC key does not satisfy the key derivation requirements of <xref target="NIST-SP-800-56C"/>. The HKDF info string "ACME-pk-01-KEM v1" isolates the derived key from any keys that might be derived from the same KEM public key in other protocols (such as TLS, JOSE, etc.). An empty salt is used in the HKDF-Extract step because the shared secret from ML-KEM possesses sufficient entropy; per <xref target="RFC5869"/>, an empty salt is equivalent to the default all-zero salt, and this choice is consistent with the provisions for the default salt in two-step key derivation in <xref target="NIST-SP-800-56C"/>.</t>
        <t>When comparing the client-submitted proof with the locally computed HMAC output, the server <strong>MUST</strong> use constant-time comparison to avoid leaking byte-level information through timing side channels. This requirement is normative because timing leaks in MAC verification can enable brute-force attacks against the MAC key.</t>
        <t>Servers <strong>SHOULD</strong> implement rate limiting on "pk-01" challenge creation and proof submission, limiting the number of challenges per account and per IP address over time. For KEM key mode, where the Encapsulate operation is computationally expensive, rate limiting and concurrency limits (see Section 9.1.4) are particularly important.</t>
      </section>
      <section anchor="algorithm-and-key-rejection">
        <name>Algorithm and Key Rejection</name>
        <t>The server <strong>SHOULD</strong> reject key types and signature/KEM algorithms that do not meet current security baselines (see Section 5.1 and Section 5.2). The server <strong>SHOULD</strong> declare the supported key types and algorithm sets in the Directory metadata.</t>
      </section>
      <section anchor="revocation-of-kem-bound-certificates">
        <name>Revocation of KEM-Bound Certificates</name>
        <t>Since KEM keys do not cryptographically support signature operations, revocation (per <xref target="RFC8555"/> Section 7.6) of a certificate bound to a KEM public key can only be initiated by the ACME account key; the path of "signing the revocation request with the certificate private key" is not applicable to such certificates.</t>
        <t>This creates a structural dependency: the security of KEM certificate revocation relies entirely on the security of the ACME account key. For signature certificates, there is a second factor — the certificate private key can independently authorize revocation. For KEM certificates, this second factor does not exist.</t>
        <t>This dependency has a circular aspect when combined with short-lived certificates. Short-lived certificates are often recommended as a mitigation for revocation limitations. However, automated renewal of short-lived certificates itself depends on the ACME account key. If the account key is compromised, the attacker can both prevent legitimate renewal and request replacement certificates.</t>
        <t>Operational mitigations include:</t>
        <ul spacing="normal">
          <li>
            <t>Protecting ACME account keys in hardware security modules (HSMs) or secure enclaves.</t>
          </li>
          <li>
            <t>Requiring multi-factor authentication for account key operations.</t>
          </li>
          <li>
            <t>Implementing out-of-band revocation confirmation channels (e.g., confirming revocation requests through a separate administrative interface).</t>
          </li>
          <li>
            <t>Issuing KEM-bound certificates with validity periods that balance the risk of revocation failure against the overhead of frequent renewal.</t>
          </li>
        </ul>
        <t>These mitigations are operational rather than protocol-level. This is appropriate: the limitation is cryptographic, not a protocol deficiency, and cannot be fully resolved at the ACME layer.</t>
        <t>Relying party awareness: Protocols that validate certificate revocation status should be aware that some certificates may not support private-key-based revocation, and should not treat the absence of this capability as an error. Certificate transparency and OCSP stapling remain fully functional for KEM certificates. KEM certificates are structurally identical to traditional X.509 certificates and require no modifications to CT logs or OCSP responders. However, CT log servers SHOULD accept certificates carrying the KEM AlgorithmIdentifier OIDs (listed in Section 8.5) even if they do not perform specialised validation of those key types; rejecting such certificates would break transparency for a valid class of certificates.</t>
        <t>Key Usage for KEM certificates:</t>
        <t>X.509 certificates containing a KEM public key (e.g., ML-KEM) do not fit neatly into existing Key Usage bits defined for signature or encryption. CAs issuing such certificates SHOULD set the keyEncipherment bit (consistent with the key’s purpose in key exchange). If future PKIX standards define a dedicated keyAgreement or keyEncapsulation bit, CAs MAY adopt those. In the absence of such bits, the CA SHOULD include a key usage extension that reflects the intended use as permitted by local policy. The absence of a perfect match does not invalidate the certificate; relying parties SHOULD accept KEM certificates for key encapsulation purposes when the key usage extension allows keyEncipherment.</t>
        <t><strong>Application support for KEM certificates:</strong><br/>
The use of KEM public keys in application protocols such as TLS or S/MIME is not yet fully standardized. Relying parties MUST ensure that their TLS, S/MIME, or other relevant implementations can correctly parse and handle X.509 certificates containing KEM AlgorithmIdentifier OIDs (see Section 8.5). Deployers should be aware that KEM certificates may not be usable in all existing systems until broader protocol support is available. This document provides the necessary infrastructure for issuing such certificates; it does not mandate their immediate applicability.</t>
      </section>
      <section anchor="algorithm-identifier-stability-for-post-quantum-algorithms">
        <name>Algorithm Identifier Stability for Post-Quantum Algorithms</name>
        <t>This document references AlgorithmIdentifier OIDs defined in FIPS 203 <xref target="FIPS-203"/>, FIPS 204 <xref target="FIPS-204"/>, and FIPS 205 <xref target="FIPS-205"/>. While these OIDs are stable as of the publication of those standards, implementers should be aware that algorithm identifiers occasionally change during the standardization process or when algorithms are revised. If a future update to these standards changes the OIDs, implementations <strong>MUST</strong> ensure that the OIDs used in the popKey/key fields, in the "pk-01" challenge processing, and in the issued certificate are consistent. An OID mismatch will cause PoP verification to fail or the certificate chain to be invalid.</t>
        <t>If NIST publishes errata or updates to FIPS 203, FIPS 204, or FIPS 205, the IANA registry established in Section 8.5 will be updated accordingly. Implementers <strong>SHOULD</strong> follow the latest published version of these standards. During transition periods, servers <strong>SHOULD</strong> support both old and new OIDs, and advertise their support in the Directory metadata.</t>
        <t>For algorithms whose OIDs are marked as TBD (e.g., SLH-DSA parameter sets in Section 8.5), the following transition procedure applies when NIST finalises the OIDs:</t>
        <ul spacing="normal">
          <li>
            <t>A six‑month dual support window begins upon publication of the definitive OIDs. During this period, servers <strong>SHOULD</strong> accept both the old (draft) OID (if any) and the new official OID.</t>
          </li>
          <li>
            <t>Clients <strong>SHOULD</strong> use the new OID after the window expires.</t>
          </li>
          <li>
            <t>The IANA registry will be updated to reflect the final OIDs.</t>
          </li>
          <li>
            <t>Implementers <strong>SHOULD</strong> monitor the NIST CSOR and IANA registry for changes.</t>
          </li>
        </ul>
      </section>
      <section anchor="relationship-to-established-pop-security">
        <name>Relationship to Established PoP Security</name>
        <t>The security properties of the PoP mechanism defined here align with those established for PoP tokens <xref target="RFC8747"/> and DPoP <xref target="RFC9449"/>. Readers should consult the Security Considerations sections of those documents for a broader discussion of threats such as key exfiltration, replay of proofs, and the importance of context binding. In particular, the use of order-specific nonces and the inclusion of SHA-256(raw_newOrder) in the proof input provide freshness and anti-replay guarantees within the ACME transaction, analogous to the DPoP nonce and the binding to the HTTP request URI.</t>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>The popKey field carries the public key to be certified, which is intended to be included in a publicly-visible certificate. However, the reuse of the same popKey across multiple orders can serve as a correlation identifier, linking otherwise unrelated certificate requests to the same entity. This risk is most pronounced when orders use diﬀerent domain names or identity attributes.</t>
        <t>There is a trade-oﬀ between privacy and computational eﬃciency:</t>
        <ul spacing="normal">
          <li>
            <t>Fresh key per order (privacy-preserving): Prevents cross-order correlation via popKey. Recommended for general deployments, particularly those using standard Web PKI certificates. The additional key generation overhead is typically negligible compared to the overall ACME transaction.</t>
          </li>
          <li>
            <t>Reused key across orders (eﬃcient): Reduces key generation overhead but creates a long-term identifier. May be necessary for hardware-bound keys where key generation is expensive or where the key is pre-provisioned (e.g., TPM-bound keys, escrowed encryption keys). Deployers using this strategy should be aware of the privacy implications.</t>
          </li>
        </ul>
        <t>To mitigate this risk:</t>
        <ul spacing="normal">
          <li>
            <t>Clients <strong>SHOULD</strong> generate a fresh key pair for each order, as recommended in Section 9.2. This prevents cross-order correlation via the popKey.</t>
          </li>
          <li>
            <t>Servers <strong>SHOULD NOT</strong> retain popKey values beyond the lifetime of the order's authorization, except as required for certificate issuance or audit logging.</t>
          </li>
          <li>
            <t>If a client must reuse a key pair (e.g., for hardware-bound keys in IoT devices), it should be aware that the key may serve as a long-term identifier for that device.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="acme-directory-metadata-fields-registry">
        <name>ACME Directory Metadata Fields Registry</name>
        <t><tt>popSupported</tt> appears inside the "meta" object. IANA is requested to add the following entry to the "ACME Directory Metadata Fields" registry (established by <xref target="RFC8555"/>). The Change Controller is the IETF.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Field Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">popSupported</td>
              <td align="left">boolean</td>
              <td align="left">this document</td>
            </tr>
          </tbody>
        </table>
        <t>The <tt>popSupported</tt> field, when present, MUST be placed inside the "meta" object of the directory response. It indicates that the server supports the "pk-01" challenge as defined in this document.</t>
      </section>
      <section anchor="acme-validation-methods-registry">
        <name>ACME Validation Methods Registry</name>
        <t>IANA is requested to add the following entry to the "ACME Validation Methods" registry. The Change Controller is the IETF.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Identifier Type</th>
              <th align="left">ACME</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">pk-01</td>
              <td align="left">(any)</td>
              <td align="left">Y</td>
              <td align="left">this document</td>
            </tr>
          </tbody>
        </table>
        <t>"pk-01" is a PoP challenge and is not bound to a specific identifier type (the standard columns of the "ACME Validation Methods" registry do not include a notes column; this clarification is provided in the body text).</t>
      </section>
      <section anchor="acme-order-object-fields-registry">
        <name>ACME Order Object Fields Registry</name>
        <t>IANA is requested to add the following entries to the "ACME Order Object Fields" registry established by <xref target="RFC8555"/>. The Change Controller is the IETF.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Field Type</th>
              <th align="left">Configurable</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">popKey</td>
              <td align="left">string</td>
              <td align="left">true</td>
              <td align="left">this document</td>
            </tr>
            <tr>
              <td align="left">popKeyAccepted</td>
              <td align="left">boolean</td>
              <td align="left">false</td>
              <td align="left">this document</td>
            </tr>
          </tbody>
        </table>
        <t><tt>popKey</tt> is set by the client in the "newOrder" request (configurable); <tt>popKeyAccepted</tt> is set only by the server in the order object, and a value of true indicates that the server has accepted the popKey and will use pk-01 (absence of the field indicates that the server did not process popKey; see Section 3.3).</t>
        <t>The fields within the "pk-01" challenge object (key, nonce, challenge_ciphertext) and the challenge response field (proof) are defined by the challenge type itself (see Section 4.2 and Section 5.3). Following <xref target="RFC8555"/> convention, challenge object fields have no separate IANA registry, and no additional IANA action is required.</t>
      </section>
      <section anchor="acme-error-types-registry">
        <name>ACME Error Types Registry</name>
        <t>IANA is requested to add the following entries to the "ACME Error Types" registry. The Change Controller is the IETF.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">badPoP</td>
              <td align="left">The proof-of-possession verification has failed</td>
              <td align="left">this document</td>
            </tr>
            <tr>
              <td align="left">popNotSupported</td>
              <td align="left">The server does not support the pk-01 challenge</td>
              <td align="left">this document</td>
            </tr>
            <tr>
              <td align="left">popKeyRejectedByPolicy</td>
              <td align="left">The server supports pk-01 but refused to accept the popKey due to local policy (e.g., account not authorised for CSR‑less issuance).</td>
              <td align="left">this document</td>
            </tr>
          </tbody>
        </table>
        <t>(The "ACME Error Types" registry does not include an HTTP status code column; both errors are typically returned with HTTP 400, as shown in the examples in Section 9.1.5.)</t>
      </section>
      <section anchor="acme-pop-key-algorithm-registry">
        <name>ACME PoP Key Algorithm Registry</name>
        <t>IANA is requested to establish a new registry named "ACME PoP Key Algorithms" to facilitate future updates to the set of supported signature and KEM algorithms without requiring a new RFC. The Change Controller is the IETF.</t>
        <t>Initial contents:</t>
        <t><strong>Signature Algorithms:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Algorithm Name</th>
              <th align="left">Key Type</th>
              <th align="left">SPKI Algorithm Identification</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ECDSA-SHA-256</td>
              <td align="left">EC P-256</td>
              <td align="left">id-ecPublicKey (1.2.840.10045.2.1) + secp256r1 (1.2.840.10045.3.1.7)</td>
              <td align="left">this document, <xref target="RFC5480"/></td>
            </tr>
            <tr>
              <td align="left">ECDSA-SHA-384</td>
              <td align="left">EC P-384</td>
              <td align="left">id-ecPublicKey (1.2.840.10045.2.1) + secp384r1 (1.3.132.0.34)</td>
              <td align="left">this document, <xref target="RFC5480"/></td>
            </tr>
            <tr>
              <td align="left">Ed25519</td>
              <td align="left">Ed25519</td>
              <td align="left">1.3.101.112</td>
              <td align="left">this document, <xref target="RFC8032"/></td>
            </tr>
            <tr>
              <td align="left">RSASSA-PSS</td>
              <td align="left">RSA</td>
              <td align="left">rsaEncryption (1.2.840.113549.1.1.1)</td>
              <td align="left">this document, <xref target="RFC7518"/></td>
            </tr>
            <tr>
              <td align="left">ML-DSA-44</td>
              <td align="left">ML-DSA-44</td>
              <td align="left">2.16.840.1.101.3.4.3.17</td>
              <td align="left">this document, <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">ML-DSA-65</td>
              <td align="left">ML-DSA-65</td>
              <td align="left">2.16.840.1.101.3.4.3.18</td>
              <td align="left">this document, <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">ML-DSA-87</td>
              <td align="left">ML-DSA-87</td>
              <td align="left">2.16.840.1.101.3.4.3.19</td>
              <td align="left">this document, <xref target="FIPS-204"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-128s</td>
              <td align="left">SLH-DSA-SHA2-128s</td>
              <td align="left">2.16.840.1.101.3.4.3.20</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-128f</td>
              <td align="left">SLH-DSA-SHA2-128f</td>
              <td align="left">2.16.840.1.101.3.4.3.21</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-192s</td>
              <td align="left">SLH-DSA-SHA2-192s</td>
              <td align="left">2.16.840.1.101.3.4.3.22</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-192f</td>
              <td align="left">SLH-DSA-SHA2-192f</td>
              <td align="left">2.16.840.1.101.3.4.3.23</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-256s</td>
              <td align="left">SLH-DSA-SHA2-256s</td>
              <td align="left">2.16.840.1.101.3.4.3.24</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
            <tr>
              <td align="left">SLH-DSA-SHA2-256f</td>
              <td align="left">SLH-DSA-SHA2-256f</td>
              <td align="left">2.16.840.1.101.3.4.3.25</td>
              <td align="left">this document, <xref target="FIPS-205"/></td>
            </tr>
          </tbody>
        </table>
        <t>Note: The OIDs for ML-DSA and SLH-DSA are assigned under the sigAlgs arc of the NIST CSOR (Computer Security Objects Register); the ML-KEM OIDs are assigned under the kems arc. Implementers should verify against the latest NIST CSOR publication.</t>
        <t><strong>KEM Algorithms:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Algorithm Name</th>
              <th align="left">Key Type</th>
              <th align="left">Public key Length (bytes)</th>
              <th align="left">OID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-KEM-512</td>
              <td align="left">ML-KEM-512</td>
              <td align="left">768</td>
              <td align="left">2.16.840.1.101.3.4.4.1</td>
              <td align="left">this document, <xref target="FIPS-203"/></td>
            </tr>
            <tr>
              <td align="left">ML-KEM-768</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">1088</td>
              <td align="left">2.16.840.1.101.3.4.4.2</td>
              <td align="left">this document, <xref target="FIPS-203"/></td>
            </tr>
            <tr>
              <td align="left">ML-KEM-1024</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">1568</td>
              <td align="left">2.16.840.1.101.3.4.4.3</td>
              <td align="left">this document, <xref target="FIPS-203"/></td>
            </tr>
          </tbody>
        </table>
        <t>New entries to this registry are assigned on a Specification Required basis per <xref target="RFC8126"/>. The designated expert should verify that the proposed algorithm has a publicly available specification and that the OID is correctly registered.</t>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="acme-server-ca">
        <name>ACME Server (CA)</name>
        <section anchor="obtaining-neworderhash">
          <name>Obtaining newOrder_hash</name>
          <t>The input <tt>raw_newOrder</tt> to <tt>newOrder_hash</tt> is the raw byte sequence of the "newOrder" request's JWS protected payload after BASE64URL-DECODE and before JSON parsing.</t>
          <t>The server <strong>MUST NOT</strong> serialize the parsed JSON object back to bytes for use as <tt>raw_newOrder</tt>: JSON normalization (field ordering, whitespace handling, Unicode escape forms, number representations, etc.) would alter the byte representation, causing the server's computed hash to diﬀer from the client's.</t>
          <t>The following implementation pattern is <strong>RECOMMENDED</strong> to avoid serialization ambiguities and ensure consistency:</t>
          <ol spacing="normal" type="1"><li>
              <t>When receiving a "newOrder" request, the server first extracts and base64url-decodes the JWS protected payload, producing <tt>raw_newOrder</tt>.</t>
            </li>
            <li>
              <t>The server <strong>MUST</strong> compute and store newOrder_hash = SHA-256(raw_newOrder) immediately after JWS signature verification succeeds, before parsing the JSON body. If the order creation subsequently fails (e.g., due to an invalid identifier), the server <strong>SHOULD</strong> discard the stored <tt>newOrder_hash</tt> as part of the transaction rollback.</t>
            </li>
            <li>
              <t>The server <strong>MAY</strong> also persist raw_newOrder for auditing purposes, but newOrder_hash is suﬃcient for "pk-01" challenge validation.</t>
            </li>
            <li>
              <t>The server <strong>MUST NOT</strong> use any other representation of the newOrder payload (e.g., a re-serialized JSON object) when computing the hash for PoP validation.</t>
            </li>
          </ol>
          <t>By computing the hash at the point of signature verification, the server guarantees that the same byte sequence that was authenticated by the client's account key is used for the "pk-01" proof binding.</t>
          <t>For performance optimization in high-volume deployments, the server <strong>SHOULD</strong> maintain a secondary index on the <tt>newOrder_hash</tt> value in the order database. Note that <tt>newOrder_hash</tt> is not guaranteed to be unique — two byte-identical newOrder payloads (e.g., a retry carrying the same identifiers and popKey) produce the same hash — so it <strong>MUST NOT</strong> be used as a primary key; the authoritative lookup key is the order ID, and the <tt>newOrder_hash</tt> index serves only to accelerate lookup during the challenge validation phase.</t>
          <t>While the method described above (retaining the exact bytes of the JWS payload) is the primary requirement, implementers seeking additional interoperability across different JSON libraries MAY also compute a canonical representation of the order object using JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/> for debug or fallback purposes. However, the only authoritative binding is based on the raw bytes as transmitted; clients and servers MUST NOT re‑serialize the JSON object from parsed data for the purpose of computing newOrder_hash. Implementers are encouraged to test their JSON serialisation with a fixed test vector to ensure that field ordering and whitespace are stable.</t>
        </section>
        <section anchor="storing-and-validating-popkey">
          <name>Storing and Validating popKey</name>
          <t>Upon receiving <tt>popKey</tt> in a newOrder request, the server <strong>MUST</strong>:</t>
          <ul spacing="normal">
            <li>
              <t>Decode and validate the SPKI per Section 3.2. Implementations <strong>SHOULD</strong> use ASN.1 parsing libraries that have been security-audited and fuzz-tested, and <strong>SHOULD</strong> enforce a maximum length on the popKey field (e.g., 4096 bytes — sufficient for the largest SPKI among the algorithms in this document, ML-DSA-87, whose Base64URL encoding is roughly 3.5KB) to mitigate malformed input attacks. ACME servers <strong>SHOULD</strong> accept a maximum newOrder payload size of 64KB to leave headroom for future larger-key algorithms registered per Section 8.5. Servers <strong>MAY</strong> advertise this limit in the directory object.</t>
            </li>
            <li>
              <t>Store the exact bytes received as the authoritative public key for the order.</t>
            </li>
            <li>
              <t>Ensure that all "pk-01" challenges created for the order use the byte-identical SPKI in their key field.</t>
            </li>
          </ul>
        </section>
        <section anchor="signature-key-mode">
          <name>Signature Key Mode</name>
          <ul spacing="normal">
            <li>
              <t>The server <strong>MUST</strong> generate a unique nonce for each "pk-01" challenge and immediately mark it as consumed once the challenge reaches a terminal state.</t>
            </li>
            <li>
              <t>The byte length of nonce <strong>SHOULD</strong> be between 16 and 32 bytes.</t>
            </li>
            <li>
              <t>The server <strong>MUST</strong> perform SPKI format validation on the key field and store it as the originally received bytes (see Section 9.1.2 and Section 6.3).</t>
            </li>
          </ul>
        </section>
        <section anchor="kem-key-mode">
          <name>KEM Key Mode</name>
          <ul spacing="normal">
            <li>
              <t>After the KEM Encapsulate operation completes, the server <strong>MUST</strong>:  </t>
              <ul spacing="normal">
                <li>
                  <t>Immediately derive mac_key per Section 5.2;</t>
                </li>
                <li>
                  <t>Store <tt>mac_key</tt> in the order record. Implementations <strong>SHOULD</strong> protect mac_key in memory using secure key storage mechanisms (e.g., locked memory pages, hardware security modules, or secure enclaves) where available, especially in multi-tenant CA environments;</t>
                </li>
                <li>
                  <t>Immediately destroy shared_secret, HKDF intermediate states, and all temporary materials.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>mac_key</tt> <strong>MUST</strong> be immediately destroyed once the challenge reaches a terminal state.</t>
            </li>
            <li>
              <t>When comparing the client-submitted proof with the locally computed HMAC output, the server <strong>MUST</strong> use constant-time comparison to avoid timing side channels.</t>
            </li>
            <li>
              <t>Servers <strong>SHOULD</strong> implement rate limiting specifically for KEM Encapsulate operations, as they are computationally more expensive than signature verification.</t>
            </li>
            <li>
              <t>In addition to rate limiting, servers <strong>SHOULD</strong> implement a maximum concurrency limit for KEM Encapsulate operations. When the concurrency limit is reached, the server <strong>MAY</strong> queue additional requests or return a 503 (Service Unavailable) response with a Retry-After header. The concurrency limit <strong>SHOULD</strong> be set based on the available CPU resources and the expected latency of KEM Encapsulate operations.</t>
            </li>
          </ul>
        </section>
        <section anchor="error-returns">
          <name>Error Returns</name>
          <t>pk-01-related errors <strong>SHOULD</strong> use the <xref target="RFC9457"/> Problem Details format:</t>
          <artwork><![CDATA[
{
  "type": "urn:ietf:params:acme:error:badPoP",
  "detail": "Proof-of-possession verification failed",
  "status": 400
}
]]></artwork>
          <t>When returning a badPublicKey error due to algorithm or key parameter incompatibility, the server <strong>SHOULD</strong> include specific details in the detail field, for example:</t>
          <artwork><![CDATA[
{
  "type": "urn:ietf:params:acme:error:badPublicKey",
  "detail": "RSA key length 2048 is below the required minimum of 3072",
  "status": 400
}
]]></artwork>
        </section>
        <section anchor="audit-logging">
          <name>Audit Logging</name>
          <t>To support compliance and operational requirements, CAs <strong>SHOULD</strong> record the following information for each "pk-01" challenge:</t>
          <ul spacing="normal">
            <li>
              <t>Order ID and authorization ID.</t>
            </li>
            <li>
              <t>The SPKI of the <tt>popKey</tt> (or a cryptographic hash thereof).</t>
            </li>
            <li>
              <t>The algorithm type and parameters.</t>
            </li>
            <li>
              <t>A hash of the <tt>popNonce</tt> (for signature key mode) or the <tt>challenge_ciphertext</tt> (for KEM key mode).</t>
            </li>
            <li>
              <t>The <tt>newOrder_hash</tt> value used for PoP binding.</t>
            </li>
            <li>
              <t>Timestamp of client proof submission.</t>
            </li>
            <li>
              <t>Verification result (success or failure, and error type if applicable).</t>
            </li>
            <li>
              <t>Identifier of the CA key used for certificate issuance.</t>
            </li>
          </ul>
          <t>This information enables post-issuance audit of the PoP verification process and facilitates troubleshooting of failed challenges. CAs should ensure that these audit logs satisfy applicable compliance frameworks, including CAB/F Baseline Requirements for certificate request logging and ETSI TS 119 403 event log requirements. The audit recommendations in this document are compatible with these frameworks but do not replace their specific requirements.</t>
        </section>
      </section>
      <section anchor="acme-client">
        <name>ACME Client</name>
        <ul spacing="normal">
          <li>
            <t>The client <strong>MUST</strong> ensure that the private key used for the signature or KEM operation strictly corresponds to the public key declared in the popKey field.</t>
          </li>
          <li>
            <t>The client <strong>MUST</strong> retain the exact byte sequence of the newOrder request's JWS payload locally, and use the same byte sequence to compute <tt>newOrder_hash</tt> during the "pk-01" challenge phase. The client <strong>MUST NOT</strong> serialize a parsed JSON object back to bytes for use as <tt>raw_newOrder</tt>. In practice, this means the client should capture the raw JSON payload bytes before constructing the JWS and sending the HTTP request. For example:
            </t>
            <ul spacing="normal">
              <li>
                <t>In Python: construct the JSON payload as a string literal or manually concatenated bytes (e.g., b'{"identifiers":[{"type":"dns","value":"example.com"}],"popKey":"..."}'). Retain this exact byte sequence for later hash computation, then construct the JWS and send the request. Do not use <tt>json.dumps()</tt> on a dictionary, as it may produce different byte representations (e.g., field ordering, whitespace) that would change <tt>newOrder_hash</tt>. If a dictionary must be used, ensure that the serialization is fully deterministic and matches the bytes that will be transmitted; the safest approach is to keep the raw bytes from the start.</t>
              </li>
              <li>
                <t>In Go: json.Marshal the payload to a []byte, retain this slice, then use it for both JWS construction and later hash computation.</t>
              </li>
              <li>
                <t>In Java: serialize the payload using a JSON library that produces deterministic output, retain the byte array, then construct the JWS and send the request.
<strong>Implementation note:</strong> The client MUST use the exact byte sequence that will be sent as the JWS payload. Constructing the payload from a dictionary and then serializing it (e.g., with <tt>json.dumps</tt>) can lead to nondeterministic field ordering or whitespace, causing the computed <tt>newOrder_hash</tt> to differ from the bytes actually transmitted. The recommended practice is to construct the JSON payload as a raw byte string or to use a deterministic serialization that is guaranteed to match the wire format. The examples below illustrate this principle.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The key principle is to retain the exact bytes that were used as the JWS payload, before Base64URL encoding.</t>
          </li>
          <li>
            <t>As an optimization, the client <strong>MAY</strong> compute newOrder_hash immediately after sending the "newOrder" request, and then discard the raw bytes, retaining only the 32-byte hash value.</t>
          </li>
          <li>
            <t>The client <strong>SHOULD</strong> generate a fresh key pair for each order. Reuse of the same popKey across multiple orders is <strong>NOT RECOMMENDED</strong> as it may weaken the binding between a specific certificate and its intended context, and could complicate revocation if the private key is later compromised.</t>
          </li>
          <li>
            <t>The client <strong>SHOULD</strong> check the popSupported field in the Directory metadata before including popKey in a newOrder request. If popSupported is absent or false, the client <strong>SHOULD</strong> fall back to the standard CSR-based flow without sending popKey.</t>
          </li>
          <li>
            <t>The client <strong>MUST</strong> select the PoP construction method based on the field present in the "pk-01" challenge object (nonce or challenge_ciphertext).</t>
          </li>
          <li>
            <t>When the order does not contain any "pk-01" challenge (or the order object lacks <tt>popKeyAccepted: true</tt>), the finalize stage <strong>MUST</strong> submit a PKCS#10 CSR as defined in <xref target="RFC8555"/>.</t>
          </li>
          <li>
            <t>The client <strong>SHOULD</strong> use a key pair dedicated to the certificate, distinct from the ACME account key.</t>
          </li>
        </ul>
        <t>For clients using HSMs or PKCS#11 tokens, the popKey field's SPKI can be exported from the hardware module's key handle. The PoP proof should be computed using the hardware module's signature or decryption interfaces rather than exporting the private key to software. ACME client libraries <strong>SHOULD</strong> provide dedicated API methods to support the "pk-01" flow, such as an order_with_popkey (identifiers, private_key) method that automatically handles SPKI extraction, <tt>raw_newOrder</tt> retention, and PoP proof computation. Libraries should also automatically detect the server's <tt>popSupported</tt> metadata and select the appropriate issuance flow.</t>
        <t><strong>Handling network retries:</strong><br/>
If the client experiences a transient network error while sending the "newOrder" request and chooses to retry the same request (i.e., with the same order content), it SHOULD keep the original <tt>raw_newOrder</tt> bytes unchanged and reuse the previously computed <tt>newOrder_hash</tt>. However, the server may have already consumed the original nonce (if any) associated with the previous attempt. To avoid nonce reuse issues, the client SHOULD create a <strong>new order</strong> (a fresh <tt>newOrder</tt> request) for each retry, rather than resending the identical JWS payload. Retrying the same order with the same nonce may be rejected by the server as a replay. The client can obtain a fresh nonce by sending a <tt>GET /new-nonce</tt> request before each retry.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="signature-key-with-dns-identifier">
        <name>Signature Key with DNS Identifier</name>
        <t>The applicant has DNS control over "example.com" and a P-256 key pair (private key d, public key SPKI bytes <tt>&lt;spki_bytes&gt;</tt>). The server advertises <tt>popSupported: true</tt> in its Directory metadata.</t>
        <t><strong>Step 1: newOrder request</strong></t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json
{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "popKey": "<base64url(spki_bytes)>"
}
]]></artwork>
        <t><strong>Step 2: Server returns order and authorization with challenges</strong></t>
        <t>Order object:</t>
        <artwork><![CDATA[
{
  "status": "pending",
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "authorizations": [
    "https://acme.example.com/acme/authz/dnsAuthz"
  ],
  "popKey": "<base64url(spki_bytes)>",
  "popKeyAccepted": true,
  "finalize": "https://acme.example.com/acme/finalize/xyz"
}
]]></artwork>
        <t>Authorization for the dns identifier:</t>
        <artwork><![CDATA[
{
  "status": "pending",
  "identifier": { "type": "dns", "value": "example.com" },
  "challenges": [
    {
    "type": "dns-01",
    "url": "https://acme.example.com/acme/chall/dns01",
    "status": "pending",
    "token": "some-dns-token"
    },
    {
    "type": "pk-01",
    "url": "https://acme.example.com/acme/chall/pk789",
    "status": "pending",
    "key": "<base64url(spki_bytes)>",
    "popNonce": "Kz3mVpQeRd9fLwYbN5hXuT6oJsIc0vAg2nEp1yMrFqZ"
    }
  ]
}
]]></artwork>
        <t><strong>Step 3: Client completes both challenges</strong></t>
        <t>Client fulfills dns-01 as per <xref target="RFC8555"/> Section 8.4. For "pk-01", it computes:</t>
        <artwork><![CDATA[
raw_newOrder   = <exact bytes of step 1 newOrder JSON>
newOrder_hash  = SHA-256(raw_newOrder)
popNonce_bytes    = base64url-decode("Kz3mVpQeRd9fLwYbN5hXuT6oJslc0vAg2nEp1yMrFqZ")
to_sign        = "ACME-pk-01-sig v1:" || popNonce_bytes || newOrder_hash
proof          = base64url( ECDSA-Sign(d, to_sign) )    # IEEE P1363 encoding
]]></artwork>
        <t>And POSTs:</t>
        <artwork><![CDATA[
POST /acme/chall/pk789 HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{ "proof": "<base64url signature>" }
]]></artwork>
        <t><strong>Step 4: Both challenges become valid, order ready, finalize</strong></t>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{}
]]></artwork>
        <t>The server issues a certificate with example.com in SAN and the SPKI from the popKey as public key.</t>
      </section>
      <section anchor="kem-key-with-device-attestation">
        <name>KEM Key with Device Attestation</name>
        <t>An IoT device with an ML-KEM-768 key pair and a TPM-based device identity enrolls. The server advertises popSupported: true and attaches both device-attest-01 and pk-01 challenges to the device identifier authorization.</t>
        <t><strong>Step 1: newOrder request</strong></t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json
{
  "identifiers": [
    { "type": "dns", "value": "device-serial-12345" }
  ],
  "popKey": "<base64url(ml-kem-768-spki)>"
}
]]></artwork>
        <t><strong>Step 2: Server returns order and authorization with challenges</strong></t>
        <t>Order object includes popKeyAccepted: true. Authorization contains both device-attest-01 and "pk-01" challenges. The "pk-01" challenge contains <tt>challenge_ciphertext</tt>.</t>
        <t><strong>Step 3: Client performs KEM PoP</strong></t>
        <artwork><![CDATA[
ct = base64url-decode(challenge_ciphertext)
shared_secret = ML-KEM-768.Decapsulate(sk, ct)
prk = HKDF-Extract(salt = "", IKM = shared_secret)
mac_key = HKDF-Expand(prk, info = "ACME-pk-01-KEM v1", L = 32)
raw_newOrder = <exact bytes of step 1 newOrder JSON>
newOrder_hash = SHA-256(raw_newOrder)
proof = base64url( HMAC-SHA-256(mac_key, newOrder_hash) )
]]></artwork>
        <t>And POSTs:</t>
        <artwork><![CDATA[
POST /acme/chall/pk890 HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{ "proof": "<base64url MAC>" }
]]></artwork>
        <t><strong>Step 4: Both challenges valid, finalize</strong></t>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{}
]]></artwork>
      </section>
      <section anchor="fallback-when-server-does-not-support-pk-01">
        <name>Fallback When Server Does Not Support pk-01</name>
        <t>A client that requests "pk-01" but whose server does not support it (Directory has no <tt>popSupported: true</tt>) receives a clear indication to fall back to CSR.</t>
        <t><strong>Step 1: Client checks Directory</strong></t>
        <artwork><![CDATA[
{
  "newNonce": "https://acme.example.com/acme/new-nonce",
  "newOrder": "https://acme.example.com/acme/new-order"
}
]]></artwork>
        <t>No <tt>popSupported</tt> field is present, so the client falls back to CSR without attempting <tt>popKey</tt>.</t>
        <t>Alternatively, if the client sends <tt>popKey</tt> anyway:</t>
        <t><strong>Step 1: newOrder request</strong></t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json
{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "popKey": "<base64url(spki_bytes)>"
}
]]></artwork>
        <t><strong>Step 2: Server rejects the request</strong></t>
        <artwork><![CDATA[
{
  "type": "urn:ietf:params:acme:error:popNotSupported",
  "detail": "The server does not support pk-01. Retry without popKey.",
  "status": 400
}
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS-203">
          <front>
            <title>Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM)</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="March" day="28"/>
          </front>
        </reference>
        <reference anchor="FIPS-204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August" day="13"/>
          </front>
        </reference>
        <reference anchor="FIPS-205">
          <front>
            <title>Stateless Hash-Based Digital Signature Standard</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August" day="13"/>
          </front>
        </reference>
        <reference anchor="X.690">
          <front>
            <title>Information technology – ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization/>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC8555" target="https://www.rfc-editor.org/info/rfc8555" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8555.xml">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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>
        <reference anchor="RFC5480" target="https://www.rfc-editor.org/info/rfc5480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
          <front>
            <title>Elliptic Curve Cryptography Subject Public Key Information</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="K. Yiu" initials="K." surname="Yiu"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5480"/>
          <seriesInfo name="DOI" value="10.17487/RFC5480"/>
        </reference>
        <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml">
          <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="RFC4086" target="https://www.rfc-editor.org/info/rfc4086" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC7518" target="https://www.rfc-editor.org/info/rfc7518" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7518.xml">
          <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="RFC5869" target="https://www.rfc-editor.org/info/rfc5869" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5869.xml">
          <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="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
          <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="RFC9457" target="https://www.rfc-editor.org/info/rfc9457" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.aaron-acme-profiles" target="https://datatracker.ietf.org/doc/html/draft-aaron-acme-profiles-01" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.aaron-acme-profiles.xml">
          <front>
            <title>Automated Certificate Management Environment (ACME) Profiles Extension</title>
            <author fullname="Aaron Gable" initials="A." surname="Gable">
              <organization>Internet Security Research Group</organization>
            </author>
            <date day="18" month="April" year="2025"/>
            <abstract>
              <t>This document defines how an ACME Server may offer a selection of different certificate profiles to ACME Clients, and how those clients may indicate which profile they want.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-aaron-acme-profiles-01"/>
        </reference>
        <reference anchor="NIST-SP-800-56C">
          <front>
            <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC7797" target="https://www.rfc-editor.org/info/rfc7797" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7797.xml">
          <front>
            <title>JSON Web Signature (JWS) Unencoded Payload Option</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2016"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents the payload of a JWS as a base64url-encoded value and uses this value in the JWS Signature computation. While this enables arbitrary payloads to be integrity protected, some have described use cases in which the base64url encoding is unnecessary and/or an impediment to adoption, especially when the payload is large and/or detached. This specification defines a means of accommodating these use cases by defining an option to change the JWS Signing Input computation to not base64url- encode the payload. This option is intended to broaden the set of use cases for which the use of JWS is a good fit.</t>
              <t>This specification updates RFC 7519 by stating that JSON Web Tokens (JWTs) MUST NOT use the unencoded payload option defined by this specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7797"/>
          <seriesInfo name="DOI" value="10.17487/RFC7797"/>
        </reference>
        <reference anchor="RFC7800" target="https://www.rfc-editor.org/info/rfc7800" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7800.xml">
          <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="RFC8747" target="https://www.rfc-editor.org/info/rfc8747" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8747.xml">
          <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="RFC9449" target="https://www.rfc-editor.org/info/rfc9449" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9449.xml">
          <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="RFC8785" target="https://www.rfc-editor.org/info/rfc8785" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC8739" target="https://www.rfc-editor.org/info/rfc8739" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8739.xml">
          <front>
            <title>Support for Short-Term, Automatically Renewed (STAR) Certificates in the Automated Certificate Management Environment (ACME)</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Lopez" initials="D." surname="Lopez"/>
            <author fullname="O. Gonzalez de Dios" initials="O." surname="Gonzalez de Dios"/>
            <author fullname="A. Pastor Perales" initials="A." surname="Pastor Perales"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>Public key certificates need to be revoked when they are compromised, that is, when the associated private key is exposed to an unauthorized entity. However, the revocation process is often unreliable. An alternative to revocation is issuing a sequence of certificates, each with a short validity period, and terminating the sequence upon compromise. This memo proposes an Automated Certificate Management Environment (ACME) extension to enable the issuance of Short-Term, Automatically Renewed (STAR) X.509 certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8739"/>
          <seriesInfo name="DOI" value="10.17487/RFC8739"/>
        </reference>
      </references>
    </references>
    <?line 1096?>

<section anchor="appendix-a">
      <name>Open Questions for Working Group Discussion</name>
      <t>This appendix summarizes design points that the authors believe would benefit from further WG discussion. These are not normative requirements, but rather an invitation for community feedback.</t>
      <section anchor="challenge-vs-new-mechanism">
        <name>Challenge vs. New Mechanism</name>
        <t>The current document models PoP as an ACME challenge ("pk-01"). An alternative approach, discussed on the WG mailing list, would introduce PoP as a new, out-of-band ACME mechanism — for example, a dedicated PoP endpoint or a reusable token — that separates PoP from the authorization challenge framework. Section 1.6 provides the rationale for the challenge-based approach. The WG is invited to comment on whether the challenge abstraction is the appropriate fit or whether a separate mechanism should be pursued.</t>
      </section>
      <section anchor="kem-pop-and-certificate-revocation">
        <name>KEM PoP and Certificate Revocation</name>
        <t>KEM keys (e.g., ML-KEM) cannot produce signatures, which eliminates the "sign the revocation request with the certificate private key" path described in <xref target="RFC8555"/> Section 7.6. This limitation is not unique to ACME; it has been identified in other IETF working groups (notably LAMPS and COSE) as a cross-protocol challenge for post-quantum KEM certificates. As of this writing, no IETF standard or working group draft defines a dedicated KEM-based revocation mechanism. Common mitigation strategies across these communities include short-lived certificates (e.g., STAR <xref target="RFC8739"/>), account-level authentication for revocation requests, multi-factor authentication, and out-of-band revocation confirmation.</t>
        <t>Section 7.5 of this document discusses the operational implications. The WG is invited to consider whether additional mechanisms (e.g., KEM-based revocation proofs) are necessary, or whether the mitigations described are suﬃcient for the deployment scenarios targeted by this document.</t>
      </section>
      <section anchor="algorithm-agility-and-post-quantum-readiness">
        <name>Algorithm Agility and Post-Quantum Readiness</name>
        <t>Section 8.5 establishes an IANA registry for PoP Key Algorithms, enabling future algorithm additions without requiring a new RFC. The initial registry contents include algorithms defined in FIPS 203, FIPS 204, and FIPS 205. The WG is invited to discuss the scope of this registry: should it also cover future non-ML-KEM algorithms (e.g., Classic McEliece, BIKE, HQC) and their associated KEM PoP mechanisms? The current registry structure is extensible to any KEM or signature algorithm.</t>
      </section>
      <section anchor="multiple-pk-01-challenges-and-key-consistency">
        <name>Multiple pk-01 Challenges and Key Consistency</name>
        <t>The current document requires that all "pk-01" challenges in an order carry the same public key, and that servers include pk-01 in all authorizations when PoP is required. This symmetric treatment is specified in Section 4.1. The WG is invited to discuss whether this is always appropriate, or whether there are scenarios where PoP should be required only on a subset of authorizations (e.g., when one identifier is considered more security-critical than others).</t>
      </section>
      <section anchor="popkeyaccepted-signal">
        <name>popKeyAccepted Signal</name>
        <t>The draft requires servers that use pk-01 to echo popKeyAccepted: true in the order object; servers that do not implement this specification will not include the field, and clients treat its absence as the fallback signal (see Section 3.3). Is this sufficient for clients to reliably detect fallback scenarios, or are there edge cases where a more explicit mechanism is needed?</t>
      </section>
      <section anchor="completeness-of-deployment-scenarios">
        <name>Completeness of Deployment Scenarios</name>
        <t>Section 1.1.1 describes deployment scenarios that motivate the "pk-01" challenge: KEM-only keys, resource-constrained IoT, identity/key attestation composition, and escrowed encryption keys. Additional scenarios noted during WG discussion include serverless/temporary workloads and privacy-enhanced deployments requiring fresh keys per order. The WG is invited to confirm that the described scenarios are suﬃcient to motivate adoption, and to identify any additional scenarios that would require changes to the protocol design.</t>
      </section>
      <section anchor="popkey-reuse-across-orders">
        <name>popKey Reuse Across Orders</name>
        <t>The current draft recommends that clients generate a fresh key pair for each order (Section 9.2). Should this recommendation be strengthened to a normative requirement (<strong>MUST NOT</strong> reuse), or is it acceptable to leave it as a non-normative recommendation to accommodate specific deployment patterns (e.g., pre-provisioned device keys that must remain stable across certificate renewals, such as TPM-bound keys)?</t>
      </section>
      <section anchor="alternatives-to-rawneworder-binding">
        <name>Alternatives to raw_newOrder Binding</name>
        <t>The current draft binds PoP proofs to SHA-256(raw_newOrder), which requires the server to retain the raw JWS payload bytes. An alternative approach, discussed during WG review, would bind the proof to a canonicalized representation of the order's identifiers and public key (e.g., using JSON Canonicalization Scheme <xref target="RFC8785"/>), or to a server-assigned orderID. The former preserves the cryptographic binding to order content while eliminating the dependency on raw bytes; the latter simplifies implementation but weakens the binding to a server-maintained reference. The WG is invited to consider these alternatives based on deployment experience.</t>
      </section>
      <section anchor="scope-boundaries-and-long-term-evolution">
        <name>Scope Boundaries and Long-Term Evolution</name>
        <t>This document defines a minimal PoP mechanism for ACME. It does not aim to solve every problem related to proof-of-possession, certificate revocation, or key management. The following topics are explicitly out of scope for this document and should be addressed by separate work items if the WG determines they are necessary:</t>
        <ul spacing="normal">
          <li>
            <t>KEM-based certificate revocation protocols.</t>
          </li>
          <li>
            <t>Composite or hybrid signature schemes for PoP.</t>
          </li>
          <li>
            <t>Integration with specific enterprise PKI deployments (e.g., AD CS, PKCS#11).</t>
          </li>
          <li>
            <t>PoP mechanisms for protocols other than ACME.</t>
          </li>
        </ul>
        <t>The WG is invited to establish these scope boundaries to prevent unbounded expansion of this specification. Lessons from the evolution of X.509 suggest that protocols benefit from clear scope constraints applied early in their lifecycle.</t>
      </section>
      <section anchor="challenge-field-naming">
        <name>Challenge Field Naming</name>
        <t>The "pk-01" challenge object uses nonce as a field name, which overlaps terminologically with ACME's existing anti-replay machinery (the Replay-Nonce header and the nonce in the JWS protected header) and may confuse implementers. Existing <xref target="RFC8555"/> challenge types use token for challenge random values. The WG is invited to discuss whether this field should be renamed (e.g., popNonce, or following the token convention) to avoid ambiguity.</t>
      </section>
    </section>
    <section anchor="appendix-b">
      <name>Appendix B. Document Revision History (Informative)</name>
      <t><strong>draft-geng-acme-public-key-00 (Initial Version)</strong>: Initial publication. Introduced the concept of a public key challenge as an alternative to CSR-based finalization. Proposed multiple challenge variants bound to diﬀerent identifier types.</t>
      <t><strong>draft-geng-acme-public-key-01</strong>: Minor editorial refinements. Clarified scope and relationship with existing ACME challenge types.</t>
      <t><strong>draft-geng-acme-public-key-02</strong>: Refined the challenge attachment model. Addressed early feedback on identifier binding semantics.</t>
      <t><strong>draft-geng-acme-public-key-03</strong>: Structural reorganization of challenge object fields. Improved alignment with RFC8555 terminology.</t>
      <t><strong>draft-geng-acme-public-key-04</strong>: Expanded challenge variants to six distinct types covering both PoP and identifier control validation. Introduced the pk_binding object in newOrder request. First draft to reference public key identity authentication protocols. Last combined version before functional split per IETF 125 feedback.</t>
      <t><strong>draft-geng-acme-public-key-05</strong>: Functional split: "pk-01" now focuses exclusively on proof-of-possession. Identifier control validation moved to draft-geng-acme-idp-01. Challenge consolidation into single pk-01 challenge. Introduced pop_mode negotiation and ALPN identifier acme-pk/1.</t>
      <t><strong>draft-geng-acme-public-key-06</strong>: Refined pop_mode semantics. Added comprehensive security considerations. Introduced initial KEM key support framework. WG adoption call issued (April 2026), did not pass due to architectural concerns regarding challenge semantics and insuﬃcient community support.</t>
      <t><strong>draft-geng-acme-public-key-07</strong>: Removed pop_mode. "pk-01" became exclusively a proof-of-possession challenge. Added popKeyAccepted and popSupported fields. Established IANA "ACME PoP Key Algorithms" registry. Added KEM revocation guidance.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
LL2U8k0rB4mqae5L3wIXqz9RoRwpCeQ0eg1I1g+E9YlFxvbKWKqeq0aKZYmw
ubMN/DRMmgAmI55ilIzcoXFK/ZR9kDeYjLQicyUVyzIfcTMU0/yJp6Bt5rB7
pcSO+GmeLdUvLQOxIlvAUXI4nUePqFQjTh1OsqOqwrmlTtrkrtca6BR6wf0l
meAO0gfYA4WcIiMBJk2bTdtz4wXMuM6WdjOsVV5gpZUq7wXODuoho912eSU8
3MXSUVocnf/28CxahxX2M3bOKh2JRPeLpN6z0aEoreLNCkEBNHnsXeydnQpv
FodgVhH6Hn/julnjIgIfgdSN4MxTXwzKckLEEnsfFjEVJtTzX5fztyk3qfvN
edh3yGE2aoxAJCPKNlS7VnQWAs6K/cM29xr6DKfPUFjg5A2Ya+sYmqA95TNF
R8365mDz4YNv8rLai/DrgVnwwwcHfDP7mGuzZyt7r/8Vrvuv0NrScEjgcYn+
jJ9F0XsfJiHXS6S+l9rGfsSf/4XjGuqFidZ+7TDcHb953d+s2WiHrH5rT5MX
OI4kxeVaIg1EC96FzHv0xmgp9TiPi7OszZk6Jf7yiy04mJ8Za+2qqubl3vp6
/Vz4HPGxH9fhLfv4H2uftIP2d6qHrTG58VeqhuEgt09Df7n+bvljcDL7wba7
/nfo1nY79+l7Dd/de4/5WX/W5phkh804qGX05GPYr7sXTuPi/psHV8wf34T6
H36BXUz6+D7+hL/+2GufFys/nzGt+dsnT5/dY1pv70EnTCkUI8Pffvvj9uwP
898np+Nnk1c3f7p4vXv1x8XZ4/x35dFo43r/cis7nG8uj4uXf/tvujqizZZb
u70nEQcP/WGXWv1+yq8mi+kknU7LiM9L2jO0tzZ7Othh57NuIioXoguUnu6C
TIMo+ir6dQ1fTM0ZNz1vRcfMbx4+CB0Lq9I9Hj4I25NG9Ip6akrnlj2dNvYU
Bq3yH1B314y4r4JWn/BNdL25txZ9+BDV3g6f1LK4WIeN/EieELTQAbyog6gM
fmc3ohz9L6Kjw8PD6GRz+/G2c9D4q48aMkgcs89GABkK/aVEEPAPOGdcS0jN
3sT5DfHckPx29qKvQ2rDrpPYZYhQcz2HDwM9sOcs03apSj9FHugY4i+4Nj9z
ozWw4lhr3UfSzbyDCrTsv3Z4lLDhunqQSqO0aDxQIXysO1HNyWi/QgAwzZCP
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
QfRX/EaDSAq0ULUvVbipSGmFAFV9Q8ZxnIjgRDbQplL/vTNnZnZnTSip+uaS
ZD27O/c5h+dKy1pJC9YHz9mbZPYILUk9XLIZGoUF3ERDRAUuEbCIHJbZf2my
BIGEYr8ZkDVu2jbcGgUQDGq3y6unNRocHLlXQsYGXkfj2ha5p6N45O6QHxG7
BVNmvt7n4L6F4Fy0j095H0lL9Pqt5H7pNvYA4tNrU90W3zkrHhI9aZM85q7c
EJogfWySQ4i3mBvOOD+g6ZWZ1vwk244zUESMKfjUL+JTbbXPschiX5Nu2Abg
VR62Ss6VcE9BBP2Itsq/eX4iWgHwO02mlJkqtHT017GvJi2E2rBo4bT1sdGh
44Z1zN/XsX1fJormOIZktzh4mSBwS6dfkNpGs3ybdMv7NzEoOkhVgYVfi4Ak
Ysz9KQyt3O6axE5N0zxXcKOP+ERLsylvz4hJA6+ZNPCUEfQsJXGdhm4h+MVM
OSnClNSYNQ4H/GB7C5nIfHYvLb5zOoLcMYnRMwALGB4B/fcavpedzsW0EG7H
pvfv8zqvIGrb+kDCvVjOCkX8UmPO7tujwB1CABK8JeOx3C4biRbHYzpCrQRw
IdmD7lbaC4aPmlj2zeZnSoexEUJLnV6Psej6lwp2QqbMj9VEo7l6urptZp5u
pMX1aC3SU1SOh7JqXP00KE3Any2ZOQYcrt7M6lUcnmTHVzvWbS6N+2mYI3kV
W6KmbeCwYsNN0T07rpGQRc6ryP42Hj5svcw2P9Z4LtjH3FFsWqXrbw6yEckW
iWfLLZZ2avkTPwYHux9Jf1eV4LvJ6JsuPckbS31IFhX8p4dW+dppIaDEDfBR
zCFarIoA5eZywIGczan9FwcnHlvcDXWAc63fMEeNqXyOYef5slUYm8V8UWkD
OPaWhb7FgSUGDKqEp/qeNDydRabCZMlc4mkftSpFK4kc7nioNiQFt5W/7OmU
JcL8CRqOHaLeIDu1BaRkXAm5l3ArS4p44mdFSJXWY9oE4Wr9n/hO5OWjNOH3
MVdA+5agKJxSmNoyIltYL0LyGL7wSkv4nZLH0AoWRzxvqyrjshR/I/sya1GY
fHNugAZPZc+XPm7/SIUILkCfvLaqzxWevthFxmzr7+7yxyW98p2hbGl529uf
MnvmAe/5uks+WDnY+H2XEpV6W5uQaOapOyClQJsuknqxfvuFwYuHuTAPwknh
NF+SwAbpeLM7bJDt4PW33uN3/EpnnNxV8rAXjaSX2NQoxMGx0D3CjV8oKocx
BLfT2dL6lvQsdmoqm65jn9dxqRmrTm0ArUKxgoO4SK2DqAgrDmUJiXkw9i25
nZxM3WQd73gdV5o/gigWTUVa+Hfws14guAMGGXnAQIUnW4H1QjR6NZ0yWW2w
kPe8EGn98LgZ8QCwVacLEaac5LYj/4Z5QO5gsLKHE4q1yDus4u5xXt7dmOhC
w8+agbszAHeLVw2H2EgZ3A2IzO1pGjza22yUt2juvMXWP8nVs1GByWNdWNhH
RgF9PFIr2Ns/SIuC/xbnAYvzrPNtoUuXdPFP0lUFTEP5i6LoFrX3zFLWqW80
8MgrzwVKx/RJ9WdnRbPxEgXhY9/QRL6ZfZDMH+9qXYXUY9j4ZJdIx97wXWBC
d4qfI7fAcHTxLemMgxzu3u5tIKJDfwXDL8TLw9eulCnRppwqXFmAvjPX2CoI
brWWtTacHauOu9IjWR6L/zO2tNIhSTZlSK7TPNvf3T/s7UTKzZxxfRVVqil4
9luvKzQxx6VNWeUNjnC8OuFV5E7ULhERC826uA3k9UHkJZtt8hrErpqy4CSu
P035WmJFt8Ui4U7aUcGkO4OzbP8drS2KEC8z7EUaS/kJ3grn/pLlHQdoIPn3
F+v9NTrNkQEA

-->

</rfc>
