<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-noss-jeftovic-groundmark-attestation-00"
     category="exp"
     submissionType="independent"
     version="3"
     xml:lang="en"
     tocInclude="true"
     symRefs="true"
     sortRefs="true">

  <front>
    <title abbrev="Groundmark Attestation">Groundmark Attestation Framework and Identity Service Provider Profile</title>
    <seriesInfo name="Internet-Draft" value="draft-noss-jeftovic-groundmark-attestation-00"/>

    <author fullname="Elliot Noss" initials="E." surname="Noss">
      <organization>Groundmark</organization>
      <address>
        <email>elliot@noss.org</email>
        <uri>https://groundmark.org</uri>
      </address>
    </author>

    <author fullname="Mark Jeftovic" initials="M." surname="Jeftovic">
      <organization>easyDNS Technologies Inc.</organization>
      <address>
        <email>markjr@easydns.com</email>
      </address>
    </author>

    <date year="2026"/>

    <area>Applications</area>
    <workgroup>Independent Submission</workgroup>

    <keyword>identity</keyword>
    <keyword>attestation</keyword>
    <keyword>DNS</keyword>
    <keyword>agents</keyword>
    <keyword>method disclosure</keyword>

    <abstract>
      <t>This document defines the Groundmark attestation framework and
      the profile of Identity Service Providers (IDSPs) that issue
      Groundmark attestations. It is the companion document to the
      Groundmark core protocol, which specifies DNS publication and
      request-signature mechanics. This document specifies the role
      and obligations of Identity Service Providers, a four-level
      taxonomy of attestation strength, an initial vocabulary of
      claim types, the JSON schema and signature construction for
      attestation payloads, the method-disclosure discipline that
      defines an IDSP's accountability obligation, and revocation
      semantics for the attestation layer.</t>

      <t>The core protocol document defines the discovery mechanisms
      (the _agentclaim DNS TXT record and the HTTP retrieval of
      attestation payloads) on which this document depends. Together
      the two documents specify Groundmark.</t>
    </abstract>
  </front>

  <middle>

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

      <t>The Groundmark core protocol
      <xref target="I-D.noss-jeftovic-groundmark-core"/> specifies how
      an agent's signing public key and references to externally
      hosted attestations are published in DNS, and how relying
      parties verify HTTP request signatures using the published key.
      The core protocol intentionally treats attestation content as
      opaque: DNS publishes a reference, the relying party retrieves
      it over HTTPS, and the question of what an attestation says and
      how it should be evaluated is deferred to this document.</t>

      <t>This document specifies that evaluation framework. It
      defines:</t>

      <ul>
        <li>The role of an Identity Service Provider (IDSP), an entity
        that verifies a claim about an operator or agent and publishes
        a signed attestation under the Groundmark framework.</li>
        <li>A four-level taxonomy of attestation strength, from
        cryptographic-only Level 0 through regulatory-grade Level
        3.</li>
        <li>An initial vocabulary of claim types, with structured
        value schemas and registration policy for extensions.</li>
        <li>The JSON schema and canonical signature construction for
        an attestation payload served at a "ref=" URL.</li>
        <li>The method-disclosure obligation: an IDSP's primary duty
        is to accurately characterize the verification it performed,
        not to assert a conclusion. This obligation is what makes
        Groundmark attestations evaluable rather than reducible to
        brand recognition.</li>
        <li>Revocation semantics specific to the attestation layer,
        including fail-mode behaviour for unreachable revocation
        endpoints.</li>
      </ul>

      <t>The design is informed by Kim Cameron's Laws of Identity
      <xref target="Cameron2005"/>, reframed for a setting in which
      the principal whose identity is being attested is an
      organizational operator (or, in the individual-operator case, a
      hosted-identity provider) rather than a human individual
      interacting directly.</t>

      <section anchor="relationship-to-core">
        <name>Relationship to the Core Protocol</name>

        <t>This document depends on the core protocol
        <xref target="I-D.noss-jeftovic-groundmark-core"/> for:</t>

        <ul>
          <li>DNS record format and publication for _agentclaim
          records.</li>
          <li>DNSSEC requirements for all Groundmark DNS lookups.</li>
          <li>The HTTPS retrieval transport for attestation
          payloads.</li>
          <li>Request-signature mechanics, against which an
          attestation is ultimately evaluated.</li>
        </ul>

        <t>A relying party implementing Groundmark MUST implement the
        core protocol. Implementing this document additionally is
        OPTIONAL: a relying party may choose to require only signature
        verification (Level 0) without evaluating attestations, in
        which case the mechanisms in this document are not exercised.
        The core protocol's permissionless default mode remains
        available to all participants.</t>
      </section>

      <section anchor="design-principles">
        <name>Design Principles</name>

        <t>The framework defined here is shaped by three principles,
        in addition to those stated in the core protocol.</t>

        <ul>
          <li>Authenticate the minimum necessary. The right
          attestation level for any transaction is the lowest that
          meets the relying party's legitimate risk profile. The
          framework is designed so that most transactions can proceed
          at Level 0; higher levels are available but not
          encouraged.</li>

          <li>IDSPs attest to methods, not conclusions. An IDSP's
          primary accountability obligation is to characterize what
          verification it performed and to stake its reputation on
          the accuracy of that characterization. The trust decision
          belongs to the relying party. This is what allows a relying
          party to make a contextual judgment rather than a binary
          accept/reject decision based on the IDSP's brand alone.</li>

          <li>No single point of control. The framework permits a
          diversity of IDSPs operating under different trust
          frameworks, jurisdictions, and competence areas. No central
          authority designates which IDSPs are authoritative.
          Recognition of an IDSP for any specific purpose is a
          property of the relying party's policy and, where
          applicable, the relying party's regulatory framework.</li>
        </ul>
      </section>

      <section anchor="non-goals">
        <name>Non-Goals</name>

        <t>This document does not:</t>

        <ul>
          <li>Designate, certify, or otherwise centrally validate
          IDSPs. The framework specifies what an IDSP does and the
          obligations it accepts; recognition is a matter of
          relying-party policy or external trust framework.</li>
          <li>Define the substantive content of any specific
          regulatory framework. Level 3 attestations may exist within
          frameworks (for example, FINTRAC PCMLTFA for Canadian KYC,
          or applicable professional licensing regimes); this document
          specifies how a Level 3 attestation is structured and
          verified, not the underlying regulatory standard.</li>
          <li>Replace any existing credential or attestation system.
          An IDSP MAY use Verifiable Credentials, JWTs, or other
          formats internally; the Groundmark attestation payload is
          the format in which an attestation is presented to a
          Groundmark relying party.</li>
        </ul>
      </section>

      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
        "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
        "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
        "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>",
        "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
        "<bcp14>OPTIONAL</bcp14>" in this document are to be
        interpreted as described in BCP 14 <xref target="RFC2119"/>
        <xref target="RFC8174"/> when, and only when, they appear in
        all capitals, as shown here.</t>
      </section>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>

      <t>The terminology of the core protocol
      <xref target="I-D.noss-jeftovic-groundmark-core"/> applies. The
      following additional terms are used in this document.</t>

      <dl>
        <dt>Attestation</dt>
        <dd>A signed statement by an IDSP that a specific claim about
        an operator or agent has been verified to a stated standard
        using stated methods. Serialized as a JSON document per
        <xref target="schema"/>.</dd>

        <dt>Claim</dt>
        <dd>A bounded predicate about an operator or agent that an
        attestation verifies (for example, "the operator has passed
        FINTRAC tier-basic KYC", or "the operator holds an active
        real-estate licence in Ontario, Canada").</dd>

        <dt>Claim Type</dt>
        <dd>A registered identifier denoting the predicate structure
        of a claim. The initial vocabulary is defined in
        <xref target="claim-types"/>.</dd>

        <dt>Identity Service Provider (IDSP)</dt>
        <dd>A trusted third party that performs verification of a
        claim and publishes a signed attestation. Defined more fully
        in <xref target="idsp-role"/>.</dd>

        <dt>Level</dt>
        <dd>An integer from 0 to 3 indicating the strength of
        verification associated with a Groundmark attestation, as
        defined in <xref target="levels"/>.</dd>

        <dt>Method Disclosure</dt>
        <dd>The structured description, present in every Groundmark
        attestation, of the verification methods the IDSP engaged.
        Defined in <xref target="method-disclosure"/>.</dd>

        <dt>Relying Party</dt>
        <dd>As in the core protocol. In this document's context, a
        relying party evaluating attestations decides which IDSPs it
        trusts and for what purposes, and which attestation levels
        and claim types it requires.</dd>
      </dl>
    </section>

    <section anchor="idsp-role">
      <name>The Identity Service Provider Role</name>

      <t>An IDSP under Groundmark is an entity that:</t>

      <ol>
        <li>Performs verification of a specific claim about an
        operator or agent, using methods the IDSP discloses in each
        attestation it issues.</li>

        <li>Publishes attestations as signed JSON documents over
        HTTPS, at the URLs referenced by _agentclaim "ref=" fields.</li>

        <li>Publishes its own signing public key in DNS using the
        _agentid convention defined by the core protocol, under a
        DNSSEC-signed zone.</li>

        <li>Operates a revocation mechanism per
        <xref target="revocation"/>.</li>
      </ol>

      <t>Any person, organization, or institution with appropriate
      competence may operate as an IDSP for claims within its
      competence. No central designation is required. Recognition of
      an IDSP by a relying party, or by a regulatory framework whose
      requirements a relying party is attempting to satisfy, is
      independent of this specification.</t>

      <section anchor="method-disclosure">
        <name>Method Disclosure</name>

        <t>An IDSP's primary obligation under Groundmark is method
        disclosure: each attestation MUST contain a structured
        description of the verification methods the IDSP performed.
        This obligation is what distinguishes an IDSP from a
        conventional certificate authority. A certificate authority
        asserts a conclusion ("this entity controls this domain"); a
        Groundmark IDSP asserts a conclusion together with a
        disclosure of how that conclusion was reached, allowing the
        relying party to make a contextual trust decision.</t>

        <t>The structure of the method_disclosure object is specified
        in <xref target="method-disclosure-object"/>. The IDSP is
        responsible for the accuracy of this disclosure;
        misrepresentation of methods is the principal failure mode
        against which the IDSP's reputation is exposed.</t>
      </section>

      <section anchor="idsp-trust-anchors">
        <name>IDSP Trust Anchors</name>

        <t>This document does not specify how a relying party comes
        to trust a specific IDSP for a specific purpose. The expected
        mechanisms include:</t>

        <ul>
          <li>Direct evaluation by the relying party of an IDSP's
          public practices statement, audit reports, and method
          disclosures.</li>
          <li>Recognition by a regulator or industry body whose rules
          the relying party operates under.</li>
          <li>Inclusion in a curated list maintained by a community
          or trust framework operator.</li>
        </ul>

        <t>These are out of scope for this specification. What this
        specification provides is the substrate that makes any of
        these evaluation modes possible: every Groundmark attestation
        includes the IDSP's identity, the methods it performed, and
        the cryptographic material needed to verify the IDSP's
        signature.</t>
      </section>
    </section>

    <section anchor="levels">
      <name>Attestation Level Taxonomy</name>

      <t>Groundmark defines four attestation levels indicating the
      strength of verification associated with a claim. The level is
      a floor, not a ceiling: a relying party requiring Level 1 MAY
      accept a Level 2 or Level 3 attestation for the same claim
      type. A relying party requiring Level 2 MUST NOT accept a Level
      1 attestation in its place.</t>

      <t>The levels do not aggregate. Three Level 2 attestations do
      not constitute a Level 3 attestation. Each claim stands on its
      own merits.</t>

      <section anchor="level-0">
        <name>Level 0 - Permissionless</name>

        <t>No attestation required. The relying party verifies an
        HTTP request signature against the agent's DNS-published key
        per the core protocol; domain ownership establishes the
        accountability chain through DNS and (if DNSSEC-validated)
        through the registrar-verified registrant.</t>

        <t>This is the default mode under Groundmark and is expected
        to cover the majority of agent transactions. Self-asserted
        _agentclaim records using the "val=" form (for example,
        operator-contact) are Level 0 disclosures: they are operator
        assertions, not third-party verifications.</t>

        <t>A relying party operating at Level 0 CAN conclude that the
        request originated from a party that controls the agent
        domain. It CANNOT conclude anything about the operator's
        identity, legal standing, location, or compliance.</t>
      </section>

      <section anchor="level-1">
        <name>Level 1 - Operator Accountability</name>

        <t>A real, identifiable party stands behind the agent. Level
        1 establishes that an operator exists, that the operator
        demonstrably controls the agent domain, and that the operator
        has accepted accountability under the IDSP's trust framework.
        The claim is about existence and accountability, not
        capability or compliance: if something goes wrong, there is a
        known party to contact.</t>

        <t>Required verification, performed by the IDSP:</t>

        <ul>
          <li>Operator existence: the operator is a real person or
          organization.</li>
          <li>Operational control: the operator demonstrably controls
          the agent domain.</li>
          <li>Acceptance of terms: the operator has agreed to the
          IDSP's accountability framework.</li>
        </ul>

        <t>Acceptable methods are at the IDSP's discretion subject to
        the method-disclosure obligation. Typical methods include
        business registration lookup, confirmation messaging to an
        organizational domain, or credential binding to a verified
        account.</t>

        <t>A relying party operating at Level 1 CAN conclude that an
        identifiable operator is accountable for the agent's actions,
        and that the operator accepted terms establishing
        accountability. It CANNOT conclude that the operator is
        compliant with any specific regulation or legal standard.</t>
      </section>

      <section anchor="level-2">
        <name>Level 2 - Claim-Specific Verification</name>

        <t>A bounded, specific fact about the operator or agent has
        been attested. Each Level 2 attestation is a single
        predicate: "the operator is over 18", "the operator holds a
        valid Ontario real estate licence", "the agent has passed
        basic financial-services onboarding". The minimal-disclosure
        principle is operationally critical at this level: the IDSP
        attests to the predicate, not to the underlying data.</t>

        <t>A relying party operating at Level 2 CAN conclude that the
        stated predicate was verified by a third party to the
        standard disclosed, and that the IDSP staked its reputation
        on the accuracy of the attestation. It CANNOT conclude that
        the claim satisfies a regulatory requirement without also
        verifying that the IDSP and its methods are recognised by the
        relevant regulator.</t>
      </section>

      <section anchor="level-3">
        <name>Level 3 - Regulatory-Grade</name>

        <t>The attestation meets a specific legal or regulatory
        standard. Level 3 covers claims that must meet defined legal
        or regulatory requirements such as Know Your Customer /
        Anti-Money Laundering verification under a named framework,
        professional licensure verified against government records,
        or biometric identity proofing under a named assurance
        level.</t>

        <t>A Level 3 attestation MUST carry the "framework" field
        (<xref target="schema-fields"/>) identifying the regulatory
        or trust framework under which the attestation is issued. It
        MUST carry the "jurisdiction" field where the framework is
        jurisdictionally scoped.</t>

        <t>A relying party operating at Level 3 CAN rely on the
        attestation to satisfy its own regulatory obligations where
        the relevant trust framework explicitly permits such reliance.
        The relying party MUST verify that the named IDSP is
        recognized by the relevant regulator or framework before
        relying on a Level 3 attestation for compliance purposes;
        this specification does not designate any IDSP as
        authoritative for any framework.</t>
      </section>

      <section anchor="level-stacking">
        <name>Level Stacking and Composability</name>

        <t>An agent identity MAY carry multiple _agentclaim records
        simultaneously, each independent. A single agent might
        present a Level 1 operator-verified attestation alongside
        several Level 2 claim-specific attestations from different
        IDSPs. The relying party selects only the claims its policy
        requires.</t>

        <t>Multiple attestations from different IDSPs do not
        implicitly refer to the same underlying operator identity,
        since IDSPs do not coordinate with one another.
        <xref target="cross-claim-consistency"/> addresses this
        limitation.</t>
      </section>
    </section>

    <section anchor="claim-types">
      <name>Claim Type Vocabulary</name>

      <t>This section defines the initial vocabulary of claim types.
      Each claim type specifies the JSON structure of the
      claim_value field in an attestation payload
      (<xref target="schema"/>).</t>

      <t>Custom claim types MUST use the form
      "x-&lt;registrant-domain&gt;-&lt;claim-name&gt;", where
      &lt;registrant-domain&gt; is a domain controlled by the entity
      defining the claim type. Custom claim types do not require IANA
      registration; relying parties MUST ignore claim types they do
      not recognize, per the core protocol.</t>

      <t>Claim types intended for broad interoperability SHOULD be
      registered in the IANA Groundmark Claim Types registry
      established by this document (<xref target="iana"/>).</t>

      <section anchor="ct-operator-verified">
        <name>operator-verified</name>

        <t>Level: 1.</t>

        <t>The IDSP has verified that a real, identifiable operator
        controls the agent and has accepted the IDSP's accountability
        terms.</t>

        <t>claim_value:</t>

<sourcecode type="json"><![CDATA[
{
  "verified": true,
  "operator_display_name": "Acme Corp"
}
]]></sourcecode>

        <t>"verified" is REQUIRED and MUST be true (an attestation
        with verified=false MUST NOT be issued; such a record should
        be absent, or, if previously present, revoked).</t>

        <t>"operator_display_name" is OPTIONAL and SHOULD only be
        included if the operator has explicitly chosen to disclose it
        publicly. Relying parties MUST NOT use operator_display_name
        as the sole basis of any trust or access-control decision.
        See <xref target="display-name-security"/>.</t>
      </section>

      <section anchor="ct-age">
        <name>age-over-18, age-over-21</name>

        <t>Level: 2.</t>

        <t>The operator meets the specified age threshold. The claim
        value is a boolean predicate; the operator's actual age or
        date of birth is not disclosed.</t>

        <t>claim_value:</t>

<sourcecode type="json"><![CDATA[
{ "result": true }
]]></sourcecode>
      </section>

      <section anchor="ct-jurisdiction-licensed">
        <name>jurisdiction-licensed</name>

        <t>Level: 2 or 3, depending on the IDSP's method and the
        framework under which it is operating.</t>

        <t>The operator holds a valid licence in a named jurisdiction
        and practice category. The licence number MUST NOT be
        included in the claim value.</t>

        <t>claim_value:</t>

<sourcecode type="json"><![CDATA[
{
  "licensed": true,
  "jurisdiction": "CA-ON",
  "licence_category": "real-estate-agent",
  "licence_status": "active"
}
]]></sourcecode>

        <t>"jurisdiction" uses the conventional country-subdivision
        form (ISO 3166-1 alpha-2, optionally followed by "-" and an
        ISO 3166-2 subdivision code).</t>

        <t>When this claim is published as a Level 3 attestation, the
        top-level "framework" field of the attestation MUST identify
        the regulatory licensing framework.</t>
      </section>

      <section anchor="ct-kyc-basic">
        <name>kyc-basic</name>

        <t>Level: 2 or 3.</t>

        <t>The operator has passed a basic Know Your Customer
        screening.</t>

        <t>claim_value:</t>

<sourcecode type="json"><![CDATA[
{
  "passed": true,
  "framework": "FINTRAC-PCMLTFA",
  "tier": "basic"
}
]]></sourcecode>

        <t>The "framework" field inside claim_value is REQUIRED for
        this claim type and identifies the screening framework
        applied. When the attestation is Level 3, the top-level
        "framework" field MUST also be present and SHOULD match the
        claim_value "framework".</t>
      </section>

      <section anchor="ct-kyc-enhanced">
        <name>kyc-enhanced</name>

        <t>Level: 3.</t>

        <t>The operator has passed an enhanced KYC process, including
        source-of-funds verification or equivalent under the named
        framework.</t>

        <t>claim_value:</t>

<sourcecode type="json"><![CDATA[
{
  "passed": true,
  "framework": "FINTRAC-PCMLTFA",
  "tier": "enhanced"
}
]]></sourcecode>
      </section>

      <section anchor="ct-operator-contact">
        <name>operator-contact</name>

        <t>Level: 0 (self-asserted).</t>

        <t>A self-declared contact point. This claim type MAY be
        published directly in a _agentclaim record using "val="
        without a "ref=" URL or "idsp=", per the core protocol.
        Relying parties MUST treat it as unverified
        self-assertion.</t>

        <t>claim_value (when retrieved as an IDSP-issued attestation,
        which is uncommon for this claim type):</t>

<sourcecode type="json"><![CDATA[
{
  "contact_type": "email",
  "value": "ops@acmecorp.example"
}
]]></sourcecode>
      </section>
    </section>


    <section anchor="schema">
      <name>Attestation Payload Schema</name>

      <t>This section defines the JSON document served by an IDSP at
      the URL referenced by an _agentclaim "ref=" field.</t>

      <section anchor="transport-caching">
        <name>Transport and Caching</name>

        <t>The transport for attestation retrieval is HTTPS, per the
        core protocol. Additional requirements specific to the
        attestation layer:</t>

        <ul>
          <li>IDSPs MUST serve attestation payloads with
          Content-Type: application/json (or application/jose+json
          for Verifiable Credential or JWT-bearing variants under
          future extensions).</li>
          <li>IDSPs MUST require no authentication from the relying
          party. The "ref=" URL functions as an opaque bearer
          reference.</li>
          <li>IDSPs MUST validate TLS at the transport layer per the
          underlying HTTPS implementation; relying parties MUST
          validate the attestation endpoint's TLS certificate per
          <xref target="RFC9110"/>.</li>
          <li>IDSPs MUST set HTTP Cache-Control directives
          <xref target="RFC9111"/> consistent with the attestation's
          expires_at time. IDSPs MUST NOT set max-age values so short
          as to force effectively per-request revalidation; the
          framework is designed for cached retrieval, and IDSPs that
          operate the revocation endpoint as a per-transaction
          authentication gate create a denial-of-service vector
          against the relying-party population (see
          <xref target="idsp-dos"/>).</li>
          <li>Relying parties MAY cache attestation payloads up to
          the lesser of the IDSP-supplied max-age and the
          attestation's expires_at time.</li>
        </ul>
      </section>

      <section anchor="schema-fields">
        <name>Top-Level Fields</name>

        <t>The attestation is a flat JSON <xref target="RFC8259"/>
        object using snake_case field names. The following fields
        are defined.</t>

        <dl>
          <dt>schema_version (REQUIRED, string)</dt>
          <dd>Schema version. The current value is "1.0". Relying
          parties SHOULD reject schema versions they do not
          understand.</dd>

          <dt>subject (REQUIRED, string)</dt>
          <dd>The agent domain this attestation covers, as a fully
          qualified domain name in lowercase ASCII.</dd>

          <dt>claim_type (REQUIRED, string)</dt>
          <dd>A value from the claim type vocabulary in
          <xref target="claim-types"/>, a vendor extension of the
          form "x-&lt;registrant-domain&gt;-&lt;claim-name&gt;", or
          an IANA-registered extension.</dd>

          <dt>claim_value (REQUIRED, object)</dt>
          <dd>The minimal predicate value. Structure is determined by
          claim_type.</dd>

          <dt>level (REQUIRED, integer)</dt>
          <dd>The attestation level (0 through 3). Relying parties
          MUST reject attestations whose level is below the level
          required by the relying party's policy.</dd>

          <dt>idsp (REQUIRED, string)</dt>
          <dd>The IDSP's domain name. The IDSP's public signing key
          MUST be retrievable via the core-protocol _agentid
          convention at _agentid.&lt;idsp&gt;.</dd>

          <dt>issued_at (REQUIRED, string)</dt>
          <dd>The time at which the attestation was issued, formatted
          per <xref target="RFC3339"/>.</dd>

          <dt>expires_at (REQUIRED, string)</dt>
          <dd>The time at which the attestation expires, formatted
          per <xref target="RFC3339"/>. Relying parties MUST reject
          attestations whose expires_at is in the past.</dd>

          <dt>method_disclosure (REQUIRED, object)</dt>
          <dd>Structured description of the verification the IDSP
          performed. See <xref target="method-disclosure-object"/>.</dd>

          <dt>endpoint_url (REQUIRED, string)</dt>
          <dd>The canonical HTTPS URL at which this attestation is
          served. MUST match the "ref=" URL in the corresponding
          _agentclaim record. Bound into the signed payload to
          prevent portability attacks (see
          <xref target="security-portability"/>).</dd>

          <dt>revocation_endpoint (REQUIRED, string)</dt>
          <dd>HTTPS URL for revocation status. Returns
          { "revoked": true | false }. See
          <xref target="revocation"/>.</dd>

          <dt>signing_key_id (REQUIRED, string)</dt>
          <dd>Identifier of the IDSP signing key used. Matches the
          "kid=" value of the corresponding _agentid record at the
          IDSP's domain.</dd>

          <dt>signature (REQUIRED, string)</dt>
          <dd>Base64url-encoded <xref target="RFC4648"/> Ed25519
          signature over the canonical payload. See
          <xref target="signature-construction"/>.</dd>

          <dt>jurisdiction (OPTIONAL, string)</dt>
          <dd>Applicable jurisdiction. REQUIRED at Level 3 when the
          framework is jurisdictionally scoped.</dd>

          <dt>framework (OPTIONAL, string)</dt>
          <dd>Named regulatory or trust framework. REQUIRED at Level
          3.</dd>

          <dt>short_lived_token (OPTIONAL, object)</dt>
          <dd>A short-lived signed status token analogous to
          certificate stapling. See
          <xref target="short-lived-tokens"/>.</dd>
        </dl>
      </section>

      <section anchor="method-disclosure-object">
        <name>The method_disclosure Object</name>

        <dl>
          <dt>methods (REQUIRED, array of strings)</dt>
          <dd>An array of method identifiers, each drawn from the
          Groundmark Method Identifier registry established by this
          document (<xref target="iana"/>). Implementations MUST
          tolerate identifiers they do not recognize.</dd>

          <dt>method_detail (OPTIONAL, string)</dt>
          <dd>Free-text description providing additional context.
          Intended for human review, not machine parsing.</dd>

          <dt>subcontractors (OPTIONAL, array of strings)</dt>
          <dd>Domain names of any third-party services engaged in
          the verification. Present when the IDSP subcontracted part
          of the verification.</dd>

          <dt>evidence_class (OPTIONAL, array of strings)</dt>
          <dd>An array of evidence-class identifiers from the
          Groundmark Method Identifier registry, indicating the
          categories of evidence the IDSP examined (for example,
          "government-issued-id", "corporate-registry",
          "biometric-liveness"). The initial set is defined in the
          registry; community-defined extensions follow the
          registry's policy.</dd>
        </dl>
      </section>

      <section anchor="attestation-example">
        <name>Worked Example</name>

        <t>The following non-normative example illustrates the JSON
        payload served by an IDSP at the URL referenced by an
        _agentclaim "ref=" field. It is the Level 1 operator-verified
        attestation referenced by the worked example in the core
        protocol.</t>

<sourcecode type="json"><![CDATA[
{
  "schema_version": "1.0",
  "subject": "purchasing.acmecorp.example",
  "claim_type": "operator-verified",
  "claim_value": {
    "verified": true,
    "operator_display_name": "Acme Corp"
  },
  "level": 1,
  "idsp": "verify.example.net",
  "issued_at": "2026-05-19T12:00:00Z",
  "expires_at": "2026-12-01T00:00:00Z",
  "method_disclosure": {
    "methods": [
      "corporate-registry-lookup",
      "organizational-domain-email-confirmation"
    ],
    "method_detail":
      "Operator legal entity confirmed against the Ontario
       Business Registry; domain control confirmed by email
       challenge to postmaster@acmecorp.example.",
    "evidence_class": [
      "corporate-registry",
      "domain-control"
    ]
  },
  "endpoint_url":
    "https://verify.example.net/a/4f9f3e1c7ab93d4f8d22",
  "revocation_endpoint":
    "https://verify.example.net/r/4f9f3e1c7ab93d4f8d22",
  "signing_key_id": "k1",
  "signature": "MEUCIQ...base64url...=="
}
]]></sourcecode>

        <t>The IDSP's signing public key is published at
        _agentid.verify.example.net. The relying party retrieves
        it via a DNSSEC-validating resolver, selects the record with
        kid=k1, reconstructs the canonical payload using
        <xref target="RFC8785"/> on the object with the signature
        field removed, and verifies the Ed25519 signature against the
        IDSP's public key.</t>
      </section>
    </section>

    <section anchor="signature-construction">
      <name>Signature Construction and Verification</name>

      <t>Attestation signatures use Ed25519 <xref target="RFC8032"/>.
      The signature is computed over a canonical serialization of the
      attestation payload with the signature field removed.</t>

      <t>The canonical serialization is JSON Canonicalization Scheme
      <xref target="RFC8785"/> applied to the attestation payload
      object, omitting the signature key. JCS provides a deterministic
      byte sequence regardless of input ordering or whitespace,
      removing a class of canonicalization bugs.</t>

      <t>The IDSP's public key is published in DNS using the
      _agentid.&lt;idsp-domain&gt; convention defined by the core
      protocol. IDSPs MUST sign their zones with DNSSEC. A public key
      retrieved from a non-DNSSEC-signed zone MUST NOT be used for
      attestation verification. The signing_key_id field in the
      attestation identifies which of the IDSP's keys was used; this
      corresponds to the "kid=" field in the IDSP's _agentid
      record.</t>

      <section anchor="verification-steps">
        <name>Verification Steps</name>

        <t>A relying party verifying an attestation payload MUST:</t>

        <ol>
          <li>Confirm that schema_version is understood.</li>
          <li>Confirm that expires_at is in the future.</li>
          <li>Confirm that endpoint_url matches the "ref=" URL from
          which the attestation was retrieved. Reject otherwise (see
          <xref target="security-portability"/>).</li>
          <li>Confirm that level meets or exceeds the relying party's
          policy floor.</li>
          <li>Retrieve the IDSP's _agentid record(s) from DNS using a
          DNSSEC-validating resolver. Select the record matching
          signing_key_id. Reject if no such record exists, if DNSSEC
          validation fails, or if the IDSP zone is unsigned.</li>
          <li>Compute the canonical serialization per
          <xref target="RFC8785"/> on the payload with signature
          removed.</li>
          <li>Verify the Ed25519 signature using the IDSP's public
          key.</li>
          <li>Check the revocation_endpoint according to the rules in
          <xref target="revocation"/>.</li>
        </ol>
      </section>
    </section>

    <section anchor="revocation">
      <name>Revocation</name>

      <t>Two independent revocation mechanisms operate at the
      attestation layer, in addition to DNS-level revocation provided
      by the core protocol (deletion of the _agentclaim record).</t>

      <dl>
        <dt>DNS-layer revocation (under the core protocol)</dt>
        <dd>Removal of the _agentclaim record invalidates the claim
        within the record's TTL.</dd>

        <dt>Endpoint-layer revocation</dt>
        <dd>The IDSP marks a specific attestation as revoked at its
        revocation_endpoint. The agent identity remains usable; only
        the specific claim is revoked. This is appropriate when an
        operator's standing changes with respect to a single claim
        without affecting the underlying identity.</dd>
      </dl>

      <t>The revocation endpoint response is structurally minimal:</t>

<sourcecode type="json"><![CDATA[
{ "revoked": true }
]]></sourcecode>

      <t>or</t>

<sourcecode type="json"><![CDATA[
{ "revoked": false }
]]></sourcecode>

      <t>IDSPs MAY include additional fields (revoked_at, reason) but
      MUST include the boolean revoked field as defined. Relying
      parties MUST NOT require additional fields.</t>

      <t>The revocation endpoint MUST NOT require authentication from
      the relying party. IDSPs MUST NOT use the revocation endpoint
      as a per-transaction authentication gate (see
      <xref target="idsp-dos"/>).</t>

      <section anchor="fail-mode">
        <name>Fail-Mode Behaviour</name>

        <t>When the revocation endpoint is unreachable, relying
        parties MUST apply the following fail behaviour, scaled by
        attestation level:</t>

        <dl>
          <dt>Level 3</dt>
          <dd>Relying parties MUST fail closed. An unreachable
          revocation endpoint MUST be treated as a verification
          failure and the transaction declined. Continuing under
          Level 3 without a current revocation check is a
          non-conformant deployment.</dd>

          <dt>Level 2</dt>
          <dd>Relying parties MUST fail closed UNLESS all of the
          following hold: the attestation was issued less than 24
          hours before the current time, the relying party's policy
          permits soft-fail at Level 2 under this transaction's risk
          profile, and the relying party logs the soft-fail per
          <xref target="fail-logging"/>.</dd>

          <dt>Level 1</dt>
          <dd>Relying parties MAY fail open subject to the logging
          requirements of <xref target="fail-logging"/>. Fail-open is
          permitted at Level 1 because the underlying claim is
          operator-accountability rather than compliance: the
          worst-case consequence of an erroneously accepted Level 1
          attestation is materially different from the worst-case
          consequence at higher levels.</dd>
        </dl>
      </section>

      <section anchor="fail-logging">
        <name>Audit Logging of Fail-Open Decisions</name>

        <t>Fail-open behaviour at any level MUST be logged. The
        logging requirements below are the minimum; relying parties
        may impose additional requirements under their own
        policies.</t>

        <t>The fail-open log entry MUST include:</t>

        <ul>
          <li>The agent domain and the attestation's
          endpoint_url.</li>
          <li>The idsp, claim_type, and level from the
          attestation.</li>
          <li>The reason for fail-open (typically: revocation
          endpoint unreachable, with an indication of the failure
          mode).</li>
          <li>The time of the decision.</li>
          <li>The identity of the transaction or operation that
          proceeded under fail-open.</li>
        </ul>

        <t>The log MUST be retained by the relying party for a
        period not less than one year, or for the period required by
        any applicable regulatory framework, whichever is longer.
        The log SHOULD be available to the IDSP on reasonable
        request, since an unexpected pattern of fail-open events on
        a particular IDSP is operationally significant to both
        parties.</t>
      </section>

      <section anchor="short-lived-tokens">
        <name>Short-Lived Status Tokens</name>

        <t>Real-time revocation checks against an IDSP endpoint
        introduce the same class of operational fragility as OCSP. To
        mitigate this without reintroducing OCSP's worst failure
        modes, an IDSP MAY include a short_lived_token field in the
        attestation payload, analogous to certificate stapling.</t>

        <t>A short-lived status token is a signed assertion of the
        form:</t>

<sourcecode type="json"><![CDATA[
{
  "status": "active",
  "as_of": "2026-05-19T12:00:00Z",
  "valid_until": "2026-05-19T18:00:00Z",
  "signature": "<base64url-ed25519>"
}
]]></sourcecode>

        <t>The token is signed by the same IDSP signing key as the
        parent attestation, over the canonical serialization of the
        token object with signature removed.</t>

        <t>When a current short-lived status token is present and
        valid, the relying party MAY treat it as a substitute for a
        fresh revocation_endpoint check during the token's validity
        window. The relying party MUST NOT extend the token's
        effective validity past valid_until. Token validity windows
        SHOULD be no longer than 24 hours; IDSPs that issue
        longer-lived tokens defeat the purpose of the mechanism.</t>

        <t>IDSPs MAY rotate tokens by re-serving the attestation
        payload with an updated short_lived_token; the rest of the
        payload (and its signature) is unchanged. Relying parties
        caching the attestation SHOULD periodically re-fetch to
        obtain refreshed tokens; this is substantially cheaper than
        full revocation checks.</t>
      </section>
    </section>


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

      <section anchor="security-portability">
        <name>Endpoint Portability Attacks</name>

        <t>The endpoint_url field in the canonical payload binds an
        attestation to the specific URL at which it is served.
        Without this binding, an attacker who obtained a valid
        attestation payload (perhaps by previously serving as the
        IDSP under a since-decommissioned identity) could serve that
        payload at a different location and have it accepted by
        relying parties. Including endpoint_url in the signed
        canonical payload prevents this attack. Relying parties MUST
        verify the endpoint_url match per
        <xref target="verification-steps"/>; this is not optional.</t>
      </section>

      <section anchor="display-name-security">
        <name>Display Name Impersonation</name>

        <t>The operator_display_name field in operator-verified
        attestations is operator-chosen and self-asserted. The IDSP
        attesting that the operator exists and is accountable does
        not, by default, verify that the chosen display name is
        accurate or non-deceptive.</t>

        <t>Relying parties MUST NOT use operator_display_name as the
        basis of trust or access-control decisions. The field is a
        UI affordance only.</t>

        <t>Future versions of this specification may require IDSPs to
        validate display names against protected brand-name lists as
        a condition of Level 1 attestation. Such a requirement is out
        of scope for this document, but the field's presence in the
        schema provides a hook for such future requirements.</t>
      </section>

      <section anchor="cross-claim-consistency">
        <name>Cross-Claim Consistency</name>

        <t>A single agent may carry attestations from multiple IDSPs
        that implicitly refer to different underlying operator
        identities, since IDSPs do not coordinate with one another.
        A relying party evaluating two claims from two different
        IDSPs cannot, in general, determine whether both claims
        describe the same operator.</t>

        <t>For high-assurance transactions requiring multiple claims,
        relying parties SHOULD prefer attestations from a single IDSP
        where possible. Future versions of this specification may
        define a subject_handle field that allows IDSPs to identify
        a stable operator handle within a single trust framework,
        enabling cross-claim consistency checks. This is out of scope
        for this document.</t>
      </section>

      <section anchor="idsp-compromise">
        <name>IDSP Compromise</name>

        <t>Compromise of an IDSP's signing key permits an attacker to
        issue fraudulent attestations until the corresponding
        _agentid record at the IDSP's domain is removed and caches
        expire. IDSPs MUST treat their signing keys with the same
        operational discipline as certificate-authority signing keys,
        including hardware key storage and audit-grade access
        controls. An IDSP SHOULD prepare for emergency key rotation
        per the procedure defined in the core protocol, and SHOULD
        pre-announce key rotation policy in its public practices
        statement.</t>

        <t>A compromised IDSP signing key invalidates all attestations
        signed under that key. There is no fine-grained recovery:
        relying parties detecting an IDSP key compromise SHOULD treat
        all attestations under that key as unverifiable until the key
        is rotated and the affected attestations are re-issued.</t>
      </section>

      <section anchor="idsp-dos">
        <name>Denial of Service via Revocation Endpoint</name>

        <t>The revocation endpoint is a relying-party-facing service
        consulted on a substantial fraction of attestations. IDSPs
        that operate it as an authenticated, throttled, or
        per-relying-party-rate-limited service shift operational
        fragility onto the entire relying-party population. This
        document REQUIRES the revocation endpoint to be
        unauthenticated, structurally minimal, and operated at a
        service quality appropriate to its function in the trust
        framework. IDSPs that do not meet this requirement create a
        denial-of-service vector against deployments depending on
        their attestations.</t>
      </section>

      <section anchor="method-disclosure-misrep">
        <name>Method Disclosure Misrepresentation</name>

        <t>The method_disclosure object is the central accountability
        locus of the IDSP role. An IDSP that misrepresents its
        methods - claiming verification it did not perform, omitting
        subcontractors, or misstating evidence classes - undermines
        the trust framework that makes its attestations evaluable.
        There is no cryptographic mechanism that detects this; the
        discipline depends on the relying party's, and the broader
        community's, ability to evaluate IDSP practices and on the
        IDSP's reputational exposure to inaccurate disclosure. Trust
        frameworks that recognize specific IDSPs SHOULD require audit
        of method-disclosure accuracy as a condition of
        recognition.</t>
      </section>
    </section>

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

      <t>This document inherits the privacy considerations of the
      core protocol <xref target="I-D.noss-jeftovic-groundmark-core"/>,
      and is shaped by the guidance of <xref target="RFC6973"/>. The
      following considerations are specific to the attestation
      layer.</t>

      <section anchor="minimal-disclosure">
        <name>Minimal Disclosure by Construction</name>

        <t>The claim-value structures in <xref target="claim-types"/>
        are deliberately minimal. age-over-18 discloses a boolean,
        not a date of birth. jurisdiction-licensed discloses the
        existence and category of a licence in a named jurisdiction,
        not the licence number. kyc-basic and kyc-enhanced disclose
        only that the relevant screening was performed under a named
        framework.</t>

        <t>Custom claim types defined under the
        "x-&lt;registrant-domain&gt;-&lt;claim-name&gt;" extension
        mechanism SHOULD follow the same discipline. Claim types
        that would require disclosure of richer personal data SHOULD
        be considered carefully against the minimal-disclosure
        principle and, where possible, decomposed into bounded
        predicates.</t>
      </section>

      <section anchor="public-visibility">
        <name>Public Visibility of Attestation Existence</name>

        <t>What is publicly visible in DNS for a given agent is the
        existence of an attestation of a given claim_type from a
        named idsp, plus the high-entropy "ref=" URL. The claim value
        itself is reachable only by following the "ref=" URL.</t>

        <t>This is an intentional design tradeoff. Publishing the
        claim type and IDSP name supports interoperability and
        meaningful relying-party policy; publishing the value would
        either require value confidentiality (complicating retrieval)
        or render claim-value privacy moot. The recommended
        deployment pattern for individual operators concerned about
        this visibility is provider-hosted identities, as discussed
        in the core protocol's Privacy Considerations.</t>
      </section>

      <section anchor="linkability">
        <name>Linkability Across Relying Parties</name>

        <t>A relying party that observes a Groundmark request
        signature obtains the agent's domain and, on attestation
        retrieval, the attestation's content. Multiple relying
        parties observing requests from the same agent can correlate
        by agent domain. This is a property of DNS-anchored identity
        and is not unique to Groundmark; an agent domain is
        necessarily globally unique and linkable.</t>

        <t>Operators concerned about cross-relying-party linkability
        SHOULD provision per-relationship agent domains (for example,
        distinct subdomains per counterparty) or use ephemeral agent
        domains. These mitigations come at the cost of reduced
        amortization of attestation issuance and verification, and
        are accordingly out of scope for the default deployment
        pattern.</t>
      </section>
    </section>

    <section anchor="governance">
      <name>Governance Considerations</name>

      <t>This specification permits a diversity of IDSP operators,
      trust frameworks, and jurisdictional regimes. It does not
      designate any of them.</t>

      <t>The framework's accountability properties depend on the
      existence of mechanisms - external to this specification - for
      evaluating IDSPs. Such mechanisms may include:</t>

      <ul>
        <li>Industry-specific trust frameworks (analogous to those
        operated for payment networks, professional licensing bodies,
        or certificate-authority root programs).</li>
        <li>Regulator-recognized IDSP rosters for specific compliance
        purposes (for example, recognized KYC providers under a
        given AML regime).</li>
        <li>Community-curated lists of IDSPs evaluated for specific
        purposes.</li>
        <li>Direct evaluation by relying parties of an IDSP's public
        practices statement, audit reports, and method-disclosure
        accuracy.</li>
      </ul>

      <t>The Groundmark framework supports all of these because every
      attestation carries the IDSP's identity, the methods performed,
      and the cryptographic material needed to verify the attestation.
      What this specification provides is the technical substrate
      that makes governance possible; the governance itself is the
      work of trust frameworks and the broader community.</t>
    </section>

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

      <section anchor="iana-claim-types">
        <name>Groundmark Claim Types Registry</name>

        <t>IANA is requested to establish a new registry titled
        "Groundmark Claim Types" under a new "Groundmark" registry
        group.</t>

        <t>Registration policy: Specification Required, per
        <xref target="RFC8126"/>. The designated expert SHOULD
        evaluate proposed registrations for:</t>

        <ul>
          <li>Adherence to the minimal-disclosure principle.</li>
          <li>Clarity of the claim_value schema.</li>
          <li>Compatibility with the level taxonomy.</li>
        </ul>

        <t>The initial registry contents are the claim types defined
        in <xref target="claim-types"/>:</t>

        <table>
          <name>Initial Groundmark Claim Types</name>
          <thead>
            <tr><th>Claim Type</th><th>Level(s)</th><th>Reference</th></tr>
          </thead>
          <tbody>
            <tr><td>operator-verified</td><td>1</td><td>This document</td></tr>
            <tr><td>age-over-18</td><td>2</td><td>This document</td></tr>
            <tr><td>age-over-21</td><td>2</td><td>This document</td></tr>
            <tr><td>jurisdiction-licensed</td><td>2, 3</td><td>This document</td></tr>
            <tr><td>kyc-basic</td><td>2, 3</td><td>This document</td></tr>
            <tr><td>kyc-enhanced</td><td>3</td><td>This document</td></tr>
            <tr><td>operator-contact</td><td>0</td><td>This document</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="iana-method-identifiers">
        <name>Groundmark Method Identifier Registry</name>

        <t>IANA is requested to establish a new registry titled
        "Groundmark Method Identifiers" under the "Groundmark"
        registry group.</t>

        <t>Registration policy: Specification Required, per
        <xref target="RFC8126"/>.</t>

        <t>The initial registry contents are reserved for community
        development and will be populated by an early companion
        specification defining the verification method vocabulary.
        Examples of expected initial entries include
        "corporate-registry-lookup", "government-issued-id",
        "biometric-liveness", "domain-control-acme", and
        "organizational-domain-email-confirmation".</t>
      </section>
    </section>

  </middle>

  <back>

    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </reference>

        <reference anchor="RFC3339" target="https://www.rfc-editor.org/rfc/rfc3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author initials="G." surname="Klyne"/>
            <author initials="C." surname="Newman"/>
            <date year="2002" month="July"/>
          </front>
          <seriesInfo name="RFC" value="3339"/>
        </reference>

        <reference anchor="RFC4648" target="https://www.rfc-editor.org/rfc/rfc4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author initials="S." surname="Josefsson"/>
            <date year="2006" month="October"/>
          </front>
          <seriesInfo name="RFC" value="4648"/>
        </reference>

        <reference anchor="RFC8032" target="https://www.rfc-editor.org/rfc/rfc8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author initials="S." surname="Josefsson"/>
            <author initials="I." surname="Liusvaara"/>
            <date year="2017" month="January"/>
          </front>
          <seriesInfo name="RFC" value="8032"/>
        </reference>

        <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>

        <reference anchor="RFC8259" target="https://www.rfc-editor.org/rfc/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" role="editor"/>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
        </reference>

        <reference anchor="RFC8785" target="https://www.rfc-editor.org/rfc/rfc8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author initials="A." surname="Rundgren"/>
            <author initials="B." surname="Jordan"/>
            <author initials="S." surname="Erdtman"/>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="RFC" value="8785"/>
        </reference>

        <reference anchor="RFC9110" target="https://www.rfc-editor.org/rfc/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author initials="R." surname="Fielding" role="editor"/>
            <author initials="M." surname="Nottingham" role="editor"/>
            <author initials="J." surname="Reschke" role="editor"/>
            <date year="2022" month="June"/>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
        </reference>

        <reference anchor="RFC9111" target="https://www.rfc-editor.org/rfc/rfc9111">
          <front>
            <title>HTTP Caching</title>
            <author initials="R." surname="Fielding" role="editor"/>
            <author initials="M." surname="Nottingham" role="editor"/>
            <author initials="J." surname="Reschke" role="editor"/>
            <date year="2022" month="June"/>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
        </reference>

        <reference anchor="I-D.noss-jeftovic-groundmark-core">
          <front>
            <title>DNS-Anchored Identity Discovery for Autonomous Agents</title>
            <author initials="E." surname="Noss" fullname="Elliot Noss"/>
            <author initials="M." surname="Jeftovic" fullname="Mark Jeftovic"/>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-noss-jeftovic-groundmark-core-00"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC6973" target="https://www.rfc-editor.org/rfc/rfc6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author initials="A." surname="Cooper"/>
            <author initials="H." surname="Tschofenig"/>
            <author initials="B." surname="Aboba"/>
            <author initials="J." surname="Peterson"/>
            <author initials="J." surname="Morris"/>
            <author initials="M." surname="Hansen"/>
            <author initials="R." surname="Smith"/>
            <date year="2013" month="July"/>
          </front>
          <seriesInfo name="RFC" value="6973"/>
        </reference>

        <reference anchor="RFC8126" target="https://www.rfc-editor.org/rfc/rfc8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton"/>
            <author initials="B." surname="Leiba"/>
            <author initials="T." surname="Narten"/>
            <date year="2017" month="June"/>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
        </reference>

        <reference anchor="Cameron2005" target="https://www.identityblog.com/?p=352">
          <front>
            <title>The Laws of Identity</title>
            <author initials="K." surname="Cameron" fullname="Kim Cameron"/>
            <date year="2005" month="May"/>
          </front>
        </reference>
      </references>
    </references>

    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>

      <t>The authors thank Doc Searls for substantive review of
      earlier drafts, the late Kim Cameron whose Laws of Identity
      <xref target="Cameron2005"/> shaped the philosophical
      commitments of this work, and the broader registrar, DNS, and
      identity communities whose infrastructure and prior art make
      this approach viable.</t>
    </section>

    <section anchor="changelog" numbered="false">
      <name>Change Log</name>

      <section anchor="cl-00" numbered="false">
        <name>-00</name>

        <ul>
          <li>Initial submission as the companion to
          <xref target="I-D.noss-jeftovic-groundmark-core"/>.</li>
          <li>Split from the prior single-draft
          draft-noss-groundmark-agent-identity-dns.</li>
          <li>Replaced the open-ended methods array description with
          explicit reference to the Groundmark Method Identifier
          registry.</li>
          <li>Specified canonical-serialization using JCS
          <xref target="RFC8785"/>, replacing ad-hoc
          "lexicographically sorted keys" language.</li>
          <li>Tightened revocation fail-mode semantics: prescriptive
          logging at every fail-open decision; mandated
          unauthenticated revocation endpoint to prevent DoS
          leverage.</li>
          <li>Added short-lived status tokens as an OPTIONAL
          mechanism.</li>
          <li>Resolved IDSP key rotation through the core protocol's
          "kid=" mechanism rather than as an open question.</li>
          <li>Added Privacy Considerations and Governance
          Considerations sections.</li>
        </ul>
      </section>
    </section>

  </back>
</rfc>
