<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 4.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc ipr="trust200902" docName="draft-valverde-oauth-veil-00" category="info" submissionType="IETF" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="VEIL">VEIL: Verified Ephemeral Identity Layer for OAuth 2.1</title>

    <author initials="G." surname="Valverde" fullname="Gustavo Valverde">
      <organization>Zentity</organization>
      <address>
        <postal>
          <country>Portugal</country>
        </postal>
        <email>g.valverde02@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="April" day="18"/>

    <area>Security</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>OAuth</keyword> <keyword>OpenID Connect</keyword> <keyword>privacy</keyword> <keyword>pairwise</keyword> <keyword>ephemeral</keyword> <keyword>identity verification</keyword>

    <abstract>


<?line 77?>

<t>VEIL (Verified Ephemeral Identity Layer) is a security profile of OAuth 2.1
for privacy-preserving identity verification. It separates claims into two
tracks: proof claims (boolean verification results, compliance flags,
assurance levels) travel through standard token claims, while identity
claims (name, date of birth, address, nationality) travel only through an
ephemeral, single-consume channel that keeps personally identifiable
information off long-lived tokens. Subject identifiers are pairwise by
default. Consent records are HMAC-protected. Step-up authentication scales
with operation sensitivity. VEIL is the base profile for domain-specific
extensions.</t>



    </abstract>



  </front>

  <middle>


<?line 90?>

<section anchor="introduction"><name>Introduction</name>

<t>Identity verification produces two kinds of outputs: attestation (boolean
results, compliance scores, assurance tiers) and identity data (name, date
of birth, address, document details). OpenID Connect Core 1.0 <xref target="OIDC-Core"/>
delivers both through the same channel, with the same lifetime and the same
correlation properties. VEIL separates them: attestation is carried in
standard token claims, while identity data is delivered through an
ephemeral, single-consume channel bound to a user-initiated disclosure
intent.</t>

<t>The profile composes and constrains the following specifications:</t>

<texttable>
      <ttcol align='left'>Concern</ttcol>
      <ttcol align='left'>Specifications</ttcol>
      <c>Authorization Framework</c>
      <c>OAuth 2.1 <xref target="I-D.ietf-oauth-v2-1"/></c>
      <c>Proof Key</c>
      <c>PKCE <xref target="RFC7636"/>, mandatory</c>
      <c>Pushed Authorization</c>
      <c>PAR <xref target="RFC9126"/>, mandatory</c>
      <c>Sender Constraining</c>
      <c>DPoP <xref target="RFC9449"/></c>
      <c>Identity Layer</c>
      <c>OpenID Connect Core 1.0 <xref target="OIDC-Core"/></c>
      <c>Structured Intent</c>
      <c>Rich Authorization Requests <xref target="RFC9396"/></c>
      <c>Token Exchange</c>
      <c><xref target="RFC8693"/></c>
      <c>Token Introspection</c>
      <c><xref target="RFC7662"/></c>
      <c>Back-Channel Logout</c>
      <c><xref target="OIDC-BCL"/></c>
</texttable>

<t>This document specifies: a two-track claim model (<xref target="claim-separation"/>), an
ephemeral identity delivery channel (<xref target="transient-disclosure"/>), pairwise
subject identifiers as the default (<xref target="subject-unlinkability"/>), an abstract
interface for assurance level derivation (<xref target="tiered-verification"/>),
HMAC-verified consent integrity (<xref target="consent-integrity"/>), and an extension
profile architecture for domain-specific profiles (<xref target="compositional-extension"/>).</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<section anchor="notational-conventions"><name>Notational Conventions</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>

</section>
<section anchor="versioning"><name>Versioning</name>

<t>VEIL uses <spanx style="verb">MAJOR.MINOR</spanx> versioning, with <spanx style="verb">-draft</spanx> appended for
pre-release revisions. Implementations MUST reject
configurations or discovery documents with an unrecognized major version.
Implementations SHOULD accept documents with a higher minor version than
expected and ignore unrecognized fields, preserving forward compatibility.</t>

</section>
<section anchor="definitions"><name>Definitions</name>

<dl>
  <dt>Assurance Level:</dt>
  <dd>
    <t>A tiered classification of how thoroughly a user's identity has been
verified. The profile defines the interface (inputs and outputs) but not
the specific checks or tier definitions.</t>
  </dd>
  <dt>Ephemeral Store:</dt>
  <dd>
    <t>An in-memory, TTL-bounded storage mechanism for identity claims with
single-consume semantics. PII staged in the ephemeral store is consumed
on first retrieval and automatically expires if unclaimed.</t>
  </dd>
  <dt>Identity Claim:</dt>
  <dd>
    <t>A claim that contains personally identifiable information (name, date of
birth, address, nationality, document details). Identity claims require
explicit user action to release and flow only through the ephemeral
store.</t>
  </dd>
  <dt>Proof Claim:</dt>
  <dd>
    <t>A claim that conveys a boolean verification result, assurance level, or
compliance flag without revealing the underlying PII. Proof claims flow
through standard token claims and the userinfo endpoint.</t>
  </dd>
  <dt>Proof Scope:</dt>
  <dd>
    <t>An OAuth scope that authorizes the release of proof claims. Proof scopes
MUST NOT trigger identity claim delivery.</t>
  </dd>
  <dt>Identity Scope:</dt>
  <dd>
    <t>An OAuth scope that authorizes the release of identity claims. Identity
scopes require user action to unlock PII and flow through the ephemeral
delivery channel.</t>
  </dd>
  <dt>Sector Identifier:</dt>
  <dd>
    <t>A stable client-bound identifier used as input to pairwise subject
derivation. In OIDC this is the registered sector identifier for the
client; absent an explicit sector identifier, the chosen value SHOULD
remain stable across redirect URI reordering.</t>
  </dd>
  <dt>Step-Up Authentication:</dt>
  <dd>
    <t>A flow where the authorization server enforces a higher assurance
requirement (<spanx style="verb">acr_values</spanx>) or session freshness (<spanx style="verb">max_age</spanx>) than the
user's current session provides, triggering re-verification or
re-authentication.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="transport-constraints"><name>Transport Constraints</name>

<t>The following OAuth 2.1 options are mandatory under this profile.
Requirements that OAuth 2.1 states as SHOULD or RECOMMENDED are restated
here as MUST.</t>

<section anchor="authorization-server-requirements"><name>Authorization Server Requirements</name>

<t>The authorization server MUST:</t>

<t><list style="symbols">
  <t>Support OAuth 2.1 <xref target="I-D.ietf-oauth-v2-1"/> authorization code flow with PKCE.</t>
  <t>Require Pushed Authorization Requests (PAR, <xref target="RFC9126"/>) for all
authorization requests.</t>
  <t>Support DPoP <xref target="RFC9449"/> for sender-constrained tokens.</t>
  <t>Issue access tokens signed with EdDSA (Ed25519) for compact signatures.</t>
  <t>Support <spanx style="verb">id_token_signed_response_alg</spanx> client metadata for per-client
signing algorithm selection.</t>
</list></t>

<t>The authorization server SHOULD:</t>

<t><list style="symbols">
  <t>Support multiple signing algorithms for id_tokens (RS256, ES256, EdDSA,
ML-DSA-65).</t>
  <t>Support Rich Authorization Requests <xref target="RFC9396"/> for structured intent.</t>
  <t>Support Token Exchange <xref target="RFC8693"/> for audience rebinding and scope
attenuation.</t>
  <t>Support Back-Channel Logout <xref target="OIDC-BCL"/> for federated session
termination.</t>
</list></t>

</section>
<section anchor="client-requirements"><name>Client Requirements</name>

<t>Clients MUST:</t>

<t><list style="symbols">
  <t>Use PKCE with <spanx style="verb">S256</spanx> challenge method.</t>
  <t>Submit authorization parameters via PAR before initiating the
authorization flow.</t>
  <t>Include the <spanx style="verb">resource</spanx> parameter <xref target="RFC8707"/> on PAR requests.</t>
  <t>Support DPoP for sender-constrained token usage.</t>
</list></t>

<t>Clients MUST NOT:</t>

<t><list style="symbols">
  <t>Use the implicit grant.</t>
  <t>Use the resource owner password credentials grant.</t>
</list></t>

</section>
</section>
<section anchor="subject-unlinkability"><name>Subject Unlinkability</name>

<t>Under this profile, pairwise subject identifiers are the default. Unless a
client explicitly registers <spanx style="verb">subject_type: "public"</spanx>, each relying party
receives a distinct pseudonym for the same user, preventing cross-RP
correlation through the subject identifier.</t>

<section anchor="default-posture"><name>Default Posture</name>

<t>All client registrations MUST default to <spanx style="verb">subject_type: "pairwise"</spanx>.
Clients that require globally stable subject identifiers explicitly opt in
via <spanx style="verb">subject_type: "public"</spanx> at registration.</t>

</section>
<section anchor="derivation"><name>Derivation</name>

<t>Pairwise subject identifiers are derived as:</t>

<figure><artwork><![CDATA[
sub = HMAC-SHA-256(PAIRWISE_SECRET, sector + "." + userId)
]]></artwork></figure>

<t>Where:</t>

<t><list style="symbols">
  <t><spanx style="verb">PAIRWISE_SECRET</spanx> is a server-side secret of at least 32 bytes.</t>
  <t><spanx style="verb">sector</spanx> is the client's stable sector identifier. If the authorization
server supports OIDC <spanx style="verb">sector_identifier_uri</spanx>, it MUST use that registered
sector identifier. Otherwise it MUST derive a stable client-bound value
that does not change when redirect URI order changes.</t>
  <t><spanx style="verb">userId</spanx> is the internal user identifier.</t>
</list></t>

<t>Two clients with different sector identifiers receiving tokens for the same
user see different <spanx style="verb">sub</spanx> values. Neither client can derive the other's
<spanx style="verb">sub</spanx> or determine that both values refer to the same user.</t>

</section>
<section anchor="token-exchange"><name>Token Exchange</name>

<t>When performing Token Exchange <xref target="RFC8693"/> with an <spanx style="verb">audience</spanx> parameter,
the authorization server MUST re-derive the pairwise <spanx style="verb">sub</spanx> for the target
audience's sector identifier. The exchanged token's <spanx style="verb">sub</spanx> MUST differ from
the subject token's <spanx style="verb">sub</spanx> unless both clients share the same sector.</t>

</section>
<section anchor="extension-point"><name>Extension Point</name>

<t>Extension profiles MAY apply pairwise derivation to additional token
claims. PACT <xref target="I-D.valverde-oauth-pact"/> extends pairwise derivation to
the <spanx style="verb">act.sub</spanx> claim for agent session identifiers.</t>

</section>
</section>
<section anchor="claim-separation"><name>Claim Separation</name>

<t>VEIL divides claims into two tracks based on whether they contain
personally identifiable information. The separation is enforced at three
independent layers: scope definitions (<xref target="scope-families"/>), consent
decisions (<xref target="delivery-channels"/>), and delivery mechanisms
(<xref target="transient-disclosure"/>).</t>

<section anchor="the-two-tracks"><name>The Two Tracks</name>

<t><strong>Proof claims</strong> convey verification results without PII. Examples:
<spanx style="verb">age_verification: true</spanx>, <spanx style="verb">nationality_verified: true</spanx>,
<spanx style="verb">verification_level: "full"</spanx>, <spanx style="verb">sybil_resistant: true</spanx>. Proof claims are
derived from cryptographic artifacts (ZK proofs, signed claims, encrypted
attributes) rather than raw identity data.</t>

<t><strong>Identity claims</strong> contain PII. Examples: <spanx style="verb">name: "Jane Doe"</spanx>,
<spanx style="verb">date_of_birth: "1990-05-15"</spanx>, <spanx style="verb">address: {...}</spanx>, <spanx style="verb">nationality: "FR"</spanx>.
Identity claims require explicit user action to unlock and flow through
the ephemeral delivery channel (<xref target="transient-disclosure"/>).</t>

<t>The distinction between tracks is not what the claim describes but what it
reveals. An age verification proof and a date of birth both describe the
user's age, but the proof reveals only a boolean while the date reveals
the value itself.</t>

</section>
<section anchor="scope-families"><name>Scope Families</name>

<t>The authorization server MUST define two disjoint scope families:</t>

<t><strong>Proof scopes</strong> (e.g., <spanx style="verb">proof:age</spanx>, <spanx style="verb">proof:nationality</spanx>,
<spanx style="verb">proof:verification</spanx>, <spanx style="verb">proof:compliance</spanx>):</t>

<t><list style="symbols">
  <t>Authorize the release of proof claims only.</t>
  <t>MUST NOT trigger identity claim delivery.</t>
  <t>Do not require vault unlock or any user action beyond initial consent.</t>
  <t>May be auto-approved on subsequent requests if consent already exists.</t>
</list></t>

<t><strong>Identity scopes</strong> (e.g., <spanx style="verb">identity.name</spanx>, <spanx style="verb">identity.address</spanx>,
<spanx style="verb">identity.nationality</spanx>, <spanx style="verb">identity.dob</spanx>):</t>

<t><list style="symbols">
  <t>Authorize the release of identity claims.</t>
  <t>MUST trigger the ephemeral delivery channel (<xref target="transient-disclosure"/>).</t>
  <t>Require explicit user action to unlock PII for each authorization.</t>
  <t>MUST NOT be persisted in durable consent records (ensuring the unlock
prompt reappears on each request).</t>
</list></t>

<t>An umbrella proof scope (e.g., <spanx style="verb">proof:identity</spanx>) MAY expand to all proof
sub-scopes at consent time, allowing the user to opt in per sub-scope.</t>

</section>
<section anchor="delivery-channels"><name>Delivery Channels</name>

<t>The two tracks produce different delivery behavior at each OAuth endpoint:</t>

<dl>
  <dt>In id_tokens:</dt>
  <dd>
    <t>Proof claims MAY be embedded directly. Identity claims MUST NOT be
embedded in id_tokens. Identity scopes unlock PII only through the
ephemeral delivery channel and userinfo consumption path described in
<xref target="transient-disclosure"/>.</t>
  </dd>
  <dt>In access tokens:</dt>
  <dd>
    <t>Access tokens ordinarily carry only structural claims (<spanx style="verb">sub</spanx>, <spanx style="verb">scope</spanx>,
<spanx style="verb">aud</spanx>, <spanx style="verb">cnf</spanx>, and extension-defined claims like <spanx style="verb">act</spanx>). Proof claims are
not embedded there except where a profile explicitly defines an
access-token-only proof artifact. VEIL defines one such exception in
<xref target="sybil-nullifiers"/>: <spanx style="verb">proof:sybil</spanx> yields a per-RP <spanx style="verb">sybil_nullifier</spanx> in
access tokens only. Identity claims MUST NOT be embedded in access
tokens.</t>
  </dd>
  <dt>Via userinfo:</dt>
  <dd>
    <t>Both proof claims and identity claims are delivered. Proof claims are
resolved from the user's verification state. Identity claims are
consumed from the ephemeral store (single-consume; the entry is deleted
after retrieval).</t>
  </dd>
</dl>

</section>
<section anchor="sybil-nullifiers"><name>Sybil Nullifiers</name>

<t>The profile defines an optional <spanx style="verb">proof:sybil</spanx> scope that produces a per-RP
unlinkable nullifier:</t>

<figure><artwork><![CDATA[
sybil_nullifier = HMAC-SHA-256(
    DEDUP_HMAC_SECRET,
    dedupKey + ":" + clientId
)
]]></artwork></figure>

<t>The same person receives the same nullifier at one RP but different
nullifiers at different RPs. This enables per-human rate limiting and
duplicate detection without cross-RP identity linkage.</t>

</section>
</section>
<section anchor="transient-disclosure"><name>Transient Disclosure</name>

<t>Identity claims (PII) reach the relying party through an in-memory store
with single-consume semantics, bound to a user-initiated intent flow. The
profile mandates the delivery semantics; the unlock mechanism (passkey
PRF, password-derived key, wallet signature) is implementation-specific.</t>

<section anchor="single-consume-properties"><name>Single-Consume Properties</name>

<t>When identity scopes are approved, the authorization server stages PII in
an in-memory store with the following properties:</t>

<texttable>
      <ttcol align='left'>Property</ttcol>
      <ttcol align='left'>Requirement</ttcol>
      <c>Storage</c>
      <c>In-memory only; MUST NOT be written to disk or database.</c>
      <c>Key</c>
      <c>Implementation-defined. It MUST either include a request-specific handle or otherwise guarantee that only one live staged entry exists per <spanx style="verb">userId:clientId</spanx>.</c>
      <c>TTL</c>
      <c>Configurable; SHOULD default to 5 minutes for interactive flows.</c>
      <c>Consumption</c>
      <c>Single-consume; the entry MUST be deleted on first retrieval.</c>
      <c>Concurrency</c>
      <c>If the key does not include a request-specific handle, concurrent staging for the same <spanx style="verb">userId:clientId</spanx> MUST be rejected until the earlier entry is consumed, cleared, or expires.</c>
      <c>Replay protection</c>
      <c>Intent JTIs MUST be persisted in durable storage (not memory-only) and checked to prevent replay of unlock events. Persistence MUST use insert-or-ignore semantics to handle concurrent first-use races.</c>
      <c>Rate limiting</c>
      <c>Intent and stage endpoints MUST be rate-limited per user identity to prevent brute-force unlock attempts and ephemeral store flooding.</c>
      <c>Ambiguity safety</c>
      <c>If multiple entries exist for the same <spanx style="verb">userId</spanx> when the consuming endpoint lacks <spanx style="verb">clientId</spanx> context, the server MUST return no claims rather than risk cross-client PII misdelivery.</c>
</texttable>

</section>
<section anchor="intent-flow"><name>Intent Flow</name>

<t>The staging process follows an intent-then-stage pattern to ensure that
PII staging is bound to a specific user action and cannot be replayed or
triggered by the relying party alone:</t>

<t><list style="numbers" type="1">
  <t><strong>User action.</strong> The user performs a credential-specific unlock action
(the mechanism is implementation-specific).</t>
  <t><strong>Intent token.</strong> The authorization server issues a signed intent token
(HMAC-SHA-256, short TTL) carrying a scope hash and, for backchannel
flows, the authorization request identifier that binds the unlock to a
specific consent request.</t>
  <t><strong>Stage.</strong> The client presents the intent token. The server validates
it, filters the user's identity data by the approved scopes, and stages
the filtered claims in the ephemeral store.</t>
  <t><strong>Consume.</strong> The relying party calls the userinfo endpoint. The server
retrieves and deletes the staged entry in a single atomic operation.</t>
</list></t>

</section>
<section anchor="exclusions"><name>Exclusions</name>

<t>The ephemeral store MUST NOT contain:</t>

<t><list style="symbols">
  <t>Raw biometric data (images, embeddings, liveness scores).</t>
  <t>Document images.</t>
  <t>Cryptographic key material.</t>
  <t>Internal identifiers that could be used to correlate across RPs.</t>
</list></t>

<t>Only the identity claims authorized by the approved identity scopes are
staged.</t>

</section>
</section>
<section anchor="tiered-verification"><name>Tiered Verification</name>

<t>VEIL defines the interface for assurance level derivation (inputs,
outputs, properties) but leaves the verification pipeline, check
definitions, and tier labels to each implementation.</t>

<section anchor="abstract-interface"><name>Abstract Interface</name>

<t>Input: A set of verification artifacts. The profile does not mandate the
artifact types, but common examples include zero-knowledge proof
verification results, signed claims from verification processes,
encrypted attribute presence flags, biometric match results, and sybil
resistance indicators.</t>

<t>Output: An assurance result containing:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">verified</spanx></c>
      <c>boolean</c>
      <c>Whether the user meets the minimum verification threshold.</c>
      <c><spanx style="verb">level</spanx></c>
      <c>string</c>
      <c>Tiered assurance level (implementation-defined labels).</c>
      <c><spanx style="verb">numericLevel</spanx></c>
      <c>integer</c>
      <c>Numeric ordering of tiers for comparison.</c>
      <c><spanx style="verb">checks</spanx></c>
      <c>object</c>
      <c>Individual boolean check results (implementation-defined).</c>
</texttable>

</section>
<section anchor="derivation-requirements"><name>Derivation Requirements</name>

<t>The derivation function MUST be:</t>

<t><list style="symbols">
  <t>Pure. No database access, no side effects. All inputs are passed
explicitly.</t>
  <t>Deterministic. The same inputs always produce the same output.</t>
  <t>Monotonic in tier ordering. A higher numeric level MUST satisfy any
requirement for a lower level.</t>
</list></t>

<t>The authorization server MUST expose the assurance level through:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">acr</spanx> claim in id_tokens (mapping implementation tiers to URN
identifiers).</t>
  <t>Proof claims filtered by granted proof scopes.</t>
</list></t>

</section>
<section anchor="step-up"><name>Step-Up Enforcement</name>

<t>Step-up authentication is <em>spatial</em> (trust depends on which operation is
attempted) rather than <em>temporal</em> (trust deepening over time). Two
enforcement points apply:</t>

<t>When a client includes <spanx style="verb">acr_values</spanx> in an authorization request, the
authorization server MUST verify that the user's current assurance level
satisfies the requested tier. If it does not, the server MUST return an
explicit step-up error rather than silently downgrading. In browser-based
authorization flows, the error SHOULD be surfaced as
<spanx style="verb">interaction_required</spanx>; extension profiles MAY define an equivalent
continuation-oriented error if they also provide a resumable step-up
path.</t>

<t>When a client includes <spanx style="verb">max_age</spanx>, the authorization server MUST verify
that the user's session is not older than the specified value. If it is,
the server MUST require re-authentication. In PAR-based flows, the PAR
record SHOULD be preserved with an extended TTL to cover the
re-authentication round-trip, so the authorization flow can resume after
login. When <spanx style="verb">acr_values</spanx> cannot be satisfied in a browser-based PAR flow,
the PAR record MUST be deleted and the server MUST redirect with the same
step-up error contract used for other authorization flows (for example,
<spanx style="verb">interaction_required</spanx>).</t>

<t>ACR identifiers are deployment-local. Consistent with OIDC Core 1.0
Section 2 and established IETF practice (e.g.,
<spanx style="verb">urn:mace:incommon:iap:silver</spanx>), a conforming authorization server MUST
document the ACR URNs it issues and their tier semantics in its discovery
metadata (<spanx style="verb">acr_values_supported</spanx>). VEIL does not register specific ACR
values and does not reserve a VEIL-specific ACR namespace;
interoperability is achieved by publishing the local URNs rather than by
centralized registration.</t>

<t>Extension profiles MAY define additional step-up enforcement points.</t>

</section>
</section>
<section anchor="signing-agility"><name>Signing Agility</name>

<section anchor="algorithm-selection"><name>Algorithm Selection</name>

<t>The authorization server MUST support at least RS256 for id_tokens (OIDC
Discovery 1.0 Section 3 mandatory). The authorization server SHOULD
support ES256, EdDSA, and ML-DSA-65.</t>

<t>Access tokens MUST be signed with EdDSA (compact 64-byte signatures for
Bearer headers).</t>

<t>Clients MAY declare a preferred id_token signing algorithm via
<spanx style="verb">id_token_signed_response_alg</spanx> in their registration metadata. The
authorization server MUST honor the declared preference if it supports
the algorithm.</t>

</section>
<section anchor="key-management"><name>Key Management</name>

<t>Signing keys MUST be encrypted at rest (SHOULD use AES-256-GCM with a
dedicated key encryption key).</t>

<t>Key rotation MUST support an overlap window during which both the
retiring and replacement keys are served by the JWKS endpoint. The
retiring key carries an <spanx style="verb">expiresAt</spanx> timestamp; after the overlap window,
it is removed.</t>

</section>
</section>
<section anchor="consent-integrity"><name>Tamper-Evident Consent</name>

<t>An attacker who can modify stored consent scopes can bypass both the
two-track model and ephemeral delivery. Consent records are protected by
an HMAC (<xref target="scope-verification"/>), and identity scopes are excluded from
durable consent storage (<xref target="identity-scope-stripping"/>).</t>

<section anchor="scope-verification"><name>Scope Verification</name>

<t>The authorization server MUST verify the integrity of stored consent
records on every authorization request. Consent records MUST be protected
by an HMAC computed over the consent context:</t>

<figure><artwork><![CDATA[
scope_hmac = HMAC-SHA-256(SECRET, length_prefix(context) ||
  length_prefix(userId) || length_prefix(clientId) ||
  length_prefix(referenceId) || length_prefix(sorted_scopes))
]]></artwork></figure>

<t>Length-prefixed encoding prevents concatenation collisions. The HMAC key
MUST be derived from the server's base secret via a KDF (e.g., HKDF
<xref target="RFC5869"/>) with a domain-separating <spanx style="verb">info</spanx> parameter, not used as a raw
key. This separation ensures that the consent integrity key and the
session authentication key are cryptographically independent even when
derived from the same root secret.</t>

</section>
<section anchor="tamper-response"><name>Tamper Response</name>

<t>Before processing an authorization request against stored consent, the
server MUST recompute the HMAC and compare it to the stored value. If
they differ, the server MUST delete the consent record and require
re-consent. This prevents three attack vectors: direct database scope
escalation, consent replay across clients, and consent replay across
users.</t>

</section>
<section anchor="identity-scope-stripping"><name>Identity Scope Stripping</name>

<t>Identity scopes MUST NOT be persisted in durable consent records. The
full scope set (including identity scopes) is written for authorization
code derivation, then identity scopes are stripped immediately so that
the consent page reappears on subsequent requests. This ensures that PII
delivery requires a fresh user decision each time.</t>

</section>
</section>
<section anchor="federated-session-termination"><name>Federated Session Termination</name>

<section anchor="back-channel-logout"><name>Back-Channel Logout</name>

<t>The authorization server MUST support OIDC Back-Channel Logout
<xref target="OIDC-BCL"/> for federated session termination. On user sign-out:</t>

<t><list style="numbers" type="1">
  <t>Query all registered clients with a <spanx style="verb">backchannel_logout_uri</spanx>.</t>
  <t>For each: build a logout token JWT with the client's pairwise <spanx style="verb">sub</spanx>
and <spanx style="verb">sid</spanx> (if <spanx style="verb">backchannel_logout_session_required</spanx>).</t>
  <t>POST the logout token to the client's endpoint.</t>
  <t>Retry with exponential backoff on transient failures.</t>
</list></t>

</section>
<section anchor="extension-coordination"><name>Extension Coordination</name>

<t>Extension profiles MAY define additional cleanup actions triggered by
logout.</t>

</section>
</section>
<section anchor="machine-readable-surfaces"><name>Machine-Readable Surfaces</name>

<section anchor="oidc-discovery-extensions"><name>OIDC Discovery Extensions</name>

<t>The authorization server's OpenID Provider Configuration
(<spanx style="verb">/.well-known/openid-configuration</spanx>) MUST include:</t>

<t><list style="symbols">
  <t><spanx style="verb">subject_types_supported: ["pairwise", "public"]</spanx> with pairwise listed
first.</t>
  <t><spanx style="verb">acr_values_supported</spanx> listing all supported assurance tier URNs.</t>
  <t><spanx style="verb">scopes_supported</spanx> listing all proof and identity scopes.</t>
  <t><spanx style="verb">backchannel_logout_supported: true</spanx>.</t>
  <t><spanx style="verb">backchannel_logout_session_supported: true</spanx>.</t>
  <t><spanx style="verb">require_pushed_authorization_requests: true</spanx>.</t>
  <t><spanx style="verb">dpop_signing_alg_values_supported</spanx>.</t>
  <t><spanx style="verb">id_token_signing_alg_values_supported</spanx> (at minimum <spanx style="verb">["RS256"]</spanx>).</t>
</list></t>

</section>
<section anchor="extension-discovery"><name>Extension Discovery</name>

<t>Extension profiles define their own discovery documents at dedicated
well-known paths. The OIDC Discovery document SHOULD NOT be overloaded
with extension-specific metadata.</t>

</section>
</section>
<section anchor="compositional-extension"><name>Compositional Extension</name>

<t>Domain-specific profiles (agent delegation, verifiable credentials,
regulatory compliance) extend VEIL through the mechanism defined below.
Extensions MUST NOT modify VEIL itself.</t>

<section anchor="architecture"><name>Architecture</name>

<t>Each extension profile:</t>

<t><list style="symbols">
  <t>References VEIL as its base and inherits all VEIL requirements.</t>
  <t>Adds domain-specific capabilities without modifying VEIL's core
requirements.</t>
  <t>Defines its own discovery document at a dedicated well-known path.</t>
  <t>Specifies additional conformance requirements for its domain.</t>
</list></t>

</section>
<section anchor="extension-boundaries"><name>Extension Boundaries</name>

<t>Extension profiles MUST NOT:</t>

<t><list style="symbols">
  <t>Weaken pairwise subject requirements (e.g., defaulting to public
subjects).</t>
  <t>Bypass the ephemeral delivery channel for identity claims.</t>
  <t>Embed identity claims in access tokens or extension-specific token
types.</t>
  <t>Modify the consent integrity mechanism.</t>
</list></t>

<t>Extension profiles MAY:</t>

<t><list style="symbols">
  <t>Define additional pairwise derivations.</t>
  <t>Define additional step-up enforcement points.</t>
  <t>Define additional token types via Token Exchange <xref target="RFC8693"/>.</t>
  <t>Define additional consent routing logic.</t>
  <t>Extend the ephemeral store TTL for their specific flow patterns.</t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Implementations MUST satisfy the security considerations of each composed
specification: OAuth 2.1 <xref target="I-D.ietf-oauth-v2-1"/>, PKCE <xref target="RFC7636"/>, PAR
<xref target="RFC9126"/>, DPoP <xref target="RFC9449"/>, RAR <xref target="RFC9396"/>, Token Exchange
<xref target="RFC8693"/>, OIDC Core 1.0 <xref target="OIDC-Core"/>, and OIDC Back-Channel Logout
1.0 <xref target="OIDC-BCL"/>.</t>

<section anchor="pii-exposure-window"><name>PII Exposure Window</name>

<t>Identity claims exist in cleartext only during the ephemeral delivery
window (between staging and consumption). Outside that window, identity
data is either encrypted (credential-wrapped secrets, FHE ciphertexts) or
absent.</t>

<t>Authorization servers MUST NOT log identity claim values. Authorization
servers MUST NOT cache identity claims beyond the ephemeral store TTL.</t>

</section>
<section anchor="correlation-resistance"><name>Correlation Resistance</name>

<t>Pairwise subject identifiers prevent cross-RP user correlation under the
standard OIDC threat model. However, timing correlation (two RPs
comparing token issuance timestamps) and metadata correlation (user
agent, IP address) remain possible. The authorization server SHOULD
minimize metadata leakage in token responses and SHOULD NOT include
client-identifying information in error responses visible to other
clients.</t>

</section>
<section anchor="sender-constraining"><name>Sender Constraining</name>

<t>DPoP sender-constraining prevents token theft and replay. When combined
with pairwise subjects, a stolen token is useless to a different RP
(wrong <spanx style="verb">aud</spanx>) and useless to a different client (wrong <spanx style="verb">cnf.jkt</spanx>).</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>Implementations MUST satisfy the privacy considerations of each composed
specification. Participants are the authorization server (AS), the
relying party (RP), and the end user. Data categories are proof claims
(<xref target="claim-separation"/>), pairwise subjects (<xref target="subject-unlinkability"/>),
sybil nullifiers (<xref target="sybil-nullifiers"/>), and identity claims (PII), which
flow only through the ephemeral channel (<xref target="transient-disclosure"/>).
Cross-RP correlation through subject identifiers requires explicit opt-in
at registration (<spanx style="verb">subject_type: "public"</spanx>); identity disclosure requires
explicit opt-in at authorization (identity scopes, per-scope user
consent).</t>

<section anchor="double-anonymity"><name>Double Anonymity</name>

<t>The profile supports a double-anonymity mode where both sides of the
identity verification relationship are protected. The relying party
cannot identify the user or recognize returning users (pairwise subjects,
no email scope), and the authorization server cannot reconstruct which
services the user visits (consent records do not accumulate when
identity scopes are stripped).</t>

</section>
<section anchor="sybil-nullifier-privacy"><name>Sybil Nullifier Privacy</name>

<t>The <spanx style="verb">sybil_nullifier</spanx> (<xref target="sybil-nullifiers"/>) is derived per-RP. Two RPs
receiving nullifiers for the same user cannot determine that fact. The
nullifier enables per-human uniqueness enforcement without cross-RP
identity linkage.</t>

</section>
<section anchor="session-metadata-nullification"><name>Session Metadata Nullification</name>

<t>The authorization server MUST NOT persist the user's IP address or user
agent in session records. If the session layer collects these values (as
most frameworks do by default), they MUST be nullified before storage.
Without this, two RPs that obtain session metadata (via breach, legal
compulsion, or insider access) can correlate users by matching IP + user
agent + timestamp patterns.</t>

</section>
<section anchor="provider-fingerprint-removal"><name>Provider Fingerprint Removal</name>

<t>Four concrete signals can fingerprint the authorization server and enable
cross-RP provider correlation:</t>

<t><list style="numbers" type="1">
  <t>Provider identifiers in proof claims. Proof claim payloads MUST NOT
include provider-identifying fields (e.g., <spanx style="verb">issuer_id</spanx>). Provider
identity is an internal audit concern.</t>
  <t>Trust framework naming. The trust framework identifier in identity
assurance claims SHOULD identify the regulatory framework (e.g.,
<spanx style="verb">eidas</spanx>), not the provider name.</t>
  <t>Credential type identifiers. Verifiable credential type identifiers
(VCT) MUST use provider-neutral URNs (e.g.,
<spanx style="verb">urn:credential:identity-verification:v1</spanx>) rather than provider-domain
URLs.</t>
  <t>Structural fingerprinting. SD-JWT credentials SHOULD include decoy
disclosures to prevent fingerprinting via disclosed claim set
analysis.</t>
</list></t>

</section>
<section anchor="claim-specificity"><name>Claim Specificity</name>

<t>Proof claims are derived from cryptographic artifacts, not from raw PII.
The authorization server SHOULD minimize the specificity of proof claims.
For example, <spanx style="verb">nationality_group: "EU"</spanx> is preferable to <spanx style="verb">nationality:
"FR"</spanx> when the relying party's requirement is jurisdiction membership
rather than specific nationality.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no immediate IANA actions that require new registry
creation. It relies on identifiers and registries that are either already
allocated or that are delegated to extension profiles.</t>

<section anchor="oauth-parameter-registries"><name>OAuth Parameter Registries</name>

<t>VEIL does not register new OAuth parameters, grant types, token type
URIs, client metadata fields, or authorization server metadata fields. It
narrows existing OAuth 2.1 and OIDC Core 1.0 parameters to a mandatory
subset (see <xref target="transport-constraints"/>). Extension profiles that build on
VEIL are responsible for registering any new OAuth identifiers they
introduce.</t>

</section>
<section anchor="well-known-uri-registrations"><name>Well-Known URI Registrations</name>

<t>VEIL relies on the existing well-known URI registrations
<spanx style="verb">openid-configuration</spanx> (OIDC Discovery 1.0) and
<spanx style="verb">oauth-authorization-server</spanx> <xref target="RFC8414"/>. It does not register a new
well-known URI. Extension profiles MAY register their own well-known URI
suffixes per <xref target="RFC8615"/>.</t>

</section>
<section anchor="assurance-certification-values-acr"><name>Assurance Certification Values (<spanx style="verb">acr</spanx>)</name>

<t>ACR URNs listed in <spanx style="verb">acr_values_supported</spanx> are deployment-local,
consistent with OIDC Core 1.0 Section 2 and established IETF practice.
VEIL does not register a VEIL-specific ACR namespace and does not request
a registry; each authorization server documents its own ACR URNs and
their tier mapping in its discovery metadata (see <xref target="step-up"/>).</t>

</section>
<section anchor="verifiable-credential-type-identifiers"><name>Verifiable Credential Type Identifiers</name>

<t>Where a deployment emits verifiable credentials, credential type
identifiers (VCT) MUST be provider-neutral URNs (see
<xref target="provider-fingerprint-removal"/>). VEIL does not define or reserve
specific VCT URNs; deployments choose values consistent with the
credential ecosystem they participate in.</t>

</section>
</section>
<section anchor="conformance"><name>Conformance</name>

<section anchor="authorization-server-requirements-1"><name>Authorization Server Requirements</name>

<t>A conforming authorization server MUST:</t>

<t><list style="symbols">
  <t>Implement the OAuth 2.1 baseline (<xref target="transport-constraints"/>).</t>
  <t>Default to pairwise subject identifiers (<xref target="subject-unlinkability"/>).</t>
  <t>Implement the two-track claim model (<xref target="claim-separation"/>).</t>
  <t>Implement ephemeral identity delivery with single-consume semantics
(<xref target="transient-disclosure"/>).</t>
  <t>Implement an assurance level derivation function that satisfies the
abstract interface (<xref target="tiered-verification"/>).</t>
  <t>Enforce step-up authentication for <spanx style="verb">acr_values</spanx> and <spanx style="verb">max_age</spanx>
(<xref target="step-up"/>).</t>
  <t>Protect consent records with HMAC integrity verification
(<xref target="consent-integrity"/>).</t>
  <t>Strip identity scopes from persisted consent
(<xref target="identity-scope-stripping"/>).</t>
  <t>Support back-channel logout (<xref target="OIDC-BCL"/>).</t>
  <t>Publish OIDC Discovery metadata.</t>
</list></t>

</section>
<section anchor="client-requirements-1"><name>Client Requirements</name>

<t>A conforming client MUST:</t>

<t><list style="symbols">
  <t>Use PKCE with <spanx style="verb">S256</spanx> and PAR for all authorization requests.</t>
  <t>Include the <spanx style="verb">resource</spanx> parameter on PAR requests.</t>
  <t>Support DPoP for token binding.</t>
  <t>Consume identity claims from the userinfo endpoint, not from id_token
claims alone.</t>
  <t>Treat userinfo identity claim delivery as single-consume (do not retry
expecting the same data).</t>
</list></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC7636">
  <front>
    <title>Proof Key for Code Exchange by OAuth Public Clients</title>
    <author fullname="N. Sakimura" initials="N." role="editor" surname="Sakimura"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="N. Agarwal" initials="N." surname="Agarwal"/>
    <date month="September" year="2015"/>
    <abstract>
      <t>OAuth 2.0 public clients utilizing the Authorization Code Grant are susceptible to the authorization code interception attack. This specification describes the attack as well as a technique to mitigate against the threat through the use of Proof Key for Code Exchange (PKCE, pronounced "pixy").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7636"/>
  <seriesInfo name="DOI" value="10.17487/RFC7636"/>
</reference>
<reference anchor="RFC7662">
  <front>
    <title>OAuth 2.0 Token Introspection</title>
    <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
    <date month="October" year="2015"/>
    <abstract>
      <t>This specification defines a method for a protected resource to query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine meta-information about this token. OAuth 2.0 deployments can use this method to convey information about the authorization context of the token from the authorization server to the protected resource.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7662"/>
  <seriesInfo name="DOI" value="10.17487/RFC7662"/>
</reference>
<reference anchor="RFC8693">
  <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="RFC9126">
  <front>
    <title>OAuth 2.0 Pushed Authorization Requests</title>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <author fullname="D. Tonge" initials="D." surname="Tonge"/>
    <author fullname="F. Skokan" initials="F." surname="Skokan"/>
    <date month="September" year="2021"/>
    <abstract>
      <t>This document defines the pushed authorization request (PAR) endpoint, which allows clients to push the payload of an OAuth 2.0 authorization request to the authorization server via a direct request and provides them with a request URI that is used as reference to the data in a subsequent call to the authorization endpoint.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9126"/>
  <seriesInfo name="DOI" value="10.17487/RFC9126"/>
</reference>
<reference anchor="RFC9396">
  <front>
    <title>OAuth 2.0 Rich Authorization Requests</title>
    <author fullname="T. Lodderstedt" initials="T." surname="Lodderstedt"/>
    <author fullname="J. Richer" initials="J." surname="Richer"/>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <date month="May" year="2023"/>
    <abstract>
      <t>This document specifies a new parameter authorization_details that is used to carry fine-grained authorization data in OAuth messages.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9396"/>
  <seriesInfo name="DOI" value="10.17487/RFC9396"/>
</reference>
<reference anchor="RFC9449">
  <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="I-D.ietf-oauth-v2-1">
   <front>
      <title>The OAuth 2.1 Authorization Framework</title>
      <author fullname="Dick Hardt" initials="D." surname="Hardt">
         <organization>Hellō</organization>
      </author>
      <author fullname="Aaron Parecki" initials="A." surname="Parecki">
         <organization>Okta</organization>
      </author>
      <author fullname="Torsten Lodderstedt" initials="T." surname="Lodderstedt">
         <organization>SPRIND</organization>
      </author>
      <date day="2" month="March" year="2026"/>
      <abstract>
	 <t>   The OAuth 2.1 authorization framework enables an application to
   obtain limited access to a protected resource, either on behalf of a
   resource owner by orchestrating an approval interaction between the
   resource owner and an authorization service, or by allowing the
   application to obtain access on its own behalf.  This specification
   replaces and obsoletes the OAuth 2.0 Authorization Framework
   described in RFC 6749 and the Bearer Token Usage in RFC 6750.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-v2-1-15"/>
   
</reference>

<reference anchor="OIDC-Core" target="https://openid.net/specs/openid-connect-core-1_0.html">
  <front>
    <title>OpenID Connect Core 1.0 incorporating errata set 2</title>
    <author >
      <organization>OpenID Foundation</organization>
    </author>
    <date year="2023" month="December" day="15"/>
  </front>
</reference>
<reference anchor="OIDC-BCL" target="https://openid.net/specs/openid-connect-backchannel-1_0.html">
  <front>
    <title>OpenID Connect Back-Channel Logout 1.0 incorporating errata set 1</title>
    <author >
      <organization>OpenID Foundation</organization>
    </author>
    <date year="2022" month="September" day="14"/>
  </front>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>
<reference anchor="RFC8414">
  <front>
    <title>OAuth 2.0 Authorization Server Metadata</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <date month="June" year="2018"/>
    <abstract>
      <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8414"/>
  <seriesInfo name="DOI" value="10.17487/RFC8414"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>
<reference anchor="RFC8707">
  <front>
    <title>Resource Indicators for OAuth 2.0</title>
    <author fullname="B. Campbell" initials="B." surname="Campbell"/>
    <author fullname="J. Bradley" initials="J." surname="Bradley"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8707"/>
  <seriesInfo name="DOI" value="10.17487/RFC8707"/>
</reference>

<reference anchor="FAPI-2" target="https://openid.net/specs/fapi-2_0-security-profile.html">
  <front>
    <title>FAPI 2.0 Security Profile</title>
    <author >
      <organization>OpenID Foundation</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="HAIP" target="https://openid.net/specs/openid4vc-high-assurance-interoperability-profile-1_0.html">
  <front>
    <title>OpenID4VC High Assurance Interoperability Profile 1.0</title>
    <author >
      <organization>OpenID Foundation</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="I-D.valverde-oauth-pact" >
  <front>
    <title>PACT: Private Agent Consent and Trust Profile</title>
    <author initials="G." surname="Valverde" fullname="Gustavo Valverde">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>


    </references>

</references>


<?line 812?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the OAuth working group and the OpenID Foundation for
the foundational specifications on which this profile composes, and the
FAPI 2.0 <xref target="FAPI-2"/> and HAIP <xref target="HAIP"/> working groups whose
security-profile patterns informed this document's structure.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA7V9W3PbVrLuO34FSnmIlCE4lmInx3LtqqNI8o4SX7QlOam9
d50SQWJRRAwCPAAohWN7fvvpr7vXBSAoObPrzMNEJoF16dWrL19fmCRJ1OZt
YY7jvd/OL94cx7+ZOp/nJovPVwuzNHVaxBeZKemhTfwm3Zg6nld1/P5k3S7i
o/HhXpROp7W51/f3oqyalemSxsvqdN4m92lxb+rMJFVKbyT3Ji+SZ8+iWdqa
u6reHMd5Oa+ifFUfx229btqjZ89ePjuK0tqkx/G1ma1rmjh6qOqPd3W1Xh3H
F2WW3+fZmtZ1vZ4u86bJqzJqWnphSd+e37yOGvd5u1kZ/fDjw3EUx4msXP5a
mfLiLD6tytLMWv5oVef36Wwjf6d5/ZA3hv9hLDH4X7klyD0TizaDNdAi0jK7
TYuqpEk3polWOeZsq5n8k//MzKpdHMff07+aqqZlzxv7bbNZhv+cVctVOmvd
t+up+6Ssogj0rGrZlFD834l+6X0V/6Y0p6/iuKrv0jL/By/xOP4vWTh/Y5Zp
XhzHd2N7Rs+O/vcdPhvTPFFUVvWS3ro3mOLq9enR4eFL/fN/Hf74XP/88Yfv
f3B//nBkH/jh5ff658vDI/vAy+9fuj+fP+fBLpKzcW7auWWPo+QQH7+/ODtN
Tqua5yayKYd2TyzGA/Hh+Bnx0KyqV1VNyy3vYlPTH2ncmDY+2uP3PanwvwQ0
8aO9rtZlxuSRh+lvmuvo2dH3ySEt54WsIK3vDBF+b9G2q+b473+v6OU8G5em
/XuzMrNGP0hmsjb6b22Sw9tn40W7LPbsln46ffPojn5KZx+T00VK/yriN9Vd
tW4f3+Dh/2SDR8mzl8nh839tg1Na6kxWGuwzwnXu8s0LYgbLFs8PnzsOOXxh
//zx2Y/48/XJ5UVy1KUPPiMx88yJgviyruZ5Yf6FfT+9xXm6ypOj22dJo7Ml
K5nNneLPJxeXQyf4/LfT+Of8bhGfNM26TsuZIUHVmpqmqNNpXgQrx4H+f1m9
fPD8fpYsaCVJaleS5L2V2F11+BM3sSesWdZ0Nnt5cnpzTBshKdma+OSOpAl4
t8F/SfbFNxDhjx/RI6LKMeYPUZQkSZxOSazTGqIIqiXef1I1HcR5E+NiKK/o
PuNq7hVWBPWlcp4IYRpT3+NSDcr0cXzR0nCrlC6caeJZkebLhm5jW8XtQxVh
dR9JXtM8NIV+uz+tqsKkZWegmCZaF20zYqle5Mwh8yK9a0aRO6i4MPemaA5I
E6b0R9wuSOURT7FeSeuM1MdHU+o8o/hhgb3ZdUd2ehB4xLTEvqd53S5GcZpl
tAJ6qeTlpGADN09VFhs3WVpGTtmN4oZIQ4xCl75ZL02sF54eTtv4ozGrJia2
ajAgDSFLmefptDBeENDmq/k8Jq14lxQkFnQbzRj6+w9IPfsejRST4neaN55u
oszMUyLc2LFZbUgUZvLgz29PTsHMLY1iMhqwNatkvWKew5BK+2aWFqRCH3Li
AL4G8imtISc5RZQYx8xgxDz0XjxNaWrLOuCWrCKtWCa4ZTjQyPzZ4l1a0FgY
dZlnGW05+gaXvq6y9UwMgoshnsLQ9ASxE7FQ/DEvaTN0UCTqV+uWmCltidVa
edTyUjTEPg10DH3k+acFCQ/4Jjp2zqAqAqaIBpiCbDY6XSJuZlrS/83BON6l
aj99crr5yxc6HZwoHdu0ItpaFgIRm9SzC7Fq3gYfF/nctDn9gYXaTyPaTW0K
RyI6J9pOo0fj7yA9v+wSiY5tltY1BENeRl91WYQq9KJuAEz5V/h/CuFMM5Cw
WZMAIQlLnETLy+Isb2ZFRQeCG0Bs0hKL3Cw8P+H8qob2gb1jWLqDeSmMN6+K
onqAMLKsxhtsjqPoM05iZuoy3v7f5/i68/jAI3gq+pzs/t9j3wVP0TpOWJ6r
QRm/runoYJ3zOpyQJTYZsOy+fJF1QEEQF/5qNgN7ufz19JxeV9Pyy5dRvMSB
tuQshHuJL9fNgujdXY4d4+RKhoDxOTwEj3FtyowcmlN7DCC9HePssrrUQchW
5aUP0bTvHHX28lWXSFZCzs+sXYMRL5htglGu8tmit88r83/XxP+NLpDsah3n
hpn+/E8w6p3proafhWU+vBm3IxmDJRn40BPWjgFD/4kxhgxZP4a1hXcP8hm3
BvfTSia9EQYCEoIzYd0r1zteVnSP4/1Pn/ifiQoLWveXLwejzo0OJIDc/I27
0/Q6jUlynR5I/DXmIZwv2AypLLm9qqkwjj6VrMsiLz+q1aVr8VYNm2XzdCZK
pmcF0HBsZbEWoJXlEFJJqEcwXsQa8N7aRTPVkRj5ji0g0EQ+TNyHupAMi3Gq
LLICKq1nixwKlfY+pP2sJGtkbEizXEyKxA1GM4yhDYnx70EnCCU2D029zMuq
qO429PU38buqVXMkfFQE5keSDg+s6ffefri+2RvJf+N37/nvq/P/+HBxdX6G
v69/Pnnzxv0hT0T0j/cf3uj3+Mu/efr+7dvzd2fyMn0a9z56e/Kfe0yhaO/9
5c3F+3cnb/aIpnTKIUfCACENMDVM7ppMScj/FDqlmdX5VNTRT6eX8eFzuTfw
oInl5R6SC01/P5CdIofBRpj8k7hpE6erlUlrTEu2VTQjz6RNC9b2cbOoHsp4
QRwxZjKSXQyqk/RSS3kNBTN5e/LL+6vx24t3768msED0GdXGk4QBmglPRGIw
w2ETF5iEtLCBCVSb+1ysnPiCjA6DXauG4ZOoDZic9HY5z+/WtX4FjqHLU/Hd
ssRqZE5iuHUJA+6uzP9BMy7TP+hxXdo46s+i55bOZmbVbo0Vw8shiQuOcoPA
MqXr/ueKLUKxhO5KyN3OxHRbioyIGdj/tPsHmA2MsbS53Fmh75mZs4Jn3vQO
3hvc0+PoOD6J5XpCGjWNN/RIx9FJxRDcMC3ofMVc+LbxYmhB5zk1piQHyF7j
cRwaDBkmF7sn9hJjPy9hLQrniOV4EE9JyJYVkCw2quyFnS0MeSk4GCxTBpTd
0Pa8K3XdMt5C2yGTqkyWZkn6chTf3LxJ2Nyh/TX0SEpqZWkgNPNmyQLC7UU9
EBwP8Kqu6dQYUsJkkhM3XV5cwKe54xvCa/XyGVMYNunkvYxGIlLO87qB7d+S
mUdeqoivdVvBwZix80FnntNpxvmcjppXQpQMTPBTfCSnJUqDfRiapWX7a4cb
E4duTNe1ooU94lwNGtUXPUrVpMZp0TQSrb7IZ3nL/EEcz/ORdLF3Efudk3HY
9dU6pAPJQTzatNhXO3d8bzZwkx/xU0d9dTQi9lFIMnBe+aih2klUGNo2XSMs
CcxSFxv8k456rOae7hm7YA59xLd1jgGogROISUKtqpytaRntekYegnKrmJ0N
PpE9pmos6bWxRKTXQk/dLoxfBMJq9Qv5xfndnelztjMZQrb6F9fRuzOeNXCK
vB7LHH2OIJuiIsMHd8gxxS5+6Ns4tPBrEox0Zy+c/SIMQscAbp8VbP2Ie+Nt
HKyBVRtLHazCuehq6vBk1mCh3ZSMd4rGzO3u7/KmZTnZyCKCCSBH6CGwGC/h
FcwkQZX83dh6jVUlbY4cKmLjtFgb1Rk0Tg14u7QbS2dkzIKmGZGU7LcPVxf0
DzIvwF93oAuggw8rtrM9dCDEYRo/QN/yfGnHFIf+oA0YyAk49U4vuRvEi+Gz
ZHGwP6HF3PJqm8kBxDJpa9Zdc7p8C5L1ZFpNlumftyQh6QFoNKWNKo/Zmjxl
2MT6HjH1PRGFBJAyLm4eKfLOxeb7Sx92sRE2025g9q6quvWeEFyLb1r7eTLz
n38R88z7qt7pq1Zq6hGhvMfF0kA4waKp0ZWnRyNXxY8Ct96wVa36nygUGGg8
es3OPykHPpRUDBJR1l1H6VpOJ5xP1j94iBiFnO0kvl6vmB5PO7TdcWbkiCi7
wEaBLzum4XT6YZ/V+XL75LaOQr/1QByDAle5O0+t74yDtW45rHNmLVDfn59H
3+jNC+JQw+YVsZx8TFr7Dg/x8s+zs+uTeP88O3rx4vClrEZDUPxcCh+hs4ZJ
nt3yQLcyzi19v4L/cZsWdxO922Q+tCkDMAzFYnn8OdsMd+yE09O02XaxpA0U
4oKOHzk3YZTOyS1Ji+VkTm4P2ajRcqs73r+6Pnrxwyg+1/9g0yNogzcJ/ZX8
8OIg3OHXOuNMfO/UWyzID9Tz1EPnnE99nRFNZmD1aV5mvAOSyawbwA4tjbfW
K+wHHXK7O+42hp6bDBgoy2GJnpI6Zs/MiQRy3eSouhdHPmz8PflAGoABG3Ep
QMEJlE1RmJLtRKJTJgucLvO2d3rw0ukR+ND3ecqozdTM2f4TPE0Nii32xw1j
BiZDb52JVJ4Qq1VrEsETP65S9cdnP9LW6T3MsPPqPHZdSPKSMB53KQBTwVGB
zfOlKqo7Epx82PYbu7aYHDda1op0A3zbeEa8AWFMnp19ieSxxcU/hPAByeNh
WCGKPmxJ2NGWgt4C2QPIYoyZIAPSSG+oVblka1q1TQ6lDnUrUfW91XpKD+1N
RrFJ6VKQdcMmH1GfzBjSsoZsD+hDcgfpJGkJq8ass6rcLK26FzgYWo1dMQYA
aATW1cnVZQcS7oDLW3tyjhpDMJdVg2tHzlpRWKEj+6hDB9YiNmTPbO1Nybc3
GbszZz1lrbK7opqyt6AGxhCZAyqSagQaADbfRcY47S7SbslaVWT5PnWmbIKx
pUZ8+c9//hNwVfxvEia5/vkkoetJSubi6veL6/Pb6/PTq/ObkbWq/hbvjffo
/3EaF9kBvx79Dv3KPD7pvTexoTYI4KShlWAgctBg3dJOYOm28fdH8XTTio6Y
yEQTaw/KuZA5YynYt+7IjJxvG1zQEiL1G7m9jZiaOvytf/92XefEnHQf+bTX
jbFHaA1RHmtr1vc0p9DZvip0xXYHzGS25NijSQFSEMuTDx6rWAeg07U62ebU
r4UuQnFHF3byAYmx4d9h8ZuHSudWECTL53OjtmBvHzB2cQVZhoqmC29dxKM3
xgRjgDMnsh/ySN6ZHISw92dGVqjSAWNU+O7bJpJ3APoY0SFKZA4IyVC0kDnk
U9W98sLfXTXIHFfCJoDXjaU/oiYtpDSxujKQ/KNop6Wu2FUSbMYJS9mNpZOE
3CM7PFh1m1tglBhdnmqLbxsdSJiH6UvGfbWMQuHVfXQtEpjJZo+4WVhBzUST
yYVs5xZqJVlHDBNF/gOHz749+U+AeyR93P4CUBnBqyxT6FYWEzm/+OT0Ri3e
gZQAIj0jvVmzY2DeJnk57Zi3Js4zGzV3odsS8KqgxfzctQPvSeNt4fkKcHIK
2HZAPpaAPEdwgaji+jEPM6KqWE/0FVCPHKufF3dTPbwM0o2UkUGALzOMndKm
CkR/mmP1/gOMjeMB+DCZp0vS2KZh/F1R+SgzMwFZ8Zz11xP11xsH1TtP3kFv
TbQ7YKFXi7YAiXHDRImi774LgZjvvlMoaDBPwSE7DOCc/5kCmiWtMqEjvA1f
4LQ9Q2J2EoBftxbKtN9Gk/CdW4aUSPXN10UB+2HSbMiYgbOQAw9q9bUeckSX
IbIaDreJ7ITNqq3Iblot8hl9TSdJTEeU/K9fBehpRtafsWFgusd4iUQ/WdB1
Pl2TcjqI6ZCFS0ia1OlDN0w8BuV6yJ0QD9zUIxDIgPyWvV9SkoRnFRkQtHkg
hrfV/JbxQvry8OXLZ8mzF8nhC9694ofH8afxePylR0skQV3BDNkBHu6EDhUo
6oNEURdv/QthMPXArDmHaaamfTAkn/Xe5aL7HhZ8RYyDzSQe0jBAzV/mbSSQ
IQmbkxJyYStFAmYEQN5uJosISDsiOwcKitAYI56gFfCc3tApBDP1eKekArD9
i6H1KaaLYEh5S17nXC4R43vxa726MMK7d/kJNEHhexZORLg/IKxVRtghjv3N
FOSPmGvfjO/GxAe8j2PgQO4fAWuAteTDkHj+UY/WTg7YiLN+q3VKBmFRJhcM
k6+HQxPidD55y5P3bFcrB0Lwl5sOe07NpgLCyG5eYYUhT5puEFIDtp+Q8qqr
e5HkpEkaeG5l6zw4QP024pkWtUkzRAFy9u3CK7tFVbuPMe7qJPxAbyIIGzwU
EDx4NqumT5G1j/JaolqC/g+uogeVnrj/AIqhe9lH6/Bp54yJ5tCLMIw5KpOt
azF1e2lX+2RlrGuP9GMOMn7poJYrPCVhSzCR9Qr5sCA86KKvl1MiT5Eqw8lF
6DK7pdnkgA0Y2l2qqTbky/Ej8GoSBckloMErREbRCE8JLGnDB3hVvC9sMHbv
WvdKaa6gCW74thaWSx4YGJrCFdjO7vCmZpHe5+D5ViggGKINYBDDXJQefQLA
3FFy2DOdhVlOTZZxPhE8B7qQW8Gj4OgQQLIv5MHowUtKr4Ap+pEkDLKbF3EI
LhojsbmVgjiBQOaQdxzv4tsxb74DODLC3kEgic3yMq1zWh3SujayUIulQVpo
oiMbzjAesLUJIDt4AvhkVs4nYje5lIREBLG1BOIi/yg26uRgwMyIWZo5mrYM
M5OVjzi0BAJSF6ANvHwbq01BBNlmwrtKeA+q1dRO0cw2+05VwjUgfpFp2OgU
WrJxlJRkK4mx/OXLsb0s/NUk3nA4G2siX/zq0tpT7pWJDNVFelnMP8ZVHZ6S
d7mEQeDj6Lc8dRyBU/wJmrmjSDp5iJ66PulukPLAygpn49lrTBq+YyEw/r+9
fBnCxo79EP0A8343Ov1KHipbYjfJCkQyB0g2B4zo4s5qWV+DvPE7dyIwC/qH
1E3785yhURJaSfcMg7ChSxC1BxpZxI9GclNYiKd71H24hxOrz87PPlze4nOL
+ki+tcnWK2Th/S3eOwb2I47nRRYp/HNjXU9xmWIH6jmf1M9L6wYLE/fBCHOC
MfIkwSNeYF5dNvCy2LHCxjgEnyzWS7bBW2SJLvNWce+IFlrg6A3jDKLjrIti
4ULPa0wsxms1uMUIxpmTRDa21RdQ0ZaRvU+S8gBqbbawyt2DnEHOqM+YEAaT
ZONdKRCjRxJIJVIgEDdcOJeYJRE1Y5PNVD67MV8FCjlI0NgH1vzRbKLLq9cj
Bzwn1o+ib0bxA/D6IKTDafR5JxnHpX/pBZCNnerGLl26rgI4eU/t4NZba260
O4jKSSENaycSWNtU9XnEPvzoU4U5TVaXEiZ6hkGMHWmwn7fSXK811SUc58Kt
BrLzVUdWPtQ5QjI4UmIoNnrhPAKJGHNG5Ha26+deWpVVUVx0wGMrApdrmCO1
1pRPxqNTzlDgUAsgx1jM3TpFKMGoNGHVg6sJjrF5NyLqxFpmu0hRyGMrAiay
6pubN1urPrUJX3RrX9kgbYClv0BKFhxrCbQBzoRVei+R0UYGPg1MCDvw9U6Z
zNSYGiuYBzKC3KgSHJ9tPJEFREY+oUNnn6QoAzQuzk400xQxL/m2COYWKXlx
tMo13YFCdpHWRc5ZAqphrIaiechbqPEHbHTJYZK9XJlVkbLRYAXeZ5sb/MvN
ReOmGzTbbabWPnYrTMs2iBQHcEYYo5U27EKL5tmquRUh/DGwQB0esUiHo+dk
ctdtUpHgkuw6J4YwpjJlQEE+rARvEiu4DXakvL1irdFaIuZUZzf7/UI5JPwa
7WAlySmBbxrsaVoTFyaM2jk0hC4pcZ3YJn2jgNizQqRVlneynBKXsxBL5wYS
hXnJBZZxloAE+BIN8sZE4H9GQvi8uXhPNxQX7ElMPP8AUSJ7VeRjF6wmqVwS
4zroJ8SrIG1EBSpSD/G5zBvnniOZ+ptvLGlfI/9KNLuyNXEY24UiUxvRZng2
QaZIIuewAuVqlm/sAYpwiWwqH1dQNaFacxcqdEuZ+cihIKbkiwKew3WuI3WJ
6R/TzYCmlaLaKDocx99998GPOCa3/sZ6eho2gN3kA6v+ZlsWmGkYKd7HPF5V
7lZ6ZPYdYWIlIZvAduZBRZYjs4LjYwI/5sGLPHNoo42Q0IuMgJs3B+LysNWj
FuEibWBgkIAAiwVVlxiHBeqQQlWxFqZYSViGy40CSwFnhZF8tqhz+HmEcfQ9
dn4NJrBbVj7j5FkJjJrODi16zqQg2Zyz3YJZcuJuMmY4nBxY9t2yHGUAh/6I
DTHyQoGHYiuAh/JO3XA26Th6ji2osWI30eUv5JD6JXVTDoPdYGJVOVrCIxpJ
LeJQt8JnUgOQpE61JNK62jMbwyEl1PiM9744cuaFQs2MNV2lD3SI1RKLmGlx
V74EUUbqr9GU9DfuPqeSSZXYgYB0mpEqL+Cj0w6EDh25pLOq6d5IfoWGIsOw
omaRrosMd5gzA1tAAhKqd6l2sO+j6L2ADGbbD7SYWbZ13gPGYySkFYNecq1/
C71BsucHCiRssGgwg/qpmgtJsB5Fml09CgxNybQmvW1doS52na9I8pYwIaBm
oyAWJDzMWdhFOgXaBHEK36IreDSTTQtF5BiwaMAntBhO2JRIe2dmFwHpZZBb
q0c9CAZ77LMxshAaQc5n1XIJ3E6DGc5K+oepq+RjWT0UJrtTcD0arm7thFvE
/e4D+9A1NGPkQjGxC8WoSHGlsQGnE1symqjzsCyA5xvZoNEMh5thnorjie/5
3Dgv1x+zvG8vFN0U9hleAz4JLdwboon8dcbAlpipA67D50c8iIkNgk10VBt/
+Bz/7sOSormWxqgcJRshX657VEO4kXREkYllMmFunfj1Ep+wCfXZXo4+Y+/n
g56GcuGBDluSdCBav5HRP0sZEa3uc/xOvoltwixYj4tNfU4g2SGIm/JAUnEw
ceurJOLN9p3r3mHJwQ+7uOOOlR5YK8bnwwwkdQb3d77WEJWajSw8L8luGcfv
KueaKaw1gm3FOSxmPjd8gZA5ZGssuCSZmDYLEvUlRHKmSQ8Iic1UUcAAtG8W
D+nGo8XOPhSZwvh7RRezKom00F0QDC4nmS65ZhLruehZ8oYa2mUz3yCw0ksv
ZrkWk10AIYMXHkucFC/zT1Skigzu8Y0CHEy8Gwnq1zagHwLN8f6SxDcbgZ3j
UyYhKffh6h0tNNAjrJG6lQFWm5NC4GQ42PdBXEyhB03UPpdwPO/50zeNVH5/
0UTu7RpwMu6+a1DYkxbfkeHHfQoket9IogDyOn1xeN5E6ioQ73Xs7e/wKTlX
4TAYh28FaIo4BLHrzUMVmWCN6sVwQsaxwiSpNaVU0jZxmBvOJkQ5bNiNRIjv
PFMWHxvR1YGhZf2x3jlHwk65q1PgOYyoKk7Dyn1q007/RAqvNFVfT8HUNfFj
SL+GVFLJYHn1UNIxi8N1UZK3RrasqRNO3oi2Ez7VzpURFXWYAjNn1QiZF00c
2FCVt3opsskrHwXoJsdobBYlBvQoUR14JXRDrqm15ODieGDT8az5XGvziqay
WfeMIZBhqW43bztCUGS8+5Btcv8jUFhwilH/FF0Cjah10guWuK2v+zKamWaP
L28kJ6p7cBJC3C4LwIFcnlzJYYTkpw8jiQUGZ6BldDZv3NaVInQAAInNw3vR
d9HWXHENpzEhFbYi+6EaIAmnLyD/jAltBJSPioq8znHMNO5cG+9gWraWCEaX
wzgZGCMLWSQ1mPfVB5tcl4IO5TSlr9PZIOqyPViJDTg2kucWpBvYHQlQjtGK
5TXawcgcRD29Gkj7XBXVBlImIZ8OWBh8HQZtdIGcIWnLz7kGCDMfCQrCSY05
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
+866JebFGQHFnzFZ5eoOJesjhqD5dXkA4XJYQPPSFOm0jb8Z/840mEcMNti/
0MZQxUfRN2edN4EbsOmpbXuzqNOZ9/jpBkGjgYa2iKF02tP2W/eM4ivXwZbb
yYz6dfIBnUdddL/bXFZcm50mbfA8m7VySZHUd46gMNL8fme8azszXtIe81IS
WIFOSKZx5qvDtu9WpPDevi0ctbmD1gHTlGA0oF63HJFnV0FBN9/s3PZv1gxp
j1XuB5l/D3XKHoz4zuTmvf75PJ7ltCpeb4PmW5H0GQOUPGDEBVqBGLVfAGk7
JXTejLbenBEDbSdAaQnkDn7XJjxB/5Mrl+fyRCMQm/3qyiLYCQlbqdiOXMY3
y9ZubeTGtYIljuOfqwcAYyO4XdyVJRhhH7VwV5dNpKkftscEh3LUOlQMVfuR
u5BNZxgsLWKtP4ovLm0jxQPbvI1YsMlJ9z8dLWA7CxWYbh7iStSAMNLOS7MA
vAR8ArNHrWvtfZMoLVmnht0faSCNZruB0B8VpglKDMGHOoTNVNjuLk3GD656
v81QB0RTCbsw89bj3BsNdBK9p7Bfoq5Rb7XbiHuUVIUp3Xng+AvRS9yLx9ff
RPsPdQWQDFVzB7bCb+hZDWDb52flfPzHx1YsWfk1iNm/IHP1Rxj+msgl/xOp
a3SL07L1nYwGeWP/5PpgpIGDMNlz/+pSEW2pMJDKxnF8xvwpv0yUGweTuwyV
aFeH6a1zeLQJtJRsxUFh1P5QkV8fdA8rkkYSGYmeaAn6VZXEp1ZODHVbGhIw
Dqpx2R7VCsGNqNfASCo0h1odHbwKUn59VZYdOOoNHKf9zmH7PTdyxMVjgo+x
TFEzQ32ts2qNa3pSovkUh0DD/EjXRwgIMh5MUvsgy0Kt+OSoS8NtRyrOA4kG
fzIktjRsFvmqG2kZbyceR5qsYIWOTwlkQaMNizXDBm8xHomqrv7Nj8pKftFJ
SBIw+ODd0HkxRSm1tcpS3A95ZnwyNEs5sHS/FDyTmn8ye9fLNaf+Moj9GJg4
XD9pRYgcy3bx6vD1kEJNAcylTJKTrlgt+dZHwS3bajpmidBrXSTFuUBdfXXj
do3iuswBcUJahrZzvyjRkyMoSvzG4ZZvrbpSYtifEnscqoTWUuw4zAvyGhTc
43UrVJdFKB2qrGVR9nPuX8MhG5Zf9FVjbP+m/bSJlhWKXOyvPfDhTzfW2TrQ
nuU2sGPpltl+fhoHHEe/K3nQrG4UqxWhdWpT7qdiF+RzPOBmTLkEE2Gxu7Rg
q2NdNIwQcIkZ6w91wA44VOrz0eXGTDeSQgyeIDr9LSTP37y10vEnvvHQ3Wt6
Dz3ec+6JuKyIMlH0ulpzkg+sS80oKCRQOw8e33kFOVrLfBU5W21lJwyEseDG
bimhKM7LjoLq1FPTVjaAcrwlyhUYmtNtJ+qYO9IW3ffJQF4OOqppjTy/wINY
ns5dtRCXCaBTFoc68UslDFbLD0I5vkEKDef7gb/b3ndBrUruYxKMVTvQUZWg
Wm8dqRlAQn5MTWGiMSYmz9IG6Uq48mJ/KEWR18PQ9qnzHdjD7XSo0sh0D4ra
eo6re347vTnwxXKO1KVZI9dH8oCClSG/yg/pOmB0wt7H94eTbiKqG1bwFYz0
4epNw4D7te+WELAiU/76LEGIIOw8aamprJGRiGCye9XchGV13REZBdAnbeY/
YlQSY0iLDUkp21KU+3upNcdquF/+3w0J7+jvJCfIT6BZExowPdUaNnb+QZAh
OdPEgM4Nil4HeXjdplb6A5R75x/2uFmfpNyk6gB0ejZF3LPJl/91dP63TQhc
YaQ/yGdusnymSUDLKTESWQ9RJ2/Wwh7BPGx/X5y8O9kyvrs/noIfGSDzwEXy
5B0XEgn7WpbmwRpxZJzAH8z1Z9BoDzn3qejmH5Yuby23gT3OCxHHXPvyRGjL
IrBiVfuHFOmVCqLtJF1hG4FYLl1P1ys3m63v2crywybkNd9idiQ55bbexeNY
0YerC/ywVr83sf5ERD+Eahmr9yBIFJVpjRRTwUa6vbEdDONwmqD7LbtbLjku
4vgpuVvozqiG+1YXbrLc4wFIUIr8OC5IZoSgz9IvGy4rO6vzqnaUEuhlExCs
W+llNsh0lPIFOY3fgQr/yqgwullehV1V9Tw8o7AzYmkR4MnSfT18czIY/pJ0
wriTTsiOKj3PGFvnZBI5mYmCkM8Pn3/5wpy7zSApdhx1VzRITwQV3Vs+BtN9
kw5sjpQYqaRXaO7whYXT/C+GnKJ+zDkKv6l1xUUVB5Lay6qhcDkBO0JzQ0m/
I/Z5dib9xl+Z9DvedaceTYjt59ByaC1KnSR5NdB+yl4kH8WysQlHCJx0kBHs
akx6+cCBrShXxlaD2NSyQHUHKp6rvC4C1S3tbjkIYmlLLhWm2hGG6hsCUXh7
AitgutMIoPVGnz65LwPVmtRiZvJN756JhgQFigIRHUQS05w88qtgDw1+IaHy
5nyfT+DKBhsh7d9s6Oul2PQrC7e0wNLszzrZiM/Xttw/+aoUcY5mONyIxYeX
oAifoa7SgRlDMlFiDrYTxaNNsB+BaMZby/grvzjWffuxnx57tEkMGVCPN4Dz
c6TlY6WsrhSOlUOn1AcdjmyVafDjQrt+b4zjNOLsusBRL+UN2qVTjcF5Jrbg
RfYUXk+uAQM8stVpjonDiWc+IBauR8Ya+nUzDlUCcdhKbGKj0Wdd2VzQ+MkE
Vd8rHkkItjOcTYHZD2MosinJ/+9H3cPY+Y4e+52bokbJ4/32QWEuZpEfi3jk
pyKe7JdffUWPfLGc9EcJuIZcObePVHb6d3VK6gML3uZS8C+/iBuAVg8Y94aj
Ee7lHd0n+QfRuldoP7PdKGHEcs0mlJ9GpRj+wSEc6K+34kQh1k5mtsZZjuLT
cbmGKW6yf9ubk7g3e53cYzbLPzaBlILHiVnYUXDw29bvOXPBQctNjOxHCP10
f8PT1SSGbf3dr4c6cC9yP5D96ZP8fjZ+k4S+ww9V02f4D1plhytrkHCO3zLs
/ci1wz407MGN7wI3glu16y9ajKP/B6huQFk6gAAA

-->

</rfc>

