Re: [tcpinc] TCP's treatment of data in SYN packets

Joe Touch <touch@isi.edu> Sun, 31 July 2016 03:02 UTC

Return-Path: <touch@isi.edu>
X-Original-To: tcpinc@ietfa.amsl.com
Delivered-To: tcpinc@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 38579127071 for <tcpinc@ietfa.amsl.com>; Sat, 30 Jul 2016 20:02:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.187
X-Spam-Level:
X-Spam-Status: No, score=-8.187 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-1.287] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4fQezCct63hu for <tcpinc@ietfa.amsl.com>; Sat, 30 Jul 2016 20:02:57 -0700 (PDT)
Received: from vapor.isi.edu (vapor.isi.edu [128.9.64.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 13A1C12D177 for <tcpinc@ietf.org>; Sat, 30 Jul 2016 20:02:57 -0700 (PDT)
Received: from [192.168.1.189] (cpe-172-250-251-17.socal.res.rr.com [172.250.251.17]) (authenticated bits=0) by vapor.isi.edu (8.13.8/8.13.8) with ESMTP id u6V326Ij024268 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Sat, 30 Jul 2016 20:02:17 -0700 (PDT)
To: David Mazieres expires 2016-10-28 PDT <mazieres-j4dcjhhagft96r5khghrdhdeus@temporary-address.scs.stanford.edu>
References: <CAJU8_nU1WzQNFFUn_2o1cACutB01iyQ_hC29PHoutr8TRDKGnA@mail.gmail.com> <579A4669.7030600@isi.edu> <87lh0lselg.fsf@ta.scs.stanford.edu> <CAJU8_nUPrm9JJMrrMbL5+FpP-9CKC6EkidCry9UuZA5ZfyJtoA@mail.gmail.com> <579A8223.8050308@isi.edu> <CAJU8_nXSxr7ykC1TwptBmyP8pNccz52ozq=hF7-EYiaMdDeLBQ@mail.gmail.com> <579BA470.3000405@isi.edu> <CAJU8_nXjhHH1eEXPA3hvhJ3YXsP_v2djGX=X2p9+wyn767Hm5A@mail.gmail.com> <adcaa33a-3bf5-e63a-bd19-fd165b16aa7d@wizmail.org> <87oa5fniu0.fsf@ta.scs.stanford.edu> <6E733C6E-DCEE-43A9-B320-E1266E7CE827@isi.edu> <87lh0ioggw.fsf@ta.scs.stanford.edu>
From: Joe Touch <touch@isi.edu>
Message-ID: <579D6A2B.9060209@isi.edu>
Date: Sat, 30 Jul 2016 20:02:03 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2
MIME-Version: 1.0
In-Reply-To: <87lh0ioggw.fsf@ta.scs.stanford.edu>
Content-Type: text/plain; charset="windows-1252"
Content-Transfer-Encoding: 7bit
X-ISI-4-43-8-MailScanner: Found to be clean
X-MailScanner-From: touch@isi.edu
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpinc/OXi1v3Ig5NJP2bHB2V_AglkOjtU>
Cc: tcpinc@ietf.org, Jeremy Harris <jgh@wizmail.org>
Subject: Re: [tcpinc] TCP's treatment of data in SYN packets
X-BeenThere: tcpinc@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "Discussion list for adding encryption to TCP." <tcpinc.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tcpinc>, <mailto:tcpinc-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tcpinc/>
List-Post: <mailto:tcpinc@ietf.org>
List-Help: <mailto:tcpinc-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpinc>, <mailto:tcpinc-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 31 Jul 2016 03:02:59 -0000


On 7/30/2016 4:26 PM, David Mazieres expires 2016-10-28 PDT wrote:
> Joe Touch <touch@isi.edu> writes:
>
>>> On Jul 30, 2016, at 10:20 AM, David Mazieres <dm-list-tcpcrypt@scs.stanford.edu> wrote:
>>>
>>> And mandating no
>>> buffering of discarded SYN data is a good way to do that...
>> You can do that for ENO, but you cannot assert requirements for legacy
>> stacks.
>>
>> The problem is that you keep saying you "know" when the other end
>> supports ENO based on previous state, but if that were really true you
>> wouldn't need to negotiate ENO in the 3WHS.
> No, I'm saying *if* the application knows the other end of a connection
> supports ENO,
It doesn't until the SYN-ACK.

Let me put it this way - if you know the other end supports ENO, then
you clearly don't need to negotiate it in the SYN. Is that what you do?

>  and in particular *if* the application intends to abort an
> unencrypted connection anyway, 
TCP needs to be the one making that decision, because an "app" that
doesn't make that decision could be experiencing TCP semantics that are
incorrect.

> *then* it probably makes sense for the
> application to send data in a SYN segment.
An app doesn't make that decision - it can do things to prevent it from
happening (i.e., waiting for the connection to be open before writing
data), but it can't force this behavior. It's not in the user interface
defined in RFC793, so you can't assume it (unless you're creating this
definition solely for ENO, which seems far out of scope to me).

> You are right that if we could have an internet flag day, we wouldn't
> need TCP-ENO at all.  But getting from the status quo to our goal of
> ~100% encrypted TCP traffic requires multiple stages--first
> opportunistic encryption, then shimming in some sort of endpoint
> authentication, finally having applications or middleware drop
> unauthenticated connections. 

That's one possible future. Another is one where TCPINC dies off and is
replaced by something else, either at the TCP layer or IP.

>  If TCPINC succeeds, people may, for
> example, configure NFS servers not to talk to workstations over
> unencrypted TCP.  By that point it makes to discuss TEPs supporting SYN
> data, but not now.  Now the question before the working group is how ENO
> should avoid preempting/complicating those future discussions.
It also needs to avoid adverse interactions with not using ENO at all.

> So far I haven't heard any objections to anything before the last
> paragraph of section 4.7, which means the discussion needs to focus on
> that last paragraph, namely:
First, just because I say the food is salty, doesn't mean it's great if
you fix the salt level. But yes, this part needs fixing.

>    Using data in SYN segments deviates from TCP semantics and can cause
>    problems with middleboxes or non-compliant TCP hosts.  Hence, all
>    TEPs SHOULD support a normal mode of operation that does not make use
>    of data in SYN segments.  Moreover, implementations SHOULD employ SYN
>    data only if explicitly requested by the application or in cases
>    where such use is highly unlikely to pose problems.
>
> I think you've objected to the word "using" as too vague, and maybe
Yes..

> would prefer "standard TCP semantics" to make clear we aren't talking
> about TFO.  
Yes.

Then there's the part about middleboxes (it's useless to make "laws for
the lawless", i.e., if your goal is to modify TCP in ways that are
compliant with all middleboxes, you can stop now).

Then there's the part about non-compliant hosts - actually, "using" data
in the SYN violates the semantics of TCP for *compliant* hosts.

> You did not answer my question about whether the word
> "consuming" is better than "using". 
It's needlessly anthropomorphic.

The answer is simple - if the receiver (ENO or otherwise) uses the
information in the SYN data (i.e., it changes its behavior in any way
based on that content), then it MUST happen after TFO only (at this
point) or a true equivalent. There is *no* aspect of ENO that currently
supports that level of equivalence - i.e., *validated* by a SYN cookie.
You don't get to make that assumption based on any "belief" of the other
end's state

>  You also did not answer my question
> about whether you would support a sentence saying active openers SHOULD
> abort non-ENO connections if they have sent SYN data (though at this
> point I think such a sentence would be good). 
MUST, and it MUST occur inside TCP. You can't assume that happens at the
application (user) layer.

Note that I already said this when I gave you two choices:
a) never send anything you can't retract in the SYN-ACK
or
b) always abort - inside TCP - a connection where you would have needed
to do that retraction

> Your arguments seem
> primarily directed at some hypothetical future straw-man TEP sending
> encrypted SYN data to non-ENO aware hosts, but no existing TEP proposal
> does that and more importantly that is not the question at hand.
You seem to be operating under the mistaken belief that sending data to
the same IP address twice always reaches the same TCP context. I.e.,
when you send TCP-encrypted SYN data to a host, you have NO WAY OF
KNOWING whether that host is ENO-capable until AFTER the SYN-ACK.

Otherwise, if you did COULD already know that, you clearly wouldn't need
the ENO flag at all. Since you need that flag, then you need to consider
the case where it is wrong.

> So on the topic of TCP-ENO, do you have specific suggestions for
> improving the last paragraph of section 4.7 of the draft?
>
>

See above. Note that this does not imply that I consider the entire
draft otherwise correct.

Joe