Well done, this looks really neat! A couple of questions:
Thanks Jesse :)
- Are you looking into publishing your work in a peer-reviewed journal
such as CSS, NDSS, PoPETS, or elsewhere?
Not at the moment, however there's another research group investigating QUIC and I've also shared my code with them.
- Did you examine the performance improvements for 6-hop onion/hidden
service circuits?
Afraid I didn't have time, but I expect performance should improve for that case too.
- Tor currently multiplexes circuits over the same TLS connection. This
is by design to avoid leaking circuit-level metadata, including the observation of construction and tear-down. The first paragraph on page 21 seems to suggest that QUUX leaks this information. Is this correct, or did you take steps to address this? For that matter, does QUUX leak any additional metadata that could assist with de-anonymization attacks?
That paragraph only refers to the internal code buffers before send so shouldn't be an issue. The stream frames are contained in an encrypted QUIC packet for transfer over a QUIC connection, and it shouldn't be possible to tell what streams/circuits are communicating just by looking at an encrypted QUIC packet from a connection between relays.
The initial stream creation currently sends an "unusual" 32 byte hash and 4 byte circ-id on the connection. If the connection is busy this would hopefully be resegmented with other streams' data on the connection to create a full packet. If it's an issue the size could be rounded up to a full cell size instead though. However, in truth I would be surprised if Tor currently resists traffic analysis on creation of circuits, since I expect handshake cell timings would be quite identifiable, especially over a quiet relay.
I agree for a busy relay (both in and out) analysis of a Tor relay's established circuit traffic should be difficult, and I expect it'd be about as difficult for QUIC, depending on its algorithm/heuristics for how it chooses to resegment stream data onto packets send them.