New: a threat-model-first guide to choosing your network defence, plus the nym-smoldvpn dVPN package and nym-swizzle sender hygiene.
Network
Threat Actors

Threat actors

The threat model splits adversaries by vantage point: where an adversary sits decides what it can observe. Fusing them into one "observer" hides the differences that determine which tool helps. Each actor below has a level (L1 to L3G), a vantage, what it observes, and what it costs to become.

L1Public observerApplication-specific

Sees only what your application makes public, out of band from the connection itself.

Observes

  • Whatever is public for your application, for example a public ledger, a directory, or a status page.

Cannot observe

  • Anything your application does not publish.

Cost

  • Free. It reads public data.
L2The destinationPrimary adversary

Is, or has compromised, the service the application connects to: the server on the other end of the session.

Observes

  • The source IP of incoming connections
  • The fine-grained arrival time of every request
  • The complete contents of each request: which endpoints or resources are fetched, the parameters, the operation, and the payload

Cannot observe

  • Only what the client never sends it

Cost

  • Cheap and privileged. To run or compromise a service needs no network-wide vantage. It is the one party the user must talk to directly.
L3LLocal network observer

On the client's access network (Wi-Fi, ISP). Knows the user's IP.

Observes

  • Where the user's traffic goes, and its timing and volume
  • The timing and type of activity, through traffic fingerprinting

Cannot observe

  • TLS-protected contents

Cost

  • Whoever runs the access network or the ISP.
L3GGlobal network observer

Observes both ends of the communication and all intermediate hops at once.

Observes

  • Flow correlation (the timing, volume and size of a sequence of packets) at the input and output of every hop, or end to end

Cannot observe

  • TLS-protected contents

Cost

  • A powerful adversary with global visibility.

Adversaries at every level can also hold auxiliary information: leaked account records, data from a compromised service, or activity that a previous slip already attributed to the user.

L2 is the primary adversary for most applications

The destination is the one party you must talk to directly, and it is cheap to run or compromise. For most applications that makes it the primary adversary. No amount of in-transit mixing changes what the destination sees, because mixing reshapes traffic between hops and the destination sees only what arrives. See the two-layer model for why this is the central point. All three worked examples land here: browsing, messaging, and wallet.

Two cases displace it.

  • There is no destination. L2 presupposes a clearnet exit. When both ends run Nym there is no exit gateway. The other party is a Nym client, reached end to end, and it never learns your IP address. End to end, the L2 adversary does not exist. See end to end.
  • The threat is the fact of communication, not its content. Journalism, activism and legal work carry this risk. The adversary is then L3G, the global network observer, also called the global passive adversary. L3G decides your configuration, and the mixnet's timing protection addresses no other actor. Choose a defence sorts the configurations by which of these you face.

What each choice buys

The distinction changes what you select for, and the two answers barely overlap.

Defending against L2Defending against L3G
You are buyingIdentity separation at the destinationIn-transit timing protection
MechanismsExit rotation, short-lived connections, no cross-session correlators, request-shape disciplineMixing delays, Poisson sending, cover traffic
CostClient discipline, some convenienceLatency and bandwidth
Does nothing aboutWhat a network observer infers from your traffic patternWhat the destination reads once traffic arrives

Mixing delays buy the first case very little. Cover traffic and Poisson timing buy the second case everything and do nothing about what the destination reads. Selecting the L3G configuration because it sounds stronger, without the hygiene that L2 demands, leaves the destination-facing vectors wide open. That is the category error the two-layer model describes.

L1 is application-specific

L1 is the public or out-of-band observer. What it sees depends on your application, so the worked examples define their own L1. A wallet's L1 reads the public chain; a messaging app's L1 might read a public directory. The universal spine is L2, L3L, and L3G.