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

Source address token #120

Merged
merged 3 commits into from
Feb 7, 2017
Merged

Source address token #120

merged 3 commits into from
Feb 7, 2017

Conversation

martinthomson
Copy link
Member

@martinthomson martinthomson commented Jan 4, 2017

This redefines the techniques that a server employs for verifying that a client owns its address in terms of TLS constructs.

One thing that doesn't survive this translation is the ability for a server to propose a new connection ID. I've opened #119 to track that. I removed some other TODOs, for which I've opened #118 and #117 as well.

I'm on the top of a large stack of changes now, and approaching saturation. Read #122 before proceeding with this one.

Update: I think that I understand SCUP now, in which case this closes #117.

@martinthomson martinthomson added design An issue that affects the design of the protocol; resolution requires consensus. -transport labels Jan 4, 2017
@martinthomson martinthomson force-pushed the source_address_token branch 2 times, most recently from 7eb297c to eff8841 Compare January 11, 2017 00:15
@martinthomson
Copy link
Member Author

I just split this from the transport parameters PR. It has similar issues though with respect to maintaining the crypto handshake as an abstraction.

If we agree that the crypto handshake is responsible for providing this functionality, I could move the text to the TLS draft in its entirety. But I'm not sure if that makes sense. I would rather keep it in the transport doc, but that would either be quite a lot of work to maintain the abstraction. As I've said before, I don't believe that the abstraction has any value, so I'm probably just showing my prejudices (c.f., YAGNI).

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned on the mailing list, I'm in favor of a non TLS-specific resolution here. This text moves it out of transport and moves it into TLS. The text already describes how an STK is to be used, and it's largely a server-specific thing. I don't see a reason to change this, since it's also what TFO does.

Copy link
Contributor

@ianswett ianswett left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the clarifications in how this will work, and I think it'd be relatively straightforward to make the transport draft not depend on TLS in this case.

To send additional data prior to completing the cryptographic handshake, the
server then needs to validate that the client owns the address that it claims.

Two tools are provided by TLS to enable validation of client source addresses:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would read well to move these paragraphs to the TLS doc and title the section "Source Address Tokens using the cookie extension", and then cite the source address token section in the transport doc, once it's moved.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't the ticket should be used for proof of source address, since by itself it's not sufficient proof and we already have the cookie extension for that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ticket would only be used for 0-RTT. You don't get to use the cookie extension for the first ClientHello. That's a TLS limitation, we don't have a mechanism for providing a cookie for use in a future connection. Nor do we need one because that is something that the session ticket can be used for.

@@ -1133,27 +1133,6 @@ sets available to a server one-round trip earlier than parameters that are
carried in QUIC packets. This document does not define that extension.


## Source Address Validation {#source-address}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With some massaging, I think this text should be moved to the bottom of the Proof of Source Address Ownership section in the transport doc.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I admit that I don't understand what @janaiyengar has in mind, but if you wanted to use these mechanisms, you could. If you ALSO wanted to keep the logical split, then you say "the crypto handshake is responsible for performing source address validation" and then we shuffle things around.

I didn't recognize that option when I originally put this together. See the mailing list thread for more.

@janaiyengar janaiyengar added the needs-discussion An issue that needs more discussion before we can resolve it. label Jan 14, 2017
@ekline
Copy link

ekline commented Jan 16, 2017

Can this work in such a way that a QUIC connection (same connID) should survive, for example, a client rotating IPv6 temporary addresses multiple times mid-connection?

@martinthomson
Copy link
Member Author

Maybe. Whether the server insists on verifying an address will depend on the server. Since the primary concern seems to be packet reflection, the server might be OK with clamping its send rate after seeing a change in the remote address.

What this does NOT provide is the ability for the server to insist on the client proving that it has seen packets at the new address. That's a problem because QUIC doesn't include any innate proof of possession mechanism. A client can pretend to have seen packets by generating an ACK, but it can't prove to have received them.

I've opened #161 to track this.

@vasilvv
Copy link
Contributor

vasilvv commented Jan 24, 2017

I've mentioned this on the mailing list, but I think I should mention it here too, so it does not get lost. We should really understand how source address validation interacts with stateless rejects if we intend to support them.

@ekr
Copy link
Collaborator

ekr commented Jan 24, 2017

I think the high order question is that we have to decided if this is something that belongs in transport or in the security document. I would have thought the latter, but...

@mnot mnot removed design An issue that affects the design of the protocol; resolution requires consensus. needs-discussion An issue that needs more discussion before we can resolve it. labels Jan 26, 2017
@martinthomson martinthomson merged commit 72cac4e into master Feb 7, 2017
@martinthomson martinthomson deleted the source_address_token branch February 7, 2017 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

SCUP
7 participants