<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-reddy-wimse-aggregate-signatures-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="WIMSE Chain Provenance">Authenticated Provenance for WIMSE Delegation Chains</title>
    <seriesInfo name="Internet-Draft" value="draft-reddy-wimse-aggregate-signatures-01"/>
    <author fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author fullname="Hannes Tschofenig">
      <organization abbrev="UniBw M.">University of the Bundeswehr Munich</organization>
      <address>
        <postal>
          <city>Neubiberg</city>
          <region>Bavaria</region>
          <country>Germany</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer">
      <organization>Intuit</organization>
      <address>
        <email>yaronf.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="28"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>aggregate signatures</keyword>
    <keyword>signature stripping</keyword>
    <keyword>workload identity</keyword>
    <keyword>PQC</keyword>
    <abstract>
      <?line 72?>

<t>A request and its response, passing through a chain of workloads, may need
authenticated provenance: proof of which workloads participated and whether each
changed the message. The base WIMSE HTTP Message Signatures mechanism
(<xref target="I-D.ietf-wimse-http-signature"/>) authenticates one workload's message to its
immediate recipient and does not provide this across a chain. This document
establishes authenticated provenance using per-hop digests of what each hop
received and forwarded; this alone detects an omitted hop that changed the
message. An aggregate signature closes the remaining gap, a hop that forwards
the message unchanged, and keeps the signature close to the size of one
signature regardless of chain length. The mechanism works with any aggregate
signature scheme.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-reddy-wimse-aggregate-signatures/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/tireddy2/WIMSE-aggregate-signature"/>.</t>
    </note>
  </front>
  <middle>
    <?line 86?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The WIMSE architecture (<xref target="I-D.ietf-wimse-arch"/>) authenticates a workload with a
Workload Identity Token (WIT) (<xref target="I-D.ietf-wimse-workload-creds"/>), a credential
that identifies the workload. On its own a WIT is a bearer credential: any party
that obtains it could present it as its own.</t>
      <t>The WIMSE HTTP Message Signatures mechanism (<xref target="I-D.ietf-wimse-http-signature"/>)
binds the WIT to a specific HTTP message. The sending workload signs the message
with the key bound to its WIT. This proves the sender holds the WIT's key, and it
protects the message from modification in transit, including by intermediaries
that terminate TLS.</t>
      <t>A request may pass through several workloads before reaching its destination,
forming a delegation chain. <xref target="I-D.ietf-wimse-http-signature"/>
authenticates one workload's message to its immediate recipient and requires a
single signature per message; it does not define a mechanism for
preserving provenance across a sequence of distinct workload-to-workload
exchanges. This is by design, not a shortcoming: the base protocol was not
scoped to provide it.</t>
      <t>This document defines that additional property: authenticated
provenance across a delegation chain, meaning the ability for a downstream
party to verify which workloads participated in the chain and whether each one
changed the message. Because every hop's signature remains verifiable at
the destination, an alteration by a later hop is also detected: if the
initiator signed a POST and a hop forwards it as a DELETE, the initiator's
signature no longer verifies.</t>
      <t>The base WIMSE HTTP Message Signatures mechanism
(<xref target="I-D.ietf-wimse-http-signature"/>) authenticates a workload to its immediate
peer. It gives no mechanism for the destination to learn
the full set of workloads that participated in a delegation chain, for
either the request or the response. When an agent delegates a sub-task
through several other agents or tools, nothing lets a later party
reconstruct who was actually involved, a gap that matters most in agentic
systems (<xref target="agentic"/>), where the path is dynamic and chosen at runtime.</t>
      <t>A party receiving a delegated request or response may need to know, for
each participating workload, whether it forwarded the message unchanged
or modified it. This document proves that per workload, using the
aggregate signature (<xref target="integrity"/>) and the lineage digests (<xref target="lineage"/>)
together. A party that separately knows a workload's expected role can
use this proof to detect misbehavior: for example, a gateway that is
expected only to forward can be shown to have modified the message
instead. What a workload is allowed to do is a separate question,
addressed by authorization policy and out of scope (<xref target="scope"/>); this
document only proves what a workload actually did.</t>
      <t>A misbehaving workload can act in one of two ways: it can omit itself from
the chain undetected, or it can tamper with the message, for example an
agent that hallucinates and forwards a sub-task built on fabricated
information. This mechanism supports audit and forensics: it narrows the
search by identifying which workload made a change and fingerprinting what
changed, so an auditor knows which workload's own logs to consult for the
actual transformation. Without this record, finding that workload requires
tracing the chain manually, and for one omitted silently, may not be
possible at all.</t>
      <t>This document defines two mechanisms. First, each hop's WIMSE signature
covers, in addition to what <xref target="I-D.ietf-wimse-http-signature"/> requires,
lineage digests of the message body the hop received and forwarded, and the
path and query it sent (<xref target="lineage"/>). This detects removal of a hop that
changed the message body, and identifies which hop changed the body, path or
query, with individual signatures. Second, an aggregate signature, used in
place of individual signatures, additionally prevents removal of a hop that
forwarded the message unchanged (<xref target="integrity"/>, <xref target="rationale"/>), and keeps the
signature size constant regardless of chain length, which matters for large
PQC signatures once PQC aggregate schemes mature (<xref target="agility"/>).</t>
    </section>
    <section anchor="agentic">
      <name>Delegation in Agentic Systems</name>
      <t>An AI agent is a workload and is authenticated by a WIT like any other workload.
Agentic systems are a primary motivation for this document because they produce
delegation chains with two properties that make the need for authenticated
provenance described in <xref target="intro"/> especially important.</t>
      <t>The path is dynamic. An agent decides at processing time which downstream agent to
delegate a sub-task to, so the chain is not fixed by configuration and is not
known to the destination in advance. The destination therefore cannot check the
chain against an expected path; it can only rely on what the chain itself proves.
This is why silent removal of a hop must be detectable from the signatures alone.</t>
      <t>The request is transformed at each hop. Unlike a forwarding proxy, an agent
changes the content it passes on: the sub-task given to a downstream agent differs
from the task the agent received. Each transformation must be cryptographically
attributable to the agent that performed it.</t>
      <section anchor="goals">
        <name>Goals</name>
        <t>For a delegation chain, this document provides evidence, carried on the
message and verified by the party acting on it, for three uses:</t>
        <dl>
          <dt>In-band attack detection:</dt>
          <dd>
            <t>Detecting attacks on the chain from the message itself, at the next
workload or the destination, without relying on out-of-band records.</t>
          </dd>
          <dt>Observability:</dt>
          <dd>
            <t>A signed record of which workloads participated and whether each changed
the message.</t>
          </dd>
          <dt>Policy enforcement:</dt>
          <dd>
            <t>Input to decisions that depend on the multi-hop behavior of the task, not
only on the last hop. For example, a destination can reject a request that
passed through a workload not permitted to handle the task, or whose
content was modified by a workload expected only to forward it.</t>
          </dd>
        </dl>
        <t>The mechanism provides the following security properties:</t>
        <ul spacing="normal">
          <li>
            <t>Originator authentication: the initiator is identified by its WIT, and
the chain traces back to it.</t>
          </li>
          <li>
            <t>Removal detection: a workload that signed cannot be removed from the
chain, including one that forwarded the message unchanged (<xref target="integrity"/>).</t>
          </li>
          <li>
            <t>Modification detection: a change made by a party that did not sign is
detected (<xref target="lineage"/>). A change made by a signing workload to @method or
content-type, for example a POST forwarded as a DELETE, is also detected,
because the earlier workloads' signatures no longer verify
(<xref target="sig-context"/>).</t>
          </li>
          <li>
            <t>Change attribution: a change made by a signing workload is recorded as
that workload's change (<xref target="lineage"/>).</t>
          </li>
          <li>
            <t>Non-repudiation: a workload cannot deny what it received or sent, because
it signed both.</t>
          </li>
          <li>
            <t>Response binding: each response is bound to the request it answers
(<xref target="responses"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>Authorization is out of scope and is being addressed in the OAuth WG.</t>
      </section>
      <section anchor="relationship-to-distributed-tracing">
        <name>Relationship to Distributed Tracing</name>
        <t>Distributed tracing (<xref target="W3C-TRACE-CONTEXT"/>) also records which workloads
handled a request or response. The record is unsigned: a workload can alter
what it reports or leave itself out. It is also collected out-of-band:
per-workload logs must be gathered and correlated across workloads, which is
slow and expensive, and a receiving party must wait on, or trust, that trace.
This document instead carries verifiable evidence on the message itself, so
the receiving party can act on it directly. A workload cannot later deny what
it received or sent, because it signed both.</t>
      </section>
    </section>
    <section anchor="terminology-and-conventions">
      <name>Terminology and Conventions</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>This document uses the terms from <xref target="I-D.ietf-wimse-arch"/>,
<xref target="I-D.ietf-wimse-workload-creds"/>, and <xref target="I-D.ietf-wimse-http-signature"/>.
Aggregation is used as defined in <xref target="I-D.irtf-cfrg-bls-signature"/>: given a list of
signatures for a list of messages and public keys, an aggregation algorithm
produces one signature that authenticates the same list of messages and public
keys. This document additionally uses:</t>
      <dl>
        <dt>Authenticated Provenance:</dt>
        <dd>
          <t>Signed evidence of which workloads participated in a delegation chain
and whether each changed the message.</t>
        </dd>
        <dt>Hop:</dt>
        <dd>
          <t>A workload that signs the message as it passes along the chain.</t>
        </dd>
        <dt>Delegation Chain:</dt>
        <dd>
          <t>The sequence of hops that sign the message, from the initiator (H_1) to
the last hop (H_N). This document authenticates which hops participated
and the message lineage between them (<xref target="lineage"/>). The lineage also
authenticates the order of hops that change the message, but not of
consecutive hops that forward it unchanged.
A workload may issue several requests to fulfill a delegated task. A
request that delegates the task, or part of it, to another workload
continues the chain. A request the workload issues on its own behalf,
for example to retrieve data from a tool, is not part of the chain; the
workload acts as the initiator of a new chain and can use this
mechanism for it.</t>
        </dd>
        <dt>Initiator:</dt>
        <dd>
          <t>The first hop (H_1), which originates the message.</t>
        </dd>
        <dt>Destination:</dt>
        <dd>
          <t>The party (H_{N+1}) that receives the message from the last hop and verifies the
chain.</t>
        </dd>
      </dl>
    </section>
    <section anchor="how-aggregate-signatures-work">
      <name>How Aggregate Signatures Work</name>
      <t>An aggregate signature scheme combines several signatures, each produced by a
different signer over a different message, into a single value. A verifier checks
that one value against the whole set of signer public keys and messages
(<xref target="fig-agg"/>). The values are:</t>
      <ul spacing="normal">
        <li>
          <t>k_i: the public key of hop i, obtained from its WIT.</t>
        </li>
        <li>
          <t>m_i: the signature base (<xref target="RFC9421"/> Section 2.5) for hop i, built per
the WIMSE profile (<xref target="I-D.ietf-wimse-http-signature"/>) from hop i's
Signature-Input entry. This is the input to HTTP_SIGN and HTTP_VERIFY
(<xref target="RFC9421"/> Section 3.3).</t>
        </li>
        <li>
          <t>s_i: the signature of hop i over m_i.</t>
        </li>
        <li>
          <t>S: the aggregate of s_1 to s_N.</t>
        </li>
      </ul>
      <figure anchor="fig-agg">
        <name>Aggregating per-hop signatures into a single value</name>
        <artwork type="ascii-art"><![CDATA[
  H1: sign(m1) --> s1 --.
                        |
  H2: sign(m2) --> s2 --+--> aggregate --> S
                        |
  H3: sign(m3) --> s3 --'

  Verify:  S  against  { (k1,m1), (k2,m2), (k3,m3) }  in a single operation

  * one value S proves all of H1, H2, H3 signed
  * to drop Hk from S, the attacker must subtract sk but sk is never
    placed on the wire, so it cannot be removed
]]></artwork>
      </figure>
      <t>Combining requires no secret: any party can fold a further signature into the
running value S. Removing a contribution is different. To remove hop k from S, a
party needs s_k, the individual signature of hop k. In a chain where only the
running aggregate is forwarded, an interior hop's individual signature is never
placed on the wire, so an upstream hop cannot be removed. The algorithm that
produces and combines the signatures is not fixed by this document; it is carried
in each hop's WIT. Because signatures can be aggregated only within a single
scheme, all hops in the chain will have to use the same algorithm (see <xref target="agility"/>).</t>
    </section>
    <section anchor="integrity">
      <name>Chain Integrity via Aggregate Signatures</name>
      <t>Each hop signs its message as profiled in <xref target="I-D.ietf-wimse-http-signature"/>,
additionally covering the lineage parameters of <xref target="lineage"/>. The hops' signatures
are combined into a single aggregate signature carried in a new HTTP field,
Signature-Aggregate. Like the Signature field of <xref target="RFC9421"/>, its value is a
Byte Sequence and is therefore base64-encoded (<xref target="RFC9651"/>). The presence of
Signature-Aggregate signals aggregate mode: a hop that receives it folds its
signature into the running aggregate rather than adding an independent Signature,
and the destination verifies the single value against all Signature-Input entries.
Each hop's Signature-Input entry is retained, so the verifier has, for each hop,
the covered components and, via the hop's WIT, the public key needed
to verify the aggregate.</t>
      <t>When Signature-Aggregate is present, the Signature field <bcp14>MUST NOT</bcp14> be
present, overriding the requirement in <xref target="RFC9421"/> Section 4 that
Signature-Input and Signature contain the same labels. A verifier that
supports this specification verifies Signature-Aggregate once, against the
full set of (public key, message) pairs derived from Signature-Input.</t>
      <t>Each hop tags its Signature-Input entry "wimse-delegation-chain" rather than
"wimse-workload-to-workload". The rule in <xref target="I-D.ietf-wimse-http-signature"/>
Section 3 that a recipient reject a message carrying more than one signature
tagged "wimse-workload-to-workload" is scoped to that tag and does not apply.</t>
      <section anchor="wit-dict">
        <name>Carrying Per-Hop Credentials</name>
        <t>In a delegation chain, each hop's WIT is carried as a member of
Workload-Identity-Tokens, a Dictionary Structured Field (<xref target="RFC9651"/>),
keyed by the hop's Signature-Input label. A hop's Signature-Input entry
covers <tt>"workload-identity-tokens";key="&lt;label&gt;"</tt>, its own WIT. The label
<bcp14>MUST</bcp14> be the same in both fields: it selects the hop's WIT, the WIT's sub
claim identifies the hop, and the WIT's cnf.jwk gives the hop's public key.</t>
        <t>A hop <bcp14>MUST</bcp14> choose a label that is not already present in
Workload-Identity-Tokens, so that adding its own WIT does not overwrite
an earlier hop's member.</t>
        <t>On receiving a message, a hop keeps every existing entry in
Workload-Identity-Tokens unchanged. It checks each earlier hop's
signature using the key from that hop's WIT, then adds its own WIT
under its own label.</t>
        <t>A hop <bcp14>MUST NOT</bcp14> replace or remove an existing member of
Workload-Identity-Tokens. Doing so changes the covered value for that
label's Signature-Input entry, so the affected hop's signature fails to
verify.</t>
      </section>
      <section anchor="sig-context">
        <name>Preserving Per-Hop Covered-Component Values</name>
        <t>@path and @query take their values from the message a hop sends, which
later hops overwrite. Each hop additionally covers wimse-req-path and
wimse-req-query, String parameters holding its own @path and @query
values. Each hop carries these in its own Signature-Input entry, where they
persist for later hops, so the verifier reconstructs an earlier hop's
signature base from them rather than from the final message.</t>
        <t><xref target="I-D.ietf-wimse-http-signature"/> requires @query to be covered even when
the request has no query component, in which case its value is "?"
(<xref target="RFC9421"/> Section 2.2.7). wimse-req-query carries that value
unchanged.</t>
        <t>@method and content-type need no parameter: a workload <bcp14>MUST NOT</bcp14> change
either, so the received values verify every workload, and any change is
caught as a failed signature.</t>
        <t>A hop's content-digest value is what the next hop records in its
wimse-req-digest (<xref target="lineage"/>), so the verifier reads it from the next hop's
Signature-Input entry when rebuilding that hop's signature base. The last hop
has no successor, so its value is the Content-Digest of the final message.</t>
      </section>
      <section anchor="non-removability-of-interior-signatures">
        <name>Non-Removability of Interior Signatures</name>
        <t>As the message travels, each hop adds its signature to a running aggregate. A hop
forwards only this combined value. The individual signatures that went into it are
not sent.</t>
        <t>Security against removal of an individual contribution relies on the
unforgeability of the selected aggregate signature scheme. To make a verifier accept a chain with one hop removed, an attacker needs the
aggregate for the remaining hops. Producing that value means subtracting the
removed hop's individual signature from the aggregate. That signature was never
sent, so the attacker cannot do this.</t>
        <t>The verifier checks the aggregate against the set of hops presented with it. A
chain with a hop removed does not verify. Removal is therefore detected, and
verification is all-or-nothing: the whole chain verifies, or it fails.</t>
      </section>
      <section anchor="anchoring-the-end-signatures">
        <name>Anchoring the End Signatures</name>
        <t>The previous subsection shows that an interior hop cannot be removed. This leaves
the two ends of the chain.</t>
        <t>Removing the last hop's signature removes that hop's own authentication. The last
hop is the party presenting the request, so this defeats its own purpose.</t>
        <t>Discarding the aggregate and signing a new one makes the attacker the initiator of
a new chain. The initiator is identified by its WIT. Whether a workload is allowed
to originate a request is an authorization decision, which is out of scope
(<xref target="scope"/>); this mechanism only binds the initiator's identity to the chain
through its WIT. A destination that accepts requests only from permitted
initiators will reject a chain re-originated by an intermediary.</t>
        <t>If an intermediary forwards the request unchanged without adding its signature,
the chain passes through intact and still verifies; nothing is lost. If it
modifies the request without signing, the last hop's signature no longer matches
the modified request and the change is detected.</t>
      </section>
    </section>
    <section anchor="lineage">
      <name>Request Lineage</name>
      <t>In an agentic system the request is modified as it travels. Some changes are
legitimate: an orchestrator or gateway rewrites the request before passing it on.
Some are not: a forwarding proxy is meant to pass the request through unchanged, so
if it alters the request, that is an attack.</t>
      <t>This section lets a verifier tell these apart, and serves two purposes:</t>
      <ul spacing="normal">
        <li>
          <t>Detect an unauthorized modifier. A change made by a party that did not sign is
rejected.</t>
        </li>
        <li>
          <t>Provide an audit trail. A change made by a signing hop is allowed, but recorded
and attributable to that hop.</t>
        </li>
      </ul>
      <t>The difference between the two is simply whether a signing hop made the change.</t>
      <section anchor="mechanism">
        <name>Mechanism</name>
        <t>Each hop records two digests, both covered by its signature:</t>
        <ul spacing="normal">
          <li>
            <t>The digest of the message body it received (its input).</t>
          </li>
          <li>
            <t>The digest of the message body it forwards (its output). This is the
Content-Digest (<xref target="RFC9530"/>) already required by
<xref target="I-D.ietf-wimse-http-signature"/> when a body is present.</t>
          </li>
        </ul>
        <t>Content-Digest covers only the message body, not the method, target URI, or
headers; those are separately covered by each hop's own signature, via its
covered components. The lineage mechanism establishes continuity of the body
across hops, not of the request or response as a whole.</t>
        <t>The input digest is carried in a new signature parameter, wimse-req-digest, so it
is covered by the signature like any other parameter. Its value is a String
(<xref target="RFC9651"/>) holding the serialized Content-Digest field value as the hop
received it, for example <tt>wimse-req-digest="sha-256=:d1a...=:"</tt>, or the reserved
value "origin" for the initiator.</t>
        <t>Each hop signs as required by <xref target="I-D.ietf-wimse-http-signature"/>, and additionally
covers wimse-req-digest on requests and wimse-resp-digest on responses
(<xref target="responses"/>). Content-Digest records only what a hop sends, so each hop must
state separately what it received.</t>
        <t>The verifier walks the chain and verifies that each hop's output digest matches
the next hop's input digest. A mismatch indicates that the body was modified
between the two hops. If the modification is reflected in the signed input and
output digests recorded by a hop, it is a legitimate transformation
attributable to that hop. Otherwise, the modification is
unauthorized, and the request is rejected.</t>
        <t>The signed lineage record is tamper-evident and provides a verifiable audit trail
for body transformations.</t>
      </section>
      <section anchor="initiator">
        <name>Initiator</name>
        <t>The initiator has no predecessor, so it has no input digest. Its
wimse-req-digest carries the reserved String value "origin", which identifies the
start of the request lineage. The initiator is identified by its WIT; whether
it is allowed to originate the request is an authorization decision and is out
of scope (<xref target="scope"/>).</t>
      </section>
    </section>
    <section anchor="responses">
      <name>Responses</name>
      <t>The response path is handled the same as the request path (<xref target="integrity"/>,
<xref target="lineage"/>), in reverse. The responses are aggregated, and each hop records the
response it received and the response it forwards. An orchestrator that combines
responses from several workloads into one verifies each, then conveys back the
combined response: it sets wimse-resp-digest to "origin". The responses it
received remain signed by the workloads that sent them, so an audit of the
orchestrator can establish which workloads contributed.</t>
      <t>The response takes the same path as the request, in reverse: from the
destination back through each hop to the initiator. Each hop, including
the initiator, holds the context for the request it made and needs the
corresponding response to continue its own task; a workload that did not
make a request has no context to act on a response to it.</t>
      <t>The differences are the parameter name and the direction: each hop carries the
digest of the message content it received in wimse-resp-digest, and continuity
is verified from the destination back to the initiator. wimse-resp-digest takes
the same form as wimse-req-digest (<xref target="lineage"/>): a String holding the serialized
value of the Content-Digest field as the hop received it.</t>
      <t>A response signature covers @path;req and @query;req, taking their values from
the request it answers. A hop verifying the whole chain has only its own
request, not the requests other hops sent, so it cannot resolve those components
for those hops' signatures. Each hop therefore covers wimse-req-path and
wimse-req-query instead, holding the path and query of the request it answers.
@method;req needs no parameter: the method does not change across hops
(<xref target="sig-context"/>).</t>
      <t>The response originator has no predecessor on the response path and therefore no
received response. It <bcp14>MUST</bcp14> set wimse-resp-digest to the reserved value "origin",
which identifies the start of the response lineage. Verifiers <bcp14>MUST</bcp14> treat this value
as indicating that the response originated at the destination hop.</t>
    </section>
    <section anchor="flow">
      <name>Message Flow</name>
      <t>This section shows the request path for a three-hop chain: an initiator H1, a
transforming hop H2, and a pass-through hop H3 that forwards the request
unchanged to the destination. The request path is shown first, then one
response (<xref target="flow-response"/>). Signature, aggregate, and
digest values are truncated. Within the field values, line breaks preceded by
a backslash are inserted for readability only and are not part of the field.
This example follows <xref target="I-D.ietf-wimse-http-signature"/>.</t>
      <t>H1 originates the request. It has no predecessor, so its wimse-req-digest is
"origin". Workload-Identity-Tokens has one member, h1, covered by H1's own
Signature-Input entry via key="h1".</t>
      <figure>
        <name>Request sent by the initiator H1</name>
        <sourcecode type="http-message"><![CDATA[
POST /task?job=42 HTTP/1.1
Host: h2.example
Content-Type: application/json
Content-Digest: sha-256=:d1a...=:
Workload-Identity-Tokens: h1="eyJhbGciOiJFUzI1NiIs...h1wit...jw"
Signature-Input: h1=("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h1");created=1710000000;\
    expires=1710000060;nonce="a1b2...";tag="wimse-delegation-chain";\
    wimse-aud="h2.example";wimse-req-digest="origin";\
    wimse-req-path="/task";wimse-req-query="?job=42"
Signature-Aggregate: :QoM1...=:

{"task": "..."}
]]></sourcecode>
      </figure>
      <t>H2 verifies H1's signature using the key from h1's WIT, transforms the
request, and forwards it. H2 keeps H1's entry in Workload-Identity-Tokens
unchanged and adds its own under h2. H2's wimse-req-digest equals H1's
Content-Digest, continuing the lineage. H2 folds its signature into the
aggregate, which now covers both hops.</t>
      <figure>
        <name>Request forwarded by H2, aggregate now covering H1 and H2</name>
        <sourcecode type="http-message"><![CDATA[
POST /run HTTP/1.1
Host: h3.example
Content-Type: application/json
Content-Digest: sha-256=:9f3...=:
Workload-Identity-Tokens: h1="eyJhbGciOiJFUzI1NiIs...h1wit...jw", \
    h2="eyJhbGciOiJFUzI1NiIs...h2wit...jw"
Signature-Input: h1=("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h1");created=1710000000;\
    expires=1710000060;nonce="a1b2...";tag="wimse-delegation-chain";\
    wimse-aud="h2.example";wimse-req-digest="origin";\
    wimse-req-path="/task";wimse-req-query="?job=42", \
  h2=("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h2");created=1710000005;\
    expires=1710000065;nonce="c3d4...";tag="wimse-delegation-chain";\
    wimse-aud="h3.example";wimse-req-digest="sha-256=:d1a...=:";\
    wimse-req-path="/run";wimse-req-query="?"
Signature-Aggregate: :7Zx9...=:

{"task": "...transformed..."}
]]></sourcecode>
      </figure>
      <t>H3 forwards the request to the destination unchanged. H3's wimse-req-digest
equals H2's Content-Digest, and H3's own Content-Digest is identical to H2's,
since nothing was transformed. H3 keeps H1's and H2's entries in
Workload-Identity-Tokens unchanged and adds its own under h3.</t>
      <figure>
        <name>Request forwarded by H3 unchanged, aggregate now covering H1, H2, and H3</name>
        <sourcecode type="http-message"><![CDATA[
POST /finish HTTP/1.1
Host: dest.example
Content-Type: application/json
Content-Digest: sha-256=:9f3...=:
Workload-Identity-Tokens: h1="eyJhbGciOiJFUzI1NiIs...h1wit...jw", \
    h2="eyJhbGciOiJFUzI1NiIs...h2wit...jw", \
    h3="eyJhbGciOiJFUzI1NiIs...h3wit...jw"
Signature-Input: h1=("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h1");created=1710000000;\
    expires=1710000060;nonce="a1b2...";tag="wimse-delegation-chain";\
    wimse-aud="h2.example";wimse-req-digest="origin";\
    wimse-req-path="/task";wimse-req-query="?job=42", \
  h2=(...);wimse-req-digest="sha-256=:d1a...=:";\
    wimse-req-path="/run";wimse-req-query="?", \
  h3=("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h3");created=1710000010;\
    expires=1710000070;nonce="e5f6...";tag="wimse-delegation-chain";\
    wimse-aud="dest.example";wimse-req-digest="sha-256=:9f3...=:";\
    wimse-req-path="/finish";wimse-req-query="?"
Signature-Aggregate: :Rw2p...=:

{"task": "...transformed..."}
]]></sourcecode>
      </figure>
      <t>The destination validates each WIT in Workload-Identity-Tokens, takes each
hop's public key from its WIT's cnf.jwk, and reconstructs each hop's
signature base (using wimse-req-path and wimse-req-query for @path and
@query, and the next
hop's wimse-req-digest for content-digest), then verifies
Signature-Aggregate against all three (public key, message) pairs in a
single operation. It also
checks the digest chain: H2's wimse-req-digest records what H1 sent, H3's
wimse-req-digest records what H2 sent, and the final Content-Digest is what H3
sent. Because H3 forwarded unchanged, its recorded input equals the final
Content-Digest, so the digest chain alone cannot show whether H3 participated;
only the aggregate does.</t>
      <t><xref target="fig-base"/> shows the signature base the destination builds for H1, the hop
whose values are furthest from the final message.</t>
      <figure anchor="fig-base">
        <name>Signature base reconstructed for H1</name>
        <artwork><![CDATA[
"@method": POST
"@path": /task
"@query": ?job=42
"content-type": application/json
"content-digest": sha-256=:d1a...=:
"workload-identity-tokens";key="h1": \
    "eyJhbGciOiJFUzI1NiIs...h1wit...jw"
"@signature-params": ("@method" "@path" "@query" "content-type" \
    "content-digest" "workload-identity-tokens";key="h1");created=1710000000;\
    expires=1710000060;nonce="a1b2...";tag="wimse-delegation-chain";\
    wimse-aud="h2.example";wimse-req-digest="origin";\
    wimse-req-path="/task";wimse-req-query="?job=42"
]]></artwork>
      </figure>
      <t>Each line has one of three sources. @path, @query and @signature-params come
from h1's own Signature-Input entry. content-digest comes from h2's
wimse-req-digest, since it records what H1 sent. @method and content-type come
from the final message, because neither changes across hops.</t>
      <section anchor="flow-response">
        <name>Response</name>
        <t>The destination responds to H3. It originates the response, so its
wimse-resp-digest is "origin". wimse-req-nonce carries the nonce of H3's
request, binding this response to it, and wimse-req-path and wimse-req-query
carry the path and query of that request in place of @path;req and @query;req
(<xref target="responses"/>).</t>
        <figure>
          <name>Response sent by the destination to H3</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Content-Digest: sha-256=:5c7...=:
Workload-Identity-Tokens: d="eyJhbGciOiJFUzI1NiIs...dwit...jw"
Signature-Input: d=("@status" "@method";req "content-type" \
    "content-digest" "workload-identity-tokens";key="d");created=1710000015;\
    expires=1710000075;nonce="g7h8...";tag="wimse-delegation-chain";\
    wimse-req-nonce="e5f6...";wimse-resp-digest="origin";\
    wimse-req-path="/finish";wimse-req-query="?"
Signature-Aggregate: :Lk4t...=:

{"result": "..."}
]]></sourcecode>
        </figure>
        <t><xref target="fig-resp-base"/> shows the signature base H1 builds for the destination's
response, after the response has travelled back through H3 and H2.</t>
        <figure anchor="fig-resp-base">
          <name>Signature base reconstructed for the destination's response</name>
          <artwork><![CDATA[
"@status": 200
"@method";req: POST
"content-type": application/json
"content-digest": sha-256=:5c7...=:
"workload-identity-tokens";key="d": \
    "eyJhbGciOiJFUzI1NiIs...dwit...jw"
"@signature-params": ("@status" "@method";req "content-type" \
    "content-digest" "workload-identity-tokens";key="d");created=1710000015;\
    expires=1710000075;nonce="g7h8...";tag="wimse-delegation-chain";\
    wimse-req-nonce="e5f6...";wimse-resp-digest="origin";\
    wimse-req-path="/finish";wimse-req-query="?"
]]></artwork>
        </figure>
        <t>content-digest comes from H3's wimse-resp-digest, which records the response
H3 received. @method;req and content-type come from the final response.
Everything else comes from the destination's own entry, including
wimse-req-nonce, which identifies H3's request as the one answered.
@path;req and @query;req do not appear: the wimse-req-path and
wimse-req-query parameters in the signature-params line carry those values
instead (<xref target="responses"/>).</t>
        <t>Each hop on the way back adds its own entry the same way, setting
wimse-resp-digest to the digest of the response it received and folding its
signature into the aggregate.</t>
      </section>
    </section>
    <section anchor="agility">
      <name>Algorithm Agility</name>
      <t>This document does not depend on any particular aggregate signature algorithm. The
signature algorithm is carried in each hop's WIT (<tt>cnf.jwk.alg</tt>), as
in <xref target="I-D.ietf-wimse-http-signature"/>, and all hops in a chain use the same
algorithm. The mechanism can be instantiated with any aggregate signature scheme
that remains secure when signers' keys are generated independently and resists
rogue-key attacks, consistent with <xref target="RFC7696"/>.</t>
      <t>Algorithm agility does not mean a verifier accepts whatever algorithm a
hop presents. Each verifier applies a policy of acceptable algorithms and rejects a
hop whose algorithm falls outside it, even if the signature verifies. The algorithm
in the WIT records what a hop used; the policy decides what is acceptable. Without
such a policy, agility becomes a downgrade path.</t>
      <t>At the time of writing, the mechanism can be instantiated with the BLS
message-augmentation scheme (<xref target="I-D.irtf-cfrg-bls-signature"/> Section 3.2).
Its algorithm identifier for use in a WIT will be defined in a separate
specification.</t>
      <t>BLS is not post-quantum secure. Post-quantum aggregation is an active area of research,
including work on aggregating Falcon signatures (<xref target="FALCON-LABRADOR"/>), and any such scheme
can be used when it matures, without changing this protocol.</t>
      <t>Without an aggregate-capable algorithm, for example in a post-quantum deployment
(ML-DSA does not aggregate), a chain falls back to individual per-hop post-quantum
signatures. Integrity then rests on the per-hop request and response digests, each hop
recording what it received and what it forwarded: they catch removal of a hop
that changed the request or response, but not one that did not, which is what
the aggregate protects.</t>
    </section>
    <section anchor="trade-offs">
      <name>Trade-offs</name>
      <t>Aggregation verifies the chain as a whole. This is what makes it non-strippable
(<xref target="integrity"/>), but it also means a single bad signature makes the whole chain
fail to verify, and the verifier cannot tell which hop was at fault. A faulty hop
can therefore deny service to the chain.</t>
      <t>The benefit is that the aggregate stays close to one signature's size
regardless of chain length. Signature-Input, Workload-Identity-Tokens, and
the digests still grow with the chain.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Chain integrity relies on the non-removability of the aggregate (<xref target="integrity"/>) and
on the initiator being identified by its WIT: an attacker can neither remove an
interior hop nor re-originate the chain as a permitted initiator. Because each hop
verifies the chain it received before forwarding it, tampering is detected at the
next honest hop, not only at the destination.</t>
      <t>The message digests of <xref target="lineage"/> provide attributability, not correctness. They
record which hop changed the message from a given input to a given output, and
reject a change no hop signed for, but they do not judge whether a change was
legitimate. A hop can change content maliciously and still produce a valid record;
the change is attributable to that hop.</t>
      <t>The algorithm each hop uses is carried in its WIT, so a verifier learns
what was used but not what should have been used. Because the path is dynamic, the
expected algorithm for a given hop is not known in advance and cannot be checked
after the fact. An attacker able to forge signature using a traditional algorithm
could present a hop signed with that algorithm in place of a post-quantum one, and
the chain would verify. Once a traditional algorithm is broken this cannot be
detected; it is prevented only by policy. A post-quantum deployment excludes
traditional algorithms from the acceptable set.</t>
      <t>A chain is only as strong as the weakest algorithm in it, whether the
hops sign individually or their signatures are aggregated. A single hop signing with
a broken or traditional algorithm lets an attacker substitute that hop's
contribution. With individual signatures, the hops must use algorithms of comparable
strength, though not necessarily the same algorithm: two post-quantum algorithms of
equal strength are acceptable. Aggregation adds a further constraint, because
signatures combine only within one algorithm: every hop uses the same algorithm.</t>
      <t>These protections apply to the response only if the response is signed along the
chain (<xref target="responses"/>). If it is not, a response can be dropped or altered without
detection.</t>
      <t>The mechanism proves which hops signed, not that every expected hop was included. A
hop can deliver or forward the message without involving a further hop; because the
path is dynamic, the destination does not know which hops to expect, so such a
bypass cannot be detected. A destination can require a particular workload
to be present as policy (<xref target="goals"/>); without such a policy, the omission is
not detectable.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Each hop presents its WIT, so any party that verifies the chain learns which
workloads participated, and the digest lineage reveals where the message was
changed. Each workload's wimse-aud names the workload it sent to, which can
reveal the sequence of hops.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-signature-metadata-parameters">
        <name>HTTP Signature Metadata Parameters</name>
        <t>IANA is requested to register the following entries in the "HTTP Signature Metadata
Parameters" registry, per the registration template in Section 6.3.1 of
<xref target="RFC9421"/>.</t>
        <section anchor="param-req-digest">
          <name>wimse-req-digest</name>
          <ul spacing="normal">
            <li>
              <t>Name: <tt>wimse-req-digest</tt></t>
            </li>
            <li>
              <t>Description: String; in request signatures, the serialized Content-Digest field
value of the message content as received by the signing hop, or "origin" for
the initiator.</t>
            </li>
            <li>
              <t>Reference: RFC XXXX, <xref target="lineage"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="param-req-path">
          <name>wimse-req-path</name>
          <ul spacing="normal">
            <li>
              <t>Name: <tt>wimse-req-path</tt></t>
            </li>
            <li>
              <t>Description: String; in request and response signatures, the @path value of the
request the signing hop sent.</t>
            </li>
            <li>
              <t>Reference: RFC XXXX, <xref target="sig-context"/>, <xref target="responses"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="param-req-query">
          <name>wimse-req-query</name>
          <ul spacing="normal">
            <li>
              <t>Name: <tt>wimse-req-query</tt></t>
            </li>
            <li>
              <t>Description: String; in request and response signatures, the @query value of the
request the signing hop sent.</t>
            </li>
            <li>
              <t>Reference: RFC XXXX, <xref target="sig-context"/>, <xref target="responses"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="param-resp-digest">
          <name>wimse-resp-digest</name>
          <ul spacing="normal">
            <li>
              <t>Name: <tt>wimse-resp-digest</tt></t>
            </li>
            <li>
              <t>Description: String; in response signatures, the serialized Content-Digest field
value of the message content as received by the signing hop, or "origin" for the
response originator.</t>
            </li>
            <li>
              <t>Reference: RFC XXXX, <xref target="responses"/>.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="http-fields">
        <name>HTTP Fields</name>
        <t>IANA is requested to register the following in the "Hypertext Transfer Protocol
(HTTP) Field Name" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: Signature-Aggregate</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: Item</t>
          </li>
          <li>
            <t>Reference: RFC XXXX, <xref target="integrity"/></t>
          </li>
        </ul>
        <!-- -->

<ul spacing="normal">
          <li>
            <t>Field Name: Workload-Identity-Tokens</t>
          </li>
          <li>
            <t>Status: permanent</t>
          </li>
          <li>
            <t>Structured Type: Dictionary</t>
          </li>
          <li>
            <t>Reference: RFC XXXX, <xref target="wit-dict"/></t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9651">
          <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="RFC9421">
          <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="RFC9530">
          <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="RFC7696">
          <front>
            <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="November" year="2015"/>
            <abstract>
              <t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature. Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly. This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="201"/>
          <seriesInfo name="RFC" value="7696"/>
          <seriesInfo name="DOI" value="10.17487/RFC7696"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-workload-creds">
          <front>
            <title>WIMSE Workload Credentials</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones up to complex multi-service, multi-cloud, multi-
   tenant deployments.

   This document defines the credentials that workloads use to represent
   their identity.  They can be used in various protocols to
   authenticate workloads to each other.  To use these credentials,
   workloads must provide proof of possession of the associated private
   key material, which is covered in other documents.  This document
   focuses on the credentials alone, independent of the proof-of-
   possession mechanism.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-creds-02"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-http-signature">
          <front>
            <title>WIMSE Workload-to-Workload Authentication with HTTP Signatures</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <date day="20" month="September" year="2026"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones to complex multi-service, multi-cloud, multi-tenant
   deployments.  This document defines one of the mechanisms to provide
   workload authentication, using HTTP Signatures.  While only
   applicable to HTTP traffic, the protocol provides end-to-end
   protection of requests (and optionally, responses), even when service
   traffic is not end-to-end encrypted, that is, when TLS proxies and
   load balancers are used.  Authentication is based on the Workload
   Identity Token (WIT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-http-signature-07"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-bls-signature">
          <front>
            <title>BLS Signatures</title>
            <author fullname="Dan Boneh" initials="D." surname="Boneh">
              <organization>Stanford University</organization>
            </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization>Yubico</organization>
            </author>
            <author fullname="Sergey Gorbunov" initials="S." surname="Gorbunov">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Riad S. Wahby" initials="R. S." surname="Wahby">
              <organization>Carnegie Mellon University</organization>
            </author>
            <author fullname="Hoeteck Wee" initials="H." surname="Wee">
              <organization>NTT Research and ENS, Paris</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Zhenfei Zhang" initials="Z." surname="Zhang">
              <organization>Algorand</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   BLS is a digital signature scheme with aggregation properties.  Given
   set of signatures (signature_1, ..., signature_n) anyone can produce
   an aggregated signature.  Aggregation can also be done on secret keys
   and public keys.  Furthermore, the BLS signature scheme is
   deterministic, non-malleable, and efficient.  Its simplicity and
   cryptographic properties allows it to be useful in a variety of use-
   cases, specifically when minimal storage space or bandwidth are
   required.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-bls-signature-07"/>
        </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="I-D.ietf-wimse-arch">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Palo Alto Networks</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of the Bundeswehr Munich</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The increasing prevalence of cloud computing and micro service
   architectures has led to the rise of complex software functions being
   built and deployed as workloads, where a workload is defined as
   software executing for a specific purpose, potentially comprising one
   or more running instances.  This document discusses an architecture
   for designing and standardizing protocols and payloads for conveying
   workload identity and security context information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-08"/>
        </reference>
        <reference anchor="W3C-TRACE-CONTEXT" target="https://www.w3.org/TR/trace-context/">
          <front>
            <title>Trace Context</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2021"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <reference anchor="FALCON-LABRADOR" target="https://eprint.iacr.org/2024/311">
          <front>
            <title>Aggregating Falcon Signatures with LaBRADOR</title>
            <author initials="M. A." surname="Aardal" fullname="M. A. Aardal">
              <organization/>
            </author>
            <author initials="D. F." surname="Aranha" fullname="D. F. Aranha">
              <organization/>
            </author>
            <author initials="K." surname="Boudgoust" fullname="K. Boudgoust">
              <organization/>
            </author>
            <author initials="S." surname="Kolby" fullname="S. Kolby">
              <organization/>
            </author>
            <author initials="A." surname="Takahashi" fullname="A. Takahashi">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
          <refcontent>CRYPTO 2024, IACR ePrint 2024/311</refcontent>
        </reference>
      </references>
    </references>
    <?line 852?>

<section anchor="rationale">
      <name>What the Aggregate Adds Over Per-Hop Digests</name>
      <t>The message digests (<xref target="lineage"/>) already detect removal of a hop that
changed the message: with that hop gone, the recorded input and output digests of
the remaining hops no longer line up. The aggregate adds one thing on top. It also
detects removal of a hop that signed but did not change the message, for example a
gateway that forwards the body unchanged. The examples below use a three-hop chain
H1, H2, H3 in which H2 forwards the request unchanged.</t>
      <t>As in <xref target="fig-agg"/>, m_i is the message hop i signs, s_i is its signature, and k_i is
its public key, taken from its WIT.</t>
      <t>With individual signatures and the digests, the pass-through hop can be stripped,
because removing it keeps the digests aligned:</t>
      <artwork type="ascii-art"><![CDATA[
  H1  Content-Digest=A  req-digest=origin
  H2  Content-Digest=A  req-digest=A      (forwards unchanged)
  H3  Content-Digest=B  req-digest=A

  Attacker strips H2 and presents H1 -> H3:
    H3.req-digest=A equals H1.Content-Digest=A, continuity holds
    s1 and s3 still verify on their own
    => accepted; H2 is erased
]]></artwork>
      <t>With the aggregate, the same removal fails, because H2's signature cannot be taken
out of the combined value:</t>
      <artwork type="ascii-art"><![CDATA[
  Aggregate  S = s1 + s2 + s3

  Attacker strips H2 and claims the chain is H1 -> H3:
    it needs  s1 + s3  =  S - s2
    but s2 was never on the wire, so it cannot form it
    => rejected
]]></artwork>
      <t>Aggregation is also smaller: individual signatures grow with the length of the
chain, while an aggregate is a single signature regardless of length.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document builds on the WIMSE Workload Credentials and HTTP Signature drafts.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XbbRpro/3oKDP3DdpqkI8lJuul2Oopsx5r21pbSmdzl
JEWiSCICAQ4KNK329X2WeZZ5svtttQGg5PR2zj2nc3rGIpZC1VffvtVkMlFt
0ZZmlo1Od+3aVG2x0K3JszdN/c5UulqYbFk32Q/nLy+eZk9MaVa6LeoqO1vr
orIjpefzxryD1/kJuhy9PFI43KpurmeZbXOV14tKb+BzeaOX7aQxeX492Rcb
ayZ6tWpwdDOxxarS7a4xdlLCb9squ5tvCmvhw+31Ft4+f3r5TC3qyprK7uws
a5udUTCLE6Ubo3Ex222JK4E3bKarPHtrdDm5LDYwo33dXK2aerfFWcPfZa3z
7DzHtbfXGUz/5a5si+zi2rZmkz2t3hVNXW3gNiz3ylzD6/lMZZPMTzgLE8br
/hesuCm226Ja4eW9+1Qhn8KLb/50pgBUOwMjZn/tpLKMoUIvwtey73AgvL7R
RQnXCcDfFKZdTutmhTd0s1jDjXXbbu3swQN8Di8V78zUPfYALzyYN/Xemgc0
wgN8c1W0690c3m0L2r3jB7TzQ9s3UkoDUtUNLm6SLXdlyZt/WTS7jS6N3esG
dgZGgQeyDD6qq+IvtGuz7FV9VWi6vqh3VYsYdF7lcsnIyq7qKoeJfLPC39NF
vcEpTuiR8LnnuqqMzS7tYl0vTVWsBr72fQVrbywCu15mQAnZt7sqhxmadQOw
r4rFmt5y+A7Pf7vPXk55gvAaTNjs5sXcNDw8AIMG/la/0013Id+ZZqOr62Qp
a5rltPWzhEW9n1amDUsCiptlP06zi7VZLk1D13iJP2pAh+R6urzzqt0Vbfy9
a3xjSbsdoKdUVcPMWoAF7tnbZ2e/+/KLI/fnw2P/5xcnn8ufX335uy/xz/PJ
ExpMqNlh+2QBWGIHHkDUC6jiH2jggcWyWU3mpY1vq6JaxlPrjEb4DJd/ODmb
XL49PXs6OXv96vLpf1zOaM2tblamjRB+v99P9yeE5pdvH7SNXpgJ8JPWvG8J
y+EVYYuXeC8743t8KyA1/jdBUCPxnZzx7RyIYJYdf358JIiwpJGrlh8ChAdI
A+nmtDf4zrPTFzDdyYvTb9+ePnn99sCczbYpqnZa6EVDE4cvPHxwcnSUzvdU
6BD5wDNdLhAtPHvK9kC92QvN3xleDSPU6OU0O4X/6SbX5ah788k0ewY3G12t
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
G73EWND/AwGSaH8HoAAA

-->

</rfc>
