David Stainton's Open Source Projects

See my github profile and the Katzenpost organisation for additional open source projects.

Post-Quantum Cryptography and the Katzenpost Mix Network

Katzenpost is a post-quantum mix network with strong metadata-privacy guarantees against global passive adversaries, compromised contacts, quantum decryption, and statistical/confirmation attacks. It started as part of the EU Horizon 2020 Panoramix project in 2017, and I’ve been leading the cryptographic protocol work on it ever since.

Two post-quantum hybrid variants of the Sphinx packet format. A NIKE Sphinx and a KEM Sphinx, both supporting hybrid post-quantum constructions, so you can compose X25519 with ML-KEM (or other KEMs/NIKEs) and keep the handshake secure even if one primitive breaks.

Pigeonhole: unlinkable message storage for mixnets. Pigeonhole is the storage protocol from our Echomix paper. Messages live in BACAP boxes, pseudorandom unlinkable locations derived via Ed25519 key blinding, sharded across replicas and fronted by couriers that never learn the box IDs. Fixed-throughput courier-replica connections hide traffic patterns. Envelope encryption keeps couriers blind.

Post-quantum Noise wire protocol for the mixnet. Integrated a PQ Noise handshake into the Katzenpost mix network wire protocol, via a fork of Yawning Angel’s Nyquist pq/experimental branch. The result follows the approach described in Angel/Dowling/Hülsing/Schwabe/Weber’s Post-Quantum Noise.

hpqc: post-quantum Go cryptography library. My PQ crypto library used throughout Katzenpost. Highlights:

IETF TLS working group. Active participant in both the post-quantum signatures discussion (pure ML-DSA vs. composite) and the ML-KEM pure-vs-hybrid discussion. My position on both: use hybrids. PQ cryptanalysis has already broken a handful of candidates in recent years, and lattices are young compared to elliptic curves. I’d rather not bet there are no more breaks coming.

Earlier Katzenpost contributions

Some of this earlier work was funded by Samsung and NLnet.

Honeybadger: TCP injection attack detector (2014)

honeybadger image

In 2014, shortly after the Edward Snowden document leaks, I wrote Honeybadger, at the time the most sophisticated detector of TCP injection attacks, including the NSA’s so-called “quantum insert” (which is really just a silly name for TCP injection). It uses my own classification of injection attacks:

  1. handshake hijack
  2. segment veto
  3. sloppy injection
  4. out-of-order coalesce injection
  5. censorship injection

Writeup: TCP injection attack categories. Documentation: honeybadger.readthedocs.org.

During that work I acted as an advisor to Google on improvements to their Gopacket library (correspondence with Graeme Connell at Google and Laurent Hausermann at Sentryo in April 2015). I have never been employed by Google; I am an independent security researcher.


Earlier open source

Go

I started writing Go in 2014.

Rust

I learned Rust by writing cryptography libraries and solving cryptopals challenges.

Python

Most of my Python work involved async IO networking with Twisted, often for Tor integration or cryptography.