NathanaelRitz | Calgary • AB

01 //
Protocol_
Design

FACTS

Factor-based Attestation & Credential Transport System

Cloud-native hosts often bootstrap identity using static secrets, a practice that creates a pervasive threat of undetected runtime compromise. Sophisticated solutions are fragmented, and still force a painful trade-off: operational stability or robust security. This challenge is exacerbated when working with cost-optimized virtual machines, deliberately lacking a hardware root of trust or provider-signed metadata. Simply put, risks compound catastrophically at scale.

$P(\text{compromise}) = 1 - (1 - p)^N$

where $p$ is the per-workload risk of credential exfiltration via logs, memory dumps, or prompt injection. At the scale of modern agentic AI, $P \approx 1$ becomes an architectural inevitability. FACTS works differently; keys are a product of authentication, in contrast to key agreement that requires separate authentication altogether. Identity emerges only when needed, then vanishes.

FACTS Protocol Suite

CFA (Day 1)

Composite Factor Attestation — A three-phase ceremony creating a "Blind Verifier" that validates identity without possessing the secrets to forge it.

TELS (Day 2)

Time-bound Ephemeral Liveness Signals — A forward-chaining ratchet that turns state drift into immediate connection termination.

Technical Highlights

Zero-Knowledge Identity Derivation

The revealed identity key is indistinguishable from random; observing it reveals nothing about the factors that produced it. PF exposure is tolerated operationally but correlation with identity defeats unlinkability.

Exposure Tolerance: The Provisioning Factor can traverse untrusted channels—logs, config files, CI/CD pipelines—because possession alone is insufficient. Security derives from composition with the confidential Evidence Factor, not from protecting every factor as a secret.

TELS: The Cryptographic Kill Switch

Beyond simple monitoring, TELS binds the transport layer's session keys (TLS PSK) directly to the platform state. If a monitored file changes, the ratchet forks, the Pre-Shared Key diverges, and the TLS handshake fails immediately with an IncorrectBinder error. This enforces state integrity at the packet level.

Transport Polymorphism

The security model relies on payload composition, not transport integrity. The same Rust toolchain demonstrates secure identity bootstrap over synchronous TLS, REST, and even asynchronous "dead-drop" transports (S3/DNS) without code changes.

JIT Declarative Identity

Declarative identity is achieved through the cryptographic intersection of three independently-sourced factors:
Id = Provisioning(PF) ∩ Evidence(EF) ∩ Validation(VF)

  • PF: Provisioning Factor - Public, exposure tolerant voucher that identifies who is intended to be authorized
  • EF: Evidence Factor - Confidential, defines what properties an authorized entity must have
  • VF: Validation Factor - Secret, computationally independent nonce that demonstrates proof of possession of PF+EF values

Composition Rules

  1. Factor Independence: Factors must be obtained through administratively independent channels. The Provisioning Factor traverses the control plane; the Evidence Factor derives from platform mechanisms. An attacker must compromise both channels—neither alone suffices.
  2. High-Entropy Source: At least one factor in the composition must be computationally indistinguishable from a uniform random string of ≥128 bits. Public or predictable factors contribute to security only when composed with a confidential high-entropy factor.
  3. Domain Separation: Keys derived with identical factors but distinct contexts remain computationally independent. Each derivation stage uses unique context labels to prevent cross-phase attacks.

Architecture: Identity Convergence

graph TD PF(Provisioning Factor
'Authz') --> K_SEAL EF(Evidence Factor
'Authn') --> K_SEAL K_SEAL[Derive: Sealing Key] -->|Unseal| VF(Vault Factor
High Entropy Secret) PF --> K_ID VF --> K_ID K_ID[Derive: Identity Key] -->|Sign| AUTH[Verifiable Proof of
Authz + Authn] style PF fill:#0000ee,stroke:#01579b style EF fill:#dd0000,stroke:#01579b style VF fill:#aa00ee,stroke:#ff6f00 style K_ID fill:#0e0e0e,stroke:#2e7d32,stroke-width:2px
Intent/Fulfillment Separation

Bearer-token systems conflate authorization with authentication—possessing the token is the proof. Factor composition separates these concerns:


  • Provisioning Intent (PF): What workload should exist—the control plane's authorization decision
  • Provisioning Fulfillment (EF): Cryptographic proof that the intended workload does exist

Authentication requires proving both across independent channels. Intent without fulfillment is an unused voucher; fulfillment without intent is unauthorized execution. This eliminates the provisioning race condition where whoever presents a token first wins.

Trust Anchor Normalization

The Evidence Factor provides an abstraction over heterogeneous trust sources:


  • Hardware roots of trust: TPM quotes, TDX/SEV-SNP reports, SGX attestations
  • Orchestrator credentials: Kubernetes ServiceAccount tokens, cloud IMDS metadata
  • Artifact-based proofs: Filesystem measurements, container image hashes, configuration digests

The composition equation remains unchanged regardless of trust anchor. Security properties degrade gracefully based on what's available—hardware-rooted deployments achieve the strongest guarantees, while artifact-based deployments maintain exposure tolerance without hardware dependencies. The protocol doesn't change; the assurance level does.

Implementation & Formal Modeling

  • facts-cli:Declarative command-line toolchain
  • Standard crypto-agile core (HKDF, Ed25519, PQC)
  • Security properties orthogonal to transport
  • TELS Ratchet Engine: 100ms resolution

Yes, this means your server can cryptographically prove
it hasn't been pwned — every 100ms. No pressure.

  • Formal models for CFA and TELS protocol in ProVerif
  • Modeled under Dolev-Yao adversary assumptions
  • Tested properties include Integrity, Forward Secrecy & One-way injunction
  • Computational indistinguishability (Zero-Knowledge) modeled via PRF equivalence
test-harness — zsh
test-harness ./scripts/harness.sh --transport tls
[OK] Provisioning complete
[INFO] Verifier lookup: 0ae3c98bbbac0d1e...
[INFO] Attester lookup: 867bd013c1aa5d35...
[OK] DNS records verified
[INFO] Verifier: _facts.0ae3c98b.facts.local
[INFO] Attester: _facts.867bd013.facts.local
...
[ATT-867bd013] 0.001881s - CEREMONY COMPLETE: Attestation Result received
[ATT-867bd013] 0.001891s - SESSION FINALIZED: Handshake complete
[VER-0ae3c98b] 0.002559s - CEREMONY COMPLETE: Evidence verification SUCCESS
[VER-0ae3c98b] 0.003556s - Attestation Result sent to attester
[ATT-867bd013] Attestation completed successfully
[VER-0ae3c98b] Attestation completed successfully
[OK] VERDICT: PASSED
...
>>> TELS: Verifying TELS Pulse
[TELS-VERIFY] external_psk=true, early_data_configured=true, early_data_requested=true, was_rejected=false
[TELS-VERIFY] ACCEPTING early data (max_size=16384)
[TELS-VERIFY] Connected to tunnel egress alice-app-05b1494b:9999
[TELS-VERIFY] Starting TELS tunnel (session=tels-84d818c6-c350-4853-b52b-549b4784098a)
{"ts":"2026-01-18T09:20:26Z","level":"info","msg":"drained 11 bytes of 0-RTT early data","role":"tunnel-server","session_id":"tels-84d818c6-c350-4853-b52b-549b4784098a"}
[TELS-ATTEST] SUCCESS: Early data was accepted by server
[TELS-ATTEST] Starting pulse driver (session=driver-tels-0rtt-98c7f7ae-c4ad-473e-92b3-51ee35595b38)
[TELS-ATTEST] Resynchronized! Skipped 1 lost pulses (counter 1 -> 2)
{"ts":"2026-01-18T09:20:26Z","level":"info","msg":"pulse policy ALLOW","role":"tunnel-client","peer":"alice-ea-seal-05b1494b"}
...
docker exec fh-attester-05b1494b sh -c 'echo UNAUTHORIZED_CHANGE >> /root/.ssh/authorized_keys'
{"msg":"TLS accept failed: IncorrectBinder","role":"tunnel-client"}
[INFO] Tunnel terminated due to state divergence.

Pre-print Access

Full TRACE output demonstrates public manifest distribution, JIT key derivation through full cryptographic ceremony. Research pre-print is available for review upon request.