<?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.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-meunier-webbotauth-httpsig-protocol-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="HTTP Message Signatures for Bots">HTTP Message Signatures for automated traffic</title>
    <seriesInfo name="Internet-Draft" value="draft-meunier-webbotauth-httpsig-protocol-01"/>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <author fullname="Sandor Major">
      <organization>Google</organization>
      <address>
        <email>ietf@sandormajor.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="06"/>
    <area>Web and Internet Transport</area>
    <workgroup>Web Bot Auth</workgroup>
    <keyword>not-yet</keyword>
    <abstract>
      <?line 69?>

<t>This document describes a protocol for identifying automated
traffic using <xref target="HTTP-MESSAGE-SIGNATURES"/>. The goal
is to allow automated HTTP clients to cryptographically sign outbound
requests, allowing HTTP servers to verify their identity with confidence.</t>
      <t>It defines the <tt>Signature-Agent</tt> header field for in-band key discovery, a
key directory format based on JWKS, and a well-known URI at which that
directory is served.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://thibmeu.github.io/http-message-signatures-directory/draft-meunier-webbotauth-httpsig-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-meunier-webbotauth-httpsig-protocol/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Bot Auth Working Group mailing list (<eref target="mailto:web-bot-auth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/web-bot-auth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/web-bot-auth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/thibmeu/http-message-signatures-directory"/>.</t>
    </note>
  </front>
  <middle>
    <?line 81?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Agents are increasingly used in business and user workflows, including AI assistants,
search indexing, content aggregation, and automated testing. These agents need to reliably identify
themselves to origins for several reasons:</t>
      <ol spacing="normal" type="1"><li>
          <t>Regulatory compliance requiring transparency of automated systems</t>
        </li>
        <li>
          <t>Origin resource management and access control</t>
        </li>
        <li>
          <t>Protection against impersonation</t>
        </li>
        <li>
          <t>Service level differentiation between human and automated traffic</t>
        </li>
      </ol>
      <t>Current identification methods such as IP allowlisting, User-Agent strings, or shared API keys have
significant limitations in security, scalability, and manageability. This document defines a
protocol enabling agents to cryptographically identify themselves using <xref target="HTTP-MESSAGE-SIGNATURES"/>.
It proposes that every request from bots be signed by a private key owned by its provider.
This way, every origin can validate the service identifier. <xref target="trust-model"/>
defines what that identifier is and what validation it establishes.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>There is an increase in agent traffic on the Internet. Many agents
choose to identify their traffic today via IP Address lists and/or unique
User-Agents. This is often done to demonstrate trust and safety claims, support
allowlisting/denylisting the traffic in a granular manor, and enable sites to
monitor and rate limit per agent operator. However, these mechanisms have drawbacks:</t>
      <ol spacing="normal" type="1"><li>
          <t>User-Agent, when used alone, can be spoofed meaning anyone may attempt to
act as that agent. It is also overloaded - an agent may be using Chromium and
wish to present itself as such to ensure rendering works, yet it still wants to
differentiate its traffic to the site.</t>
        </li>
        <li>
          <t>IP blocks alone can present a confusing story. IPs on cloud plaforms have
layers of ownership - the platform owns the IP and registers it in their
published IP blocks, only to be re-published by the agent with little to bind
the publication to the actual service provider that may be renting infra. Purchasing
dedicated IP blocks is expensive, time consuming, and requires significant
specialist knowledge to set up. These IP blocks may have prior reputation
history that needs to be carefully inspected and managed before purchase and
use.</t>
        </li>
        <li>
          <t>An agent may go to every website on the Internet and share a secret with
them like a Bearer from <xref target="OAUTH-BEARER"/>. This is impractical to scale for any
agent beyond select partnerships, and insecure, as key rotation is challenging
and becomes less secure as the consumers scale.</t>
        </li>
      </ol>
      <t>Using well-established cryptography, we can instead define a simple and secure
mechanism that empowers small and large agents to share their identity.</t>
      <section anchor="objectives">
        <name>Objectives and constraints</name>
        <t>This protocol has two objectives:</t>
        <ol spacing="normal" type="1"><li>
            <t>Continuity of bot trust, so that an origin can tell it is dealing with the
same party it dealt with before.</t>
          </li>
          <li>
            <t>Optional binding to another anchor, such as a domain.</t>
          </li>
        </ol>
        <t>It works under two constraints:</t>
        <ol spacing="normal" type="1"><li>
            <t>Preserve the simplicity of usage for bots, and the simplicity of action for
websites.</t>
          </li>
          <li>
            <t>Require no pre-established relationship between the two.</t>
          </li>
        </ol>
        <t>The second constraint is what rules out shared secrets and per-site
onboarding. The first is a statement about operational cost on both ends: a
site today greps its logs for an IP address and a User-Agent, and with this
protocol it greps for a handle it can verify.</t>
      </section>
      <section anchor="http-layer-choice">
        <name>HTTP layer choice</name>
        <t>This protocol operates solely at the HTTP layer.
It allows signatures to be generated and
verified without modifying the transport layer or TLS stack. It enables
flexible deployment across proxies, gateways, and origin servers, and aligns
with existing tooling and infrastructure that already inspect and manipulate
HTTP headers.</t>
        <t>Because the signature is embedded in the request itself, it travels with the
message through intermediaries, preserving end-to-end verifiability even when
requests are forwarded or transformed within the HTTP layer.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The following terms are used throughout this document:</t>
      <dl>
        <dt><strong>User</strong></dt>
        <dd>
          <t>An entity initiating requests through an agent. May be a human operator or another system.</t>
        </dd>
        <dt><strong>Agent</strong></dt>
        <dd>
          <t>An orchestrated user agent (e.g. Chromium, CURL). It implements the HTTP protocol and constructs valid HTTP requests with <xref target="HTTP-MESSAGE-SIGNATURES"/> signatures.</t>
        </dd>
        <dt><strong>Origin</strong></dt>
        <dd>
          <t>An HTTP server receiving signed requests that implements the HTTP protocol and verifies <xref target="HTTP-MESSAGE-SIGNATURES"/> signatures. It acts as a verifier of the signature as defined by <xref target="HTTP-MESSAGE-SIGNATURES"/>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="trust-model">
      <name>Identifiers and Trust Model</name>
      <t>This section defines the identifiers produced by this protocol and what a
verifier can conclude from a valid signature.</t>
      <section anchor="url-is-identifier">
        <name>The Signature-Agent URL is the identifier</name>
        <t>An Agent identifies itself with the HTTPS URL it publishes its keys at, carried
in <tt>Signature-Agent</tt> (<xref target="signature-agent"/>). A verifier resolves that member
value (<xref target="key-distribution-and-discovery"/>) and checks the signature against the
keys it returns. The identifier is the URL the verifier fetched, which for a
<tt>directory</tt> member is the well-known URI rather than the value the client sent.
What the verifier ends up with is a pair: that URL, and a key the URL provides.
Origins can log, rate limit, allowlist, or block the URL the way they do IP
addresses and User-Agent today.</t>
        <t>The URL on its own carries nothing. A client picks the value it sends, so an
unresolved <tt>Signature-Agent</tt> is a claim rather than an identity. It becomes an
identifier once the verifier fetches it and finds that it provides a key that
verifies the request (<xref target="discovery-is-not-trust"/>). Until then, verifiers <bcp14>MUST
NOT</bcp14> attach policy to it.</t>
        <t>A valid signature over a resolved URL proves that the request came from a
holder of a key that URL publishes, and that requests with the same URL come
from holders of keys that URL publishes. <xref target="anti-replay"/> bounds reuse. It says
nothing about who operates the Agent, whether the Agent is benign, or whether
the request is authorized. Those are origin policy.</t>
        <t>Nothing stops an Agent from abandoning a URL and standing up another one, and
the protocol does not try to prevent this. It targets honest clients that want
to be recognised across requests.</t>
      </section>
      <section anchor="rotation">
        <name>Rotation</name>
        <t>Because the identifier is the URL and not the key, an Agent can rotate keys
without losing continuity. It publishes the new key alongside the old one, then
drops the old one (<xref target="key-rotation"/>). The URL does not change, so a verifier
that recognised it before still recognises it after. No name and no third party
are involved.</t>
        <t><tt>keyid</tt> selects which key verifies a given request. Verifiers cannot use it to
carry continuity across a rotation, as that value is derived from the key
material.</t>
        <t><xref target="SIGNATURE-KEY"/> takes a different approach, where a long-lived key signs
short-lived delegated keys. Deployments <bcp14>MAY</bcp14> use it. This document does not
define rotation that way.</t>
      </section>
      <section anchor="no-url">
        <name>When no URL is sent</name>
        <t><tt>Signature-Agent</tt> is <bcp14>RECOMMENDED</bcp14> but not required. Without it, a verifier has
only the key, and the identifier is the <tt>keyid</tt> thumbprint defined in
<xref target="generating-http-message-signature"/>. Verification still works, provided the
verifier already holds that key.</t>
        <t>This mode has no rotation. A new key is a new identifier, and the verifier has
no way to connect the two.</t>
      </section>
      <section anchor="discovery-is-not-trust">
        <name>What the URL endorses</name>
        <t>Resolving a <tt>Signature-Agent</tt> URL over TLS establishes that the host named in
the URL served this key set at fetch time.
Whoever controls that URL says this key signs for it. That
is what makes the URL usable as an identifier, and all it gives you. It does
not say that the operator of that URL is honest, or that is is the same party
everyone knows about.</t>
        <t>What matters is the association between a URL and the keys published there. A
verifier that already holds the keys does not need to fetch it. A verifier <bcp14>MUST
NOT</bcp14> attribute a request to a <tt>Signature-Agent</tt> URL unless it made this
ssociation. This can be either by resolving the URL itself, at request time or
ahead of it, or from <xref target="redistributed-key-material"/>. Verifiers may refetch a URL
to handle up key additions and removals, bounded by <xref target="cache-behaviour"/>.</t>
        <t>Where a verifier obtains the same pair from more than one source, the newer
pair wins, including when it omits a key that older resolution included.
Pairs are ordered by when they were produced, not when the verifier obtained
them: the <tt>created</tt> parameter for a directory response signature
(<xref target="origin-binding-appendix"/>), and the time of the fetch for a directory the
verifier resolved itself.</t>
      </section>
      <section anchor="origin-binding">
        <name>Binding a key to a Web origin</name>
        <t>A well-known URL is a special case of the above. When a
<tt>Signature-Agent</tt> value resolves through the <tt>directory</tt> type
(<xref target="key-distribution-and-discovery"/>), the identifier is still the URL, but that
URL now names a domain rather than an arbitrary path on one. <xref target="WELLKNOWN-URI"/>
reserves the path, so the domain operator stands behind the key set.</t>
        <t>In practice, this is meant to allow additional information to be carried against
a name. That mechanism lives in <xref target="origin-binding-appendix"/>. A verifier that
wants to use this case may also recognise the shape of the URL and apply those
checks itself.</t>
      </section>
      <section anchor="out-of-scope">
        <name>Out of scope</name>
        <t>This protocol does not authenticate human users, does not provide anonymous
authentication, and does not define authorization or delegation. It does not
define how trust is accrued, held, or exchanged, and it defines no
mechanism for one origin to convey an opinion about an Agent to another. See
<xref target="privacy-considerations"/>.</t>
        <t>A client has a choice whether to sign its requests, and an origin has a choice
how it treats signed and unsigned requests. Multiple factors could influence
either decision, but the decisions themselves are outside the scope of this
document.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="608" viewBox="0 0 608 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,32 L 8,176" fill="none" stroke="black"/>
            <path d="M 80,32 L 80,176" fill="none" stroke="black"/>
            <path d="M 208,32 L 208,176" fill="none" stroke="black"/>
            <path d="M 288,32 L 288,176" fill="none" stroke="black"/>
            <path d="M 512,32 L 512,176" fill="none" stroke="black"/>
            <path d="M 600,32 L 600,176" fill="none" stroke="black"/>
            <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
            <path d="M 208,32 L 288,32" fill="none" stroke="black"/>
            <path d="M 512,32 L 600,32" fill="none" stroke="black"/>
            <path d="M 296,62 L 336,62" fill="none" stroke="black"/>
            <path d="M 296,66 L 336,66" fill="none" stroke="black"/>
            <path d="M 464,62 L 504,62" fill="none" stroke="black"/>
            <path d="M 464,66 L 504,66" fill="none" stroke="black"/>
            <path d="M 80,96 L 104,96" fill="none" stroke="black"/>
            <path d="M 184,96 L 200,96" fill="none" stroke="black"/>
            <path d="M 288,112 L 312,112" fill="none" stroke="black"/>
            <path d="M 488,112 L 504,112" fill="none" stroke="black"/>
            <path d="M 296,128 L 360,128" fill="none" stroke="black"/>
            <path d="M 448,128 L 512,128" fill="none" stroke="black"/>
            <path d="M 88,144 L 104,144" fill="none" stroke="black"/>
            <path d="M 192,144 L 208,144" fill="none" stroke="black"/>
            <path d="M 8,176 L 80,176" fill="none" stroke="black"/>
            <path d="M 208,176 L 288,176" fill="none" stroke="black"/>
            <path d="M 512,176 L 600,176" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="512,112 500,106.4 500,117.6" fill="black" transform="rotate(0,504,112)"/>
            <polygon class="arrowhead" points="512,64 500,58.4 500,69.6" fill="black" transform="rotate(0,504,64)"/>
            <polygon class="arrowhead" points="304,128 292,122.4 292,133.6" fill="black" transform="rotate(180,296,128)"/>
            <polygon class="arrowhead" points="304,64 292,58.4 292,69.6" fill="black" transform="rotate(180,296,64)"/>
            <polygon class="arrowhead" points="208,96 196,90.4 196,101.6" fill="black" transform="rotate(0,200,96)"/>
            <polygon class="arrowhead" points="96,144 84,138.4 84,149.6" fill="black" transform="rotate(180,88,144)"/>
            <g class="text">
              <text x="396" y="52">Exchange</text>
              <text x="400" y="68">Cryptographic</text>
              <text x="396" y="84">material</text>
              <text x="44" y="100">User</text>
              <text x="144" y="100">Request</text>
              <text x="248" y="100">Agent</text>
              <text x="556" y="100">Origin</text>
              <text x="352" y="116">Request</text>
              <text x="392" y="116">+</text>
              <text x="440" y="116">Signature</text>
              <text x="404" y="132">Response</text>
              <text x="148" y="148">Response</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+--------+               +---------+                           +----------+
|        |               |         |         Exchange          |          |
|        |               |         |<===== Cryptographic =====>|          |
|        |               |         |         material          |          |
|  User  +--- Request -->|  Agent  |                           |  Origin  |
|        |               |         +--- Request + Signature -->|          |
|        |               |         |<-------- Response --------+          |
|        |<-- Response --+         |                           |          |
|        |               |         |                           |          |
+--------+               +---------+                           +----------+
]]></artwork>
      </artset>
      <t>A User initiates an action requiring the Agent to perform an HTTP request.
The Agent constructs the request, generates a signature using its signing key,
and includes it in the request as defined in <xref section="3.1" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>
along with the <tt>Signature-Agent</tt> header for discovery of its verification key.
Upon receiving the request, the Origin ensures it has the verification key for the Agent,
validates the signature, and processes the request if the signature is valid.</t>
      <section anchor="deployment-models">
        <name>Deployment Models</name>
        <t>Signature verification can be performed either directly by origins or delegated
to a fronting proxy. Direct verification by origins provides simplicity and
control. Proxy verification offloads processing and enables shared caching across
multiple origins. The choice depends on traffic volume and operational
requirements.</t>
      </section>
      <section anchor="generating-http-message-signature">
        <name>Generating HTTP Message Signature</name>
        <t><xref target="HTTP-MESSAGE-SIGNATURES"/> defines components to be signed.</t>
        <t>Agents <bcp14>MUST</bcp14> include at least one of the following components:</t>
        <dl>
          <dt><tt>@authority</tt></dt>
          <dd>
            <t>as defined in <xref section="2.2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
          <dt><tt>@target-uri</tt></dt>
          <dd>
            <t>as defined in <xref section="2.2.2" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
        </dl>
        <t>Agents <bcp14>MUST</bcp14> include the following <tt>@signature-params</tt> as defined in <xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
        <dl>
          <dt><tt>created</tt></dt>
          <dd>
            <t>as defined in <xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
          <dt><tt>expires</tt></dt>
          <dd>
            <t>as defined in <xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
          <dt><tt>keyid</tt></dt>
          <dd>
            <t><bcp14>MUST</bcp14> be a base64url JWK SHA-256 Thumbprint as defined in <xref section="3.2" sectionFormat="of" target="JWK-THUMBPRINT"/> for RSA and EC, and in <xref section="A.3" sectionFormat="of" target="JWK-OKP"/> for ed25519.</t>
          </dd>
          <dt><tt>tag</tt></dt>
          <dd>
            <t><bcp14>MUST</bcp14> be <tt>web-bot-auth</tt></t>
          </dd>
        </dl>
        <t>The signing key is available to the agent at request time. Algorithms should be registered with IANA as part of HTTP Message Signatures Algorithm registry.</t>
        <t>The creation of the signature is defined in <xref section="3.1" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.</t>
        <t>It is <bcp14>RECOMMENDED</bcp14> that expiry be no more than 24 hours.</t>
        <t>The components above bind the signature to an authority, not to a request. A
signature covering <tt>@authority</tt> alone verifies against any method, path, or body
sent to that authority until it expires, so anyone who observes one request can
reuse it against the same origin until then.
<tt>expires</tt> bounds how long that lasts; the covered components bound what it
reaches. Agents that want to narrow it <bcp14>SHOULD</bcp14> also cover <tt>@method</tt>, and
either <tt>@path</tt> or <tt>@target-uri</tt>, as <xref target="example-multiple-signatures"/> does. A signer that omits them remains conformant.
<xref target="field-compression"/> covers what that costs on the wire.</t>
        <t>No component covers the body. An Agent that needs one <bcp14>MUST</bcp14> send and cover
<tt>Content-Digest</tt> <xref target="DIGEST-FIELDS"/>. This document does not require it. Most
automated traffic is <tt>GET</tt>, and a mandatory digest would force every Agent to
buffer request bodies it would otherwise stream.</t>
        <section anchor="signature-agent">
          <name>Signature-Agent</name>
          <t><tt>Signature-Agent</tt> is a Dictionary Structured Header as defined in
<xref section="3.2" sectionFormat="of" target="STRUCTURED-HEADERS"/>. Its member values <bcp14>MUST</bcp14> be String Items
that contain a <xref target="URI"/>, whose scheme <bcp14>MUST</bcp14> be <tt>https</tt>. If dictionary values are
not valid URI-references, the entire header field <bcp14>MAY</bcp14> be ignored.</t>
          <t>Each member carries a <tt>type</tt> parameter, a Token Item as defined in
<xref section="3.3.4" sectionFormat="of" target="STRUCTURED-HEADERS"/>, naming the discovery mechanism that
resolves the value to key material. <xref target="key-distribution-and-discovery"/> defines
the types. When <tt>type</tt> is absent, its value is <tt>directory</tt>. A verifier that
does not support a <tt>type</tt> value <bcp14>MUST</bcp14> ignore that member, and <bcp14>MUST NOT</bcp14> infer the
mechanism from the URI path, media type, or response body.</t>
          <t>Earlier versions of this protocol defined <tt>Signature-Agent</tt> as a bare String,
and deployments still send it (<xref target="example-legacy"/>). A verifier <bcp14>MAY</bcp14> accept that
form and treat it as a dictionary with a single member whose key is the label
of the signature covering it. Signers <bcp14>MUST</bcp14> send the dictionary form. The two
are distinguishable on the wire: a String Item begins with a double quote <tt>"</tt>
while a Dictionary member key does not.</t>
          <t>It is <bcp14>RECOMMENDED</bcp14> that the Agent sends requests with <tt>Signature-Agent</tt> header, as described in <xref target="sending-request"/>.
If the header is to be sent, one of its members <bcp14>MUST</bcp14> be signed as a component as defined in <xref section="2.1" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
The <tt>Signature-Agent</tt> member identifies where candidate key material can be found.
The key used to verify the signature is selected by the <tt>keyid</tt> parameter of the
corresponding <tt>Signature-Input</tt> member.</t>
          <t>This results in the following components to be signed</t>
          <artwork><![CDATA[
("@authority" "signature-agent";key="sig1")
]]></artwork>
          <t>It is <bcp14>RECOMMENDED</bcp14> that the <tt>key</tt> matches the signature label.</t>
        </section>
        <section anchor="multiple-signatures">
          <name>Multiple signatures</name>
          <t>A request <bcp14>MAY</bcp14> contain more than one Web Bot Auth signature. Each signature is
identified by its HTTP Message Signatures label. When <tt>Signature-Agent</tt> is
present, each signer <bcp14>SHOULD</bcp14> provide a <tt>Signature-Agent</tt> member for its label.</t>
          <t>A signer <bcp14>MAY</bcp14> cover members from another signature label, which preserves
evidence that another signer contributed to the request. A signer that covers
<tt>"signature";key=X</tt> <bcp14>MUST</bcp14> also cover <tt>"signature-input";key=X</tt>, and <bcp14>MUST</bcp14> cover
every component identifier listed in <tt>"signature-input";key=X</tt>.</t>
          <t>A signature value on its own does not identify the message it was computed
over, which is why <xref section="7.3.7" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/> recommends
against signing one. Covering <tt>signature-input</tt> is not sufficient:
it lists component identifiers, whose values resolve against whatever
message the verifier holds. An outer signature that named those identifiers
without covering them would still verify after the whole header set was lifted
onto a different message, the ambiguity
<xref section="7.3.7" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/> describes. Covering the union
addresses this: the outer signer commits to a message on which the inner signature
is checkable, under which key, and over which validity window.</t>
          <t>A signer that cannot cover one of those components, because it changed the
value the inner signature was computed over, <bcp14>MUST NOT</bcp14> cover the inner
<tt>signature</tt> member. It signs the request on its own terms, and the inner
signature is left untouched.</t>
          <t>Verifiers <bcp14>MUST</bcp14> validate each signature independently against its own covered
components and its own key. An outer signature that covers an inner one is
evidence that those bytes, over that set of components, were present. It does
not make the inner signature valid, and it does not express authorization,
delegation, or consent. Those meanings are deployment policy, or are carried in
separately signed fields.</t>
        </section>
        <section anchor="anti-replay">
          <name>Anti-replay</name>
          <t>Origins <bcp14>MAY</bcp14> want to prevent signatures from being spoofed or used multiple times by bad actors and thus require a <tt>nonce</tt> to be added to the <tt>@signature-params</tt>.
This is described in <xref section="7.2.2" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.</t>
          <t>Agents <bcp14>SHOULD</bcp14> extend <tt>@signature-parameters</tt> defined in <xref target="generating-http-message-signature"/> as follows:</t>
          <dl>
            <dt><tt>nonce</tt></dt>
            <dd>
              <t>base64url encoded random byte array. It is <bcp14>RECOMMENDED</bcp14> to use a 64-byte array.</t>
            </dd>
          </dl>
          <t>Client <bcp14>MUST</bcp14> ensure that this <tt>nonce</tt> is unique for the validity window of the signature, as defined by created and expires attributes.</t>
        </section>
        <section anchor="additional-headers">
          <name>Additional headers</name>
          <t>Agents <bcp14>MAY</bcp14> include additional components, such as specific HTTP headers, in the signature.
This can be prompted by the origin requesting additional headers, as described in <xref target="requesting-message-signature"/>,
or initiated by the agent to provide more information within the signature scope.
For example, an agent might include an HTTP header expressing its intent and sign it.</t>
          <t>Origins <bcp14>MAY</bcp14> ignore certain headers at their own discretion,
and request a new signature, as described in <xref target="requesting-message-signature"/>.</t>
        </section>
        <section anchor="sending-request">
          <name>Sending a request</name>
          <t>An Agent <bcp14>SHOULD</bcp14> send a request with the signature generated above. Updating the overview diagram, the flow looks as follow.</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="848" viewBox="0 0 848 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,160" fill="none" stroke="black"/>
                <path d="M 88,32 L 88,160" fill="none" stroke="black"/>
                <path d="M 136,112 L 136,256" fill="none" stroke="black"/>
                <path d="M 680,112 L 680,256" fill="none" stroke="black"/>
                <path d="M 752,32 L 752,160" fill="none" stroke="black"/>
                <path d="M 840,32 L 840,160" fill="none" stroke="black"/>
                <path d="M 8,32 L 88,32" fill="none" stroke="black"/>
                <path d="M 752,32 L 840,32" fill="none" stroke="black"/>
                <path d="M 96,62 L 352,62" fill="none" stroke="black"/>
                <path d="M 96,66 L 352,66" fill="none" stroke="black"/>
                <path d="M 496,62 L 744,62" fill="none" stroke="black"/>
                <path d="M 496,66 L 744,66" fill="none" stroke="black"/>
                <path d="M 136,112 L 680,112" fill="none" stroke="black"/>
                <path d="M 88,128 L 128,128" fill="none" stroke="black"/>
                <path d="M 688,128 L 744,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 752,160 L 840,160" fill="none" stroke="black"/>
                <path d="M 136,256 L 680,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="752,128 740,122.4 740,133.6" fill="black" transform="rotate(0,744,128)"/>
                <polygon class="arrowhead" points="752,64 740,58.4 740,69.6" fill="black" transform="rotate(0,744,64)"/>
                <polygon class="arrowhead" points="104,64 92,58.4 92,69.6" fill="black" transform="rotate(180,96,64)"/>
                <g class="text">
                  <text x="420" y="52">Exchange</text>
                  <text x="424" y="68">Cryptographic</text>
                  <text x="420" y="84">material</text>
                  <text x="48" y="100">Agent</text>
                  <text x="796" y="100">Origin</text>
                  <text x="160" y="132">GET</text>
                  <text x="248" y="132">/path/to/resource</text>
                  <text x="188" y="148">Signature:</text>
                  <text x="272" y="148">sig=abc==</text>
                  <text x="212" y="164">Signature-Input:</text>
                  <text x="352" y="164">sig=("@authority"</text>
                  <text x="548" y="164">"signature-agent";key="sig");\</text>
                  <text x="364" y="180">created=1700000000;\</text>
                  <text x="364" y="196">expires=1700011111;\</text>
                  <text x="356" y="212">keyid="ba3e64==";\</text>
                  <text x="356" y="228">tag="web-bot-auth"</text>
                  <text x="212" y="244">Signature-Agent:</text>
                  <text x="412" y="244">sig="https://signer.example.com"</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+---------+                                                                                  +----------+
|         |                                     Exchange                                     |          |
|         |<================================  Cryptographic  ===============================>|          |
|         |                                     material                                     |          |
|  Agent  |                                                                                  |  Origin  |
|         |     .-------------------------------------------------------------------.        |          |
|         +-----| GET /path/to/resource                                             |------->|          |
|         |     | Signature: sig=abc==                                              |        |          |
+---------+     | Signature-Input: sig=("@authority" "signature-agent";key="sig");\ |        +----------+
                |                  created=1700000000;\                             |
                |                  expires=1700011111;\                             |
                |                  keyid="ba3e64==";\                               |
                |                  tag="web-bot-auth"                               |
                | Signature-Agent: sig="https://signer.example.com"                 |
                '-------------------------------------------------------------------'
]]></artwork>
          </artset>
          <t>The Agent <bcp14>SHOULD</bcp14> send requests with two headers</t>
          <ol spacing="normal" type="1"><li>
              <t><tt>Signature</tt> defined in <xref target="generating-http-message-signature"/></t>
            </li>
            <li>
              <t><tt>Signature-Input</tt> defined in <xref target="generating-http-message-signature"/></t>
            </li>
          </ol>
          <t>As described in <xref target="signature-agent"/>, it is <bcp14>RECOMMENDED</bcp14> that the Agent also send
the <tt>Signature-Agent</tt> header. Without it the Agent is identified by its key
alone, with the consequences described in <xref target="no-url"/>.</t>
        </section>
      </section>
      <section anchor="requesting-message-signature">
        <name>Requesting a Message signature</name>
        <t><xref section="5" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/> defines the <tt>Accept-Signature</tt> field which can be used to request a Message Signature from a client by an origin.
An Origin <bcp14>MAY</bcp14> choose to request signatures from clients that did not initially provide them. If requesting, Origins <bcp14>MUST</bcp14> use the same parameters as those defined by the <xref target="generating-http-message-signature"/>.
The status code <bcp14>SHOULD</bcp14> be 403 Forbidden as defined in <xref section="15.5.4" sectionFormat="of" target="HTTP"/>.</t>
        <t>Origin <bcp14>MAY</bcp14> request a new signature with tag "web-bot-auth" even if a nonce is provided, for example if it believes the nonce is a replay, or if it doesn't store nonces and thus requests new signatures every time.
The status code <bcp14>SHOULD</bcp14> be 429 Too Many Requests as defined in <xref section="4" sectionFormat="of" target="HTTP-MORE-STATUS-CODE"/>.</t>
      </section>
      <section anchor="validating-message-signature">
        <name>Validating Message signature</name>
        <t>Upon receiving an HTTP request, the origin has to verify the signature. The algorithm is provided in <xref section="3.2" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
Similar to a regular User-Agent check, this happens at the HTTP layer, once headers are received.</t>
        <t>Additional requirements are placed on this validation:</t>
        <ul spacing="normal">
          <li>
            <t>During step 1 to 3 included, if the Origin fails to parse the provided <tt>Signature</tt>, <tt>Signature-Input</tt>, or <tt>Signature-Agent</tt> headers, it <bcp14>MAY</bcp14> respond with status code 400 Bad Request as defined in <xref section="15.5.1" sectionFormat="of" target="HTTP"/>.</t>
          </li>
          <li>
            <t>During step 4, the Origin <bcp14>MAY</bcp14> discard signatures for which the <tt>tag</tt> is not set to <tt>web-bot-auth</tt>.</t>
          </li>
          <li>
            <t>During step 5, the Origin <bcp14>MAY</bcp14> discard signatures for which it does not know the <tt>keyid</tt> for the <tt>Signature-Agent</tt> URL the signature covers.</t>
          </li>
          <li>
            <t>During step 5, if the <tt>keyid</tt> is not known for that URL, the Origin <bcp14>MAY</bcp14> fetch key material as indicated by the <tt>Signature-Agent</tt> header defined in <xref target="signature-agent"/>. Fetching key material affects only whether verification is possible, not what a valid signature means (<xref target="discovery-is-not-trust"/>).</t>
          </li>
        </ul>
        <t>Key lookup <bcp14>MUST</bcp14> be keyed on the (URL, key) pair, not on the key alone. A
verifier that indexes by <tt>keyid</tt> alone will verify a request as coming from one URL
that provides a key it learned from another, and attribute that request to the URL the client
asserted. The party whose URL is asserted cannot detect or stop this: its own
directory is never fetched, so no rotation or removal has any effect.</t>
        <t>Origin <bcp14>MAY</bcp14> require the <tt>nonce</tt> to satisfy certain constraints: be globally unique using a global nonce store, be unique to a specific location or time window using a local cache, or no constraint at all.</t>
      </section>
      <section anchor="key-distribution-and-discovery">
        <name>Key Distribution and Discovery</name>
        <t>This section describes how a verifier resolves a <tt>Signature-Agent</tt> URL to key
material. <xref target="discovery-is-not-trust"/> covers what the fetch does and does not
establish.</t>
        <t>The reference for discovery is an HTTPS URL, carried in a <tt>Signature-Agent</tt>
member as defined in <xref target="signature-agent"/>. The member's <tt>type</tt> parameter names
how the URL resolves to key material. This protocol defines three types:</t>
        <dl>
          <dt><tt>directory</tt></dt>
          <dd>
            <t>The member value <bcp14>MUST</bcp14> be the ASCII serialization of an origin as defined in
<xref section="6.2" sectionFormat="of" target="ORIGIN"/>, and a verifier <bcp14>MUST</bcp14> ignore a member carrying
anything else (an empty path <tt>/</tt> <bcp14>MAY</bcp14> be accepted though).
Resolve the HTTP Message Signatures Directory at the well-known
URI registered in <xref target="wkuri-reg"/>, at that origin. This is the default when no
<tt>type</tt> parameter is present.</t>
          </dd>
          <dt><tt>jwks_uri</tt></dt>
          <dd>
            <t>Resolve the member value as a direct JWK Set URI.</t>
          </dd>
          <dt><tt>cimd</tt></dt>
          <dd>
            <t>Resolve the member value as a Client ID Metadata Document <xref target="CIMD"/> URI. The
document then provides key material through <tt>jwks</tt> or <tt>jwks_uri</tt>.</t>
          </dd>
        </dl>
        <t>All three types produce an identifier: the URL the verifier resolved, with any
query and fragment discarded. For <tt>directory</tt> that is the well-known URI, one
per origin. For <tt>jwks_uri</tt> and <tt>cimd</tt> it is the member value; the verifier
fetches that value as sent, so the query is dropped from the identifier and not
from the request. Otherwise one key set would yield an identifier per spelling,
and an Agent could mint them at will.</t>
        <t>Identifiers are compared after normalization as described in
<xref section="6.2.2" sectionFormat="of" target="URI"/> and <xref section="6.2.3" sectionFormat="of" target="URI"/>. Two identifiers are the
same when their normalized forms are equal octet for octet.</t>
        <t>The types differ in what additional information the verifier learns from the URL.
TLS authenticates the host but not the path, and nothing reserves the <tt>jwks_uri</tt> or <tt>cimd</tt> path to the host's operator. The well-known URI is reserved, so <tt>directory</tt>
additionally names a domain (<xref target="origin-binding"/>).</t>
        <t>For all types, the key is selected using the <tt>keyid</tt> parameter in
<tt>Signature-Input</tt>.</t>
        <t>Note: when a JWK set is served at the well-known URI registered in
<xref target="wkuri-reg"/>, JWK <bcp14>MAY</bcp14> carry a <tt>kid</tt>. In this case, it <bcp14>MUST</bcp14> be set to the
thumbprint defined in <xref target="generating-http-message-signature"/>, so a verifier
selects a key by matching <tt>keyid</tt> against <tt>kid</tt>. Deriving <tt>kid</tt> from the key
material keeps it globally unique and lets a verifier check the directory's own
labelling rather than trusting it.</t>
        <t><tt>jwks_uri</tt> and <tt>cimd</tt> resolve to key sets that may serve other consumers, where
<tt>kid</tt> is an operator-chosen label. A verifier that cannot match <tt>keyid</tt> against
<tt>kid</tt> there computes thumbprints instead.</t>
        <artwork><![CDATA[
Signature-Agent: sig1="https://signature-agent.test"
Signature-Agent: sig1="https://signature-agent.test/jwks.json";type=jwks_uri
Signature-Agent: sig1="https://signature-agent.test/card";type=cimd
]]></artwork>
        <section anchor="configuration">
          <name>Directory format</name>
          <t>All three types resolve to a JSON Web Key Set (JWKS) as defined in
<xref section="5" sectionFormat="of" target="JWK"/>. The <tt>alg</tt> parameter is restricted to algorithms
registered in the HTTP Signature Algorithms section of
<xref target="HTTP-MESSAGE-SIGNATURES-IANA"/>.</t>
          <t>The directory <bcp14>MUST</bcp14> be served over HTTPS. A directory served at the well-known
URI registered in <xref target="wkuri-reg"/> <bcp14>MUST</bcp14> be served with media type
<tt>application/http-message-signatures-directory+json</tt>.</t>
          <t>A verifier <bcp14>SHOULD</bcp14> validate the directory format and reject malformed entries.</t>
          <artwork><![CDATA[
GET /.well-known/http-message-signatures-directory HTTP/1.1
Host: example.com
Accept: application/http-message-signatures-directory+json

HTTP/1.1 200 OK
Content-Type: application/http-message-signatures-directory+json
Cache-Control: max-age=86400
{
  "keys": [{
    "kty": "OKP",
    "crv": "Ed25519",
    "kid": "NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw",
    "x": "JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs",
    "use": "sig",
    "nbf": 1712793600,
    "exp": 1715385600
  }]
}
]]></artwork>
        </section>
        <section anchor="key-rotation">
          <name>Key rotation</name>
          <t>Directory operators <bcp14>SHOULD</bcp14> rotate keys by publishing the old and the new key
together, then removing the old one:</t>
          <ol spacing="normal" type="1"><li>
              <t>Add the new key to the directory before its intended use date</t>
            </li>
            <li>
              <t>Continue to include the old key until its expiration date</t>
            </li>
            <li>
              <t>Remove expired keys from the directory</t>
            </li>
          </ol>
          <t>Removing a key from the directory deactivates it. Verifiers stop accepting it
once their cached copy expires, so the directory's cache lifetime bounds how
long a removed key keeps verifying. Verifiers <bcp14>SHOULD</bcp14> cache the directory
contents and refresh upon expiration, as described in <xref target="cache-behaviour"/>.</t>
          <t>It is not a revocation mechanism, and this document does not define any.</t>
        </section>
        <section anchor="redistributed-key-material">
          <name>Redistributed key material</name>
          <t>IP addresses and user-agent have been aggregated and distributed via lists.
This section says what a verifier may conclude from key material it did not
fetch itself.
Defining a format for redistribution is out of scope.</t>
          <t>A verifier <bcp14>MUST NOT</bcp14> attribute a request to a <tt>Signature-Agent</tt> URL on the basis
of redistributed key material unless it carries, for the key in question, a
valid directory response signature as described in <xref target="origin-binding-appendix"/>
whose <tt>expires</tt> has not passed. Without that proof the material stays usable
for verifying signatures, but it carries no URL, so the identifier falls back
to the key thumbprint (<xref target="no-url"/>).</t>
          <t>The main requirement is to terminate the TLS connection.
A verifier polling a directory on its own schedule is resolving it. So is a
control plane polling on behalf of the verifiers it serves. None of these options
constitute redistribution. Nor is a list that names directory URLs rather than embedding
keys. For instance, <xref target="REGISTRY"/> works that way, and the verifier still resolves them.</t>
        </section>
        <section anchor="signature-key-header">
          <name>Signature-Key header</name>
          <t><xref target="SIGNATURE-KEY"/> defines a separate key discovery header for HTTP Message
Signatures. Deployments <bcp14>MAY</bcp14> use it when they need that model. This protocol
uses <tt>Signature-Agent</tt> as its default discovery mechanism.</t>
        </section>
      </section>
      <section anchor="sessions">
        <name>Session considerations</name>
        <t>Per-request signing and verification costs CPU; uncached key discovery adds
latency. For high request rates, an origin can verify a request-specific
signature once and issue a session credential for later requests. This can
amortize asymmetric verification and reduce bytes, but adds the risks of token
theft and replay.</t>
        <t>A reused signature already has token semantics until <tt>expires</tt>. A session
established from one extends that window past <tt>expires</tt> unless the credential is
bounded to it: no longer-lived, and no wider in scope than the components the
signature covered. Session establishment and binding are out of scope.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="use-of-tls">
        <name>Use of TLS</name>
        <t>We reassess <xref section="7.1.2" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
Clients <bcp14>SHOULD</bcp14> use TLS <xref target="RFC8446"/>
(https) or equivalent transport security when making requests with
Message signatures. Failing to do so exposes the Message signature to numerous
attacks that could give attackers unintended access.</t>
        <t>This include reverse proxy and their consideration presented in <xref target="reverse-proxy"/>.</t>
        <t>An origin <bcp14>SHOULD</bcp14> refuse Signature headers when communicated over an unsecured channel.</t>
      </section>
      <section anchor="performance-impact">
        <name>Performance Impact</name>
        <t>Origins should account for the overhead of signature verification in their operations. A local cache of public keys reduces network requests and verification latency. The choice of signing algorithm impacts CPU requirements. Origins should monitor verification latency and set appropriate timeouts to maintain service levels under load.
See <xref target="sessions"/>: a session amortizes that cost by replacing verification with a
bearer credential. <xref target="field-compression"/> covers the byte cost.</t>
      </section>
      <section anchor="nonce-validation">
        <name>Nonce validation</name>
        <t>Clients control the nonce. While <xref target="anti-replay"/> mandates that clients <bcp14>MUST</bcp14> provide a globally unique nonce, it is the origin's responsibility to enforce it.</t>
        <t>Different validation policies have different performance and operational considerations. Global uniqueness requires a global nonce store. Some origins may find that their use case can tolerate sharding on location, timing, or other properties.</t>
      </section>
      <section anchor="key-compromise-response">
        <name>Key Compromise Response</name>
        <t>This document defines no revocation. Removing a compromised key from the
directory is the only remedy, and it takes effect at each verifier on its next
refresh, so the key can keep verifying for as long as <xref target="key-rotation"/> allows.
The protocol carries no channel back to verifiers, so an
Agent cannot reach them sooner. Signature lifetimes
(<xref target="generating-http-message-signature"/>) are the only lever that acts faster.</t>
        <t>Agents <bcp14>SHOULD</bcp14> remove a compromised key and publish a replacement immediately.
Origins should support rapid key rotation and monitor for suspicious signature
patterns.</t>
      </section>
      <section anchor="shared-secrets-considered-harmful">
        <name>Shared Secrets Considered Harmful</name>
        <t>Implementations <bcp14>MUST NOT</bcp14> use shared HMAC defined in <xref section="3.3.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
Shared secrets break non-repudiation and make auditing
difficult. Each automated client <bcp14>SHOULD</bcp14> use a unique asymmetric keypair to
ensure attribution, support key rotation, and enable effective rotation if
needed.</t>
      </section>
      <section anchor="key-reuse-considered-harmful">
        <name>Key Reuse Considered Harmful</name>
        <t>Implementations <bcp14>SHOULD NOT</bcp14> reuse a signing key for different purposes. For
example, if an agent implementor has two agents they want to differentiate,
these should use distinct signing keys and signing key directories.</t>
      </section>
      <section anchor="reverse-proxy">
        <name>Reverse proxy consideration</name>
        <t>An origin may be placed behind a reverse proxy, which means the proxy will see
the <tt>Signature</tt> and <tt>Signature-Agent</tt> headers before the origin does.
A proxy <bcp14>SHOULD NOT</bcp14> strip the <tt>Signature</tt> or <tt>Signature-Agent</tt> headers from
requests.</t>
        <t>A proxy <bcp14>SHOULD NOT</bcp14> replay signatures against other reverse proxies used by the
origin, as this allows impersonation of the principal signature agent.</t>
        <t>Origins <bcp14>MAY</bcp14> require a specific nonce policy to prevent such malicious behaviour
and decide to validate the signature themselves. This has to be done in
accordance with <xref target="nonce-validation"/>. For example, an origin could
require a nonce derived from public information (such as the current date),
mandate nonce chaining (where each nonce is the hash of the previous one),
or provide its own nonce in an <tt>Accept-Signature</tt> response to challenge the agent.</t>
        <t>Such policies <bcp14>MAY</bcp14> incur additional round-trip between the client and the origin
to convey <tt>accept-signature</tt> header, or deployment specific exchanges.</t>
        <section anchor="signature-agent-labeling">
          <name>Signature-Agent labeling</name>
          <t><xref section="7.2.5" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/> allows an intermediary to relabel
a signature, because the label of a <tt>Signature</tt> dictionary member is not part
of the signature base. The key of a <tt>Signature-Agent</tt> member is different: when
a signature covers <tt>"signature-agent";key="agent2"</tt>, that key appears in the
signature base, so changing it invalidates the signature. Only the holder of
the signing key can produce a signature over the new member key.</t>
          <t>An intermediary <bcp14>MUST NOT</bcp14> alter the key of a <tt>Signature-Agent</tt> member that is
covered by a signature it is not able to recompute. Relabeling the <tt>Signature</tt>
dictionary member remains permitted.</t>
          <t>A signer acting as an intermediary on its own signature is not restricted by
this, since it can sign the result.</t>
        </section>
      </section>
      <section anchor="ssrf">
        <name>Server-Side Request Forgery (SSRF)</name>
        <t>As described in <xref target="key-distribution-and-discovery"/>, verifiers may fetch key directories based on
the value conveyed in <tt>Signature-Agent</tt> when included in a request. Since
clients control the <tt>Signature-Agent</tt> header value, this introduces a risk of
server-side request forgery (SSRF) attacks by malicious clients.</t>
        <t>Verifiers <bcp14>SHOULD</bcp14> take appropriate precautions as follows:</t>
        <dl>
          <dt><tt>Response size</tt></dt>
          <dd>
            <t>a directory can be arbitrarily large. Verifiers <bcp14>SHOULD</bcp14> reject responses
exceeding a defined byte limit after content decoding.</t>
          </dd>
          <dt><tt>Key count</tt></dt>
          <dd>
            <t>a JWKS with many keys forces O(n) key search. Verifiers <bcp14>SHOULD</bcp14> enforce
a maximum key count.</t>
          </dd>
          <dt><tt>Fetch latency</tt></dt>
          <dd>
            <t>no timeout allows slowloris-style exhaustion. Verifiers <bcp14>SHOULD</bcp14> apply
a wall-clock timeout to directory fetches.</t>
          </dd>
          <dt><tt>Redirect chains</tt></dt>
          <dd>
            <t>unbounded HTTP redirects can be used to amplify requests. Verifiers
<bcp14>SHOULD</bcp14> limit redirect depth.</t>
          </dd>
          <dt><tt>Network address ranges</tt></dt>
          <dd>
            <t>no address filtering can target internal services. Verifiers <bcp14>SHOULD</bcp14>
prevent directory fetches to private, loopback, and link-local
address ranges.</t>
          </dd>
        </dl>
        <t>Further recommendations can be found in the Open Worldwide Application
Security Project (OWASP) SSRF Prevention Cheat Sheet <xref target="OWASP-SSRF"/>.</t>
      </section>
      <section anchor="test-and-demonstration-keys">
        <name>Test and Demonstration Keys</name>
        <t>Test keys, including the example keys in <xref target="HTTP-MESSAGE-SIGNATURES"/>, <bcp14>MUST NOT</bcp14>
be used in production. Verifiers <bcp14>SHOULD</bcp14> reject known test keys when they are
detected in key directories or out-of-band configuration.</t>
      </section>
      <section anchor="static-signatures">
        <name>Static Signatures</name>
        <t>Deployments <bcp14>MUST NOT</bcp14> treat a precomputed Web Bot Auth signature as a long-lived
access credential. A reusable static signature has bearer-token semantics and can
be replayed until the covered signature parameters, key, or verifier policy make
it unusable.</t>
        <t>Agents <bcp14>SHOULD</bcp14> generate signatures for the request being sent, with bounded
<tt>created</tt> and <tt>expires</tt> values. Long expiration windows increase replay risk.</t>
      </section>
      <section anchor="discovery-failure">
        <name>Discovery Failure</name>
        <t>Resolving a <tt>Signature-Agent</tt> URL can fail in several ways: the name does not
resolve, the connection or TLS handshake fails, the response is not a directory
or contains no key matching <tt>keyid</tt>, or the fetch is refused by the verifier's
own limits (<xref target="ssrf"/>). All have the same outcome for the request in hand. The
verifier holds no association between that URL and the signing key, so under
<xref target="discovery-is-not-trust"/> it <bcp14>MUST NOT</bcp14> attribute the request to that URL. It may
still verify the signature if it holds the key by other means, in which case the
identifier is the thumbprint (<xref target="no-url"/>); otherwise the request is unverified.</t>
        <t>They differ in what they say about cached state, and verifiers <bcp14>MUST</bcp14> keep them
apart. A directory that resolves and does not contain the key is evidence: it is
newer than whatever the verifier holds, and under <xref target="discovery-is-not-trust"/>
replaces it. That is how a removed key stops verifying. A directory that fails
to resolve is not evidence and <bcp14>MUST NOT</bcp14> evict a cached entry, or an
operator's outage revokes its keys at every verifier at once.</t>
        <t>A failed fetch says nothing about the signer. It does not prove the signer is
malicious, and it does not make the request trusted. What an origin does with
an unverified request is local policy, and treating it as a distinct outcome
rather than as success or failure is discussed in <xref target="verifier-outcomes"/>.
Verifiers should also expect failures to be correlated: a single operator's
directory going down takes out every request naming it at once, across every
verifier whose cache expires in the same window.</t>
      </section>
      <section anchor="unsigned-requests">
        <name>Unsigned requests</name>
        <t>Most HTTP requests carry no signature. A verifier that sees none has learned
nothing about the sender: not that it is automated, not that it is human, not
that it is evading anything. Absence of a signal is not evidence about the
party that did not send it, in the same way that a failed fetch
(<xref target="discovery-failure"/>) is not evidence about the signer.</t>
        <t>What an origin does with a request it cannot attribute is its own decision, as
it was before this protocol existed. This document neither requires an origin
to treat unsigned requests differently nor gives it grounds to.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <section anchor="public-identity">
        <name>Public Identity</name>
        <t>This protocol assumes that automated clients identify themselves
explicitly using digital signatures. The identity associated with a signing
key is expected to be publicly discoverable for verification purposes. This
reduces anonymity and allows receivers to associate requests with specific
agents. If an agent wishes not to identify itself, this is not the right
choice of protocol for it.</t>
      </section>
      <section anchor="no-human-correlation">
        <name>No Human Correlation</name>
        <t>The key used for signing <bcp14>MUST NOT</bcp14> be tied to a specific human individual.
Keys <bcp14>SHOULD</bcp14> represent a role, company, or automation identity (e.g., "news-aggregator-
bot", "example-crawler-v1"). This avoids accidental exposure of personally
identifiable information and prevents the misuse of keys for user tracking or
profiling.</t>
      </section>
      <section anchor="minimizing-tracking-risks">
        <name>Minimizing Tracking Risks</name>
        <t>To limit tracking risks, implementations <bcp14>SHOULD</bcp14> avoid long-lived, globally
unique key identifiers unless strictly necessary. Key rotation <bcp14>SHOULD</bcp14> be
supported, and clients <bcp14>SHOULD</bcp14> take care to avoid signing information that
could be used to correlate activity across contexts, especially where
sensitive user data is involved.</t>
      </section>
      <section anchor="directory-content-and-access-patterns">
        <name>Directory content and access patterns</name>
        <t>A key directory should only contain keys actively used for signing. Additional
keys or metadata expose more about the signing service than verification
requires. Verifiers fetching a directory also reveal something about their
verification patterns, so directory servers should avoid logging personally
identifiable information from directory requests.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This section contains considerations for IANA.</t>
      <section anchor="wkuri-reg">
        <name>Well-Known 'http-message-signatures-directory' URI</name>
        <t>This document updates the "Well-Known URIs" Registry <xref target="WellKnownURIs"/> with the
following values.</t>
        <table anchor="wellknownuri-values">
          <name>'http-message-signatures-directory' Well-Known URI</name>
          <thead>
            <tr>
              <th align="left">URI Suffix</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
              <th align="left">Status</th>
              <th align="left">Related information</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">http-message-signatures-directory</td>
              <td align="left">IETF</td>
              <td align="left">this document</td>
              <td align="left">permanent</td>
              <td align="left">None</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>The following entries should be added to the IANA "media types"
registry:</t>
        <ul spacing="normal">
          <li>
            <t>"application/http-message-signatures-directory+json"</t>
          </li>
        </ul>
        <t>The templates for these entries are listed below and the
reference should be this RFC.</t>
        <section anchor="applicationhttp-message-signatures-directoryjson-media-type">
          <name>"application/http-message-signatures-directory+json" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>http-message-signatures-directory</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Services that implement the signer role for HTTP Message
Signatures and verifiers that interact with the signer for
the purpose of validating signatures.</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CIMD">
          <front>
            <title>OAuth Client ID Metadata Document</title>
            <author fullname="Aaron Parecki" initials="A." surname="Parecki">
              <organization>Okta</organization>
            </author>
            <author fullname="Emelia Smith" initials="E." surname="Smith">
         </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This specification defines a mechanism through which an OAuth client
   can identify itself to authorization servers, without prior dynamic
   client registration or other existing registration.  This is through
   the usage of a URL as a client_id in an OAuth flow, where the URL
   refers to a document containing the necessary client metadata,
   enabling the authorization server to fetch the metadata about the
   client as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-client-id-metadata-document-02"/>
        </reference>
        <reference anchor="DIGEST-FIELDS">
          <front>
            <title>Digest Fields</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document defines HTTP fields that support integrity digests. The Content-Digest field can be used for the integrity of HTTP message content. The Repr-Digest field can be used for the integrity of HTTP representations. Want-Content-Digest and Want-Repr-Digest can be used to indicate a sender's interest and preferences for receiving the respective Integrity fields.</t>
              <t>This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP fields.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9530"/>
          <seriesInfo name="DOI" value="10.17487/RFC9530"/>
        </reference>
        <reference anchor="HTTP-MESSAGE-SIGNATURES">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="HTTP-MESSAGE-SIGNATURES-IANA" target="https://www.iana.org/assignments/http-message-signature/http-message-signature.xhtml">
          <front>
            <title>HTTP Message Signatures</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-CACHE">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="HTTP-MORE-STATUS-CODE">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="JWK">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="JWK-OKP">
          <front>
            <title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)</title>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document defines how to use the Diffie-Hellman algorithms "X25519" and "X448" as well as the signature algorithms "Ed25519" and "Ed448" from the IRTF CFRG elliptic curves work in JSON Object Signing and Encryption (JOSE).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8037"/>
          <seriesInfo name="DOI" value="10.17487/RFC8037"/>
        </reference>
        <reference anchor="JWK-THUMBPRINT">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="ORIGIN">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents. Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites. In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string. It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </reference>
        <reference anchor="STRUCTURED-HEADERS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="WellKnownURIs" target="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HPACK">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="H. Ruellan" initials="H." surname="Ruellan"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7541"/>
          <seriesInfo name="DOI" value="10.17487/RFC7541"/>
        </reference>
        <reference anchor="HTTP-BEST-PRACTICES">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="OAUTH-BEARER">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="QPACK">
          <front>
            <title>QPACK: Field Compression for HTTP/3</title>
            <author fullname="C. Krasic" initials="C." surname="Krasic"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="A. Frindell" initials="A." role="editor" surname="Frindell"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification defines QPACK: a compression format for efficiently representing HTTP fields that is to be used in HTTP/3. This is a variation of HPACK compression that seeks to reduce head-of-line blocking.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9204"/>
          <seriesInfo name="DOI" value="10.17487/RFC9204"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="REGISTRY">
          <front>
            <title>Registry and Signature Agent card for Web bot auth</title>
            <author fullname="Maxime Guerreiro" initials="M." surname="Guerreiro">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Ulas Kirazci" initials="U." surname="Kirazci">
              <organization>Amazon</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <date day="26" month="June" year="2026"/>
            <abstract>
              <t>   This document defines the "Signature Agent Card", a JSON metadata
   document that a signature agent using [DIRECTORY] publishes to
   describe itself: its identity, purpose, rate expectations, and
   cryptographic keys.  Its parameters are drawn from the OAuth Dynamic
   Client Registration Metadata registry [DCR], the same namespace used
   by [CIMD], extended with a single web_bot_auth object.  This document
   registers that object with IANA and establishes a registry for its
   members.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-webbotauth-registry-03"/>
        </reference>
        <reference anchor="OWASP-SSRF" target="https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html">
          <front>
            <title>OWASP Server-Side Request Forgery Prevention Cheat Sheet</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SIGNATURE-KEY">
          <front>
            <title>HTTP Signature Keys</title>
            <author fullname="Dick Hardt" initials="D." surname="Hardt">
              <organization>Hellō</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <date day="5" month="August" year="2026"/>
            <abstract>
              <t>   This document defines five HTTP header fields for use with HTTP
   Message Signatures as defined in RFC 9421.  The Signature-Key request
   header distributes public keys used to verify signatures, with eight
   initial key distribution schemes: pseudonymous inline keys (hwk),
   self-issued key delegation via JWK Thumbprint JWTs (jkt-jwt),
   identified signers with JWKS URI discovery (jwks_uri), direct JWKS
   fetch (jwks), JWT-based delegation (jwt), self-issued JWTs (self-
   jwt), X.509 certificate chains (x509), and references to previously
   cached assertions (cached).  The Accept-Signature-Scheme and Accept-
   Signature-Alg response headers state the schemes and algorithms a
   server accepts, so a client can select both before it signs.  The
   Signature-Error response header provides structured error information
   when signature verification fails, and the Signature-Key-Cache
   response header issues a cache identifier by which a caller can
   reference a previously presented assertion instead of resending it.
   Together, these mechanisms enable flexible trust models ranging from
   privacy-preserving pseudonymous verification to horizontally-scalable
   delegated authentication and PKI-based identity chains.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hardt-httpbis-signature-key-08"/>
        </reference>
        <reference anchor="USE-CASES">
          <front>
            <title>Use Cases for Authentication of Web Bots</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <date day="1" month="April" year="2026"/>
            <abstract>
              <t>   This draft outlines use cases for authentication for bot clients on
   the Web, to help inform discussions regarding the scope and intent of
   the WebBotAuth Working Group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-nottingham-webbotauth-use-cases-02"/>
        </reference>
        <reference anchor="WELLKNOWN-URI">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
      </references>
    </references>
    <?line 989?>

<section anchor="use-cases">
      <name>Use cases and what they need</name>
      <t><xref target="USE-CASES"/> collects the use cases this group has discussed. Most are served
by the URL alone. The table below records which ones need the domain binding in
<xref target="origin-binding-appendix"/>, and why.</t>
      <table>
        <name>Use cases and the identifier they need</name>
        <thead>
          <tr>
            <th align="left">Use case</th>
            <th align="left">What the origin does</th>
            <th align="left">Needs</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Mitigating volumetric abuse</td>
            <td align="left">Rate limit per URL</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">Controlling access by bots</td>
            <td align="left">Set policy per URL</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">Providing different content to bots</td>
            <td align="left">Recognise a given URL</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">Auditing bot behaviour</td>
            <td align="left">Group logs by URL</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">Classifying traffic</td>
            <td align="left">Correlate observed behaviour with a URL</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">IP address mobility and sharing</td>
            <td align="left">Nothing: the signature does not depend on the IP</td>
            <td align="left">URL</td>
          </tr>
          <tr>
            <td align="left">Robots.txt alignment</td>
            <td align="left">Match the crawler against a name in the file</td>
            <td align="left">Domain</td>
          </tr>
          <tr>
            <td align="left">Conveying contextual information</td>
            <td align="left">Read signed headers alongside the identifier</td>
            <td align="left">Domain</td>
          </tr>
        </tbody>
      </table>
      <t>The last two are the pattern from <xref target="origin-binding"/>. Both consume something
held against a name rather than against the key: a robots.txt file names
crawlers, and contextual assertions are only worth as much as the party making
them. End-user authentication and anonymous authentication are out of scope.</t>
    </section>
    <section anchor="origin-binding-appendix">
      <name>Validating the domain binding</name>
      <t>This appendix describes what a verifier checks when it wants the domain a key
is published under, rather than the URL on its own. It applies to the
<tt>directory</tt> type in <xref target="key-distribution-and-discovery"/>. Verification,
rotation, and continuity do not depend on any of it, and a verifier that only
needs the URL as an identifier can skip the whole appendix.</t>
      <t>Authority over the domain comes from the TLS connection to the directory.
Nothing below adds to that.</t>
      <section anchor="possession-proof-on-the-directory-response">
        <name>Possession proof on the directory response</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> that a directory server construct and include one HTTP
Message Signature per key with the response, as defined in
<xref target="HTTP-MESSAGE-SIGNATURES"/>. Each key <bcp14>SHOULD</bcp14> be used to provide one signature.
These signatures prove possession of the advertised keys and, by covering
<tt>@authority</tt>, prevent the key set from being re-served under a different
authority. This matters for a domain-bound identifier, where the verifier is
about to consume information it holds against the name: it distinguishes a key set
the key holders assembled from one that was copied.</t>
        <t>Directory server <bcp14>MUST</bcp14> include the following covered components:</t>
        <dl>
          <dt><tt>@authority</tt></dt>
          <dd>
            <t>as defined in <xref section="2.2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>. <tt>req</tt> flag defined in <xref section="2.4" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/> <bcp14>MUST</bcp14> be set.</t>
          </dd>
          <dt><tt>content-digest</tt></dt>
          <dd>
            <t>as defined in <xref target="DIGEST-FIELDS"/>.</t>
          </dd>
        </dl>
        <t>Directory server <bcp14>MUST</bcp14> include the following <tt>@signature-params</tt> as defined in
<xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
        <dl>
          <dt><tt>created</tt></dt>
          <dd>
            <t>as defined in <xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
          <dt><tt>expires</tt></dt>
          <dd>
            <t>as defined in <xref section="2.3" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/></t>
          </dd>
        </dl>
        <t>Without them the signature is a permanent assertion that these keys were bound
to this authority at some unstated time, of no use to a verifier
consuming it through <xref target="redistributed-key-material"/>.</t>
        <dl>
          <dt><tt>keyid</tt></dt>
          <dd>
            <t><bcp14>MUST</bcp14> be a base64url JWK SHA-256 Thumbprint as defined in <xref section="3.2" sectionFormat="of" target="JWK-THUMBPRINT"/> for RSA and EC, and in <xref section="A.3" sectionFormat="of" target="JWK-OKP"/> for ed25519.</t>
          </dd>
          <dt><tt>tag</tt></dt>
          <dd>
            <t><bcp14>MUST</bcp14> be <tt>http-message-signatures-directory</tt></t>
          </dd>
        </dl>
        <t>A verifier relying on the domain <bcp14>MUST</bcp14> validate these signatures using the keys
provided by the directory, <bcp14>MUST</bcp14> validate the <tt>Content-Digest</tt> field against the
response body, and <bcp14>MUST</bcp14> ignore keys that do not have a corresponding valid
signature. A verifier <bcp14>MUST</bcp14> reject a directory response signature whose
<tt>created</tt> is in the future, as it would a certificate that is not yet valid.
<xref target="discovery-is-not-trust"/> orders competing evidence by <tt>created</tt>, so a
future-dated signature would outrank every later fetch.</t>
      </section>
      <section anchor="what-the-binding-attaches-to">
        <name>What the binding attaches to</name>
        <t>The binding is not exclusive. Several domains may publish the same key, and the
binding attaches to the pair the verifier validated, not to the key on its own.
A verifier that recognises a key under one domain has learned nothing about the
same key served under another.</t>
      </section>
    </section>
    <section anchor="deployment-guidance">
      <name>Deployment Guidance</name>
      <t>This appendix is operational guidance. It does not define new protocol
requirements.</t>
      <section anchor="verifier-outcomes">
        <name>Verifier Outcomes</name>
        <t>Verifiers should keep three outcomes distinct:</t>
        <dl>
          <dt><tt>verified</tt></dt>
          <dd>
            <t>the signature and key material validate.</t>
          </dd>
          <dt><tt>invalid</tt></dt>
          <dd>
            <t>the signature, covered components, key, or freshness checks fail.</t>
          </dd>
          <dt><tt>unverified</tt></dt>
          <dd>
            <t>the verifier cannot obtain enough information to decide, for example because
directory discovery failed or the key is unknown.</t>
          </dd>
        </dl>
        <t>Origins can apply local policy to each outcome. During deployment, treating
<tt>unverified</tt> as one bot-management signal is safer than treating it as either
<tt>verified</tt> or <tt>invalid</tt>.</t>
      </section>
      <section anchor="directory-availability">
        <name>Directory Availability</name>
        <t>Directory resources are bootstrap material. Operators serving a directory should
make it reachable without requiring Web Bot Auth on the directory request. They
should also avoid bot protection rules that block ordinary verifier fetches of
the well-known resource.</t>
        <t>The directory endpoint should support <tt>GET</tt>. Supporting <tt>HEAD</tt>, <tt>ETag</tt>,
<tt>Last-Modified</tt>, <tt>Cache-Control</tt>, and conditional requests can reduce fetch
load. Cache is specifically discussed in <xref target="cache-behaviour"/>.</t>
      </section>
      <section anchor="bounded-directory-fetches">
        <name>Bounded Directory Fetches</name>
        <t>Verifiers fetch directories named by untrusted requests, and should bound those
fetches as described in <xref target="ssrf"/>.</t>
        <t>Verifiers should also coalesce concurrent fetches for the same directory and
apply per-directory or per-origin concurrency limits. This avoids a fetch storm
when many requests reference the same uncached directory.</t>
      </section>
      <section anchor="cache-behaviour">
        <name>Cache Behaviour</name>
        <t>Verifiers should use normal HTTP caching semantics <xref target="HTTP-CACHE"/> for key
directories. In particular, verifiers should respect <tt>Cache-Control</tt>, <tt>Expires</tt>,
<tt>Date</tt>, <tt>ETag</tt>, and <tt>Last-Modified</tt> when present.</t>
        <t>A verifier should not fetch the directory for every request. It should refresh
cached directories when they become stale, and can use background refresh with
jitter to avoid synchronized refetches.</t>
      </section>
      <section anchor="negative-caching-and-retry">
        <name>Negative Caching and Retry</name>
        <t>Verifiers can cache unsuccessful discovery outcomes for a short period to reduce
repeated fetches. Negative cache entries should expire after no more than five
minutes. They are operational throttling state, not proof that a signature is
invalid.</t>
        <t>Network failures, TLS failures, and <tt>5xx</tt> responses should be treated as
transient unless local policy says otherwise. Verifiers should retry with bounded
exponential backoff and jitter. When a directory response includes
<tt>Retry-After</tt>, verifiers should respect it as described by <xref target="HTTP"/> and
<xref target="HTTP-BEST-PRACTICES"/>.</t>
      </section>
      <section anchor="freshness-and-replay">
        <name>Freshness and Replay</name>
        <t>Shorter signature lifetimes reduce replay risk but increase sensitivity to clock
skew and signing failures. Nonces provide stronger replay defense, but require
state at the verifier. Some deployments can tolerate bounded replay for short
windows; others need strict <xref target="nonce-validation"/>.</t>
        <t>These choices are deployment policy. Verifiers should avoid accepting signatures
with freshness windows longer than their risk model permits.</t>
      </section>
      <section anchor="field-compression">
        <name>Field compression</name>
        <t>Covering per-request components costs bytes when a connection is reused. HPACK
<xref target="HPACK"/> and QPACK <xref target="QPACK"/> can index a repeated <tt>Signature</tt>,
<tt>Signature-Input</tt>, or <tt>Signature-Agent</tt> value, so a signature reused across
requests on one connection is sent once and referenced afterwards. A per-request
value cannot be referenced; it is sent as a literal every time. Huffman coding
and an indexed field name reduce that literal, they do not replace the
reference.</t>
        <t>This is not a reason to widen the covered components. The bytes saved are the
bytes of a credential anyone who observes it can replay until <tt>expires</tt>
(<xref target="generating-http-message-signature"/>), and one static signature for many
requests is an anti-pattern (<xref target="deployment-anti-patterns"/>). An encoder that
treats a signature as a credential may also decline to index it
(<xref section="7.1.3" sectionFormat="of" target="HPACK"/>).</t>
      </section>
      <section anchor="directory-response-signature-lifetimes">
        <name>Directory Response Signature Lifetimes</name>
        <t>Where the key set is redistributed, revocation latency is already floored by
how often the redistributor republishes, so a short <tt>expires</tt> on a directory
response signature (<xref target="origin-binding-appendix"/>) buys nothing and costs
availability: at expiry every consumer drops that operator's keys to unverified
at once, with no serving stale. Operators should set <tt>expires</tt> well beyond the
republication interval of any list they expect to appear in. The lever for
faster revocation is publishing more often, not signing shorter.</t>
      </section>
      <section anchor="rollout-and-fallback">
        <name>Rollout and Fallback</name>
        <t>Web Bot Auth deployments will coexist with existing bot identification signals
during rollout. Verifiers can continue to use existing methods such as IP-based
checks, forward-confirmed reverse DNS, local allowlists, and reputation systems.</t>
        <t>Fallback should not turn an unsupported or unverifiable Web Bot Auth signature
into a trusted identity. It should leave the request in the origin's existing
bot-management path.</t>
      </section>
      <section anchor="proxies-and-intermediaries">
        <name>Proxies and Intermediaries</name>
        <t>Proxies and intermediaries need to preserve the fields covered by a signature if
the origin will verify that signature. If a proxy rewrites the authority, path,
or signed header fields, the origin may no longer see the message that was
signed.</t>
        <t>A deployment can instead verify at the proxy and pass the result to the origin
through a deployment-local trusted channel. That assertion is local policy; it is
not a replacement for the original HTTP Message Signature.</t>
      </section>
      <section anchor="cors">
        <name>CORS</name>
        <t>Key directories contain public key material. If browser-based verifiers need to
fetch them cross-origin, a directory server can use a permissive CORS policy such
as <tt>Access-Control-Allow-Origin: *</tt> without credentials. CORS is not key
authentication and does not replace signature validation.</t>
      </section>
      <section anchor="deployment-anti-patterns">
        <name>Deployment Anti-Patterns</name>
        <t>Deployments should avoid:</t>
        <ul spacing="normal">
          <li>
            <t>using test or demonstration keys in production</t>
          </li>
          <li>
            <t>issuing one static signature for many requests</t>
          </li>
          <li>
            <t>asking users to copy long-lived signatures into third-party tools</t>
          </li>
          <li>
            <t>sharing one signing key across unrelated agents or purposes</t>
          </li>
          <li>
            <t>relying on manual key rotation as the only revocation mechanism</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="delegation-and-chaining">
        <name>Delegation and chaining</name>
        <t>Delegation and chaining are out of scope for this document and are expected
to be specified separately. Input is welcome on the associated
<eref target="https://github.com/thibmeu/http-message-signatures-directory/issues/27">GitHub issue</eref>.</t>
      </section>
      <section anchor="example-multiple-signatures">
        <name>Multiple signatures with a remote browser</name>
        <t>This example shows Alice's agent using a remote browser to fetch a resource. The
agent signs selected request fields. The remote browser signs the request it
sends to the origin and also covers the agent's signature fields. The signature
values are illustrative; this is not a test vector.</t>
        <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

GET /resource HTTP/1.1
Host: origin.example
Signature-Agent: agent="https://agent.alice.example",\
 browser="https://browser.example"
Signature-Input: agent=("@method" "@authority" "@path"\
 "signature-agent";key="agent");created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;tag="web-bot-auth",\
 browser=("@method" "@authority" "@path"\
 "signature-agent";key="browser"\
 "signature-agent";key="agent"\
 "signature-input";key="agent"\
 "signature";key="agent");created=1735689601\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;tag="web-bot-auth"
Signature: agent=:YWdlbnQtc2lnbmF0dXJl:,\
 browser=:YnJvd3Nlci1zaWduYXR1cmU=:
]]></artwork>
        <t>The origin verifies each signature on its own. The <tt>agent</tt> signature covers the
fields selected by Alice's agent. The <tt>browser</tt> signature covers the request
sent by the remote browser, its own <tt>Signature-Agent</tt> member, and all three of
the <tt>agent</tt> label's fields, as <xref target="multiple-signatures"/> requires. This records
that the remote browser forwarded a request carrying the agent's signature. It
does not say that Alice's agent authorized the remote browser to act for it.</t>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>These vectors exercise the minimum this document requires, so most of them
cover <tt>@authority</tt> and nothing else, with an <tt>expires</tt> far enough out that they
do not age. That combination is a parsing and verification exercise, not a
configuration to copy: as <xref target="generating-http-message-signature"/> explains, a
signature covering <tt>@authority</tt> alone is reusable against that authority for
any method, path, and body until it expires. Deployments should cover more and
expire sooner.</t>
      <section anchor="rsassa-pss-using-sha-512">
        <name>RSASSA-PSS Using SHA-512</name>
        <t>The test vectors in this section use the RSA-PSS key defined in <xref section="B.1.2" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
This section includes non-normative test vectors that may be used as test cases to validate implementation correctness.</t>
        <section anchor="signature-agent-absent-from-the-request">
          <name>Signature-Agent absent from the request</name>
          <t>This example presents a minimal signature using the rsa-pss-sha512 algorithm over test-request. The request does not contain
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"@signature-params": ("@authority")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=4889289600\
 ;nonce="JojDFWJ90jf+gZhdKeTyJYsu1XvNPZSFAGhvYq5SuV3gneOEUAhq+xl792WGuD1W+Dr6NRmx+m+t06NsYnL4iA=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig1</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Input: sig1=("@authority")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=4889289600\
 ;nonce="JojDFWJ90jf+gZhdKeTyJYsu1XvNPZSFAGhvYq5SuV3gneOEUAhq+xl792WGuD1W+Dr6NRmx+m+t06NsYnL4iA=="\
 ;tag="web-bot-auth"
Signature: sig1=:hWPaj85MWQiRkzU4jnIKvdPQiDfMCPIoxOP8nZveNc3aFQ7r/UmXWCwGNImw588iRvTFey5TR3fVEgnXpcttlyK+u5pN831z9Wlr+IMNfub4uEM3SuO+SKFygJZyLG0pf7OAiRcU4C0gyx1BS/+z9ydQTRzDLr88wCkBBRqwGRrSi8HTwxkqg1jugobh93hcnU6gV8MK1n+VnhRprIgl2RQSO6q5cfbB4OS8C4t/8ndW0lYmP2SWzKZJXnpX5Wrj17PuLqnVW6MO8pJnLAMXNvxUdx32KHeq/cHFrzZazZsua3UOoP+k+niHwoQ8bBWj1Vi4mM1mYJK+fk366cCLsQ==:
]]></artwork>
        </section>
        <section anchor="example-signature-agent-included">
          <name>Signature-Agent included present on the request</name>
          <t>This example presents a minimal signature using the rsa-pss-sha512 algorithm over test-request. The request contains
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"signature-agent";key="agent2": "https://signature-agent.test"
"@signature-params": ("@authority" "signature-agent";key="agent2")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=4889289600\
 ;nonce="wcfPQPh7SzkvrIVvhD00vNk9PkxJNY2NVbYl2PVBB4zmUoluSwE7W6bPtF60QA3k8g06FU7PPCD+J58YofY1zg=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig2</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Agent: agent2="https://signature-agent.test"
Signature-Input: sig2=("@authority" "signature-agent";key="agent2")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=4889289600\
 ;nonce="wcfPQPh7SzkvrIVvhD00vNk9PkxJNY2NVbYl2PVBB4zmUoluSwE7W6bPtF60QA3k8g06FU7PPCD+J58YofY1zg=="\
 ;tag="web-bot-auth"
Signature: sig2=:gHzpLNeHaHIO19NaJH9YMW5dcVSi2s0wOMBr6p18vcofS106sfC4KBIS0/szPlBBd1vIcyQ88B6CTEWIhRAiVrb9zfX0mx1aG12CSGWcYkSirHeyTxhbuJvXd27ed6skWoy4PjXItq38936ivUQjfdIwXh1aX6HxkAC3vRnEdSNfntkLWeEuIQ5BLIOBGE39fSwg27Qjq6OVWYas/9/aFUr3HA34MXWYdp+//cvlEKDp3kRoLOw9ro0AOr6srHrTeEtxon2afcws1aZVSlPdd2fZSEIGmw9HAHLDCEkFTERu1gH2k/zIEqgy7CAYXI9E5slog0cLg/Vc6+f8gih33g==:
]]></artwork>
        </section>
        <section anchor="example-legacy">
          <name>Legacy Signature-Agent, sf-string</name>
          <t>Retained for implementers migrating to the dictionary form (<xref target="signature-agent"/>). Do not copy it into new deployments.</t>
          <t>This example presents a minimal signature using the rsa-pss-sha512 algorithm over test-request. The request contains
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"signature-agent": "https://signature-agent.test"
"@signature-params": ("@authority" "signature-agent")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=1735693200\
 ;nonce="XSHtZVCThSIAksXsH9WBs6AtxtXC0eQGiIcUGSoJstFs8lAWakjhrfwzLhyjtme5iXMZvmFWqDEs6cT3Jf+BbQ=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig2</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Agent: "https://signature-agent.test"
Signature-Input: sig2=("@authority" "signature-agent")\
 ;created=1735689600\
 ;keyid="oD0HwocPBSfpNy5W3bpJeyFGY_IQ_YpqxSjQ3Yd-CLA"\
 ;alg="rsa-pss-sha512"\
 ;expires=1735693200\
 ;nonce="XSHtZVCThSIAksXsH9WBs6AtxtXC0eQGiIcUGSoJstFs8lAWakjhrfwzLhyjtme5iXMZvmFWqDEs6cT3Jf+BbQ=="\
 ;tag="web-bot-auth"
Signature: sig2=:I1QWNzGXdP1a4dSvOHLCVOOanEYHDk+ZsVxM9MLX/p4ko69ghKwR5EOtAD96g7g4GWP7lmpM/jFAf9q8EFRDTPLjUXySwMv4YPgabv2LQihTJG2y8a2m6IGltyruwQNiqSJVUuRaG9+b17CGmAMFZh30X6GXLdQJrCARpeTqPwp2DC+a8haDE/VE5EruqzjA5/2mKwvrkzkSqeW5tOVtFwWRRHIOidquf/8Je6kM9mhgkg4arudLA5SL4wyyYE1jURIgcOl8agrfdJ5Def23DIRtiOLRa8jT9cpTLFAuFHN+mrZA/LH9h0gSIg1cPb+0cMASee5uku1KjWcFer7jWA==:
]]></artwork>
        </section>
      </section>
      <section anchor="eddsa-using-curve-edwards25519">
        <name>EdDSA Using Curve edwards25519</name>
        <t>The test vectors in this section use the Ed25519 key defined in <xref section="B.1.4" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.
This section include non-normative test vectors that may be used as test cases to validate implementation correctness.</t>
        <section anchor="signature-agent-absent-from-the-request-1">
          <name>Signature-Agent absent from the request</name>
          <t>This example presents a minimal signature using the ed25519 algorithm over test-request. The request does not contain
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"@signature-params": ("@authority")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=4889289600\
 ;nonce="zIW8+cdmA3vdYagbxojpONwa/l0EKJ/O3/wD486VvsQjO/RxPaSt6ZxvQaMcQzNnqKN/mQ6hpGiFro2L2qkz5A=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig1</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Input: sig1=("@authority")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=4889289600\
 ;nonce="zIW8+cdmA3vdYagbxojpONwa/l0EKJ/O3/wD486VvsQjO/RxPaSt6ZxvQaMcQzNnqKN/mQ6hpGiFro2L2qkz5A=="\
 ;tag="web-bot-auth"
Signature: sig1=:QKN4fTdIYfh82fvoZCQiQA1weuozfCS/Led2zTMbewMMqH8PI2Wsy/5c4ao6B6D09nraNQdBNOADg8aM1MqfCg==:
]]></artwork>
        </section>
        <section anchor="signature-agent-included-present-on-the-request">
          <name>Signature-Agent included present on the request</name>
          <t>This example presents a minimal signature using the ed25519 algorithm over test-request. The request contains
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"signature-agent";key="agent2": "https://signature-agent.test"
"@signature-params": ("@authority" "signature-agent";key="agent2")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=4889289600\
 ;nonce="n9p433xm+NJ3ph3upfBIGmsuwHw387YV7Q/F+6BSpGCVjYCqQw6rznNA8PVVLySrAWsv0hQtFioQb6E1YsauiA=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig2</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Agent: agent2="https://signature-agent.test"
Signature-Input: sig2=("@authority" "signature-agent";key="agent2")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=4889289600\
 ;nonce="n9p433xm+NJ3ph3upfBIGmsuwHw387YV7Q/F+6BSpGCVjYCqQw6rznNA8PVVLySrAWsv0hQtFioQb6E1YsauiA=="\
 ;tag="web-bot-auth"
Signature: sig2=:RdNFx5Bj6au3YgAMQL/RzmUlZE8QZLIaXGRpw985hWnwPfMxT228NMk6ehRS1PSl4e8PhbNZACSanGdhEwYCCg==:
]]></artwork>
        </section>
        <section anchor="legacy-signature-agent-sf-string">
          <name>Legacy Signature-Agent, sf-string</name>
          <t>Retained for implementers migrating to the dictionary form (<xref target="signature-agent"/>). Do not copy it into new deployments.</t>
          <t>This example presents a minimal signature using the ed25519 algorithm over test-request. The request contains
a <tt>Signature-Agent</tt> header.</t>
          <t>The corresponding signature base is:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

"@authority": example.com
"signature-agent": "https://signature-agent.test"
"@signature-params": ("@authority" "signature-agent")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=1735693200\
 ;nonce="e8N7S2MFd/qrd6T2R3tdfAuuANngKI7LFtKYI/vowzk4lAZYadIX6wW25MwG7DCT9RUKAJ0qVkU0mEeLElW1qg=="\
 ;tag="web-bot-auth"
]]></artwork>
          <t>This results in the following Signature-Input and Signature header fields being added to the message under the label <tt>sig2</tt>:</t>
          <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Signature-Agent: "https://signature-agent.test"
Signature-Input: sig2=("@authority" "signature-agent")\
 ;created=1735689600\
 ;keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"\
 ;alg="ed25519"\
 ;expires=1735693200\
 ;nonce="e8N7S2MFd/qrd6T2R3tdfAuuANngKI7LFtKYI/vowzk4lAZYadIX6wW25MwG7DCT9RUKAJ0qVkU0mEeLElW1qg=="\
 ;tag="web-bot-auth"
Signature: sig2=:jdq0SqOwHdyHr9+r5jw3iYZH6aNGKijYp/EstF4RQTQdi5N5YYKrD+mCT1HA1nZDsi6nJKuHxUi/5Syp3rLWBA==:
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="implementations">
      <name>Implementations</name>
      <t>This draft has a couple of public implementations. A demonstration server has been deployed to <eref target="https://http-message-signatures-example.research.cloudflare.com/">https://http-message-signatures-example.research.cloudflare.com/</eref>.</t>
      <t>It uses ed25519 example signing and verifying keys defined in <xref section="B.1.4" sectionFormat="of" target="HTTP-MESSAGE-SIGNATURES"/>.</t>
      <section anchor="clients">
        <name>Clients</name>
        <t>draft-meunier-webbotauth-httpsig-protocol-00</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">Chrome MV3</eref> (TypeScript)</t>
          </li>
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">Cloudflare Workers</eref> (TypeScript)</t>
          </li>
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">Rust binaries</eref> (Rust)</t>
          </li>
        </ul>
        <t>draft-meunier-web-bot-auth-architecture-03</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/stytchauth/web-bot-auth-example">Puppeteer script</eref> (JavaScript)</t>
          </li>
          <li>
            <t><eref target="https://github.com/olipayne/guzzle-web-bot-auth-middleware">Guzzle middleware</eref> (PHP)</t>
          </li>
          <li>
            <t><eref target="https://zenn.dev/oymk/articles/944069e5eddc27">Python script</eref> (Python)</t>
          </li>
          <li>
            <t><eref target="https://github.com/cyberstormdotmu/bot-authentication">Bot-Authentication</eref> (Python)</t>
          </li>
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">HTTPie plugin</eref> (Python)</t>
          </li>
          <li>
            <t><eref target="https://github.com/cyberstormdotmu/bot-authentication">Web scrapers (scrapy/crawl4ai)</eref> (Python)</t>
          </li>
          <li>
            <t><eref target="https://github.com/HumanSecurity/human-verified-ai-agent">HUMAN Verified AI Agents</eref> (Python)</t>
          </li>
          <li>
            <t><eref target="https://github.com/nomadium/linzer/blob/master/spec/integration/cloudflare_example_research_spec.rb">Linzer</eref> (Ruby)</t>
          </li>
        </ul>
      </section>
      <section anchor="servers">
        <name>Servers</name>
        <t>draft-meunier-webbotauth-httpsig-protocol-00</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">Cloudflare Workers</eref> (TypeScript)</t>
          </li>
        </ul>
        <t>draft-meunier-web-bot-auth-architecture-03</t>
        <ul spacing="normal">
          <li>
            <t><eref target="https://github.com/cloudflare/web-bot-auth">Caddy plugin</eref> (Go)</t>
          </li>
          <li>
            <t><eref target="https://github.com/garyillyes/web-bot-auth-apache">Apache module</eref> (C)</t>
          </li>
        </ul>
      </section>
      <section anchor="test-vectors-1">
        <name>Test vectors</name>
        <ul spacing="normal">
          <li>
            <t>In <eref target="https://github.com/cloudflare/web-bot-auth/blob/main/packages/web-bot-auth/test/test_data/web_bot_auth_architecture_v2.json">JSON format</eref></t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The editor would also like to thank the following individuals (listed in alphabetical order) for feedback, insight, and implementation of this document -
Marwan Fayed,
Maxime Guerreiro,
Scott Hendrickson,
Jonathan Hoyland,
Nikhil Kandoi,
Akshat Mahajan,
Mark Nottingham,
Eugenio Panero,
Lucas Pardue,
Malte Ubl,
Loganaden Velvindron,
Tanya Verma.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>draft-meunier-webbotauth-httpsig-protocol-01</t>
      <ul spacing="normal">
        <li>
          <t>Add an Identifiers and Trust Model section: opaque and domain binding modes.</t>
        </li>
        <li>
          <t>Describe the document as a protocol throughout (was: architecture).</t>
        </li>
        <li>
          <t>Fold <tt>draft-meunier-webbotauth-httpsig-directory</tt> into this document with its
IANA registrations, and move to Standards Track.</t>
        </li>
        <li>
          <t>Anchor identity on the resolved <tt>Signature-Agent</tt> URL rather than the key.
Rotation is the same URL serving a new key; the thumbprint identifies only
when no URL is sent. A <tt>directory</tt> value is an origin, identifiers are
normalized before comparison, and <tt>kid</tt> equals the key thumbprint.</t>
        </li>
        <li>
          <t>Define attribution: lookup on the (URL, key) pair, what redistributed key
material must carry, which source wins when two disagree, what a failed
resolution means, a bound on the resolution behind it, and rejection
of directory response signatures dated in the future.</t>
        </li>
        <li>
          <t>When chaining, an outer signature covering an inner <tt>signature</tt> <bcp14>MUST</bcp14> also
cover its <tt>signature-input</tt>, <tt>signature-agent</tt>, and every component the inner
signature covered. Verifiers validate each signature independently.</t>
        </li>
        <li>
          <t>Say what a signature does not reach: not the body without <tt>Content-Digest</tt>,
and not the method or path when only <tt>@authority</tt> is covered. Correct the
relabeling guidance, and note how to migrate from the sf-string form.</t>
        </li>
        <li>
          <t>Move the domain binding to an appendix. Add objectives, the relationship with
anonymous bot authentication, a use case to identifier mapping, what an
unsigned request tells a verifier, and the worst case for a compromised key.</t>
        </li>
        <li>
          <t>Note how field compression treats reused and per-request signatures, and why
that is not a reason to widen coverage.</t>
        </li>
      </ul>
      <t>draft-meunier-webbotauth-httpsig-protocol-00</t>
      <ul spacing="normal">
        <li>
          <t>Rename draft from <tt>draft-meunier-web-bot-auth-architecture</tt>.</t>
        </li>
        <li>
          <t>Add SSRF guidance for <tt>Signature-Agent</tt> directory fetches.</t>
        </li>
        <li>
          <t>Add deployment guidance for verifier outcomes, directory fetches, caching,
retry, rollout, proxies, CORS, and observability.</t>
        </li>
        <li>
          <t>Add guidance for test keys, static signatures, and discovery failures.</t>
        </li>
        <li>
          <t>Add multiple Web Bot Auth signatures and an example.</t>
        </li>
        <li>
          <t>Add typed <tt>Signature-Agent</tt> discovery examples for <tt>directory</tt>, <tt>jwks_uri</tt>,
and <tt>cimd</tt>.</t>
        </li>
        <li>
          <t>Group implementations by the draft version that added them.</t>
        </li>
        <li>
          <t>Clarify that <tt>Signature-Input</tt> <tt>keyid</tt> selects the key and <tt>Signature-Agent</tt>
points to candidate key material.</t>
        </li>
        <li>
          <t>Note <tt>Signature-Key</tt> as an optional discovery header.</t>
        </li>
        <li>
          <t>Align examples with published test-vector fixtures.</t>
        </li>
        <li>
          <t>Fix typos.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-05</t>
      <ul spacing="normal">
        <li>
          <t>Add Sandor Major as an author.</t>
        </li>
        <li>
          <t>Add session protocol considerations.</t>
        </li>
        <li>
          <t>Update HTTP Message Signatures test vectors.</t>
        </li>
        <li>
          <t>Keep legacy <tt>Signature-Agent</tt> string examples for implementers migrating to
dictionary members.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-04</t>
      <ul spacing="normal">
        <li>
          <t>Change <tt>Signature-Agent</tt> to a Structured Fields dictionary.</t>
        </li>
        <li>
          <t>Add a security consideration for intermediaries that relabel
<tt>Signature-Agent</tt> members.</t>
        </li>
        <li>
          <t>Allow <tt>@target-uri</tt> as a replacement for <tt>@authority</tt>.</t>
        </li>
        <li>
          <t>Add contributors.</t>
        </li>
        <li>
          <t>Add implementations.</t>
        </li>
        <li>
          <t>Remove the <tt>purpose</tt> field from the Web Bot Auth example.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-03</t>
      <ul spacing="normal">
        <li>
          <t>Update the Linzer example URL.</t>
        </li>
        <li>
          <t>Fix the section reference and name for status code 429.</t>
        </li>
        <li>
          <t>Fix typos.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-02</t>
      <ul spacing="normal">
        <li>
          <t>Add response status codes.</t>
        </li>
        <li>
          <t>Add references for readability.</t>
        </li>
        <li>
          <t>Add text about signing extra headers.</t>
        </li>
        <li>
          <t>Add TLS guidance to Security Considerations.</t>
        </li>
        <li>
          <t>Add RSASSA-PSS examples.</t>
        </li>
        <li>
          <t>Update acknowledgments.</t>
        </li>
        <li>
          <t>Add PHP, Python, Ruby, and Rust implementations.</t>
        </li>
        <li>
          <t>Fix <tt>Signature-Agent</tt> in the architecture diagram to use Structured Fields.</t>
        </li>
        <li>
          <t>Fix test vectors to use Structured Fields for <tt>Signature-Agent</tt>.</t>
        </li>
        <li>
          <t>Fix typos.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-01</t>
      <ul spacing="normal">
        <li>
          <t>Require clients to sign <tt>Signature-Agent</tt> when it is present.</t>
        </li>
        <li>
          <t>Add test vectors for requests with and without <tt>Signature-Agent</tt>.</t>
        </li>
        <li>
          <t>Fix the example diagram.</t>
        </li>
        <li>
          <t>Add reverse proxy security considerations.</t>
        </li>
        <li>
          <t>Update text about why an origin may request a new signature.</t>
        </li>
        <li>
          <t>Update nonce validation wording and uniqueness requirements.</t>
        </li>
        <li>
          <t>Add acknowledgments.</t>
        </li>
      </ul>
      <t>draft-meunier-web-bot-auth-architecture-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft.</t>
        </li>
        <li>
          <t>Describe how to use HTTP Message Signatures to sign requests.</t>
        </li>
        <li>
          <t>Describe signature verification.</t>
        </li>
        <li>
          <t>Define the <tt>web-bot-auth</tt> tag.</t>
        </li>
        <li>
          <t>Derive <tt>keyid</tt> from the JWK Thumbprint.</t>
        </li>
        <li>
          <t>Add initial Security and Privacy Considerations.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
yaol+t/MrFXx/z8Nk/4mRvK2+51+wt/n8d+0hlb+WXjHuNs7vzgfvG4/3T+k
R+8fBrtLSw+n91vn949vT29XTt93bqOV8/c7O2tPw+skKtrjvdc3G53zfH9j
6aK5er/ZX9rYv359ft7affV2ffM26d0uP/X/WUXAyh8VAbbDYOXHe00bybHy
5t+H47uHoyxYVt5s9w+fRsenwaF3eHS2vHXqvT3cuj25Wfe779vhSrY0PjvZ
STdGy5sP3aTXXl7ayHqttXc7R+2lxezpPNrZ8ZcfjrqTi83NnY3W1d7N0eCy
Gb5PO1tPvQ9Lw8dl72B5pdU+uOne3rfD9DCYXD0OOsXbhw/+yuvA38jub5LJ
2vnnD0f5l9XNrdWN8OH64nPPPxp/GCx7HzYOH++brdWHy3jPb5/24vz++CbY
K44u1neOj852DvZWt3rtcX/l9cXnLxtn729uvWxxa9Hbv05XD5uraycfbm79
0avFxe5DtPdud7R6f5kcn4230mSpeZZuZOlhehXs5Y9JvOL1uuNs2fv4vh2d
+/5K72N77+hgON46bB4e77b27vev9i6L5f7hyv3i09Hel/7kdat5++Foa289
i5L+Uve4v/i+u/Gqt9kPB6ur/ZJgOQ76COtVOepgnfbqGAimOkklSiL6LcGV
Ii8XiBxtPBAieNhPpeJSVelpnHRMWybEz/LRp2j7biKa/GjCSPPYWC0Y23HL
xr8FVolj/LfIqP95zkMv2VpdKXGeD+3D/OP71tWgfdS8zz5kh1s3O9lGM3/M
P7SWgouD8Kh7fdBO3mb5frYZNW+8+8+DtDd+Oh5MPufDYD38cPLxYbh/82V3
L9voXq2+7b3a6Vz8q4ql/w559P/TgzAlgo6WL25Onw4++OfL3prffjg7PG69
Pzvz4r3bw937Vx+z948nWyfHHxZHa/fJxlZ/8G58ub53ljd3tzb6r/trBzfn
r6Ph6GTx836zt/Vlc2//cvfq/Pjz9YdJe3zysHZ73vc6DyvHF+Hg6u3BymTT
WxluHB1E+SQtxhen4Zf22/fXxaV3sPWqs/y6dTBsnux/HKwufdg4+HDsX7xN
W83LUXD15Xw8WtltvfI2B97u3uL7vfW9tPjy9Lm5vrgyfDd+SO+f7ttfgpv1
/Ox9vj++ubwEkRr6X4re4ubbYOP+ZGs46N/317y08I+b6+3jtfFkcru3/Pn6
8qjfPYs2vX7a89+u7wa9ldXdo8s8PDu+9DY/X211R1fH+81i//D01TD92Fw8
PtwaLPXbR/3l7nnn1VL3pNkOgvXivlh+9/mmux+krz/fNC0R5O75u+2mONda
BaYyBD4l1FFR30/42fa4DPA7frZvl73O9rP9S7jZpEry3/61PxI8I+YlFPy+
4vx0dLP5qusPm6sP/q3X7zwmn0dnp2NvMVrae/d28Wx1cby7trnx/iG7+Hy2
ePl47rXzjY+PDxfeSffi6TT+8u50cXixMRgdhPtpsnK88uX+af3fjrV/2f2b
8qhdvDtd6135R7e9weZK7yH52LoIL5rL46BInnqt9uIxLOXp6qQTjE9Ovhxu
nh+t3GSTxfXumpds7GzsLm3FqXd64e+cnjV3+5veyfLJl16r//d4lP6HeM4/
vdb9T+cm+u+9CfHWaG119XH46vTt6miwWox6O2B6ZsX4cLy6+fr2/euLxf1X
Gzvt0UHr/efb1peL8Ub6FJ82N8/fvz+etNPmTfawNLjI98PkorOxt3ybecU/
b4jgX8c/9K91Kqa08kv/dP9xfefzhles3vabJxfHi5dPw+vo497mxcfjI+/D
weVovLW5PriJx+e9k8erlZXN05P7jWBw2V4+b0drweb5oHP6sdlqe/GBP9gb
37ZaP+kY+f+WG+RfjxP/X/J//MNu1kx7N9g8fd1eOdn3F7+k/sbVyuVq7vea
RdE8jfvvjl4f7+fvbo8WH5Lx0/1a1Px46/lHHzbGNyvrJ+OD17utq63L63fN
t0tf3t9fLw33guO96Gb5y7+sP/7/juPjX+sETPHWz/6XpfaXs/GhPzlMt16l
65/Hq+Htx8MN7/TgXfj5drS4l+X7a5cXVxd+uH66fnv7Lt19NWxdLR82l+OP
u1m4Eb99Vxw+XoeL6+3JaDU9vtmxLH630qpaIXanXi8nZBKsGSyQtSFav/TT
LT9CHXlKaduS2c7tyIJYGCafwr+pUzIv61exGeSk1NCwGyWF34u8lFjPokkl
/qMjYBLxEWENZ5oT6xRgye3WWVgTyfTO/g4vBhUaMIa/4xBpYdpFjIgpsP2w
+7j5lLAFr68r8JX60hLmx/+tNUgxw/rk/erMLGqzuEX7LL10XyBGdbubhqP8
JQ+kf4kdAe9BNP6dA14W2MAN0S/C4GfHwmdfzqCG/k0dty5E2A1kB0ur9Mbz
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
xlXJaiVWKUvQ1xTJNrsJe8P5fwFKElbs5R4BAA==

-->

</rfc>
