- From: Ilari Liusvaara <ilariliusvaara@welho.com>
- Date: Thu, 11 May 2017 20:15:42 +0300
- To: Willy Tarreau <w@1wt.eu>
- Cc: Mark Nottingham <mnot@mnot.net>, Erik Nygren <erik@nygren.org>, "ietf-http-wg@w3.org Group" <ietf-http-wg@w3.org>, "Ponec, Miroslav" <mponec@akamai.com>, "Kaduk, Ben" <bkaduk@akamai.com>
On Thu, May 11, 2017 at 07:33:15AM +0200, Willy Tarreau wrote:
> Hi Mark,
>
> On Thu, May 11, 2017 at 10:23:12AM +1000, Mark Nottingham wrote:
> > If an origin doesn't have robust retry/replay protection in place for
> > non-idempotent requests, it seems operationally simpler and safer for them to
> > disable 0RT, rather than refusing it on a request-by-request basis. That's
> > the discussion I think we should have here...
>
> That's exactly the situation I'm facing for now with haproxy. A few
> users have asked us to support 0RTT and by lack of way to 1) decide
> which requests are really safe, and 2) tell the client it must replay
> them using 1RTT, for now I refused to enable it. The load balancer
> and the origin server will have a different view of the acceptability
> of 0RTT, and all the chain must be able to accept or reject them, and
> let the client retry.
>
> I tend to think that a 4xx status code would make sense and would be
> useful to pass the verdict back to the client. For example we could
> return "418 not idempotent".
Reading the cryptographer's concerns regarding 0-RTT, the main ones
seem to be:
- Possible lack of strong anti-replay. Possibly leading to >10^6 (!!!)
replays.
* This is enough to exploit pretty subtle side-channel attacks. And
these attacks are at least extremely difficult to defend against.
* This causes severe problems for high-performance rate-limiting
systems.
- Even one replay messing up "try, wait, readback, retry" clients.
* These clients try to write an entry, if it fails, wait, try to
read the entry, and if not there, retry.
- Unordered replay: The server gets the 0-RTT request client deemed
"failed" after the client's retry.
* The retry is likely 1-RTT!
- Replaying requests to different cache nodes in order to leak
information about what was requested
* Prime cache using replayed requests.
* Probe cache using known requests.
-Ilari
Received on Thursday, 11 May 2017 17:16:18 UTC