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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
# FOG Traffic and Topology Simulation
Status: Engineering Baseline 0.1
Date: 2026-08-08
## 1. Purpose
This document defines the first reproducible simulation boundary for FOG and
records its initial scenario matrix. It supplies evidence for `TM-NET-01`,
`TM-NET-02`, `TM-NET-03`, `TM-ROLE-02`, and `TM-AVAIL-01` without promoting a
delay, cover, topology, entry, or degraded-mode profile.
The implementation is in `../sim/`. The first complete comparison artifact is
`../sim/results/2026-08-08-baseline.md`.
The simulator is not a daemon, protocol implementation, packet generator,
deployment controller, capacity benchmark, or anonymity proof.
## 2. Evidence Boundary
The first model answers narrow comparative questions:
- how mean mix delay changes modeled end-to-end latency and local pool overlap;
- how real and cover traffic density changes bandwidth and observation proxies;
- how one, two, or three nodes per layer change route diversity and traffic
concentration;
- how independently compromised entry and mix nodes affect repeated target
routes;
- how selective background suppression affects delivery and isolation;
- how repeated observations shrink a simplified candidate-recipient set.
It does not answer:
- whether FOG is anonymous against a global passive or active observer;
- which numeric cover or delay profile is safe;
- whether a local pool metric composes into end-to-end entropy;
- whether a timing window matches an optimal correlation attack;
- whether the storage, retrieval, reply, retry, and acknowledgment processes
are indistinguishable;
- whether loop statistics reliably detect n-1 or ordinary failure;
- how queue capacity, congestion, network jitter, churn, or operator behavior
affect deployment.
Every output is tied to the exact model revision, configuration, seed, and
threat assumptions. A favorable proxy result is never promoted into a public
privacy claim.
## 3. Model Contract
### 3.1 Reproducibility
`FOG-SIM-DISCRETE-EVENT-1` uses a pinned simulation-only SplitMix64 sequence.
The same valid configuration and seed produce the same JSON report. The PRNG
is isolated inside the simulation package and MUST NOT be imported by future
protocol, cryptographic, route-construction, or daemon code.
Scenario parsing rejects unknown fields, non-regular files, files over 1 MiB,
non-finite values, invalid probability ranges, invalid topology, and expected
work above one million packets per replication or five million packets per
scenario invocation. Runtime generation also aborts if Poisson sampling
actually reaches either limit, so the validation estimate is not the only
resource bound.
### 3.2 Traffic
Each simulated user has independent Poisson real and cover injection
processes. User 0 sends every real target message to user 1 so repeated
relationship exposure can be measured. Other real and cover recipients are
uniform among users other than the sender.
This uniform social graph is deliberately simple. It avoids hiding the model
behind inferred behavioral data, but it is not realistic enough for a claim.
Future trace-driven and non-uniform models must remain separately named.
### 3.3 Topology and routes
The model contains:
- one configured entry set;
- exactly three stratified mix layers;
- one to three configured mixes per layer in the initial scenarios;
- four KEMSphinx positions, with the terminal outside the three delay pools;
- five core link transmissions for a fully delivered forward packet;
- one 16,150-byte packet on every link.
Nodes receive deterministic operator-family assignments. The route generator
enumerates only entry, L1, L2, and L3 combinations with four distinct declared
operator families. A session uses a small entry set for a configured number of
packets before rotation. It does not rotate entry on every message.
The model does not yet include terminal operator diversity, provider, ASN,
country, infrastructure-group, capacity, or topology-generation constraints.
It therefore validates only the narrow declared-family rule.
### 3.4 Delay and fixed costs
Each sender samples one delay for each of the three mix layers. The initial
matrix uses independent exponential samples, consistent with the evaluated
Poisson-mix literature and maintained Katzenpost design. A constant-delay mode
exists only for sensitivity tests and does not define a candidate profile.
Modeled forward latency includes five configured link delays, four configured
KEMSphinx processing costs, and three sampled mix delays. It excludes entry
capsule processing, queues, wire handshakes, reassembly, storage, replies,
imports, retries, and user offline time.
### 3.5 Compromise and active suppression
Each entry and mix is independently marked compromised once per replication
using configured probabilities. Target route metrics record:
- at least one compromised mix;
- all three mixes compromised;
- entry compromised;
- entry and all three mixes compromised;
- whether repeated messages eventually use a fully compromised mix route.
The active sensitivity scenario allows a compromised mix to suppress each
non-target packet independently while always forwarding target packets. This
is a conservative isolation mechanism, not a complete strategic n-1 attacker.
It does not infer target packets from encrypted content or model loop-based
detection and response.
## 4. Metrics
### 4.1 Latency and bandwidth
The report publishes nearest-rank p50, p95, p99, minimum, maximum, and mean
real-message latency. Core bandwidth counts the actual number of traversed
links, so suppression reduces downstream byte cost while increasing loss.
### 4.2 Local pool size and entropy
At each target departure from an honest mix, the simulator counts packets
resident in that mix delay pool. Under the memoryless Poisson-mix assumption,
the local equal-likelihood entropy proxy is:
```text
H_local = log2(resident_packet_count)
```
It also records whether every honest mix on a target route had pool size one.
This is local opportunity for confusion, not the end-to-end posterior entropy
of a global observer.
### 4.3 Timing candidate proxy
For each target egress, the simulator counts all delivered packets inside a
configured centered timing window. A count of one is reported as a unique
timing candidate.
The metric ignores route likelihood, delay likelihood, ingress history,
multiple links, user schedules, and machine-learned correlation. It is useful
only for comparing scenario density under identical rules.
### 4.4 Long-term disclosure proxy
For each target send, the simulator observes the recipients of all delivered
packets in the following configured interval. It intersects these recipient
sets across repeated sends and records whether the true fixed recipient is
still present or uniquely identified.
This deliberately transparent construction demonstrates intersection risk. It
is not the formal statistical disclosure attack, a probabilistic posterior,
or the third-party unlinkability metric from the research literature.
## 5. First Scenario Matrix
The initial checked-in configurations compare:
1. a 30-user, one-route functional PoC without cover;
2. a 100-user, two-mix-per-layer alpha with one cover packet per user per hour;
3. the same alpha with one cover packet every two minutes per user;
4. the same covered alpha with mean mix delay raised from 500 ms to 5 seconds;
5. a 1,000-user, three-mix-per-layer sparse topology;
6. a sparse alpha with 50 percent independent entry and mix compromise input;
7. a covered alpha with the same compromise input and 95 percent selective
background suppression.
These values are intentionally separated sensitivity points. They are not
recommended operational defaults.
## 6. Initial Results
### 6.1 Sparse use remains exposed
The no-cover PoC had pool size one at every target departure, a unique
ten-second timing candidate in 99.2 percent of target messages, and unique
recipient intersection by five observations in every replication.
The sparse alpha used about 8.47 MiB of five-link core traffic per simulated
hour and a cover-to-real ratio near 9.9. Its local pool p50 remained one,
96.8 percent of target routes were isolated at every honest mix, and the
recipient intersection median fell from 63 candidates after one observation
to two after ten.
These scenarios support only the existing conclusion that a small or idle
network cannot acquire anonymity through packet cryptography alone.
### 6.2 Cover and delay protect different proxies
One cover packet every two minutes per user raised five-link core traffic to
about 231.74 MiB/hour and the cover-to-real ratio to about 294. It removed
unique ten-second timing candidates and kept all 99 possible recipients in the
one-hour intersection proxy through ten observations.
With mean mix delay still 500 ms, however, local pool p50 remained one and
64.9 percent of target routes were isolated at every honest mix. Raising mean
delay to five seconds at the same traffic level raised local pool p50 to three,
local entropy p50 to about 1.585 bits, and removed fully isolated target routes
in the 37 target samples. Modeled latency p50 increased from about 1.44 seconds
to 13.29 seconds.
Cover volume, mixing overlap, observation windows, and latency are therefore
different dimensions. A strong result in one proxy does not substitute for
the others.
### 6.3 More users do not automatically solve dilution
The 1,000-user scenario improved the timing-candidate p50 to four and retained
a median 14 recipient candidates after ten observations. It also spread
traffic across three nodes per layer. Local pool p50 remained one and 84.2
percent of target routes were isolated at every honest mix.
Scaling topology and scaling traffic must be evaluated together. Adding nodes
without enough traffic per node can dilute mixing opportunity.
### 6.4 Repeated compromise exposure is non-zero
With independent 50 percent compromise inputs in the two-node-per-layer
alpha, 5.5 percent of sampled target routes used compromised nodes in all
three layers. Three of sixteen replications encountered at least one such
route. Entry and all three mixes were compromised together on 1.1 percent of
target routes.
These sampled values are dependent on entry reuse, topology sampling, route
reuse, and small target counts. They are not analytical probabilities. They
do show why repeated routing and long-lived observation must be measured, and
why declared operator diversity does not remove concealed control risk.
### 6.5 Selective suppression destroys the traffic condition
The n-1 sensitivity scenario delivered only 7.9 percent of all emitted
packets. Its honest local pool p50 returned to one, 89.5 percent of target
routes with an honest mix were fully isolated, and half the replications saw a
fully compromised target route.
This model does not yet determine a shutdown threshold. It confirms that cover
generation without loop health, anomaly evidence, bounded degraded behavior,
and active-attack analysis is insufficient.
## 7. Decisions From This Baseline
The baseline establishes only the following stable project decisions:
- retain a deterministic, independent discrete-event simulator before daemon
implementation;
- keep packet geometry fixed and route-family validation enabled in every
scenario;
- reject the functional PoC as anonymity evidence;
- do not choose cover or delay parameters from intuition or a single metric;
- measure traffic density per mix, not user count or node count alone;
- keep active suppression and passive compromise as separate scenarios;
- withhold degraded-mode thresholds until loop, queue, loss, and operational
models exist.
No numeric cover, delay, topology, entry-rotation, polling, or shutdown profile
is selected.
## 8. Required Extensions
Before the local PoC parameter set is frozen, add:
- end-to-end posterior and Shannon-entropy propagation for a declared
observer;
- formal third-party unlinkability and statistical-disclosure experiments;
- user availability, non-uniform social graphs, bursts, retries, and traces;
- forward and reply paths, SURBs, acknowledgments, and rendezvous behavior;
- storage reads, empty polling, writes, receipts, and capability rotation;
- loop traffic, loss attribution, n-1 detection, false positives, and
degraded-mode state machines;
- queue service capacity, bandwidth ceilings, congestion, jitter, drops, and
flood distributions;
- topology churn, epochs, provider and ASN correlations, hidden operator
families, and compromised-position sweeps;
- confidence intervals and larger independent replication sets;
- calibration against PoC traces without collecting privacy-unsafe event logs.
## 9. Reproduction and Checks
From `sim/`:
```sh
gofmt -d cmd/fog-sim/*.go internal/sim/*.go
go test ./...
go test -race ./...
go vet ./...
go run ./cmd/fog-sim -scenario-dir scenarios
```
The CLI emits JSON only to standard output. Checked-in Markdown results are a
review-oriented comparison; the deterministic JSON is the complete report.
## 10. Primary References
- Ania M. Piotrowska, *Studying the anonymity trilemma with a discrete-event
mix network simulator*:
<https://arxiv.org/abs/2107.12172>
- Ania M. Piotrowska et al., *The Loopix Anonymity System*:
<https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/piotrowska>
- George Danezis, *Designing and attacking anonymous communication systems*:
<https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-594.html>
- Katzenpost mix network specification:
<https://katzenpost.network/docs/specs/mixnet/>
- Katzenpost mix decoy loop specification:
<https://katzenpost.network/docs/specs/mixdecoy/>
- FOG threat model: `FOG-THREAT-MODEL.md`
- FOG architecture: `FOG-ARCHITECTURE.md`
- FOG wire protocol: `FOG-WIRE.md`
- FOG KEMSphinx profiles: `FOG-SPHINX-PROFILES.md`
|