Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linkability across new points of network attachment #53

Closed
martinthomson opened this issue Jul 10, 2018 · 5 comments
Closed

Linkability across new points of network attachment #53

martinthomson opened this issue Jul 10, 2018 · 5 comments

Comments

@martinthomson
Copy link
Contributor

A client that migrates to a new point of network attachment probably wants to use a new connection ID. But that attempt will result in linkability if the server doesn't also change. How do we manage that? One approach is to use the cid_immediate instruction. But clients need to be careful to include that instruction in every packet they send lest the server miss it.

QUIC takes a different approach, which is to number all connection IDs combined with a ratchet. If connection ID N is used by one endpoint, its peer has to use connection ID N or greater on that same network path.

@martinthomson
Copy link
Contributor Author

The QUIC DT on this subject has come up with a different design:

  1. you use a new connection ID when you observe a path change
  2. endpoints need to provide their peers enough connection IDs that they shouldn't run out
  3. when an endpoint stops using a connection ID, there is a new "retire connection ID" message that is used to signal that it is no longer needed
  4. endpoints that receive this "retire connection ID" are expected to replenish the supply of connection IDs at their peer

@ekr
Copy link
Collaborator

ekr commented Nov 2, 2018

Point (1) is sort of implicit in the text, and I agree we should add it.

Points (2)-(4) are about ensuring that the other side has enough CIDs. In QUIC, this is the server's job and there's no real way for the client to say that it doesn't have enough CIDs or tell the server how many. It can just say that it is done using some set of CIDs and this tells the server to send more, but the server has no idea how many. By contrast, the DTLS design is for the client to tell the server when it wants more CIDs and the server gets to retire them. ISTM that this is a more flexible design in that the server can change CIDs whenever it wants (e.g., for rekeying of the CID encryption key).

IIRC much of the motivation for the design with QUIC was not to have to interlock with the ACK, and in this respect the situation here is the same as with the KeyUpdate, which is that the QUIC design has the advantage that it doesn't need to interlock with the ACK to know when things have change. But that doesn't apply here for the same reason as with #63.

So I think my proposed resolution is just to add that you should change CIDs whenever you change paths and should request enough CIDs that you have a hot spare. I could imagine a way for the server to say what specific keys it wants to invalidate, but I'm not sure that's necessary. I do think we should enhance RequestConnectionId to have a count.

@ekr
Copy link
Collaborator

ekr commented Nov 3, 2018

@ekinnear

@ekr
Copy link
Collaborator

ekr commented Nov 3, 2018

@erickinnear

ekr added a commit to ekr/dtls13-spec that referenced this issue Nov 4, 2018
messages, but also forbid having multiple ones outstanding.
Fixes tlswg#50, Fixes tlswg#52, Fixes tlswg#53.
@ekr ekr closed this as completed in #65 Nov 5, 2018
@erickinnear
Copy link

(Just noting my earlier thoughts here so they're saved somewhere)

Overall, only concern is around the rate at which you can send additional connection IDs to the peer vs. the rate at which you retire them. My understanding is that they are all retired at once, but need to be provided independently.
It seems like there could be situations, especially for a sender that needs to migrate rapidly (say away from and then back to some specific interface), where this leaves the sender without a CID to switch to.
Allowing multiple CIDs in the messages as in #65 looks like it generally resolves this.

Also noting that infinite looping in response to peer changes is covered by the sequence number.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants