Magic Wormhole: get things from one computer to another, safely
Use cases and advantages
- Widely used for ad‑hoc, one‑off file transfers, especially:
- When SSH/scp accounts or keys are not preconfigured.
- Across NATs/firewalls where inbound connections are blocked.
- Onto locked‑down or GUI‑less machines and into corporate environments.
- Favored for simplicity:
wormhole send FILENAME/wormhole receive CODE, no account setup, no user management. - Seen as complementary to tools like rsync and Syncthing:
- Analogy: wormhole : Syncthing :: scp : rsync.
- Good for “introduction”/bootstrap; Syncthing better for ongoing sync.
How it works: servers, NAT, and performance
- Uses two servers:
- “Mailbox” server for small control messages and PAKE exchange.
- “Transit relay helper” only if direct connectivity fails (both sides behind restrictive NAT).
- Tries all known IPs on both sides first; relay is fallback.
- Relay bandwidth reported around 10–15 TB/month; some worry about scalability, others note it’s manageable and tunable.
- Hole-punching/WebRTC/STUN‑style techniques are partially implemented in the Rust ecosystem and planned for Python; current Python version lacks full NAT punching.
- Some users report large transfers (tens of GB) working well; one critic notes throughput ~20 MB/s over high‑latency links and calls for multi‑stream/UDP‑based protocols.
Security model and concerns
- Uses a short, human‑readable code (channel + ~16 bits entropy) fed into a PAKE.
- PAKE limits attackers to one guess per protocol run; wrong guesses abort the session, making brute force self‑limiting.
- Tab‑completion on words is argued to not leak entropy, since the wordlist is fixed.
- A commenter highlights a theoretical 1/65,536 hijack chance and argues it’s weaker than SSH; others accept this tradeoff for usability.
- Not post‑quantum‑secure; some discuss layering GPG or using PQ‑secure key exchange separately.
Ecosystem and alternatives
- Multiple interoperable implementations: Python (feature‑rich), Go (“wormhole‑william”), Rust (used by GNOME Warp and Android apps), Haskell.
- Various GUIs and wrappers: Warp, Android clients, RiftShare, mobile APKs, npx wrapper.
- Many alternative tools discussed (croc, Syncthing, Tailscale Taildrop, LocalSend, sharedrop/snapdrop/pairdrop, Send Anywhere, Zynk, etc.), each with different tradeoffs (P2P vs relay, repeated sync vs one‑shot, FOSS vs proprietary).
Limitations and UX issues
- Requires Internet access; no fully offline/local‑only mode yet (mDNS/Bonjour design ideas remain unimplemented).
- Multi‑file/incremental transfer is weak (zips everything, no resume).
- Installation can be dependency‑heavy on some platforms; users suggest more one‑click binaries and clear platform‑specific downloads.
- Some admins view it as a policy risk because it enables encrypted outbound file exfiltration that bypasses traditional controls.