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

Public Key (33 bytes, compressed secp256k1)
↓ bech32 encode x-only key
npub Application identity. What you share with others.
↓ SHA-256, truncate to 16 bytes
node_addr Routing identifier. Appears in packet headers.
↓ prepend 0xfd to first 15 bytes
IPv6 address fd00::/8 ULA for legacy IPv6 apps.

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?