2.4 KiB
2.4 KiB
RFC-0014: Secure Relay Protocol
Overview
The Secure Relay Protocol (Layer 2) enables private, onion-routed communication within the Libertaria network. It upgrades the transport layer with privacy-preserving encryption, forward secrecy, and session binding.
1. Cryptographic Primitive
- Encryption:
XChaCha20-Poly1305(Authenticated Encryption with Associated Data). - Key Exchange:
X25519(Elliptic Curve Diffie-Hellman) for ephemeral shared secrets. - Forward Secrecy: Yes. Each circuit uses ephemeral keys.
2. Session Binding & Usage
2.1 The "Sticky" Session
To balance privacy with network health (spam protection), sessions are pseudo-anonymous but stable.
- Session ID: 16 bytes. Generated randomly by the Client (Initiator).
- Stickiness: Packets within a context flow re-use the Session ID.
- Privacy: Routers see only the Session ID (for rate-limiting) but cannot correlate it to a user Identity (DID) without owning the private key.
2.2 Nonce Construction
Strict binding of Session ID to the Encryption Nonce prevents replay and context-confusion attacks. Warning: The protocol REJECTS any packet where the nonce does not match the session.
Nonce Format (24 bytes):
| Session ID (16 bytes) | Counter/Random (8 bytes) |
- Byte 0-15: MUST match the declared Session ID.
- Byte 16-23: Monotonically increasing counter or random salt (Client controlled).
2.3 Key Management
- Relay Keys: Public X25519 keys are distributed via the DHT/Federation (
dht_nodesmessage). - Circuit Keys: Ephemeral keys are generated per circuit (or per packet in stateless mode).
- Optimization: Sticky Sessions allow reusing the Ephemeral Key Pair for multiple packets, reducing ECDH overhead for high-throughput flows.
3. Wire Format (RelayPacket)
struct RelayPacket {
ephemeral_key: [32]u8, // Network Byte Order
nonce: [24]u8, // [SessionID (16) | Rand (8)]
ciphertext: []u8, // Encrypted [NextHop + Payload]
}
4. Privacy Considerations
- Timestamp Leakage: The protocol deliberately excludes unencrypted timestamps in the header to prevent traffic correlation attacks.
- Client Sovereignty: The Client generates the Session ID. Bridges/Guards cannot force a tracking ID onto the client.
- Verification: Relays verify the Tag (Poly1305) and Session Binding before forwarding.