FIPS (Free Internetworking Peering System — kein Akronym, nur ein Name) ist ein selbstorganisierendes, verschlüsseltes Mesh-Netzwerk für zensurresistente, dezentrale Kommunikation. Entwickelt von jmcorgan in Rust. Aktuell: Version v0.2.0 (März 2026), v0.3 in Entwicklung.
🌐 Was macht FIPS besonders?
FIPS nutzt Nostr-Identitäten (secp256k1/Schnorr) als native Netzwerkadressen. Dein Node hat eine npub-Adresse — dieselbe kryptografische Identität die auch als Basis für Ende-zu-Ende-verschlüsselte Sessions dient. Keine Registrierung, keine zentrale Autorität, keine globalen Routing-Tabellen.
Das Mesh funktioniert über jedes Transportmedium: UDP, TCP, Ethernet, Tor, Bluetooth (BLE), serielle Verbindungen, Radio. Selbstorganisation — ein einziger Peer reicht, um das gesamte Mesh zu erreichen.
📦 Version 0.2.0 — Was ist neu?
Die aktuelle Release (v0.2.0, 23. März 2026) bringt:
Logos und Branding — FIPS hat jetzt ein offizielles Logo und Banner.
Post-Rekey Jitter Fix — Rekeying verursachte vorher Jitter-Spikes durch Drain-Window-Frames. Gefixt in PR #12.
Nostr Relay Sidecar — Ein Beispiel-Sidecar der einen Nostr-Relay neben dem FIPS-Node betreibt (PR #20). Nostr + Mesh = perfekt.
Reproducible Builds — Die Binaries sind jetzt reproduzierbar. Jeder kann nachbauen und verifizieren dass der Code dem Binary entspricht (PR #25).
OpenWrt Publishing via Nostr — Die OpenWrt-Pakete werden jetzt über Nostr veröffentlicht (PR #28).
🚀 Download und Installation
FIPS ist in Rust geschrieben (Edition 2024, Rust 1.85+). Verfügbar für Linux, macOS, Windows und OpenWrt.
GitHub: github.com/jmcorgan/fips
Quellcode bauen:
git clone https://github.com/jmcorgan/fips.git
cd fips
cargo build –release
OpenWrt (.ipk):
x86_64: fips_v0.2.0-rel_x86_64.ipk (5 MB)
aarch64: fips_v0.2.0-rel_aarch64_cortex-a53.ipk (4,8 MB)
Debian/Ubuntu (.deb):
cargo install cargo-deb
cargo deb
sudo dpkg -i target/debian/fips_*.deb
Interaktiver Protokoll-Guide: learn.fips.network — 14 Lektionen mit Simulationen, von Grundlagen bis Installation.
⚙️ Konfiguration
FIPS braucht minimal Konfiguration. Nach der Installation:
sudo nano /etc/fips/fips.yaml
sudo systemctl start fips
Die Config enthält: Node-Identity (ephemeral oder persistent mit nsec), TUN-Interface (fips0, MTU 1280), DNS-Resolver (.fips-Domain auf Port 5354), Transport-Bindings (UDP :2121, TCP :8443), und statische Peers zum Bootstrapping.
Zero Config: Ein Node kann ohne Config-Datei starten. Peer-Adressen werden nur zum Initial-Join ins Mesh benötigt.
🔐 Verschlüsselung
Zwei unabhängige Verschlüsselungsschichten nach dem Noise Protocol Framework:
Hop-by-Hop (FMP Layer): Noise IK — jeder Link zwischen benachbarten Nodes ist authentifiziert und verschlüsselt. Passive Observer (WiFi-Sniffer) sehen nichts.
End-to-End (FSP Layer): Noise XK — zusätzliche Verschlüsselung zwischen den Endpunkten. selbst Nodes die den Traffic weiterleiten können den Inhalt oder die Endpunkte nicht sehen.
Forward Secrecy: Periodisches Rekeying mit kurzen Sitzungsschlüsseln. Kompromittierte Schlüssel gelten nur für den jeweiligen Zeitraum.
🛡️ Threat Model
Passive Observer (WiFi-Sniffer): Geschützt durch Link-Verschlüsselung (FMP). Sieht nur verschlüsselte Frames.
MITM/Paket-Manipulation: Geschützt durch Noise IK Authentication + AEAD. Manipulierte Pakete werden verworfen.
Malicious Mesh Nodes: Geschützt durch End-to-End Session (FSP). Böse Nodes sehen nur den node_addr Hash, nicht den Inhalt.
Sybil Attack: Abgemildert durch Rate-Limiting und diskretionäres Peering. Du entscheidest wem du vertraust.
🗺️ Routing: Spanning Tree + Bloom Filter
FIPS verwendet keinen klassischen Routing-Table. Stattdessen:
Spanning Tree: Das Mesh organisiert sich als Baum. Jeder Node wählt einen Parent. Koordinaten im Baum erlauben effizientes Forwarding.
Bloom Filter: Probabilistische Datenstruktur die jedem Node sagt: „Dieser Peer kennt wahrscheinlich das Ziel.“ Weniger Overhead als globale Tabellen.
Greedy Routing: Pakete werden anhand der Baum-Koordinaten weitergeleitet. Keine Pathfinding-Iterationen nötig.
Self-Healing: Wenn ein Node ausfällt oder Verbindungen brechen, konvergiert der Baum automatisch neu. Drei Error-Signale steuern die Wiederherstellung.
📊 Vergleich mit anderen Netzen
FIPS: Mesh-Routing ✅ | E2E Crypto ✅ | Anonymität ❌ | Nostr-ID ✅ | Multi-Transport ✅ | IPv6 ✅
Tor: Mesh ❌ | E2E ✅ | Anonymität ✅ | Nostr-ID ❌ | Multi-Transport ⚠️ | IPv6 ❌
Yggdrasil: Mesh ✅ | E2E ✅ | Anonymität ⚠️ | Nostr-ID ❌ | Multi-Transport ⚠️ | IPv6 ✅
CJDNS: Mesh ✅ | E2E ✅ | Anonymität ⚠️ | Nostr-ID ❌ | Multi-Transport ⚠️ | IPv6 ✅
FIPS bietet keine Anonymität wie Tor — das ist bewusst. Der Fokus liegt auf Dezentralität, Zensurresistenz und Off-Grid-Fähigkeit, nicht auf Anonymisierung.
💡 IPv6-Adapter und Gateway
FIPS macht normale IP-Anwendungen mesh-fähig ohne Code-Änderung:
TUN-Interface: Mappt npubs zu fd00::/8 IPv6-Adressen. Unmodified SSH, curl, ping funktionieren direkt über das Mesh.
DNS-Resolver: .fips-Domains werden lokal aufgelöst. Optional mit statischer Host-Mapping (/etc/fips/hosts).
fips-gateway: Optionaler Sidecar der unmodified LAN-Hosts über NAT und eine virtuelle IP-Pool an .fips-Ziele weiterleitet. Normale Geräte im LAN können FIPS-Ziele erreichen ohne eigene FIPS-Installation.
📡 Transports
UDP: Linux ✅ | macOS ✅ | Windows ✅ | OpenWrt ✅
TCP: Linux ✅ | macOS ✅ | Windows ✅ | OpenWrt ✅
Ethernet: Linux ✅ | macOS ✅ | Windows ❌ | OpenWrt ✅
Tor: Linux ✅ | macOS ✅ | Windows ✅ | OpenWrt ✅
Bluetooth BLE: Linux ✅ | macOS ❌ | Windows ❌ | OpenWrt ❌
Auf Linux braucht BLE BlueZ und libdbus (sudo apt install bluez libdbus-1-dev, dann cargo build –release –features ble).
🔧 Tools und Monitoring
fipsctl: CLI-Tool für Runtime-Inspektion, Peer-Management und Debugging.
fipstop: TUI-Dashboard für Live-Monitoring des Mesh-Status.
Metrics: Per-Link RTT, Packet Loss, Jitter und Goodput mit Mesh-Size-Estimation.
ECN Congestion Signaling: Hop-by-Hop CE-Flag-Relay mit RFC 3168 IPv6-Marking.
🔗 Links
GitHub: github.com/jmcorgan/fips
Website: fips.network
Interactive Guide: learn.fips.network
Releases: github.com/jmcorgan/fips/releases
Config Reference: github.com/jmcorgan/fips/blob/master/docs/design/fips-configuration.md