<?xml version="1.0" encoding="UTF-8"?>
<rfc version="3" docName="draft-li-rttp-iqa-addressing-01"
     category="info" submissionType="independent" ipr="trust200902">
  <front>
    <title abbrev="rttp and iqa URI Schemes">The rttp and iqa URI Schemes: Derived-Address Intent and Attestation Addressing</title>
    <author fullname="ShaoBao Li" initials="S.">
      <organization>RTTP &amp; IQA Organization</organization>
      <address>
        <email>lee@iqa.org</email>
      </address>
    </author>
    <date year="2026" month="October" day="27"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>rttp</keyword>
    <keyword>iqa</keyword>
    <keyword>URI scheme</keyword>
    <keyword>attestation</keyword>
    <keyword>intent addressing</keyword>
    <keyword>trust lease</keyword>
    <abstract>
      <t>This document specifies two companion URI schemes built on one shared addressing model, in which the address of a subject is derived by computation from the authority and no lookup service, registry, or name-resolution system is consulted when the URI is used.  The &quot;rttp&quot; scheme names a claim of intent directed at an identified subject; the &quot;iqa&quot; scheme names the attestation standing of an identified subject, as reported by one of three named organs, and carries no proof and no credential.  The two are deliberately paired: intent addressing carries what is claimed, attestation carries whether the claimant is verified.</t>
      <t>Both schemes parse fail-closed, and the document states the requirements a client MUST satisfy when it handles such URIs, to avoid the failure modes that short, user-embeddable strings invite: using the authority as a navigation target (open redirect), using a registered handler as a general-purpose launcher, and, for &quot;iqa&quot;, a parse that looks like a certification.</t>
      <t>This revision adds three components that companion implementations already run: a trust lease, which carries the freshness of every attestation answer in-band and is checked against the verifier&#x27;s own clock, offline; two fixed-length wire formats, the 128-octet pulse header of the &quot;rttp&quot; scheme and the 128-octet attestation envelope of the &quot;iqa&quot; scheme; and a closed refusal vocabulary with grant references for attestation responses.</t>
      <t>This document is not an Internet Standard.  It is an Informational specification of two experimental addressing schemes, published for the public record.</t>
    </abstract>
    <note title="Disclaimer"><t>This document is not on the Internet Standards Track.  It is not a standard, does not propose a standard, and acquires no standardisation status from publication.  The two URI schemes it defines are experimental addressing schemes.  As IANA URI schemes, &quot;rttp&quot; holds CRI scheme number 27 and &quot;iqa&quot; holds CRI scheme number 28. The registration status of both schemes is recorded in Section 11.</t></note>
  </front>
  <middle>
  <section anchor="sect-1" title="Introduction">
      <t>Most URI schemes name a location: the authority identifies a host to be contacted.  This document specifies two schemes that name something else.  The &quot;rttp&quot; scheme names a claim of intent directed at an identified subject.  The &quot;iqa&quot; scheme names the attestation standing of an identified subject, as reported by a named organ. In both cases, what a client does with what the URI names is defined by the scheme; where the subject might be reached is not part of the URI and is not resolved through any lookup service.</t>
      <t>The two schemes share one addressing model and are deliberately paired: intent addressing carries what is claimed, attestation carries whether the claimant is verified.  Implementations and deployments should treat them as one model rather than as two unrelated namespaces.</t>
      <t>Four properties follow from the shared model and are normative in this document:</t>
      <ul>
        <li>the address is <strong>derived by computation</strong> from the authority (Sections 4.4 and 5.1);</li>
        <li>there is <strong>no lookup</strong>: no DNS, no registry query, no fetch (Sections 4.5 and 5.5);</li>
        <li>the URI is a <strong>claim, not a proof</strong> (Sections 5.2 and 9);</li>
        <li>both schemes fail closed: non-conforming input is rejected, never repaired (Sections 4 and 5).</li>
      </ul>
      <t><strong>Naming note.</strong>  IQA denotes <strong>Identity</strong> Quality Assurance.  It is not affiliated with the <strong>Institute</strong> of Quality Assurance (which became the Chartered Quality Institute in 2007), nor is it the computer-vision field of <strong>Image</strong> Quality Assessment.  RTTP denotes <strong>Resonant Time Transfer Protocol</strong>.  It is not RTP: what it names is a claim, not a session or a data stream.</t>
      <t>Addressing alone leaves two questions unanswered: how fresh is the answer a verifier relies on, and in what bytes do the schemes travel?  This revision answers both.  Section 6 defines the trust lease, the freshness semantics that the schemes&#x27; name promises and that deployed implementations already perform; Section 7 defines the two fixed-length wire formats; Section 8 defines the response vocabulary of an attestation.  All three components are codifications of behaviour that implementations already exhibit; this document defines no new mechanism for its own sake.</t>
    </section>
  <section anchor="sect-2" title="Conventions and Terminology">
      <t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; 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>
      <t>This document uses the ABNF notation of <xref target="RFC5234"/> and the URI syntax of <xref target="RFC3986"/>.</t>
      <t>Terminology:</t>
      <dl>
        <dt>authority</dt>
        <dd>The three-segment component of either scheme: &lt;intent&gt;.&lt;pillar&gt;.&lt;root&gt; for &quot;rttp&quot; (Section 4.1) and &lt;subject&gt;.&lt;organ&gt;.&lt;root&gt; for &quot;iqa&quot; (Section 5.1).  It is a name, not a host name, and is never resolved.</dd>
        <dt>subject</dt>
        <dd>The entity a URI names or is directed at.  It is a claim about which identity is of interest, not a proof of that identity.</dd>
        <dt>organ</dt>
        <dd>The segment that identifies the subject or answers for it: in &quot;rttp&quot;, a readable token (readable form of intent) or a fixed-width derived value (hash form); in &quot;iqa&quot;, one of three defined names (Section 5.1).</dd>
        <dt>root</dt>
        <dd>The root label of the &quot;iqa&quot; authority.  It is a name and is not resolved.</dd>
        <dt>claim of intent</dt>
        <dd>A statement that a subject intends an action.  It is a claim, not evidence, and establishes no identity by itself.</dd>
        <dt>standing</dt>
        <dd>The attestation answer an organ returns for a subject. The values it may take form the closed set fixed in Section 7.2; their semantics are the business of the reference specification <xref target="IQA-SPEC"/>.  It carries the attestation algorithm, the standing vocabulary and the conformance material.</dd>
        <dt>standing read</dt>
        <dd>A read of a subject&#x27;s current attestation answer from the named organ, as in the default operation of Section 5.3.  It is a safe, read-only operation.</dd>
        <dt>trust lease</dt>
        <dd>The freshness window carried in-band by an attestation answer, and the mechanism of Section 6 by which a verifier decides whether an answer may be relied on.</dd>
        <dt>pulse header</dt>
        <dd>The fixed-length wire format that carries the &quot;rttp&quot; scheme (Section 7.1).</dd>
        <dt>attestation envelope</dt>
        <dd>The fixed-length wire format that carries an &quot;iqa&quot; attestation answer (Section 7.2).</dd>
        <dt>refusal reason</dt>
        <dd>The closed vocabulary by which an attestation response states that, and only that, an answer was refused (Section 8.1).</dd>
        <dt>grant reference</dt>
        <dd>The structure by which an attestation response names the authorisation it relied on (Section 8.2).</dd>
        <dt>action</dt>
        <dd>The optional final path segment naming what is claimed to be intended (&quot;rttp&quot;) or an operation requested of the organ (&quot;iqa&quot;).</dd>
        <dt>ROUTE_SHARD</dt>
        <dd>The 16-byte value derived from the &quot;rttp&quot; authority as specified in Section 4.4.</dd>
        <dt>AID</dt>
        <dd>A self-certifying subject identifier defined outside this document.  Nothing here depends on an AID registry or authority, and no assumption is made about its length or encoding beyond what Sections 4.2, 5.2 and 9 require.</dd>
      </dl>
    </section>
  <section anchor="sect-3" title="The Shared Addressing Model">
      <t>Both schemes defined in this document instantiate one addressing model, whose four properties are stated in Section 1 and made normative per scheme in Sections 4 and 5: the address is derived by computation rather than assigned; every segment of an authority is a name, never a host; a URI is a claim, never a proof; and both schemes fail closed.</t>
      <t>The model is deliberately minimal: no discovery mechanism, no transport, no key directory, no authorisation decision, and no registry of any kind is defined.  What is defined is the grammar, the derivation, and the minimum client behaviour that make the two schemes safe to embed.</t>
    </section>
  <section anchor="sect-4" title="The rttp URI Scheme">
      <t>The rttp scheme is the where and the what of a claim: its authority is the derived address of a subject (Section 4.4), and its action names what is claimed to be intended (Section 4.1).  The when of the claim is not part of the URI: it is stated by the pulse that carries the derived address on the wire (Section 7.1.2), and it becomes decision-relevant only where the pulse and an attestation answer agree (Section 7).</t>
    <section anchor="sect-4.1" title="Syntax">
      <t>The general form of an rttp URI is:</t>
      <artwork>
rttp://&lt;intent&gt;.&lt;pillar&gt;.&lt;root&gt;[/&lt;action&gt;]
      </artwork>
      <t>The authority is exactly three dot-separated segments:</t>
      <ul>
        <li>intent: 8 lowercase hexadecimal digits (a derived value), or a readable operator-chosen label; both forms are opaque to a client.</li>
        <li>pillar: an operator-chosen label.  No enumeration of pillar labels and no registry for them is defined.</li>
        <li>root: an operator-chosen label matching 1*( %x61-7A / DIGIT / &quot;-&quot; ).</li>
      </ul>
      <t>The action, when present, is a single path segment: &quot;/&quot; 1*( %x61-7A / DIGIT / &quot;-&quot; ).</t>
      <t>ABNF:</t>
      <artwork>
rttp-URI     = &quot;rttp://&quot; authority [ &quot;/&quot; action ]
authority    = intent &quot;.&quot; pillar &quot;.&quot; root
intent       = hash-intent / name-intent
hash-intent  = 8 lowhex
name-intent  = 1*( %x61-7A / DIGIT / &quot;-&quot; )
pillar       = 1*( %x61-7A / DIGIT / &quot;-&quot; )
root         = 1*( %x61-7A / DIGIT / &quot;-&quot; )
action       = 1*( %x61-7A / DIGIT / &quot;-&quot; )
lowhex       = %x30-39 / %x61-66
      </artwork>
      <t>The examples below use reserved names per <xref target="RFC2606"/>; operators use labels they control:</t>
      <artwork>
rttp://f3b2a1c4.pillar.example/vessel
rttp://organ.pillar.example/verify
rttp://f3b2a1c4.pillar.example
      </artwork>
    </section>
    <section anchor="sect-4.2" title="Reserved Characters and Exclusions">
      <t>These exclusions apply to both schemes.  Section 5.2 adds the ones specific to &quot;iqa&quot;.</t>
      <ul>
        <li>The canonical form is <strong>lowercase US-ASCII</strong>.  Uppercase is <strong>invalid input</strong>, not a formatting difference: a parser MUST NOT normalise it, because two distinct strings would then map onto one address.</li>
        <li>., / and :// are the delimiters defined by these schemes.</li>
        <li>Neither scheme defines <strong>userinfo, port, query or fragment</strong>.  A URI carrying any of them is not valid, and a fragment MUST NOT be used to address an action.  Credentials cannot appear in such a URI, and there is no field in which to exfiltrate data.</li>
        <li>Percent-encoding follows Section 2.1 of <xref target="RFC3986"/>.  No component requires characters outside the unreserved set, so a canonical URI contains no percent-encoded octets; a parser MAY reject such input rather than normalising it.</li>
        <li>There is <strong>no &quot;rttps&quot;</strong> scheme and no fallback.  A client that does not implement this scheme fails closed (Section 4.5).</li>
      </ul>
    </section>
    <section anchor="sect-4.3" title="Default Operation">
      <t>Dereferencing an rttp URI without an action requests the <strong>default operation</strong>: one single round-trip semantic request against the subject named by the authority.</t>
      <t>The default operation is <strong>safe</strong> in the sense of Section 9.2.1 of <xref target="RFC9110"/>: it creates no obligations and mutates no state of the subject.</t>
      <t>When an action is present, the default operation is not implied for it.  An action names <em>what</em> is claimed to be intended; the safety of a given action is not defined by this document, and a client MUST NOT infer safety from this section (Section 9).</t>
    </section>
    <section anchor="sect-4.4" title="The Address: ROUTE_SHARD Derivation">
      <t>The routing address of an rttp URI is derived from the authority alone:</t>
      <artwork>
canonical_authority = intent &quot;.&quot; pillar &quot;.&quot; root
                      (lowercase, US-ASCII)
ROUTE_SHARD         = SHA-256(ASCII(canonical_authority))[0:16]
      </artwork>
      <t>The <strong>authority only</strong>: the scheme name, &quot;//&quot; and any action are excluded.</t>
      <t>The derived address has four properties: it is <strong>deterministic</strong> (the same authority always yields the same address); it is <strong>pure computation</strong> (no DNS, no registry, no network access, no lookup service); it is <strong>one-way</strong> (the authority cannot be recovered from the address); and it is <strong>action-independent</strong> (different actions on one authority yield the same address).</t>
      <t>The last property is why an action is not part of the addressing component: <strong>an address is <em>where</em>, not <em>what</em></strong>.  Were the action to participate in derivation, two actions on one subject would become two addresses, splitting one subject into several.</t>
      <t>A client MUST NOT perform a lookup in order to use an rttp URI (Section 4.5).</t>
    </section>
    <section anchor="sect-4.5" title="Client Requirements">
      <t>A client that handles an rttp or iqa URI (including a resolver page, a protocol handler, and a library that renders one) MUST satisfy the requirements below.  They follow from Section 9:</t>
      <artwork>
either URI may be supplied by an untrusted party, and what it
names is a claim rather than a proof.  Section 5.5 adds the one
requirement specific to &quot;iqa&quot;.
      </artwork>
      <section anchor="sect-4.5.1" title="No Navigation to the URI">
      <t>A client MUST NOT use any component of an rttp or iqa URI as a navigation target.  A client that renders a link, redirect, or fetch derived from any such URI is an <strong>open redirect</strong> and is non-conformant; a client MAY navigate only to a destination that is fixed in advance by the client itself.</t>
    </section>
      <section anchor="sect-4.5.2" title="Scheme Prefix Check">
      <t>A protocol handler MUST reject any input whose scheme is neither rttp nor iqa nor the exact scheme name under which that handler was itself registered; without this check it becomes a general-purpose launcher that any page can use to open an arbitrary URI of any scheme.</t>
    </section>
      <section anchor="sect-4.5.3" title="Consent, Never Silence">
      <t>The ability to handle rttp or iqa URIs MUST NOT be acquired without an explicit action by the user, and a client MUST NOT simulate, pre-select, or otherwise bypass that consent.  Where the platform exposes the list of registered handlers, that list MUST NOT be exposed to the network.</t>
    </section>
    </section>
    </section>
  <section anchor="sect-5" title="The iqa URI Scheme">
      <t>The iqa scheme is the whether of a claim: it names a subject and the organ to ask about that subject&#x27;s standing.  The URI itself carries no verdict and no credential (Section 5.5.1); the verdict arrives as an attestation answer whose freshness is the lease of Section 6.</t>
    <section anchor="sect-5.1" title="Syntax">
      <t>The general form of an iqa URI is:</t>
      <artwork>
iqa://&lt;subject&gt;.&lt;organ&gt;.&lt;root&gt;[/&lt;action&gt;]
      </artwork>
      <t>The authority comprises exactly three dot-separated segments, in this order:</t>
      <ul>
        <li>subject: 8, 32 or 64 lowercase hexadecimal digits (a derived routing hash), or a readable label; both forms are opaque to a client.</li>
        <li>organ: one of the three organ names, forge, tss or gateway.  This is a <strong>closed set</strong>; no other value is valid.</li>
        <li>root: the root label of this scheme.  Like every other segment it is a name and is never resolved.</li>
      </ul>
      <t>The action, when present, is a single path segment and is one of the four operation names verify, audit, attest or revoke.  This is also a <strong>closed set</strong>.</t>
      <t>ABNF:</t>
      <artwork>
iqa-URI       = &quot;iqa://&quot; iqa-authority [ &quot;/&quot; iqa-action ]
iqa-authority = subject &quot;.&quot; organ &quot;.&quot; iqa-root
subject       = hash-subject / name-subject
hash-subject  = 8( iqa-lowhex ) / 32( iqa-lowhex ) / 64( iqa-lowhex )
name-subject  = 1*( %x61-7A / DIGIT / &quot;-&quot; )
organ         = &quot;forge&quot; / &quot;tss&quot; / &quot;gateway&quot;
iqa-root      = 1*( %x61-7A / DIGIT / &quot;-&quot; )
iqa-action    = &quot;verify&quot; / &quot;audit&quot; / &quot;attest&quot; / &quot;revoke&quot;
iqa-lowhex    = DIGIT / %x61-66
      </artwork>
      <t>Examples (the examples use the root label of this specification and placeholder subjects):</t>
      <artwork>
iqa://3f9a1b2c.gateway.iqa (routing hash, standing read)
iqa://0000004149434e531c5b21d80403358b.forge.iqa
iqa://3f9a1b2c.tss.iqa/audit (explicit fidelity audit)
iqa://master-authority.gateway.iqa/verify (readable label form)
      </artwork>
    </section>
    <section anchor="sect-5.2" title="Reserved Characters and Exclusions">
      <t>The exclusions of Section 4.2 apply to iqa URIs as they do to rttp URIs.  Two are specific to this scheme:</t>
      <ul>
        <li>There is <strong>no &quot;iqas&quot;</strong> scheme and no protocol fallback.  A client that does not implement this scheme fails closed (Section 5.5).</li>
        <li>The hexadecimal subject form is a <strong>routing hint, not evidence</strong>. It carries no verification weight; identity is bound outside the URI and is never established by parsing one (Section 9).</li>
      </ul>
    </section>
    <section anchor="sect-5.3" title="Default Operation">
      <t>Dereferencing an iqa URI without an action requests the <strong>default operation</strong>: a standing read, returning the subject&#x27;s current attestation answer as reported by the named organ.</t>
      <t>The default operation is <strong>safe</strong> in the sense of Section 9.2.1 of <xref target="RFC9110"/>: it creates no obligation, transfers no value, and mutates no state.</t>
      <t>The following rule is normative:</t>
      <t><strong>Dereferencing an iqa URI, by itself, MUST NOT transition any subject&#x27;s standing state.</strong></t>
      <t>When an action is present, the default operation is not implied for it.  Which actions are safe is stated in Section 5.4; a client MUST NOT infer safety for an unrecognised verb (Section 9).</t>
    </section>
    <section anchor="sect-5.4" title="Action Safety Classes">
      <t>The four defined actions, and the omitted-action form, have the following classes:</t>
      <t>audit is not classified safe because the measurement it requests can itself change the outcome it measures.  audit, attest and revoke MUST be requested explicitly and MUST NOT be reachable by dereferencing a URI that omits the action.</t>
      <table>
        <thead>
          <tr>
            <th>Action</th>
            <th>Semantics</th>
            <th>Class</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>(omitted)</td>
            <td>Read the current standing.</td>
            <td><strong>SAFE</strong>, read-only</td>
          </tr>
          <tr>
            <td>verify</td>
            <td>Compare a presented seal against the subject.  No state is written.</td>
            <td><strong>SAFE</strong>, read-only comparison</td>
          </tr>
          <tr>
            <td>audit</td>
            <td>Request a fidelity measurement of the subject&#x27;s execution.</td>
            <td><strong>NOT SAFE</strong>, a failed measurement may change standing</td>
          </tr>
          <tr>
            <td>attest</td>
            <td>Request that a seal be issued for the subject.</td>
            <td><strong>NOT SAFE</strong>, state transition</td>
          </tr>
          <tr>
            <td>revoke</td>
            <td>Withdraw the subject&#x27;s standing.</td>
            <td><strong>NOT SAFE</strong>, state transition</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sect-5.5" title="Client Requirements">
      <t>The client requirements of Section 4.5 apply to iqa URIs as they do to rttp URIs: no navigation to the URI, a scheme prefix check, and consent that is never silent.  One requirement is specific to this scheme.</t>
      <section anchor="sect-5.5.1" title="Parsing Is Not Attestation">
      <t>A client that displays a parsed or rendered iqa URI MUST NOT present the result as evidence of standing.  Reading the syntax establishes nothing about any subject; standing is established only by the answer of the named organ, under the rules of the reference specification <xref target="IQA-SPEC"/>.</t>
    </section>
    </section>
    </section>
  <section anchor="sect-6-lease" title="Trust Lease and Freshness">
      <t>An attestation answer is only useful for as long as it is fresh.  This section defines how freshness is carried and checked.  The mechanism described here is the one companion implementations already perform; what this section adds is the name and the rules.</t>
    <section anchor="sect-6.1" title="The Lease">
      <t>Every attestation answer produced under the iqa scheme carries its freshness window in-band: the answer states the instant until which it may be relied on, in a field of the answer itself (the lease_expiry field of Section 7.2), not in a cache header, a lookup result, or an out-of-band agreement.</t>
      <t>A verifier checks the stated expiry against its own clock.  The check is local and offline: no network call is involved in deciding whether an answer is fresh.  An answer whose lease has expired MUST be treated as expired; a verifier MUST NOT extend, renew, or reinterpret an expired lease except by obtaining a new answer.</t>
      <t>The window is short by design.  Current deployments use 120 seconds.  The number constrains the verifier&#x27;s honesty, not the speed of any channel: a verifier that accepts a statement older than its lease is asserting more than it knows.  Operators MAY configure other window lengths; the mechanism does not depend on this value.  Whether the lease instant itself counts as fresh or as expired is a deployment convention; implementations SHOULD declare which boundary they use, and conformance material MAY test both.</t>
    </section>
    <section anchor="sect-6.2" title="Answer Modes">
      <t>A deployment declares one of two modes for standing reads, and each run or deployment SHOULD state which mode it operates in.  The two modes are distinguishable by more than a flag: under the same revocation timeline they yield different answers, because the live read reports the revocation itself while the cached answer can only report that current validity is not established.</t>
      <dl>
        <dt>cached-lease mode</dt>
        <dd>The verifier relies on a previously obtained answer whose lease (Section 6.1) has not expired, checked locally and offline: establishing that the evidence is fresh requires no network call, and this property is the design point of the mode, not a degradation.  A cached answer is, however, as-of an earlier instant: it does not by itself establish the subject&#x27;s current validity, and the mode makes no claim that it does.  Whether an action proceeds on lease-fresh evidence is decided by the calling layer&#x27;s action policy, not by this document: a policy that demands a current observation refuses the call with authority_not_determined (Section 8.1); a policy that accepts lease-fresh evidence may admit it, with any exposure bounded by the lease itself.</dd>
        <dt>live-standing-read mode</dt>
        <dd>The verifier consults the named organ at the time of each request.  If the organ cannot be reached, the read fails closed: an organ that cannot be reached is not read as silent consent.  Every call in this mode is expected to be refused when the organ is unreachable, regardless of the age of any cached answer.</dd>
      </dl>
      <t>In both modes the following rules are normative: an answer whose lease has expired MUST be refused; and an organ that cannot be reached MUST NOT be read as affirmative standing (Section 9.2).</t>
    </section>
    <section anchor="sect-6.3" title="Out of Scope">
      <t>Store-and-forward and archival uses — cases in which a statement is verified long after its lease has expired, with its age stated in the bytes rather than checked against a window — are not defined by this document.  They do not contradict the lease: a statement that makes no freshness claim is never falsified by one.</t>
    </section>
    </section>
  <section anchor="sect-7-wire" title="Wire Formats">
      <t>The two schemes are carried by two fixed-length wire formats, one per scheme.  Both are 128 octets long, both encode multi-octet integers as unsigned big-endian (network byte order), and both fail closed: a receiver MUST reject any frame whose length is not exactly 128 octets, or whose magic or version it does not know.</t>
      <t>They share one design decision: the derived address of a subject appears at a fixed offset in both formats, and it is the same 16-octet value derived in Section 4.4.  One subject has one derived address and two carriers.  This overlap is by design and is not a compatibility claim.</t>
      <t>The two formats also split the WHEN of a claim between them, and the split is the pairing in miniature.  The pulse states when it was emitted: TIMESTAMP is an absolute time in nanoseconds (Section 7.1.2).  The answer states until when it may be relied on: lease_expiry (Section 7.2), checked under the rules of Section 6.1.  Neither field authorizes anything by itself.  An action begins where the two agree: the subject named by the pulse and the subject bound by the answer are the same 16-octet derived address, and the moment the pulse claims falls within the answer&#x27;s lease.  What proceeds from that agreement is the calling layer&#x27;s decision (Sections 6.2 and 8); the schemes&#x27; job is to make the where, the when, and the whether trustworthy and cheap.</t>
    <section anchor="sect-7.1" title="The Pulse Header (rttp)">
      <t>The pulse header is the fixed 128-octet structure that carries an rttp pulse.  Its fields are fixed-offset, so a reader validates a header with fixed comparisons rather than by parsing a variable layout.</t>
      <artwork>
Offset  Len  Field         Description
0x00     4   RTTP_MAGIC    0x52545450 (ASCII &quot;RTTP&quot;)
0x04    16   VERSION_ID    Format version; 130 in this revision
0x14    16   SEQUENCE_ID   Monotonic per-sender pulse index
0x24    16   TIMESTAMP     Absolute emission time in nanoseconds
0x34     1   TTL_PULSE     Hop count; a receiver decrements and
                           drops the pulse at zero
0x35     1   PRIORITY      Operator-assigned scheduling weight
0x36    16   ROUTE_SHARD   The derived address of the subject
                           (Section 4.4)
0x46    32   AID_ORIGIN    The subject&#x27;s AID (Section 2)
0x66    26   (extension)   The extension block of Section 7.1.1;
                           all zero when absent
      </artwork>
      <section anchor="sect-7.1.1" title="The Extension Block">
      <t>The 26 octets at offsets 0x66-0x7F were reserved and all-zero in versions before the extension.  The extension block occupies them without moving or redefining any earlier field, and VERSION_ID is not incremented: implementations that read only offsets 0x00-0x65 continue to validate unchanged, because the bytes they have not read were previously zero and remain ignorable.</t>
      <artwork>
Offset  Len  Field         Description
0x66     1   SPEC_REV      0 = pre-extension (block all zero);
                           1 = this revision
0x67     1   FLAGS         bit 0 = URI_ANCHORED; all other bits
                           MUST be zero
0x68     1   ACTION_LEN    Significant ACTION bytes; 0 = action
                           omitted
0x69    16   ACTION        The action token (Section 4.1),
                           lowercase US-ASCII, right-padded with
                           0x00
0x79     7   RESERVED      MUST be all zero
      </artwork>
      <t><strong>URI_ANCHORED.</strong>  Set when the frame&#x27;s ROUTE_SHARD was derived from a URI authority (Section 4.4) rather than from any local artefact.  Implementations that route between nodes MUST require URI_ANCHORED to be set; when it is clear, the ROUTE_SHARD carries no globally routable semantics and MAY be used only for dispatch local to a single sender.</t>
      <t><strong>The ACTION field.</strong>  The action of an rttp URI is an open set (Section 4.1); this document deliberately defines no enumeration of verbs, because enumerating an open set would close it.  Permitted characters are written to the field verbatim as US-ASCII; the significant length is written to ACTION_LEN; remaining bytes MUST be 0x00.  A frame with ACTION_LEN greater than 16 MUST be rejected.  ACTION_LEN = 0 means the action is omitted and the default operation of Section 4.3 applies.  ACTION and URI_ANCHORED are independent: a frame may carry either, both, or neither.</t>
      <t><strong>Unknown verbs.</strong>  Because the action space is open, a receiver will encounter verbs it does not recognise.  On encountering an unrecognised action verb, an implementation MUST NOT infer safety from the default-operation statement of Section 4.3: the verb MUST be treated as having unknown safety and either require explicit authorisation under the local security policy or be rejected (Section 9).</t>
      <t><strong>Rejection rules (fail closed).</strong>  A receiver MUST reject a frame if any of the following holds: the ACTION field contains characters outside the set of Section 4.1, exceeds 16 significant bytes, or carries non-zero padding; SPEC_REV is outside the known set; SPEC_REV is 0 and the extension block is not all zero; or SPEC_REV is 1 and RESERVED is not all zero or unknown FLAGS bits are set.</t>
    </section>
    <section anchor="sect-7.1.2" title="Time Fields of the Pulse">
      <t>Three fields of the pulse header carry time and order.  Their semantics are deliberately narrow: a pulse is a claim of intent, and the only freshness that can authorize anything rides the answer side (Section 6); the pulse&#x27;s time fields make the claim&#x27;s moment checkable, not the subject&#x27;s validity.</t>
      <t><strong>TIMESTAMP.</strong>  The 16-octet field at offset 0x24 is an unsigned big-endian count of nanoseconds since the Unix epoch (1970-01-01T00:00:00Z), the instant at which the pulse was emitted.  A receiver that subtracts TIMESTAMP from its own clock obtains the pulse&#x27;s age offline, from the bytes alone: a pulse states how old it is, whatever channel carried it.  A receiver MUST NOT treat TIMESTAMP, or the age it yields, as a statement about the subject&#x27;s standing; the moment a pulse claims becomes decision-relevant only when it is checked against the lease of an answer.  Deployments MAY refuse pulses older than a locally configured bound; the bound is a deployment choice, as the lease window of Section 6.1 is.</t>
      <t><strong>TTL_PULSE.</strong>  The one-octet hop count bounds a pulse&#x27;s forwarding life.  A sender MUST set TTL_PULSE to at least 1 when the pulse is intended to be forwarded; a receiver MUST NOT forward a pulse received with TTL_PULSE 0, and MUST decrement the field before forwarding.  Verification deployments that consume pulses where they receive them place no trust in this field.</t>
      <t><strong>SEQUENCE_ID.</strong>  The 16-octet monotonic per-sender pulse index orders a sender&#x27;s own emissions.  A sender SHOULD assign values that never repeat and never decrease over the life of the AID_ORIGIN; a receiver MAY use the (AID_ORIGIN, SEQUENCE_ID) pair to detect duplicate or reordered delivery among the pulses it has observed.  The field carries no cross-sender meaning and no global ordering.</t>
    </section>
    </section>
    <section anchor="sect-7.2" title="The Attestation Envelope (iqa)">
      <t>The attestation envelope is the fixed 128-octet answer frame that carries an iqa attestation answer: the standing verdict, its lease, and its authentication.</t>
      <artwork>
Offset  Len  Field         Description
  0      4   magic         0x49 0x51 0x41 0x45 (ASCII &quot;IQAE&quot;)
  4      1   version       0x01 (this revision)
  5      1   algorithm     0x01 = HMAC-SHA256; 0x00 invalid;
                           other values undefined in version 1
  6      2   flags         unsigned, big-endian; unassigned;
                           sent as 0x0000
  8      8   lease_expiry  unsigned, big-endian; Unix seconds;
                           the instant until which the answer
                           counts as fresh (Section 6.1)
 16     16   intent_shard  ROUTE_SHARD of the subject
                           (Section 4.4)
 32     32   attestation   HMAC-SHA256 over the frame (below)
 64      8   organ         exactly 8 octets of US-ASCII
 72      8   nonce         unsigned, big-endian; unique per
                           verdict issued
 80      1   standing      the verdict state (below)
 81     15   reserved      MUST be all zeros
 96     32   extension     MUST be all zeros in version 1
      </artwork>
      <t><strong>The standing byte.</strong>  The octet at offset 80 takes one of four values, a closed set fixed in this document: 0x00 (ghost), 0x01 (probation), 0x02 (radiant), 0x03 (genesis).  No other value is valid.  A receiver MUST reject a frame whose standing byte is outside this set.  The set is closed in version 1; extending it requires a revision of this document.  The semantics of the states — what each means, and how a subject moves between them — are the business of the reference specification, not of this document; this document fixes only the wire encoding.</t>
      <t><strong>Canonical rule.</strong>  The attestation field covers the entire frame with the attestation field itself zeroed, keyed as specified by HMAC <xref target="RFC2104"/>:</t>
      <artwork>
attestation = HMAC-SHA256(key,
    frame[0:32] || 0x00*32 || frame[64:128])
      </artwork>
      <t>Covering the full frame authenticates the organ tag, the nonce, and the standing byte as well: a rewrite of the named answerer, the verdict state, or a replayed frame with a swapped standing does not survive verification.</t>
      <t><strong>Verification procedure.</strong>  A receiver: (1) rejects the frame if its length is not 128, its magic is not &quot;IQAE&quot;, its version is not 1, its algorithm is not 0x01, its standing byte is outside the closed set, its reserved or extension fields are not all zero; (2) rejects the frame if lease_expiry is earlier than the current time, checked against the receiver&#x27;s own clock (Section 6.1); (3) copies the frame, zeroes bytes 32..63, computes HMAC-SHA256 with the organ&#x27;s key material — carried by the verifier per <xref target="IQA-SPEC"/>, with no directory and no network call — and compares in constant time; (4) interprets the standing byte.</t>
      <t><strong>Security properties.</strong>  Replay is mitigated by lease_expiry and by nonce uniqueness per organ; receivers SHOULD reject a repeated (organ, nonce) pair within one lease window.  The algorithm byte exists so that the keyed hash can be replaced without a frame redesign; 0x01 is the only defined value of version 1.  Section 12 compares this construction with portable attestation formats built on general parser stacks: the envelope trades expressiveness for fixed-offset determinism, so that a verifier with nothing but SHA-256 <xref target="FIPS180"/> and a key can verify with zero dependencies.</t>
    <section anchor="sect-7.2.1" title="Test Vector AE128-VECTOR-1">
      <t>Any implementation MUST reproduce the following frame byte for byte from the parameters alone, and MUST accept the frame after a round trip.</t>
      <artwork>
authority      = f3b2a1c4.pillar.example   (the example of
                                            Section 4.1)
ROUTE_SHARD    = SHA-256(ASCII(authority))[0:16]
               = 557c8154d3780cb78cc5fa1bd72b331c
organ key      = 32-byte US-ASCII test key:
                 &quot;PLSF-TEST-ORG-KEY-00012345678901&quot;
                 (a label, not a name dependency)
version        = 0x01        algorithm = 0x01
standing       = 0x02 (radiant)          flags = 0x0000
lease_expiry   = 1798761600              (2027-01-01T00:00:00Z)
organ          = &quot;ORG-TEST&quot;              nonce = 1
reserved/extension/attestation fields = zero before signing
magic          = &quot;IQAE&quot;

Resulting frame (128 octets):

  0  49 51 41 45 01 01 00 00 00 00 00 00 6b 36 ec 80
 16  55 7c 81 54 d3 78 0c b7 8c c5 fa 1b d7 2b 33 1c
 32  4b d1 4b 6a e7 b0 09 04 98 62 94 a3 26 a0 f0 25
 48  58 47 18 4f f2 c9 18 55 39 d4 86 3e fb 84 59 6a
 64  4f 52 47 2d 54 45 53 54 00 00 00 00 00 00 00 01
 80  02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 96  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
112  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

attestation (bytes 32..63) =
  4bd14b6ae7b00904986294a326a0f0255847184ff2c9185539d4863efb84596a
      </artwork>
    </section>
    </section>
    </section>
  <section anchor="sect-8-response" title="Attestation Response Semantics">
      <t>An attestation response — the outcome of the verification of Section 7.2 as consumed by clients of Section 5.5 — carries two fields: a refusal reason and a grant reference.  This section defines both; the vocabulary has been exercised by deployed implementations and public conformance runs (Section 12).</t>
    <section anchor="sect-8.1" title="Refusal Reasons">
      <t>The refusal reason is null when there is no refusal: the response is a permit, and the answer may be relied on under the rules of Section 6.  A null refusal reason is the only representation of &quot;permitted&quot;; there is no affirmative &quot;granted&quot; value.</t>
      <t>For a refusal, the reason is exactly one value from the following closed set, and it is the first value in the list whose condition applies (the priority order is part of this definition):</t>
      <dl>
        <dt>evidence_binding_mismatch</dt>
        <dd>The presented evidence is bound to a different grant or subject than the one in the request.</dd>
        <dt>evidence_expired</dt>
        <dd>The lease of the presented evidence has expired (Section 6.1).</dd>
        <dt>authority_not_determined</dt>
        <dd>The authority for the subject could not be determined at answer time — because the organ or the authority source could not be reached, or because the only observation available predates the request and therefore establishes nothing about the present.  An unreachable source is refused under this value, never read as assent.</dd>
        <dt>authority_revoked</dt>
        <dd>The authority for the subject has been revoked.</dd>
        <dt>operation_not_permitted</dt>
        <dd>The requested operation is not permitted for this subject or grant, for reasons other than the four above.</dd>
      </dl>
      <t>The set is closed: implementations MUST NOT emit values outside it, and MUST NOT reinterpret an emitted value to mean something else.  A response that reports an outcome without its reason is not conformant: the reason is what makes a refusal auditable.</t>
    </section>
    <section anchor="sect-8.2" title="Grant Reference">
      <t>Every response — permit or refusal — names the authorisation it relied on.  The grant reference is a structure with the following members:</t>
      <artwork>
grant                identifier of the grant as issued
evidence_id          identifier of the evidence bound to it
issued_at_ms         grant issue instant, Unix milliseconds
expires_at_ms        grant expiry instant, Unix milliseconds
observation_as_of_ms the as-of instant of the standing
                     observation the answer relied on, or
                     null
      </artwork>
      <t>The observation member deserves its own rule, because it is where an implementation can quietly inflate an answer: <strong>observation_as_of_ms is null whenever the observation the answer relied on is absent or not fresh</strong>, even if a later, successful observation is available at answer time.  A diagnostic or opportunistic read performed after the relied-on evidence expired does not backfill the member: diagnostic reads do not participate in authorisation and do not renew evidence.  The member states the age of what the answer actually relied on, not the freshness of the freshest thing the implementation happened to see.</t>
    </section>
    <section anchor="sect-8.3" title="Provenance of the Vocabulary">
      <t>The closed set and the priority order of this section are defined by this document.  The vocabulary has been exercised in public conformance runs recorded by the Agent-Authority-Conformance laboratory of the Linux Foundation Decentralized Trust (Section 12); the laboratory records runs and certifies nothing.</t>
    </section>
    </section>
  <section anchor="sect-9-security" title="Security Considerations">
      <t>The security properties of the two schemes share one foundation, and the following statements apply to both of them.</t>
      <ul>
        <li><strong>No lookup.</strong>  Neither scheme resolves through DNS, and neither performs a lookup when a URI is used: there is no resolver to poison, no registration to hijack, and no query metadata to observe on a resolution path.</li>
        <li><strong>No secrets in the URI.</strong>  Neither scheme defines userinfo, so credentials cannot be carried in one.  Operators and deployments MUST NOT place secrets in any component: a URI is expected to be logged, quoted, and rendered.</li>
        <li><strong>Unknown actions carry unknown safety.</strong>  The safe default operations of Sections 4.3 and 5.3 apply to the omitted-action forms only.  An implementation MUST NOT infer safety for an unrecognised action verb; it MUST treat the verb as having unknown safety and either require explicit authorisation under the local security policy or reject it.</li>
        <li><strong>No confidentiality, authentication, or transport security.</strong> Neither scheme protects a URI in transit, and neither turns a URI into a proof: signing is not encryption, and a URI is not a signature.</li>
        <li><strong>Parsing establishes nothing.</strong>  Neither the syntax nor any component of a URI of either scheme is evidence about its subject, and a client MUST NOT present a parsed or rendered URI as if it were evidence (Sections 4.5 and 5.5).</li>
        <li><strong>Fail closed, everywhere.</strong>  Both wire formats of Section 7 reject unknown versions, unknown fields, and wrong lengths rather than skipping them; the response semantics of Section 8 report an unreachable source as a refusal rather than as assent; and the lease of Section 6 expires by default.  At no decision point does silence, absence, or an unrecognised input resolve to &quot;yes&quot;.</li>
      </ul>
      <t>The scheme-specific considerations follow.</t>
    <section anchor="sect-9.1" title="The rttp scheme">
      <ul>
        <li>An rttp URI is a <strong>claim of intent directed at a subject</strong>.  The derived address is an <strong>entry fingerprint, not a proof of identity</strong>.  Identity is carried by the subject&#x27;s AID, and any attestation of it is carried separately.</li>
        <li><strong>The 128-bit truncation, stated honestly.</strong>  The derived address is the first 16 octets of a SHA-256 digest (Section 4.4).  What the construction defends against is substitution of the authority in use — finding a second authority that yields the same address — which costs approximately 2^128 operations.  It does not defend against collision search in the abstract: a birthday collision exists at approximately 2^64, and reaching it additionally requires a second, independent party to adopt the colliding label — two gates, not one.  These bounds are the design&#x27;s honest account, not a guarantee of collision-freedom.</li>
        <li><strong>Display forms are not identifiers.</strong>  The 8-hex-digit display forms of both schemes (the rttp hash-intent and the short iqa subject form) fix a 32-bit space, whose birthday bound — collisions expected after roughly 2^16 adoptions — makes them unfit as sole identifiers.  They are display conveniences over the full hash forms and MUST NOT be used as the sole identifier of a subject (Sections 4.1 and 5.1).</li>
        <li>The authority is <strong>pseudonymous, not anonymous</strong>.  It is a stable name and will appear in logs, in caches, and in anything that quotes the URI.  Whether that name is linkable to a subject is a property of the operator&#x27;s naming choices, not of the scheme.</li>
      </ul>
    </section>
    <section anchor="sect-9.2" title="The iqa scheme">
      <ul>
        <li>An iqa URI is a <strong>claim about the attestation standing of a named subject</strong>.  Neither the syntax nor any component of the URI is evidence of standing.</li>
        <li><strong>Seal forgery.</strong>  Standing is carried by a keyed message authentication code over the subject&#x27;s identity material and its deployment parameters (Section 7.2), not by the URI; no key material is ever present in an iqa URI.</li>
        <li><strong>Subject spoofing.</strong>  A seal presented for one subject fails binding when replayed for another, because the binding covers hardware and deployment parameters of the subject; a client MUST NOT treat a syntactically valid subject as a verified one.</li>
        <li><strong>Silence is not assent.</strong>  An endpoint that is unreachable, times out, or returns an error MUST NOT be read as affirmative standing: absence of evidence is not evidence of compliance.  The refusal vocabulary of Section 8.1 gives this rule a wire representation: the value authority_not_determined.</li>
        <li><strong>Lease and replay.</strong>  The lease of Section 6 bounds how long an answer may be relied on; the nonce of Section 7.2 makes each verdict unique per organ.  A repeated (organ, nonce) pair within one lease window SHOULD be rejected.</li>
        <li><strong>Linkability and disclosure of interest.</strong>  An iqa URI names the subject being attested, so citing one discloses which identity is of interest, and querying several organs for the same subject is trivially correlatable.  <strong>This scheme cannot be used for anonymous reference.</strong>  Deployments SHOULD prefer the routing-hash form over readable labels, SHOULD NOT encode personal identifiers in the action, and SHOULD treat iqa URIs in logs as an identity assertion.</li>
        <li><strong>Downgrade and scheme confusion.</strong>  No &quot;iqas&quot; variant exists and no fallback is defined.  A client that does not implement this scheme MUST fail closed and MUST NOT silently rewrite an iqa URI as some other scheme.</li>
        <li><strong>Detection of observers.</strong>  A measurement requested by the audit action compares observed execution timing against an expected path: execution slower than predicted is treated as evidence of an attached observer, and measurable deviation is itself the detector.  This is a property of the answering organ, not of the URI syntax.</li>
        <li><strong>Replay across epochs.</strong>  Standing material is rotated on a defined cycle, so a previously valid answer can become invalid without any change to the URI; a client MUST NOT treat a cached answer as current indefinitely.</li>
        <li><strong>Cryptographic suite.</strong>  The current construction uses a keyed symmetric hash rather than a public-key signature, and is therefore not directly affected by quantum algorithms that break factoring or discrete logarithms.</li>
      </ul>
    </section>
    </section>
  <section anchor="sect-10-privacy" title="Privacy Considerations">
      <t>The privacy properties of the two schemes share one foundation: no component is defined for a query string, so neither scheme offers a channel for a page to smuggle unrelated data into a request, and using a URI of either scheme does not by itself cause network traffic to a third party; the authority is a stable pseudonym, expected to be logged, quoted and rendered, and readable labels are a naming choice rather than a scheme property.</t>
      <t>Derivation, not assignment, has a privacy consequence of its own: because addresses are computed from labels an operator already controls and no registry assigns or lists them, the set of participants is not enumerable from the scheme, and there is no registration record to subpoena, scrape, or leak.  And because using a URI involves no query, use leaves no resolution-time trail: nothing observes that a particular authority was derived or cited.</t>
      <t>What remains correlatable is stated plainly.  The authority itself is a stable pseudonym whose linkability is the operator&#x27;s choice (Section 9.1).  For &quot;iqa&quot;, citing a URI discloses which subject is of interest, and the disclosure considerations of Section 9.2 apply.  The lease of Section 6 bounds how long a cached attestation answer remains reliable inside a verifier; it does not bound how long a log retains the URI that produced the request, which is the deployer&#x27;s retention policy.</t>
      <t>A client that renders such a URI SHOULD avoid prefetching, handing the string to third-party services, or otherwise distributing it beyond what the user&#x27;s action requires.</t>
    </section>
  <section anchor="sect-11-iana" title="IANA Considerations">
      <t>IANA is requested to register the two URI schemes below, &quot;rttp&quot; and &quot;iqa&quot;, in the &quot;Uniform Resource Identifier (URI) Schemes&quot; registry, following the template of Section 7.4 of <xref target="RFC7595"/> and the guidance of <xref target="RFC8126"/>.  The templates below are complete.  If this document is approved for publication as an RFC, IANA is requested to point both registry entries at that RFC.</t>
      <t>This document creates no new IANA registries.  The wire formats of Section 7 are self-describing — each begins with a fixed magic value and an explicit version field — and the refusal vocabulary of Section 8 is a closed set defined entirely within this document.</t>
    <section anchor="sect-11.1" title="The &quot;rttp&quot; URI Scheme">
      <t>Scheme name:  rttp</t>
      <t>Status:  Provisional</t>
      <t>Applications/protocols that use this scheme name:  URIs of this scheme name a claim of intent directed at an identified subject. Applications include intent-addressed requests between autonomous software agents and the client-side handling of such URIs by protocol handlers in browsers and operating systems.  The scheme defines addressing only; it does not define a transport or a discovery mechanism.</t>
      <t>Contact:  ShaoBao Li &lt;mailto:lee@rttp.com&gt;</t>
      <t>Change controller:  RTTP.COM Organization</t>
      <t>References:  This document, and AICENT-002, &quot;the rttp URI scheme&quot;, &lt;https://rttp.com/URI/&gt;.</t>
      <t>Registered with CRI scheme number 27.</t>
    </section>
    <section anchor="sect-11.2" title="The &quot;iqa&quot; URI Scheme">
      <t>Scheme name:  iqa</t>
      <t>Status:  Provisional</t>
      <t>Applications/protocols that use this scheme name:  URIs of this scheme name are subject-attestation references: an iqa URI names the attestation standing of a subject as reported by one of three named authority organs, without carrying the underlying cryptographic proof.  It is used by the reference implementations and by tools that cite an attestation in a document, a configuration file or a log.  The scheme defines addressing and client behaviour only; it does not define a transport, a discovery mechanism, or the attestation algorithm.</t>
      <t>Contact:  ShaoBao Li &lt;mailto:lee@iqa.org&gt;</t>
      <t>Change controller:  IQA.ORG Organization</t>
      <t>References:  This document, and AICENT-009, &quot;Identity Quality Assurance, the iqa URI scheme specification&quot;, &lt;https://iqa.org/URI/&gt;.</t>
      <t>Registered with CRI scheme number 28.</t>
    </section>
    </section>
  <section anchor="sect-12-related" title="Related Work">
      <t>This section positions the two schemes against the specifications they are most often compared with.  None of the relationships below is a normative dependency.</t>
      <t><strong>Decentralized Identifiers (DIDs)</strong> <xref target="W3C-DID"/> anchor a subject&#x27;s identity in a resolvable, method-specific identifier, paired with Verifiable Credentials for portable claims.  The schemes of this document answer different questions: an rttp address is not assigned and not resolvable — it is derived from the authority string and consulted through no method, no registry, and no network call — and an iqa answer is bound to a named organ rather than to a credential issuer.  The two compose rather than compete: a deployment MAY anchor operator identity in DIDs while rttp addresses intents and iqa answers standing.</t>
      <t><strong>Transport and authorization infrastructure.</strong>  The schemes define addressing and verification semantics, not transport: the frames of Section 7 may be carried by HTTP <xref target="RFC9110"/>, TLS <xref target="RFC9846"/>, QUIC <xref target="RFC9000"/>, gRPC, or any channel that preserves frame integrity; no transport is required and none is excluded.  Deployment authorization machinery — identity providers, OAuth 2.0 scopes and grants <xref target="RFC6749"/>, mTLS client authentication, or capability tokens — belongs to the calling layer (Section 6.2); the frames carry intent claims and verification answers, and no bearer credential.</t>
      <t><strong>CBOR Web Token (CWT)</strong> <xref target="RFC8392"/> and <strong>Remote Attestation procedures (RATS)</strong> <xref target="RFC9334"/> solve portable attestation and evidence with general parser stacks and rich claim vocabularies.  The attestation envelope of Section 7.2 trades expressiveness for fixed-offset determinism: a verifier with nothing but SHA-256 and a key can verify with zero dependencies.  Where rich claims are needed, those formats remain the right tools.</t>
      <t><strong>The W3C AI Agent Protocol Community Group</strong> <xref target="W3C-AP-CG"/> has discussed the distinction this document&#x27;s claims follow: evidence freshness, authority validity, and action-time authorization as three separately scoreable axes.  This document claims the first two (Sections 6 and 8) and deliberately does not claim the third: authorization decisions belong to the calling layer, and the schemes&#x27; job is to make the verification answers trustworthy and cheap.  Appendix A complements this section with a per-exchange cost comparison against alternative stacks.</t>
      <t><strong>Agent Authorization Envelope (AAE)</strong> <xref target="AAE"/> specifies a machine-evaluable authorization container for autonomous agents: what the agent is mandated to do, under what constraints, and for how long.  AAE answers what an agent may do; the schemes of this document answer where intent is addressed and whether the claimant is verified.  The two compose naturally — an authorization envelope can name actions on subjects addressed by rttp URIs and cite iqa attestations as evidence — and neither depends on the other.</t>
      <t><strong>Agent Passport System (APS)</strong> <xref target="APS"/> specifies verifiable authority, lifecycle, enforcement and evidence for AI agents, separating agent identity, represented principal, delegated authority, policy approval and observed results.  The attestation response vocabulary of Section 8 is stated in the form in which it was exercised by the lease-revocation-axes corpus of the Agent-Authority-Conformance laboratory of the Linux Foundation Decentralized Trust, whose initial corpus builds on this family of specifications; independent runs against that corpus, including the author&#x27;s own, are public.  The laboratory records runs and does not certify implementations; the citation reflects that posture.</t>
    </section>
  <section anchor="sect-13-i18n" title="Internationalization Considerations">
      <t>The canonical form of a URI in either scheme is lowercase US-ASCII, and no international form is defined: a client MUST NOT map a Unicode label to its ASCII form (for example, by case folding or by applying an IDNA-style transformation) in order to accept it, and MUST NOT render such a URI as an IRI.  This is deliberate: with no host to resolve there is no need for a label-to-ASCII transformation, and permitting one would introduce a second way to write one address.</t>
    </section>
  <section anchor="sect-14-ack" title="Acknowledgements">
      <t>The author thanks those who commented on earlier revisions of this document for their attention to the client-behaviour requirements, which are the part of this specification most likely to be misimplemented.</t>
      <t>The author further thanks the independent implementers and reviewers who have exercised the schemes and the response vocabulary of Section 8 in public conformance runs; the runs are cited in Section 12, and the reviewers of this revision will be recorded here as their reports arrive.</t>
    </section>
  </middle>
  <back>
  <references>
    <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
        <front>
          <title>HMAC: Keyed-Hashing for Message Authentication</title>
          <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
          <author fullname="M. Bellare" initials="M." surname="Bellare"/>
          <author fullname="R. Canetti" initials="R." surname="Canetti"/>
          <date year="1997" month="February"/>
        </front>
        <seriesInfo name="RFC" value="2104"/>
        <seriesInfo name="DOI" value="10.17487/RFC2104"/>
      </reference>
      <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
          <author fullname="R. Fielding" initials="R." surname="Fielding"/>
          <author fullname="L. Masinter" initials="L." surname="Masinter"/>
          <date year="2005" month="January"/>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>
          <author fullname="D. Crocker" initials="D." surname="Crocker"/>
          <author fullname="P. Overell" initials="P." surname="Overell"/>
          <date year="2008" month="January"/>
        </front>
        <seriesInfo name="STD" value="68"/>
        <seriesInfo name="RFC" value="5234"/>
        <seriesInfo name="DOI" value="10.17487/RFC5234"/>
      </reference>
      <reference anchor="RFC7595" target="https://www.rfc-editor.org/info/rfc7595">
        <front>
          <title>Guidelines and Registration Procedures for URI Schemes</title>
          <author fullname="D. Thaler" initials="D." surname="Thaler"/>
          <author fullname="T. Hansen" initials="T." surname="Hansen"/>
          <author fullname="T. Hardie" initials="T." surname="Hardie"/>
          <date year="2015" month="June"/>
        </front>
        <seriesInfo name="BCP" value="35"/>
        <seriesInfo name="RFC" value="7595"/>
        <seriesInfo name="DOI" value="10.17487/RFC7595"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." surname="Fielding"/>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
          <author fullname="J. Reschke" initials="J." surname="Reschke"/>
          <date year="2022" month="June"/>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="FIPS180" target="https://doi.org/10.6028/NIST.FIPS.180-4">
        <front>
          <title>Secure Hash Standard (SHS)</title>
          <author><organization>National Institute of Standards and Technology (NIST)</organization></author>
          <date year="2015" month="August"/>
        </front>
        <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
      </reference>
  </references>
  <references>
    <name>Informative References</name>
      <reference anchor="IQA-SPEC" target="https://iqa.org/URI/v1.3.1/">
        <front>
          <title>Identity Quality Assurance, the iqa URI scheme specification, v1.3.1 (frozen snapshot)</title>
          <author fullname="S. Li" initials="S." surname="Li"/>
          <date year="2026" month="October"/>
        </front>
      </reference>
      <reference anchor="IQA-DEMO" target="https://iqa.org/demo/">
        <front>
          <title>Live demonstrations of the iqa scheme</title>
          <author fullname="S. Li" initials="S." surname="Li"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="AAE" target="https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/">
        <front>
          <title>Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents</title>
          <author fullname="L. K. Kroehl" initials="L." surname="Kroehl"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-kroehl-agentic-trust-aae-02"/>
      </reference>
      <reference anchor="APS" target="https://datatracker.ietf.org/doc/draft-pidlisnyi-aps/">
        <front>
          <title>Agent Passport System (APS): Verifiable Authority, Lifecycle, Enforcement, and Evidence for AI Agents</title>
          <author fullname="T. Pidlisnyi" initials="T." surname="Pidlisnyi"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-pidlisnyi-aps-04"/>
      </reference>
      <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
        <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 year="2018" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8392"/>
        <seriesInfo name="DOI" value="10.17487/RFC8392"/>
      </reference>
      <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
        <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 year="2023" month="January"/>
        </front>
        <seriesInfo name="RFC" value="9334"/>
        <seriesInfo name="DOI" value="10.17487/RFC9334"/>
      </reference>
      <reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6749">
        <front>
          <title>The OAuth 2.0 Authorization Framework</title>
          <author fullname="D. Hardt" initials="D." surname="Hardt"/>
          <date year="2012" month="October"/>
        </front>
        <seriesInfo name="RFC" value="6749"/>
        <seriesInfo name="DOI" value="10.17487/RFC6749"/>
      </reference>
      <reference anchor="RFC9846" target="https://www.rfc-editor.org/info/rfc9846">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date year="2026" month="July"/>
        </front>
        <seriesInfo name="RFC" value="9846"/>
        <seriesInfo name="DOI" value="10.17487/RFC9846"/>
      </reference>
      <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." surname="Thomson"/>
          <date year="2021" month="May"/>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC2606" target="https://www.rfc-editor.org/info/rfc2606">
        <front>
          <title>Reserved Top Level DNS Names</title>
          <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
          <author fullname="A. Panitz" initials="A." surname="Panitz"/>
          <date year="1999" month="June"/>
        </front>
        <seriesInfo name="BCP" value="32"/>
        <seriesInfo name="RFC" value="2606"/>
        <seriesInfo name="DOI" value="10.17487/RFC2606"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <date year="2017" month="June"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
      <reference anchor="W3C-AP-CG" target="https://www.w3.org/community/agentprotocol/">
        <front>
          <title>AI Agent Protocol Community Group</title>
          <author><organization>World Wide Web Consortium (W3C)</organization></author>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="W3C-DID" target="https://www.w3.org/TR/2022/REC-did-core-20220719/">
        <front>
          <title>Decentralized Identifiers (DIDs) v1.0</title>
          <author><organization>World Wide Web Consortium (W3C)</organization></author>
          <date year="2022" month="July"/>
        </front>
        <seriesInfo name="W3C Recommendation" value="did-core-20220719"/>
      </reference>
  </references>
  <section anchor="sect-appendix-a" title="Comparison with Alternative Agent-to-Agent Stacks">
      <t>This appendix is informational.  It compares one concrete question-and-answer exchange — &quot;may this subject, identified only by its shard, perform this intent?&quot; — across four agent-to-agent stacks: A2A over HTTPS with OAuth 2.0, A2A with DID/VC identity, A2A with a capability token, and the rttp/iqa pair specified in this document.  Each stack is scored across eleven fields that a trust-bearing exchange must address: discovery, identity, intent, authentication, attestation, authorization, delegation, replay, revocation, audit, and routing.</t>
      <t>The counts are per single exchange and assume a cold, honest deployment of each stack.  &quot;Network round-trips&quot; counts messages that leave the verifying party.  &quot;Third parties&quot; counts distinct online services whose response the exchange depends on.  &quot;Real cryptographic steps&quot; counts operations whose inputs and keys are local and whose result is checkable offline afterwards.</t>
      <table>
        <name>Totals per stack (one exchange)</name>
        <thead>
          <tr>
            <th>Stack</th>
            <th>Network round-trips</th>
            <th>Third parties</th>
            <th>Real crypto steps</th>
            <th>Offline-verifiable result</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>A2A + HTTPS/OAuth</td><td>5</td><td>8</td><td>0</td><td>no</td></tr>
          <tr><td>A2A + DID/VC</td><td>6</td><td>8</td><td>0</td><td>no</td></tr>
          <tr><td>A2A + capability token</td><td>2</td><td>3</td><td>0</td><td>no</td></tr>
          <tr><td>A2A + rttp/iqa (this document)</td><td>0</td><td>0</td><td>7</td><td>yes</td></tr>
        </tbody>
      </table>
      <table>
        <name>Per-field cost (network round-trips &#183; third parties)</name>
        <thead>
          <tr>
            <th>Field</th>
            <th>HTTPS/OAuth</th>
            <th>DID/VC</th>
            <th>Capability</th>
            <th>rttp/iqa</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>discovery</td><td>1 &#183; 3</td><td>1 &#183; 2</td><td>1 &#183; 2</td><td>0 &#183; 0</td></tr>
          <tr><td>identity</td><td>0 &#183; 0</td><td>1 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>intent</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>authentication</td><td>1 &#183; 2</td><td>1 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>attestation</td><td>0 &#183; 0</td><td>0 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>authorization</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>delegation</td><td>1 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>replay</td><td>0 &#183; 0</td><td>1 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>revocation</td><td>1 &#183; 1</td><td>1 &#183; 1</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>audit</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td><td>0 &#183; 0</td></tr>
          <tr><td>routing</td><td>1 &#183; 1</td><td>1 &#183; 1</td><td>1 &#183; 1</td><td>0 &#183; 0</td></tr>
          <tr><td>totals</td><td>5 &#183; 8</td><td>6 &#183; 8</td><td>2 &#183; 3</td><td>0 &#183; 0</td></tr>
        </tbody>
      </table>
      <t>Three caveats keep the comparison honest.  First, the capability-token stack is also offline at verification time; its weakness is different — a capability confers authority but states nothing about the bearer&#x27;s standing, and its only revocation is expiry.  Second, DID/VC provides strong identity and portable audit artifacts; its freshness and revocation paths re-introduce network calls to the issuer or a status list.  Third, rttp/iqa intentionally omits discovery and delegation in this revision: routing is derived rather than resolved, and delivery of a frame to its shard remains an operator concern.  The counts describe the verification of one answer, not the provisioning of the system that produced it.</t>
      <t>The structural claim the tables support is narrow: in the rttp/iqa stack the material needed to decide — and, after the fact, to re-verify — a standing verdict is contained entirely in the two frames, so no online party is required at either moment.  Whether that property is worth the corresponding loss of discovery infrastructure is a deployment decision, not a claim of this document.</t>
    <section anchor="sect-appendix-a-1" title="Delegation and Attenuation">
      <t>The single-exchange comparison above deliberately excludes delegation.  This section records a second, harder experiment: Agent A grants Agent B authority to approve invoices up to EUR 10,000; Agent B attenuates that grant to EUR 2,000 and further delegates execution to a Payment Agent.  Each stack is observed on nine delegation-specific fields: the grant, the attenuation, the further delegation, chain verification, subject binding, standing, replay, revocation, and the audit artifact.  The scorecard below records all nine fields, together with one cross-cutting observation — where each stack&#x27;s delegation root lives.  A live demonstration of this delegation experiment, covering all nine fields, is public at the reference specification&#x27;s site <xref target="IQA-DEMO"/>, among the further live demonstrations hosted there.  The observations are informational and indicate typical deployments, not normative requirements of any stack.</t>
      <table>
        <name>Delegation scorecard (EUR 10,000 granted, EUR 2,000 delegated onward)</name>
        <thead>
          <tr>
            <th>Field</th>
            <th>HTTPS/OAuth</th>
            <th>DID/VC</th>
            <th>Capability</th>
            <th>rttp/iqa</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>the grant</td><td>a coarse scope string; amounts are not representable</td><td>A issues a Verifiable Credential to B; the issuer must be reachable</td><td>a root capability minted by the issuer — fully offline</td><td>an intent claim on a derived subject; no amount field in the frame</td></tr>
          <tr><td>the attenuation</td><td>only as custom claims at the authorization server</td><td>chained credential; B becomes issuer of record</td><td>yes — first-class caveat</td><td>no — the frame carries no amount field</td></tr>
          <tr><td>the further delegation</td><td>token exchange, provider-specific</td><td>yes, chained credentials</td><td>yes — third-party caveats</td><td>not specified in this revision</td></tr>
          <tr><td>chain verification</td><td>no — introspection required</td><td>signatures yes; freshness needs the status list</td><td>yes</td><td>yes — envelopes verify offline</td></tr>
          <tr><td>subject binding</td><td>binds to a server identity, not to a derived subject</td><td>DID subject — strong binding</td><td>bearer possession, not an identity assertion</td><td>the derived shard inside each frame — self-certifying on arrival</td></tr>
          <tr><td>standing</td><td>no</td><td>only via a cached issuer credential</td><td>no</td><td>yes — organ-relative standing in the frame</td></tr>
          <tr><td>replay</td><td>token lifetime; in-window replay is the application&#x27;s job</td><td>re-query the issuer or fetch the status list</td><td>expiry plus nonce; in-window replay possible</td><td>lease expiry and a nonce unique per verdict</td></tr>
          <tr><td>revocation</td><td>at the IdP (network); the presented token only, not the chain</td><td>status-list fetch (network)</td><td>expiry only — online revocation would undermine the offline model</td><td>caught at the next verified read; exposure bounded by the lease</td></tr>
          <tr><td>the audit artifact</td><td>no</td><td>yes</td><td>yes</td><td>yes — whole-frame MAC</td></tr>
          <tr><td>delegation root</td><td>the identity provider</td><td>issuer B</td><td>the issuer</td><td>the organ (application-layer composition)</td></tr>
        </tbody>
      </table>
      <t>Three observations.  First, the capability stack is the only one in which attenuation is a native operation; its corresponding weakness is that the credential carries authority without context — no standing, no identity assertion, and revocation only by expiry.  Second, in the rttp and iqa stack the delegation gap is explicit and stated: the AE-128 layout (Section 7.2) allocates no amount field, and delegation is not specified in this revision, so attenuation cannot enter the frame and must be performed at the application layer.  Two compositions have been demonstrated in that role: re-attestation, in which the organ issues a fresh envelope for the delegatee&#x27;s own subject; and a capability wrapper whose root caveat embeds the (subject, intent, organ, standing, time, proof) audit tuple, so that the standing context travels with the attenuated grant.  Both are application-layer work; neither is specified here.  Third, the re-attestation chain has an honest shape limitation worth stating plainly: two envelopes anchored at the same organ are two independent attestations, not a linked proof that B&#x27;s attenuation authorized the Payment Agent&#x27;s envelope.</t>
      <t>The practical conclusion is narrow and symmetrical: for attenuation, the capability construction is the natural tool; for carrying verifiable standing with the grant, the envelopes specified in this document are.  The two are composable, and the composition does not require changes to either frame format.</t>
    </section>
  </section>
  </back>
</rfc>
