Hi Yoav,

Thanks for your review (some months ago).  Now that we've
posted a new draft of tcpcrypt, I wanted to let you know how
we've addressed the points you brought up.

> - Section 3.4 argues that HKDF could not be used directly because "tcpcrypt 
> requires multiple expand steps with different keys???. TLS 1.3 and IKEv2 use 
> HKDF (or something similar) directly. I???m not arguing that what the 
> tcpcrypt draft is doing is wrong. It looks fine, but you could use HKDF 
> directly, generate session keys plus a ???next??? key, and then when rekeying 
> you could generate the next set of keys from the ???next??? key and then 
> discard all previous keys including the ???next??? key.  Again, the current 
> key management seems fine, I???m just not sure the argument is correct

Yes, I agree the argument there was spurious.  I've removed
it in the new draft.

We could indeed use the full (two-stage) HKDF everywhere we
use Expand (`CPRF` in our document).  But then, RFC 5869
explicitly permits the omission of Extract when the input is
already pseudo-random (see Introduction):

  In some applications, the input may already be a good
  pseudorandom key; in these cases, the "extract" stage is
  not necessary, and the "expand" part can be used alone.

So I think that RFC makes it clear what we are doing, and we
get the minor performance gain (and perhaps code-complexity
gain) of avoiding an HMAC operation.

> - Section 3.9 gives the justification for sending keep-alives as "for 
> applications to ensure that the other end of a TCP connection still exists 
> even when there is no data to be sent." That may be true, but another big 
> reason for sending keep-alives is to keep sessions alive in middleboxes, 
> especially NAT boxes and to a lesser degree firewalls. These middleboxes have 
> been known to lose state after as little as 30 seconds ("behave" WG 
> admonitions notwithstanding) and to block or mangle subsequent 
> "out-of-state??? packets.

Good point -- I've added this consideration to the new
"Design notes" section.

> - Security Considerations: "implementations MUST disable tcpcrypt after 
> rebooting until the pseudo-random generator has been reseeded". I think we 
> should add: "or alternatively block the initiation of the TCP connections 
> until such time." Reasoning: while tcpcrypt is vulnerable to active attackers 
> and we can't guarantee security, we can (and should!) guarantee to at least 
> try. Also, in most systems (PCs, phones, servers) the PRNG will be properly 
> seeded eventually, and "eventually" here is a few seconds. Losing a few 
> seconds at boot-up is IMO worth it for saying that we always try to use 
> tcpcrypt. So don't make it a MUST, but leave the option open.

That makes sense.  ENO currently uses this language:

  Implementations MUST NOT send ENO options unless they have
  access to an adequate source of randomness [RFC4086].
  Without secret unpredictable data at both ends of a
  connection, it is impossible for encryption specs to achieve
  confidentiality and forward secrecy.  Because systems
  typically have very little entropy on bootup,
  implementations might need to disable TCP-ENO until after
  system initialization.

That language (Do not send ENO without a random source) is
more precise, and permits implementations to delay instead
of disable.  So I've echoed it in the new tcpcrypt draft.

daniel

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

Reply via email to