Lesson 2
Identity
Most networks separate identity from addressing. You get an IP address from a DHCP server, and separately prove who you are through certificates issued by a third party. FIPS collapses these into a single step: your cryptographic keypair is your address.
The keypair
A FIPS node starts by generating (or loading) a secp256k1 keypair. This is the same elliptic
curve used by Bitcoin and Nostr. The private key stays on your node. The public key, encoded
in bech32 as an npub, is how other users and
applications identify you.
From this single public key, FIPS derives two more identifiers. Both are deterministic. No coordination with anyone else is needed.
The derivation pipeline
The node_addr is a one-way hash. Given a node_addr, you cannot recover the public key. This is the property that protects identity at the routing layer: intermediate routers see node_addrs in packet headers but cannot determine which npub (which person) the traffic belongs to. An observer who already knows your npub can check whether a particular node_addr is yours, but they cannot enumerate identities from traffic alone.
Try it yourself
The widget below generates a real secp256k1 keypair in your browser and walks through the derivation. Each step produces a different representation of the same identity.
Identity Derivation
Click the button to generate a real secp256k1 keypair and watch each derived identifier appear.
Who sees what?
Different actors in the network have access to different levels of identity information. This table summarizes what each can observe:
| Observer | Sees |
|---|---|
| Transport observer | Encrypted packets, timing, packet sizes. No FIPS-level identifiers. |
| Direct peer | Your npub (from Noise IK handshake), traffic volume, timing. |
| Intermediate router | Source and destination node_addrs, packet size. Cannot read payload. |
| Destination | Your npub (from Noise XK session), payload content. |
Why Nostr keys?
FIPS could have defined its own key format. Instead, it reuses the Nostr cryptographic stack: secp256k1 for keys, Schnorr signatures for authentication, SHA-256 for hashing, ChaCha20-Poly1305 for AEAD. This means an existing Nostr identity can serve as a FIPS node identity without generating anything new.
Key rotation is straightforward but destructive: a new keypair produces a new node_addr and IPv6 address. All existing sessions must be re-established. There is no mechanism (yet) for announcing a successor key.
Identity
1. What cryptographic curve does FIPS use for node identity?
2. A transit router forwarding your packet can see your:
3. How is a FIPS IPv6 address derived?