<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!--
  Internet-Draft: draft-kamimura-scitt-vcp-05
  Title: A SCITT Profile for Verifiable Audit Trails in Algorithmic Trading
  Author: TOKACHI KAMIMURA
  Organization: VeritasChain Standards Organization (VSO)
  Target WG: SCITT (Supply Chain Integrity, Transparency, and Trust)

  Changes from -04: see Appendix "Changes from draft-kamimura-scitt-vcp-04".
-->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     docName="draft-kamimura-scitt-vcp-05"
     category="info"
     ipr="trust200902"
     consensus="true"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="SCITT-VCP">
      A SCITT Profile for Verifiable Audit Trails in Algorithmic Trading:
      The VeritasChain Protocol (VCP)
    </title>

    <seriesInfo name="Internet-Draft"
                value="draft-kamimura-scitt-vcp-05"/>

    <author fullname="TOKACHI KAMIMURA" initials="T." surname="Kamimura">
      <organization>VeritasChain Standards Organization</organization>
      <address>
        <postal>
          <country>Japan</country>
        </postal>
        <email>kamimura@veritaschain.org</email>
        <uri>https://veritaschain.org</uri>
      </address>
    </author>

    <date year="2026" month="October" day="24"/>

    <area>Security</area>
    <workgroup>Supply Chain Integrity, Transparency, and Trust</workgroup>

    <keyword>SCITT</keyword>
    <keyword>audit trail</keyword>
    <keyword>algorithmic trading</keyword>
    <keyword>AI transparency</keyword>
    <keyword>financial services</keyword>
    <keyword>transparency service</keyword>
    <keyword>signed statement</keyword>
    <keyword>profile</keyword>

    <abstract>
      <t>This document defines a profile of the SCITT (Supply Chain
      Integrity, Transparency, and Trust) architecture for creating
      tamper-evident audit trails of AI-driven algorithmic trading
      decisions and executions. The VeritasChain Protocol (VCP) applies
      the SCITT framework to address the specific requirements of
      financial markets, including high-precision timestamps,
      considerations arising from recordkeeping regimes such as the EU AI
      Act and MiFID II, and a crypto-shredding mechanism intended to support
      erasure obligations such as those under the GDPR. This profile
      specifies how VCP events are encoded as SCITT Signed Statements,
      registered with Transparency Services, and verified using
      COSE Receipts. It further defines SCITT conformance profiles
      for interoperability and an ERASURE event type that records
      crypto-shredding operations as append-only audit events.  The
      profile makes trading records auditable and attributable after the
      fact; it does not prevent or block any trading activity, and it does
      not warrant the correctness of any recorded decision.</t>
    </abstract>

    <note removeInRFC="true">
      <name>About This Document</name>
      <t>The latest version of this document, along with implementation
      resources and test vectors, can be found at
      <eref target="https://github.com/veritaschain/vcp-spec"/>.</t>
      <t>Discussion of this document takes place on the SCITT Working
      Group mailing list (scitt@ietf.org).</t>
      <t>Changes from -04 are listed in
      <xref target="appendix-changes-04"/>, and changes from -03 in
      <xref target="appendix-changes-03"/>.  The principal changes in -04 align
      this profile with the VCP v1.2 release (tag v1.2.0): external
      anchoring is REQUIRED at every tier, and ERASURE uses the released
      ErasureDetails encoding.</t>
    </note>
  </front>

  <middle>
    <!-- ===== Section 1: Introduction ===== -->
    <section anchor="introduction">
      <name>Introduction</name>

      <t>The SCITT (Supply Chain Integrity, Transparency, and Trust)
      architecture <xref target="RFC9943"/> provides
      a framework for creating tamper-evident logs of digital artifacts
      through Transparency Services. While SCITT was initially designed
      for software supply chain use cases, its core primitives--Signed
      Statements, Receipts, and Transparency Services--are applicable to
      any domain requiring verifiable audit trails.</t>

      <t>This document specifies a SCITT profile for AI-driven algorithmic
      trading systems in financial markets. The VeritasChain Protocol (VCP)
      applies the SCITT architecture with domain-specific extensions:</t>

      <ul>
        <li>A schema for encoding trading events as SCITT Signed Statements</li>
        <li>Registration policies for financial audit trails</li>
        <li>Conformance tiers (Silver, Gold, Platinum) with varying
        requirements for timing precision, anchoring frequency, and key
        protection</li>
        <li>A crypto-shredding mechanism intended to support data erasure
        obligations</li>
        <li>A completeness-aware design that enables omission detection
        through external anchoring</li>
      </ul>

      <t>VCP serves as an "AI Flight Recorder" for algorithmic trading,
      supporting post-incident reconstruction of recorded system behavior
      with cryptographic evidence that the records were not altered after
      commitment.  It cannot reconstruct events that were never
      recorded.</t>

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

      <section anchor="relationship-to-scitt">
        <name>Relationship to SCITT</name>
        <t>This document is a profile of the SCITT architecture. It:</t>
        <ul>
          <li>REQUIRES compliance with <xref target="RFC9943"/></li>
          <li>REQUIRES use of SCRAPI <xref target="I-D.ietf-scitt-scrapi"/>
          for Transparency Service interactions</li>
          <li>RECOMMENDS COSE Receipts for inclusion proofs</li>
          <li>DEFINES domain-specific extensions for financial trading</li>
        </ul>
        <t>This profile does not define a new SCITT protocol or new
        Transparency Service interactions; it specifies how existing SCITT
        primitives are applied to VCP events in the financial trading
        domain.  The VCP event format and integrity layer are defined in
        <xref target="VCP-SPEC"/>.</t>
      </section>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document specifies:</t>
        <ul>
          <li>VCP Event schema as SCITT Signed Statement payload</li>
          <li>Registration Policy requirements for VCP Transparency Services</li>
          <li>Mapping of VCP concepts to SCITT terminology</li>
          <li>Three conformance tiers with specific requirements</li>
          <li>Crypto-shredding mechanism to support erasure obligations</li>
          <li>Three-layer integrity architecture</li>
        </ul>
        <t>This document does not specify:</t>
        <ul>
          <li>General SCITT architecture (see <xref target="RFC9943"/>)</li>
          <li>SCRAPI endpoints (see <xref target="I-D.ietf-scitt-scrapi"/>)</li>
          <li>COSE Receipt format (see <xref target="RFC9942"/>)</li>
          <li>Specific regulatory mapping (covered in companion documents)</li>
          <li>A particular anchoring service (the anchor target is
          deployment-specific; anchoring itself is REQUIRED)</li>
        </ul>
      </section>
    </section>

    <!-- ===== Section 2: Terminology ===== -->
    <section anchor="terminology">
      <name>Terminology</name>

      <t>This document uses terminology from
      <xref target="RFC9943"/>. The following terms
      are specific to this profile:</t>

      <dl>
        <dt>VCP Event</dt>
        <dd>A single auditable record in the VeritasChain Protocol,
        encoded as a SCITT Signed Statement. Consists of Header,
        Payload, and Security metadata.</dd>

        <dt>VCP Issuer</dt>
        <dd>An algorithmic trading system, AI model, or human operator
        that generates VCP Events. Corresponds to SCITT Issuer.</dd>

        <dt>VCP Transparency Service</dt>
        <dd>A SCITT Transparency Service configured with VCP-specific
        Registration Policies. Operates a VCP-compliant append-only log.</dd>

        <dt>VCP Receipt</dt>
        <dd>A COSE Receipt issued by a VCP Transparency Service,
        proving inclusion of a VCP Event in the log.</dd>

        <dt>Actor</dt>
        <dd>An entity (algorithm, human operator, or system) identified
        by ActorID that generates VCP Events.</dd>

        <dt>Crypto-Shredding</dt>
        <dd>A privacy technique where encrypted payload data is rendered
        permanently unrecoverable by destroying the encryption key,
        while preserving the cryptographic integrity proofs (hashes
        and Receipts).</dd>

        <dt>Conformance Tier</dt>
        <dd>One of three implementation levels (Silver, Gold, Platinum)
        with increasing requirements for timing precision, anchoring
        frequency, and key protection.</dd>

        <dt>External Anchor</dt>
        <dd>A cryptographic commitment (typically a Merkle root) published
        to an external, independent system (e.g., public blockchain,
        timestamping authority).  External anchoring makes omission of
        events from an anchored batch, after anchoring, detectable by third
        parties at batch granularity.</dd>

        <dt>Policy Identification</dt>
        <dd>A field within the VCP Event that explicitly identifies the
        applicable Registration Policy and conformance tier.</dd>
      </dl>

      <section anchor="terminology-mapping">
        <name>SCITT Terminology Mapping</name>
        <t>The following table maps VCP concepts to SCITT terminology:</t>

        <table>
          <name>VCP to SCITT Terminology Mapping</name>
          <thead>
            <tr>
              <th>VCP Concept</th>
              <th>SCITT Equivalent</th>
              <th>Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>VCP Event</td>
              <td>Signed Statement</td>
              <td>VCP Event is the payload of a Signed Statement</td>
            </tr>
            <tr>
              <td>VCP Issuer</td>
              <td>Issuer</td>
              <td>Trading system or AI model</td>
            </tr>
            <tr>
              <td>VCP Transparency Service</td>
              <td>Transparency Service</td>
              <td>With VCP Registration Policy</td>
            </tr>
            <tr>
              <td>VCP Receipt</td>
              <td>Receipt</td>
              <td>COSE Receipt with Merkle inclusion proof</td>
            </tr>
            <tr>
              <td>Hash Chain (Optional)</td>
              <td>Append-only Log</td>
              <td>VCP optionally adds per-Actor chaining</td>
            </tr>
            <tr>
              <td>External Anchor</td>
              <td>Merkle Tree Root</td>
              <td>Periodic commitment supporting completeness verification</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>

    <!-- ===== Section 3: Architecture ===== -->
    <section anchor="architecture">
      <name>Architecture</name>

      <t>VCP builds upon the SCITT architecture with domain-specific
      extensions for financial trading:</t>

      <artwork type="ascii-art"><![CDATA[
  +------------------+       +-------------------------+
  |   VCP Issuer     |       |  VCP Transparency       |
  | (Trading System) |       |      Service            |
  +--------+---------+       +------------+------------+
           |                              |
           | 1. Create VCP Event          |
           | 2. Sign as COSE_Sign1        |
           |                              |
           +------ Signed Statement ----->|
           |       (via SCRAPI)           |
           |                              | 3. Validate against
           |                              |    Registration Policy
           |                              |
           |                              | 4. Append to Log
           |                              |
           |<-------- VCP Receipt --------+
           |       (COSE Receipt)         |
           |                              |
  +--------+---------+       +------------+------------+
  |    Verifier      |       |   External Anchor       |
  | (Auditor/Regul.) |       | (Timestamp/Blockchain)  |
  +------------------+       +-------------------------+
      ]]></artwork>

      <section anchor="arch-event-flow">
        <name>Event Flow</name>
        <ol>
          <li><strong>Event Generation:</strong> VCP Issuer creates a
          VCP Event containing trading decision or execution data.</li>
          <li><strong>Signing:</strong> Event is signed using COSE_Sign1
          <xref target="RFC9052"/> with the Issuer's private key.</li>
          <li><strong>Registration:</strong> Signed Statement is submitted
          to VCP Transparency Service via SCRAPI POST /entries.</li>
          <li><strong>Validation:</strong> Transparency Service validates
          against VCP Registration Policy.</li>
          <li><strong>Logging:</strong> Valid statement is appended to
          the append-only log.</li>
          <li><strong>Receipt:</strong> COSE Receipt with Merkle inclusion
          proof is returned to Issuer.</li>
          <li><strong>External Anchoring:</strong> The Merkle root MUST be
          periodically anchored to an external system at the frequency of
          the applicable tier (<xref target="policy-tiers"/>), making
          post-anchor omission detectable by third parties.</li>
        </ol>
      </section>

      <section anchor="arch-hash-chain">
        <name>Per-Actor Hash Chain (Optional)</name>
        <t>VCP MAY maintain per-Actor hash chains in addition to SCITT's
        global append-only log. When implemented, each VCP Event includes
        a PrevHash field containing the hash of the previous event from
        the same Actor. This enables efficient verification of a single
        Actor's event sequence without downloading the entire log.</t>

        <t>Note: Per-Actor hash chains are OPTIONAL. External anchoring of
        batch roots provides the primary mechanism for completeness
        verification at batch granularity. Hash chains serve as a
        complementary local integrity mechanism.</t>

        <artwork type="ascii-art"><![CDATA[
  Actor A:  Event_A1 --hash--> Event_A2 --hash--> Event_A3

  Actor B:  Event_B1 --hash--> Event_B2

  Global Log: [Event_A1, Event_B1, Event_A2, Event_B2, Event_A3, ...]
        ]]></artwork>
      </section>

      <section anchor="arch-three-layer">
        <name>Three-Layer Integrity Architecture</name>
        <t>VCP defines a three-layer architecture that separates concerns
        and clarifies where each integrity property originates:</t>

        <table>
          <name>VCP Three-Layer Architecture</name>
          <thead>
            <tr>
              <th>Layer</th>
              <th>Component</th>
              <th>Property</th>
              <th>Protocol Requirement</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Layer 1</td>
              <td>Event Integrity</td>
              <td>Individual event authenticity via digital signature</td>
              <td>REQUIRED</td>
            </tr>
            <tr>
              <td>Layer 2</td>
              <td>Collection Integrity</td>
              <td>Merkle tree over event collection</td>
              <td>REQUIRED</td>
            </tr>
            <tr>
              <td>Layer 3</td>
              <td>External Verifiability</td>
              <td>Merkle root anchored to external system</td>
              <td>REQUIRED</td>
            </tr>
          </tbody>
        </table>

        <t>Note: Layer 3 (External Verifiability) is REQUIRED at every
        tier, as in VCP v1.2 <xref target="VCP-SPEC"/>.  Revisions -02 and
        -03 of this document described it as OPTIONAL at the protocol level;
        that description did not match the VCP specification and is
        withdrawn.  Lightweight or delegated anchoring mechanisms are
        acceptable at the Silver tier.</t>

        <t>External anchoring makes post-anchor omission detectable: without
        it, a log producer could rebuild a batch and publish a different
        Merkle root.  Anchoring lets third parties check a presented root
        against an independently recorded commitment, supporting the
        "Verify, Don't Trust" principle.  It does not reveal events that
        were never included in a batch.</t>

        <artwork type="ascii-art"><![CDATA[
  Layer 1: Event Integrity
  +--------+    +--------+    +--------+
  | Event1 |    | Event2 |    | Event3 |
  | (sig)  |    | (sig)  |    | (sig)  |
  +---+----+    +---+----+    +---+----+
      |            |            |
      v            v            v
  Layer 2: Collection Integrity (Merkle Tree)
  +------------------------------------------+
  |              Merkle Root                 |
  +---------------------+--------------------+
                        |
                        v (REQUIRED)
  Layer 3: External Verifiability
  +------------------------------------------+
  | External Anchor (Blockchain/TSA/etc.)    |
  +------------------------------------------+
        ]]></artwork>
      </section>
    </section>

    <!-- ===== Section 4: VCP Event Schema ===== -->
    <section anchor="event-schema">
      <name>VCP Event Schema</name>

      <t>A VCP Event is encoded as the payload of a SCITT Signed Statement.
      The payload MUST be a JSON object conforming to the following schema:</t>

      <section anchor="schema-header">
        <name>Header Object</name>
        <t>The Header contains metadata common to all VCP Events:</t>

        <sourcecode type="json"><![CDATA[
{
  "Header": {
    "EventID": "01961e5f-5c0d-7000-8000-123456789abc",
    "TimestampISO": "2026-03-15T09:30:00.123456789Z",
    "TimestampInt": 1742034600123456789,
    "EventType": "ORD",
    "ActorID": "algo-momentum-001",
    "ChainID": "chain-actor-001",
    "SequenceNum": 42,
    "PolicyID": "org.veritaschain.policy:silver-v1-2"
  }
}
        ]]></sourcecode>

        <dl>
          <dt>EventID</dt>
          <dd>REQUIRED. UUID v7 <xref target="RFC9562"/> providing
          time-sortable unique identification.</dd>

          <dt>TimestampISO</dt>
          <dd>REQUIRED. ISO 8601 timestamp with nanosecond precision.</dd>

          <dt>TimestampInt</dt>
          <dd>REQUIRED. Integer timestamp in nanoseconds since Unix epoch.
          Values exceed 2^53, so a parser that does not preserve 64-bit
          integer precision alters them.  See <xref target="open-issues"/>
          regarding canonicalization.</dd>

          <dt>EventType</dt>
          <dd>REQUIRED. Registered event type code
          (see <xref target="event-types"/>).</dd>

          <dt>ActorID</dt>
          <dd>REQUIRED. Identifier of the entity generating this event.</dd>

          <dt>ChainID</dt>
          <dd>REQUIRED. Identifier of the per-Actor hash chain.</dd>

          <dt>SequenceNum</dt>
          <dd>REQUIRED. Monotonically increasing sequence number within
          the Actor's chain.</dd>

          <dt>PolicyID</dt>
          <dd>REQUIRED. Identifier of the Registration Policy under
          which the event is registered. Per VCP v1.2
          <xref target="VCP-SPEC"/>, PolicyID SHOULD follow the
          Issuer Domain + Local ID convention
          (reverse_domain:local_identifier), for example
          "org.veritaschain.policy:gold-v1-2". Global uniqueness is
          achieved through domain ownership; no central PolicyID
          registry is operated.</dd>
        </dl>
      </section>

      <section anchor="schema-payload">
        <name>Payload Object</name>
        <t>The Payload contains domain-specific data organized into modules:</t>

        <dl>
          <dt>VCP-TRADE</dt>
          <dd>Trading data: orders, executions, modifications, cancellations.</dd>

          <dt>VCP-RISK</dt>
          <dd>Risk management data: exposure, limits, margin.</dd>

          <dt>VCP-GOV</dt>
          <dd>Governance data: algorithm parameters, decision factors,
          operator actions.</dd>

          <dt>VCP-PRIVACY</dt>
          <dd>Privacy metadata: encryption keys, retention policies.</dd>
        </dl>

        <sourcecode type="json"><![CDATA[
{
  "Payload": {
    "VCP-TRADE": {
      "OrderID": "ord-2026-001",
      "Symbol": "AAPL",
      "Side": "BUY",
      "Quantity": "100",
      "Price": "185.50",
      "OrderType": "LIMIT"
    },
    "VCP-GOV": {
      "AlgoID": "momentum-v2.3",
      "DecisionFactors": ["RSI_oversold", "volume_spike"],
      "ConfidenceScore": "0.87"
    }
  }
}
        ]]></sourcecode>
      </section>

      <section anchor="schema-security">
        <name>Security Object</name>
        <t>The Security object contains integrity and chaining information:</t>

        <sourcecode type="json"><![CDATA[
{
  "Security": {
    "EventHash": "sha256:a1b2c3d4...",
    "PrevHash": "sha256:f6e5d4c3...",
    "MerkleRoot": "sha256:1234abcd...",
    "SignAlgo": "ED25519",
    "AnchorRef": "eth:0x1234...@12345678"
  }
}
        ]]></sourcecode>

        <dl>
          <dt>EventHash</dt>
          <dd>REQUIRED. SHA-256 hash of the canonicalized Header and
          Payload, computed using JSON Canonicalization Scheme
          <xref target="RFC8785"/>.</dd>

          <dt>PrevHash</dt>
          <dd>OPTIONAL. Hash of the previous event in this Actor's chain.
          If present, MUST match the EventHash of the preceding event
          (except for INIT events where it is absent).</dd>

          <dt>MerkleRoot</dt>
          <dd>OPTIONAL in individual events. Included in anchor (ANC)
          events.</dd>

          <dt>SignAlgo</dt>
          <dd>REQUIRED. Signature algorithm identifier. MUST be
          "ED25519" (default) or "DILITHIUM2", the VCP v1.2 registry
          value for ML-DSA <xref target="FIPS-204"/>. DILITHIUM2
          carries EXPERIMENTAL status in VCP v1.2 and is intended for
          testing and hybrid (classical plus post-quantum)
          deployments; it is not a certification requirement.</dd>

          <dt>AnchorRef</dt>
          <dd>OPTIONAL. Reference to the anchor location (e.g., blockchain
          transaction ID, TSA receipt ID), populated once the batch
          containing the event has been anchored.  See
          <xref target="open-issues"/> on the corresponding field in
          <xref target="VCP-SPEC"/>.</dd>
        </dl>
      </section>

      <section anchor="schema-scitt-alignment">
        <name>SCITT Alignment Object</name>
        <t>VCP v1.2 <xref target="VCP-SPEC"/> defines an OPTIONAL
        SCITTAlignment object carried in the Header. It makes the
        binding between a VCP Event and its SCITT artifacts (Signed
        Statement, Transparency Service, Receipt) explicit and
        machine-readable.</t>
        <t>Field presence is governed by conformance profiles:</t>
        <table anchor="tab-conformance-profiles">
          <name>SCITT Alignment Conformance Profiles</name>
          <thead>
            <tr>
              <th>Profile</th>
              <th>SCITTAlignment</th>
              <th>Intended Use</th>
            </tr>
          </thead>
          <tbody>
            <tr><td>VCP_BASE</td><td>OPTIONAL</td>
              <td>Standard VCP deployment</td></tr>
            <tr><td>VCP_SCITT</td><td>REQUIRED</td>
              <td>SCITT Transparency Service interoperability</td></tr>
            <tr><td>VCP_REGULATORY</td><td>RECOMMENDED</td>
              <td>Regulatory reporting scenarios</td></tr>
          </tbody>
        </table>
        <t>Implementations claiming the VCP_SCITT profile MUST include
        the SCITTAlignment object in every registered event; this
        profile-based approach avoids partial-implementation
        ambiguity.</t>
        <sourcecode type="json"><![CDATA[
{
  "Header": {
    "SCITTAlignment": {
      "Version": "1.2",
      "ConformanceProfile": "VCP_SCITT",
      "StatementID": "stmt-01961e5f-5c0d-7000",
      "TransparencyServiceID": "ts.veritaschain.example",
      "ReceiptFormat": "COSE_RECEIPT",
      "RegistrationPolicy": {
        "PolicyID": "org.veritaschain.policy:gold-v1-2",
        "Issuer": "org.veritaschain",
        "IssuedAt": 1767225600000000000
      }
    }
  }
}
        ]]></sourcecode>
        <dl>
          <dt>Version</dt>
          <dd>REQUIRED when present. VCP specification version
          governing the alignment semantics ("1.2").</dd>

          <dt>ConformanceProfile</dt>
          <dd>REQUIRED when present. One of "VCP_BASE", "VCP_SCITT",
          or "VCP_REGULATORY".</dd>

          <dt>StatementID</dt>
          <dd>OPTIONAL. Identifier of the SCITT Signed Statement
          carrying this event.</dd>

          <dt>TransparencyServiceID</dt>
          <dd>OPTIONAL. Identifier of the Transparency Service with
          which the event is registered. REQUIRED under the
          VCP_SCITT profile.</dd>

          <dt>ReceiptFormat</dt>
          <dd>OPTIONAL. Receipt encoding in use; "COSE_RECEIPT"
          designates COSE Receipts as specified by the SCITT
          architecture <xref target="RFC9943"/>.</dd>

          <dt>RegistrationPolicy</dt>
          <dd>OPTIONAL. Structured reference to the Registration
          Policy (PolicyID, Issuer, IssuedAt) mirroring the
          Header-level PolicyID.</dd>
        </dl>
      </section>

      <section anchor="event-types">
        <name>Event Types</name>

        <table>
          <name>VCP Event Types</name>
          <thead>
            <tr>
              <th>Code</th>
              <th>Name</th>
              <th>Description</th>
            </tr>
          </thead>
          <tbody>
            <tr><td>INIT</td><td>Initialization</td><td>Chain initialization, no PrevHash</td></tr>
            <tr><td>SIG</td><td>Signal</td><td>Trading signal generated</td></tr>
            <tr><td>ORD</td><td>Order</td><td>Order submitted</td></tr>
            <tr><td>ACK</td><td>Acknowledgment</td><td>Order acknowledged by venue</td></tr>
            <tr><td>EXE</td><td>Execution</td><td>Order executed (fill)</td></tr>
            <tr><td>CXL</td><td>Cancellation</td><td>Order cancelled</td></tr>
            <tr><td>MOD</td><td>Modification</td><td>Order modified</td></tr>
            <tr><td>RSK</td><td>Risk</td><td>Risk event or limit breach</td></tr>
            <tr><td>ERR</td><td>Error</td><td>System error</td></tr>
            <tr><td>ERR_*</td><td>Error subtypes</td><td>ERR_CONN, ERR_AUTH, ERR_TIMEOUT, ERR_REJECT, ERR_PARSE, ERR_SYNC, ERR_RISK, ERR_SYSTEM, ERR_RECOVER</td></tr>
            <tr><td>HBT</td><td>Heartbeat</td><td>Periodic liveness signal</td></tr>
            <tr><td>CLS</td><td>Close</td><td>Position closed</td></tr>
            <tr><td>ANC</td><td>Anchor</td><td>Merkle anchor event</td></tr>
            <tr><td>ERASURE</td><td>Erasure</td><td>Crypto-shredding record (VCP v1.2, see <xref target="erasure-event"/>)</td></tr>
            <tr><td>SYS_RECOVERY_ANNOUNCE</td><td>Recovery announcement</td><td>Planned CHECKPOINT notice (Payload.VCP-RECOVERY.Announcement)</td></tr>
            <tr><td>SYS_CHECKPOINT</td><td>Checkpoint</td><td>Recorded chain reset with authorized recovery action (Payload.VCP-RECOVERY)</td></tr>
            <tr><td>SYS_AUDIT</td><td>Audit</td><td>Post-incident review (Payload.VCP-GOV.AuditDetails)</td></tr>
            <tr><td>SYS_ANCHOR_MIGRATION</td><td>Anchor migration</td><td>Anchor transition and phase (Payload.VCP-ANCHOR.MigrationDetails)</td></tr>
            <tr><td>SYS_ANCHOR_FAILOVER</td><td>Anchor failover</td><td>Anchor failover and queued-event inventory (Payload.VCP-ANCHOR.FailoverDetails)</td></tr>
          </tbody>
        </table>
        <t>The five SYS_* codes were registered by the VCP v1.2 release; their
        structured payload locations and runtime requirements are defined in
        the normative annex of <xref target="VCP-SPEC"/>.  Validators written
        against pre-release v1.2 artifacts need updating to accept them.</t>
      </section>
    </section>

    <!-- ===== Section 5: Registration Policy ===== -->
    <section anchor="registration-policy">
      <name>Registration Policy</name>

      <t>A VCP Transparency Service MUST enforce a Registration Policy
      that validates incoming Signed Statements.</t>

      <section anchor="policy-identification">
        <name>Policy Identification</name>

        <t>The PolicyID field MUST be explicitly included in the VCP Event
        Header. The Transparency Service MUST validate the registration
        request against the referenced Registration Policy and MUST NOT
        infer, select, or substitute a policy on its own.</t>

        <t>PolicyID values SHOULD follow the Issuer Domain + Local
        ID convention defined in VCP v1.2 <xref target="VCP-SPEC"/>:
        the reverse DNS notation of the Issuer's domain, a colon, and
        an issuer-defined local identifier. Examples:</t>
        <ul>
          <li>org.veritaschain.policy:silver-v1-2</li>
          <li>org.veritaschain.policy:gold-v1-2</li>
          <li>org.veritaschain.policy:platinum-v1-2</li>
        </ul>
        <t>Uniqueness derives from domain ownership; no central
        PolicyID registry is operated. Organizations without a domain
        MAY use a "local:" prefix at the cost of weaker uniqueness.</t>

        <t>Conformance tiers (Silver, Gold, Platinum) represent additional
        verification depth and operational requirements applied on top of
        the same core Registration Policy, and do not define separate or
        incompatible registration policies.</t>
      </section>

      <section anchor="validation-requirements">
        <name>Validation Requirements</name>

        <t>The Registration Policy MUST verify:</t>

      <ol>
        <li><strong>Schema Compliance:</strong> Payload conforms to VCP
        Event schema.</li>
        <li><strong>PolicyID Present:</strong> Header contains a valid
        PolicyID field.</li>
        <li><strong>Signature Validity:</strong> COSE_Sign1 signature is
        valid for the registered Issuer public key.</li>
        <li><strong>Timestamp Validity:</strong> TimestampInt is within
        acceptable bounds (not in future, not too old).</li>
        <li><strong>Chain Integrity (if PrevHash present):</strong> PrevHash
        matches the hash of the most recent event from this Actor.</li>
        <li><strong>Sequence Monotonicity:</strong> SequenceNum is exactly
        one greater than the previous event's SequenceNum.</li>
      </ol>

      </section>

      <section anchor="policy-tiers">
        <name>Tier-Specific Requirements</name>

        <t>This specification distinguishes timestamp resolution from clock
        accuracy. Nanosecond-resolution timestamps represent the storage
        format capability, while actual clock accuracy is explicitly recorded
        and enforced per tier.</t>

        <table>
          <name>Conformance Tier Requirements</name>
          <thead>
            <tr>
              <th>Requirement</th>
              <th>Silver</th>
              <th>Gold</th>
              <th>Platinum</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Timestamp Resolution</td>
              <td>Millisecond</td>
              <td>Microsecond</td>
              <td>Nanosecond</td>
            </tr>
            <tr>
              <td>Clock Synchronization</td>
              <td>Best-effort</td>
              <td>NTP (&lt;1ms)</td>
              <td>PTPv2 (&lt;1 microsecond)</td>
            </tr>
            <tr>
              <td>External Anchoring (REQUIRED)</td>
              <td>Every 24 hours</td>
              <td>Every hour</td>
              <td>Every 10 minutes</td>
            </tr>
            <tr>
              <td>Signature Algorithm</td>
              <td>Ed25519</td>
              <td>Ed25519</td>
              <td>Ed25519 + Dilithium (OPTIONAL)</td>
            </tr>
            <tr>
              <td>Key Storage</td>
              <td>Software</td>
              <td>Software/HSM</td>
              <td>HSM Required</td>
            </tr>
            <tr>
              <td>PrevHash Chain</td>
              <td>OPTIONAL</td>
              <td>OPTIONAL</td>
              <td>RECOMMENDED</td>
            </tr>
          </tbody>
        </table>

        <t>Note: Silver tier is NOT intended for regulatory-grade algorithmic
        trading systems subject to MiFID II RTS 25, SEC Rule 17a-4, or
        equivalent clock synchronization requirements. Silver tier is
        appropriate for development, testing, backtesting analysis, and
        non-regulated trading scenarios.</t>
      </section>

      <section anchor="certification-policies">
        <name>Certification Policy Requirements</name>

        <t>This document does not mandate a specific external anchoring
        service; it requires anchoring at the frequency of each tier.  Each
        AnchorRecord binds the batch Merkle root, event count, first and last
        event identifiers, and PolicyID (see <xref target="open-issues"/> on
        the scope of the AnchorRecord signature).  Implementations retain
        local copies of all AnchorRecords and document an anchor continuity
        plan, as defined in <xref target="VCP-SPEC"/>.</t>

        <t>Certification programs may impose requirements beyond this
        profile, such as multiple independent anchors.  Certification
        requirements are defined separately from this document and may
        evolve independently of it.  Implementations may conform to this
        profile without obtaining certification.</t>

        <t>Acceptable anchor targets include:</t>
        <ul>
          <li>Trusted timestamping authorities (TSA) per <xref target="RFC3161"/></li>
          <li>SCITT Transparency Services, with COSE Receipts per <xref target="RFC9942"/></li>
          <li>Public blockchains (e.g., Bitcoin, Ethereum)</li>
          <li>Public timestamping services and attested databases, at the
          tiers where <xref target="VCP-SPEC"/> permits them</li>
        </ul>
        <t>A time-stamping authority attests existence time; by itself it does
        not show that the same root was presented to every verifier.</t>
      </section>
    </section>

    <!-- ===== Section 6: Crypto-Shredding ===== -->
    <section anchor="crypto-shredding">
      <name>Crypto-Shredding</name>

      <t>VCP supports crypto-shredding as a technical mechanism that can
      support erasure obligations while preserving audit trail integrity.
      It renders protected plaintext irrecoverable without invalidating
      cryptographic proofs.  Whether it satisfies a specific legal
      obligation is not determined by this document.</t>

      <section anchor="shredding-mechanism">
        <name>Mechanism</name>
        <ol>
          <li><strong>Encryption:</strong> Sensitive payload fields are
          encrypted with a per-record or per-subject Data Encryption Key (DEK).</li>
          <li><strong>Key Storage:</strong> DEK is stored separately,
          indexed by SubjectID.</li>
          <li><strong>Hashing:</strong> EventHash is computed over the
          encrypted payload, preserving integrity.</li>
          <li><strong>Shredding:</strong> Upon erasure request, DEK is
          destroyed. Encrypted data becomes unrecoverable.</li>
          <li><strong>Verification:</strong> Receipt and hash chain remain
          valid--verifiers can confirm event existence and ordering without
          accessing decrypted content.</li>
        </ol>
      </section>

      <section anchor="shredding-privacy-module">
        <name>VCP-PRIVACY Module</name>
        <sourcecode type="json"><![CDATA[
{
  "VCP-PRIVACY": {
    "EncryptedFields": ["VCP-TRADE.ClientID", "VCP-TRADE.AccountID"],
    "KeyID": "dek-2026-001-subject-12345",
    "Algorithm": "AES-256-GCM",
    "RetentionPolicy": "GDPR-5Y"
  }
}
        ]]></sourcecode>
      </section>

      <section anchor="erasure-event">
        <name>ERASURE Event Type</name>
        <t>VCP v1.2 <xref target="VCP-SPEC"/> defines the ERASURE event type
        to reconcile erasure obligations (such as GDPR Article 17) with
        append-only, tamper-evident audit trails.  An ERASURE event does not
        delete or rewrite any prior event.  It records, as a new append-only
        event, that the plaintext of specified protected fields has been
        rendered irrecoverable through crypto-shredding (destruction of the
        Data Encryption Key), while the EventHash, Merkle inclusion, and
        external anchor of the target events remain verifiable.</t>

        <t>In the VCP v1.2 release, an ERASURE event MUST carry its details
        in Payload.VCP-PRIVACY.ErasureDetails, with the seven REQUIRED
        members below.  ErasureDetails at the event root or directly under
        Payload is invalid.  The flat ERASURE fields described in -03 of this
        document (ErasureTargetEventIDs, ErasureReason, KeyDestructionProof,
        RetentionExemption, OperatorID) reflected pre-release artifacts and
        are not a v1.2 encoding.  Historical signed data is not rewritten.
        The normative annex of <xref target="VCP-SPEC"/> states how
        pre-release records are handled; it defines no lossless automatic
        conversion to the v1.2 encoding.</t>
        <table anchor="tab-erasure-fields">
          <name>ErasureDetails Members (all REQUIRED)</name>
          <thead>
            <tr>
              <th>Member</th>
              <th>Content</th>
            </tr>
          </thead>
          <tbody>
            <tr><td>Version</td><td>The literal "1.2"</td></tr>
            <tr><td>TargetIdentifier</td><td>Type (ACCOUNT, SESSION or
              EVENT_RANGE), salted SHA-256 Hash, and Salt</td></tr>
            <tr><td>Scope</td><td>AffectedEventCount, FirstAffectedEventID,
              LastAffectedEventID and AffectedFields; EventIDs MAY enumerate
              the exact affected set</td></tr>
            <tr><td>Reason</td><td>Code, Description, LegalBasis and a SHA-256
              RequestReferenceHash</td></tr>
            <tr><td>Authorization</td><td>Authorizing role, signature,
              nanosecond timestamp and DPO notification</td></tr>
            <tr><td>CryptoShredding</td><td>SHA-256 hash of the key
              identifier, key algorithm, destruction method and nanosecond
              destruction timestamp</td></tr>
            <tr><td>Verification</td><td>PreErasureEventHash and
              PostErasureChainHash</td></tr>
          </tbody>
        </table>
        <t>Reason codes are GDPR_ART_17_1A, GDPR_ART_17_1B, GDPR_ART_17_1C,
        GDPR_ART_17_1D, RETENTION_EXPIRED, SUBJECT_REQUEST, COURT_ORDER and
        ERROR_CORRECTION.  Destruction methods are HSM_ZEROIZE,
        SECURE_DELETE and CLOUD_KMS_DESTROY.  Authorization MUST precede or
        equal destruction, which MUST precede or equal the ERASURE event
        timestamp.  The ERASURE event's own Merkle inclusion proof is
        detached (Evidence Pack or Receipt), not embedded in its hashed
        payload.  Schema validation checks the structure of this evidence,
        not the truth of the destruction.</t>
        <t>The following abbreviated example follows the structure of the
        release fixture; hashes, signatures and certificates are
        placeholders:</t>
        <sourcecode type="json"><![CDATA[
{
  "Header": {
    "EventID": "019eaf10-0000-7000-8000-000000000001",
    "TimestampISO": "2026-10-09T00:00:00Z",
    "TimestampInt": 1791504000000000000,
    "EventType": "ERASURE",
    "ActorID": "operator-example",
    "ChainID": "chain-example",
    "SequenceNum": 1,
    "PolicyID": "org.example:fixture"
  },
  "Payload": {
    "VCP-PRIVACY": {
      "ErasureDetails": {
        "Version": "1.2",
        "TargetIdentifier": {
          "Type": "ACCOUNT",
          "Hash": "bbbb...",
          "Salt": "example-salt"
        },
        "Scope": {
          "AffectedEventCount": 1,
          "FirstAffectedEventID":
            "019eaf10-0000-7000-8000-000000000002",
          "LastAffectedEventID":
            "019eaf10-0000-7000-8000-000000000002",
          "AffectedFields": ["ClientID"]
        },
        "Reason": {
          "Code": "SUBJECT_REQUEST",
          "Description": "Data subject request",
          "LegalBasis": "Applicable erasure obligation",
          "RequestReferenceHash": "cccc..."
        },
        "Authorization": {
          "AuthorizedByRoleID": "privacy-role",
          "AuthorizerSignature": "...",
          "AuthorizationTimestamp": 1791503999999998000,
          "DPONotified": true
        },
        "CryptoShredding": {
          "KeyIDHash": "dddd...",
          "KeyAlgorithm": "AES-256-GCM",
          "DestructionMethod": "CLOUD_KMS_DESTROY",
          "DestructionTimestamp": 1791503999999999000,
          "DestructionCertificate": "..."
        },
        "Verification": {
          "PreErasureEventHash": "sha256:eeee...",
          "PostErasureChainHash": "sha256:ffff..."
        }
      }
    }
  },
  "Security": {
    "EventHash": "sha256:aaaa...",
    "SignAlgo": "ED25519"
  }
}
        ]]></sourcecode>
        <t>ERASURE provides a technical mechanism that supports
        erasure obligations; it is not a legal determination. Whether
        crypto-shredding qualifies as erasure under a given regime is
        jurisdiction- and case-dependent. Deployments subject to
        reproduction-oriented recordkeeping rules (such as SEC Rule
        17a-4 audit-trail controls) should note that once a DEK is
        destroyed the original plaintext is, by design, not
        re-creatable.  Where a retention duty prevents deletion, a
        successful ERASURE event is not emitted for data that remains
        decryptable.  The legal basis and any retention override recorded
        with an erasure require verification outside the event schema
        <xref target="VCP-SPEC"/>.</t>
      </section>
    </section>

    <!-- ===== Section 7: SCRAPI Integration ===== -->
    <section anchor="scrapi-integration">
      <name>SCRAPI Integration</name>

      <t>VCP Transparency Services MUST implement SCRAPI
      <xref target="I-D.ietf-scitt-scrapi"/> with the following
      VCP-specific considerations:</t>

      <section anchor="scrapi-registration">
        <name>Registration (POST /entries)</name>
        <t>VCP Events are submitted as COSE_Sign1 Signed Statements:</t>

        <sourcecode type="http"><![CDATA[
POST /entries HTTP/1.1
Host: vcp-ts.example.com
Content-Type: application/cose

<COSE_Sign1 containing VCP Event payload>
        ]]></sourcecode>

        <t>The Transparency Service validates the VCP Registration Policy
        and returns a COSE Receipt on success.</t>
      </section>

      <section anchor="scrapi-retrieval">
        <name>Retrieval (GET /entries/{entry_id})</name>
        <t>Retrieve a specific VCP Event by its entry ID (derived from EventID).</t>
      </section>

      <section anchor="scrapi-receipt">
        <name>Receipt (GET /entries/{entry_id}/receipt)</name>
        <t>Retrieve the COSE Receipt for a registered VCP Event,
        containing the Merkle inclusion proof.</t>
      </section>

      <section anchor="scrapi-anchor">
        <name>Anchor Status (GET /anchors/{anchor_id})</name>
        <t>Retrieve the anchor status for a Merkle root, including the
        external reference (e.g., blockchain transaction ID or TSA token).</t>
      </section>
    </section>

    <!-- ===== Section 8: Security Considerations ===== -->
    <section anchor="security">
      <name>Security Considerations</name>

      <section anchor="security-integrity">
        <name>Integrity Architecture</name>
        <t>VCP's three-layer architecture provides defense in depth:</t>
        <ul>
          <li><strong>Layer 1 (Event Integrity):</strong> Digital signatures
          on individual events make forgery without the signing key
          detectable.</li>
          <li><strong>Layer 2 (Collection Integrity):</strong> Merkle trees
          enable efficient proof of inclusion.</li>
          <li><strong>Layer 3 (External Verifiability):</strong> External
          anchoring makes post-anchor omission detectable by enabling third
          parties to check presented Merkle roots against independent
          records.</li>
        </ul>

        <t>The optional per-Actor hash chain provides additional local
        integrity checks but is not required for external verifiability.</t>

        <t>Mitigations against key compromise:</t>
        <ul>
          <li>Frequent Merkle anchoring to external append-only stores</li>
          <li>HSM-based key storage (Platinum tier requirement)</li>
          <li>Key rotation with explicit ROTATE events</li>
        </ul>
      </section>

      <section anchor="security-quantum">
        <name>Quantum Resistance</name>
        <t>Ed25519 signatures are vulnerable to attacks by cryptographically
        relevant quantum computers. VCP provides crypto-agility
        to address future threats:</t>
        <ul>
          <li>SignAlgo field enables algorithm negotiation and migration</li>
          <li>The DILITHIUM2 registry value (ML-DSA
          <xref target="FIPS-204"/>) holds EXPERIMENTAL status in
          VCP v1.2: available for testing and hybrid
          (classical plus post-quantum) deployments, with Ed25519
          remaining the default and no certification requirement
          attached</li>
          <li>Hash chain integrity based on SHA-256 provides approximately
          128-bit post-quantum security against Grover's algorithm</li>
        </ul>
        <t>Implementers requiring post-quantum assurance SHOULD monitor
        CFRG and PQUIP working group outputs for updated guidance on
        algorithm selection and migration timelines.</t>
      </section>

      <section anchor="security-timing">
        <name>Timing Attacks</name>
        <t>Clock manipulation can enable backdating of events. Mitigations:</t>
        <ul>
          <li>UUID v7 provides embedded timestamp that must match TimestampInt</li>
          <li>Transparency Service enforces timestamp bounds</li>
          <li>Platinum tier requires PTPv2 synchronization</li>
          <li>External anchoring provides independent timestamp attestation</li>
        </ul>
      </section>

      <section anchor="security-privacy">
        <name>Privacy Considerations</name>
        <t>VCP Events may contain sensitive trading information. Operators
        SHOULD:</t>
        <ul>
          <li>Use crypto-shredding for personal data subject to GDPR</li>
          <li>Implement access controls on Transparency Service queries</li>
          <li>Consider encrypted payloads for highly sensitive data</li>
        </ul>
      </section>

      <section anchor="security-completeness">
        <name>Completeness Considerations</name>
        <t>SCITT provides inclusion proofs but does not by itself establish
        completeness (i.e., that no events have been omitted).  VCP adds the
        following:</t>
        <ul>
          <li>Sequence numbers enable detection of gaps within an Actor's chain</li>
          <li>External anchoring of batch roots, with AnchorRecords binding
          event count, first and last event identifiers and PolicyID,
          enables third-party detection of omission after anchoring</li>
          <li>Heartbeat events (HBT) provide liveness signals that support
          detection of extended omission periods</li>
        </ul>
        <t>These mechanisms make omission detectable at batch granularity and
        within the anchoring window; they do not establish that every event
        that occurred was recorded.  An event that was never recorded is
        detectable only through another record that implies it, such as an
        order without a corresponding acknowledgment or a counterparty
        record.  The completeness window implied by the tier's anchoring
        frequency should be disclosed when records are presented.</t>
      </section>
    </section>

    <section anchor="open-issues">
      <name>Open Issues</name>
      <t>A comparison of the VCP v1.2 integrity layer with the VAP v1.2
      framework requirements, published as an unadopted research observation
      record <xref target="VCP-VAP-OBS"/>, identified the following
      discrepancies.  They are not resolved by this revision.</t>
      <ol>
        <li>Local batch Merkle construction.  <xref target="VCP-SPEC"/>
        requires Merkle tree construction to follow RFC 6962, but its
        reference code duplicates an odd node, which yields roots that
        differ from those of <xref target="RFC9162"/> for batch sizes that
        are not a power of two, and its audit path generation omits that
        node.  Which construction governs, and how roots already computed
        with the reference code are treated, is not decided by this
        revision.  The question concerns local batch trees only: inclusion
        in a SCITT Transparency Service's log is shown by COSE Receipts
        <xref target="RFC9942"/> under the verifiable data structure that the
        Transparency Service uses.</li>
        <li>AnchorRecord signature scope.  The reference signing procedure
        signs the Merkle root bytes only, so the event count, endpoints and
        PolicyID carried in the AnchorRecord are not covered by that
        signature.  The signed bytes of the AnchorRecord remain to be
        defined.</li>
        <li>Integer timestamps.  TimestampInt and other nanosecond values are
        JSON integers that can exceed 2^53, whereas <xref target="RFC8785"/>
        requires numbers to be expressible as IEEE 754 doubles and recommends
        encoding larger integers as strings.  Values that are not exactly
        representable as a double, such as the TimestampInt
        1742034600123456789 in <xref target="appendix-example"/>, cannot be
        canonicalized by RFC 8785 without changing them.</li>
        <li>EventHash notation.  Examples and fixtures write EventHash with a
        "sha256:" prefix, while the reference computation yields a bare
        hexadecimal digest.</li>
        <li>Security object fields.  This document names the anchor
        reference AnchorRef, lists MerkleRoot as OPTIONAL in individual
        events, and has no MerkleIndex.  In <xref target="VCP-SPEC"/>, the
        specification text names the field AnchorReference and lists
        AnchorReference, MerkleRoot and MerkleIndex as REQUIRED from VCP
        v1.1, whereas the v1.2 JSON schema accepts both AnchorRef and
        AnchorReference and treats the three fields as VC-Certified
        requirements enforced by Registration Policy rather than as
        protocol-level requirements.  The canonical name and the
        requirement level are not decided by this revision, and the fields
        here are unchanged.</li>
      </ol>
    </section>

    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to the RFC Editor: please remove this section before
      publication.</t>
      <t>This section records the status of known implementations at the
      time of posting, following <xref target="RFC7942"/>.  The listing of
      any individual implementation here does not imply endorsement by the
      IETF, and the information presented here has not been verified by the
      IETF.  Other implementations may exist.</t>
      <ul>
        <li>There are no known external implementations of this profile or
        of VCP.</li>
        <li>VSO publishes first-party implementations: VCP-RTA, a reference
        implementation of VCP v1.1 event logging at the Silver tier, and
        proof-of-concept repositories for cTrader, FIX, Interactive Brokers,
        Nasdaq and Cloudflare.  VCP-RTA does not produce COSE_Sign1 Signed
        Statements or register them with a Transparency Service, and it does
        not implement VCP v1.2.  The proof-of-concept repositories have not
        been assessed against this profile.</li>
        <li>No Evidence Pack produced under VCP has been accepted in any
        regulatory, judicial, or audit proceeding.</li>
      </ul>
    </section>

    <!-- ===== Section 9: IANA Considerations ===== -->
    <section anchor="iana">
      <name>IANA Considerations</name>

      <t>This document has no IANA actions at this time.</t>

      <t>Future versions of this specification may request:</t>
      <ul>
        <li>Registration of media type "application/vcp+json"</li>
        <li>Establishment of a VCP Event Type registry</li>
        <li>COSE algorithm identifiers for VCP-specific extensions</li>
      </ul>
    </section>
  </middle>

  <back>
    <!-- ===== References ===== -->
    <references>
      <name>References</name>

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

        <reference anchor="RFC2119"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author fullname="S. Bradner"/><date month="March" year="1997"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/></reference>
        <reference anchor="RFC8174"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author fullname="B. Leiba"/><date month="May" year="2017"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/></reference>
        <reference anchor="RFC8785"><front><title>JSON Canonicalization Scheme (JCS)</title><author fullname="A. Rundgren"/><date month="June" year="2020"/></front><seriesInfo name="RFC" value="8785"/></reference>
        <reference anchor="RFC9052"><front><title>CBOR Object Signing and Encryption (COSE)</title><author fullname="J. Schaad"/><date month="August" year="2022"/></front><seriesInfo name="RFC" value="9052"/></reference>
        <reference anchor="RFC9562"><front><title>Universally Unique IDentifiers (UUIDs)</title><author fullname="K. Davis"/><date month="May" year="2024"/></front><seriesInfo name="RFC" value="9562"/></reference>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9943.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-scitt-scrapi.xml"/>

        <reference anchor="VCP-SPEC" target="https://github.com/veritaschain/vcp-spec/tree/v1.2.0/spec/v1.2">
          <front>
            <title>VeritasChain Protocol (VCP) Specification, Version 1.2, with normative annex VSO-SPEC-CHANGE-001</title>
            <author>
              <organization>VeritasChain Standards Organization</organization>
            </author>
            <date month="October" year="2026"/>
          </front>
          <annotation>Release tag v1.2.0 (GA consistency correction of 2026-10-09).</annotation>
        </reference>
      </references>

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

        <reference anchor="RFC3161"><front><title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title><author fullname="C. Adams"/><date month="August" year="2001"/></front><seriesInfo name="RFC" value="3161"/></reference>
        <reference anchor="RFC6962"><front><title>Certificate Transparency</title><author fullname="B. Laurie"/><date month="June" year="2013"/></front><seriesInfo name="RFC" value="6962"/></reference>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9162.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9942.xml"/>

        <reference anchor="VCP-VAP-OBS" target="https://github.com/veritaschain/vap-spec/blob/9fa5fbc68075079b4599e16940e9078db976cd59/experiments/vcp-v1.2-integrity-alignment/README.md">
          <front>
            <title>VCP v1.2 / VAP v1.2 integrity-layer observations (research observation, unadopted)</title>
            <author>
              <organization>VeritasChain Standards Organization</organization>
            </author>
            <date month="October" year="2026"/>
          </front>
        </reference>

        <reference anchor="FIPS-204" target="https://csrc.nist.gov/pubs/fips/204/final">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard (ML-DSA)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="NIST FIPS" value="204"/>
        </reference>
      </references>
    </references>

    <!-- ===== Appendix A: Complete Example ===== -->
    <section anchor="appendix-example">
      <name>Complete VCP Event Example</name>

      <t>The following is a complete VCP v1.2 Event encoded as JSON, ready
      to be wrapped in a COSE_Sign1 Signed Statement:</t>

      <sourcecode type="json"><![CDATA[
{
  "Header": {
    "EventID": "01961e5f-5c0d-7000-8000-123456789abc",
    "TimestampISO": "2026-03-15T09:30:00.123456789Z",
    "TimestampInt": 1742034600123456789,
    "EventType": "ORD",
    "ActorID": "algo-momentum-001",
    "ChainID": "chain-actor-001",
    "SequenceNum": 42,
    "PolicyID": "org.veritaschain.policy:gold-v1-2",
    "SCITTAlignment": {
      "Version": "1.2",
      "ConformanceProfile": "VCP_SCITT",
      "TransparencyServiceID": "ts.veritaschain.example",
      "ReceiptFormat": "COSE_RECEIPT"
    }
  },
  "Payload": {
    "VCP-TRADE": {
      "OrderID": "ord-2026-001",
      "Symbol": "AAPL",
      "Side": "BUY",
      "Quantity": "100",
      "Price": "185.50",
      "OrderType": "LIMIT",
      "TimeInForce": "DAY"
    },
    "VCP-GOV": {
      "AlgoID": "momentum-v2.3",
      "DecisionFactors": ["RSI_oversold", "volume_spike"],
      "ConfidenceScore": "0.87",
      "RiskCheckPassed": true
    }
  },
  "Security": {
    "EventHash": "sha256:a1b2c3...",
    "PrevHash": "sha256:f6e5d4...",
    "SignAlgo": "ED25519"
  }
}
      ]]></sourcecode>

      <t>Note: PrevHash is OPTIONAL. AnchorRef is populated once the batch
      containing the event has been anchored.  Numeric values other than
      the integer Header fields are encoded as strings.</t>
    </section>

    <!-- ===== Appendix B: JSON Schema ===== -->
    <section anchor="appendix-schema">
      <name>JSON Schema Reference</name>
      <t>The complete JSON Schema for VCP Events is available at:</t>
      <t><eref target="https://veritaschain.org/schema/vcp-event-v1.2.json"/></t>
    </section>

    <section anchor="appendix-changes-04">
      <name>Changes from draft-kamimura-scitt-vcp-04</name>
      <ul>
        <li>Corrected Open Issue 5: -04 stated that VCP-SPEC makes
        AnchorReference, MerkleRoot and MerkleIndex REQUIRED.  The
        specification text does so, but the VCP v1.2 JSON schema accepts
        AnchorRef as well and treats the three fields as certification
        requirements</li>
        <li>Editorial: removed the submissionType attribute (the existing
        versions have no stream on the Datatracker), stated the document
        date, and replaced non-ASCII characters</li>
      </ul>
    </section>

    <section anchor="appendix-changes-03">
      <name>Changes from draft-kamimura-scitt-vcp-03</name>
      <ul>
        <li>External anchoring is REQUIRED at every tier, matching VCP v1.2;
        the -02/-03 description of anchoring as OPTIONAL at the protocol
        level is withdrawn</li>
        <li>Tier table aligned with VCP v1.2: anchoring every 24 hours, hour
        and 10 minutes; clock synchronization best-effort, NTP (&lt;1ms) and
        PTPv2 (&lt;1 microsecond)</li>
        <li>ERASURE rewritten to the released Payload.VCP-PRIVACY.ErasureDetails
        encoding with seven REQUIRED members, reason codes and destruction
        methods; the pre-release flat fields are identified as not a v1.2
        encoding</li>
        <li>Added the ERR_* subtypes and the five SYS_* event types registered
        by the VCP v1.2 release</li>
        <li>Replaced draft-ietf-scitt-architecture with RFC 9943; updated the
        SCRAPI reference; added RFC 9942 and RFC 9162</li>
        <li>Added Open Issues (Merkle construction, AnchorRecord signature
        scope, integer timestamps, EventHash notation) and an Implementation
        Status section (RFC 7942)</li>
        <li>Replaced "immutable" with "append-only" and qualified completeness
        and integrity statements; numeric example values encoded as
        strings</li>
        <li>VCP-SPEC reference pinned to the v1.2.0 release tag and moved to
        the normative references</li>
        <li>Removed the VC-Certified tier list of -03, whose anchoring
        frequencies (including per-minute anchoring at Platinum) did not
        match VCP v1.2.  This also removes the -03 statement that Platinum
        certification REQUIRES multiple independent anchors with geographic
        distribution, and the statement that implementations MAY be
        protocol-compliant without certification; the latter is restated
        without BCP 14 keywords</li>
        <li>The AnchorRef requirement level (OPTIONAL) is unchanged; the
        difference from the VCP-SPEC field name and level is recorded as an
        open issue</li>
        <li>Removed statements that the profile is compatible with GDPR or
        provides privacy compliance; whether crypto-shredding satisfies a
        legal obligation is not determined by this document</li>
      </ul>
    </section>

    <!-- ===== Appendix C: Changes from -02 ===== -->
    <section anchor="appendix-changes-02">
      <name>Changes from draft-kamimura-scitt-vcp-02</name>
      <t>This section summarizes the changes from version -02 to -03.
      All changes align this profile with VCP Specification v1.2
      <xref target="VCP-SPEC"/>.</t>
      <ul>
        <li>Added the SCITT Alignment Object as an OPTIONAL Header
        extension, together with the VCP_BASE, VCP_SCITT, and
        VCP_REGULATORY conformance profiles (Section 4.4)</li>
        <li>Added the ERASURE event type, which records
        crypto-shredding operations as audit events (Section 6.3), and
        registered it in the event type table</li>
        <li>Corrected the post-quantum SignAlgo value: -02 listed
        "DILITHIUM3", which does not exist in the VCP SignAlgo
        registry; the registry value is "DILITHIUM2" (ML-DSA,
        FIPS 204), holding EXPERIMENTAL status in v1.2</li>
        <li>Migrated PolicyID examples from the provisional
        "urn:vcp:policy" form to the Issuer Domain + Local ID
        convention defined in VCP v1.2, and removed the
        corresponding URN-namespace item from IANA
        Considerations</li>
        <li>Updated the complete event example (Appendix A) and the
        JSON Schema reference (Appendix B) to v1.2</li>
      </ul>
    </section>

    <!-- ===== Appendix D: Changes from -01 ===== -->
    <section anchor="appendix-changes">
      <name>Changes from draft-kamimura-scitt-vcp-01</name>
      <t>This section summarizes the changes from version -01 to -02:</t>
      <ul>
        <li>Updated title to explicitly indicate this is a SCITT profile</li>
        <li>Updated to align with VCP Specification v1.1</li>
        <li>Clarified that external anchoring is a certification policy
        requirement, not a protocol-level mandate (new Section 5.4)</li>
        <li>PrevHash changed from REQUIRED to OPTIONAL</li>
        <li>Added Three-Layer Architecture section (Section 3.3)</li>
        <li>Added PolicyID as a REQUIRED field in the Header</li>
        <li>Added Completeness Considerations section (Section 8.5)</li>
        <li>Clarified that this profile does not define a new protocol</li>
        <li>Removed unused informative references</li>
      </ul>
    </section>

    <!-- ===== Acknowledgements ===== -->
    <section anchor="acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank the members of the VeritasChain Standards
      Organization Technical Committee for their contributions to
      this specification. This work builds upon the SCITT architecture
      developed by the IETF SCITT Working Group, and the Certificate
      Transparency work in <xref target="RFC6962"/>.</t>
      <t>Special thanks to the SCITT WG participants who provided feedback
      on draft-kamimura-scitt-vcp-01, which informed the improvements in
      this version.</t>
    </section>
  </back>
</rfc>
