TCP Fast Open? Not so fast
blog.apnic.net
blog.apnic.net
I did not know that was a thing!
https://serverfault.com/questions/698251/how-does-the-dns-pr...
Back in the day a very popular registrar that included DNS service would have random issues with the size of DNS response when it switched over to TCP, returning servfail instead of answer.
I'm guessing it was a load balanced cluster and some of the servers were broken. We reported the issue a few times but never heard back, as expected.
But RFC7413 which describes TFO (https://datatracker.ietf.org/doc/html/rfc7413) still has an experimental status. This thing is not expected to be widely supported or work as production-quality feature, yet:
> Status of This Memo
> This document is not an Internet Standards Track specification; it is published for examination, experimental implementation, and evaluation.
I would be curious if anyone knows if a scheme like Zcash was considered. No, not another shitcoin, it's from 1983 and uses RSA blind signatures:
> Blind signatures can also be used to provide unlinkability, which prevents the signer from linking the blinded message it signs to a later un-blinded version that it may be called upon to verify. In this case, the signer's response is first "un-blinded" prior to verification in such a way that the signature remains valid for the un-blinded message.
I guess the issue would be too large signature sizes are needed for RSA, and that the verification operation is asymmetrically slower than what a client has to do, leading to a denial of service attack? Maybe the server could have (configurably) a per-IP limit of, for example, 4 opens per 20 seconds (bursty) and a global limit of 10% of CPU time as measured over 10 seconds. Above those limits, clients just have to do a 3WHS as usual or re-use connections if the protocol allows (http does).
I'm probably overthinking this but without blind signatures, it seems like no browser would enable it for privacy reasons. Technically it's illegal to use this for tracking without a reason (such as user consent or fraud protection or so), but that won't stop everyone from doing it.
All of those are fairly irrelevant because they don't give more information than first party cookies, first party cache presence or cache content...
I suspect the privacy advocates aren't looking deep enough in the stack...
https://github.com/paraboul/libapenetwork/blob/6e5acac08467b...
Looking a bit more at the network stack perhaps the SYN+ACK is sent straight from the SYN handler with no chance for userspace to pack any data in.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
Edit: Ah, you are right about TCP_DEFER_ACCEPT putting data in the ACK on the client side, I'd forgotten about that. https://lore.kernel.org/netdev/CAK3+h2ydKQ15U1_2dqWsHAL_LKYm...
https://datatracker.ietf.org/doc/html/rfc7413#section-2.1
There are some extra tcp_fastopen sysctl values that do enable it transparently.