Network Working Group                                          H. Jorgen
Internet-Draft                                                  Kenosian
Intended status: Experimental                    22 September 2026
Expires: 21 February 2027

              

The TLS TimeToken Secure Protocol (TTTPS)

draft-helmprotocol-tttps-11

Abstract This document specifies TTTPS, an application-layer protocol for evaluating temporal evidence before an application accepts an event or performs a related state transition. The protocol defines a fixed 180-byte Proof-of-Time Record v2 containing context, freshness, integrity, issuer-authentication, and holder-authentication fields. When TLS 1.3 transport binding is selected, a separate holder binding proof is derived from TLS exporter output and holder key material. The proof is sent with, but is not part of, the 180-byte record. The fixed-record GRG admission path is bounded with respect to peer count under declared frame and correction limits. TTTPS returns an explicit admission result before application state mutation. Confidence and propagation-aware profiles are optional. This document does not define agent intent, audit record schemas, or transparency-log operation. Discussion Note This document is prepared for discussion in the AUDIT BOF and related IETF venues. Comments should be directed through the venue selected by the responsible IETF process. Changes from -10: * Clarified the 180-octet v2 layout and removed the overlapping reserved field. * Added issuer trust-anchor and certificate resolution before issuer signature verification. * Kept confidence and propagation processing outside the core wire and cryptographic verification path. * Clarified the separate TLS exporter binding proof and the scope of the bounded single-record processing claim. * Limited this revision to the core protocol; profile mathematics and physical-context algorithms belong in companion drafts. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on 21 February 2027. Jorgen Expires 21 February 2027 [Page 3]

Internet-Draft TTTPS September 2026 Copyright Notice Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/ license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. 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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6 1.1. Motivation . . . . . . . . . . . . . . . 7 1.2. Objectives . . . . . . . . . . . . . . . . . . . . . . . 7 1.3. Protocol Overview . . . . . . . . . . . . . . . . . . . . 8 1.4. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.5. Terminology . . . . . . . . . . . . . . . . . . . . . . . 9 1.6. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . 11 1.6.1. Financial Infrastructure Timestamping . . . . . . . . 11 1.6.2. AI Agent Networks . . . . . . . . . . . . . . . . . . 11 1.6.3. Operational Requirements Summary . . . . . . . . . . 11 1.7. Problem Statement . . . . . . . . . . . . . . . . . . . . 12 2. Proof-of-Time Structure . . . . . . . . . . . . . . . . . . . 14 2.1. PoT Record v2 Wire Format . . . . . . . . . . . . . . . . 14 2.2. Field Definitions . . . . . . . . . . . . . . . . . . . . 15 2.3. Holder Authentication Types . . . . . . . . . . . . . . . 17 2.4. Generation Algorithm . . . . . . . . . . . . . . . . . . 17 2.5. Verification Procedure . . . . . . . . . . . . . . . . . 18 2.6. JOSE and COSE Data Representations . . . . . . . . . . . 19 2.6.1. COSE / CBOR Data Model (CWT Mapping) . . . . . . . . 19 2.6.2. JOSE / JSON Data Model (JWS Mapping) . . . . . . . . 19 3. Gap Analysis vs Existing Timestamping Standards . . . . . . . 20 4. Integrity Algorithm Interface . . . . . . . . . . . . . . . . 21 4.1. Abstract Interface . . . . . . . . . . . . . . . . . . . 21 4.2. Optional Integrity Profiles . . . . . . . . . . . . . . . 22 4.3. External GRG Interface The core does not define the internal construction, stage ordering, parameters, correction capacity, or transport framing of an optional GRG profile. A selected profile MUST be identified by an authenticated context and MUST declare its protected byte domain, decoder limits, and intact/resolved/unresolvable result contract. The core MUST process an unresolvable result as an integrity failure. A later freshness, issuer, holder, or policy result MUST NOT promote it to valid. The Confidence document is the companion specification for GRG-specific processing; this core document makes no IPR determination. 5.1. State Machine . . . . . . . . . . . . . . . . . . . . . . 22 5.2. Transition Conditions and Hysteresis . . . . . . . . . . 22 5.3. Penalty and Exponential Backoff . . . . . . . . . . . . . 23 5.4. Policy Thresholds 5.5. External Policy and Profile Inputs 5.6. GRG Physical Framing Boundary

1. Introduction

TTTPS defines an application-layer protocol for evaluating temporal evidence before an application accepts an event or performs a related state transition. It is intended for records exchanged by agents, services, and other distributed principals. TLS provides peer authentication, confidentiality, and channel integrity. DNSSEC provides origin authentication and integrity for DNS data. Neither protocol, by itself, provides the temporal admission function defined here. TTTPS does not replace TLS, DNSSEC, RATS, WIMSE, OAuth, AUDIT, or SCITT.

1.1. Motivation

An authenticated event may still be stale, replayed, or bound to the wrong context. If an event changes application state before those conditions are evaluated, a later audit record cannot undo the state transition. TTTPS places the temporal decision before that transition.

1.2. Objectives

TTTPS has four objectives: * bind a temporal record to an issuer, context, nonce, and holder session; * reject invalid, replayed, or stale records before application ingestion; * return explicit ACCEPT, HOLD, UNVERIFIABLE, or REJECT outcomes; and * support a fixed-record GRG path whose verification cost is O(1) with respect to peer count when frame, correction, and memory limits are fixed. The last property applies to the bounded single-record path. It does not make quorum aggregation, queue selection, entropy analysis, or transparency logging O(1).

1.3. Protocol Overview

A sender obtains an issuer-signed PoT Record. When transport binding is enabled, the holder produces a separate binding proof after the TLS handshake. The receiver parses the fixed 180-octet record, verifies integrity and context, checks replay and freshness, verifies the issuer signature and holder proof, and only then invokes application policy. The admission result precedes application state mutation. Over TLS 1.3 or QUIC, the binding uses the TLS exporter after the handshake reaches the application-data state. Over other transports, the deployment MUST define an equivalent binding or explicitly disable that part of the protocol.

1.4. Scope

The core specification defines the 180-octet PoT Record, its integrity boundary, issuer and holder authentication, transport binding, freshness checks, and admission states. Confidence and Deep-space processing are optional profiles. The core does not define agent intent, an audit record schema, a transparency log, or a particular time-source vendor.

1.5. Terminology

Issuer: the authority that creates and signs a PoT Record. Holder: the principal that proves possession of the holder key or shared secret and binds the record to the transport session. Verifier: the party that evaluates a record and returns an admission result. PoT Record: the fixed 180-octet protocol record described in Section 2. Context manifest: authenticated out-of-band data identified by ctx_id.

1.6. Use Cases

TTTPS can be used before an agent action, service request, or delegated interaction is admitted to an application state machine. In an AUDIT deployment, the admission result can be carried into an interaction, action, or delegation record. In a SCITT deployment, the result and record digest can be logged after the local admission decision. These mappings do not change the TTTPS wire record.

1.7. Problem Statement

Existing authentication and transparency mechanisms do not by themselves answer whether an event is fresh and context-valid at the instant it is admitted. TTTPS addresses that pre-ingestion gap. It does not claim that a valid temporal record proves agent intent, physical truth, or the absence of a compromised trust authority.

2. Proof-of-Time Structure

This section specifies the fixed 180-octet PoT Record. The record

separates the Issuer's attestation of synthesised time from the Holder's proof of possession bound to a live TLS session. The separate binding proof closes the binding weakness identified in earlier revisions. 2.1. PoT Record v2 Wire Format A PoT Record is encoded as a fixed 180-octet binary sequence. All multi-octet integer fields are in network byte order (big-endian). Offset Length Field ------ ------ ----------------------------------------------- 0 1 version (0x02 for this document) 1 1 holder_auth_type (0x01 Ed25519 pk MTI, 0x02 shared secret OPTIONAL) 2 2 alg_id (integrity algorithm, Section 4) 4 8 ts (TAI microseconds since epoch) 12 4 dispersion (microseconds, uncertainty bound) 16 16 ctx_id (opaque context identifier) 32 16 nonce (cryptographically random) 48 32 holder_auth_data (holder public key, or PSK digest) 80 32 integrity_tag (Section 4, algorithm per alg_id) 112 4 issuer_key_id (Issuer signing-key identifier) 116 64 issuer_sig (Ed25519 over octets 0-115) ------ ------ Total: 180 octets The binding_proof carried alongside the PoT Record at TLS binding time (Section 6.1) is a separate value, not part of these 180 octets: it is computed by the Holder from live TLS session material and cannot be produced at PoT generation time, which is the point of the separation. 2.2. Field Definitions version (8 bits): Protocol version. This document defines version 2 (0x02). Implementations MUST reject PoT records with unknown versions. holder_auth_type (8 bits): Identifies how the Holder proves possession. See Section 2.3. Implementations MUST reject unknown values. alg_id (16 bits): Identifies the integrity algorithm protecting this record (Section 4). Implementations MUST reject unsupported values. ts (64 bits): Synthesised timestamp: ts = median(T_1, ..., T_k), k >= 3 sources from independent administrative domains. TAI microseconds since the TAI epoch. TAI, rather than UTC, is used to avoid leap-second ambiguity in the freshness comparison of Section 2.5. Synthesis MUST use at least three independent sources from distinct administrative domains (e.g., a national metrology laboratory, a GNSS-disciplined source, and an NTS-authenticated source). dispersion (32 bits): Synthesis uncertainty bound in microseconds: dispersion = max|T_i - ts| across the k sources. Used in the freshness check of Section 2.5. ctx_id (128 bits): An opaque, application-assigned context identifier. Binds the PoT Record to its context; see Section 4.1. A verifier that enables an optional profile MUST resolve ctx_id against an authenticated context manifest before selecting a physical or confidence profile. The manifest MAY select a terrestrial, near-Earth/SAGIN, cislunar, or deep-space profile. A missing, expired, contradictory, or unauthorized mapping MUST result in HOLD or UNVERIFIABLE; the verifier MUST NOT infer deep-space context from packet arrival time or silently apply a terrestrial default. The manifest is out of band and is not part of the fixed 180-octet record. It SHOULD bind the profile identifier, epoch, time scale, coordinate frame, endpoints, OWLT interval, navigation or ephemeris authority, uncertainty budget, peer/provenance digest, and policy revision to ctx_id. This lookup is the automatic profile-dispatch mechanism and does not change the PoT wire length. nonce (128 bits): Cryptographically random value. MUST be generated with a cryptographically secure random number generator. Provides replay prevention in conjunction with Section 9.2. holder_auth_data (256 bits): For holder_auth_type 0x01: the Holder's Ed25519 public key. For holder_auth_type 0x02: SHA-256(k_h), a digest of the pre-shared secret, never the secret itself. integrity_tag (256 bits): Output of the algorithm identified by alg_id (Section 4), computed over octets 0-79 of this record. Detection and correction semantics are defined by the selected algorithm profile; the core SHA-256 path is detection-only. issuer_key_id (32 bits): Identifies the Issuer's signing key, enabling key rotation without requiring verifiers to trial multiple keys. issuer_sig (512 bits): Ed25519 signature by the Issuer's private key over octets 0-115 (all preceding fields), following EUF-CMA security. Issuer Integrity Property: the Issuer cannot forge a timestamp without detection. A forged ts' != ts produces a different integrity_tag', and issuer_sig over the changed record then fails verification against the published Issuer public key. This is a mathematical consequence of EUF-CMA security, not a procedural control. The remaining trust assumption is that the Issuer's private key is not compromised; this is the same trust model as PKI (Certificate Authority), applied to time rather than identity. Issuer misbehaviour is auditable via an append-only commitment log of published PoT records. 2.3. Holder Authentication Types 0x01 -- Ed25519 public key (Mandatory-to-Implement): holder_auth_data = holder_pk (32 octets). binding_proof (64 octets) = Ed25519.Sign(holder_sk, binding_input), verifiable by any party holding holder_pk (Section 6.1). 0x02 -- Shared secret (OPTIONAL): holder_auth_data = SHA-256(k_h) (32 octets). binding_proof (32 octets) = HMAC-SHA256(k_h, binding_input). This type requires out-of-band distribution of k_h between Holder and verifier and MUST NOT be used where verification by an external party that does not already possess k_h is required. 2.4. Generation Algorithm 1. Query k >= 3 time sources from independent administrative domains. 2. Compute ts = median(T_1, ..., T_k), in TAI microseconds. 3. Compute dispersion = max|T_i - ts|. 4. If dispersion > stratum_tolerance: ABORT. 5. Generate a 128-bit cryptographically random nonce. 6. Assemble octets 0-79: version, holder_auth_type, alg_id, ts, dispersion, ctx_id, nonce, holder_auth_data. 7. Compute integrity_tag over octets 0-79 using the algorithm identified by alg_id (Section 4). 8. Assign issuer_key_id identifying the signing Issuer key. 9. Compute issuer_sig = Ed25519.Sign(issuer_sk, octets 0-115). 10. Output the 180-octet PoT Record v2. binding_proof is deliberately not computed at generation time: it requires TLS session material that does not yet exist when the Issuer generates the record, and is instead computed by the Holder at TLS binding time (Section 6.1). 2.5. Verification Procedure Implementations MUST verify a received (binding_proof, PoT Record) pair in the following order. Reordering this sequence, in particular performing step 3 later, reintroduces the -06 binding weakness described in the Discussion Note. 1. Frame length check: the received frame MUST equal len(binding_proof) + 180 octets, where len(binding_proof) is 64 (holder_auth_type 0x01) or 32 (holder_auth_type 0x02); otherwise REJECT. 2. Support check: version, alg_id, and holder_auth_type MUST all be values the verifier supports; otherwise REJECT. 3. Integrity-tag interpretation (single fixed-cost pass): apply the algorithm profile identified by alg_id to octets 0-79 and compare against integrity_tag. The result is *intact*, *resolved* only when the selected profile defines bounded correction and confirms recovery, or *unresolvable* (REJECT immediately). This check MUST be performed before freshness, replay, certificate resolution, signature, or holder-binding checks. 4. Freshness: if |now - ts| > tier_window + dispersion: REJECT. Trigger FULL mode per Section 5.3. 5. Anti-replay: if the (ctx_id, nonce) pair has been seen before within the freshness window: REJECT. 6. Issuer trust resolution: resolve issuer_key_id through an authenticated out-of-band trust bundle or an authenticated in-band certificate or SVID exchange. The verifier MUST validate the chain, key usage, validity interval, and configured revocation or status policy. issuer_key_id is only a selector and MUST NOT be treated as an unauthenticated trust anchor. Failure yields UNVERIFIABLE or REJECT according to the trust policy. 7. issuer_sig verification: verify the Ed25519 signature over octets 0-115 against the resolved Issuer public key; otherwise REJECT. 8. binding_proof verification: recompute the expected binding_input from the live TLS-Exporter output (Section 6.1) and verify binding_proof against holder_auth_data per holder_auth_type; otherwise REJECT. 9. Accept. NOTE: performing integrity-tag interpretation first (step 3) gives early, fixed-cost rejection of corrupted or foreign-context submissions before the more expensive signature and binding-proof checks are attempted. 2.6. JOSE and COSE Data Representations To facilitate seamless integration with modern identity, attestation, and cryptographic token frameworks (e.g., JWTs, CWTs, RATS Conceptual Message Wrappers [I-D.ietf-rats-msg-wrap]), a PoT Record v2 MAY be represented as either a COSE (CBOR Object Signing and Encryption) map or a JOSE (JSON Object Signing and Encryption) claim set. 2.6.1. COSE / CBOR Data Model (CWT Mapping) In CBOR Web Token (CWT) contexts, the PoT Record v2 is represented as a CBOR Map containing the following integer-keyed claims: +-------+-------------------+-------------------------------------+ | Claim | Key Name | CBOR Type & Value | +-------+-------------------+-------------------------------------+ | 1 | ver | unsigned integer (0x02) | | 2 | auth_type | unsigned integer (0x01 / 0x02) | | 3 | alg_id | unsigned integer (core/profile-defined) | | 4 | ts | unsigned integer (microsecond TAI) | | 5 | dispersion | unsigned integer (microseconds) | | 6 | ctx_id | byte string (16 octets) | | 7 | nonce | byte string (16 octets) | | 8 | holder_auth_data | byte string (32 octets) | | 9 | integrity_tag | byte string (32 octets) | | 10 | issuer_key_id | unsigned integer (32 bits) | | 11 | issuer_sig | byte string (64 octets) | +-------+-------------------+-------------------------------------+ When encapsulated within a COSE_Sign1 structure, the 180-octet raw PoT record forms the COSE payload, and the binding_proof is carried in an unprotected COSE header attribute (Label: TBD_COSE_HEADER_TTTPS). 2.6.2. JOSE / JSON Data Model (JWS Mapping) In JSON Web Signature (JWS) and JWT contexts, the PoT Record v2 is represented as a JSON Object with deterministic Base64URL string encodings for byte arrays: { "ver": 2, "auth_type": 1, "alg_id": 1, "ts": 1787184000000000, "dispersion": 5, "ctx_id": "Base64URL(16B)", "nonce": "Base64URL(16B)", "holder_auth_data": "Base64URL(32B)", "integrity_tag": "Base64URL(32B)", "issuer_key_id": 1001, "issuer_sig": "Base64URL(64B)" } When transmitted over HTTP APIs, a detached JWS header carries the binding_proof as a JOSE header parameter ("pot_bp").

3. Relationship to Existing Mechanisms

TLS supplies peer authentication, confidentiality, and channel integrity. DNSSEC supplies origin authentication and integrity for DNS data. RFC 3161 supplies timestamp tokens for document-preservation workflows. AUDIT and SCITT define audit and transparency records. TTTPS addresses a different point in the processing sequence: it evaluates a fixed record before the application commits a state change. A deployment MAY record the result in an AUDIT record or a SCITT log after admission. Those integrations do not change the TTTPS wire format, and this document does not claim that TTTPS replaces those mechanisms.

4. Integrity Algorithm Interface

4.1. Abstract Interface Each alg_id value selects an algorithm that computes integrity_tag over the 80-octet payload described in Section 2.1, and that a verifier uses to interpret integrity_tag against three possible outcomes: intact, resolved, or unresolvable (Section 2.5, step 3). This document defines SHA-256 as the core algorithm. Optional integrity profiles, including GRG, are defined outside the core and are identified here only through their profile documents. alg_id 0x0001 -- SHA-256 (Mandatory-to-Implement): Detection-only. Fully and publicly specified in Appendix B.1, All conformant implementations MUST support this algorithm. Optional GRG profile: A verifier MAY select a GRG integrity profile only when the profile document is available and the deployment has separately evaluated interoperability and IPR applicability. The core does not assign a GRG algorithm definition or require its implementation. See [CONFIDENCE]. When the Confidence GRG profile is selected, its intact/resolved/ unresolvable integrity verdict is evaluated before freshness, replay, signature, confidence, or physical-context gates. A later gate MUST NOT convert unresolvable input into a valid PoT. Implementations of any registered algorithm MUST satisfy, at minimum: * Detection: a registered algorithm MUST state its detection and, if applicable, correction properties in its profile specification. * Context binding: the computation MUST incorporate ctx_id (via its presence in the protected octets), so that a record generated under one ctx_id cannot be revalidated as if generated under another. This revision does not allocate additional alg_id values. A future Working Group revision may define an allocation procedure after review. 4.2. Optional Integrity Profiles The core does not reproduce the internal construction, stage ordering, parameter choices, or correction claims of optional integrity profiles. The Confidence track [CONFIDENCE] is the independent profile reference for the optional GRG interface. A deployment MUST NOT infer that a profile is implemented, interoperable, or free of IPR constraints merely because the core accepts an algorithm identifier. 4.3. External GRG Interface The core does not define the internal construction, stage ordering, parameters, correction capacity, or transport framing of an optional GRG profile. A selected profile MUST be identified by an authenticated context and MUST declare its protected byte domain, decoder limits, and intact/resolved/unresolvable result contract. The core MUST process an unresolvable result as an integrity failure. A later freshness, issuer, holder, or policy result MUST NOT promote it to valid. The Confidence document is the companion specification for GRG-specific processing; this core document makes no IPR determination.

5. AdaptiveSwitch

5.1. State Machine AdaptiveSwitch maintains per-node state in {TURBO, FULL}. A node enters TURBO only after the configured promotion conditions are met. A node leaves TURBO on an integrity failure, a freshness failure, or a confidence result below the configured maintenance threshold. 5.2. Transition Conditions and Hysteresis The promotion threshold, maintenance threshold, observation window, and freshness window are deployment parameters. The promotion condition MUST include a valid integrity result and an in-window submission. The maintenance condition MUST be no less strict than the deployment policy declares. Implementations SHOULD use hysteresis to avoid rapid state flapping. 5.3. Penalty and Exponential Backoff A policy failure MAY transition the node to FULL and MAY increase a bounded backoff interval. The maximum backoff, reset condition, and counter scope MUST be configured and recorded. Backoff is an admission policy; it is not a cryptographic proof of malicious behaviour. 5.4. Policy Thresholds AdaptiveSwitch thresholds, freshness windows, backoff limits, and any cost or service policy are deployment parameters. An implementation MUST NOT treat example values in an implementation profile as protocol-wide guarantees. A deployment MAY use hysteresis and backoff to limit repeated policy failures, but these mechanisms do not establish an economic equilibrium or eliminate Byzantine behaviour. 5.5. External Policy and Profile Inputs TTTPS core verification ends after the integrity, freshness, replay, issuer-trust, and holder-binding checks in Section 2.5. A deployment MAY invoke a separate policy evaluator after those checks. The evaluator MAY consume G-Score, correlation-aware confidence, Epi-Entropy, effective-quorum, or propagation-aware context signals defined by the companion profiles [CONFIDENCE] and [DEEPSPACE]. A policy result MUST NOT repair a failed core check, change the meaning of a PoT record, select a decoder, or modify the 180-octet record. It MAY return ACCEPT, HOLD, UNVERIFIABLE, or REJECT under its declared policy. HOLD MUST have a bounded terminal transition. 5.6. GRG Physical Framing Boundary The optional GRG integrity profile and any link-layer GRG framing profile are distinct contracts. The record is not automatically a Golay codeword stream because of its length. A deployment MUST declare the FEC code, interleaver, Rice parameter, protected byte domain, padding rule, and decoder limits before reception. The normative PoT record for this document is 180 octets. A framing profile MUST identify its own protected domain and length. Golay (23,12,7) and extended Golay [24,12,8] are not interchangeable, and a decoder MUST NOT select a code by length inference. The current checked GRG reference path uses Golay (23,12,7); any other code requires a separately identified profile and interoperability vectors. GRG parameter selection is session- and context-bound. The receiver MUST configure the selected profile before decoding and MUST fail closed on a profile or stream mismatch. FEC correction MUST NOT convert a failed cryptographic integrity result into PASS. After successful deinterleaving, FEC, and stream validation, the recovered 180-octet record is passed to the PoT parser. Epi-Entropy and G-Score operate only after that boundary and do not control FEC decoding.

6. Transport Binding

6.1. TLS 1.3 Binding TTTPS uses the TLS Exporter mechanism [RFC5705] to derive binding material from an established TLS 1.3 session, following the model of [NTS] Section 5.1. This requires NO new TLS Extension Type codepoint and is fully backward-compatible with existing TLS 1.3 implementations. Jorgen Expires 21 February 2027 [Page 24]

Internet-Draft TTTPS September 2026 Binding computation (normative), performed by both Holder and verifier: record_hash = SHA-256(pot_record) [all 180 octets] context_value = SHA-256("tttps-binding-v2" || 0x00 || record_hash || ctx_id || nonce) exporter_output = TLS-Exporter("EXPORTER-TTTPS-v2-Binding", context_value, 32) binding_input = "tttps-binding-v2" || 0x00 || exporter_output || ctx_id || nonce binding_proof is then computed by the Holder according to holder_auth_type (Section 2.3): 0x01: binding_proof = Ed25519.Sign(holder_sk, binding_input) (64 octets) 0x02: binding_proof = HMAC-SHA256(k_h, binding_input) (32 octets) exporter_output MUST NOT be transmitted; only binding_proof and the PoT Record are sent. Because exporter_output is derived from the TLS session's master secret [RFC5705] Section 4, a PoT captured from session A cannot be replayed into session B: recomputing binding_input in session B yields a different value, and binding_proof over session A's binding_input fails verification. Because binding_proof additionally requires holder key material the session alone does not provide, a party present in the session but not in possession of holder_sk or k_h cannot produce a valid binding_proof even for its own session -- the defect this revision corrects (Discussion Note). PoT Frame format: holder_auth_type 0x01: pot_record(180) || binding_proof(64) = 244B holder_auth_type 0x02: pot_record(180) || binding_proof(32) = 212B The verifier's procedure is given in Section 2.5. 6.2. QUIC Integration TTTPS operates over QUIC [RFC9000] post-handshake. The TLS Exporter is available after QUIC handshake completion. Jorgen Expires 21 February 2027 [Page 25]

Internet-Draft TTTPS September 2026 Holder Verifier |--Initial[CRYPTO]-------------->| (TLS ClientHello) |<-Initial[CRYPTO]--------------| (TLS ServerHello) |<-Handshake[CRYPTO]------------| (TLS EncryptedExtensions) |--Handshake[CRYPTO]----------->| (TLS Finished) | | | Holder computes binding_proof| | per Section 6.1 | | | |--1-RTT[STREAM:PoT frame]----->| |<-1-RTT[STREAM:PoT-Ack]--------| PoT frames MUST be sent in a dedicated QUIC stream. The stream identifier is a deployment parameter; this revision makes no IANA allocation. 6.3. HTTP/3 Frame Type Over HTTP/3 [RFC9114], PoT records are conveyed in a dedicated HTTP/3 frame type. Frame Type: deployment-specific value; this revision requests no IANA allocation Frame Length: variable (244 octets with a type-0x01 binding_proof, 212 octets with type-0x02) Frame Body: PoT Record || binding_proof (Section 2.1) PoT frames MAY appear in any HTTP/3 request or response stream. Servers MUST NOT reject requests solely on the basis of absent PoT frames (backward compatibility). 6.4. Backward Compatibility Servers that do not implement TTTPS MUST be able to process TLS 1.3, QUIC, and HTTP/3 connections that include TTTPS binding material. TTTPS MUST NOT modify the TLS handshake in a way that causes negotiation failure with non-TTTPS peers. Implementations SHOULD use ALPN [RFC7301] extension identifier "tttps/1" or another deployment-specific identifier; this revision does not request IANA allocation to negotiate TTTPS capability between peers. The ALPN identifier negotiates TTTPS capability at the transport layer; it is not tied to the PoT Record version, which is negotiated separately via the version field (Section 2.2). Jorgen Expires 21 February 2027 [Page 26]

Internet-Draft TTTPS September 2026

7. Clock Substrate Interface

A deployment MUST provide the Issuer with a timestamp and an uncertainty bound in the units and time scale declared by the active context. The source, calibration state, age, and uncertainty bound MUST be retained as evidence. This document does not require a particular hardware clock, cloud provider, kernel interface, polling interval, or storage system. An implementation MAY use a pre-published clock sample for event sealing. If it does so, the sample age and accumulated uncertainty MUST be included in dispersion. A fixed-record implementation MAY implement the hot path with bounded constant work and no per-event allocation; this is an implementation property under fixed resource limits, not a guarantee about the clock substrate or the network.

8. Tier Structure

The core protocol does not assign fixed freshness intervals to tier identifiers. A deployment MAY define tier identifiers for different operating policies, but the active context manifest MUST bind each identifier to a time scale, an interval, a tier_window, and a max_hold_window. These values are policy inputs and are not inferred from the record or from the transport. A verifier MUST reject or return UNVERIFIABLE when the selected tier is absent, expired, or not authenticated by the active context manifest. The freshness decision in Section 2.5 uses the authenticated tier_window and dispersion. This section defines no fee, latency, or performance target.

9. Security Considerations

9.1. Compromised Time Sources and Path Attacks This section addresses two threat models: compromised time sources and compromised network paths between the PoT Issuer and its sources (the standard IETF network adversary model). Compromised source: a single compromised time source biases the synthesised timestamp by at most 1/k of the manipulation, where k >= 3 is the source count. For k=4 independent sources, single-source bias impact <= 0.25 of manipulation magnitude. Compromised network path: an attacker controlling the path between the Issuer and one source can inject delayed or replayed responses. Two mitigations apply: (a) multi-source median (ts = median(T_1, ..., T_k), k >= 3, distinct administrative domains) -- a path-level attacker must simultaneously compromise paths to a majority of sources to bias the median; (b) the stratum tolerance check (Section 2.4, step 4) -- a single-path delay injection that pushes one source beyond tolerance is detected and rejected. NTS [NTS] on the path between Issuer and sources provides an additional layer of path authentication; implementations SHOULD use NTS-authenticated sources where available. Implementations MUST use sources from distinct administrative domains (e.g., a national metrology laboratory, a GNSS-disciplined source, and an NTS- authenticated source) to maximise independence. Sources from a single autonomous system MUST NOT be counted as independent. Jorgen Expires 21 February 2027 [Page 30]

Internet-Draft TTTPS September 2026 9.2. Replay Prevention Each PoT Record includes a 128-bit cryptographically random nonce (Section 2.2). Verifiers MUST maintain a nonce cache, keyed on (ctx_id, nonce), for the duration of the tier freshness window. Duplicate pairs MUST be rejected. issuer_sig seals the nonce against Issuer-side forgery. Cross- session replay is additionally prevented by the TLS binding of Section 6.1. _Implementations MUST perform the nonce-cache duplicate-check and the nonce-cache insertion as a single atomic operation._ Split-phase implementations (check-then-insert without atomicity) are subject to a Time-of-Check to Time-of-Use (TOCTOU) race under concurrent request load, permitting an attacker to replay a captured record N times by issuing N concurrent verifications faster than the cache-insert phase completes. The reference implementation uses Redis with SET pot:{event_id} NX EX <ttl>, which is atomic on the Redis server; equivalent atomic primitives include PostgreSQL INSERT ... ON CONFLICT DO NOTHING RETURNING, DynamoDB ConditionalPutItem, and in-process std::collections::HashSet guarded by a std::sync::Mutex. Empirical validation: a split-phase implementation deployed with 20 concurrent identical requests observed 20/20 duplicate acceptances (100 percent TOCTOU exploitation success). After conversion to atomic SET-NX, the same load produced 1 acceptance and 19 rejections, matching the correct behaviour. 9.3. Sybil Time Sources and Unique Quorum A valid signature or a fresh key does not establish a new independent physical source. Before constructing the agreement distribution, density operator, or robust aggregate, the verifier MUST validate D-chain freshness and map each stable_node_id to an authority-bound PhysicalEntity and provenance group. Duplicate labels for one physical entity count zero after the first admitted vote. The effective quorum is N_eff = | union over i in Roster PhysicalEntity(stable_node_id_i) |. Quorum and Byzantine aggregation MUST use N_eff rather than raw label or key count. The f < N_eff/2 condition MUST be checked before applying a Byzantine median. If the condition fails, the verifier MUST enter HOLD_AHE or InsufficientKnowledge and MUST NOT fabricate a quorum. This defense is bounded by the declared identity and provenance authority. It provides no universal guarantee against an attacker that can forge or compromise that authority. 9.4. Side-Channel Considerations Integrity-tag verification and Ed25519 verification MUST be implemented in constant time. Variable-time implementations risk timing side-channel attacks against secret key material. The nonce MUST be generated with a constant-time CSPRNG. Jorgen Expires 21 February 2027 [Page 31]

Internet-Draft TTTPS September 2026 9.5. Resource and Ordering Attacks An attacker may submit stale, reordered, or high-rate records to consume verifier resources or influence an application policy. The verifier MUST apply the fixed-record integrity and freshness checks before state mutation. Queue limits, admission quotas, and backoff MAY be configured by the deployment. TTTPS does not claim that these controls make an attack economically irrational or remove the need for application-level rate limiting. 9.6. Delay-Based Temporal Attacks [NTS] Section 8.6 identifies delay attacks as a primary threat to time synchronisation security. TTTPS addresses this through two complementary gates, applied in sequence (Section 2.5): (1) Integrity-tag gate: a PoT generated under context ctx_id cannot be presented in a different context ctx_id' without the integrity check failing, because ctx_id is part of the protected octets (Section 4.1). This is analogous to the cookie freshness mechanism of [NTS] Section 5.4. (2) AdaptiveSwitch freshness gate (Section 5.3): a PoT submitted outside the tier freshness window is rejected regardless of cryptographic validity, and FULL mode is triggered immediately. FILO+Integrity processing discipline: among records that pass both gates, the most recent qualifying submission is processed first. A delayed record outside the freshness window is rejected. Queue limits and backoff are deployment policy and do not establish an economic guarantee. The full flow is diagrammed in Appendix D. 9.7. Integrity Algorithm Security The core SHA-256 algorithm has no correction capability and its security depends on its standard cryptographic assumptions. Optional GRG security and correction properties are profile-specific and MUST NOT be inferred by a core verifier. The Confidence profile [CONFIDENCE] is the source for any GRG interface claims; this core makes no independent GRG security claim. Jorgen Expires 21 February 2027 [Page 32]

Internet-Draft TTTPS September 2026 Implementations MUST NOT expose internal algorithm state, shard values, or intermediate pipeline results through public APIs or error messages. 9.8. Path Manipulation An adversary controlling only network paths (not the Issuer's Ed25519 private key, nor holder key material) cannot produce a PoT that passes verification: context binding (Section 4.1) rejects cross- context replay, the freshness gate (Section 2.5, step 4) rejects path-induced delay beyond the tier window, and the TLS binding (Section 6.1) rejects cross-session replay because binding_proof requires holder key material the path attacker does not possess. This holds independent of the network-layer substrate the PoT traverses, including legacy signaling gateways; a detailed per- substrate scenario walkthrough is out of scope for this revision. 9.9. Trust Model and Key Compromise Resilience 9.9.1. Trust Hierarchy TTTPS defines a two-level trust hierarchy: Level 0 (L0) Certificate Authority: An L0 CA issues certificates to PoT Issuers. Verifiers trust L0 CA public keys, published in a transparency log (analogous to a transparency log). Level 1 (L1) PoT Issuer: An L1 Issuer holds an Ed25519 key pair certified by an L0 CA, identified on the wire by issuer_key_id (Section 2.2). The Issuer generates PoT Records (Section 2.4) and signs them with its private key. Verifier: Any party that receives a (binding_proof, PoT Record) pair and verifies it per Section 2.5. This model is analogous to TLS PKI: L0 CAs are root CAs, L1 Issuers are intermediate CAs, and verifiers are TLS clients. Jorgen Expires 21 February 2027 [Page 33]

Internet-Draft TTTPS September 2026 9.9.2. Issuer Key Compromise Response If an L1 Issuer's Ed25519 private key is compromised: (1) Key rotation -- the L0 CA revokes the compromised certificate and issues a new one under a new issuer_key_id (Section 2.2), which verifiers use to select the correct public key without ambiguity. (2) Transparency audit -- all PoTs generated by the compromised key are logged with their timestamps; third parties can determine which PoTs were generated before versus after the compromise window. (3) Source independence -- the multi-source median (Section 2.4) provides an independent check on Issuer-reported timestamps; even after key compromise, the attacker cannot generate PoTs with timestamps outside the source consensus window without also compromising k/2 sources. 9.9.3. Untrusted Substrate Scope The preceding controls provide bounded guarantees only under their stated assumptions: valid issuer and holder key material, an authority-backed context, a configured freshness window, and the declared source and quorum bounds. They prevent a verifier from accepting a record that fails those checks. They do not guarantee the correctness of a compromised trust authority, an incorrect time source, or an application policy, and they do not provide a universal Byzantine or unlinkability guarantee.

10. Privacy Considerations

10.1. Unlinkability PoT Records include a 128-bit random nonce (Section 2.2) that MUST be freshly generated for each record. This prevents linkage of PoT Records from the same Issuer across sessions. The TLS binding of Section 6.1 ensures PoT Records are bound to specific TLS sessions and cannot be used to correlate activity across sessions. Issuers SHOULD NOT include in PoT Records any information beyond the fields defined in Section 2.2 that could enable participant identification. 10.2. Minimal Disclosure The PoT Record wire format (Section 2.1) does not include participant identity or address, transaction content, or economic parameters or bid values beyond holder_auth_data, which identifies only the Holder's public key or a shared-secret digest, not a real-world identity. ctx_id is an opaque, application-assigned context identifier and a public, non-sensitive value; because it is an opaque Jorgen Expires 21 February 2027 [Page 34]

Internet-Draft TTTPS September 2026 string to the protocol, its semantics can be extended by application convention without any change to the wire format (Section 2) or the integrity binding (Section 4).

11. IANA Considerations

This revision makes no IANA request. It is an individual draft prepared for discussion and does not create registries, allocate protocol identifiers, or claim provisional registration. A future Working Group revision may request assignments for a TLS exporter label, ALPN identifier, HTTP/3 frame type, or TTTPS parameters after the wire semantics, allocation policy, and IPR disclosures have been reviewed.

12. Intellectual Property

The core SHA-256 integrity mode is completely specified in Appendix B.1, and the optional GRG profile is not required for conformance. GRG is maintained independently in the Confidence track [CONFIDENCE]. IPR matters are handled only through the IETF disclosure process specified by BCP 79 [RFC8179]; this document makes no determination about the validity or scope of any IPR claim.

13. Implementation Status

This section records the status of known implementations of TTTPS at the time of posting, per [RFC7942]. 13.1. Reference Implementation Name: OpenTTT URL: https://github.com/Helm-Protocol/OpenTTT Level: Partial (verifier SDK, QUIC transport) The following implementation results were recorded before the v2 wire-format update and are not v2 conformance evidence. Earlier tests covered the wire and external integrity interface. AdaptiveSwitch model. QUIC/TLS binding, source-median synthesis, and no_std verifier results are implementation evidence only. Jorgen Expires 21 February 2027 [Page 37]

Internet-Draft TTTPS September 2026 Earlier implementation results were recorded before the v2 wire-format update and are not independently verified in this revision. They are not v2 conformance evidence. Coverage of v2 will be recorded only with the implementation revision, test harness, and measurement method identified. Private Issuer implementation: Name: Helm grg-core (reported profile implementation) Level: Not a core-conformance claim Note: Any GRG implementation status belongs to the independent Confidence profile and is not evidence of core TTTPS conformance. 13.2. Deployment Evidence No v2 deployment or flight-validation result is claimed in this revision. Earlier implementation measurements, if cited by a deployment, MUST identify the implementation revision, wire format, test harness, collection interval, and measurement method. They are not protocol requirements and are not evidence of universal latency or attack resistance. 13.3. Formal Verification Artifacts The TLA+ appendix contains the current AdaptiveSwitch model and records the finite parameter set used for its bounded TLC check. That model does not model the 180-octet parser, cryptographic verification, certificate resolution, or application state mutation. This document therefore makes no formal-verification claim for those components. A future parser-and-gate model MAY specify the BoundedParse, InvalidIngressNoMutation, and ValidIngressMayCommit obligations listed in Appendix A. Any result for that model MUST identify the model, tool version, configuration, and checked state space.

13.4. Interested Parties

This subsection records organisations that have expressed interest in the deployment scenarios described in Section 1.6. Inclusion here does not constitute endorsement of any specific version of this draft. At the time of this revision, no interested-party statements have been received. Authors request that organisations wishing to be listed contact the authors directly; a non-binding expression of interest in the stated use cases is sufficient for inclusion.

14. Roadmap

The following companion profiles are published in parallel with this revision and are cited informatively: * draft-helmprotocol-deepspace-00: propagation-aware OWLT, physical context, integer-preserving correction, sparse-peer handling, and conservative Epi-Entropy shadow qualification. * draft-helmprotocol-confidence-00: G-Score, correlation-aware von Neumann confidence, Epi-Entropy, AdaptiveSwitch, and InsufficientKnowledge semantics. * GRG-specific integrity mode extensions are maintained in the independent Confidence profile; the core remains vendor-neutral. Profile processing is optional. The companion drafts describe policy signals and propagation-aware context handling without changing the core wire record or its cryptographic integrity boundary.

15. References

15.1. Normative References

Jorgen Expires 21 February 2027 [Page 39]

Internet-Draft TTTPS September 2026 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>. [RFC5705] Rescorla, E., "Keying Material Exporters for Transport Layer Security (TLS)", RFC 5705, March 2010, <https://www.rfc-editor.org/info/rfc5705>. [RFC7301] Friedl, S., "Transport Layer Security (TLS) Application- Layer Protocol Negotiation Extension", RFC 7301, July 2014, <https://www.rfc-editor.org/info/rfc7301>. [RFC8179] Bradner, S. and J. Contreras, "Intellectual Property Rights in IETF Technology", BCP 79, RFC 8179, May 2017, <https://www.rfc-editor.org/info/rfc8179>. [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>. [NTS] Franke, D., "Network Time Security for the Network Time Protocol", RFC 8915, September 2020, <https://www.rfc-editor.org/info/rfc8915>. [RFC9000] Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed and Secure Transport", RFC 9000, May 2021, <https://www.rfc-editor.org/info/rfc9000>. [RFC9114] Bishop, M., "HTTP/3", RFC 9114, June 2022, <https://www.rfc-editor.org/info/rfc9114>.

15.2. Informative References

Jorgen Expires 21 February 2027 [Page 40]

Internet-Draft TTTPS September 2026 [CONFIDENCE] Jorgen, H., "Oracle Confidence Gating: G-Score, Correlation-Aware von Neumann Confidence, and AdaptiveSwitch," Work in Progress, draft-helmprotocol-confidence-00, September 2026, <https://datatracker.ietf.org/doc/draft-helmprotocol-tttp -confidence/>. [DEEPSPACE] Jorgen, H., "TTTPS Deep-space Profile: Propagation-Aware Time Attestation," Work in Progress, draft-helmprotocol-deepspace-00, September 2026, <https://datatracker.ietf.org/doc/draft-helmprotocol-deep pace/>. Jorgen Expires 21 February 2027 [Page 41]

Internet-Draft TTTPS September 2026 [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running Code: The Implementation Status Section", BCP 205, RFC 7942, July 2016, <https://www.rfc-editor.org/info/rfc7942>. [I-D.ietf-ntp-roughtime] Ladd, W. and M. Dansarie, "Roughtime", Work in Progress (draft-19). RFC Editor Queue; intended status Experimental (status verified on the IETF Datatracker, June 2026), Work in Progress, Internet-Draft, draft-ietf-ntp-roughtime-19, 2026, <https://datatracker.ietf.org/doc/html/draft-ietf- ntp-roughtime-19>. Jorgen Expires 21 February 2027 [Page 42]

Internet-Draft TTTPS September 2026

Appendix A. AdaptiveSwitch TLA+ Specification

The following TLA+ module specifies the AdaptiveSwitch state machine. The model was checked with TLC using the finite parameter set MaxNodes=3, MaxBlocks=10, TierToleranceMs=100, TurboEntry=95, and TurboMaintain=85. This check covers the model and parameter set shown here; it is not a proof of all implementations or deployments. The module specifies: * TypeInvariant: all five state variables are well-typed. * S1 (NoForcedTurbo): TURBO requires match_rate >= 85 AND fail_count = 0 -- conjunction, not disjunction. * S2 (DelayRejectionTriggersFull): submission outside tier tolerance is incompatible with TURBO. * S3 (FailureExcludesTurbo): any integrity failure forces FULL. * L1 (EventualTurbo): a node with sustained good behaviour eventually reaches TURBO (liveness under weak fairness). EnvStep models nondeterministic updates to match_rate, fail_count, and submission_delay. The stated invariants are checked for the bounded model; deployment-specific assumptions remain outside this appendix. The wire-admission obligations are separate from this AdaptiveSwitch model. A core parser model MUST include the following properties before a TLC result is claimed for them: * BoundedParse: an input frame is accepted for parsing only when its declared length is 180 octets plus the selected external proof; the parser visits a fixed set of offsets and performs no input-sized loop. * InvalidIngressNoMutation: if integrity, freshness, replay, issuer trust, or holder binding fails, the application state and commit marker are unchanged. * ValidIngressMayCommit: an application state transition is enabled only after all required core predicates have succeeded. This revision does not claim that the AdaptiveSwitch TLC run checks these parser obligations. They are included as the required scope of the next combined parser-and-gate model. ---- MODULE AdaptiveSwitch ---- EXTENDS Naturals, FiniteSets CONSTANTS MaxNodes, MaxBlocks, TurboEntry, TurboMaintain, TierToleranceMs ASSUME /\ TurboEntry = 95 \* 95% match_rate required for TURBO /\ TurboMaintain = 85 \* 85% minimum to stay in TURBO /\ TierToleranceMs > 0 \* positive tier tolerance (ms) NodeId == 1..MaxNodes \* finite set of node identifiers Modes == { "TURBO", "FULL" } VARIABLES node_mode, \* [NodeId -> Modes] per-node state match_rate, \* [NodeId -> 0..100] ordering-match percentage fail_count, \* [NodeId -> Nat] consecutive failures block_count, \* Nat current block number submission_delay \* [NodeId -> Nat] ms since last PoT gen vars == <<node_mode, match_rate, fail_count, block_count, submission_delay>> \* -- Helpers ------------------------------------------------------ SubmittedOutsideTolerance(n) == submission_delay[n] > TierToleranceMs \* -- Type correctness --------------------------------------------- TypeInvariant == /\ node_mode \in [NodeId -> Modes] /\ match_rate \in [NodeId -> 0..100] /\ fail_count \in [NodeId -> Nat] /\ block_count \in Nat /\ submission_delay \in [NodeId -> Nat] \* -- Initial state (all nodes start in FULL, zero counters) ------- Init == /\ node_mode = [n \in NodeId |-> "FULL"] /\ match_rate = [n \in NodeId |-> 0] /\ fail_count = [n \in NodeId |-> 0] /\ block_count = 0 /\ submission_delay = [n \in NodeId |-> 0] \* -- Actions ------------------------------------------------------ \* Promote n from FULL to TURBO when match_rate sufficient \* and no pending failures. PromoteToTurbo(n) == /\ node_mode[n] = "FULL" /\ match_rate[n] >= TurboEntry /\ fail_count[n] = 0 /\ ~SubmittedOutsideTolerance(n) /\ node_mode' = [node_mode EXCEPT ![n] = "TURBO"] /\ UNCHANGED <<match_rate, fail_count, block_count, submission_delay>> \* Demote n from TURBO to FULL on poor match_rate, integrity \* failure, or submission outside tier tolerance. DemoteToFull(n) == /\ node_mode[n] = "TURBO" /\ \/ match_rate[n] < TurboMaintain \/ fail_count[n] > 0 \/ SubmittedOutsideTolerance(n) /\ node_mode' = [node_mode EXCEPT ![n] = "FULL"] /\ UNCHANGED <<match_rate, fail_count, block_count, submission_delay>> \* Environment step: update match_rate / fail_count / delay \* (models external inputs; unconstrained for model checking) EnvStep(n, mr, fc, sd) == /\ match_rate' = [match_rate EXCEPT ![n] = mr] /\ fail_count' = [fail_count EXCEPT ![n] = fc] /\ submission_delay' = [submission_delay EXCEPT ![n] = sd] /\ block_count' = block_count + 1 /\ UNCHANGED node_mode Next == \E n \in NodeId : \/ PromoteToTurbo(n) \/ DemoteToFull(n) \/ \E mr \in 0..100, fc \in 0..5, sd \in 0..(TierToleranceMs+50) : EnvStep(n, mr, fc, sd) Spec == Init /\ [] (Next \/ UNCHANGED vars) /\ WF_vars(Next) \* -- Safety invariants -------------------------------------------- \* S1: TURBO requires healthy match_rate AND no integrity failures. NoForcedTurbo == \A n \in NodeId : node_mode[n] = "TURBO" => /\ match_rate[n] >= TurboMaintain /\ fail_count[n] = 0 \* S2: Delay outside tier tolerance must not coexist with TURBO. DelayRejectionTriggersFull == \A n \in NodeId : SubmittedOutsideTolerance(n) => node_mode[n] = "FULL" \* S3: fail_count > 0 must not coexist with TURBO. FailureExcludesTurbo == \A n \in NodeId : fail_count[n] > 0 => node_mode[n] = "FULL" \* -- Liveness ----------------------------------------------------- \* L1: A node with sustained good behaviour eventually reaches TURBO. EventualTurbo == \A n \in NodeId : (match_rate[n] >= TurboEntry /\ fail_count[n] = 0 /\ ~SubmittedOutsideTolerance(n)) ~> node_mode[n] = "TURBO" \* -- TLC model values (for model checking) ------------------------ \* MaxNodes = 3, MaxBlocks = 10, TierToleranceMs = 100 \* TurboEntry = 95, TurboMaintain = 85 ==== The invariant NoForcedTurbo corresponds to Safety Property S4 of the Helm Autonomy Layer Yellow Paper v2.0 (AS score external immutability).

Appendix B. Integrity Algorithm Interface and SHA-256

This appendix specifies the core SHA-256 integrity algorithm. Optional profile algorithms are not defined by this appendix; the GRG profile is maintained in the independent Confidence track [CONFIDENCE]. B.1. alg_id 0x0001 -- SHA-256 (Mandatory-to-Implement) This algorithm is specified here and MUST be implemented by all conformant core implementations. integrity_tag = SHA-256(pot_record[0:80]) where pot_record[0:80] denotes octets 0 through 79 of the PoT Record (version through holder_auth_data, Section 2.1). Because the integrity_tag field is exactly 32 octets, the full SHA-256 output is used with no truncation. Verification: the verifier recomputes SHA-256(pot_record[0:80]) and compares it against integrity_tag. A match yields the *intact* verdict; a mismatch yields *unresolvable* (this algorithm has no correction capability, so the *resolved* verdict of Section 2.5 never applies to it). The security of this check depends on the standard preimage and collision-resistance assumptions for SHA-256; this document does not assign a deployment probability to an undetected modification. B.2. Optional GRG Profile The optional GRG integrity profile is specified in the independent Confidence track [CONFIDENCE]. The core document intentionally does not reproduce its stage construction, parameters, correction claims, or implementation requirements. A core implementation remains conformant without GRG. B.3. Future Algorithm Extensions This revision does not allocate additional alg_id values. A future Working Group revision may define an allocation procedure after review. Any future specification MUST state the computation of integrity_tag, the detection and correction properties under stated assumptions, and the implementation status of the algorithm.

Appendix C. Test Vectors

Test vectors for the core PoT generation and verification are provided as property-based tests. Optional profile test vectors belong to their respective profile documents. Required properties (all MUST pass): C.1 Core integrity verification: Verify(Generate(P, ctx), ctx) = intact for the SHA-256 profile. C.2 Nonce uniqueness: Two calls to Generate() MUST NOT produce equal nonces. C.3 Context separation: integrity_tag(P, ctx_A) != integrity_tag(P, ctx_B) for ctx_A != ctx_B, subject to the collision-resistance assumptions of the selected integrity algorithm. C.4 Verification correctness: Verify(Generate(P, ctx), ctx) = intact. C.5 Forgery resistance: Verify(tampered_record, ctx) = unresolvable for any single-bit modification exceeding the algorithm's correction capacity. C.6 Delay rejection: A PoT submitted at ts + tier_window + dispersion + 1 microsecond MUST trigger FULL mode. C.7 Integrity-first ordering: Integrity-tag verification (Section 2.5, step 3) MUST complete, and MUST yield unresolvable on failure, before issuer_sig or binding_proof are attempted (measurable via timing). An implementation test suite may instantiate these properties for the 180-octet record. The reference implementation status and test count are maintained separately from this protocol specification; this test-vector section does not claim conformance from an unreported test run.

Appendix D. FILO+Integrity Delay Rejection Flow

This appendix provides a normative ASCII diagram of the FILO+Integrity delay rejection mechanism described in Section 9.6. TIME AXIS: |----ts-----|---(ts+window)---|---------(ts+Delta)-------> PoT gen tier freshness delayed submission time window end zone VALID SUBMISSION WINDOW: [ts, ts + tier_window + dispersion] DELAYED ZONE: (ts + tier_window + dispersion, infinity) GATE 1: Integrity-tag verification (fixed cost, alg_id-dependent) -------------------------------------------------- Input: PoT Record If integrity_tag verdict is unresolvable: -> REJECT immediately -> DO NOT invoke issuer_sig or binding_proof verification Covers: wrong context, tampered payload GATE 2: AdaptiveSwitch freshness check -------------------------------------------------- Input: PoT Record + current time S If (S - ts) > tier_window + dispersion: -> REJECT -> Trigger FULL mode -> Apply exponential backoff Covers: valid PoT submitted outside freshness window FILO QUEUE (Gate 1 AND Gate 2 passed) -------------------------------------------------- Queue discipline: most recently generated PoT first. If multiple PoTs qualify: Select max(PoT.ts) for processing. Earlier PoTs remain in queue. Effect on delayed submissions: o A record outside the freshness window cannot pass Gate 2. o A qualifying record is ordered by its timestamp according to the configured queue policy. o Repeated failures MAY trigger the configured backoff policy COMPLEXITY NOTE: Gate 1 (integrity tag): O(1) per record, fixed cost Gate 2 (freshness): O(1) per record Queue ordering: O(log q) for q queued records (priority queue) Verification path: O(1) with respect to network size and queue length when the verifier applies the configured bounded single-record path. Queue selection is separate and remains O(log q) for the priority-queue implementation described above. Compare with BFT consensus protocols: PBFT/Tendermint/HotStuff: O(n^2) network-wide message exchanges to reach Byzantine tolerance for n total nodes. TTTPS does not replace a quorum protocol and does not claim to eliminate Byzantine principals. Its bounded per-record path protects the local admission decision; peer aggregation and provenance checks remain profile and deployment policy functions. Author's Address Heime Jorgen Kenosian Email: heime.jorgen@proton.me Jorgen Expires 21 February 2027 [Page 50]