Re: [tcpm] Fwd: New Version Notification for draft-gont-tcpm-rfc1948bis-00

Joe Touch <touch@isi.edu> Mon, 10 January 2011 21:09 UTC

Return-Path: <touch@isi.edu>
X-Original-To: tcpm@core3.amsl.com
Delivered-To: tcpm@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id F0F203A67B2 for <tcpm@core3.amsl.com>; Mon, 10 Jan 2011 13:09:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -102.502
X-Spam-Level:
X-Spam-Status: No, score=-102.502 tagged_above=-999 required=5 tests=[AWL=0.097, BAYES_00=-2.599, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id E9mTn234MoWK for <tcpm@core3.amsl.com>; Mon, 10 Jan 2011 13:09:34 -0800 (PST)
Received: from boreas.isi.edu (boreas.isi.edu [128.9.160.161]) by core3.amsl.com (Postfix) with ESMTP id CAAFB3A67A8 for <tcpm@ietf.org>; Mon, 10 Jan 2011 13:09:34 -0800 (PST)
Received: from [128.9.160.166] (abc.isi.edu [128.9.160.166]) (authenticated bits=0) by boreas.isi.edu (8.13.8/8.13.8) with ESMTP id p0ALBJio008018 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); Mon, 10 Jan 2011 13:11:19 -0800 (PST)
Message-ID: <4D2B75F7.60802@isi.edu>
Date: Mon, 10 Jan 2011 13:11:19 -0800
From: Joe Touch <touch@isi.edu>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
MIME-Version: 1.0
To: Fernando Gont <fernando@gont.com.ar>
References: <4D27A097.3040606@gont.com.ar> <4D2B5958.3090304@isi.edu> <4D2B602E.1060408@gont.com.ar> <4D2B62CF.7040307@isi.edu> <4D2B67E0.5020007@gont.com.ar>
In-Reply-To: <4D2B67E0.5020007@gont.com.ar>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Cc: "tcpm@ietf.org" <tcpm@ietf.org>
Subject: Re: [tcpm] Fwd: New Version Notification for draft-gont-tcpm-rfc1948bis-00
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/tcpm>
List-Post: <mailto:tcpm@ietf.org>
List-Help: <mailto:tcpm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 10 Jan 2011 21:09:36 -0000

On 1/10/2011 12:11 PM, Fernando Gont wrote:
> Hi, Joe,
>
>>> Yes, I'll be backing out SHA-256 and will go back to recommending MD5.
>>> -- As already noted on this list, this change was political rather than
>>> technical.
>>>
>>> So I assume that this would address your concern and you'd be game for
>>> std track, right?
>>
>> The specification of the PRF needs to be more detailed. I.e., state how
>> the hash is padded, byte order, and what portion of the output you're
>> using (since MD5 hashes are too long).
>
> How come that you don't deem this one as an implementation detail that
> should not concern us?

The question is really "what is this document requiring".

Is your intent to say "use MD5", and figure the rest our yourself?

If so, why bother using the "+" operator, or putting the time value 
outside the hash?

Either such details matter or they don't; if they don't, you need to 
explain why they don't. You don't *need* to spec it out to the bit level 
if that doesn't matter, but you do need to explain why you spec out some 
parts and not others.

>>>>       - this is a new algorithm, which, IMO, is experimental at best
>>>>       the alg proposed in Sec 2 is predictable for a given socket
>>>>       pair; that seems inconsistent with the security concerns that
>>>>       drive this doc
>>>
>>> Joe, this document is about mitigating blind attacks. If you know the
>>> socket pair, you can predict the ISN, unless you were able to see the
>>> ISN of a previous connection for that socket pair -- which is a
>>> completely different threat-model, that this document does not (and
>>> doesn't aim to) address.
>>
>> If knowing the socket pair means you can predict the ISN, then this doc
>> shouldn't be discussing the need for a random component or the time value.
>
> Sorry, let me rephrase: With the proposed algorithm, you can only
> predict an ISN if you know the socket pair *and* you know the ISN of a
> previous connection between the source host and the destination
> endpoint. -- But this is *intentional*.
 >
> -- We do want the ISNs to be monotonically increasing across connections

The alg you gave is monotonically increasing across connections within a 
socket pair. Presumably that's what you mean, right?

> -- hence the predictability to an *on* *path* attacker.
>
>
>>>> 2) the impact of this doc on TIME_WAIT isn't sufficiently addressed
>>>>
>>>>       most machines simply don't keep TW around as long as they
>>>>       are required; they also sometimes use a single pseudo-random
>>>>       generator across all connections; this needs to be considered
>>>>       in more detail
>>>
>>> So now you care about running code? -- It's surprising that you're
>>> raising this, instead of declaring them as bugs and be done with it.
>>
>> I'm concerned about the performance impact of declaring this a SHOULD.
>
> It's a SHOULD not a MUST. So, if anything "what are the reasons for not
> implementing this? -- Performance"?

1) per-connection computational overhead

2) the need to retain per-socketpair state for TW (vs., e.g., some 
*known* implementations that do otherwise to reduce the state needed to 
avoid TW reuse).

>>> Anyway, this document is not about the TIME-WAIT state. And proper
>>> references are included where appropriate (e.g., the reference to the
>>> CPNI TCP security document)
>>
>> If the result of this SHOULD impacts TW performance, then yes, it is
>> about TW state.
>
> Can you clearly state what your concern is? -- I just don't follow.
>
> And... What does RFC 1948 have to do with TIME-WAIT performance?

If you generate ISNs that are monotonic within a socket pair, but are 
otherwise arbitrary across different socket pairs, you NEED to keep the 
TWs per socket pair. If you want to keep less TW state, you can use a 
different mechanism.

>>>> 3) the doc should discuss how it can be implemented on a machine that
>>>> doesn't know absolute time
>>>>       even TCP's timestamps don't need to be absolute, but if a
>>>>       machine always boots the same way with the same info, it
>>>>       will reuse sequence numbers unless it has a persistent clock,
>>>>       coordinates time with another party, or has persistent state;
>>>>       none of these are necessarily true, e.g., for small devices
>>>
>>> C'mon, Joe: initialize that timer to a random value, and be done with it.
>>
>> Stand-alone boxes don't necessarily understand 'random' - if they reboot
>> and execute the same code in the same order, their 'random' is
>> deterministic. You need to address that. This relates to the other
>> concerns about some TCP mods that require state in home routers - it's a
>> valid concern. You're declaring a SHOULD; you need to explain what you
>> assume is available.
>
> Ok, my proposed text would be:
> "This specification assumes the host supports a random() function that
> provides random numbers as in, e.g. ISO C random() function."
>
> If you have anything better, please post it.

The point is that some boxes that use that function will generate the 
same value upon reboot. The fact that neither you nor I have a solution 
to this is the point - your requirement is making an assumption which is 
not true.

> That aside: What would be your concern about the node re-using the same
> ISNs? (even assuming connections are established at the same time since
> the node was bootstrapped... because you're assuming this, right?) --
> Would an off-path attacker be able to predict them? And, if not, why are
> you still concerned about it?

You need to address what your algorithm requires and what it does not. 
If you can demonstrate that there's no ill effect, then you can explain 
that, e.g., you DON'T really need the random call.

Joe