tcpcrypt authors (Andrea, Dan, Mike, Mark, David, Quinn),

Thank you for all the work behind draft-bittau-tcpinc-tcpcrypt-00 and its predecessors.

I recently carefully read through
        draft-bittau-tcpinc-01
and just did a diff to check none of my comments were affected by the revision to:
        draft-bittau-tcpinc-tcpcrypt-00.
I have a wide range of comments. I have confined the rest of this email to technical concerns. A subsequent posting will cover purely editorial points.

I haven't been following the list closely, so apologies if I'm covering old ground in some cases. I know item G (Authentication and Resegmentation) touches a hot topic on the list at the mo, so feel free to respond to that one separately.

1) My main technical concern is the expectation that users will accept a round of latency on short connections just to get opportunistic encryption. I fear that instead this will cause deployment to be near-non-existent, rather than ubiquitous. I will suggest a solution to that in a separate posting.

2) My second highest concern is the considerable complexity of the protocol, given it's already asking the security community to divide its attention over more security protocols. The proposal in my other email removes some complexity, but it's still worryingly high. However, I'm not sufficiently knowledgeable (yet) in this area to say whether re-purposing an existing protocol e.g. TLS, would be preferable.

The rest of this email enumerates my other technical concerns, in the order they arise in the doc (not in order of importance).

A./ Danger of Downgrade as a Norm.
(Sec.2. Intro; Last bullet)

If middleboxes make fall-back common, attackers can use this as air-cover for occasional downgrade attacks when they want to snoop on something.

B./ Stateful Server Resume
(Sec.3.8 Session caching)

The session caching model requires the server to hold session state between TCP connections. But operationally it's difficulty for a server to cache session state in load balanced environments. There is no guarantee that a resumed connection will arrive at the same physical server as the previous session.

Wouldn't it be preferable to use an approach like RFC5077 Session Keys, so the server can send a 'cookie' to the client at the end of one session, and the client can return it when resuming a subsequent session?

C./ Reliable delivery of control options.
(Sec.4. Extensions to TCP)

Where it says tcpcrypt uses the Data Portion for INIT1 and INIT2, it needs to explain whether the TCP sequence number and RWND covers this option data or not.

There also seems to be a problem with how control data in a packet that doesn't increment the seq no will be delivered reliably when subject to packet loss. For instance, the INIT1, INIT2 and PKCONF options can be on pure ACK packets. So, if they are lost, the TCP state machine will not retransmit them.

Won't this stall tcpcrypt, unless you make the state machine even more complex by adding some tcpcrypt-specific reliable ordered delivery logic for these options (cf. the REKEY option)?

D./ Ambiguity in state machine?
(Figure 1)

S       := SYN=1, ACK=0, FIN=0, RST=0
S?      := SYN=1, ACK=any, FIN=0, RST=0

Therefore, in the NEXTK-SENT state, if it receives SYN=1, ACK=0, FIN=0, RST=0 / HELLO, the state machine seems to head off in two directions at once:
- drop and transition to HELLO-SENT
- snd ?A/PKCONF and transition to S-MODE

E./ Ossifies the traditional TCP state machine.
(Figure 1)

Altho the chartered focus of the IETF tcpinc WG is TCP, it would still be preferable not to lock opportunistic encryption so tightly to the current state machine of TCP, which will make the TCP state machine harder to evolve in future. Consider that four proposals in progress right now in the TCPM WG alter the TCP state machine - so it seems likely there will be more in future.

F./ Separate out Cookie functions
(Table 4 or Sec.4.3.6)

It seems that the SYNCOOKIE and ACKCOOKIE options have more genral applicability than tcpcrypt. It would be worth considering making these new TCP options and shifting them into a short separate draft. Then make this draft mandatory to implement for all tcpcrypt implementations.

In fact, I have posted draft-briscoe-tcpm-echo-cookie-00 today.

This could be defined to be more general (e.g. on a FIN for caching session state in the client for a later resume), not just to defend against SYN flooding attacks during the 3WHS. (See Stateful Server Resume above.)

G./ Authentication and Resegmentation
(Sec.4.4 The TCP MAC option)

TCP connection splitters such as Performance Enhancing Proxies, Web filters, etc. are fairly common. Certain TCP senders often send sub-full-sized segments (e.g. if each message is app-limited). If these queue up at the ingress to a connection splitter, it will probably transmit full-sized segments onward to the receiver (it would be very hard for its egress interface to preserve the segment boundaries arriving at the ingress).

The result is that some segments coalesce, and then at every full-sized boundary it introduces a split and starts a new segment. Therefore, as well as firewalls that re-randomise the ISN, resegmentation is fairly common.

The MAC covers a specified range of bytes in the payload, but then adds coverage of 'the header'. After resegmentation 'the header' (at least the fields covered by the MAC in it) might accidentally be the same as the original, but they might not. It is actually a newly created header over a different TCP connection, so it might have different TCP options, different TCP flags (e.g. ECN), etc.

tcpcrypt has developed Authenticated Sequence Mode and it goes to some lengths to be robust against rewriting of TCP seq nos by consistently using seq no offsets. It seems a shame to have gone to all that trouble, but then not to be robust against resegmentation.

The more brittle that the tcpcrypt MAC is to middlebox interference, the more often it will be disabled, providing no protection at all. It strikes me that it would be more robust to MAC the byte-stream and the headers separately.

H./ Authentication Coverage
(Sec.4.4 TCP MAC option)

The coverage choices are problematic in the following respects.

i) The reserved flags (bits 4-6 counting from zero of byte 12 of the TCP header) might not be immutable if they are defined in future. It would constrain future evolvability of the header to assume they are immutable, even tho one would /currently/ expect the TCP header to be immutable e2e. For instance, in future, one of these flags might be standardised for a co-operating middlebox to signal that it has altered the TCP header.

ii) Middleboxes alter some TCP options. In particular, firewalls that 'correct' the ISN usually also 'correct' the SACK block.

iii) I'm not sure what the justification for the following behaviour is, or why this particular set of options has been singled out:
"     where the
      TSOPT (8), Skeeter (16), Bubba (17), MD5 (19), TCP-AO (29), and
      MAC (OPT2) options appear, their contents (all but the kind and
      length bytes) are replaced with all zeroes.
"
Whatever the justification, a list like this will not remain static. The spec needs to require future TCP option RFCs to state whether they are in this list or not. That's messy because every time a new TCP option is implemented, the tcpcrypt code (at least a .h file) also has to be altered.

iv) Surely MAC coverage of TCP options needs to take account of where the MAC option sits in the order of option processing. A tcpcrypt MAC cannot cover headers that come after the MAC option in processing order. This also means that the MAC cannot cover the Data Offset (DO) - while processing subsequent TCP options after having computed the MAC, the sender might need to increase DO.

Both the above 'cannot's could be relaxed with a suitable dispensation clause, e.g. the MAC is always calculated after other TCP options, even if it is not placed last. But that would be messy. Alternatively, it has to be specified that MAC MUST be the last TCP option.

However, if I were on the IESG, I would be suspicious of an option that 'MUST be last'. What if someone else's option also 'MUST be last'? (BTW, I'm not sure why a MAC option would be used as well as TCP-AO (or MD5)).


I./ Unnecessary latency in decline of state re-use?
Sec. 5.5. Example 5: Decline of state reuse

Surely, in this example, B doesn't need to send a PKCONF, because it already knows A's pub key preferences. It can surely send an INIT1 immediately?




Bob



________________________________________________________________
Bob Briscoe, BT
_______________________________________________
Tcpinc mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/tcpinc

Reply via email to