Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno-01
Watson Ladd <watsonbladd@gmail.com> Sun, 23 August 2015 05:35 UTC
Return-Path: <watsonbladd@gmail.com>
X-Original-To: tcpinc@ietfa.amsl.com
Delivered-To: tcpinc@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E31651AC3CC for <tcpinc@ietfa.amsl.com>; Sat, 22 Aug 2015 22:35:23 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 3.6
X-Spam-Level: ***
X-Spam-Status: No, score=3.6 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, J_CHICKENPOX_16=0.6, MANGLED_BACK=2.3, SPF_PASS=-0.001] autolearn=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 DfJZRwN5AMbH for <tcpinc@ietfa.amsl.com>; Sat, 22 Aug 2015 22:35:22 -0700 (PDT)
Received: from mail-wi0-x234.google.com (mail-wi0-x234.google.com [IPv6:2a00:1450:400c:c05::234]) (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 02A411AC3CB for <tcpinc@ietf.org>; Sat, 22 Aug 2015 22:35:22 -0700 (PDT)
Received: by wijp15 with SMTP id p15so49501382wij.0 for <tcpinc@ietf.org>; Sat, 22 Aug 2015 22:35:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=Chb+Y9uq+w2YCrB8PnoFM+2tFuPiBtjjLXk0VRzJ8wE=; b=vf3yRNnckn29xUEuu+mWvA009HEA/zCfMaMOyfu+1jM8DbhNRghKbAoq/gCQKA+oIt uu3lFtw9lTa/gJSaTHgpE5LDIv4EUuQ5MUzDnAxticauzg0aVyLNrYOGaCFwdUYJsGUv 0L+ZbJzHmChjmge4qqgfftq4nF6p/Xn/hXiI5pjbK41HfdFoxJF6v78gON9KVq7b5M9d GLqyf05J1TGY3+0dsR4iPRdc3gD8cyXnQke13kzXsHWoKvvzCAMrr4cb272dW7Ry5Gl8 rOSJeeZuX+kjUHtZbx3kL6iAkR0K2mjeIOP7itMvBXwHMiTHHcdhssNvSGG0kZymeQsh UdLw==
MIME-Version: 1.0
X-Received: by 10.180.90.145 with SMTP id bw17mr19337545wib.30.1440308120644; Sat, 22 Aug 2015 22:35:20 -0700 (PDT)
Received: by 10.28.132.11 with HTTP; Sat, 22 Aug 2015 22:35:20 -0700 (PDT)
In-Reply-To: <878u92oadf.fsf@ta.scs.stanford.edu>
References: <CABcZeBNEFVkDi38y3G-C2nQF=dzW2mGDsj5DVK_OKVkPwK=G0g@mail.gmail.com> <878u92oadf.fsf@ta.scs.stanford.edu>
Date: Sat, 22 Aug 2015 22:35:20 -0700
Message-ID: <CACsn0ckQskjLqo0=YfJrmBEsyCaq0jpcSzGUwKhRo0BzzQ=wDA@mail.gmail.com>
From: Watson Ladd <watsonbladd@gmail.com>
To: David Mazieres <dm-list-tcpcrypt@scs.stanford.edu>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <http://mailarchive.ietf.org/arch/msg/tcpinc/8wUNLfmAUx1PjBIR72uzUn159jw>
Cc: Eric Rescorla <ekr@rtfm.com>, tcpinc <tcpinc@ietf.org>
Subject: Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno-01
X-BeenThere: tcpinc@ietf.org
X-Mailman-Version: 2.1.15
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, 23 Aug 2015 05:35:24 -0000
On Sat, Aug 22, 2015 at 10:13 PM, David Mazieres <dm-list-tcpcrypt@scs.stanford.edu> wrote: > Eric Rescorla <ekr@rtfm.com> writes: > >> Review of draft-bittau-tcpinc-tcpeno-01 >> >> I have reviewed the -01 version of the ENO draft. This seems like a good >> general idea, but I have concerns about a number of the details. > > Thanks for going through in detail. I will respond point-by-point. > >> TECHNICAL >> S 3.0. >> The variable/non-variable encoding seems suboptimal and in particular >> the restriction that only one suboption can be variable length. What >> are we going to do if two specifications wish to have variable-length >> data in the SYN packets? The specification suggests that you should >> address this by having two ENO options but that seems clumsy. >> >> I would suggest instead that if the v bit is set the next byte be the >> length. This comes at the cost of one byte for settings where there is >> only one variable-length option but is more efficient when you >> want to have multiple variable-length options, since you don't need >> to repeat the kind byte. > > Our intent is to optimize for a future in which people only need one > variable-length option. For example, the SYN can list a bunch of > options, and then the SYN-ACK can pick one of them. The current design > saves one byte, which may be quite important. For instance, you can > just barely fit a P-256 or Curve25519 DH key exchange in TCP options > currently. If TCPINC is wildly successful, we can imagine a future spec > that does that and squeezes the 8 most popular SYN options into a single > byte or something. But if we waste even one more byte of option space, > we start closing a lot of doors along that front. > > That said, if you can provide an explicit example of why you might want > multiple variable-length suboptions, you could possibly convince us to > optimize for that case. > >> S 3.1. >> I am not convinced that a one-bit tiebreaker for simultaneous open >> is going to work. Experience with other protocols that have the >> problem of symmetry (e.g., ICE) is that this sort of thing results >> from confusion about which side is really "first". In that case, >> both sides will try to set the same "b" bit, and you will not break >> the symmetry. >> >> I believe we must either ignore simultaneous open or use a higher- >> entropy tiebreaker. > > A high-level question is whether we should completely abandon enabling > TCP?INC for simultaneous open. If we allow encryption under some > circumstances after simultaneous open, then the next question is how to > apportion responsibility for making it work. The high-entropy solution > says make it work with high probability, but at the cost of a lot more > option space. Since simultaneous open is kind of finicky anyway, > TCP-ENO took the approach of making applications responsible for working > out the roles. For example, one plausible approach is to set the 'b' > bit to 1 at the endpoint with the lowest (public-IP-address, > public-port-number) pair. That's obviously not information available to > TCP-ENO, which knows nothing of NATS, but is information available to an > application using STUN to broker simultaneous open. Perhaps we should > work out an example of simultaneous open in the API document. Let's imagine the stupidest possible protocol: each party squeezes 32 bytes into each SYN, representing a Curve25519 public key, and we compute H(agreed key || lexographically least || lexographically greater) . This protocol supports simultaneous open. So why can't a more complicated protocol do the same? > > As it is, the b bit is an effort to find the knee in the cost-benefit > curve. I.e., is it worth 4+ bytes of option space to make > simultaneous open work? Hard to make that case. But is it worth one > *bit* not to shut the door completely? Quite possibly. > >> S 3.2. >> I am unclear on why the active opener needs to have an ENO segment >> in his first ACK. Can you explain? > > There are two reasons: > > 1. Given the prevalence of asymmetric routes, it's highly likely that > situations will arise where ENO options are stripped in one > direction but not the other. Therefore, both sides need to know > not only that the other endpoint supports ENO, but that the other > endpoint can receive ENO options. If you remove the requirement > for that ACK, a scenario such as Figure 7 would result in total > failure of the TCP connection, not just failure to encrypt. We > definitely want to avoid that. > > 2. Suboption data could involve parameters that are not universally > supported, in which case the active opener may which to disable > TCPINC based on the contents of the SYN-ACK segment. > >> This mechanism for negotiating mechanisms seems over-complex, what >> with A and B each providing lists and then choosing B's top >> preference. I would suggest instead that we simply have B choose out >> of A's list, as with ALPN. The document offers two reasons why this >> might not work, simultaneous open and inflexible implementations: If >> we resolve simultaneous open in the SYN exchange then this should work >> fine and the issue of implementation seems like a corner case. > > If by resolve simultaneous open you mean not support it, I agree. But > if you mean something else, then things can get tricky. I would > welcome a detailed design that works, but just saying "do something > like ALPN" is not enough detail to determine whether or not that > approach is viable. We'd need to see an "A -> B: ... B -> A: ..."- > style example with TCP flags. How often is simultaneous open used? Are there important applications we won't encrypt if we kill it? > > One big challenge of simultaneous open is that each side must > acknowledge the other side's SYN before seeing the other side's SYN-ACK. > Moreover, other than the SYN, you can't consume TCP sequence numbers > until you have definitively enabled or disabled TCPINC (and in the > former case negotiated an encryption spec). So whereas in a three-way > hand-shake, you can do: > > A -> B: SYN X > B -> A: SYN-ACK X' which depends on X > A -> B: ACK X'' which depends on X and X' and might disable TCPINC > > With simultaneous open, you have two pairs of messages sent in parallel: > > A -> B: SYN X > B -> A: SYN Y > > A -> B: SYN-ACK X' which depends on X and Y, but not X' or Y' > B -> A: SYN-ACK Y' which depends on X and Y, but not X' or Y' > > So in particular B does not have the opportunity to abort TCPINC in > response to X', but must decide it based on X and Y. That's why TCP-ENO > determines the spec based only on the first ENO option sent by each > side. But what do you need the other ones for in that case? If they just contain keying material, you probably want to specialize them to that case. -- "Man is born free, but everywhere he is in chains". --Rousseau.
- [tcpinc] Review of draft-bittau-tcpinc-tcpeno-01 Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Ilari Liusvaara
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Mark Handley
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Yoav Nir
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Kent
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Martin Thomson
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Scharf, Michael (Michael)
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- [tcpinc] Simultaneous open tie breaking Tero Kivinen
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Kent
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Kent
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Simultaneous open tie breaking David Mazieres
- Re: [tcpinc] Simultaneous open tie breaking Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Watson Ladd
- Re: [tcpinc] Simultaneous open tie breaking David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… John Leslie
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Kent
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Mirja Kühlewind
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… ianG
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Mirja Kühlewind
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Stephen Farrell
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Mirja Kühlewind
- Re: [tcpinc] Simultaneous open tie breaking Tero Kivinen
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Mirja Kühlewind
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Simultaneous open tie breaking dm-list-tcpcrypt
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… dm-list-tcpcrypt
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Kyle Rose
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… David Mazieres
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… Eric Rescorla
- Re: [tcpinc] Review of draft-bittau-tcpinc-tcpeno… dm-list-tcpcrypt