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

Revise text on ACK frames prior to handshake completion #719

Merged
merged 3 commits into from
Aug 14, 2017
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions draft-ietf-quic-tls.md
Original file line number Diff line number Diff line change
Expand Up @@ -1263,18 +1263,18 @@ able to inject these packets. Timing and packet retransmission information from
might be spoofed or altered.

Endpoints MUST NOT use an `ACK` frame in an unprotected packet to acknowledge
packets that were protected by 0-RTT or 1-RTT keys. An endpoint MUST ignore an
`ACK` frame in an unprotected packet if it claims to acknowledge data that was
sent in a protected packet. Such an acknowledgement can only serve as a denial
of service, since an endpoint that can read protected data is always able to
send protected data.
packets that were protected by 0-RTT or 1-RTT keys. An endpoint MUST treat
receipt of an `ACK` frame in an unprotected packet that claims to acknowledge
protected packets as a connection error of type OPTIMISTIC_ACK. An endpoint
that can read protected data is always able to send protected data.

Note:

: 0-RTT data can be acknowledged by the server as it receives it, but any
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure how this note is helpful. The server has to send all acks either unprotected or in 1RTT packets, correct? If so, it seems simpler to say "0-RTT data can be acknowledged by the server as it is received, but it must be send with 1-RTT protection."?

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 point here is to highlight a problem with this requirement, not to restate the requirement to protect ACK frames. The problem is that the server handshake might not be complete from the perspective of the client. That leads to the client not having 1-RTT keys. Which then leads to the client being unable to read those ACK frames.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, makes sense. How about "will not" instead of "cannot" and possibly a mention of why, such as the server sending acks with 1RTT keys and the client not having them? I thought you were telling the client what it must do, not describing the issue.

Copy link
Member Author

Choose a reason for hiding this comment

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

"will not" implies lack of will, whereas cannot is correct - it's impossible (or a cryptographically-enforced equivalent thereof). I will explain why though.

packets containing acknowledgments of 0-RTT data cannot have packet protection
removed by the client until the entire server handshake is received by the
client.
removed by the client until the TLS handshake is complete. The 1-RTT keys
necessary to remove packet protection cannot be derived until the client
receives all server handshake messages.

An endpoint SHOULD use data from `ACK` frames carried in unprotected packets or
packets protected with 0-RTT keys only during the initial handshake. All `ACK`
Expand Down