Hi Ekr,

I did a quick review of draft-rescorla-tcpinc-tls-option-04, as an individual 
(not as chair).

Thanks for putting all the explanational text in there; at least for me that 
was very helpful. I have a few comments and (potentially stupid) questions:

1) Section 2 say that if there is a decryption failure/finished failure, 
endpoint SHOULD signal a connection failure. Does it mean that endpoint 
SHOULD/MUST also send a TCP RST? And do we really, really need to close the 
connection here, or is there maybe a way to think about falling back to TCP 
only…?

2) The current proposal has the possibility that both endpoints might not 
support the same chipper suite and therefore tcpinc will not be used. Should we 
maybe think about picking a default one (or set of default ones that can be 
ordered by preference) that must be supported. I know that's hard, but for 
tcpinc, as the intention is anyway ‚just‘ opportunistic encryption, that might 
make more sense. Maybe we can specify something while at the same time saying 
that the server should not expect that a specific chiper suite will be 
available such that we still have a change to deprecate this specification 
later…

3) Section 3.1.2.3 says
"Unless the implementation is specifically configured
      otherwise, it SHOULD NOT attempt to validate the certificate, even
      if it is of type X.509 but merely extract the key.“
Isn’t the intention here that TCP could pass the cert to the app and the app 
could validate if it wants…?

4) Figure 4 (in section 3.1.4 which is wrongly labeled Figure 2) indicated that 
the server cannot send data with the ServerHello. That means to actually access 
data form a server, you’ll always have an additional RTT even in 0-RTT mode. Is 
that true?

5) Section 3.2. says „… MUST respond to renegotiation with fatal 
„no_renegotiation“ alert“. What does this mean for the TCP connection? 
That’s also a general comment that the integration with TCP is probably in some 
cases not well enough specified yet. For my point of view that’s where a 
(kernel) implementation would be helpful!

6) I’d recommend to specify the ENO sub option at the beginning of the doc. And 
you further need to specify this more detailed, maybe with an image, and give 
all the specfic bits such as the application-aware bits, variable-length bit, 
and the sub option type.

7) Similar as in point 1 & 5: section 5 says „If [..] TLS integrity fails, the 
connection MUST be torn down". Should the endpoint send a TCP RST here? 
Further, as TLS integrity checking should effectively also be done in the 
kernel and data should not be delivered to the app if the integrity check 
fails, there is the option to simply drop the TCP packet and wait for a 
retransmit. This does have security implications but maybe we can come up with 
some additional logic that e.g. makes sure that if that happens ‚too often‘ we 
will close the connection…

8) Further the draft says in section 6, that there are two options for 
implementation. And I disagree there. tcpinc should always be implemented in 
the kernel and only if there is potentially an app that also implements TLS 
there might be a config option to allow the app to do the TLS handling if 
successfully negotiated in TCP. It is not an option to have a tcpinc 
implementation that relies on the possibility that the app might have TLS 
implemented because then we are end up at a the state where we already are.

9) Reading section 9, we must be careful that we don’t create a new attack here 
where broken data causes the connection to close, e.g. if packet seems to be in 
a valid window but does not pass the the integrity check. Don’t think that’s 
actually a case but maybe worth think about this.


And some nits/comments:
- in Figure 1) the packet from the server is 'SYN/ACK + TCP-ENO [ENO]‘ and 
should be 'SYN/ACK + TCP-ENO [TLS]‘…?
- second point in 3.1.1 says ‚(see Figure 2‘ which probably should be ‚(see 
Figure 3)‘ and Figure 3 is actually called Figure 1…
- Can you maybe try and expend (and refer) all acronyms (ECDSA, TOFO, ECDHE, 
ALPN, HKDF, AEAD, …)
- In 3.1.2.1.2 text says ‚(see {{server-first-flight)‘. As this reference is 
broken (missing closing brackets), the ref also doesn’t show up in the ref list 
at the end…  
- Missing reference in 3.3 (on session resumption; can you also provide more 
reasoning here) and in 3.4.
- Another broken reference in 7: {{RFC5246}
- section 3.1.6 is not really clear: what’s N_MIN, what’s the record seq 
number, is ContentType only one byte?

Hope that’s helpful!

Mirja


_______________________________________________
Tcpinc mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/tcpinc

Reply via email to