Hi Kyle,

In my talk at TRON, I was also concerned by potential attacks from allowing 
unlimited replay of 0-RTT data. I recommended that TLS 1.3 servers should
implement replay protection using a cache, but requiring clients to provide
a timestamp in the client random is a great idea. Perhaps this would also
allow TLS 1.3 servers to detect clients whose clocks are too out-of-sync with
the server (and hence vulnerable to expired certificates)?

Best,
Karthik

> On 12 Mar 2016, at 13:56, Eric Rescorla <e...@rtfm.com> wrote:
> 
> Hi Kyle,
> 
> Clever attack. I don't think it would be unreasonable to put a low 
> granularity time stamp in the
> ClientHello (and as you observe, if we just define it it can be done backward 
> compatibly)
> or as you suggest, in an encrypted block. With that said, though couldn't you
> also just include the information in the HTTP header for HTTP? Do you think 
> this is a sufficiently
> general issue that it merits a change to TLS.
> 
> -Ekr
> 
> 
> On Fri, Mar 11, 2016 at 9:21 PM, Kyle Nekritz <knekr...@fb.com 
> <mailto:knekr...@fb.com>> wrote:
> Similar to the earlier discussion on 0.5-RTT data, I’m concerned with the 
> long term ability to replay captured 0-RTT early data, and the attack vectors 
> that it opens up. For example, take a GET request for an image to a CDN. This 
> is a request that seems completely idempotent, and that applications will 
> surely want to send as 0-RTT data. However, this request can result in a few 
> things happening:
>     1) Resource unavailable
>     2) Resource cached locally at edge cluster
>     3) Cache miss, resource must be fetched from origin data center
> #1 can easily be differentiated by the length of the 0.5-RTT response data, 
> allowing an attacker to determine when a resource has been deleted/modified. 
> #2 and #3 can also be easily differentiated by the timing of the response. 
> This opens up the following attack: if an attacker knows a client has 
> requested a resource X_i in the attacker-known set {X_1, X_2, ..., X_n}, an 
> attacker can do the following:
>     1) wait for the CDN cache to be evicted
>     2) request {X_1, X_2, …, X_(n/2)} to warm the cache
>     3) replay the captured client early data (the request for X_i)
>     4) determine, based on the timing of the response, whether it resulted in 
> a cache hit or miss
>     5) repeat with set {X_1, X_2, …, X_(n/2)} or {X_(n/2 + 1), X_(n/2 + 2), 
> …, X_n} depending on the result
> This particular binary search example is a little contrived and requires that 
> no-one else is requesting any resource in the set, however I think it is 
> representative of a significant new attack vector that allowing long-term 
> replay of captured early data will open up, even if 0-RTT is only used for 
> seemingly simple requests without TLS client authentication. This is a much 
> different threat than very short-term replay, which is already somewhat 
> possible on any TLS protocol if clients retry failed requests.
> 
> Given this, I think it is worth attempting to limit the time frame that 
> captured early data is useful to an attacker. This obviously doesn’t prevent 
> replay, but it can mitigate a lot of attacks that long-term replay would open 
> up. This can be done by including a client time stamp along with early data, 
> so that servers can choose to either ignore the early data, or to delay the 
> 0.5-RTT response to 1.5-RTT if the time stamp is far off. This cuts down the 
> time from days (until the server config/session ticket key is rotated) to 
> minutes or seconds.
> 
> Including the client time also makes a client random strike register possible 
> without requiring an unreasonably large amount of server-side state.
> 
> I am aware that client time had previously been removed from the client 
> random, primarily due to fingerprinting concerns, however these concerns can 
> be mitigated by
> 1) clients can choose to not include their time (or to include a random 
> time), with only the risk of their .5-RTT data being delayed
> 2) placing the time stamp in an encrypted extension, so that it is not 
> visible to eavesdroppers
> 
> 
> Note: it’s also useful for the server to know which edge cluster the early 
> data was intended for, however this is already possible in the current draft. 
> In ECDHE 0-RTT server configs can be segmented by cluster, and with tickets, 
> the server can store cluster information in the opaque ticket.
> 
> 
> _______________________________________________
> TLS mailing list
> TLS@ietf.org <mailto:TLS@ietf.org>
> https://www.ietf.org/mailman/listinfo/tls 
> <https://www.ietf.org/mailman/listinfo/tls>
> 
> 
> _______________________________________________
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to