>   A->B: SYN      "Hey, I support tcpcrypt and TLS"
>   B->A: SYN      "Hey, I support tcpcrypt"
>   A->B: ACK(+)   "Great, let's use tcpcrypt with cipher suite X or Y"
>   B->A: ACK(+)   "Great, let's use tcpcrypt with cipher suite Z"
>   A->B: ACK(*)   DH parameter, etc.

One way to resolve this for TLS is to just make TLS one of the cipher suites:

A->B: SYN "Hey, I support (TLS, tcpcryptX, tcpcryptY)"
B->A: SYN "Hey, I support (TLS)"
A->B: ACK "Great, let's use TLS"
B->A: ACK "Great, let's use TLS"

And then switch to straight-up TLS, whether in userspace or in the
kernel. In userspace this is a little tricky in that a software or
administrative change to the cipher suite preference list should be
made when TCP-ENO is activated by default in the kernel: as long as
one of the two endpoints is properly configured, tcpcrypt-unaware
endpoints will do the right thing, but if both endpoints are
improperly configured you'll get two key exchanges and connections
will be doubly-encrypted. (An HTTPS server implementor might just
choose to turn off TCP-ENO for port 443, which would have the desired
effect.)

For passive/active, the same basic logic applies:

A->B: SYN "Hey, I support (TLS, tcpcryptX, tcpcryptY)"
B->A: SYN-ACK "Great, let's use TLS"
B->A: ACK "Ok, let's use TLS"

Kyle

_______________________________________________
Tcpinc mailing list
Tcpinc@ietf.org
https://www.ietf.org/mailman/listinfo/tcpinc

Reply via email to