<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" docName="draft-okutomi-session-bound-agent-identity-07" ipr="trust200902" consensus="false" submissionType="IETF">
<front>
<title abbrev="Channel-Bound Agent Acceptance">A Verifier-Side Acceptance Profile for Channel-Bound Agent Identity and Authorization</title>
<seriesInfo name="Internet-Draft" value="draft-okutomi-session-bound-agent-identity-07"/>
<seriesInfo name="Intended RFC status" value="Informational"/>
<author initials="A." surname="Okutomi" fullname="Akira Okutomi">
<organization>Individual</organization>
<address>
<email>okutomi+ietf@pm.me</email>
</address>
</author>
<date year="2026" month="November" day="1"/>
<area>Security</area>
<workgroup>Individual Submission</workgroup>
<keyword>agent identity</keyword>
<keyword>TLS exporter</keyword>
<keyword>proof of possession</keyword>
<keyword>remote attestation</keyword>
<keyword>workload identity</keyword>
<abstract>
<t>This document defines a verifier-side acceptance profile for channel-bound Agent identity and authorization.  It addresses context diversion, where cryptographically valid material is accepted for a different service, tenant, actor, task, target, delegation, or authority boundary than the verifier intended.</t>
<t>A verifier accepts an actor only when a verified authority grant, holder-of-key proof, accepted channel instance, freshness and replay state, any required attestation result, and verifier-local policy all describe the same intended interaction.  Protocol-specific wire formats and deployment choices are left to binding profiles.</t>
</abstract>
</front>
<middle>
<section anchor="introduction" numbered="true"><name>Introduction</name>
<t>A valid grant and proof of possession can be accepted for the wrong operation.  For example, a grant authorizes an Agent to read a task's resource, but the verifier applies it to another target on the same connection.  This is context diversion: valid inputs describe a different interaction than the verifier intended.  Task and target checks alone do not bind a proof to the receiving TLS connection.  If a relay forwards an exporter-bound proof over another connection, the verifier detects the channel mismatch.</t>
<t>This document specifies when a verifier may return a scoped accepted assertion.  It also defines the grant hash, TLS exporter context, and attestation binder used in that decision.  It uses TLS <xref target="RFC8446"/>, exported authenticators <xref target="RFC9261"/>, and RATS roles <xref target="RFC9334"/> without changing their underlying protocols.  Binding profiles supply the protocol-specific wire formats.</t>
</section>
<section anchor="terminology" numbered="true"><name>Terminology</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
<dl newline="true">
<dt>Core profile</dt><dd><t>The verifier-side acceptance rules defined by this document.  The core profile is not a complete wire-binding profile by itself.</t></dd>
<dt>Binding profile</dt><dd><t>A specification that instantiates the core profile for a protocol or deployment by fixing wire representation, canonicalization, exporter-label selection rule, endpoint role, interaction type, replay rules, diagnostic behavior, and other protocol-specific inputs.</t></dd>
<dt>Deployment profile</dt><dd><t>Deployment policy that selects trusted issuers, local expected values, attestation requirements, disclosure policy, operational limits, and accepted binding profiles.</t></dd>
<dt>SBAIP</dt><dd><t>The short identifier for this profile.  It is used in domain-separation strings and examples.  It is not an external registry name.</t></dd>
<dt>Channel instance</dt><dd><t>One accepted TLS connection or equivalent secure transport instance.</t></dd>
<dt>Application session</dt><dd><t>A logical agent-protocol session that can span multiple channel instances.</t></dd>
<dt>Task binding</dt><dd><t>Security state scoped to one task, invocation, or delegated operation.</t></dd>
<dt>Peer endpoint</dt><dd><t>The endpoint authenticated on the current channel instance.</t></dd>
<dt>Actor</dt><dd><t>The Agent, workload, or runtime exercising authority.</t></dd>
<dt>Target</dt><dd><t>The tool, service, API, resource, operation, or object being invoked or affected.</t></dd>
<dt>Agent</dt><dd><t>An automated software component.  When this document discusses acceptance, the more specific terms actor, peer endpoint, target, and intermediary are used where their security roles differ.</t></dd>
<dt>Verifier</dt><dd><t>The party that authenticates the grant, checks the channel binding, evaluates freshness and replay state, and compares the result with local policy before returning an accepted result to the application.</t></dd>
<dt>Policy authority</dt><dd><t>A locally trusted issuer of authority statements.</t></dd>
<dt>Authority grant</dt><dd><t>An authority statement signed by a policy authority or protected with a Message Authentication Code (MAC) under a policy-authority key.  It authorizes actor, task, target, and authorization values.  It does not prove that the authorized actor is present on the current channel instance.</t></dd>
<dt>Session proof</dt><dd><t>A holder-of-key proof that binds one verified authority grant to one accepted channel instance.  It proves possession and channel binding.  It does not authorize service, tenant, task, target, scope, resource, or capability values.</t></dd>
<dt>Expected value</dt><dd><t>A verifier-local policy input.</t></dd>
<dt>Observed value</dt><dd><t>A value extracted from authenticated grants, channel-bound statements, attestation results, trusted manifests, or locally derived request state.  An observed value does not become an expected value without a trusted local policy decision.</t></dd>
<dt>Context diversion</dt><dd><t>Acceptance of cryptographically valid material for a different service, tenant, actor, task, target, delegation, or authority boundary than the verifier intended.  Context diversion is a failure class, not a wire mechanism.</t></dd>
<dt>Intermediary</dt><dd><t>A gateway, broker, proxy, or mediator between an actor and a target.</t></dd>
</dl>
</section>
<section anchor="scope-non-goals-and-document-structure" numbered="true"><name>Scope and Deployment Assumptions</name>
<t>This profile addresses context diversion when independently verified mechanisms are combined.  It is unnecessary where the application protocol already makes the complete context-specific acceptance decision at the same verifier boundary.</t>
<t>Acceptance is scoped to one channel instance and the accepted task binding.  Application-session continuity and transport migration are addressed in <xref target="freshness-replay-rotation-and-revocation"/>.  This document does not define dialog lifecycle, discovery, an identity provider, or an authorization framework.</t>
<t>A binding profile can include an application correlation value in task_context only after defining its authenticated source, scope, parent-child semantics, and comparison rules.  The value alone proves neither identity nor authority nor continuity.</t>
<t>Discovery identifies candidate endpoints or metadata.  It does not establish accepted identity, delegation, task binding, or authorization.  If discovery data contributes to expected policy, local policy fixes its trusted source, authentication, namespace, version, and canonicalization.</t>
<t>The construction inputs and acceptance rules are normative for implementations claiming this profile.  Interoperability requires the binding profile specified in <xref target="conformance"/>.</t>
<section anchor="internet-applicability-and-deployment-assumptions" numbered="true"><name>Trust Boundaries</name>
<t>Open Internet and enterprise deployments need a verifier-local trust path to each accepted authority, including issuers and attestation-result signers.  Without that path, acceptance fails closed.  No global authority, registry, gateway, online authority, transparency log, or control plane is required.</t>
<t>Intermediaries are not trusted by default.  A component that terminates transport security is a separate relying party and sees only the disclosed claims and payloads.  A verifier MUST NOT treat an intermediary-authenticated endpoint as the final Agent unless a gateway-routed binding profile and local policy authorize that interpretation.</t>
<t>Each receiving verifier applies its own trusted-authority set, expected values, binding profile, and acceptance decision.  An upstream acceptance or authenticated parent-child relationship does not establish end-to-end trust.</t>
<t>For Agents acting for a person or organization, deployment profiles SHOULD support audience-scoped disclosure, short-lived grants, selective disclosure or reference tokens, and person- or organization-selected authorities and disclosure modes where practical.  Security-required claims SHOULD be distinguished from application-convenience claims.  Deployments need privacy and pervasive-monitoring analysis <xref target="RFC6973"/> <xref target="RFC7258"/> <xref target="RFC9518"/>.</t>
</section>
</section>
<section anchor="core-invariant" numbered="true"><name>Core Invariant</name>
<t>A verifier MUST NOT return a profile-authenticated actor identity or authorization result unless the verified authority grant, holder-of-key proof, accepted channel instance, freshness and replay state, any required attestation result, and verifier-local policy all identify the same intended interaction.</t>
<t>The intended interaction is determined by verifier-local expected values and trusted policy inputs, not by peer-provided descriptive metadata.</t>
<t>Before this acceptance decision succeeds, all peer-provided identity, task, scope, service, tenant, capability, attestation-related, diagnostic, display-name, and natural-language values are observed values only.  They do not define the verifier's expected policy.</t>
<t>No inference, alias repair, display-name matching, peer-selected exporter label, prompt interpretation, model interpretation, or reserialized semantic metadata is part of the final acceptance path unless a binding profile and local policy explicitly define it.</t>
</section>
<section anchor="conformance" numbered="true"><name>Conformance</name>
<t>This Informational profile has two conformance subjects: verifiers implementing its acceptance rules with a binding and deployment profile, and binding profiles fixing the wire-visible inputs listed in <xref target="binding-profile-requirements"/>.  Its requirements apply to those subjects, not to implementations of the underlying mechanisms in general.</t>
<t>A conformance claim MUST identify the binding profile.  The core alone is not a complete wire specification.</t>
<t>A verifier MUST fail closed and MUST NOT return profile-authenticated identity or authorization until every applicable check in <xref target="verification-procedure"/> succeeds.  A grant, session proof, endpoint identity, exported authenticator, attestation result, or peer metadata alone is insufficient.</t>
<t>For optional features, a binding profile MUST define which checks apply when a feature is absent or required, and the additional negative acceptance cases.  It can add stricter checks, but MUST NOT relax the core's fail-closed requirements.</t>
</section>
<section anchor="acceptance-model" numbered="true"><name>Acceptance Model</name>
<t>D0 through D7 are acceptance dimensions for policy separation and diagnostics.  The numbering provides a stable order for diagnostics.  It does not imply protocol layers, dependencies, or a trust hierarchy.  A deployment need not evaluate every dimension.</t>
<table>
<thead><tr><th>Dimension</th><th>Verification target</th><th>Main failure class</th></tr></thead>
<tbody>
<tr><td>D0</td><td>Live channel instance and authenticated peer endpoint</td><td>MITM or channel confusion</td></tr>
<tr><td>D1</td><td>Attested platform validity, when selected</td><td>Fake, malformed, stale, or untrusted evidence</td></tr>
<tr><td>D2</td><td>Grant, authenticator, or attestation-to-channel binding</td><td>Relay, replay, or borrowed evidence</td></tr>
<tr><td>D3</td><td>Service, tenant, deployment,<br/> or environment</td><td>Wrong service or tenant; context diversion</td></tr>
<tr><td>D4</td><td>Acting workload, process,<br/> or Agent instance</td><td>Same-host wrong-actor confusion</td></tr>
<tr><td>D5</td><td>Task, invocation, context, or delegation</td><td>Wrong task or delegation; context diversion</td></tr>
<tr><td>D6</td><td>Tool, target resource, or operation</td><td>Wrong-target or wrong-operation diversion</td></tr>
<tr><td>D7</td><td>Effective authorization or capability policy</td><td>Confused deputy or privilege escalation</td></tr>
</tbody>
</table>
<t>D0 through D2 are authentication and binding dimensions.  D3 through D7 are verifier-local policy dimensions.  Peer-provided metadata can be observed input; it is not expected policy.</t>
<t>Remote attestation is optional in this core profile.  When neither local policy nor the binding profile selects attestation, D1 and the attestation-specific part of D2 are not evaluated.  The remaining channel-binding, freshness, replay, grant, and local-policy checks still apply.</t>
<table>
<thead><tr><th>Dimension</th><th>Binding-profile requirement</th></tr></thead>
<tbody>
<tr><td>D3</td><td>Define the trusted source and canonical form of expected service, tenant, deployment, and environment values.</td></tr>
<tr><td>D4</td><td>Define the canonical actor identifier and how it is distinguished from host, peer endpoint, target, intermediary, person, and organization identities.</td></tr>
<tr><td>D5</td><td>Define task_context construction, which values are hashed or disclosed, and when a task binding can be reused.</td></tr>
<tr><td>D6</td><td>Define target_context construction and canonical target, resource, and operation comparison.</td></tr>
<tr><td>D7</td><td>Define capability-set comparison, requested-capability handling, deny overrides, and whether surplus observed capabilities are ignored or rejected.</td></tr>
</tbody>
</table>
<t>When a context identifier separates users, tasks, or sessions, the verifier MUST compare an authenticated observed value with a nonempty expected value from trusted local policy or authenticated application state.  Missing identifiers MUST fail the comparison; empty values MUST NOT bypass it.  The binding profile defines the identifier's scope and canonical comparison.</t>
</section>
<section anchor="accepted-assertion-output" numbered="true"><name>Accepted Assertion Output</name>
<t>On successful verification, the verifier produces one internal accepted assertion with typed accepted sub-results from verified material and local policy.  A peer-provided token or relabeled input claim is not an accepted assertion.</t>
<t>The binding profile MUST identify the sub-results required for each interaction type.  The verifier MUST reject an interaction when a required sub-result is absent.</t>
<t>When the verifier consumes an external verification result, the binding profile MUST identify its producer, required prerequisites, and compatible evaluation context.  Failed or unresolved required prerequisites, or incompatible policy, profile, interaction, or freshness values, MUST prevent acceptance of any sub-result that depends on it.</t>
<t>The assertion MUST contain scope, accepted_profile, accepted_channel, accepted_actor, accepted_authority, accepted_interaction, replay_commit, effective_authorization, and expiry.  scope identifies the accepted audience and binding context and applies to every sub-result in the assertion.  A sub-result is not independently portable outside that scope.  accepted_channel includes the accepted endpoint role and endpoint public-key identifier as well as the channel-instance binding; the endpoint is not thereby accepted as the actor.  The assertion MUST contain accepted_delegation and accepted_target when those dimensions are required for the interaction.  It contains attestation_result only when attestation was selected by the binding profile or local policy and accepted.</t>
<t>Each present sub-result preserves its canonical accepted value.  The verifier computes the single assertion expiry as specified in <xref target="freshness-replay-rotation-and-revocation"/>.  Source identifiers, source-specific expiry, key identifiers, nonces, replay-store keys, and verifier-basis details can be retained in a separate audit record, but they are not required application fields.  Absence means that the verifier did not accept that claim; an application MUST NOT infer an absent claim from another sub-result, raw peer metadata, or a shared identifier.</t>
<t>The accepted assertion does not prove action correctness, successful execution, audit completeness, post-execution attribution, or continuity of a long-lived application session.  An authenticated intermediary does not by itself prove downstream target identity.  Unless creator-isolation evidence was required and accepted, the assertion also does not prove that the actor confirmation key is unavailable to the actor's creator or intermediary.</t>
<t>A signed receipt or audit record that merely names an operation does not establish that an authority grant or accepted assertion exists.  The verifier still requires the evidence and checks specified by the binding profile.</t>
<t>The accepted assertion MAY be represented as an internal data structure, a local handle, or a binding-profile-defined token.  Whatever the representation, applications MUST NOT recover profile-authenticated identity or authorization from raw peer-provided claims once the acceptance decision has been made.</t>
</section>
<section anchor="threat-model" numbered="true"><name>Threat Model</name>
<t>The attacker can observe, replay, reorder, relay, or substitute messages, supply malicious metadata, and run another Agent on the same host.  The attacker can combine individually valid inputs across context boundaries, including borrowed attestation and gateway route assertions.  Peer metadata presented as expected policy and acceptance before replay commit are verifier failures within this model.</t>
<t>An intermediary can provision a downstream actor while retaining its private key or signing interface.  Holder-of-key verification cannot establish creator isolation; the evidence requirements are in <xref target="grant-and-authority-material"/>.</t>
<t>The profile assumes correct TLS 1.3, exported-authenticator validation, signature or MAC verification, and evidence appraisal.  A fully compromised verifier, malicious trusted policy authority, compromise of all local secret storage, denial of service, and side channels outside the identity-binding path are out of scope.</t>
</section>
<section anchor="relationship-to-wimse-oauth-rats-and-http-message-signatures" numbered="true"><name>Relationship to Existing Mechanisms</name>
<t>The following mechanisms supply inputs to acceptance.  Their successful validation does not replace the checks in <xref target="core-invariant"/>.</t>
<table>
<thead><tr><th>Mechanism</th><th>Relationship to this profile</th></tr></thead>
<tbody>
<tr><td>Authority introduction</td><td><xref target="I-D.schrock-ep-authority-introduction"/> describes authority documents and scoped evidence under relying-party policy.  A deployment defines how introduced issuer keys and permitted uses enter local policy; key introduction and historical signatures do not establish current acceptance.</td></tr>
<tr><td>Security principal binding</td><td><xref target="I-D.bu-agentproto-security-principal-binding"/> provides a protocol-neutral claim registry, verifier matrix, and rules for composing verification results.  This profile defines acceptance for one channel-bound interaction and does not adopt that registry as its conformance model.</td></tr>
<tr><td>Agent protocol dimensions</td><td><xref target="I-D.foroughi-agent-protocol-dimensions"/> describes exchange properties.  Its D1 through D7 labels are independent of this profile's acceptance dimensions.  Exchange lifecycle, output cadence, state locality, and result addressability remain application-protocol concerns.</td></tr>
<tr><td>WIMSE</td><td>Its architecture <xref target="I-D.ietf-wimse-arch"/>, credentials <xref target="I-D.ietf-wimse-workload-creds"/>, mutual TLS <xref target="I-D.ietf-wimse-mutual-tls"/>, proof tokens <xref target="I-D.ietf-wimse-wpt"/>, identifiers <xref target="I-D.ietf-wimse-identifier"/>, and HTTP signatures <xref target="I-D.ietf-wimse-http-signature"/> can supply workload identity and possession inputs.  These references are informative; WIMSE is not required by this core.</td></tr>
<tr><td>ID-JAG and DPoP</td><td>A binding profile can use verified ID-JAG <xref target="I-D.ietf-oauth-identity-assertion-authz-grant"/> for delegated cross-domain authority.  Its key binding and DPoP <xref target="RFC9449"/> supply possession inputs; they do not replace the session proof or its interaction bindings.  Required claim mappings are in <xref target="binding-profile-requirements"/>.</td></tr>
<tr><td>HTTP Message Signatures</td><td>Signs selected HTTP components <xref target="RFC9421"/>.  A binding profile specifies which signed request material participates in acceptance.</td></tr>
<tr><td>RATS and EAT</td><td>Supply evidence appraisal and attestation claims <xref target="RFC9334"/> <xref target="RFC9711"/>.  Accepted evidence or results must bind to the channel and task.</td></tr>
</tbody>
</table>
</section>
<section anchor="binding-profile-requirements" numbered="true"><name>Binding Profile Requirements</name>
<t>A binding profile fixes wire representation, canonicalization, and holder-side presentation.  It MUST define the following values.</t>
<table>
<thead><tr><th>Required item</th><th>Prevents</th></tr></thead>
<tbody>
<tr><td>profile identifier and version</td><td>cross-profile confusion</td></tr>
<tr><td>protocol_id and application-protocol scope</td><td>cross-protocol replay or substitution</td></tr>
<tr><td>accepted endpoint_role, interaction_type, and proof-signer role</td><td>endpoint-role and interaction-type confusion</td></tr>
<tr><td>source of leaf_spki for each accepted endpoint role</td><td>wrong certificate or authenticator binding</td></tr>
<tr><td>TLS exporter label selection and context construction</td><td>peer-selected, request-selected, ad hoc, or colliding channel bindings</td></tr>
<tr><td>canonical aud form and audience-comparison rules</td><td>audience confusion</td></tr>
<tr><td>exact bytes used for grant_hash</td><td>parse-and-reserialize substitution</td></tr>
<tr><td>authority-grant token type, alg allow-list, and protected-header rules</td><td>algorithm, type, and key-use confusion</td></tr>
<tr><td>session-proof encoding and protected-header rules</td><td>algorithm, type, and key-use confusion</td></tr>
<tr><td>extension, unknown-field, and critical-field processing rules</td><td>unsupported extension acceptance</td></tr>
<tr><td>task_context, target_context, and binding-context construction</td><td>wrong-task or wrong-target acceptance</td></tr>
<tr><td>operation identifier, canonical request digest, result-access policy, and distinction between operation retries and authentication attempts, when retry or result recovery is supported</td><td>duplicate execution or disclosure of a prior result to an unauthorized caller</td></tr>
<tr><td>verifier_nonce generation, entropy, lifetime, single-use rule, and peer-nonce handling</td><td>proof precomputation and replay</td></tr>
<tr><td>attempt_id generation, uniqueness, collision handling, local-state lookup, replay-key construction, and replay-cache consistency requirement</td><td>attempt confusion and cross-task reuse</td></tr>
<tr><td>TLS resumption and 0-RTT handling</td><td>stale proof reuse and early-data acceptance</td></tr>
<tr><td>attestation requirement, evidence mapping, appraisal source, freshness, audience, and channel-binding rule</td><td>borrowed or replayed evidence</td></tr>
<tr><td>confirmation-key-to-evidence binding and creator-isolation claim, when creator isolation is required</td><td>creator-accessible downstream key accepted as isolated</td></tr>
<tr><td>verifier-local source and comparison rules for D3 through D7 expected values</td><td>peer-selected policy</td></tr>
<tr><td>string encoding, normalization, and comparison rules for non-ASCII decision-sensitive values, when allowed</td><td>alias, display-name, and confusable-string confusion</td></tr>
<tr><td>delegated, exchanged, or derived authority-grant constraints, when used</td><td>authority expansion across delegation</td></tr>
<tr><td>Human-approval evidence, scope, freshness, and operation binding, when required</td><td>actor authentication mistaken for Human approval</td></tr>
<tr><td>intermediary and gateway-route assertion rules, when gateways are used</td><td>gateway identity accepted as final-Agent identity</td></tr>
<tr><td>diagnostic error classes and disclosure limits</td><td>leakage of attacker-controlled values</td></tr>
</tbody>
</table>
<t>A binding profile that uses ID-JAG as its authority-grant input MUST:</t>
<ul><li><t>require a cnf claim containing jkt and require the session-proof signer to prove possession of that same key;</t></li><li><t>treat client_id as an observed OAuth client identifier and MUST NOT automatically map it to the D4 actor; the profile defines a separate authenticated D4 actor mapping, including processing rules for act when used;</t></li><li><t>map resource to observed D6 target input and map scope and authorization_details to observed D7 authorization input, without treating any of those claims as verifier-local expected policy; and</t></li><li><t>treat a validated DPoP proof as an inherited proof-of-possession input only and MUST NOT accept it in place of the session proof defined by this document.</t></li></ul>
<t>A binding profile that requires Human approval MUST define separate evidence and bind it to the operation.  Actor-key possession alone does not establish that approval.  An accepted association, consent, or standing grant MUST NOT, solely on that basis, be reported as per-operation Human approval.  When such approval is optional and absent, the accepted assertion carries no approval claim; the remaining required checks still apply.</t>
<t>For example, a specialist at Hospital B can answer a consultation from Hospital A through a gateway acting as the authenticated actor.  The response identifies the materials reviewed at version v7.  A binding can authenticate the response and protect its reference to v7.  If the materials change to v8, the receiving clinical workflow decides whether the response still applies.  Acceptance does not itself authorize treatment or transfer clinical responsibility.</t>
<t>A binding profile MUST define its extension-processing model.  Unknown critical extensions, protected-header parameters, or binding-profile-required fields fail closed. Unknown non-critical fields are ignored or rejected according to the binding profile, but they MUST NOT change the meaning of accepted claims, the replay key, verifier-local expected values, or effective authorization.  Ignored fields within a grant remain in its exact-byte hash input, so grant_hash and the binding context can change.</t>
<t>A profile-version update that changes any decision-sensitive input, canonicalization rule, exporter-label selection rule, replay-key construction, endpoint-role rule, interaction-type rule, or D3 through D7 comparison rule is a new binding-profile version.  Version negotiation is outside this core profile; a verifier accepts only profile versions selected by verifier-local policy.</t>
<t>An HTTP binding profile SHOULD reuse the HTTP Message Signatures component model in <xref target="RFC9421"/> and Digest Fields in <xref target="RFC9530"/> for request-component and content-digest selection, rather than defining a competing HTTP canonicalization scheme.  Structured Field Values <xref target="RFC9651"/> and Problem Details <xref target="RFC9457"/> can be reused for field encoding and error representation.  Tokenized attestation claims can use EAT <xref target="RFC9711"/> within the RATS model <xref target="RFC9334"/>; this document does not redefine evidence formats, appraisal procedures, or attestation-token validation.</t>
</section>
<section anchor="grant-and-authority-material" numbered="true"><name>Grant and Authority Material</name>
<t>An authority grant states what the actor may do.  It is signed by a policy authority or protected with a Message Authentication Code (MAC) under a policy-authority key, and identifies the Agent confirmation key through the confirmation method selected by the binding profile, such as JWT confirmation methods <xref target="RFC7800"/> or the corresponding CWT confirmation method <xref target="RFC8747"/>.  This core profile does not define a new authority grant token format.</t>
<t>A grant carries the deployment-specific equivalent of profile type, profile version, issuer, subject, audience, grant identifier, issued-at time, expiration time, and confirmation key.  When policy requires it, the grant also carries D3 through D7 fields such as service, tenant, deployment, actor, task, delegation, target, operation, canonical intent or capability references, scopes, resources, and authorization details.</t>
<t>The Agent is not the authority for those values.  They are accepted only after grant verification, channel binding, freshness checks, replay checks, and local policy comparison.  Multi-audience grants are rejected unless local policy explicitly allows the exact audience set and the resulting authority boundary.</t>
<t>When a binding profile supports delegated, exchanged, or derived authority grants, it MUST define how the parent authority is identified, verified, and used to constrain the derived grant.  A derived grant MUST NOT expand the effective D3 through D7 authority beyond the parent grant and verifier-local policy.  Deployment profiles that issue such grants SHOULD enforce the same no-expansion rule at issuance time; this core profile enforces it at the verifier boundary.</t>
<t>Task transfer or a new session name does not remove inherited authority conditions.  A derived grant MUST retain those conditions.  Replacing them requires separate authorization, verified under local policy, from an authority permitted to make that change; it is not a continuation under the old grant.</t>
<t>A verifier MUST NOT accept possession of an upstream actor's long-term private credential as evidence that a downstream actor has delegated authority.  When accepting a derived grant, the verifier MUST verify that it identifies the downstream confirmation key and constrains the audience and all D3 through D7 values required by local policy.  Possession of a parent task reference or application correlation value is not evidence of delegation.</t>
<t>If local policy requires the downstream confirmation key to be unavailable to its creator or intermediary, a key identifier and holder-of-key proof are insufficient.  The verifier MUST require accepted evidence or an attestation result that binds the key-protection property to the downstream actor key and accepted channel instance.  Without that evidence, the accepted assertion MUST NOT claim creator isolation.</t>
<t>If a grant authorizes endpoint-key signing, it MUST say which endpoint role and key use are authorized or rely on verifier-local policy that does so.  A generic statement that the endpoint was authenticated by TLS is not sufficient to authorize endpoint-key signing for the session proof.</t>
<section anchor="authority-and-key-separation" numbered="true"><name>Authority and Key Separation</name>
<t>The TLS endpoint key authenticates the accepted TLS or exported-authenticator endpoint.  With leaf_spki and the exporter, it contributes to D0 and D2; it does not alone establish the actor or D3 through D7 policy.  The Agent binding key signs the session proof and supports D4 only when the verified grant or local policy maps it to a canonical actor.  The policy-authority key authenticates grants and supplies observed policy values, without proving live-channel possession.</t>
<t>Policy-authority signing keys MUST NOT be accepted as Agent confirmation keys.  Agent confirmation keys MUST NOT be accepted as policy-authority signing keys.</t>
<t>Endpoint-key use requires explicit authorization by the verified grant or local policy and a valid endpoint credential or local key lifetime.  The protected-header kid is only a key-selection hint.  The binding profile defines token validation, key use, time validity, revocation, profile, and local-policy checks.</t>
<t>The endpoint and Agent binding keys can be equal only when the binding profile and local policy permit the role combination.  Otherwise, a verifier MUST preserve the separate key-role checks even if the key material is equal.</t>
</section>
</section>
<section anchor="session-proof-material" numbered="true"><name>Session Proof Material</name>
<t>A session proof proves that the holder of the confirmation key bound the verified grant to the accepted channel instance, or to an exported authenticator accepted for that channel instance.</t>
<t>It contains at least the abstract profile fields below.  A binding profile fixes the exact JWT claim names, CWT claim labels, COSE/JWS protected-header requirements, canonical encoding rules, and collision-avoidance rules used on the wire.</t>
<ul><li><t>profile type and profile version;</t></li><li><t>audience (aud), proof identifier (jti for JWT-based encodings or cti for CWT/COSE-based encodings), issued-at time (iat), and expiration time (exp);</t></li><li><t>grant_hash over the exact verified grant bytes;</t></li><li><t>accepted endpoint_role and interaction_type;</t></li><li><t>accepted_endpoint_spki_sha256;</t></li><li><t>tls_exporter_sha256;</t></li><li><t>binding_context_sha256;</t></li><li><t>verifier_nonce;</t></li><li><t>attempt_id when the binding profile uses one; and</t></li><li><t>attestation_binder_sha256 when local policy requires attestation or when accepted attestation-to-channel evidence is used.</t></li></ul>
<t>For binding profiles that use compact JWS grants or COSE_Sign1/COSE_Mac0 grants, this document fixes the grant_hash input to avoid parser-dependent acceptance behavior:</t>
<sourcecode><![CDATA[grant_hash = SHA-256("sbaip.identity-grant.jwt.v1" || NUL ||
                     exact-compact-jws-grant-bytes)

grant_hash = SHA-256("sbaip.identity-grant.cwt.v1" || NUL ||
                     exact-cose-sign1-or-mac0-grant-bytes)]]></sourcecode>
<t>exact-compact-jws-grant-bytes is the exact ASCII byte sequence of the compact JWS as received and successfully verified, including protected header, payload, and signature segments.</t>
<t>This document does not define the grant_hash input for JWS JSON Serialization; a binding profile that uses it MUST define the exact hash input.  exact-cose-sign1-or-mac0-grant-bytes is the exact byte sequence of the COSE_Sign1 object or Message Authentication Code (MAC)-protected COSE_Mac0 object as received and successfully verified.</t>
<t>A verifier MUST NOT compute grant_hash by parsing claims and reserializing JSON, CBOR, or COSE in the acceptance path.  Deterministic CBOR/COSE is acceptable only when the binding profile normatively fixes the deterministic encoding rules <xref target="RFC8392"/> <xref target="RFC8949"/> <xref target="RFC9052"/>.</t>
<t>Domain-separation strings beginning with sbaip or SBAIP are fixed constants for the construction versions in which they are defined.  They are not external registry names.</t>
</section>
<section anchor="direct-session-binding-construction" numbered="true"><name>Direct Channel-Binding Construction</name>
<t>This section fixes the Direct-Agent D2 construction.  A verifier MUST NOT replace these inputs with peer-selected labels, inferred context, display names, natural-language descriptions, or reserialized semantic metadata.</t>
<section anchor="endpoint-roles-and-leaf-spki" numbered="true"><name>Endpoint Roles and leaf_spki</name>
<t>The field leaf_spki is the DER SubjectPublicKeyInfo of the accepted endpoint public key <xref target="RFC5280"/>.  It is not a generic reference to whichever certificate happens to be visible to the implementation.</t>
<t>A Direct-Agent binding profile MUST identify the accepted endpoint_role and define the exact source of leaf_spki for each supported role, distinguishing TLS server, TLS client, and exported-authenticator certificate keys.</t>
<table>
<thead><tr><th>Endpoint role</th><th>leaf_spki source</th><th>Typical verifier view</th></tr></thead>
<tbody>
<tr><td>client-tls-endpoint</td><td>The accepted TLS client certificate public key</td><td>The verifier is a server using mTLS.</td></tr>
<tr><td>server-tls-endpoint</td><td>The accepted TLS server certificate public key</td><td>The verifier is a client accepting a server-side Agent.</td></tr>
<tr><td>exported-authenticator-endpoint</td><td>The accepted exported-authenticator certificate public key</td><td>The verifier accepts a post-handshake authenticator for the TLS connection.</td></tr>
</tbody>
</table>
<t>The endpoint_role field included in the context MUST distinguish the authenticated endpoint role.  A binding profile SHOULD use stable, collision-resistant profile-scoped ASCII tokens.</t>
<t>The interaction_type field distinguishes application-to-Agent, Agent-to-Agent, Agent-to-tool, Agent-to-mediator, mediator-to-tool, or other profile-defined interactions that can share the same endpoint role.  It is selected from verifier-local policy or an authenticated binding-profile field.  Unauthenticated peer metadata MUST NOT select it.</t>
<t>If TLS termination, a service mesh, or a gateway prevents the verifier from obtaining the exporter value for the Agent-to-verifier channel instance, Direct-Agent mode is not applicable.  Such deployments need a gateway-routed binding profile as described in <xref target="gateway-routed-mode"/>.</t>
<t>accepted_endpoint_spki_sha256 identifies the endpoint key, not a unique channel.  Channel binding depends on the context-specific exporter and replay state below.  Mapping the endpoint role or key to D3 through D7 requires explicit binding-profile and verifier-local policy.</t>
</section>
<section anchor="context-and-exporter-construction" numbered="true"><name>Context and Exporter Construction</name>
<t>Inputs:</t>
<ul><li><t>tls_connection: the accepted TLS 1.3 connection;</t></li><li><t>exporter_label: a TLS exporter label selected by the binding profile, or by verifier-local policy from a set explicitly allowed by that binding profile;</t></li><li><t>leaf_spki: DER SubjectPublicKeyInfo of the accepted endpoint public key;</t></li><li><t>endpoint_role, interaction_type, protocol_id, aud, grant_hash, task_context, and target_context from authenticated inputs and verifier-local state;</t></li><li><t>verifier_nonce: a verifier-generated unpredictable single-use value; and</t></li><li><t>attempt_id: an optional verifier-local attempt identifier whose semantics are fixed by the binding profile.</t></li></ul>
<t>A verifier MUST NOT accept a peer-selected, request-selected, or otherwise ad hoc exporter label.  Local experiments can use private-use labels, such as labels beginning with EXPERIMENTAL, as described by <xref target="RFC5705"/>.  A generally applicable label can be defined later by another specification and registered according to the TLS Exporter Labels registry procedures updated by <xref target="RFC9847"/>.</t>
<t>The context bytes are sbaip_context_v2:</t>
<sourcecode><![CDATA[field(name, value) = u16be(len(name)) || name ||
                     u32be(len(value)) || value

context = "SBAIP-CONTEXT-v2" || NUL ||
          field("endpoint_role", endpoint_role) ||
          field("interaction_type", interaction_type) ||
          field("protocol_id", protocol_id) ||
          field("aud", aud) ||
          field("grant_hash", raw_32_byte_grant_hash) ||
          field("task_context", task_context) ||
          field("target_context", target_context) ||
          field("verifier_nonce", verifier_nonce) ||
          field("attempt_id", attempt_id)]]></sourcecode>
<t>Field names are ASCII.  Lengths are unsigned big-endian integers.  The field sequence and field names are fixed.  grant_hash is the raw 32-byte digest, not a hex string.  task_context and target_context are each length-delimited when they contain multiple values.  An unused attempt_id is encoded as a zero-length value; it is not omitted.</t>
<t>Construction:</t>
<sourcecode><![CDATA[EKM = TLS-Exporter(tls_connection,
                   label = exporter_label,
                   context = context,
                   length = 32)

attestation_binding_input =
    "SBAIP-ATTESTATION-BINDING-v1" || NUL ||
    field("leaf_spki", leaf_spki) ||
    field("ekm", EKM)

accepted_endpoint_spki_sha256 = SHA-256(leaf_spki)
tls_exporter_sha256 = SHA-256(EKM)
binding_context_sha256 = SHA-256(context)
attestation_binder_sha256 = SHA-256(attestation_binding_input)]]></sourcecode>
<t>The session proof carries the SHA-256 values <xref target="RFC6234"/>.  A common serialization is lowercase hexadecimal without a sha256: prefix, but the encoding profile fixes the exact representation.</t>
<t>This construction uses the TLS exporter interface <xref target="RFC8446"/> to provide the channel-binding property described by <xref target="RFC5056"/> in a profile-specific form; it is not the bare tls-exporter channel-binding value defined by <xref target="RFC9266"/>.</t>
</section>
<section anchor="exported-authenticator-binding" numbered="true"><name>Exported Authenticator Binding</name>
<t>When an exported authenticator is used, the verifier MUST validate the exported authenticator according to <xref target="RFC9261"/> and local certificate, key-use, algorithm, and endpoint-role policy before treating it as an accepted endpoint identity.</t>
<t>The TLS exporter is still derived from the accepted underlying TLS connection.  The accepted endpoint public key is the exported-authenticator certificate public key only when the binding profile's endpoint role says so.</t>
<t>A binding profile that uses exported authenticators MUST define:</t>
<ul><li><t>which exported-authenticator object is accepted when multiple authenticators are presented;</t></li><li><t>which certificate or public key supplies leaf_spki;</t></li><li><t>which party is authorized to sign the session proof;</t></li><li><t>how exported-authenticator freshness, certificate validity, and replay protection interact with the session proof;</t></li><li><t>whether an exported-authenticator object hash is included in task_context or in a binding-profile extension; and</t></li><li><t>how TLS resumption affects exported-authenticator validation and proof reuse.</t></li></ul>
<t>A verifier MUST NOT accept a session proof that binds to a TLS exporter from one connection and an exported authenticator accepted for another connection.</t>
</section>
</section>
<section anchor="attestation-appraisal-and-session-binding" numbered="true"><name>Attestation Appraisal and Channel Binding</name>
<t>The verifier selects the evidence appraiser or attestation-result verifier under local policy.  Peer-provided platform names or format identifiers do not by themselves select a trusted verifier or appraisal policy.</t>
<t>Any attestation evidence used directly for acceptance MUST be appraised under local policy against the same attestation_binding_input, or against a binding-profile-defined transformation of that input.  Any attestation result used for acceptance MUST be verified under a trusted attestation-result signer and local policy, and it MUST carry or cryptographically bind a result-to-channel value derived from that input.</t>
<t>If local policy uses attestation to require creator isolation for an Agent confirmation key that differs from leaf_spki, a binding profile MUST bind that confirmation key into the evidence, appraisal input, or an authenticated extension.  Binding only leaf_spki and EKM is not evidence that a separate confirmation key is unavailable to the actor's creator or intermediary.</t>
<t>A binding profile can present attestation post-handshake, out of band, or through exported authenticators.  It maps the binding input to evidence-specific fields.  Example transformations are:</t>
<sourcecode><![CDATA[report_data = SHA-512(attestation_binding_input)

evidence_nonce = SHA-256("SBAIP-EVIDENCE-NONCE-v1" ||
                         NUL || EKM)]]></sourcecode>
<t>This example does not define an attestation evidence format and does not replace evidence-format-specific appraisal rules.</t>
<t>If local policy requires attestation, absence of an accepted attestation result, attestation-to-channel evidence, or attestation_binder_sha256 is an authentication failure.  A verifier MUST NOT silently downgrade an attestation-required interaction to a channel-binding-only interaction.</t>
<t>A deployment profile that accepts attestation results from a separate attestation verifier MUST define the attestation-result signer, audience, freshness, nonce or challenge, appraisal policy identifier, and result-to-channel binding.  A verifier MUST reject an attestation result whose audience, freshness, appraisal policy, or channel binding is missing or inconsistent with local policy.</t>
<t>A verifier compares tls_exporter_sha256 and binding_context_sha256 with its own accepted values.  Missing or mismatched mandatory fields fail closed.</t>
</section>
<section anchor="verification-procedure" numbered="true"><name>Verification Procedure</name>
<t>Acceptance has an authentication phase, a policy phase, and a replay-commit step.</t>
<t>Authentication phase:</t>
<ol><li><t>Verify the authority grant under a trusted policy-authority key.</t></li><li><t>Check issuer, audience, profile identifier and version, algorithm, key status, iat, exp, grant ID, token type, and required authorization fields.</t></li><li><t>Select the binding profile, endpoint_role, and interaction_type from verifier-local policy and authenticated profile fields.</t></li><li><t>Verify the session proof under the Agent confirmation key or an explicitly authorized endpoint key.  Check its type, profile identifier and version, protected headers, required claims, and time validity under the binding profile's rules.</t></li><li><t>Check that the binding signer is authorized by the verified grant or by local policy for the selected endpoint_role.</t></li><li><t>Check endpoint credential or endpoint-key validity under local TLS, PKIX, exported-authenticator, and key-status policy.</t></li><li><t>Recompute grant_hash over the exact verified grant bytes.</t></li><li><t>Recompute the accepted binding context and exporter-derived values.</t></li><li><t>Compare aud, endpoint_role, interaction_type, endpoint-key hash, TLS exporter hash, binding-context hash, attestation binder when required or present, verifier_nonce, and attempt_id when used.</t></li><li><t>Appraise required attestation evidence or verify a trusted attestation result, and verify result-to-channel binding.</t></li><li><t>Build an internal observed assertion only from verified material.</t></li></ol>
<t>Policy phase:</t>
<ol><li><t>Load verifier-local expected values for required dimensions.</t></li><li><t>Reject missing, ambiguous, non-canonical, or peer-supplied expected values.</t></li><li><t>Compare each observed D3 through D7 value with local expected policy using binding-profile comparison rules.</t></li><li><t>Compare D6 target identity separately from D7 authorization and enforce D7 set semantics.</t></li></ol>
<t>The effective authorization is the intersection of capabilities authorized by the verified grant, capabilities allowed by verifier-local policy, and capabilities requested for the current task context.  A requested capability absent from any of those sets is rejected.  Surplus observed capabilities are ignored or rejected according to local policy, but they MUST NOT expand the effective authorization.</t>
<t>If an authorization evaluator uses Permit, Deny, Indeterminate, and NotApplicable, only Permit can satisfy a required policy check.  Deny rejects the check; Indeterminate means missing information or evaluation failure; NotApplicable means the policy does not apply.  A binding profile combining policy results MUST define how they combine and ensure accepted results concern the same actor, request, and context.  This profile specifies no wire encoding for these outcomes.  Policy Indeterminate does not mean an unknown execution result.</t>
<t>A binding profile that permits a reverse request or authorization checkpoint within an existing channel instance MUST bind request_kind, message_direction, parent_invocation_id, parent_task_ref, and authorized_reverse_operation into task_context.  An active channel instance alone does not authorize the reverse operation.</t>
<t>A callback that opens a new transport association is a separate exchange on a new channel instance.  The verifier MUST perform a new acceptance decision for that channel instance and MUST bind the callback to the locally expected parent invocation and task.  A callback endpoint, continuation token, parent identifier, or proof accepted on the original channel does not by itself authenticate or authorize the callback exchange.</t>
<t>Replay commit:</t>
<ul><li><t>before returning the acceptance decision, atomically insert the replay key with an expiry;</t></li><li><t>if the insert fails because the key already exists, reject; and</t></li><li><t>failed authentication or policy attempts do not consume a one-shot value unless deployment policy deliberately chooses that anti-probing behavior.</t></li></ul>
<t>The application consumes only the typed accepted assertion defined in <xref target="accepted-assertion-output"/>.</t>
<section anchor="minimal-positive-acceptance-case" numbered="true"><name>Positive Acceptance Example</name>
<t>For example, after the procedure above succeeds, an assertion can accept actor A to read target T for task Q on channel C until expiry E.  Its effective_authorization contains only the read capability allowed by the grant, local policy, and request.  If delegation and attestation were not selected, those claims remain absent.  The result cannot authorize another task or target.  This example leaves the encoding unspecified.  The assertion still needs all required fields.</t>
<t>A binding profile's positive test vectors SHOULD specify the accepted assertion and its reliance scope, including claims that remain unaccepted.  Successful token validation alone does not demonstrate that constrained output.</t>
</section>
<section anchor="minimal-negative-acceptance-cases" numbered="true"><name>Minimal Negative Acceptance Cases</name>
<t>The following cases are a minimum negative test set for binding profiles and implementations.  They are not exhaustive.</t>
<table>
<thead><tr><th>Case</th><th>Required result</th></tr></thead>
<tbody>
<tr><td>Valid grant, but TLS exporter hash mismatch</td><td>Reject</td></tr>
<tr><td>Valid sender-constrained token, but no profile-defined TLS-exporter binding</td><td>Reject</td></tr>
<tr><td>Valid session proof, but grant_hash was computed from reserialized claims</td><td>Reject</td></tr>
<tr><td>Valid endpoint identity, but D3 service value is only peer-supplied metadata</td><td>Reject</td></tr>
<tr><td>Valid endpoint key, but endpoint role is not the role selected by local policy</td><td>Reject</td></tr>
<tr><td>Valid endpoint role, but interaction_type is not the type selected by local policy</td><td>Reject</td></tr>
<tr><td>Actor identity matches, but the target resource or operation differs from D6 expected policy</td><td>Reject</td></tr>
<tr><td>Valid exported authenticator, but it is accepted for a different TLS connection</td><td>Reject</td></tr>
<tr><td>Valid attestation result, but not bound to the accepted channel instance</td><td>Reject</td></tr>
<tr><td>Local policy requires attestation, but proof is channel-binding-only</td><td>Reject</td></tr>
<tr><td>Valid grant with surplus capability not allowed by local policy</td><td>Reject, or ignore the surplus capability according to local policy; MUST NOT expand effective authorization</td></tr>
<tr><td>Reused verifier_nonce and binding context on the same channel instance for another task</td><td>Reject</td></tr>
<tr><td>Valid session proof and active channel, but a reverse request is not bound to the locally expected parent invocation</td><td>Reject</td></tr>
<tr><td>Callback opens a new channel instance but reuses the session proof accepted on the parent channel</td><td>Reject</td></tr>
<tr><td>Application-session continuation token presented on a replacement channel without a new channel binding</td><td>Reject</td></tr>
<tr><td>Parent task reference matches, but the downstream actor lacks a verified derived grant</td><td>Reject</td></tr>
<tr><td>Task transfer omits an inherited condition without verified replacement authorization</td><td>Reject</td></tr>
<tr><td>Signed audit record names the operation, but the required authority grant is absent</td><td>Reject</td></tr>
<tr><td>External verification result reports success, but a required prerequisite is unresolved</td><td>Reject</td></tr>
<tr><td>Actor authentication succeeds, but required Human-approval evidence is absent</td><td>Reject</td></tr>
<tr><td>Local policy requires creator-isolated key custody, but the actor supplies only a key identifier and holder-of-key proof</td><td>Reject</td></tr>
<tr><td>Replay cache unavailable for a one-shot non-idempotent acceptance</td><td>Reject unless local policy defines a safer failure mode</td></tr>
<tr><td>Profile-authenticated identity requested for TLS 0-RTT data</td><td>Reject</td></tr>
<tr><td>Gateway-authenticated endpoint presented as final-Agent identity without a gateway-routed binding profile</td><td>Reject</td></tr>
</tbody>
</table>
</section>
</section>
<section anchor="freshness-replay-rotation-and-revocation" numbered="true"><name>Freshness, Replay, Rotation, and Revocation</name>
<t>The accepted assertion expiry is the earliest applicable expiry among:</t>
<ul><li><t>grant exp;</t></li><li><t>session proof exp;</t></li><li><t>TLS endpoint credential or endpoint-key lifetime;</t></li><li><t>exported-authenticator certificate and validation lifetime;</t></li><li><t>attestation-result exp;</t></li><li><t>evidence challenge lifetime;</t></li><li><t>attestation collateral or TCB lifetime; and</t></li><li><t>local policy maximum TTL.</t></li></ul>
<t>The verifier MUST check the expiry again after any blocking replay commit and before returning the accepted assertion.  If expiry is reached after replay was committed, the nonce remains consumed and no accepted assertion is returned.</t>
<t>Replay state for an accepted verifier nonce MUST remain protected until no proof using that nonce can be accepted.  The retention boundary is at least the latest of the accepted assertion expiry, session-proof expiry, and verifier challenge or nonce expiry.  A replay store that cannot retain the reservation for that period fails the acceptance step; a shorter store TTL is not a separate freshness source.</t>
<t>A missing required freshness policy value fails closed.  Evidence without a trusted timestamp is acceptable only for the current challenge and current authentication attempt.</t>
<t>TLS resumption, reconnection, and transport replacement create a new channel instance.  The verifier MUST require a new channel binding and MUST NOT reuse the previous session proof or acceptance decision.  Profile-authenticated identity MUST NOT be returned for TLS 0-RTT data.</t>
<t>A path or address migration can preserve the transport connection.  This profile still requires a fresh acceptance decision, verifier_nonce, and session proof bound to the retained channel instance after migration.  A binding profile supporting migration MUST define how the verifier detects the event and completes reacceptance before an accepted assertion is used again.  Existing nonce reservations remain effective for their full retention period.</t>
<t>An application-session continuation token does not prove binding to a replacement channel instance.  A continuation profile MUST authenticate the logical application-session state and bind it to the new channel instance before the application consumes a continued accepted result.</t>
<t>Continuation also requires a new acceptance decision under current grant validity, key status, and verifier-local policy.  Retained task or application-session state does not extend an expired grant or assertion.  Credential renewal does not erase that state or, by itself, authorize a change to its task, target, or delegation constraints.</t>
<t>verifier_nonce is generated by the verifier.  A binding profile MUST define at least 128 bits of unpredictability, single-use handling, and a bounded lifetime.  A peer-generated value does not satisfy verifier_nonce.  If the replay cache cannot enforce the profile's single-use rule, acceptance fails closed.</t>
<t>attempt_id is a verifier-generated identifier for local-state lookup and diagnostics.  When used, its uniqueness scope and collision handling are fixed by the binding profile, and a collision fails closed.  attempt_id is not a substitute for verifier_nonce.</t>
<t>When multiple tasks share one channel instance, each accepted task binding MUST include a task-specific task_context, target_context, verifier_nonce, and attempt_id when used.  Reusing the same context and verifier nonce across tasks fails closed.</t>
<t>A successful acceptance atomically reserves verifier_nonce within the binding profile's verifier or audience namespace.  Changing a binding-statement ID, task, target, channel, attempt ID, or attestation-result ID MUST NOT make the same nonce acceptable again.  A binding profile can store a separate composite digest for audit or request correlation, but that digest does not replace the nonce reservation.</t>
<t>Key lookup and key caches MUST be scoped by the equivalent of:</t>
<sourcecode><![CDATA[profile_version || token_type || issuer || audience || key_use ||
alg || kty || kid || key_status || public_key_thumbprint]]></sourcecode>
<t>kid is never a global key name.  Unknown, revoked, retired, stale, wrong-use, or ambiguous keys fail closed.  Deployments that need early invalidation need grant revocation, policy-authority-key revocation, Agent-binding-key revocation, and endpoint-key revocation separately.</t>
<t>This document does not define revocation propagation for a logical application session or task graph.  Ending or revoking an application correlation value does not by itself revoke an authority grant or key, and revoking an authority grant or key does not erase application correlation state.  A binding profile that couples those operations MUST define the authenticated revocation event, scope, propagation rule, and failure behavior.</t>
</section>
<section anchor="canonical-policy-values" numbered="true"><name>Canonical Values and String Comparison</name>
<t>Decision-sensitive semantic values need to be canonical before acceptance.  Common examples are ontology_id, intent_ref, capability_ref, task_ref, workload_id, and tenant_id.</t>
<t>Receivers MUST NOT repair peer-provided aliases, display labels, natural language phrases, case variants, URI variants, or model interpretations during the final acceptance path.  Alias resolution belongs to the policy authority, trusted registry, or local policy engine before issuance or comparison.</t>
<t>An alias is acceptable only when it resolves to exactly one canonical reference under a pinned registry namespace and version.  Missing, ambiguous, deprecated, or unsupported registry data fails closed.</t>
<t>When an Agent uses natural language or model-generated plans, the verifier MUST NOT use those strings as D3 through D7 expected values unless a binding profile and local policy define a deterministic canonicalization and approval path.</t>
<t>Profile constants, field names, and the domain-separation strings defined by this document are ASCII.  Decision-sensitive values are compared only in the canonical form defined by the binding profile and local policy.</t>
<t>Binding profiles SHOULD prefer opaque identifiers, URIs, or other canonical references for D3 through D7 values.  If a binding profile permits non-ASCII decision-sensitive strings, it MUST define the character encoding, normalization form, comparison rules, case handling, and treatment of visually confusable strings.  Display strings and natural-language text MUST NOT be used as policy keys unless that deterministic comparison profile is defined.</t>
</section>
<section anchor="deployment-topologies" numbered="true"><name>Deployment Topologies</name>
<section anchor="direct-agent-mode" numbered="true"><name>Direct-Agent Mode</name>
<t>In Direct-Agent mode, the actor or its peer endpoint participates in the accepted channel instance and signs with the grant's confirmation key or an explicitly authorized endpoint key.  The exporter-availability condition is specified in <xref target="endpoint-roles-and-leaf-spki"/>.</t>
</section>
<section anchor="gateway-routed-mode" numbered="true"><name>Gateway-Routed Mode</name>
<t>Gateway-routed deployments use separate binding profiles.  This section gives their security requirements, not a complete profile.</t>
<t>Gateway authentication proves the gateway endpoint, not the downstream actor or target.  A verifier MUST NOT accept a downstream actor or target identity through a gateway unless a binding profile defines route assertions, downstream holder-of-key requirements when required by policy, freshness, replay protection, and local route policy.</t>
<t>A gateway-routed binding profile MUST define:</t>
<ul><li><t>whether the bound channel is actor-to-gateway, gateway-to-verifier, both, or another authenticated transport path;</t></li><li><t>whether downstream actor holder-of-key proof is required end-to-end or whether a gateway route assertion is accepted as delegated authority;</t></li><li><t>the gateway route assertion signer, audience, expiry, nonce, route, tenant or authority partition, downstream actor, target, interaction type, binding context, and replay key;</t></li><li><t>which claims and payloads the gateway is allowed to see, transform, or withhold;</t></li><li><t>how route assertions interact with authority grants and which value wins when they disagree; and</t></li><li><t>how local policy rejects missing, stale, replayed, wrong-route, wrong-tenant, wrong-task, wrong-actor, or wrong-target assertions.</t></li></ul>
<t>A gateway, route service, transparency log, or action log is a deployment choice, not a protocol requirement.  Gateway deployments that exchange tokens can use OAuth 2.0 Token Exchange <xref target="RFC8693"/> when applicable.</t>
</section>
</section>
<section anchor="privacy-considerations" numbered="true"><name>Privacy Considerations</name>
<t>Identity-binding data can create correlation.  Deployments SHOULD prefer audience-scoped or pairwise identifiers, short lifetimes, selective disclosure, reference tokens, and minimized logs.</t>
<t>Full grants, session proofs, key fingerprints, attestation evidence, tenant IDs, task IDs, capability references, route assertion IDs, and replay keys SHOULD NOT be logged unless needed for security audit.  When logging is required, deployments SHOULD apply retention limits, access controls, and redaction appropriate to the sensitivity of the deployment.</t>
<t>Attestation evidence can contain platform-unique or device-unique information.  A binding profile that carries attestation evidence or detailed attestation results SHOULD consider pairwise identifiers, audience-scoped attestation results, reference tokens, or selective disclosure to reduce cross-verifier linkability.</t>
<t>task_context can reveal user intent, business process state, customer identifiers, or transaction details.  Binding profiles SHOULD hash or reference task_context values when the verifier does not need to disclose the full task content to intermediaries or logs.</t>
<t>Application correlation values and parent-child relationships can enable cross-domain linkability even when payloads are hidden.  Binding profiles SHOULD use audience-scoped values and disclose parent-child relationships only to parties that need them.  A stable unsalted hash remains linkable.</t>
<t>Intermediaries SHOULD receive only the claims and payloads needed for their role.  A gateway-routed binding profile SHOULD state which identity, task, attestation, and capability fields are visible to each intermediary.</t>
</section>
<section anchor="operational-and-performance-considerations" numbered="true"><name>Caching, Replay Commit, and Operation Recovery</name>
<t>Verified grants, session proofs, attestation evidence, authorization decisions, and verification results MUST NOT be cached as acceptance evidence for a later channel instance or request.</t>
<t>HTTP caching semantics are unchanged.  The default for profile-sensitive HTTP responses is no-store <xref target="RFC9111"/>.  Vary is insufficient when the decision depends on non-header security state.</t>
<t>Implementations can cache inputs that are not themselves acceptance evidence, such as trusted key sets, key-status metadata, parsed local policy, endpoint public-key hashes, and precomputed grant hashes.  Such caches need to be scoped by the same fields used for key lookup, profile version, issuer, audience, key use, algorithm, key status, and local policy.  Cached inputs MUST NOT expand the effective authorization and MUST NOT be reused as proof of acceptance for a different request or channel instance.</t>
<t>Distributed replay caches are security-critical.  For one-shot or non-idempotent interactions, a verifier deployment SHOULD use a strongly consistent replay-commit mechanism across all verifier instances that can accept the same replay key.  If the replay cache is unavailable, partitioned, or cannot provide the consistency required by local policy, the verifier MUST fail closed unless local policy defines a narrower safe mode for idempotent requests.  Any such mode MUST preserve the profile's nonce single-use requirement.  Otherwise, no profile-authenticated assertion is returned.</t>
<t>Multi-region deployments SHOULD bound the accepted replay window, identify which region owns the replay key, or use replay-key sharding that prevents an attacker from choosing a less-protected verifier instance.  Replay commit MUST occur before the application observes a positive acceptance decision, as required by <xref target="verification-procedure"/>.  An application MUST NOT use this profile to authorize a side effect before that decision.</t>
<t>A binding profile that supports retry or result recovery MUST distinguish the logical application operation from each authentication attempt.  It defines the operation identifier's namespace and the canonical application-request digest.  A retry retains that identifier and digest but uses a fresh verifier nonce and session proof.  A change of proof or channel does not create a new application operation.  Reusing an operation identifier with a different request digest MUST be rejected.  The profile defines which authenticated callers may retry the operation or retrieve its result.</t>
<t>For a non-idempotent operation, a deployment can reserve the replay key and a stable operation ID and request digest in one transaction.  A replay reservation alone does not establish whether the application committed or executed the operation.  After execution may have begun, a lost connection or response does not authorize a blind retry.  The receiver returns recorded operation state or marks the result indeterminate until it can reconcile the external effect.  Result retrieval requires a fresh acceptance decision for that retrieval under current local policy; the recorded result is application state, not reusable acceptance evidence.  A fresh proof does not authorize duplicate execution.</t>
<t>An application MUST NOT begin a new operation after the accepted assertion expires.  If expiry is reached after the operation is reserved but before the external call, the receiver records that the operation was not run and does not invoke it.</t>
</section>
<section anchor="security-considerations" numbered="true"><name>Security Considerations</name>
<t>The core invariant in <xref target="core-invariant"/> depends on the key-role, construction, policy, and replay checks above.  The minimum rejection cases in <xref target="minimal-negative-acceptance-cases"/> exercise these boundaries.</t>
<t>JWT- or JWS-based binding profiles MUST follow <xref target="RFC8725"/>, including issuer and subject validation, audience validation, algorithm verification, explicit typing when applicable, and mutually exclusive validation rules for different token types.  Received claims remain observed values until policy comparison succeeds; grant_hash uses the exact verified bytes.</t>
<t>TLS deployments rely on <xref target="RFC8446"/> and the deployment recommendations in <xref target="RFC9325"/>.  This profile does not update TLS.  A gateway, relay, registry, or transparency service is a trust root only when local policy says so.</t>
<t>Deployment profiles SHOULD evaluate disclosure to intermediaries, mandatory gatekeeping or monitoring, and the ability of persons or organizations to choose trusted authorities and disclosed claims.</t>
<section anchor="diagnostics" numbered="true"><name>Diagnostics</name>
<t>Diagnostics SHOULD preserve the acceptance dimension, field, and error class, but SHOULD NOT echo raw peer values.</t>
<t>Local diagnostics SHOULD distinguish a failed check from unavailable input, an unsupported verifier capability, or a check not attempted.  None permits acceptance when the check is required.  External responses can combine these reasons under the disclosure policy.</t>
<t>Implementations SHOULD reject invalid UTF-8, CRLF, control characters, and HTML delimiter characters in profile fields unless the field profile explicitly permits and canonicalizes them.</t>
<t>Diagnostic error classes SHOULD be stable enough to support conformance tests for D0 through D7 failures, replay failures, and context-diversion failures.  The external diagnostic response SHOULD avoid revealing whether a guessed issuer, key identifier, tenant, task reference, target, route, or capability reference exists.</t>
</section>
</section>
<section anchor="iana-considerations" numbered="true"><name>IANA Considerations</name>
<t>This document makes no IANA requests and defines no TLS exporter label.  Label selection, the prohibition on peer-selected or request-selected labels, and registration under <xref target="RFC9847"/> are specified in <xref target="context-and-exporter-construction"/>.</t>
</section>
</middle>
<back>
<references><name>Normative References</name>
<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname="D. Cooper" initials="D." surname="Cooper"/>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="W. Polk" initials="W." surname="Polk"/>
    <date month="May" year="2008"/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5280"/>
  <seriesInfo name="DOI" value="10.17487/RFC5280"/>
</reference>
<reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
  <front>
    <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="May" year="2011"/>
    <abstract>
      <t>Federal Information Processing Standard, FIPS</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6234"/>
  <seriesInfo name="DOI" value="10.17487/RFC6234"/>
</reference>
<reference anchor="RFC7800" target="https://www.rfc-editor.org/info/rfc7800" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7800.xml">
  <front>
    <title>Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="April" year="2016"/>
    <abstract>
      <t>This specification describes how to declare in a JSON Web Token (JWT) that the presenter of the JWT possesses a particular proof-of- possession key and how the recipient can cryptographically confirm proof of possession of the key by the presenter. Being able to prove possession of a key is also sometimes described as the presenter being a holder-of-key.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7800"/>
  <seriesInfo name="DOI" value="10.17487/RFC7800"/>
</reference>
<reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8392.xml">
  <front>
    <title>CBOR Web Token (CWT)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="May" year="2018"/>
    <abstract>
      <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8392"/>
  <seriesInfo name="DOI" value="10.17487/RFC8392"/>
</reference>
<reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
  <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="RFC8725" target="https://www.rfc-editor.org/info/rfc8725" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8725.xml">
  <front>
    <title>JSON Web Token Best Current Practices</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="D. Hardt" initials="D." surname="Hardt"/>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="225"/>
  <seriesInfo name="RFC" value="8725"/>
  <seriesInfo name="DOI" value="10.17487/RFC8725"/>
</reference>
<reference anchor="RFC8747" target="https://www.rfc-editor.org/info/rfc8747" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8747.xml">
  <front>
    <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="L. Seitz" initials="L." surname="Seitz"/>
    <author fullname="G. Selander" initials="G." surname="Selander"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="March" year="2020"/>
    <abstract>
      <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8747"/>
  <seriesInfo name="DOI" value="10.17487/RFC8747"/>
</reference>
<reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9052.xml">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>
<reference anchor="RFC9261" target="https://www.rfc-editor.org/info/rfc9261" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9261.xml">
  <front>
    <title>Exported Authenticators in TLS</title>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <date month="July" year="2022"/>
    <abstract>
      <t>This document describes a mechanism that builds on Transport Layer Security (TLS) or Datagram Transport Layer Security (DTLS) and enables peers to provide proof of ownership of an identity, such as an X.509 certificate. This proof can be exported by one peer, transmitted out of band to the other peer, and verified by the receiving peer.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9261"/>
  <seriesInfo name="DOI" value="10.17487/RFC9261"/>
</reference>
<reference anchor="RFC9325" target="https://www.rfc-editor.org/info/rfc9325" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9325.xml">
  <front>
    <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="T. Fossati" initials="T." surname="Fossati"/>
    <date month="November" year="2022"/>
    <abstract>
      <t>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are used to protect data exchanged over a wide range of application protocols and can also form the basis for secure transport protocols. Over the years, the industry has witnessed several serious attacks on TLS and DTLS, including attacks on the most commonly used cipher suites and their modes of operation. This document provides the latest recommendations for ensuring the security of deployed services that use TLS and DTLS. These recommendations are applicable to the majority of use cases.</t>
      <t>RFC 7525, an earlier version of the TLS recommendations, was published when the industry was transitioning to TLS 1.2. Years later, this transition is largely complete, and TLS 1.3 is widely available. This document updates the guidance given the new environment and obsoletes RFC 7525. In addition, this document updates RFCs 5288 and 6066 in view of recent attacks.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="195"/>
  <seriesInfo name="RFC" value="9325"/>
  <seriesInfo name="DOI" value="10.17487/RFC9325"/>
</reference>
<reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9334.xml">
  <front>
    <title>Remote ATtestation procedureS (RATS) Architecture</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <author fullname="N. Smith" initials="N." surname="Smith"/>
    <author fullname="W. Pan" initials="W." surname="Pan"/>
    <date month="January" year="2023"/>
    <abstract>
      <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9334"/>
  <seriesInfo name="DOI" value="10.17487/RFC9334"/>
</reference>
<reference anchor="RFC9421" target="https://www.rfc-editor.org/info/rfc9421" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9421.xml">
  <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" target="https://www.rfc-editor.org/info/rfc9530" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9530.xml">
  <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>
</references>
<references><name>Informative References</name>
<reference anchor="I-D.schrock-ep-authority-introduction" target="https://datatracker.ietf.org/doc/html/draft-schrock-ep-authority-introduction-03">
<front><title>Authority Documents and Scoped Authority for Agent-Action Evidence</title><author initials="I." surname="Schrock" fullname="Iman Schrock"/><date year="2026" month="August" day="4"/></front>
<seriesInfo name="Internet-Draft" value="draft-schrock-ep-authority-introduction-03"/>
</reference>
<reference anchor="RFC5056" target="https://www.rfc-editor.org/info/rfc5056" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5056.xml">
  <front>
    <title>On the Use of Channel Bindings to Secure Channels</title>
    <author fullname="N. Williams" initials="N." surname="Williams"/>
    <date month="November" year="2007"/>
    <abstract>
      <t>The concept of channel binding allows applications to establish that the two end-points of a secure channel at one network layer are the same as at a higher layer by binding authentication at the higher layer to the channel at the lower layer. This allows applications to delegate session protection to lower layers, which has various performance benefits.</t>
      <t>This document discusses and formalizes the concept of channel binding to secure channels. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5056"/>
  <seriesInfo name="DOI" value="10.17487/RFC5056"/>
</reference>
<reference anchor="RFC5705" target="https://www.rfc-editor.org/info/rfc5705" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5705.xml">
  <front>
    <title>Keying Material Exporters for Transport Layer Security (TLS)</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="March" year="2010"/>
    <abstract>
      <t>A number of protocols wish to leverage Transport Layer Security (TLS) to perform key establishment but then use some of the keying material for their own purposes. This document describes a general mechanism for allowing that. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5705"/>
  <seriesInfo name="DOI" value="10.17487/RFC5705"/>
</reference>
<reference anchor="RFC6973" target="https://www.rfc-editor.org/info/rfc6973" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6973.xml">
  <front>
    <title>Privacy Considerations for Internet Protocols</title>
    <author fullname="A. Cooper" initials="A." surname="Cooper"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="B. Aboba" initials="B." surname="Aboba"/>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <author fullname="J. Morris" initials="J." surname="Morris"/>
    <author fullname="M. Hansen" initials="M." surname="Hansen"/>
    <author fullname="R. Smith" initials="R." surname="Smith"/>
    <date month="July" year="2013"/>
    <abstract>
      <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6973"/>
  <seriesInfo name="DOI" value="10.17487/RFC6973"/>
</reference>
<reference anchor="RFC7258" target="https://www.rfc-editor.org/info/rfc7258" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7258.xml">
  <front>
    <title>Pervasive Monitoring Is an Attack</title>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="May" year="2014"/>
    <abstract>
      <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="188"/>
  <seriesInfo name="RFC" value="7258"/>
  <seriesInfo name="DOI" value="10.17487/RFC7258"/>
</reference>
<reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8693.xml">
  <front>
    <title>OAuth 2.0 Token Exchange</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
    <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
    <date month="January" year="2020"/>
    <abstract>
      <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8693"/>
  <seriesInfo name="DOI" value="10.17487/RFC8693"/>
</reference>
<reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9111.xml">
  <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="RFC9266" target="https://www.rfc-editor.org/info/rfc9266" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9266.xml">
  <front>
    <title>Channel Bindings for TLS 1.3</title>
    <author fullname="S. Whited" initials="S." surname="Whited"/>
    <date month="July" year="2022"/>
    <abstract>
      <t>This document defines a channel binding type, tls-exporter, that is compatible with TLS 1.3 in accordance with RFC 5056, "On the Use of Channel Bindings to Secure Channels". Furthermore, it updates the default channel binding to the new binding for versions of TLS greater than 1.2. This document updates RFCs 5801, 5802, 5929, and 7677.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9266"/>
  <seriesInfo name="DOI" value="10.17487/RFC9266"/>
</reference>
<reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9449.xml">
  <front>
    <title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title>
    <author fullname="D. Fett" initials="D." surname="Fett"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="D. Waite" initials="D." surname="Waite"/>
    <date month="September" year="2023"/>
    <abstract>
      <t>This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9449"/>
  <seriesInfo name="DOI" value="10.17487/RFC9449"/>
</reference>
<reference anchor="RFC9457" target="https://www.rfc-editor.org/info/rfc9457" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
  <front>
    <title>Problem Details for HTTP APIs</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="E. Wilde" initials="E." surname="Wilde"/>
    <author fullname="S. Dalal" initials="S." surname="Dalal"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
      <t>This document obsoletes RFC 7807.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9457"/>
  <seriesInfo name="DOI" value="10.17487/RFC9457"/>
</reference>
<reference anchor="RFC9518" target="https://www.rfc-editor.org/info/rfc9518" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9518.xml">
  <front>
    <title>Centralization, Decentralization, and Internet Standards</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="December" year="2023"/>
    <abstract>
      <t>This document discusses aspects of centralization that relate to Internet standards efforts. It argues that, while standards bodies have a limited ability to prevent many forms of centralization, they can still make contributions that assist in the decentralization of the Internet.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9518"/>
  <seriesInfo name="DOI" value="10.17487/RFC9518"/>
</reference>
<reference anchor="RFC9651" target="https://www.rfc-editor.org/info/rfc9651" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9651.xml">
  <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="RFC9711" target="https://www.rfc-editor.org/info/rfc9711" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9711.xml">
  <front>
    <title>The Entity Attestation Token (EAT)</title>
    <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
    <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
    <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
    <author fullname="C. Wallace" initials="C." surname="Wallace"/>
    <date month="April" year="2025"/>
    <abstract>
      <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
      <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9711"/>
  <seriesInfo name="DOI" value="10.17487/RFC9711"/>
</reference>
<reference anchor="RFC9847" target="https://www.rfc-editor.org/info/rfc9847" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9847.xml">
  <front>
    <title>IANA Registry Updates for TLS and DTLS</title>
    <author fullname="J. Salowey" initials="J." surname="Salowey"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="December" year="2025"/>
    <abstract>
      <t>This document updates the changes to the TLS and DTLS IANA registries made in RFC 8447. It adds a new value, "D" for discouraged, to the "Recommended" column of the selected TLS registries and adds a "Comment" column to all active registries that do not already have a "Comment" column. Finally, it updates the registration request instructions.</t>
      <t>This document updates RFC 8447.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9847"/>
  <seriesInfo name="DOI" value="10.17487/RFC9847"/>
</reference>
<reference anchor="I-D.bu-agentproto-security-principal-binding" target="https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-06">
<front><title>Security Principal and Verifier Binding for Agent Communication Protocols</title><author initials="S." surname="Bu" fullname="Songbo Bu"/><date year="2026" month="August" day="17"/></front>
<seriesInfo name="Internet-Draft" value="draft-bu-agentproto-security-principal-binding-06"/>
</reference>
<reference anchor="I-D.foroughi-agent-protocol-dimensions" target="https://datatracker.ietf.org/doc/draft-foroughi-agent-protocol-dimensions/">
<front><title>A Dimensional Model for Characterizing AI Agent Protocol Proposals and Their Substrates</title><author initials="P." surname="Foroughi" fullname="Parisa Foroughi"/><date year="2026" month="July" day="6"/></front>
<seriesInfo name="Internet-Draft" value="draft-foroughi-agent-protocol-dimensions-00"/>
</reference>
<reference anchor="I-D.ietf-oauth-identity-assertion-authz-grant" target="https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/">
<front><title>Identity Assertion JWT Authorization Grant</title><author initials="A." surname="Parecki" fullname="Aaron Parecki"/><author initials="K." surname="McGuinness" fullname="Karl McGuinness"/><author initials="B." surname="Campbell" fullname="Brian Campbell"/><date year="2026" month="May" day="21"/></front>
<seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-assertion-authz-grant-04"/>
</reference>
<reference anchor="I-D.ietf-wimse-arch" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-arch-08" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-arch.xml">
  <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="I-D.ietf-wimse-workload-creds" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-workload-creds-02" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-workload-creds.xml">
  <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-mutual-tls" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-mutual-tls-02" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-mutual-tls.xml">
  <front>
    <title>Workload Authentication Using Mutual TLS</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>
    <date day="6" 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 to complex multi-service, multi-cloud, multi-tenant deployments. This document profiles a workload authentication based on X.509 workload identity certificates using mutual TLS (mTLS).</t>
    </abstract>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-mutual-tls-02"/>
</reference>
<reference anchor="I-D.ietf-wimse-wpt" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-wpt-01" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-wpt.xml">
  <front>
    <title>WIMSE Workload Proof Token</title>
    <author fullname="Brian Campbell" initials="B." surname="Campbell">
      <organization>Ping Identity</organization>
    </author>
    <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
      <organization>Defakto Security</organization>
    </author>
    <date day="2" month="March" year="2026"/>
    <abstract>
      <t>The WIMSE architecture defines authentication and authorization for software workloads in a variety of runtime environments, from basic deployments to complex multi-service, multi-cloud, multi-tenant systems. This document specifies the Workload Proof Token (WPT), a mechanism for workloads to prove possession of the private key associated with a Workload Identity Token (WIT). The WPT is a signed JWT that binds the workload's authentication to a specific HTTP request, providing application-level proof of possession for workload-to-workload communication. This specification is designed to work alongside the WIT credential format defined in draft-ietf- wimse-workload-creds and can be combined with other WIMSE protocols in multi-hop call chains.</t>
    </abstract>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-wpt-01"/>
</reference>
<reference anchor="I-D.ietf-wimse-identifier" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-identifier-03" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-identifier.xml">
  <front>
    <title>Workload Identifier</title>
    <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
      <organization>Zscaler</organization>
    </author>
    <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
      <organization>Palo Alto Networks</organization>
    </author>
    <date day="6" month="July" year="2026"/>
    <abstract>
      <t>This document defines a canonical identifier for workloads, referred to as the Workload Identifier. A Workload Identifier is a URI that uniquely identifies a workload within the context of a specific trust domain. This identifier can be embedded in Workload Identity Credentials, including X.509 certificates and JWT-based tokens, to support authentication, authorization, and policy enforcement across diverse systems. The Workload Identifier format ensures interoperability, facilitates secure identity federation, and enables consistent identity semantics.</t>
    </abstract>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-identifier-03"/>
</reference>
<reference anchor="I-D.ietf-wimse-http-signature" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-http-signature-06" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-http-signature.xml">
  <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="4" month="August" 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-06"/>
</reference>
</references>
<section anchor="non-normative-example-https-direct-agent-jws-binding-sketch" numbered="true"><name>Non-Normative Example: HTTPS Direct-Agent JWS Binding Sketch</name>
<t>This appendix is non-normative.  It illustrates HTTPS/JWS-specific inputs that a future binding profile would need to fix; it does not define conformance by itself.</t>
<t>In this example, a binding profile uses an accepted TLS 1.3 channel instance, a compact JWS authority grant, a compact JWS session proof, a binding-profile-authorized TLS exporter label, a verifier nonce, and verifier-local interaction, task, and target contexts.</t>
<t>Illustrative wire elements:</t>
<ul><li><t>Agent-Authority-Grant: compact JWS authority grant;</t></li><li><t>Agent-Session-Proof: compact JWS session proof;</t></li><li><t>Agent-Attestation: binding-profile-defined attestation reference or result, when required;</t></li><li><t>HTTP request components and selected content digests, preferably using <xref target="RFC9421"/> and <xref target="RFC9530"/>, included in task_context; and</t></li><li><t>Problem Details <xref target="RFC9457"/> error responses with coarse diagnostic classes.</t></li></ul>
<t><xref target="verification-procedure"/> defines the normative verifier behavior and includes positive and negative acceptance cases.</t>
<t>Illustrative binding-specific input mapping:</t>
<ul><li><t>the authority grant is the exact compact JWS byte sequence carried by Agent-Authority-Grant;</t></li><li><t>the session proof is the compact JWS carried by Agent-Session-Proof;</t></li><li><t>protocol_id is an HTTPS Direct-Agent profile identifier selected by the binding profile;</t></li><li><t>endpoint_role and interaction_type selection follow verifier-local policy and authenticated profile fields;</t></li><li><t>task_context and target_context are constructed from HTTP Message Signatures components, Digest Fields, and verifier-local request state chosen by the binding profile;</t></li><li><t>the exporter label is selected by the binding profile, or by verifier-local policy from a set explicitly allowed by that binding profile; it is not peer-selected or request-selected;</t></li><li><t>binding_context_sha256 is computed from the profile context defined by the binding profile; and</t></li><li><t>attestation material is either absent or carried as a binding-profile-defined reference or result when local policy requires it.</t></li></ul>
<t>A conforming HTTPS binding profile defines stable HTTP field names, canonicalization rules, exporter-label rules, error formats, and replay-cache semantics.</t>
</section>
<section anchor="non-normative-context-encoding-test-vector" numbered="true"><name>Non-Normative Context-Encoding Test Vector</name>
<t>This appendix gives a deterministic context-encoding test vector.  It uses sample byte strings for TLS-related inputs; it is not a TLS exporter test vector and does not test any signature algorithm.  It is intended to help implementations test field ordering, length encoding, grant_hash treatment, and hash representation.</t>
<t>Inputs:</t>
<sourcecode><![CDATA[endpoint_role = "client-tls-endpoint"
interaction_type = "agent-to-tool"
protocol_id = "https-jws-direct-v2"
aud = "https://verifier.example/api"
grant_hash = 000102030405060708090a0b0c0d0e0f
             101112131415161718191a1b1c1d1e1f
task_context = "task:v2:transfer#123"
target_context = "tool:v1:payments-api/transfer"
verifier_nonce = a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
attempt_id = "attempt-123"
leaf_spki_input = 53504b49  ; sample byte string "SPKI";
                            ; not a DER SPKI
EKM_input = 202122232425262728292a2b2c2d2e2f
            303132333435363738393a3b3c3d3e3f
            ; sample exporter output; not generated by TLS]]></sourcecode>
<t>Line breaks in the following hex values are for display only.</t>
<t keepWithNext="true">Expected context hex:</t>
<sourcecode><![CDATA[53424149502d434f4e544558542d763200000d656e64706f696e745f726f6c65
00000013636c69656e742d746c732d656e64706f696e740010696e7465726163
74696f6e5f747970650000000d6167656e742d746f2d746f6f6c000b70726f74
6f636f6c5f69640000001368747470732d6a77732d6469726563742d76320003
6175640000001c68747470733a2f2f76657269666965722e6578616d706c652f
617069000a6772616e745f6861736800000020000102030405060708090a0b0c
0d0e0f101112131415161718191a1b1c1d1e1f000c7461736b5f636f6e746578
74000000147461736b3a76323a7472616e7366657223313233000e7461726765
745f636f6e746578740000001d746f6f6c3a76313a7061796d656e74732d6170
692f7472616e73666572000e76657269666965725f6e6f6e636500000010a0a1
a2a3a4a5a6a7a8a9aaabacadaeaf000a617474656d70745f69640000000b6174
74656d70742d313233]]></sourcecode>
<t>Expected hashes:</t>
<sourcecode><![CDATA[binding_context_sha256 =
  5e667cbd7d74e96d89a0cb346a68e4879da4d0335ae9a751fbb5ce9f8df1e1df
accepted_endpoint_spki_sha256 =
  0eabce0bf771c5036457802bab1dded04e5668664206847f7ce0375a476c7972
tls_exporter_sha256 =
  72dbb7336c76780023f83da4c355f2eeea85733b13d3477697917790c1229084
attestation_binder_sha256 =
  c266f31e94ec89b0f5a96b34f236aa6c463f6dfcf1d81976f2acbef2a9d77fc2]]></sourcecode>
</section>
</back>
</rfc>