Delegation proofs are bearer credentials until verified. HTTP exchanges
carrying them MUST use TLS. Servers SHOULD scrub Authorization field values,
Delegation-Proof field values, and body-carried Delegation credential values
from logs.¶
Deployments that use bearer, DPoP-bound, mutual-TLS-bound, or otherwise
sender-constrained credentials for identity or session authentication MUST
validate those credentials before treating the requester as authenticated.
Sender-constraining an identity or session token does not replace Delegation
nonce validation, request binding, Issuer trust, Budget bounds, or Verifier
policy. Conversely, a valid Delegation proof does not authorize use of an
unrelated OAuth access token, API key, or other execution credential.¶
Verifiers MUST validate every check in Section 5 before
processing the protected request. Missing keys, unavailable verification
dependencies, malformed CBOR, non-deterministic CBOR, expired
proofs, signature failures, nonce replay, unsupported versions, and
loss of nonce state all require request rejection.¶
The COSE or JOSE algorithm identifier is part of the signed protected
metadata. Verifiers MUST compare it against configured policy and MUST NOT let a challenge parameter or client preference downgrade the
algorithm.¶
The Budget authority profile uses post-quantum digital signatures for
delegated-authority proofs. It does not define post-quantum key
establishment, confidentiality migration, certificate migration, hybrid key
exchange, or a general post-quantum migration protocol. Implementers need to
evaluate those surrounding cryptographic migration questions separately; see
[RFC9958] for engineer-facing discussion of PQC migration impacts.
Deployments with long-lived confidentiality or quantum-transition requirements
need to make independent TLS and certificate migration decisions under the
applicable TLS profiles and deployment policy. This document does not choose
or recommend a TLS key-establishment profile. Support for a TLS
quantum-transition profile MUST NOT be represented as support for the Budget
cose-ml-dsa profile, and support for the Budget profile MUST NOT be
represented as post-quantum transport confidentiality.¶
Rail-keyed signatures are additive. They do not create authority without
a valid primary Issuer signature.¶
Key lifecycle is security-critical. Issuers SHOULD rotate signing keys
on a predictable schedule, publish revocation information through the same
trust channel used for key distribution, and avoid issuing attestations
whose lifetime extends beyond the authenticated lifetime of the signing
key. Verifiers MUST reject attestations signed by revoked, expired, or
unexpected keys.¶
Large post-quantum signatures can create denial-of-service pressure on
HTTP parsers, HTTP field-section processing, and COSE libraries. ML-DSA-backed
COSE envelopes are commonly too large to assume safe carriage through
general-purpose HTTP fields after base64url expansion. This is consistent
with the protocol-redesign and constrained-network concerns discussed in
[RFC9958]. Implementations MUST apply size limits before decoding, MUST
bound CBOR nesting depth and map sizes, and SHOULD reject duplicate or unknown
critical protected parameters before expensive signature verification.
Verifiers that fetch issuer key sets or discovery metadata MUST bound response
sizes, redirect behavior, parsing depth, and cache lifetimes. They MUST NOT
fetch arbitrary key URLs supplied inside an untrusted proof.¶
Verifier nonce state can itself become a resource-exhaustion target.
Verifiers MUST bound the number of outstanding nonces per issuer,
protection space, and client identity signal available to the deployment,
and MUST expire unused nonces no later than their challenge max-age.
When nonce state reaches a configured limit, the Verifier MUST reject requests
that depend on an untracked nonce or shed unauthenticated challenge issuance
rather than accept a request with an untracked nonce.
At high scale, deployments SHOULD use self-authenticating nonces as described
in Section 4 so challenge issuance does not require allocating
distributed state for every unauthenticated request. Such constructions reduce
outstanding-challenge state but do not remove the need for bounded
accepted-nonce replay tracking when at-most-once acceptance is required.¶
The Budget authority profile describes channel-binding extension semantics for
deployments that need binding to a particular TLS session or exporter value.
Specific channel-binding types are not mandatory-to-implement in this revision
and need profiling before they can be assumed interoperable. In the absence of
channel binding, short lifetimes, single-use nonces, request binding, and
replay-cache enforcement are mandatory replay controls.¶