diff options
| author | Gab <24553253+gabrix73@users.noreply.github.com> | 2026-08-18 21:43:48 +0200 |
|---|---|---|
| committer | Gab <24553253+gabrix73@users.noreply.github.com> | 2026-08-18 21:43:48 +0200 |
| commit | 25356debcce4118cdfa86842029278fde1e64518 (patch) | |
| tree | e2b681576fb7163ee83006a74b62013e63706c29 /docs/FOG-ALPHA.md | |
| parent | 6974e5459608feed48c611c76622226d2fc4fe26 (diff) | |
| download | fog-25356debcce4118cdfa86842029278fde1e64518.tar.gz fog-25356debcce4118cdfa86842029278fde1e64518.tar.xz fog-25356debcce4118cdfa86842029278fde1e64518.zip | |
Publish FOG design documentation and Merkle tree
Diffstat (limited to 'docs/FOG-ALPHA.md')
| -rw-r--r-- | docs/FOG-ALPHA.md | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/docs/FOG-ALPHA.md b/docs/FOG-ALPHA.md new file mode 100644 index 0000000..03a712d --- /dev/null +++ b/docs/FOG-ALPHA.md @@ -0,0 +1,184 @@ +# FOG Operator Alpha + +Status: Readiness gate, not deployable + +Date: 2026-08-18 + +## 1. Purpose + +`FOG-OPERATOR-ALPHA-1` defines the transition from a single-host functional +fixture to an experimental network operated across independent administrative +domains. It consolidates the alpha requirements already present in +`FOG-THREAT-MODEL`, `FOG-ARCHITECTURE`, `FOG-PKI`, and `FOG-WIRE` without +activating a cryptographic, traffic, or deployment profile. + +The current FOG tree is not alpha-ready. No FOG protocol daemon or active +byte-exact protocol profile exists. The alpha readiness module records this +state explicitly and fails closed when evidence or operator separation is +missing. + +## 2. Local Alpha Laboratory + +A single host may reproduce the alpha role count with separate rootless +containers or virtual machines. That laboratory can test: + +- three-authority quorum and consensus failure; +- two mix instances in each of three layers; +- route selection across alternate nodes; +- replay-state loss, node loss, storage loss, and partitions; +- key rotation, revocation, epoch transition, and rollback behavior; +- bounded queues, malformed input, flooding, and restart behavior; +- deterministic deployment generation and role-specific containment. + +The laboratory must keep one executable, service account, secret scope, +writable state scope, and network policy per role. A single container running +all roles is not conforming because it erases the process, key, state, and +network boundaries the test is intended to exercise. + +All laboratory binaries are compiled once for the host platform. One +digest-pinned multi-binary fixture image may then be reused by every container, +with a different single-role entrypoint. Six mix containers do not cause six +`fog-mix` compilations. + +The laboratory does not demonstrate independent operation, provider or ASN +diversity, Internet timing, resistance to operator collusion, or anonymity. +Synthetic operator labels are test inputs only and must not be presented as +real independence. + +## 3. Minimum Distributed Topology + +The operator alpha requires: + +- three independently administered authority roots and online services with + a 2-of-3 quorum; +- independent consensus mirrors; +- at least two independent checkpoint monitors or witnesses; +- three mix layers with at least two independently operated mixes per layer; +- at least four independently operated storage replicas; +- separate entry, mix, courier, and storage identities; +- declared operator family, administration, provider, provider-account, ASN, + country, and location relationships; +- no route that repeats an operator or declared family. + +These are minimums, not evidence of sufficient anonymity. Traffic volume, +cover scheduling, topology diversity, observed network behavior, and +adversarial results remain part of every claim. + +Distributed operators consume verified release artifacts. The release +pipeline assembles minimal role-specific images from one compiled artifact set +and shared OCI layers. Operators do not need to compile locally unless they are +performing an independent reproducibility check. + +## 4. Readiness Evidence + +Every required readiness item has one of two states: `open` or `pass`. A pass +requires at least one immutable artifact reference, a lowercase SHA-256 digest, +an explicit scope, and a date. A note or successful command without retained +evidence does not close a gate. + +The required evidence covers: + +1. active byte-exact protocol profiles; +2. real single-role protocol daemons; +3. a validated operator inventory; +4. unit, integration, conformance, fuzz, race, and fault testing; +5. replay, tagging, n-1, flooding, load, side-channel, clock, consensus, + authority, node-loss, and storage-loss tests; +6. traffic simulation calibrated with observed or conservative distributions; +7. interoperability between independently built endpoints; +8. reproducible independent-host deployment and rollback; +9. rehearsed compromise, revocation, transition, quorum-loss, and restore + procedures; +10. public admission, family, common-control, revocation, and residual-risk + policy; +11. independent security review. + +The independent review gate is retained even though a broader production +review is also required. For alpha it means that someone outside the +implementation path has reviewed the exact experimental artifacts and that +unresolved findings are recorded. It is not a production certification. + +## 5. Inventory Boundary + +The machine-readable operator inventory contains only bounded public or opaque +identifiers needed to test separation and role counts. It must not contain: + +- private keys, recovery material, credentials, tokens, or passwords; +- host login instructions or management addresses; +- personal email addresses, phone numbers, or legal identity evidence; +- private admission evidence or incident details; +- packet, user, contact, mailbox, or capability identifiers. + +The validator rejects unknown fields, duplicate JSON keys, trailing values, +oversized files, invalid identifiers, duplicate node identities, shared role +state or secret scopes, insufficient role counts, and common administration, +provider accounts, or families inside independence-critical role sets. + +The validator reports aggregate provider, ASN, country, and location-group +counts. It does not invent a numeric diversity policy that the normative PKI +profile has not selected. + +## 6. Claim Boundary + +The only permitted baseline label is: + +```text +experimental-alpha-no-anonymity-claim +``` + +Until every gate passes, public material must say that FOG is a specification +and laboratory project. Even after the alpha gate passes, results must identify +the exact software, profiles, topology, traffic conditions, adversary, +measurement period, known failures, and operator assumptions. + +An alpha must not claim production anonymity, global-passive-observer +resistance, post-quantum security, reliable delivery, or protection against +collusion merely because the minimum node count exists. + +## 7. Implementation + +The gate implementation lives in `deploy/alpha/`. It is deliberately separate +from protocol daemons and uses only the Go standard library. It validates +readiness evidence and an externally supplied operator inventory. It does not +generate a deployment manifest because exact ports, transport profiles, +cryptographic suites, cover schedules, operational limits, and authority time +parameters remain non-active selections. + +## 8. Requirement Traceability + +| Alpha control | Requirements | +| --- | --- | +| Independent authority, mix, storage, mirror, and witness sets | `TM-PKI-01`, `TM-PKI-03`, `ARC-001`, `ARC-007`, `PKI-INV-01`, `PKI-INV-07` | +| Six mixes, two per layer | `TM-ROLE-02`, `ARC-003`, `FOG-ARCHITECTURE` section 16.2 | +| Evidence registry | `TM-SUPPLY-01`, `TM-CRYPTO-02`, `FOG-THREAT-MODEL` section 16.2 | +| Unique service, state, and secret scopes | `TM-CRYPTO-01`, `ARC-007`, `WIRE-INV-07` | +| Strict bounded inventory parser | `TM-AVAIL-01`, `ARC-008` | +| No anonymity claim | `TM-NET-01`, `TM-NET-02`, `TM-NET-03`, `ARC-009` | + +## 9. Next Implementation Block + +The next safe local block is a simulation-only alpha laboratory with three +authority fixtures, two mixes per layer, four storage fixtures, alternate-path +traversal, and an expanded fault matrix. It must reuse no production profile +identifier and must remain visibly distinct from the later protocol daemons. + +The completed laboratory is preserved as `FOG-ALPHA-LAB-POC-1` according to +`FOG-POC-PRESERVATION.md`. Preservation includes reproducible source and one +bounded demonstration workflow, not captured mutable containers or runtime +secrets. The frozen PoC remains functional evidence only. + +The checked-in definition gate fixes 17 roles, 23 pairwise permitted edges, +all eight complete mix routes, and 13 fault families in +`deploy/alpha/lab-topology.json` and `deploy/alpha/lab-faults.json`. Compatible +single-role fixtures and deterministic Compose generation now make the strict +validator report `runnable: true`. The bounded one-command rootless workflow +completed all eight routes, performed 102 containment and exact-network +checks and exercised all 13 fault families, including exact stale-state +rejection and fixture cover-scheduler supervision. It recorded sanitized +evidence and removed every disposable runtime resource. Dependency and license +inventory, frozen artifact hashes, and independent clean-room reproduction +remain required before accepting the preserved PoC. The canonical preservation +manifest now records zero third-party Go modules, exact external tool versions +and licenses, required source and evidence hashes, and all eight binary hashes. +The project license remains `NOASSERTION`; an independent host rebuild and +repository revision remain outstanding. |
