<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     docName="draft-condrey-rats-witnessd-revocation-00"
     ipr="trust200902"
     obsoletes=""
     updates=""
     submissionType="IETF"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="witnessd Revocation">Evidence Revocation and Status Protocol for Proof of Process</title>

    <seriesInfo name="Internet-Draft" value="draft-condrey-rats-witnessd-revocation-00"/>

    <author fullname="David Condrey" initials="D." surname="Condrey">
      <organization>Writerslogic Inc</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>david@writerslogic.com</email>
      </address>
    </author>

    <date year="2026" month="February" day="7"/>

    <area>Security</area>
    <workgroup>Remote ATtestation procedureS</workgroup>

    <keyword>attestation</keyword>
    <keyword>revocation</keyword>
    <keyword>evidence status</keyword>
    <keyword>RATS</keyword>

    <abstract>
      <t>
        This document specifies mechanisms for revoking and updating Evidence
        status in the witnessd Proof of Process framework. It defines how
        authors can mark Evidence as superseded or revoked, how device key
        compromise is handled, and how Verifiers can efficiently check
        Evidence validity.
      </t>
      <t>
        The specification also defines an External Verifier Registry protocol
        that enables Relying Parties to discover trusted Verifiers and
        obtain federated verification services.
      </t>
    </abstract>

    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        This is a companion document to draft-condrey-rats-pop, which defines
        the core Proof of Process evidence framework. This document addresses
        Evidence lifecycle management after initial generation.
      </t>
    </note>

  </front>

  <middle>

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

      <t>
        The Proof of Process (PoP) specification <xref target="I-D.condrey-rats-pop"/>
        defines how Attesters generate Evidence during document authorship.
        However, Evidence is not immutable once generated. Authors may need to:
      </t>

      <ul>
        <li>
          Mark old Evidence as superseded by newer Evidence
        </li>
        <li>
          Revoke Evidence if it was generated in error or under duress
        </li>
        <li>
          Update Evidence status after device key compromise
        </li>
        <li>
          Correct declarations or metadata errors
        </li>
      </ul>

      <t>
        This document defines protocols for Evidence status management and
        revocation, as well as a Verifier registry enabling federated
        verification services.
      </t>

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

    <section anchor="evidence-status">
      <name>Evidence Status Model</name>

      <section anchor="status-values">
        <name>Status Values</name>

        <t>
          Evidence packets may have the following status values:
        </t>

        <dl>
          <dt>active:</dt>
          <dd>
            Evidence is current and valid. This is the default status for
            newly generated Evidence.
          </dd>

          <dt>superseded:</dt>
          <dd>
            Evidence has been replaced by a newer Evidence packet. The
            superseding packet-id is recorded. Superseded Evidence remains
            verifiable but should not be considered current.
          </dd>

          <dt>revoked:</dt>
          <dd>
            Evidence has been explicitly revoked by the author. Revoked
            Evidence should not be trusted. A revocation reason is recorded.
          </dd>

          <dt>suspended:</dt>
          <dd>
            Evidence is temporarily suspended pending investigation or
            dispute resolution. May transition to active, revoked, or
            remain suspended.
          </dd>

          <dt>expired:</dt>
          <dd>
            Evidence has exceeded its validity period (if one was declared).
            Expired Evidence may still be verifiable for historical purposes
            but should not be considered current.
          </dd>
        </dl>
      </section>

      <section anchor="status-structure">
        <name>Status Update Structure</name>

        <t>
          Status updates are CBOR-encoded structures signed by the original
          Evidence author. The following CDDL defines the status update format:
        </t>

        <artwork type="cddl"><![CDATA[
status-update = {
  packet-id: bstr,          ; Evidence packet being updated
  new-status: status-code,
  reason: reason-code,
  ? superseded-by: bstr,    ; For superseded status
  ? explanation: tstr,      ; Optional human-readable text
  timestamp: time,
  signature: bstr           ; Author signature over update
}

status-code = &(
  active: 0,
  superseded: 1,
  revoked: 2,
  suspended: 3,
  expired: 4
)

reason-code = &(
  unspecified: 0,
  key-compromise: 1,
  content-error: 2,
  metadata-error: 3,
  generated-in-error: 4,
  duress: 5,
  newer-version: 6,
  validity-expired: 7
)
]]></artwork>

        <t>
          Status transitions MUST follow these rules:
        </t>

        <ul>
          <li>active MAY transition to any other status</li>
          <li>superseded is terminal (no further transitions)</li>
          <li>revoked is terminal (no further transitions)</li>
          <li>suspended MAY transition to active or revoked</li>
          <li>expired MAY transition to revoked only</li>
        </ul>

        <t>
          The signature MUST be created using the same key that signed the
          original Evidence packet. If the original key is compromised, the
          key compromise protocol in <xref target="key-compromise"/> applies.
        </t>
      </section>
    </section>

    <section anchor="revocation-mechanisms">
      <name>Revocation Mechanisms</name>

      <section anchor="author-revocation">
        <name>Author-Initiated Revocation</name>

        <t>
          Authors may revoke their own Evidence by publishing a signed
          revocation statement. The statement includes:
        </t>

        <ul>
          <li>packet-id of the revoked Evidence</li>
          <li>Revocation reason code</li>
          <li>Optional explanatory text</li>
          <li>Timestamp of revocation</li>
          <li>Author signature (using same key that signed Evidence)</li>
        </ul>
      </section>

      <section anchor="key-compromise">
        <name>Key Compromise Handling</name>

        <t>
          When a device signing key is compromised, all Evidence signed by
          that key may be affected. The key compromise protocol:
        </t>

        <ol>
          <li>
            Author generates new device key
          </li>
          <li>
            Author publishes key compromise notice (signed by new key + optional
            secondary authentication)
          </li>
          <li>
            Notice specifies compromise window (earliest and latest possible
            compromise times)
          </li>
          <li>
            Evidence within compromise window is marked as suspicious
          </li>
          <li>
            Evidence outside window may be re-endorsed with new key
          </li>
        </ol>
      </section>

      <section anchor="revocation-distribution">
        <name>Revocation Distribution</name>

        <t>
          Revocation information may be distributed through:
        </t>

        <ul>
          <li>
            Well-known URI: /.well-known/witnessd-revocations
          </li>
          <li>
            Revocation list embedded in Attestation Results
          </li>
          <li>
            Push notifications to subscribed Verifiers
          </li>
          <li>
            Blockchain or transparency log publication
          </li>
        </ul>
      </section>
    </section>

    <section anchor="verifier-registry">
      <name>External Verifier Registry</name>

      <t>
        This section defines a protocol for discovering trusted Verifiers
        and obtaining federated verification services.
      </t>

      <section anchor="verifier-discovery">
        <name>Verifier Discovery</name>

        <t>
          Organizations may publish their trusted Verifiers at:
        </t>

        <artwork><![CDATA[
/.well-known/witnessd-verifiers
]]></artwork>

        <t>
          This endpoint returns a signed JSON document listing:
        </t>

        <ul>
          <li>Trusted Verifier identities and endpoints</li>
          <li>Verifier certificates</li>
          <li>Supported appraisal policies</li>
          <li>Service level agreements</li>
        </ul>
      </section>

      <section anchor="federated-verification">
        <name>Federated Verification</name>

        <t>
          Federated verification enables Relying Parties in one organization
          to accept Attestation Results from Verifiers in another organization.
          The protocol operates as follows:
        </t>

        <ol>
          <li>
            Relying Party receives Evidence packet from an author
          </li>
          <li>
            Relying Party queries its organization's trusted Verifier list
          </li>
          <li>
            If the author's organization has a trusted Verifier, the Relying
            Party forwards the Evidence to that Verifier
          </li>
          <li>
            The remote Verifier appraises the Evidence and returns an
            Attestation Result
          </li>
          <li>
            The Attestation Result is signed by the remote Verifier and
            includes the Verifier's identity for accountability
          </li>
          <li>
            The Relying Party validates the Attestation Result signature
            against the trusted Verifier list
          </li>
        </ol>

        <t>
          Trust delegation allows organizations to designate other Verifiers
          as authoritative for specific author domains. Delegation statements
          are signed by the delegating organization and published in the
          Verifier registry.
        </t>

        <t>
          Attestation Results from federated Verifiers MUST include:
        </t>

        <ul>
          <li>Original Evidence packet-id</li>
          <li>Verifier identity and organization</li>
          <li>Appraisal policy applied</li>
          <li>Timestamp of verification</li>
          <li>Result validity period</li>
        </ul>
      </section>

      <section anchor="verifier-accountability">
        <name>Verifier Accountability</name>

        <t>
          Verifiers MUST maintain audit logs of all appraisal operations.
          Audit logs include:
        </t>

        <ul>
          <li>Timestamp of each appraisal request</li>
          <li>Evidence packet-id appraised</li>
          <li>Appraisal policy applied</li>
          <li>Result issued (without sensitive details)</li>
          <li>Requesting party identifier (if authenticated)</li>
        </ul>

        <t>
          Audit logs MUST be retained for a minimum of 7 years to support
          legal and compliance requirements. Logs SHOULD be stored in
          append-only format to prevent tampering.
        </t>

        <t>
          Misbehavior reporting enables Relying Parties to report Verifiers
          that issue inconsistent or incorrect Attestation Results:
        </t>

        <ol>
          <li>
            Relying Party detects inconsistency (e.g., same Evidence receives
            conflicting results from same Verifier)
          </li>
          <li>
            Relying Party submits misbehavior report to registry operator
          </li>
          <li>
            Registry operator investigates and may revoke Verifier listing
          </li>
          <li>
            Misbehavior reports are published for transparency
          </li>
        </ol>

        <t>
          Organizations MAY implement reputation scoring for Verifiers based
          on consistency, availability, and misbehavior history. Reputation
          scores are advisory and do not replace explicit trust decisions.
        </t>
      </section>
    </section>

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

      <section anchor="revocation-freshness">
        <name>Revocation Freshness</name>

        <t>
          Verifiers MUST check revocation status using fresh data. Cached
          revocation lists have a maximum validity period (RECOMMENDED: 24
          hours for general use, 1 hour for high-security contexts).
        </t>
      </section>

      <section anchor="revocation-availability">
        <name>Revocation Service Availability</name>

        <t>
          Verifiers MUST handle revocation service unavailability gracefully.
          Two modes are defined:
        </t>

        <dl>
          <dt>Hard-fail mode:</dt>
          <dd>
            If revocation status cannot be determined, the Verifier MUST
            reject the Evidence as unverifiable. This mode is RECOMMENDED
            for high-security contexts where accepting potentially revoked
            Evidence poses significant risk.
          </dd>

          <dt>Soft-fail mode:</dt>
          <dd>
            If revocation status cannot be determined, the Verifier MAY
            accept the Evidence with a warning flag indicating revocation
            status is unknown. The Attestation Result MUST clearly indicate
            this condition. This mode is acceptable for lower-risk contexts
            where availability is prioritized.
          </dd>
        </dl>

        <t>
          Verifiers SHOULD implement the following availability measures:
        </t>

        <ul>
          <li>Cache revocation lists with appropriate TTL</li>
          <li>Support multiple revocation distribution endpoints</li>
          <li>Implement exponential backoff for failed queries</li>
          <li>Monitor revocation service health proactively</li>
        </ul>

        <t>
          Relying Parties MUST be informed of the Verifier's failure mode
          and MAY override the default based on their risk tolerance.
        </t>
      </section>

      <section anchor="revocation-privacy">
        <name>Revocation Privacy</name>

        <t>
          Revocation queries may reveal which Evidence packets a Verifier
          is checking, potentially leaking information about document
          verification patterns. The following mitigations apply:
        </t>

        <ul>
          <li>
            Verifiers SHOULD download complete revocation lists rather than
            querying individual packet-ids to prevent query correlation
          </li>
          <li>
            Revocation services MUST NOT log individual query patterns in
            a way that enables tracking specific Verifier behavior
          </li>
          <li>
            Batch queries SHOULD be supported to allow Verifiers to check
            multiple packet-ids in a single request, reducing metadata leakage
          </li>
        </ul>

        <t>
          For high-privacy deployments, Verifiers MAY use Private Information
          Retrieval (PIR) techniques to query revocation status without
          revealing which packet-id is being checked. PIR support is OPTIONAL
          and deployment-specific.
        </t>

        <t>
          Revocation lists MUST NOT include information beyond what is
          necessary for status determination. Specifically, revocation
          reasons are available only to authenticated parties with a
          legitimate need to know.
        </t>
      </section>
    </section>

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

      <t>
        This section addresses privacy implications of Evidence status
        management and Verifier registry operations.
      </t>

      <section anchor="verifier-tracking">
        <name>Verifier Tracking Prevention</name>

        <t>
          Verifiers process Evidence from multiple authors and may accumulate
          significant metadata about verification patterns. To prevent misuse:
        </t>

        <ul>
          <li>
            Verifiers MUST NOT correlate verification requests across
            different Relying Parties without explicit consent
          </li>
          <li>
            Verification logs MUST be purged of personally identifiable
            information after the retention period expires
          </li>
          <li>
            Verifiers MUST NOT share verification metadata with third
            parties except as required by law
          </li>
        </ul>
      </section>

      <section anchor="metadata-minimization">
        <name>Metadata Minimization</name>

        <t>
          Status updates and revocation statements contain metadata that
          could be privacy-sensitive. Implementations MUST:
        </t>

        <ul>
          <li>
            Include only the minimum metadata necessary for status
            determination
          </li>
          <li>
            Avoid including IP addresses, device identifiers, or location
            data in status update structures
          </li>
          <li>
            Use opaque packet-ids that do not encode author identity
          </li>
        </ul>
      </section>

      <section anchor="anonymous-verification">
        <name>Anonymous Verification Mode</name>

        <t>
          For privacy-sensitive contexts, Verifiers MAY support anonymous
          verification where:
        </t>

        <ul>
          <li>
            Relying Party identity is not required for verification
          </li>
          <li>
            No verification logs are retained
          </li>
          <li>
            Rate limiting is applied to prevent abuse
          </li>
        </ul>

        <t>
          Anonymous verification provides weaker accountability guarantees
          and is not suitable for all deployment contexts. Verifiers MUST
          clearly document whether anonymous mode is supported.
        </t>
      </section>
    </section>

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

      <t>
        This document requests registration of the following well-known URIs:
      </t>

      <ul>
        <li>
          URI suffix: witnessd-revocations
        </li>
        <li>
          URI suffix: witnessd-verifiers
        </li>
      </ul>

      <t>
        Change controller: IETF
      </t>
      <t>
        Specification document: [this document]
      </t>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>

      <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 month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
        </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 month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
        </reference>

      </references>

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

        <reference anchor="I-D.condrey-rats-pop">
          <front>
            <title>Proof of Process: An Evidence Framework for Digital Authorship Attestation</title>
            <author fullname="D. Condrey" initials="D." surname="Condrey"/>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-condrey-rats-pop"/>
        </reference>

      </references>

    </references>

  </back>

</rfc>
