Fog

Mix Networks  Sphinx mixnet anonymous SMTP relay over Tor hidden services. Send email or Usenet posts through a multi-hop onion-encrypted network that provides sender unlinkability even against global passive adversaries.

▸ Fog is an open relay. The FROM address can be anything — including forged. Never trust sender identity without independent cryptographic verification (PGP/GPG). This is a feature, not a bug: it enables true sender anonymity.

▸ We are looking for node operators to expand the Fog network. If you run a VPS and care about privacy infrastructure, read the self-hosting section and reach out via the contact page.


What Fog is

Fog is a free-software anonymous SMTP relay written in Go, built on the Sphinx packet format — the same provably-secure mix format used by Nym and Katzenpost. Messages are routed through a variable number of independent nodes, each applying layered Curve25519 ECDH encryption and randomised delays. No single node — and no external observer — can link sender to recipient.

Unlike traditional anonymous remailers, every Fog node is simultaneously an entry point. There is no designated gateway to attack or monitor. All five current nodes accept SMTP submissions via Tor on port 2525.

Source: github.com/Virebent-do-ART/fog


Entry points

Connect to any node via Tor on port 2525. All five are equivalent — pick any one, or rotate between them.

Node Onion address Port
kvara ej5dj774rkmfxvo3jexcmyotkq6bwgmr45dmwrbmk366lcvalnrgolad.onion 2525
dries iycr4wfrdzieogdfeo7uxrj77w2vjlrhlrv3jg2ve62oe5aceqsqu7ad.onion 2525
mct8 66ehoz4ir6beuovmgt4gbpdfpmy43iuouj36dylqvkwgyp2dwpcbvjqd.onion 2525
news y3lozzcvvxgorgfofupvfmn4j2fuu3sz2sw7ha3ifpcsxjkuafllzvyd.onion 2525
pietro ejdrw3ka2mjhvsuz7uxjnzjircsdpoiu3a33g2xoywlafqetptjpqryd.onion 2525

To submit a message, configure your mail client or tool to use one of the above addresses as an SMTP relay (via Tor SOCKS5 proxy) on port 2525. No authentication is required — Fog is an open relay by design.

Every node in the network can act as an introduction point — there is no architectural distinction between entry, relay, and exit roles. Any node that receives a Sphinx packet can be the first hop for a new message and can also relay packets originated by other nodes. This means the network has no fixed topology to map and no privileged nodes to target.


How it works

When you submit a message, Fog wraps it in a Sphinx packet with a randomly selected route of 3 to 6 hops through the node pool. Each node decrypts only its own layer using per-hop ECDH (Curve25519), learns only the next hop address, and forwards a fixed-size packet. The number of hops and the node selection are randomised independently for every message.

You (SMTP → any node via Tor :2525)
  ↓
  Sphinx packet: N layers, N = random(3..6)
  ↓
Node A — strips outer layer → knows: next = Node C
  ↓  [Poisson delay, batch window 30s]
Node C — strips next layer → knows: next = Node B
  ↓  [Poisson delay, batch window 30s]
...
Exit node — strips final layer → delivers to recipient MTA
  ↓
Recipient

Because the hop count is variable and randomly chosen per message, an attacker who compromises one node cannot determine whether they are seeing the first hop, an intermediate hop, or the last.


Protocol properties

Packet format Sphinx — provably secure, per-hop ECDH with Curve25519
Hop count 3 to 6 hops, randomly selected per message
Entry points All 5 nodes — no single gateway to surveil or block
Batch window Messages collected in 30-second windows, shuffled, released together
Timing Poisson inter-message delays (exponential distribution)
Size padding 9-bucket adaptive normalization, recomputed hourly
Key rotation Dynamic PKI — automatic key rotation every 3 hours
Logs None — zero metadata retention

Security guarantees

Threat Countermeasure
Traffic analysis by size 9-bucket adaptive padding — all forwarded packets fall into normalized size classes
Timing correlation Poisson delays + 30-second batch mixing before each forward
Node compromise Sphinx onion encryption — a compromised node learns only its two adjacent hops
Variable-hop uncertainty 3–6 hop range means an attacker cannot determine position within the route
Tagging / packet modification Sphinx MAC on each layer — modified packets are silently dropped
Replay attacks Per-message nonce + replay cache with TTL at every node
Key compromise over time Dynamic PKI with 3-hour rotation — past sessions protected by forward secrecy
Persistent metadata Zero logs — no sender address, no routing history, no plaintext retained at any node

What Fog does not protect against

  • Unencrypted message content. Fog anonymises the transport path, not the payload. Encrypt the message body with PGP before submitting. The exit node delivers whatever you send — plaintext or ciphertext.
  • Recipient-side visibility. The exit node must know the destination address to deliver. The recipient's mail server sees a Fog exit node address, not your IP — but the delivery event itself is visible.
  • Content-based deanonymisation. Writing style, vocabulary, specific details, or unique knowledge can identify you regardless of transport. Use a consistent pseudonym and avoid fingerprinting markers in what you write.
  • Global passive adversary at scale. Sphinx delays and batch mixing raise the cost of intersection attacks significantly, but a sufficiently resourced adversary observing all network segments simultaneously remains a theoretical threat.

Self-hosting a node

Build requirements: Go 1.21+. No CGO required.

git clone https://github.com/Virebent-do-ART/fog
cd fog
go mod tidy
CGO_ENABLED=0 go build -ldflags="-s -w" -o fog ./cmd/fog

Run as a dedicated non-privileged user:

useradd -r -s /sbin/nologin -d /var/lib/fog fog
install -o fog -g fog -m 750 fog /usr/local/bin/fog
install -o fog -g fog -m 640 config.toml /etc/fog/config.toml

Each node needs a Tor hidden service configured to forward port 2525 to the local SMTP submission listener. Node-to-node Sphinx traffic is also routed over Tor — no clearnet exposure is required or recommended.

To join the network, exchange your onion address and public key with existing operators so nodes can include you in route selection. A systemd unit file is included in the repository.


Join the network

The Fog network needs more independent nodes to provide meaningful anonymity sets. If you run a VPS, want to operate a node on a best-effort basis, and are comfortable with Go and Tor configuration, get in touch.

Contact to join →    Source on GitHub →