~/junctus neo — an open-source, post-quantum anonymity layer

An anonymity layer, where no node sees the entire picture.

Junctus neo anonymises your data by encrypting each flow, slicing it into k-of-n shares, and sending every share down its own onion-wrapped, timing-mixed path. Any single relay — any group smaller than k — only ever sees a meaningless fragment.

Get Started
macOS.dmg ↓Android.apk ↓
iPhonesoon
§ 01

What the hell did you do?

A classic VPN asks you to trust one company. Onion routing asks you to trust that a handful of relays never collude. Junctus is built so there is nothing worth seizing: a flow is encrypted, sliced into n shares of which any k reconstruct it — and the shares never travel together.

Every request gets a fresh route and a fresh exit. Timing is mixed against a global observer. Handshakes and onion packets are post-quantum from day one — recorded traffic stays sealed even against a future quantum adversary. The network runs end to end, from zero-config discovery to live multi-hop circuits whose responses no middle relay can read.

Where the overlay must touch the open web, responsibility is diffused — rotated per request, and at the strongest setting handed to a committee whose joint key no member holds: the response returns threshold-encrypted, and each member can prove it cannot read it. The engine is neo, one open Rust core shared by every platform. The claims are tested, the limits are documented, and nothing here asks for your trust where a proof — or an honest caveat — will do.

§ 02

The alternatives, without the spin.

Every comparison table you have ever read was written by the vendor who wins it. So was this one — which is why it keeps the rows we lose. If a cell is wrong, open an issue; the table is versioned with the code.

Junctus neostrongest

No one in particular — fewer than k colluding relays, and any committee minority, learn nothing

Tor

Your guard and exit must not collude

Commercial VPNs

One company, completely

Mixnets

A majority of mix operators

01dimension

Who you must trust

Junctus neostrongest

No one in particular — fewer than k colluding relays, and any committee minority, learn nothing

Tor

Your guard and exit must not collude

Commercial VPNs

One company, completely

Mixnets

A majority of mix operators

01 / 08 dimensions↑ ↓ browse · click to pin

Generalizations, honestly made: “Tor” means the stock Tor Browser circuit model, “commercial VPNs” the typical one-hop provider (several now offer post-quantum tunnels), “mixnets” the Nym-style continuous-mix design. Each column’s best deployment is better than its worst row here.

§ 03

Breaking down, the flow.

This is the entire per-flow pipeline, exactly as it runs in the engine. Reassembly is the reverse: collect at least k authentic shares, decode, decrypt.

Discovery — a Kademlia DHT over libp2p, hardened with self-certifying signed records and witnessed snapshots, bootstrapped through signed DNS-over-HTTPS records — only ever finds peers. It never carries user data, and it always runs behind the obfuscating transport.

§ 04

The mechanisms, explained.

Eleven have running, tested code; a twelfth is experimental and labeled so. Where a hard boundary remains, the card says so, because a roadmap is not a feature.

shipped

The core mechanism. Flows are encrypted, then split k-of-n across mutually disjoint multi-hop paths. Colluding relays below the threshold learn nothing, and a corrupted share is detected, attributed, and routed around — properties asserted by tests, not prose.

01shipped

Information slicing

The core mechanism. Flows are encrypted, then split k-of-n across mutually disjoint multi-hop paths. Colluding relays below the threshold learn nothing, and a corrupted share is detected, attributed, and routed around — properties asserted by tests, not prose.

youexitk of n
01 / 12 mechanisms↑ ↓ browse · click to pin
§ 05

The risks, by adversary.

A threat model is a list of adversaries, not a slogan. Pick one: it names what they can do, what Junctus does about it — and the limit we will not hide from you.

They can
Sees your link, runs deep packet inspection
Junctus does
Everything encrypted; the transport mimics mainstream TLS/QUIC
The honest limit
Traffic volume is still observable
01adversary

Your ISP

They can
Sees your link, runs deep packet inspection
Junctus does
Everything encrypted; the transport mimics mainstream TLS/QUIC
The honest limit
Traffic volume is still observable
isp / dpisees ciphertext onlyyouvolume still visible
01 / 07 adversaries↑ ↓ browse · click to pin

Several rows are asserted by adversary-simulation tests in CI today: colluding relays below the threshold learn nothing; a single relay learns only its next hop, and a tampered payload avalanches instead of carrying a signal; an on-path observer sees only ciphertext; forged discovery data is rejected outright; and no committee minority can open a request. Explicit non-goals for v1: censors who accept large collateral damage, hiding from the destination that a connection happened, compromised endpoints, and formal anonymity bounds. And the table is not just defended — it has been attacked directly, by us. That story is next.

§ 06

We have already attacked it, a lot.

Four rounds of adversarial review: first the handshake, the onion layer, the novel core, and the discovery plane — then everything that had grown since — then the newest surface of all: the REALITY transport, the committee, circuit tunnels, and the credit economy — and, most recently, a whole-codebase pass across all sixteen crates, run as a multi-agent workflow where every critical and high finding had to survive a second reviewer trying to refute it from the source. Findings cite file and line; the worst were proven with working exploits against the real code. Every finding from all four rounds is closed — fixed in code with a regression test standing guard, or, where the defect was an overclaimed doc, by correcting the claim itself.

07critical breaks — found, proven, fixed
90findings closed across four rounds
00highs or mediums left open
01external audit not yet delivered
was criticalfixed

The tagging attack

The onion payload carried no integrity check at any layer, so a malicious first relay could imprint a bit-pattern and a colluding exit could read it back — defeating the unlinkability the mixnet exists to provide. The payload is now an exit-verified wide-block cipher: any en-route tamper avalanches the entire block and is rejected — a corrupted packet cannot carry a message.

was criticalfixed

The key-free forgery

Feeding the protocol a degenerate curve point collapsed every node’s per-hop keys to a public constant — anyone could forge a packet a victim would accept, with no key at all. The identity point is now rejected outright, with a regression test standing guard.

was highfixed

The costly hello

A replayed handshake opener forced the responder into an expensive post-quantum computation every time — a free denial-of-service. The handshake now demands a stateless retry cookie and key confirmation: a replay costs the attacker a round-trip and the responder only a MAC, and no session exists until the initiator proves its key.

was criticalfixed

The infinite mint

Found in the second review: a single validly-signed relay receipt could claim an astronomical byte count and mint trillions of bandwidth credits in one call — defeating the whole proof-of-relay economy. Receipts are now capped per claim, and the honest residual (a colluding pair can still forge many capped receipts) is documented rather than papered over.

was criticalfixed

The counterfeit capability

Third round: the probe-resistant transport ran Diffie–Hellman on whatever ephemeral point a stranger sent — including degenerate points that collapse the shared secret to a public constant. A censor could forge the authenticated flight with no capability at all, proven with a working exploit against the shipped code. Degenerate points now silently take the decoy path, a replay cache swallows captured flights, and the hello no longer has a fixed length to fingerprint.

was criticalfixed

The mint wired to nothing

The credit issuer would blind-sign for anyone who asked: issuance never consulted the earning ledger, so unlimited spendable credits could be minted at zero bandwidth — voiding the economy’s anti-Sybil premise. Issuance now atomically consumes proven, receipt-backed earnings; receipts expire; and double-spend logs are scoped to key epochs, so a rotation or redeploy cannot resurrect old serials.

was highfixed

The give-away silence

Cover packets left the mixer at one constant size while real frames varied — so a passive observer could split cover from real by length alone, quietly voiding half the cover-traffic defense. Every frame now travels as a fixed-size cell, length-identical on the wire, with the true length sealed inside the encryption.

was criticalfixed

The address in disguise

Fourth round, whole-codebase sweep: the SSRF guard that keeps exits and dial-backs off internal networks classified IPv6 correctly but missed IPv4-mapped addresses, so a target like [::ffff:169.254.169.254] — cloud metadata — read as a public address and was allowed. The IPv6 branch now recurses on the mapped IPv4 form, and mapped loopback, RFC1918, and metadata ranges are all covered by tests.

was criticalfixed

The counter that wraps

Each circuit cell is XOR-encrypted under a keystream keyed by its sequence number, incremented with an unchecked add. On a 64-bit wrap the keystream would repeat, and an observer could XOR two cells to recover plaintext — unreachable in practice, but a guarantee that was merely conditional. All six increment sites now use a checked add and abort on overflow, so the one-time property is unconditional.

01 / 09

The fourth round was the widest: a single multi-agent sweep of the whole codebase — roughly twenty-five thousand lines across sixteen crates, ten domains reviewed in parallel — where every critical and high finding was handed to a second reviewer tasked with refuting it from the source before it counted. Two high-severity claims were correctly refuted and are not bugs; a plausible-but-wrong finding is treated as a defect of the review, not a win. Of the eight that survived, two were critical — an IPv4-mapped-IPv6 address slipping past the SSRF guard, and a circuit counter whose overflow would have reused keystream — and all eight are fixed. The cryptographic core, the committee, the credit economy, and routing all came back clean. An internal review is still not an audit: the external gate stands.

§ 07

Trade-offs in your control.

Strong anonymity, low latency, low overhead — pick two. That trilemma is mathematics, not marketing, so Junctus surfaces it as a control instead of pretending it away.

config · privacy_level

The anonymity trilemma: strong anonymity, low latency, low overhead — pick two. The dial decides which two. There is no fourth option, here or anywhere.

A sane default: moderate mixing and cover traffic.

Timing mixing
Moderate Poisson per-hop delays
Cover traffic
Moderate, blended with real flows
Clearnet exit
Fresh rotating exit per request
Global observer
Timing decorrelated
Latency cost
a deliberate tax
§ 08

What we are not going to pretend.

Every privacy tool has limits. Some bury them. Ours are part of the specification, kept next to the features and versioned with the code.

Not audited
  1. The trilemma is real.

    Junctus deliberately pays a latency and bandwidth tax for anonymity. If a network promises you all three, it is lying about at least one.

  2. “No responsible exit” has an asterisk.

    Inside the overlay it holds fully — no relay ever reassembles a flow. Toward the open web it is diffused and rotated per request, and split across a threshold committee at the strongest setting — one that can prove it cannot read the response: reduced, never zero, because some machine must still speak the request to the destination.

  3. A small network is weak anonymity.

    Slicing and mixing hide you in a crowd. Until the crowd grows, the anonymity set is small — and we say so, rather than round it up.

  4. Sybil is answered, not solved.

    Flooding the relay set now costs real resources: a proof-of-work per registration, a dial-back per address, and per-subnet and per-ASN caps — plus an uptime gate the relay cannot forge. That turns “sign N records on one box” into “control N hosts across many networks.” It is still not full Sybil resistance: an adversary with a /16 or an IPv6 block defeats subnet diversity, and we deliberately refused to weight selection by bandwidth receipts, because they are client-attested and forgeable — security theater has no place in the anti-Sybil path.

  5. Phones are participants, not pack mules.

    Mobile devices throttle the dial on battery and cellular, and are never mandatory relays or committee members.

  6. It is not audited.

    Four rounds of internal adversarial review found real breaks — seven of them critical — and every finding is fixed. But that is not the external security and cryptography audit that gates real-world use. Until that audit: experiment, contribute, poke holes — do not bet your freedom on it.

§ 09

We are building in the open

Everything below with a filled marker has running, tested code — the core, the frontier that was research a season ago, and a hardening tier driven by our own attack on the system. What remains is now engineering and an audit, not open research: it is listed just as plainly.

Core — implemented
01FoundationPQ-hybrid identity (Ed25519 + X25519 + ML-KEM-768), config, CLI.
02MVP tunnelSigned hybrid handshake, encrypted session, a real TUN bridge.
03Onion routingFull Sphinx: fixed-size packets, per-hop MACs, replay tags.
04Information slicingEncrypt-then-slice k-of-n over Reed–Solomon; any-k recovery.
05Decentralizationlibp2p Kademlia DHT discovery and the connection ladder.
06Runnable discoverySigned peer records, witnessed snapshots, seed infrastructure, zero-config `neo run`.
07Live onion forwardingSphinx circuits over real sockets — a live seed, three relays, and a sender, end to end; plaintext seen by exactly one node.
08Timing defensePoisson mixing and cover traffic in the live data plane; global-observer simulation.
09Unblockable transportPluggable obfuscation, length bucketing, QUIC.
10Diffused exitOpt-in exit policy; rotating fresh-per-request exits.
11MobileUniFFI bindings over the core; iOS and Android shells.
12Core hardeningAdversary simulations, wire-parser fuzzing, the threat model.
Frontier — implemented
01Anonymous bandwidth creditsVOPRF tokens: unlinkable issuance, double-spends rejected.
02Verifiable routingCommit-then-VRF path seeds neither client nor beacon can bias.
03Committee exitThreshold trust-split with verifiable, attributable key custody.
04Verifiable privacyTwo-server PIR and oblivious lookup by node id; a real ZK shuffle.
Hardening & expansion — implemented
01Security hardeningEvery finding from two review rounds fixed with regression tests — twenty-five, three of them critical.
02Bidirectional streamingA return path with per-hop stream keys; middle relays read nothing.
03NAT traversalAutoNAT reachability and a hole-punch ladder with relay fallback.
04Earn-side accountingCapped proof-of-relay receipts gate credit issuance; spending stays anonymous.
05DoH bootstrapSigned rendezvous records over DNS-over-HTTPS; rotate without a client rebuild.
06ZK verifiable shuffleA mix proves an honest permutation without revealing it.
07Verifiable committee custodyFeldman-verified key shares; a corrupted share is detected and attributed.
08Persistent circuit tunnelsA circuit stays open and carries a real TCP byte stream, onion-layered per cell; a mauled cell is caught at the endpoint.
09Threshold committee decryptionClient-combined partial decryptions with DLEQ proofs — the committee never assembles the key or the plaintext.
10Probe-resistant transportsA REALITY-style authenticated first flight — a prober only ever sees a decoy — with QUIC/MASQUE and WebRTC/DTLS shape camouflage.
11Adversarial hardening, round threeFifty-seven findings against the newest surfaces — the committee, REALITY, circuit tunnels, credits, seed, mix — every one closed; internal dial-outs default-denied; a RustSec advisory gate now fails CI.
12Snapshot delta syncCompact records shrink snapshots ~85%, and mirrors serve witness-verifiable diffs — the client rebuilds the signed body and verifies the witnesses over the result, so a tampered diff collapses to a full refetch.
13Live committee exitDealer-less, crash-fault-tolerant DKG; an SSRF-guarded clearnet exit that threshold-encrypts, chunks, and discards plaintext; k-subset retry liveness; seed-served descriptors; a runnable CLI — and a publishable DLEQ proof that no member can read the response.
14UDP over circuitsDNS and every other UDP flow now rides onion circuits beside TCP — per-flow exit splices, one datagram per sealed cell, the same per-cell MACs and strict sequencing.
15Sybil-resistant admissionPer-subnet and per-ASN attestation caps counting only dial-back-verified addresses, NodeId-bound registration proof-of-work, an unforgeable uptime maturation gate, and subnet-diverse selection in every circuit builder.
16Stream multiplexingMany independent logical streams over one circuit, each with per-stream byte flow control, so a SOCKS proxy or full VPN return path rides a single onion — no extra crypto, all of the cell channel's integrity inherited.
17In-ClientHello REALITYThe authenticator now hides inside a structurally-valid TLS 1.3 ClientHello, and an un-authenticated prober is reverse-proxied to a real upstream site. Honest boundary: the authenticated session is still distinguishable from a full TLS handshake — matched full-session mimicry is the remaining flagship step.
18Adversarial hardening, round fourA whole-codebase multi-agent sweep — sixteen crates, ten domains, every critical/high adversarially re-verified. Eight real findings, two critical, all fixed; two more claims correctly refuted; the crypto core, committee, credits, and routing came back clean.

↕ 34 shipped milestones — scroll the ledger

What remains
01Point any app at neoA local SOCKS5 / HTTP-CONNECT proxy over the built multi-stream circuit, so any browser or CLI routes through the overlay — no new crypto, just the last mile of plumbing.
02Full-session REALITY mimicryProxy a real upstream handshake on the authenticated path with matched timing and a browser-exact fingerprint, so a censor cannot distinguish a neo bridge from the site it impersonates.
03Resilience & supplyA second independent seed with a k-of-n witness quorum to kill the bootstrap single point of failure, signed one-command relay onboarding, and store-signed client releases.
External auditSecurity + cryptography audit before anyone relies on Junctus, preceded by a frozen audit-readiness package. A hard gate, not a milestone to rush past.