Skip to content

Respond to migration probes with an unlinkable remote connection ID #2184

@Ralith

Description

@Ralith

When we respond to a probing packet off the active path

if let Some((token, remote)) = self.path_responses.pop_off_path(self.path.remote) {

we reuse the prepared packet builder, which was created with the active path's remote connection ID:
let builder = builder_storage.insert(PacketBuilder::new(
now,
space_id,
self.rem_cids.active(),
buf,
buf_capacity,
datagram_start,
ack_eliciting,
self,
)?);

This allows an external observer to correlate the response with the active connection, and might help the observer correlate future migrated traffic despite the eventual use of a fresh connection ID for non-probing traffic.

For better security, we should check for and potentially send such a response before preparing a builder for the active path, making one-time use of a fresh connection ID. This may be a little tricky because CidQueue currently assumes strictly in-order consumption of CIDs, but discarding the active CID would undermine the goal of avoiding linkability.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions