Caution
Most of the code has been implemented using agentic AI. This is just a side-project that I wanted to experiment with Copilot. This project was done purely for fun and learning. I will be removing the AI-generated code and implement it manually in the future if I ever plan to make it production-ready. I know how frustrating it is to see AI slop in production code these days, and I very much understand the sentiment from a security perspective.
If I ever intend to make this production-ready, I will make sure to undergo a professional security audit for this project.
At the current moment, I make the AI follow strict security guardrails to ensure that the code is secure and follows best practices.
Use at your own risk.
- What is QNet?
- Why QNet?
- Architecture Overview
- How It Works
- Key Features
- Technology Stack
- Quick Start
- Project Structure
- Security Model
- Performance
- Documentation
- Contributing
QNet is a next-generation decentralized overlay network engineered to provide censorship-resistant, privacy-preserving internet access from anywhere in the world. Unlike traditional VPNs or proxies, QNet uses advanced traffic obfuscation techniques to make your connections resistant to ML-based fingerprinting and protocol analysis.
In countries with internet censorship:
- VPNs are blocked by detecting encrypted traffic patterns
- Tor is slow and can be blocked at the network level
- Proxies are discovered and added to blocklists
QNet solves this by making your traffic look exactly like legitimate HTTPS connections to trusted domains. To an ISP or government censor, you're just browsing Microsoft, Google, or Cloudflareβbut you're actually accessing any site through a global P2P mesh network.
| Feature | VPN | Tor | Proxy | QNet |
|---|---|---|---|---|
| Decentralized | No | Yes | No | Yes |
| Censorship Resistant | Easy to block | Can be blocked | Easy to block | Unblockable |
| Performance | Fast | Slow | Fast | Fast |
| Traffic Analysis Resistance | Obvious VPN pattern | Detectable | Detectable | ML-resistant obfuscation |
| No Single Point of Failure | Central servers | Distributed | Central proxy | P2P mesh |
| Privacy | Trust required | High | Low | High |
-
Traffic Obfuscation (HTX Protocol)
- Uses common TLS fingerprints to blend with normal traffic (JA3, ALPN, cipher suites)
- Traffic analysis resistant through padding and timing jitter
- Difficult to fingerprint using ML-based classification
-
Truly Decentralized
- No central servers to shut down
- Every user strengthens the network
- P2P mesh with operator directory for peer discovery
-
Performance-Focused
- Fast Mode: 1-hop routing for maximum speed
- Privacy Mode: 3-hop routing for anonymity
- QUIC support for improved latency
-
Defense-in-Depth Security
- ChaCha20-Poly1305 AEAD encryption
- Noise XK protocol for forward secrecy
- Ed25519 signatures for peer identity
- Deterministic CBOR serialization
QNet implements a 7-layer protocol stack inspired by the OSI model, designed specifically for censorship resistance:
graph BT
L0["L0: Access Media<br/>βββββββββββββ<br/>TCP/UDP/QUIC over IP"]
L1["L1: Path Selection<br/>βββββββββββββ<br/>SCION-inspired Routing<br/>Deferred"]
L2["L2: Cover Transport<br/>βββββββββββββ<br/>HTX + TLS Mirroring<br/>Complete"]
L3["L3: Overlay Mesh<br/>βββββββββββββ<br/>libp2p + Directory + Gossip<br/>Complete"]
L4["L4: Privacy Hops<br/>βββββββββββββ<br/>Mixnet Integration Optional<br/>Future"]
L5["L5: Naming & Identity<br/>βββββββββββββ<br/>Self-Certifying IDs<br/>Future"]
L6["L6: Incentive Layer<br/>βββββββββββββ<br/>Vouchers & Reputation<br/>Future"]
L7["L7: Application<br/>βββββββββββββ<br/>Browser Extension + SOCKS5<br/>Complete"]
L0 --> L1
L1 --> L2
L2 --> L3
L3 --> L4
L4 --> L5
L5 --> L6
L6 --> L7
style L2 fill:#ffd43b,stroke:#333,stroke-width:3px
style L3 fill:#74c0fc,stroke:#333,stroke-width:3px
style L7 fill:#b197fc,stroke:#333,stroke-width:3px
| Layer | Component | Status | Description |
|---|---|---|---|
| L7 | Application | Complete | stealth-browser Helper (SOCKS5 proxy) + Browser Extension UI |
| L6 | Incentives | Future | Payment vouchers, reputation system, resource accounting |
| L5 | Naming | Future | Decentralized identity, alias ledger, self-certifying names |
| L4 | Privacy | Future | Optional mixnet integration (Nym/Sphinx packets) for high anonymity |
| L3 | Mesh | Complete | P2P networking via libp2p (mDNS, operator directory, circuits, relay) - Phase 2 done |
| L2 | Transport | Complete | HTX protocol - TLS fingerprint cloning + AEAD framing |
| L1 | Routing | Deferred | Multi-path selection, path validation (SCION-inspired) - Post-MVP |
| L0 | Physical | System | OS-provided TCP/UDP/QUIC bearers |
Note on L1 Routing: SCION-inspired path-aware routing is architecturally fundamental for production (path validation, multi-path redundancy, geographic diversity). Currently deferred post-MVP to prioritize user delivery (Phase 3: Browser Extension). Current implementation relies on libp2p's built-in routing (L3) over standard IP (L0), which works but lacks the cryptographic path validation and explicit multi-path control that L1 will provide. Planned for Phase 4 after extension deployment.
sequenceDiagram
participant User as User Browser
participant Ext as Extension
participant Helper as Local Helper
participant Mesh as QNet Mesh
participant Exit as Exit Node
participant Target as amazon.com
User->>Ext: Browse amazon.com
Ext->>Helper: SOCKS5 request
Helper->>Mesh: HTX tunnel to peer<br/>(encrypted, fingerprint-cloned TLS)
Mesh->>Exit: Route through P2P mesh
Exit->>Target: Fetch amazon.com
Target->>Exit: Response
Exit->>Mesh: Encrypted response
Mesh->>Helper: Deliver via tunnel
Helper->>Ext: SOCKS5 response
Ext->>User: Page rendered
sequenceDiagram
participant Client as Client
participant Peer as QNet Peer
participant Target as Target Server
Note over Client,Peer: Phase 1: TLS Mirroring
Client->>Peer: ClientHello<br/>(cloned JA3 fingerprint)
Peer->>Client: ServerHello + Certificate
Client->>Peer: Finished (TLS 1.3)
Note over Client,Peer: Phase 2: Inner HTX Handshake
Client->>Peer: Noise XK Handshake<br/>(inside TLS stream)
Peer->>Client: Ephemeral Keys + Static Auth
Note over Client,Peer: Phase 3: Encrypted Data
Client->>Peer: AEAD Frames<br/>(ChaCha20-Poly1305)
Peer->>Client: AEAD Frames
Note over Client,Target: Peer routes to target
Peer->>Target: Forward request
Target->>Peer: Response
Peer->>Client: Encrypted response
Note over Client,Peer: Observer sees: Normal HTTPS (Pass)
Note over Client,Peer: Reality: Encrypted tunnel (Secure)
HTX Security Properties:
- TLS Fingerprint Resistance: JA3, ALPN, cipher suites use common browser patterns
- Inner Noise XK: Mutual authentication + ephemeral keys
- AEAD Framing: ChaCha20-Poly1305 with monotonic nonces
- Forward Secrecy: Keys rotate, no persistent state compromise
- Integrity: Ed25519 signatures on all config artifacts
graph TB
subgraph "Fast Mode (1-Hop)"
direction TB
U1[User]
U1 -->|Direct Tunnel| E1[Exit Node]
E1 -->|Fetch| T1[Target Site]
end
subgraph "Privacy Mode (3-Hop)"
direction TB
U2[User]
U2 -->|Hop 1| R1[Relay 1]
R1 -->|Hop 2| R2[Relay 2]
R2 -->|Hop 3| E2[Exit Node]
E2 -->|Fetch| T2[Target Site]
end
Fast Mode: Direct tunnel for maximum performance (default)
Privacy Mode: Multi-hop relay for stronger anonymity (optional)
graph TB
subgraph "Three-Tier Exit Model"
direction TB
T1[Tier 1: User Helpers<br/>Relay-Only Mode<br/>99% of network]
T2[Tier 2: Operator Exits<br/>DigitalOcean VPS<br/>Primary exits]
T3[Tier 3: Volunteer Exits<br/>Opt-in community<br/>Advanced users]
end
T1 -.->|Forward packets<br/>Never decrypt| T2
T1 -.->|Forward packets<br/>Never decrypt| T3
T2 -->|Decrypt & fetch| Web[Internet]
T3 -->|Decrypt & fetch| Web
style T1 fill:#51cf66
style T2 fill:#ffd43b
style T3 fill:#74c0fc
Legal Protection Strategy:
- Tier 1 (Users): Relay-only, no legal risk (can't see content)
- Tier 2 (Operator): Professional VPS with proper abuse policies
- Tier 3 (Volunteers): Explicit opt-in with legal warnings
HTX (Hypertext Transport Extension) is QNet's secret weapon:
graph LR
subgraph "What ISP Sees"
A[Your Computer] -->|HTTPS TLS 1.3| B[Internet]
B -->|Normal Response| A
end
subgraph "Reality"
C[Your Computer] -->|HTX Tunnel| D[QNet Peer]
D -->|P2P Mesh| E[Exit Node]
E -->|Real Request| F[Target Site]
end
style B fill:#51cf66
style D fill:#ffd43b
Technical Implementation:
- Uses common browser TLS ClientHello fingerprint to blend with traffic
- Matches JA3, cipher suites, extensions, ALPN of legitimate browsers
- Traffic timing and padding resist ML-based fingerprinting
- Inner Noise XK handshake provides actual encryption
- P2P mesh hides true destination (ISP sees relay IP, not target)
Note
Current Status: Peer discovery uses operator directory HTTP queries. Relay nodes register with operator nodes via heartbeat (30s interval). Client nodes query directory on startup to discover available relays. Local mDNS discovery works for same-network peers.
graph TB
%% Tier 1: User Nodes (Client Mode) - 99% of network
subgraph clients["π₯οΈ Tier 1: User Nodes (Client Mode)"]
direction LR
UC1["User Client 1<br/>βββββββββββββ<br/>β’ Mode: Client<br/>β’ SOCKS5: 127.0.0.1:1088<br/>β’ Status: 127.0.0.1:8088<br/>β’ Discovery: Query directory<br/>β’ Visibility: Invisible"]
UC2["User Client 2<br/>βββββββββββββ<br/>β’ Mode: Client<br/>β’ Local peer only<br/>β’ Max privacy"]
UC3["User Client N<br/>βββββββββββββ<br/>β’ Mode: Client<br/>β’ 99% of network"]
end
%% Tier 2: Community Relays (Optional)
subgraph relays["π Tier 2: Community Relays (Optional)"]
direction LR
REL1["Relay Node 1<br/>βββββββββββββ<br/>β’ Mode: Relay<br/>β’ Registers via heartbeat<br/>β’ Forwards encrypted packets<br/>β’ Country: US<br/>β’ No legal risk"]
REL2["Relay Node 2<br/>βββββββββββββ<br/>β’ Mode: Relay<br/>β’ Community contributor<br/>β’ Country: EU"]
end
%% Tier 3: Operator Infrastructure (Super Mode)
subgraph operators["π Tier 3: Operator Infrastructure (Super Mode)"]
direction TB
DIR["π Directory Service<br/>βββββββββββββ<br/>POST /api/relay/register<br/>GET /api/relays/by-country<br/>GET /api/relays/prune<br/>βββββββββββββ<br/>β’ Country indexing<br/>β’ 120s TTL<br/>β’ 60s pruning"]
subgraph super["Super Peers (Bootstrap + Relay + Exit)"]
direction LR
SUPER1["Super Peer 1 (NYC)<br/>βββββββββββββ<br/>β’ Mode: Super<br/>β’ Bootstrap: Yes<br/>β’ Relay: Yes<br/>β’ Exit: Yes<br/>β’ IP: 64.23.xxx.xxx"]
SUPER2["Super Peer 2 (AMS)<br/>βββββββββββββ<br/>β’ Mode: Super<br/>β’ All features<br/>β’ IP: 159.89.xxx.xxx"]
SUPER3["Super Peer 3 (SGP)<br/>βββββββββββββ<br/>β’ Mode: Super<br/>β’ All features<br/>β’ IP: 178.128.xxx.xxx"]
end
subgraph exits["Dedicated Exit Nodes"]
direction LR
EXIT1["Exit Node 1<br/>βββββββββββββ<br/>β’ Mode: Exit<br/>β’ HTTP/HTTPS only<br/>β’ Ports: 80, 443<br/>β’ SSRF prevention<br/>β’ Rate limiting"]
EXIT2["Exit Node 2<br/>βββββββββββββ<br/>β’ Mode: Exit<br/>β’ Dedicated gateway<br/>β’ Country: US"]
end
end
%% Internet
WEB["π Internet<br/>(HTTP/HTTPS)"]
%% User connections to directory (discovery)
UC1 -.->|"Query directory<br/>(on startup)"| DIR
UC2 -.->|"Query directory"| DIR
UC3 -.->|"Query directory"| DIR
%% Relay registration (heartbeat)
REL1 ==>|"Heartbeat POST<br/>(every 30s)"| DIR
REL2 ==>|"Heartbeat POST"| DIR
%% Super peer self-registration
SUPER1 ==>|"Heartbeat"| DIR
SUPER2 ==>|"Heartbeat"| DIR
SUPER3 ==>|"Heartbeat"| DIR
EXIT1 ==>|"Heartbeat"| DIR
EXIT2 ==>|"Heartbeat"| DIR
%% Mesh connectivity (encrypted relay)
UC1 <-->|"HTX encrypted packets"| REL1
UC1 <-->|"HTX encrypted packets"| SUPER1
UC2 <-->|"HTX encrypted packets"| REL2
UC2 <-->|"HTX encrypted packets"| SUPER2
REL1 <-->|"Relay forwarding"| SUPER1
REL2 <-->|"Relay forwarding"| SUPER2
%% Exit traffic to internet
SUPER1 -->|"Exit to internet"| WEB
SUPER2 -->|"Exit to internet"| WEB
EXIT1 -->|"Exit to internet"| WEB
EXIT2 -->|"Exit to internet"| WEB
%% Styling
style UC1 fill:#b2f2bb,stroke:#51cf66,stroke-width:2px
style UC2 fill:#b2f2bb,stroke:#51cf66,stroke-width:2px
style UC3 fill:#b2f2bb,stroke:#51cf66,stroke-width:2px
style REL1 fill:#a5d8ff,stroke:#74c0fc,stroke-width:2px
style REL2 fill:#a5d8ff,stroke:#74c0fc,stroke-width:2px
style DIR fill:#ffe066,stroke:#ffd43b,stroke-width:3px
style SUPER1 fill:#d0bfff,stroke:#b197fc,stroke-width:3px
style SUPER2 fill:#d0bfff,stroke:#b197fc,stroke-width:3px
style SUPER3 fill:#d0bfff,stroke:#b197fc,stroke-width:3px
style EXIT1 fill:#ffa8a8,stroke:#ff6b6b,stroke-width:2px
style EXIT2 fill:#ffa8a8,stroke:#ff6b6b,stroke-width:2px
style WEB fill:#e9ecef,stroke:#868e96,stroke-width:2px
Key Flows:
Discovery Flow (Client Startup):
- Client starts β Queries directory (
GET /api/relays/by-country?country=US) - Directory returns peer list (relays, super peers, exit nodes)
- Client dials discovered peers via HTX encrypted tunnel
- Connection established, ready to route traffic
Heartbeat Flow (Relay Registration):
- Relay/Exit/Super node starts
- Sends
POST /api/relay/registerevery 30 seconds - Peer appears in directory query results
- If heartbeat stops, peer pruned after 120s TTL
Data Flow (User Traffic):
- User browser β SOCKS5 proxy (127.0.0.1:1088)
- Helper establishes HTX tunnel (encrypted, fingerprint-cloned TLS)
- P2P mesh routing (1-3 hops through relays/super peers)
- Exit node decrypts and forwards to real HTTP/HTTPS destination
- Response returns through same path (bidirectional)
Network Architecture Components:
Tier 1 - User Nodes (Client Mode):
- 99% of network population
- Query directory on startup for peer discovery
- Never register (invisible to operators)
- Highest privacy level
- SOCKS5 proxy for browser integration
- Local status API for monitoring
Tier 2 - Community Relays (Relay Mode):
- Optional contributors increasing network capacity
- Register via heartbeat (30s interval)
- Forward encrypted packets only (never decrypt)
- No legal liability (can't see content)
- Country-tagged for geographic routing
- Safe default for community participation
Tier 3 - Operator Infrastructure:
-
Super Peers: 6 DigitalOcean droplets (bootstrap + relay + exit)
- NYC, Amsterdam, Singapore, London, San Francisco, Toronto
- Run directory service (HTTP registry)
- Provide fallback relay capacity
- Primary exit nodes (legal liability accepted)
-
Directory Service: HTTP registry for peer discovery
- POST /api/relay/register (relay registration)
- GET /api/relays/by-country?country=US (query with filter)
- GET /api/relays/prune (manual pruning, admin only)
- 120s TTL per peer (automatic staleness detection)
- 60s pruning interval (background task)
- Country indexing for geographic routing
-
Exit Nodes: Internet gateways (exit/super mode)
- HTTP/HTTPS only (ports 80, 443)
- SSRF prevention (block private IPs)
- Rate limiting (requests per minute)
- Abuse logging (sanitized, no PII)
- Professional VPS with proper abuse policies
Discovery Flow:
- Client starts β Query operator directory (GET /api/relays/by-country)
- Receive peer list (JSON: peer_id, multiaddrs, country, capabilities)
- Dial discovered peers via libp2p
- Establish HTX tunnels for mesh routing
- <2s total discovery time (vs 90s DHT timeout)
Heartbeat Flow:
- Relay starts β POST /api/relay/register (initial registration)
- Timer: Send heartbeat every 30 seconds
- Operator directory updates last_seen timestamp
- If no heartbeat for 120s β Mark stale
- Background pruning task removes stale peers every 60s
Data Flow (HTX Cover Transport):
- User browser β SOCKS5 proxy (127.0.0.1:1088)
- Helper encrypts with HTX (looks like HTTPS to trusted domain)
- Route through P2P mesh (1-3 hops, encrypted per hop)
- Exit node decrypts HTX tunnel
- Make real HTTP/HTTPS request to target site
- Response flows back through same circuit
Key Security Properties:
- Client Privacy: Never register, query-only, invisible to operators
- Relay Safety: Forward encrypted packets, no content visibility
- Exit Isolation: Only super/exit modes handle plaintext traffic
- Geographic Diversity: 6 operator nodes across 6 countries
- Censorship Resistance: HTX makes traffic look like normal HTTPS
QNet uses a hybrid approach balancing centralized discovery with decentralized operation:
- Discovery: 6 operator nodes maintain relay peer directory (HTTP registry)
- Operation: Relay peers forward encrypted packets (fully P2P, no central control)
- Registration: Relay peers POST heartbeat every 30 seconds to stay listed
- Query: Clients retrieve peer list on startup (<200ms, no 90s DHT timeout)
- Privacy: Only country-level aggregation, no individual IP tracking
- Fallback: Direct connection to operator exits if directory unavailable
Why not DHT?
- Instant connections (no 90s bootstrap timeout)
- Predictable performance (no NAT traversal issues)
- Geographic routing (select relay by country)
- Precedent: Tor (9 directory authorities), Bitcoin (DNS seeds), IPFS (Protocol Labs bootnodes) all use operator seeds for discovery
Key Distinction: Discovery mechanism β network centralization. Relay operation remains fully P2P with end-to-end encryption.
Defense-in-Depth Approach:
graph TB
subgraph "Security Layers"
L1[TLS 1.3 Outer Layer<br/>Common Browser Fingerprint]
L2[Noise XK Handshake<br/>Mutual Authentication]
L3[AEAD Framing<br/>ChaCha20-Poly1305]
L4[Ed25519 Signatures<br/>Peer Identity]
end
L1 --> L2
L2 --> L3
L3 --> L4
style L1 fill:#ffd43b
style L2 fill:#74c0fc
style L3 fill:#51cf66
style L4 fill:#b197fc
Cryptographic Primitives:
- ChaCha20-Poly1305: AEAD encryption (fast, secure)
- Ed25519: Signatures for peer identity validation
- X25519: Ephemeral key exchange (Noise protocol)
- HKDF-SHA256: Key derivation
Security Guarantees:
- Forward secrecy (ephemeral keys)
- Message integrity (AEAD tags)
- Replay protection (monotonic nonces)
- Tamper detection (AEAD integrity)
graph TB
subgraph "Rust Ecosystem"
Tokio[Tokio<br/>Async Runtime]
Rustls[Rustls<br/>TLS 1.3]
Quinn[Quinn<br/>QUIC]
Ring[ring<br/>Crypto Primitives]
end
subgraph "Networking"
Libp2p[libp2p<br/>P2P Framework]
Directory[Operator Directory<br/>HTTP Registry]
Gossip[GossipSub]
end
subgraph "QNet Crates"
HTX[htx<br/>Traffic Obfuscation]
Framing[core-framing<br/>AEAD Protocol]
Crypto[core-crypto<br/>Primitives]
Mesh[core-mesh<br/>P2P Logic]
end
Tokio --> HTX
Rustls --> HTX
Quinn --> HTX
Ring --> Crypto
Libp2p --> Mesh
Directory --> Mesh
Gossip --> Mesh
Crypto --> Framing
Framing --> HTX
HTX --> Mesh
style Tokio fill:#ffd43b
style Libp2p fill:#74c0fc
style HTX fill:#51cf66
| Component | Technology | Reason |
|---|---|---|
| Core Language | Rust | Memory safety, performance, fearless concurrency |
| Async Runtime | Tokio | Industry-standard async I/O |
| TLS/QUIC | Rustls + Quinn | Modern, pure-Rust implementations |
| P2P Networking | libp2p | Battle-tested, modular, protocol-agnostic |
| Cryptography | ring, ed25519-dalek | Audited, fast, constant-time |
| Serialization | CBOR (serde_cbor) | Deterministic encoding for signatures |
| UI | WebExtensions API | Cross-browser (Chrome/Edge/Firefox) |
- Rust 1.70+:
rustup install stable - Windows (primary dev environment) or Linux/macOS
- PowerShell (for Windows scripts)
QNet uses a 3-tier architecture with different operational modes for different roles:
| Feature | Client | Relay | Bootstrap | Exit | Super |
|---|---|---|---|---|---|
| Query directory on startup | Yes | Yes | No | Yes | Yes |
| Register with directory | No | Yes | No | Yes | Yes |
| Run directory service | No | No | Yes | No | Yes |
| Relay encrypted traffic | Yes | Yes | Yes | Yes | Yes |
| Exit to internet | No | No | No | Yes | Yes |
| Legal liability | None | None | None | Yes | Yes |
| Privacy level | Highest | Medium | Medium | Medium | Medium |
| Operator visibility | Invisible | Visible | Visible | Visible | Visible |
| Typical deployment | User devices | Trusted relays | Operator droplets | Exit relays | Operator droplets |
Client Mode (default for end-users)
- Purpose: Maximum privacy for everyday users
- Behavior: Queries directory to find relays, connects through mesh, never registers
- Privacy: Operators cannot track individual users (no heartbeat = invisible)
- Usage:
# Default mode (no flag needed) cargo run -p stealth-browser # Explicit cargo run -p stealth-browser -- --helper-mode client STEALTH_MODE=client cargo run -p stealth-browser
Relay Mode (community contributors)
- Purpose: Increase network capacity without legal risk
- Behavior: Registers with directory, forwards encrypted packets, never decrypts
- Legal: Safe - relay nodes only forward encrypted data (no content visibility)
- Usage:
cargo run -p stealth-browser -- --helper-mode relay STEALTH_MODE=relay cargo run -p stealth-browser
Bootstrap Mode (operator directory servers)
- Purpose: Run directory service for peer discovery
- Behavior: Hosts HTTP endpoints (
/api/relay/register,/api/relays/by-country) - Infrastructure: 6 global DigitalOcean droplets (geographically distributed)
- Usage:
cargo run -p stealth-browser -- --helper-mode bootstrap STEALTH_MODE=bootstrap cargo run -p stealth-browser
Exit Mode (dedicated exit nodes)
- Purpose: Internet gateway for mesh traffic
- Behavior: Relay + exit to public internet (decrypt HTTPS CONNECT requests)
- Legal: WARNING High liability - operator responsible for traffic from exit IP
- Security: Port filtering (80/443 only), SSRF prevention, rate limiting
- Usage:
cargo run -p stealth-browser -- --helper-mode exit STEALTH_MODE=exit cargo run -p stealth-browser
Super Mode (all-in-one operator nodes)
- Purpose: Combined bootstrap + relay + exit (maximum functionality)
- Deployment: The 6 operator droplets run in super mode
- Features: All capabilities enabled simultaneously
- Usage:
cargo run -p stealth-browser -- --helper-mode super STEALTH_MODE=super cargo run -p stealth-browser
graph TB
subgraph "QNet Global Infrastructure"
subgraph "Tier 1: User Devices (Client Mode)"
C1[User 1<br/>Client]
C2[User 2<br/>Client]
C3[User N<br/>Client]
end
subgraph "Tier 2: Community Relays (Optional)"
R1[Relay 1<br/>Volunteer]
R2[Relay 2<br/>Volunteer]
end
subgraph "Tier 3: Operator Infrastructure (Super Mode)"
S1[Super Peer 1<br/>US East]
S2[Super Peer 2<br/>US West]
S3[Super Peer 3<br/>EU]
S4[Super Peer 4<br/>Asia]
S5[Super Peer 5<br/>AU]
S6[Super Peer 6<br/>SA]
end
end
C1 -.->|Query directory| S1
C2 -.->|Query directory| S3
C3 -.->|Query directory| S5
R1 -->|Register| S2
R2 -->|Register| S4
C1 -->|Route via mesh| R1
R1 -->|Forward| S1
S1 -->|Exit to internet| Web[π Public Internet]
C2 -->|Route via mesh| S3
S3 -->|Exit to internet| Web
style C1 fill:#74c0fc
style C2 fill:#74c0fc
style C3 fill:#74c0fc
style R1 fill:#51cf66
style R2 fill:#51cf66
style S1 fill:#ffd43b
style S2 fill:#ffd43b
style S3 fill:#ffd43b
style S4 fill:#ffd43b
style S5 fill:#ffd43b
style S6 fill:#ffd43b
Key Design Principles:
- Privacy by Default: Client mode never registers (invisible to operators)
- Scalability: 6 super peers can serve thousands of clients
- Legal Clarity: Only operator droplets have exit liability (known, controlled IPs)
- Community Growth: Relay mode allows contributions without legal risk
- Flexible Deployment: Modes can be mixed/matched per network needs
Environment Variables:
STEALTH_MODE=client|relay|bootstrap|exit|super # Override mode
STEALTH_SOCKS_PORT=1088 # SOCKS5 port
STEALTH_STATUS_PORT=8088 # Status API port
EXIT_ABUSE_EMAIL=abuse@example.com # Required for exit/super
EXIT_MAX_CONNECTIONS=1000 # Exit rate limit# 1. Clone the repository
git clone https://github.com/QW1CKS/qnet.git
cd qnet
# 2. Build all workspace crates
cargo build --workspace
# 3. Run the Helper (local SOCKS5 proxy)
cargo run -p stealth-browser
# The Helper will start on:
# - SOCKS5 proxy: 127.0.0.1:1088
# - Status API: 127.0.0.1:8088The Helper's status page (http://127.0.0.1:8088/) displays the connection state with visual indicators:
- Offline (red): Initial state when bootstrap is disabled or no peers
- Calibrating (orange): Bootstrap enabled but not yet connected
- Connected (green): Mesh network ready OR successful SOCKS5 traffic
State Transition Triggers:
Offline β Connected:
- Any mesh peer discovered (mDNS, operator directory, or bootstrap nodes)
- Successful SOCKS5 connection established
Calibrating β Connected:
- Same triggers as Offline β Connected
Peer Discovery:
- Local network (mDNS): Discovers other QNet Helpers on same WiFi (~5 seconds)
- Internet (Directory): Queries operator nodes for relay peers (~2 seconds, returns all registered relays)
- Status page shows
mesh_peer_countand updates every 5 seconds
# Check Helper status
Invoke-WebRequest -Uri http://127.0.0.1:8088/status | ConvertFrom-Json
# Test obfuscated connection (traffic routed through mesh)
pwsh ./scripts/test-masked-connect.ps1 -Target example.com
# Run full test suite
cargo test --workspace
# Run benchmarks (performance-critical crates)
cargo bench -p core-framing
cargo bench -p htx# Format check
cargo fmt --check
# Linting (strict mode)
cargo clippy --workspace --all-targets -- -D warnings
# Fuzz testing (requires nightly)
cargo +nightly fuzz run framing_fuzz
# Spec validation (Go linter)
cd linter
go build -o qnet-lint ./cmd/qnet-lint
./qnet-lint validate ..qnet/
βββ apps/ # User-facing applications
β βββ stealth-browser/ # Helper Node (SOCKS5 + status API)
β βββ edge-gateway/ # Server-side exit node
β
βββ crates/ # Core libraries
β βββ htx/ # HTX protocol (TLS tunneling)
β βββ core-framing/ # AEAD frame codec
β βββ core-crypto/ # Cryptographic primitives
β βββ core-mesh/ # P2P mesh networking (libp2p)
β βββ core-routing/ # Path selection (future)
β βββ core-mix/ # Mixnet integration (future)
β βββ alias-ledger/ # Decentralized naming (future)
β βββ voucher/ # Payment system (future)
β
βββ qnet-spec/ # Specification & governance
β βββ specs/001-qnet/
β β βββ spec.md # Protocol specification
β β βββ plan.md # Strategic roadmap
β β βββ tasks.md # Unified task list
β βββ memory/
β β βββ ai-guardrail.md # AI coding guidelines
β β βββ testing-rules.md # Testing requirements
β βββ docs/ # Component documentation
β
βββ docs/ # Architecture documentation
β βββ ARCHITECTURE.md # System architecture
β βββ CONTRIBUTING.md # Contribution guide
β βββ helper.md # Helper API reference
β
βββ tests/ # Integration tests
βββ fuzz/ # Fuzzing targets
βββ scripts/ # Automation scripts
βββ artifacts/ # Benchmarks & performance data
| Crate | Purpose | Status |
|---|---|---|
htx |
HTX protocol implementation (TLS mirroring + Noise) | Complete |
core-framing |
AEAD frame encoding (ChaCha20-Poly1305) | Complete |
core-crypto |
Cryptographic wrappers (Ed25519, X25519, HKDF) | Complete |
core-cbor |
Deterministic CBOR serialization | Complete |
core-mesh |
P2P networking via libp2p (mDNS, DHT, circuits) | Complete |
core-routing |
L1 multi-path routing (SCION-inspired) | Deferred |
core-mix |
Mixnet integration (Sphinx packets) | Future |
alias-ledger |
Self-certifying identities | Future |
voucher |
Micropayment vouchers | Future |
QNet is designed to resist:
graph TB
subgraph "Adversary Capabilities"
A1[Passive Network Observer<br/>DPI, Traffic Analysis]
A2[Active MITM<br/>TLS Interception]
A3[Censorship Middlebox<br/>Protocol Filtering]
A4[Regional Blocking<br/>IP/Domain Blacklists]
end
subgraph "QNet Defenses"
D1[TLS Fingerprint Cloning<br/>Indistinguishable Traffic]
D2[Inner Noise XK Protocol<br/>Mutual Authentication]
D3[TLS Fingerprint Diversity<br/>Common Browser Patterns]
D4[P2P Mesh Routing<br/>No Fixed Infrastructure]
end
A1 -.blocked by.-> D1
A2 -.blocked by.-> D2
A3 -.blocked by.-> D3
A4 -.blocked by.-> D4
style A1 fill:#ff6b6b
style A2 fill:#ff6b6b
style A3 fill:#ff6b6b
style A4 fill:#ff6b6b
style D1 fill:#51cf66
style D2 fill:#51cf66
style D3 fill:#51cf66
style D4 fill:#51cf66
| Property | Implementation | Verification |
|---|---|---|
| Confidentiality | ChaCha20-Poly1305 AEAD | Constant-time crypto libs |
| Integrity | AEAD tags + Ed25519 signatures | Tamper-detection tests |
| Forward Secrecy | Ephemeral X25519 keys (Noise XK) | Key rotation tests |
| Replay Protection | Monotonic nonces | Nonce uniqueness tests |
| Traffic Analysis Resistance | TLS fingerprint + padding/jitter | ML classifier evasion tests |
Key Invariants:
- All cryptographic operations use vetted libraries (
ring,ed25519-dalek) - No secret-dependent branching (constant-time guarantees)
- Nonce uniqueness enforced via monotonic counters
- Signed config objects validated before use
- Peer identity verification required for handshake
Environment: Intel Core i7, 16GB RAM, Windows 11
| Operation | Throughput | Latency |
|---|---|---|
| HTX Handshake | - | ~50ms (incl. TLS) |
| AEAD Frame Encoding | 2.5 GB/s | ~400 ns/frame |
| AEAD Frame Decoding | 2.3 GB/s | ~430 ns/frame |
| 1-Hop Connection | 80-120 Mbps | +5-15ms vs direct |
| 3-Hop Connection | 40-80 Mbps | +20-50ms vs direct |
Performance Optimization:
- Zero-copy frame processing where possible
- Reusable buffer pools (no per-frame allocation)
- Vectorized crypto operations (SIMD when available)
- Connection multiplexing (reduce handshake overhead)
graph LR
subgraph "Network Growth"
N1[100 Nodes] -->|More Peers| N2[1,000 Nodes]
N2 -->|More Routes| N3[10,000 Nodes]
N3 -->|More Capacity| N4[100,000+ Nodes]
end
subgraph "Benefits"
B1[More Exit Diversity]
B2[Better Geographic Coverage]
B3[Higher Aggregate Bandwidth]
B4[Stronger Censorship Resistance]
end
N4 --> B1
N4 --> B2
N4 --> B3
N4 --> B4
style N4 fill:#51cf66
Scalability Design:
- DHT-based discovery (logarithmic routing)
- Gossip protocol for mesh updates (epidemic spread)
- Local routing tables (no global state)
- Lazy connection management (connect on-demand)
Warning
This documentation is a work in progress. Please refer to the qnet-spec/ directory for the most up-to-date technical specifications and design documents.
- Quick Start Guide - Get running in 5 minutes
- Browser Extension Guide - Using the UI
- Troubleshooting - Common issues
- Architecture Overview - System design
- Protocol Specification - Wire format details
- Contributing Guide - How to contribute
- Testing Rules - Test requirements
- AI Guardrails - AI coding standards
- Running an Exit Node - Deployment guide
- Security Best Practices - Hardening guide
- Unified Task List - Development roadmap
- Strategic Plan - Vision & phases
- Constitution - Governance principles
We welcome contributions! QNet is building the future of internet freedom.
Step-by-Step:
-
Find a Task: Check tasks.md for open items
- Look for Phase 2 (Helper development) or Phase 3 (User experience)
- Comment on the task to claim it
-
Set Up Environment:
git clone https://github.com/QW1CKS/qnet.git cd qnet cargo build --workspace cargo test --workspace
-
Development Workflow:
- Add/update tests first (test-driven development)
- Implement minimal changes (trace to spec task)
- Run checks:
cargo fmt,cargo clippy,cargo test - Verify fuzz targets if touching parsers
-
Commit Requirements:
Brief description of change - Detailed point 1 - Detailed point 2 Task: T3.2 (example) AI-Guardrail: PASS Testing-Rules: PASS -
Pull Request:
- Include spec/task references
- Attach before/after benchmarks (if performance-sensitive)
- Explain risk assessment
- No unrelated refactors
| Area | Skills | Difficulty |
|---|---|---|
| HTX Protocol | Rust, TLS, Cryptography | Hard |
| Mesh Networking | Rust, libp2p, P2P | Medium |
| Helper/Extension | Rust, JavaScript, UI | Easy |
| Testing | Any language, QA mindset | Easy |
| Documentation | Technical writing | Easy |
| Performance | Profiling, optimization | Medium |
- Language: Idiomatic Rust (follow existing patterns)
- Formatting:
cargo fmt --check(enforce) - Linting:
cargo clippywith-D warnings - Testing: β₯80% coverage for critical paths
- Security: Follow AI guardrails
gantt
title QNet Development Timeline
dateFormat YYYY-MM-DD
todayMarker stroke-width:5px,stroke:#ff6b6b,opacity:0.8
section Phase 1 Complete
Core Infrastructure :done, p1, 2025-09-15, 2025-10-31
HTX Protocol :done, p1a, 2025-09-15, 2025-10-15
Crypto & Framing :done, p1b, 2025-09-20, 2025-10-20
Catalog System (REMOVED):crit, p1c, 2025-10-01, 2025-10-25
section Phase 2 In Progress
Peer Discovery (2.1) :done, p2a, 2025-10-15, 2025-11-15
Relay Logic (2.2) :done, p2b, 2025-11-01, 2025-11-10
Circuit Building (2.3):done, p2c, 2025-11-10, 2025-11-20
Helper Integration (2.4):done, p2d, 2025-11-20, 2025-11-27
Super Peer Impl (2.1.11):active, p2e, 2025-11-20, 2025-11-30
section Phase 3 Planned
Browser Extension :p3, 2025-12-01, 2026-02-28
Native Messaging :p3a, 2025-12-15, 2026-01-15
UI/UX Development :p3b, 2026-01-01, 2026-02-15
Installers & Packaging:p3c, 2026-02-01, 2026-03-01
section Phase 4 Future
L1 Path Routing :p4a, 2026-03-01, 2026-05-31
Mixnet Integration :p4b, 2026-04-01, 2026-07-31
Payment System :p4c, 2026-06-01, 2026-09-30
Governance :p4d, 2026-07-01, 2026-10-31
Note
Multi-Mode Helper (Nov 30, 2025): Implemented 5 operational modes (client, relay, bootstrap, exit, super) with conditional feature enablement. Directory endpoints, heartbeat registration, and exit capabilities now respect helper mode configuration. 4 of 6 subtasks complete.
Quick Summary:
-
Phase 1 Complete (Sept 15 - Oct 31, 2025): Core infrastructure ready
- HTX protocol (TLS fingerprint cloning + Noise XK handshake)
- AEAD framing layer (ChaCha20-Poly1305)
- Cryptographic primitives (Ed25519, X25519, HKDF)
- Deterministic CBOR encoding
-
Phase 2.1-2.4 Complete (Oct 15 - Nov 27, 2025): P2P mesh operational
- Peer discovery (mDNS + operator directory, DHT removed)
- Relay logic (circuit-based packet forwarding)
- Circuit building (multi-hop routing, 1-3 hops)
- Helper integration (SOCKS5 proxy, status API, libp2p Circuit Relay V2)
-
Phase 2.1.11 In Progress (Nov 20 - Nov 30, 2025): Super peer mode - 67% complete (4 of 6 subtasks)
-
Directory HTTP endpoints (POST register, GET by-country, GET prune)
-
Exit node logic (7 modules, 20 unit tests, SSRF prevention)
-
5-mode system (client, relay, bootstrap, exit, super)
-
Directory integration (conditional endpoints, background pruning)
-
Exit node integration (SOCKS5 pipeline, stats tracking) - NEXT
-
End-to-end testing (local super peer validation)
-
Phase 3 Starting (Dec 2025 - Feb 2026): User experience
-
Browser extension UI (WebExtensions Manifest V3)
-
Native messaging bridge (extension β helper)
-
Cross-platform installers (Windows/Linux/macOS)
-
User documentation & onboarding
For detailed task breakdown, see tasks.md
Phase 1: Core Infrastructure ( 100% Complete)
-
HTX Protocol Implementation (
htx/crate) -
TLS 1.3 fingerprint resistance (ClientHello templates from real browsers)
-
Origin-aware handshake (common browser TLS characteristics)
-
Noise XK handshake derivative (Ed25519 static key verification)
-
Ephemeral X25519 key exchange (forward secrecy per connection)
-
ChaCha20-Poly1305 AEAD for post-handshake encryption
-
HKDF-SHA256 key derivation (traffic keys, rekey mechanism)
-
Deterministic nonce generation (monotonic counters, never reuse)
-
Integration tests with localhost TLS server (
certs/target3/) -
AEAD Framing Layer (
core-framing/crate) -
ChaCha20-Poly1305 AEAD per frame (integrity + confidentiality)
-
Length-prefixed frames (u16 header, max 16KB payload)
-
Monotonic nonce counters (per encoder/decoder instance)
-
Frame encoder/decoder API (stateful, reusable)
-
Bidirectional streaming support (concurrent read/write)
-
Fuzz targets (
fuzz/fuzz_targets/framing_fuzz.rs) -
Criterion benchmarks (throughput: ~1.2 GB/s on modern CPU)
-
Cryptographic Primitives (
core-crypto/crate) -
Ed25519 signatures (peer identity, signed artifacts)
-
X25519 ECDH (ephemeral key exchange)
-
ChaCha20-Poly1305 AEAD (symmetric encryption)
-
HKDF-SHA256 (key derivation function)
-
BLAKE3 hashing (fast, parallelizable)
-
Wrappers around
ringcrate (constant-time, audited) -
No raw crypto calls outside this crate (centralized, auditable)
-
NO Catalog System (removed Oct 25, 2025 - replaced by hardcoded bootstrap)
- Originally: Signed JSON catalog with operator nodes
- DET-CBOR canonical encoding (for Ed25519 signature verification)
- Expiration TTL with grace period (staleness detection)
- Version monotonicity (prevent rollback attacks)
- Decision: Removed due to operational complexity for MVP
- Replacement: Hardcoded operator nodes in
core-mesh::discovery::load_bootstrap_nodes() - Future: May revive for auto-update mechanism (Phase 3.4)
-
Deterministic CBOR Encoding (
core-cbor/crate) -
DET-CBOR implementation (RFC 8949 + deterministic rules)
-
Canonical ordering (map keys sorted lexicographically)
-
Used for signed payloads (signed artifacts, protocol upgrades)
-
No ambiguous encoding (exactly one representation per value)
-
Integration with
serde(derive macros for structs) -
Used for future signed artifacts (protocol upgrades, governance votes)
Phase 2: P2P Mesh Network ( 67% Complete)
Completed Sections (2.1-2.4):
-
2.1 Peer Discovery - mDNS local + Operator Directory (DHT removed Nov 30)
-
Multicast DNS for LAN peer discovery
-
HTTP-based operator directory (POST /api/relay/register, GET /api/relays/by-country)
-
Heartbeat registration (30s interval) for relay visibility
-
Client query with country filtering (<2s discovery vs 90s DHT timeout)
-
Background pruning (120s TTL, 60s interval)
-
~480 lines directory implementation (replaced ~450 lines Kademala DHT)
-
2.2 Relay Logic - Packet forwarding, routing table, statistics tracking
-
Circuit-based message routing with hop-by-hop forwarding
-
Encrypted packet relay (relays never see plaintext)
-
Bandwidth tracking per relay (bytes in/out)
-
Active circuit management (creation, teardown, timeouts)
-
Routing table with peer capability tracking
-
2.3 Circuit Building - Multi-hop circuits (max 3 hops), auto-teardown
-
Multi-hop circuit establishment (1-3 hops configurable)
-
Onion routing protocol (layered encryption per hop)
-
Circuit teardown on timeout/error (60s idle timeout)
-
Path selection with relay capability filtering
-
Circuit reuse for performance (connection pooling)
-
2.4 Helper Integration - SOCKS5βMesh tunneling, status API, CLI modes, Circuit Relay V2
-
SOCKS5 proxy server (127.0.0.1:1088) for browser/app integration
-
Local status API (127.0.0.1:8088) with JSON endpoints
-
CLI configuration (--socks-port, --status-port, --helper-mode)
-
libp2p Circuit Relay V2 support (NAT traversal)
-
Mesh command channel (tokio mpsc) for circuit control
-
Connection bridging (SOCKS β mesh streams)
Phase 2.1.10 Complete (Operator Directory):
-
Operator Peer Directory - Lightweight HTTP registry for peer discovery
-
PeerDirectorystruct with HashMap storage (country-indexed) -
RelayInforegistration with timestamps and capabilities -
Country-based filtering (GeoIP integration ready for Task 7)
-
Automatic staleness detection (120s TTL)
-
8 unit tests (registration, updates, queries, pruning)
-
Heartbeat Registration - Relay nodes auto-register with operator directory
-
30-second heartbeat interval (tokio timer)
-
Retry logic across 3 operator nodes (fallback redundancy)
-
JSON payload with peer_id, multiaddrs, country, capabilities
-
Response validation (200 OK, JSON confirmation)
-
Directory Query - Clients fetch peer list on mesh startup
-
3-tier fallback: directory β disk cache (TODO) β hardcoded operators
-
HTTP GET with optional country filter (?country=US)
-
Parse multiaddr list and dial discovered peers
-
<2s discovery time vs 90s DHT timeout (45x faster)
-
DHT Removal - Simplified architecture, reduced attack surface
-
Removed Kademlia imports and "kad" feature flag
-
Removed ~450 lines of DHT event handling
-
Replaced with ~480 lines of operator directory code
-
No more DHT bootstrap delays or provider record issues
Phase 2.1.11 In Progress (Super Peer Implementation - 67% Complete): Phase 2.1.11 In Progress (Super Peer Implementation - 67% Complete):
2.1.11.1 Directory HTTP Endpoints β COMPLETE (80 hours)
Objective: Implement HTTP REST API for operator directory service
Dependencies: Phase 2.1.10 (PeerDirectory struct)
Technical Specifications:
- HTTP Framework:
hyper1.0 with Tokio async runtime - Endpoints: POST
/api/relay/register, GET/api/relays/by-country, GET/api/relays/prune - Request/Response Format: JSON with schema validation
- Error Handling: 400 Bad Request, 404 Not Found, 500 Internal Server Error with descriptive messages
- Security: Rate limiting (100 req/min per IP), input sanitization (country codes), no authentication (open directory)
Implementation Tasks:
- Define JSON schemas for RelayRegistration, RelayListResponse, ErrorResponse (12h)
- Implement POST /api/relay/register handler with PeerDirectory::register_or_update (16h)
- Implement GET /api/relays/by-country with optional
?country=<CODE>query param (12h) - Implement GET /api/relays/prune admin endpoint (removes stale peers >120s) (8h)
- Add endpoint routing logic (match request paths, dispatch to handlers) (12h)
- Write 6 unit tests: endpoint parsing, response format, country filters, error cases (20h)
Testing Matrix:
- Unit tests: 6 tests covering all endpoints, query parameters, error responses
- Integration tests: Mock HTTP client registering relay, querying list, verifying pruning
- Performance: <10ms response time for queries, <50ms for registrations (unloaded server)
Completion Criteria:
- β All endpoints return valid JSON conforming to schemas
- β Country filtering correctly filters by 2-letter ISO codes
- β Prune endpoint removes peers with last_seen > 120 seconds ago
- β 6 unit tests passing with >95% code coverage
Actual Outcome: Completed Jan 15, 2025. All tests passing. Performance: avg 4ms query, 18ms registration.
2.1.11.2 Exit Node Logic β COMPLETE (120 hours)
Objective: Implement secure Internet gateway (SOCKS5 exit to clearnet)
Dependencies: None (self-contained module)
Technical Specifications:
- Protocol: HTTP CONNECT tunneling (SOCKS5 β HTTP CONNECT β TCP bridge)
- Parser:
httparsecrate (zero-copy, memory-safe, no buffer overflows) - Validation: Port policy (80/443 only), private IP blocking, SSRF prevention
- Encryption: TLS passthrough (no MITM, preserves E2E encryption)
- Bandwidth: Per-connection tracking, rate limiting structures (not enforced yet)
- Logging: Abuse attempts logged with sanitized destinations (no PII)
Security Hardening:
- Private IP Blocking: 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 169.254.0.0/16 (link-local), ::1/128 (IPv6 loopback)
- Port Policy: Allow 80 (HTTP), 443 (HTTPS) only. Reject 22 (SSH), 25 (SMTP), 3389 (RDP), etc.
- Hostname Validation: Reject internal hostnames (localhost, *.local, *.internal)
- DNS Rebinding: Future task - validate resolved IPs before connecting (prevents DNS rebinding attacks)
Implementation Tasks:
- Create 7 modules: handler.rs, parser.rs, validator.rs, errors.rs, config.rs, types.rs, tests.rs (24h)
- Implement HTTP CONNECT parser with httparse (0-copy, streaming-safe) (20h)
- Implement destination validator (port policy, private IPs, hostnames) (16h)
- Implement TCP bridge logic (client β destination bidirectional forwarding) (28h)
- Add bandwidth tracking per connection (AtomicU64 counters, future rate limiting) (12h)
- Add abuse logging (sanitized, structured logs for monitoring) (8h)
- Write 20 unit tests across all modules (parser, validator, config, errors) (32h)
Testing Matrix:
- Unit tests: 20 tests covering parser (malformed requests), validator (blocked IPs/ports), config (policy loading)
- Integration tests: 5 tests with real TCP connections (HTTP GET, HTTPS CONNECT, blocked private IP, blocked port)
- Fuzz tests: parser fuzz target (1M iterations, no panics)
- Security tests: Attempt SSRF to 127.0.0.1, 10.0.0.1, AWS metadata (169.254.169.254) - all rejected
Completion Criteria:
- β HTTP CONNECT parser handles valid and malformed requests gracefully
- β Validator rejects 100% of private IPs and non-80/443 ports
- β TCP bridge forwards data bidirectionally with <1% packet loss
- β 20 unit tests + 5 integration tests passing
- β Fuzz target runs 1M iterations without panics
Actual Outcome: Completed Jan 22, 2025. All tests passing. Fuzz target: 2.4M iterations, 0 crashes.
2.1.11.3 Super Peer Mode Config β COMPLETE (60 hours)
Objective: Implement 5-mode operational model for flexibility and security
Dependencies: None (configuration layer)
Mode Specifications:
| Mode | Directory | Heartbeat | Relay | Exit | Use Case |
|---|---|---|---|---|---|
| Client | Query | No | No | No | Default users (highest privacy) |
| Relay | Query | Send | Yes | No | Community contributors (forward traffic) |
| Bootstrap | Serve | No | Yes | No | Operator directory servers |
| Exit | Query | Send | Yes | Yes | Dedicated gateways (legal jurisdiction) |
| Super | Serve | Send | Yes | Yes | Full operators (all features enabled) |
Feature Detection API:
impl HelperMode {
fn runs_directory(&self) -> bool; // bootstrap, super
fn sends_heartbeat(&self) -> bool; // relay, exit, super
fn supports_relay(&self) -> bool; // relay, bootstrap, exit, super
fn supports_exit(&self) -> bool; // exit, super
fn queries_directory(&self) -> bool; // client, relay, exit (not bootstrap/super)
}Implementation Tasks:
- Define HelperMode enum with 5 variants (4h)
- Implement CLI parsing (
--helper-mode <client|relay|bootstrap|exit|super>) (8h) - Implement environment variable override (
STEALTH_MODE=super) (6h) - Add legacy flag aliases (
--relay-onlyβ relay,--exit-nodeβ exit) (6h) - Implement feature detection methods (runs_directory, sends_heartbeat, etc.) (8h)
- Add startup logging (log enabled features per mode) (4h)
- Add exit node warnings ("Running exit node has legal implications...") (4h)
- Write 6 unit tests (mode parsing, feature detection, descriptions) (20h)
Testing Matrix:
- Unit tests: 6 tests covering mode parsing, feature detection for all 5 modes, CLI/env priority
- Integration tests: Verify startup behavior for each mode (which endpoints enabled, which tasks spawn)
- Security tests: Ensure exit mode displays legal warning before startup
Completion Criteria:
- β CLI flag and environment variable correctly set mode
- β Feature detection accurately reflects mode capabilities
- β Legacy aliases maintain backward compatibility
- β Exit mode displays legal warning at startup
- β 6 unit tests passing
Actual Outcome: Completed Jan 25, 2025. All tests passing. CLI/env priority working correctly.
2.1.11.4 Directory Integration β COMPLETE (48 hours)
Objective: Wire directory endpoints into main HTTP server with mode-aware routing
Dependencies: 2.1.11.1 (endpoints), 2.1.11.3 (mode config)
Technical Specifications:
- Conditional Routing: Directory endpoints respond 404 in client/relay/exit modes, 200 OK in bootstrap/super
- Background Pruning: Tokio task spawned every 60s (bootstrap/super only) to remove stale peers
- Heartbeat Logic: Relay/exit/super send POST /api/relay/register every 30s, client/bootstrap skip
- Query Logic: All modes can query directory (clients discover relays, relays discover peers)
Implementation Tasks:
- Add conditional routing in main HTTP handler (check mode.runs_directory()) (12h)
- Return 404 JSON response in non-bootstrap/super modes (4h)
- Spawn background pruning task (tokio::spawn, 60s interval, bootstrap/super only) (12h)
- Update heartbeat logic to respect mode (send_heartbeat() check) (8h)
- Ensure query_operator_directory works in all modes (directory URL list) (6h)
- Write 5 unit tests (endpoint availability per mode, pruning task spawning) (6h)
Testing Matrix:
- Unit tests: 5 tests covering directory endpoint 404s in wrong modes, pruning task spawning
- Integration tests: 3 tests with real HTTP server in different modes (verify endpoint responses)
- Performance: Pruning task runs every 60s without blocking main thread
Completion Criteria:
- β Directory endpoints return 404 in client/relay/exit modes
- β Directory endpoints return valid responses in bootstrap/super modes
- β Background pruning task spawns only in bootstrap/super modes
- β Heartbeat sends only from relay/exit/super modes
- β 5 unit tests passing, 37 total tests passing (was 32 + 5 new)
Actual Outcome: Completed Jan 28, 2025. All tests passing. 37 tests total.
2.1.11.5 Exit Node Integration β³ IN PROGRESS (80 hours estimated)
Objective: Connect SOCKS5 handler to exit node logic for Internet gateway functionality
Dependencies: 2.1.11.2 (exit logic), 2.1.11.3 (mode config)
Technical Specifications:
- Pipeline: SOCKS5 CONNECT β HTX decrypt β Exit validator β TCP bridge β Destination
- Mode Check: Reject with SOCKS error 0x02 (connection not allowed) if mode doesn't support exit
- Statistics: AtomicU64 counters for requests (total, success, blocked), bandwidth (bytes)
- Status API: Expose exit stats in
/statusendpoint (conditional on mode.supports_exit()) - Policy Logging: Log blocked destinations to logs/exit-blocked.log (daily rotation)
Implementation Tasks:
- Integrate exit logic into SOCKS5
handle_connect()function (20h) - Add mode check: reject with SOCKS 0x02 if !mode.supports_exit() (4h)
- Decrypt HTX stream before passing to exit handler (12h)
- Add AppState exit statistics (4 AtomicU64 fields) (6h)
- Update
/statusendpoint with exit stats (conditional JSON field) (8h) - Add exit policy logging (structured logs, daily log rotation) (12h)
- Write 8 integration tests (SOCKS β exit β HTTP/HTTPS, blocked cases) (18h)
Testing Matrix:
- Unit tests: 4 tests for mode rejection, statistics increments
- Integration tests: 8 tests with real SOCKS5 client β exit β HTTP/HTTPS servers
- Test 1: HTTP GET to example.com (expect 200 OK)
- Test 2: HTTPS CONNECT to example.com (expect tunnel established)
- Test 3: Attempt connect to 127.0.0.1 (expect blocked, stats incremented)
- Test 4: Attempt connect to port 22 (expect blocked, stats incremented)
- Test 5: SOCKS5 connect in client mode (expect SOCKS error 0x02)
- Test 6: SOCKS5 connect in exit mode (expect success)
- Test 7: Verify bandwidth counters increment correctly
- Test 8: Verify
/statusshows exit stats in exit/super modes
- Performance: <20ms overhead for exit processing (validation + bridge setup)
Completion Criteria:
- SOCKS5 handler correctly rejects exit requests in non-exit modes
- Exit validator correctly blocks private IPs and non-80/443 ports
- TCP bridge forwards HTTP/HTTPS traffic bidirectionally
- Statistics accurately track requests and bandwidth
-
/statusendpoint conditionally includes exit stats - 8 integration tests passing
Current Status: Started Jan 29, 2025. In progress. ETA: Feb 5, 2025.
2.1.11.6 Testing - Local Super Peer β³ PENDING (60 hours estimated)
Objective: End-to-end validation of super peer functionality
Dependencies: 2.1.11.5 (exit integration complete)
Test Scenarios:
Scenario 1: Super Peer Standalone (16h)
- Start helper in super mode:
stealth-browser --helper-mode super - Verify directory endpoints respond:
- GET http://127.0.0.1:8088/api/relays/by-country β returns empty list (no peers yet)
- POST http://127.0.0.1:8088/api/relay/register β accepts registration, returns 200 OK
- GET http://127.0.0.1:8088/api/relays/by-country β returns registered peer
- GET http://127.0.0.1:8088/api/relays/prune β removes stale peers
- Verify exit functionality:
- SOCKS5 connect to example.com:80 β HTTP GET succeeds
- SOCKS5 connect to example.com:443 β HTTPS CONNECT tunnel established
- Monitor
/statusendpoint β verify exit stats update
Scenario 2: Client β Super Peer (20h)
- Start super peer on port 8088 (directory) and 1088 (SOCKS5)
- Start client helper pointing to local super peer:
- Override hardcoded operator list:
STEALTH_OPERATORS=http://127.0.0.1:8088 - Verify client queries directory on startup
- Verify client discovers super peer from directory response
- Override hardcoded operator list:
- Client makes SOCKS5 request to example.com:
- Verify client routes through super peer (HTX tunnel)
- Verify super peer exits to example.com (TCP bridge)
- Verify response returns to client (bidirectional)
- Monitor both
/statusendpoints (client and super peer)
Scenario 3: Directory Pruning (8h)
- Register fake peer with
last_seentimestamp 130 seconds ago - Verify peer appears in directory query
- Wait for pruning task (runs every 60s)
- Verify peer removed from directory after pruning (TTL 120s exceeded)
- Re-register peer with current timestamp β verify persists
Scenario 4: Heartbeat Registration (12h)
- Start relay helper pointing to local super peer
- Verify POST /api/relay/register every 30 seconds
- Verify relay appears in directory query results
- Verify relay persists across heartbeats (update, not duplicate)
- Stop relay β wait 120 seconds β verify pruned from directory
Performance Benchmarks (4h)
- Directory query latency: <10ms (target <5ms)
- Exit HTTP throughput: >50 MB/s (target >100 MB/s)
- Exit HTTPS throughput: >50 MB/s (TLS overhead ~10%)
- SOCKS5 β Exit β HTTP roundtrip: <50ms local, <200ms remote
Security Validation (0h - covered in 2.1.11.2 tests)
- SSRF prevention: Attempt connect to 169.254.169.254 (AWS metadata) β blocked
- Private IP blocking: Attempt connect to 10.0.0.1, 192.168.1.1, 127.0.0.1 β all blocked
- Port policy: Attempt connect to port 22 (SSH), 25 (SMTP), 3389 (RDP) β all blocked
Completion Criteria:
- Super peer runs stable for 1 hour with no crashes
- Client successfully discovers and routes through super peer
- Directory pruning removes stale peers correctly
- Heartbeat registration persists peers across updates
- All performance benchmarks meet targets
- Security validation confirms SSRF/IP/port blocking
Current Status: Pending 2.1.11.5 completion. ETA: Feb 6-12, 2025.
Phase 3: User Experience ( 0% - Starting Feb 2026)
Objective: Build cross-browser extension (Chrome/Edge/Firefox) using modern WebExtensions API
Dependencies: Phase 2.1.11 complete (Helper stable with status API)
Technical Specifications:
- Manifest: V3 (Chrome/Edge), V2 compatibility layer for Firefox
- Framework: React 18 + TypeScript for UI components
- Styling: Tailwind CSS 3.x for utility-first design
- Build: Webpack 5 with separate bundles for background/popup/content
- Target Browsers: Chrome 110+, Edge 110+, Firefox 109+
Implementation Tasks:
- Setup project structure (extension/, src/, manifest.json) (4h)
- Create manifest.json with V3 schema (permissions, background service worker) (6h)
- Setup Webpack config (TypeScript, React, Tailwind, hot reload) (12h)
- Implement background service worker (connection manager, message router) (20h)
- Create popup UI skeleton (React components, state management) (16h)
- Implement options page (settings form, validation) (12h)
- Setup CI/CD (GitHub Actions: build, test, package .zip) (10h)
Testing Matrix:
- Unit tests: 15 tests for React components (render, state, events)
- Integration tests: Load extension in Chrome/Firefox, verify manifest parsing
- E2E tests: Playwright automation (install extension, open popup, click buttons)
Completion Criteria:
- Extension loads in Chrome, Edge, Firefox without errors
- Popup renders correctly in all browsers
- Background service worker starts and stays alive (V3 ephemeral worker)
- Options page saves/loads settings correctly
- CI builds .zip artifact for all platforms
Estimated Completion: Feb 20, 2026
Objective: Enable extension β helper communication via native messaging protocol
Dependencies: 3.1 (extension architecture), Helper native messaging host
Technical Specifications:
- Protocol: Chrome Native Messaging (JSON length-prefixed, stdin/stdout)
- Message Format:
{ "command": "start|stop|status|config", "args": {...} } - Response Format:
{ "success": true|false, "data": {...}, "error": "..." } - Host Manifest: JSON file declaring extension ID + helper binary path
- Installation: Auto-install host manifest during helper setup (Windows Registry, Linux/macOS files)
Implementation Tasks - Extension Side (50h):
- Implement native messaging client (chrome.runtime.connectNative) (12h)
- Create command queue (serialize requests, handle responses) (10h)
- Add connection lifecycle (connect on startup, reconnect on disconnect) (12h)
- Implement timeout handling (5s per command, retry 3x) (8h)
- Add error handling (helper not installed, permission denied, JSON parse errors) (8h)
Implementation Tasks - Helper Side (50h):
- Implement native messaging server (stdin/stdout JSON protocol) (16h)
- Add command handlers: start (spawn mesh), stop (shutdown), status (query AppState), config (update settings) (20h)
- Create host manifest template (Windows: Registry, Linux/macOS: ~/.config) (8h)
- Implement installer integration (write manifest during setup) (6h)
Testing Matrix:
- Unit tests: 10 tests for message serialization, command parsing, error handling
- Integration tests: 8 tests with real extension β helper communication (start, stop, status)
- Security tests: Verify extension ID validation (reject messages from unauthorized extensions)
- Performance: <100ms roundtrip for status queries, <2s for start/stop commands
Completion Criteria:
- Extension successfully connects to helper via native messaging
- All commands (start, stop, status, config) work correctly
- Helper validates extension ID (rejects unauthorized connections)
- Connection survives helper restarts (auto-reconnect)
- Error messages provide actionable troubleshooting info
Estimated Completion: Mar 15, 2026
Objective: Design intuitive, privacy-focused user interface
Dependencies: 3.2 (native messaging bridge working)
UI Components:
Popup UI (300x500px, opens on extension icon click):
- Header: QNet logo, connection status indicator (green dot = online, red = offline, yellow = connecting)
- Main Toggle: Large connect/disconnect button (primary action)
- Status Panel: Current mode (client/relay/exit), peer count, active circuits
- Bandwidth Monitor: Real-time data usage (uploaded/downloaded), speed graph (last 60s)
- Quick Actions: Mode switcher (client β relay), country selector (if exit mode)
- Footer: Settings gear icon, help link, version number
Options Page (full-page settings):
- General Tab: Auto-start on browser launch, notifications (connected/disconnected), language
- Privacy Tab: Connection log (enable/disable, clear history), DNS settings (system vs QNet)
- Network Tab: SOCKS5 port (default 1088), status API port (default 8088), operator directory URL
- Advanced Tab: Helper mode (client/relay/exit/super), exit country preference, circuit length (3-5 hops)
- About Tab: Version info, license, privacy policy, security audit report
Content Scripts (minimal, privacy-aware):
- Inject connection status icon into page (optional, user-enabled)
- No page content scraping, no analytics, no tracking
Implementation Tasks:
- Design Figma mockups (popup, options page, dark/light themes) (16h)
- Implement popup React components (header, toggle, status, bandwidth, actions) (32h)
- Implement options page (tabs, forms, validation) (24h)
- Add real-time updates (status polling every 2s, bandwidth graph update) (16h)
- Implement mode switcher UI (client β relay β exit with warnings) (12h)
- Add country selector (flag icons, dropdown with search) (10h)
- Implement dark/light theme toggle (CSS variables, localStorage persistence) (8h)
- Write accessibility fixes (ARIA labels, keyboard navigation, screen reader support) (10h)
- Conduct user testing (5 users, SUS usability score >75) (12h)
Testing Matrix:
- Unit tests: 25 tests for React components (render, state updates, user interactions)
- Visual regression: Percy snapshots for popup + options page (light/dark themes)
- Accessibility: axe-core audits (0 critical issues, <5 warnings)
- Usability: 5 user tests with SUS score, task completion rate >90%
Completion Criteria:
- Popup loads <500ms, status updates <2s after helper state change
- All UI elements accessible via keyboard
- Dark/light themes render correctly in all browsers
- User testing achieves SUS score >75 (good usability)
- 25 component tests passing
Estimated Completion: Apr 20, 2026
Objective: Zero-configuration deployment for Windows, Linux, macOS
Dependencies: Phase 2 complete (Helper binary stable), 3.3 (Extension ready)
Windows Installer (40h):
- Tooling: WiX Toolset 4.x (MSI generation)
- Features: Install helper to Program Files, create Windows service, add firewall rules, install extension host manifest (Registry)
- Auto-start: Create service with auto-start (Delayed Start to avoid boot slowdown)
- Uninstaller: Remove service, delete files, clean registry, remove firewall rules
- Code signing: DigiCert EV certificate ($299/year, required for SmartScreen trust)
- Tasks:
- Create WiX project (.wxs XML schema) (12h)
- Implement service installation (sc.exe create, auto-start config) (8h)
- Add firewall rules (netsh advfirewall, allow ports 1088, 8088) (6h)
- Implement extension host manifest registration (Registry HKCU\Software\Google\Chrome\NativeMessagingHosts) (6h)
- Add uninstaller (remove service, files, registry) (8h)
Linux Packages (30h):
- Formats: .deb (Debian/Ubuntu), .rpm (Fedora/RHEL), AppImage (universal)
- Features: Install to /opt/qnet, systemd service, extension host manifest (~/.config/google-chrome/NativeMessagingHosts)
- Auto-start: systemd service enabled by default (user-level service)
- Tasks:
- Create .deb package (dpkg-deb, control file, postinst script) (10h)
- Create .rpm package (rpmbuild, spec file, %post script) (10h)
- Create AppImage (appimage-builder, bundle dependencies) (10h)
macOS Installer (30h):
- Format: .dmg (disk image with drag-to-Applications)
- Features: Install to /Applications, launchd service (plist), extension host manifest (~/.config/Chromium/NativeMessagingHosts)
- Code signing: Apple Developer ID ($99/year, required for Gatekeeper)
- Tasks:
- Create .dmg (hdiutil, background image, symlink to Applications) (8h)
- Create launchd plist (~/Library/LaunchAgents, auto-start) (6h)
- Implement notarization workflow (xcrun notarytool, required for Catalina+) (10h)
- Add Homebrew formula (homebrew-qnet tap, brew install qnet) (6h)
Extension Store Submissions (0h - external wait time):
- Chrome Web Store: $5 one-time fee, review 1-7 days
- Edge Add-ons: Free, auto-publishes after Chrome review
- Firefox AMO: Free, review 1-14 days
- Tasks:
- Create developer accounts (Chrome, Firefox)
- Prepare store listings (description, screenshots, privacy policy)
- Submit extension packages (.zip, .xpi)
- Pass review (address policy violations if any)
Auto-Updater (future - Phase 4):
- Mechanism: Check operator directory for new version (signed update manifest)
- Silent updates: Download .msi/.deb/.dmg, install in background, restart service
- Rollback: Keep previous version, rollback on crash loop
Completion Criteria:
- Windows MSI installs helper, starts service, extension connects
- Linux .deb/.rpm installs helper, systemd service starts
- macOS .dmg installs helper, launchd service starts
- All installers include extension host manifest
- Uninstallers remove all files, services, registry entries
- Extensions published to Chrome/Edge/Firefox stores
Estimated Completion: May 30, 2026
Objective: Comprehensive user documentation and support resources
Dependencies: 3.4 (installers ready)
Documentation Deliverables:
Installation Guides (20h):
- Windows: Step-by-step with screenshots (download .msi β run β install extension β connect)
- Linux: Commands for .deb/.rpm/AppImage + systemd service status checks
- macOS: Drag to Applications β System Preferences β Security & Privacy β Allow
- Troubleshooting: Firewall (allow ports 1088, 8088), antivirus (whitelist stealth-browser.exe), native messaging (verify manifest)
User Guide (16h):
- Getting Started: First connection, mode explanation (client vs relay), privacy overview
- Features: Mode switcher, country selector, bandwidth monitor, connection log
- Settings: Auto-start, notifications, advanced options (circuit length, DNS)
- Privacy Explainer: What QNet sees (encrypted traffic, relay IPs) vs doesn't see (plaintext content, browsing history)
- Security Model: Threat model (ISP monitoring, censorship), defense mechanisms (HTX fingerprint cloning, mesh routing)
FAQ (8h):
- "Is QNet a VPN?" β No, decentralized mesh network, no single point of failure
- "Will it slow down my internet?" β 10-30% overhead typical, depends on relay quality
- "Is it legal to run a relay/exit node?" β Relay: yes everywhere. Exit: legal but check local laws (safe harbor, DMCA)
- "How is this different from Tor?" β Faster (no mixnet delays), fewer hops (3-5 vs 3), no central directory authorities
Video Tutorials (12h):
- Video 1: "Get Started with QNet in 2 Minutes" (install β connect β verify IP changed)
- Video 2: "Running a Relay Node: Contribute Bandwidth" (switch to relay mode β monitor stats)
- Video 3: "Troubleshooting Connection Issues" (check service status, firewall, logs)
- Platform: YouTube (unlisted), embedded on qnet.dev/docs
Community Forum (4h):
- Setup GitHub Discussions (categories: General, Support, Feature Requests, Development)
- Pin welcome post with FAQ links
- Moderate first 100 posts to set community tone
Completion Criteria:
- Installation guides cover Windows, Linux, macOS with screenshots
- FAQ answers 20+ common questions
- 3 video tutorials published on YouTube
- GitHub Discussions enabled with welcome post
- Privacy policy + security audit report published
Estimated Completion: Jun 20, 2026
Phase 4: Advanced Features ( Future - Q2 2026+)
Objective: Implement path-aware networking with cryptographic path control (L1 routing layer)
Dependencies: Mesh stable (Phase 2 complete), core-routing crate extended
Technical Specifications:
- Path Construction: Multi-hop paths with cryptographic validation (SCION-inspired)
- Path Selection: User chooses paths (low-latency vs high-anonymity vs geo-diverse)
- Cryptographic Validation: Each hop signs path segment, prevents path hijacking
- Multi-Path Routing: Bandwidth aggregation (parallel paths), failover (switch on congestion)
- Path Quality Metrics: Latency (EWMA), bandwidth (probing), reliability (packet loss rate)
Research Phase (30h):
- Study SCION papers (2011-2025): path control, PCBs (Path Construction Beacons), hop fields
- Analyze existing implementations: SCION Go implementation, netsec-ethz/scion
- Document findings in research/path-routing/scion-analysis.md
- Design QNet-specific adaptations (lighter weight, no AS-level topology)
Implementation Tasks:
- Extend
core-routingcrate with PathSegment, HopField, PathValidator structs (20h) - Implement path construction algorithm (beacon-based discovery) (30h)
- Add cryptographic validation (Ed25519 signatures per hop) (16h)
- Implement path selection UI (user chooses: fast, anonymous, geo-diverse) (20h)
- Add multi-path routing (split traffic across N paths, aggregate bandwidth) (24h)
- Implement failover logic (detect congestion, switch to backup path) (10h)
Testing Matrix:
- Unit tests: 30 tests for path construction, validation, multi-path splitting
- Integration tests: 8 tests with real mesh (construct paths, validate signatures, test failover)
- Performance: <50ms path validation overhead, >80% bandwidth utilization (multi-path)
- Security: Prevent path hijacking (reject invalid signatures, verify hop sequence)
Completion Criteria:
- Paths cryptographically validated (reject tampered paths)
- User can select path preferences (latency vs anonymity trade-off)
- Multi-path routing aggregates bandwidth (test: 2 paths = ~1.8x throughput)
- Failover switches paths within 2 seconds of detecting congestion
- 30 unit tests + 8 integration tests passing
Estimated Completion: Q2 2026 (Apr-Jun)
Objective: Add high-latency anonymity layer for maximum privacy (L4 privacy hops)
Dependencies: 4.1 (path routing), core-mix and mixnode crates extended
Technical Specifications:
- Packet Format: Sphinx (layered encryption, onion routing with integrity)
- Mixing Strategy: Poisson mixing (exponential delays, resist timing analysis)
- Cover Traffic: Constant-rate dummy packets (hide real traffic patterns)
- Dual-Mode: Fast mode (no mixnet, <100ms latency) vs Anonymous mode (mixnet, 1-5s latency)
- Mixnode Incentives: Voucher payments for running mixnodes (see 4.3)
Research Phase (40h):
- Study Nym papers (2019-2025): Sphinx packets, Poisson mixing, Coconut credentials
- Analyze Nym codebase: nym-mixnode, nym-client, sphinx packet construction
- Study alternatives: Tor (circuit-based), I2P (garlic routing), Loopix (Poisson mixing)
- Document findings in research/mixnet/nym-vs-alternatives.md
- Design QNet-specific integration (Nym as library vs standalone mixnodes)
Implementation Tasks:
- Integrate Sphinx packet format (use nym-sphinx-types crate) (24h)
- Implement Poisson mixing in mixnode (exponential delay distribution) (30h)
- Add cover traffic generation (constant-rate dummy packets) (20h)
- Implement dual-mode toggle (fast vs anonymous, UI + CLI) (16h)
- Add mixnode selection logic (choose 3-5 hops, diverse geography) (20h)
- Implement mixnode incentive tracking (vouchers per packet, see 4.3) (20h)
- Extend
core-mixcrate with Sphinx encoder/decoder (30h) - Implement mixnode server (receive Sphinx packets, mix, forward) (40h)
Testing Matrix:
- Unit tests: 40 tests for Sphinx packets, mixing delays, cover traffic generation
- Integration tests: 12 tests with real mixnodes (3-hop circuits, timing analysis resistance)
- Performance: 1-5s latency in anonymous mode, <100ms in fast mode
- Security: Timing analysis resistance (packet timing indistinguishable from Poisson process)
- Anonymity: Test with traffic analysis tools (resist correlation attacks)
Completion Criteria:
- Sphinx packets correctly constructed and decoded (3-5 layer onion)
- Mixing delays follow Poisson distribution (exponential inter-arrival times)
- Cover traffic maintains constant rate (hide real traffic volume)
- Dual-mode toggle works (fast mode bypasses mixnet, anonymous mode routes through)
- Timing analysis tools cannot correlate input/output packets
- 40 unit tests + 12 integration tests passing
Estimated Completion: Q3 2026 (Jul-Sep)
Objective: Implement privacy-preserving micropayment system for relay/exit/mixnode incentives (L6 payments)
Dependencies: 4.2 (mixnet), voucher crate extended, alias-ledger integrated
Technical Specifications:
- Voucher System: Pre-paid bandwidth tokens (1 voucher = 1 GB, expire after 90 days)
- Cashu Ecash: Chaumian blind signatures (mint issues, users spend, no tracking)
- Relay Compensation: Earn vouchers for forwarding traffic (1 voucher per 10 GB relayed)
- Exit Fees: Pay 1 voucher per 1 GB exit traffic (premium exits charge more)
- Mixnode Fees: Pay 0.1 vouchers per Sphinx packet (incentivize mixing)
- Bandwidth Market: Dynamic pricing (high demand β higher voucher cost)
Research Phase (30h):
- Study Cashu protocol: blind signatures, minting, spending, double-spend prevention
- Analyze Cashu implementations: cashu-ts, cashu-rs, nutshell (Python mint)
- Study Nym tokenomics: NYM token, bandwidth credits, mixnode rewards
- Design QNet voucher economy: minting rate, expiry policy, fraud prevention
- Document findings in research/payments/voucher-design.md
Implementation Tasks - Voucher System (70h):
- Extend
vouchercrate with Voucher struct (ID, amount, expiry, signature) (12h) - Implement voucher minting (mint signs blind vouchers, user unblinds) (20h)
- Implement voucher spending (user presents voucher, relay validates signature) (16h)
- Add double-spend prevention (maintain spent voucher database, reject duplicates) (12h)
- Implement expiry logic (90-day TTL, auto-prune expired vouchers) (10h)
Implementation Tasks - Cashu Integration (50h):
- Integrate cashu-rs crate (Rust Cashu implementation) (12h)
- Implement mint server (issue blind signatures, track minted vouchers) (20h)
- Implement wallet client (request blind signatures, unblind, store vouchers) (18h)
Implementation Tasks - Incentive Logic (60h):
- Add bandwidth tracking per relay (count forwarded bytes, award vouchers) (16h)
- Implement exit fee collection (deduct vouchers per GB exit traffic) (12h)
- Add mixnode fee tracking (deduct 0.1 vouchers per Sphinx packet) (12h)
- Implement bandwidth market (dynamic pricing based on supply/demand) (20h)
Testing Matrix:
- Unit tests: 35 tests for voucher minting, spending, expiry, double-spend prevention
- Integration tests: 10 tests with real mint + wallet (mint vouchers, spend, verify balance)
- Security tests: Test double-spend attempts (expect rejection), expired voucher spending (expect rejection)
- Economic tests: Simulate 100 users, verify voucher economy balances (no inflation/deflation bugs)
Completion Criteria:
- Vouchers correctly minted and spent (blind signatures work)
- Double-spend prevention rejects duplicate voucher IDs
- Expiry logic auto-prunes vouchers after 90 days
- Relays earn vouchers for forwarding traffic (1 voucher per 10 GB)
- Exits deduct vouchers correctly (1 voucher per 1 GB)
- Bandwidth market adjusts prices dynamically
- 35 unit tests + 10 integration tests passing
Estimated Completion: Q4 2026 (Oct-Dec)
Objective: Community-driven protocol upgrades via on-chain voting (L6 governance)
Dependencies: 4.3 (voucher system for stake), core-governance crate extended
Technical Specifications:
- Voting Mechanism: Stake-weighted voting (relay operators vote proportionally)
- Proposal Format: RFC-style specifications (markdown + code diff + rationale)
- Voting Period: 14 days for standard proposals, 7 days for emergency fixes
- Quorum: 33% of active relays must vote, 66% approval required to pass
- Upgrade Rollout: Automatic deployment (backward-compatible upgrades only)
- Dispute Resolution: Appeals to arbitration panel (5 elected arbitrators)
Research Phase (24h):
- Study governance systems: Ethereum EIPs, Bitcoin BIPs, Polkadot governance
- Analyze voting mechanisms: quadratic voting, conviction voting, futarchy
- Design QNet-specific governance (balance speed vs decentralization)
- Document findings in research/governance/voting-mechanisms.md
Implementation Tasks:
- Extend
core-governancecrate with Proposal, Vote, Election structs (16h) - Implement proposal submission (relay operators create proposals, sign) (12h)
- Add voting logic (stake-weighted, count votes, enforce quorum) (20h)
- Implement automatic rollout (fetch approved proposals, apply code patches) (24h)
- Add dispute resolution (appeals, arbitrator election) (16h)
- Create governance UI (web dashboard for proposals, voting, results) (32h)
Testing Matrix:
- Unit tests: 25 tests for proposal parsing, vote counting, quorum enforcement
- Integration tests: 6 tests with mock relay network (submit proposal, vote, verify outcome)
- Security tests: Prevent vote manipulation (Sybil resistance, stake verification)
Completion Criteria:
- Relay operators can submit proposals (RFC format)
- Voting correctly enforces quorum (33%) and approval threshold (66%)
- Approved proposals automatically deploy (backward-compatible only)
- Dispute resolution handles appeals (arbitrator election works)
- Governance UI displays proposals, allows voting
- 25 unit tests + 6 integration tests passing
Estimated Completion: Q4 2026 (Oct-Dec)
Objective: Bring QNet privacy to mobile devices
Dependencies: Phase 3 complete (extension stable), Helper mobile-optimized build
Android Implementation (120h):
- Technology: Kotlin/Java app, Android VPN API (VpnService)
- Features: Always-on VPN, battery optimization, mobile data vs WiFi preferences
- Implementation:
- Create Android Studio project (Kotlin + Jetpack Compose) (16h)
- Implement VpnService (packet capture, routing to Helper) (40h)
- Cross-compile Helper for Android (ARM64, link with JNI) (24h)
- Implement mobile UI (material design, bottom nav, connection toggle) (24h)
- Add battery optimization (reduce background polling, adaptive heartbeat) (16h)
- Testing: 10 devices (Pixel, Samsung, OnePlus, Xiaomi, etc.), Android 11-14
- Distribution: Google Play Store ($25 one-time fee, review 1-7 days)
iOS Implementation (120h):
- Technology: Swift/SwiftUI app, Network Extension framework
- Features: Always-on VPN, iCloud sync (shared preferences), low-power mode
- Implementation:
- Create Xcode project (Swift + SwiftUI) (16h)
- Implement NEPacketTunnelProvider (packet capture, routing to Helper) (40h)
- Cross-compile Helper for iOS (ARM64, link with Swift) (24h)
- Implement mobile UI (SF Symbols, SwiftUI, connection toggle) (24h)
- Add iCloud sync (shared preferences, circuit history) (16h)
- Testing: 8 devices (iPhone 12-15, iPad Pro, iPad Air), iOS 16-18
- Distribution: Apple App Store ($99/year, review 1-14 days)
Completion Criteria:
- Android app routes traffic through QNet mesh (VpnService working)
- iOS app routes traffic through QNet mesh (Network Extension working)
- Battery life impact <10% (vs no VPN)
- Apps pass Play Store / App Store review
- 10 Android + 8 iOS devices tested
Estimated Completion: Q2 2027 (Apr-Jun)
Objective: Resist ML-based traffic fingerprinting and protocol analysis
Dependencies: HTX stable, mesh operational
Techniques to Implement:
QUIC/ECH Integration (40h):
- Replace TCP with QUIC (quinn crate, faster handshake, multiplexing)
- Add Encrypted Client Hello support (hide SNI from passive observers)
- Benefits: QUIC fingerprint less distinct than TLS, ECH hides destination
HTX Template Diversity (30h):
- Expand HTX templates beyond Chrome (Firefox, Safari, Edge, curl)
- Randomize template selection per connection
- Benefits: Avoid single-fingerprint classification
obfs4 Pluggable Transport (40h):
- Integrate obfs4 (Tor obfuscation protocol)
- Polymorphic encryption (randomized padding, timing obfuscation)
- Benefits: Resist DPI, censorship-resistant
Shadowsocks Integration (30h):
- Add Shadowsocks as optional transport (AEAD encryption, stream cipher)
- Benefits: Battle-tested in China, lightweight
Traffic Padding/Morphing (20h):
- Add random padding to HTX frames (hide payload size distribution)
- Implement traffic shaping (constant-rate sending, hide bursts)
- Benefits: Resist ML fingerprinting of packet sizes/timing
Completion Criteria:
- QUIC transport option alongside TCP (user-selectable)
- ECH support in HTX handshake
- 5+ HTX templates (Chrome, Firefox, Safari, Edge, curl)
- obfs4 transport working (test with DPI tools)
- Shadowsocks transport working
- Traffic padding reduces fingerprinting accuracy (test with ML classifiers)
Estimated Completion: Q3 2027 (Jul-Sep)
Objective: Explore true connection masking with ISP cooperation
Dependencies: All previous phases complete, strong user base (100k+ users)
Context: Refraction networking (Telex, Decoy Routing, TapDance, Conjure) is the only technology achieving true connection masking (ISP sees Site A while connecting to Site B). Requires ISP/backbone router deployment.
Implementation Plan:
- Engage: Contact UMich Refraction Networking research team (Prof. J. Alex Halderman)
- Identify: Partner ISP (Merit Network, regional ISPs willing to deploy)
- Pilot: Deploy routers with 100-1000 QNet users, measure efficacy
- Publish: Academic paper on results (censorship resistance, performance, deployment challenges)
Risks:
- ISP cooperation unlikely without strong business case or research grant
- Legal/liability concerns (ISP sees all traffic, potential for abuse)
- Deployment complexity (requires privileged router access, not cloud-friendly)
Estimated Completion: 2028+ (pending ISP partnership)
QNet is released under the MIT License.
MIT License
Copyright (c) 2024 QNet Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software...
See LICENSE for full text.
QNet builds on the shoulders of giants:
- Tor Project: Pioneering anonymous communication
- IPFS/libp2p: Decentralized networking protocols
- Rustls: Modern TLS implementation
- Nym: Mixnet research and implementation
- SCION: Secure path-aware networking
- GitHub Issues: Bug reports and feature requests
- Discussions: Design discussions and Q&A
- Security: See SECURITY.md for responsible disclosure
Building the unblockable internet, one node at a time.
Star us on GitHub | Fork and contribute | Spread the word
