summaryrefslogtreecommitdiffstats
path: root/docs/FOG-ALPHA.md
blob: cbf86fd99d08274e124249d9494719d0781a6a17 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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 software license is `AGPL-3.0-or-later`; an independent host
rebuild and repository revision remain outstanding.