Re: [TLS] three ECHO issues

Christopher Wood <caw@heapingbits.net> Sun, 08 March 2020 17:25 UTC

Return-Path: <caw@heapingbits.net>
X-Original-To: tls@ietfa.amsl.com
Delivered-To: tls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0CF893A0DB6 for <tls@ietfa.amsl.com>; Sun, 8 Mar 2020 10:25:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.1
X-Spam-Level:
X-Spam-Status: No, score=-2.1 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=heapingbits.net header.b=d/L6GiKj; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=0VX8t50m
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 zD_BsjqScihA for <tls@ietfa.amsl.com>; Sun, 8 Mar 2020 10:25:28 -0700 (PDT)
Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 44EE23A0DB3 for <tls@ietf.org>; Sun, 8 Mar 2020 10:25:28 -0700 (PDT)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 6F5AA21DC4; Sun, 8 Mar 2020 13:25:27 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 08 Mar 2020 13:25:27 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heapingbits.net; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s=fm3; bh= +2sngEgDj4rz3TP0c9p2d7/yf8xb2v2AqNQN/zmu3iw=; b=d/L6GiKjwUwypwQV UwTcNRtz4tvVvyjW68l3rCDKI5AtjocAwNQFxHCHeyocLFuBtR58zHDgnYZpdlMm 92Im6l+gzmr0jEJWgXMU7qlDBtcXGR+pOTsE3a6iO6UIWNMsijXYTMHV4AV6ixMa bnILN6ZLtwnEUKm9iEBdSQS/5NwATX8czj5y+qgji8J8R9KWUXvHHvqskr/X9UQO Ls9r8UOvUoIx9wj/LDfjbqb6Mo8skbg8xlIBvjrYL32KAwbq6Epw0v9VkkDUIka/ xkKo7sJ8uvDpIH0kzFgloMdmxpl79Qmzu9DPwrrhLhppPITTrjDKHGofelpY0c2V wrgbpQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=+2sngEgDj4rz3TP0c9p2d7/yf8xb2v2AqNQN/zmu3 iw=; b=0VX8t50mg385NqBAw+sta/gIdcXQf5l/xALTB0rRIJmWchdwLbgIpTf3E YPalBJvndwyoFP57TbfpquDcob/8HoCFLnqWtT75SPtnQGV0MVGsUWVONB3L7NUY KWZ6Zya9MC9B8mreAI26bJHwSImjMIjQGodGRA+psqkfSv+598axA03AD4jQqetB 3Sq2BGX+qGK9ehdBrZPXY0MZNVAba9BWnfNU8jtChz3PjmANGp1Lj8I+qUczRMaq ajS2sE5wr5xNVEhLx/DmIB8I09pwjD0SuGFGXwQPLmXMv5adeTGjJMHXXxBCk0lf wf9Rjw8Id/P0SPVe+3UNhaVfQbqnA==
X-ME-Sender: <xms:hiplXornfwiVBWWF8lcHub53Fi7X4l1RBPZvIRaeDScs43jlObi3Rw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrudduiedguddtfecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufffokfgjfhggtgfgsehtkehmtdertdejnecuhfhrohhmpedfvehh rhhishhtohhphhgvrhcuhghoohgufdcuoegtrgifsehhvggrphhinhhgsghithhsrdhnvg htqeenucfkphepjeefrdelvddrieegrddufedtnecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomheptggrfieshhgvrghpihhnghgsihhtshdrnhgvth
X-ME-Proxy: <xmx:hiplXvbviaKaeQjQFxh7wAeQzGoJG7DKZSWtEzornFYZl4GCJuDJsw> <xmx:hiplXhBvD0HEcOCGGgxU_aVcDevB7_w1okSEsK0Z2XoXf3AEOj3y8g> <xmx:hiplXhdYNC4QfwFy-GzhHb7yO3Y5g0jCfsR9mb7kHUY6VOOaYXtBKQ> <xmx:hyplXtn7Pr8tuWjj8mwaTYNp_UH62WXYA7L3AF6E4Y4RsCYCrlALkA>
Received: from [10.0.0.184] (c-73-92-64-130.hsd1.ca.comcast.net [73.92.64.130]) by mail.messagingengine.com (Postfix) with ESMTPA id 3B32830611FB; Sun, 8 Mar 2020 13:25:26 -0400 (EDT)
From: Christopher Wood <caw@heapingbits.net>
To: Stephen Farrell <stephen.farrell@cs.tcd.ie>
Cc: tls@ietf.org
Date: Sun, 08 Mar 2020 10:25:25 -0700
X-Mailer: MailMate (1.13.1r5671)
Message-ID: <AB6F27E7-FC02-4E1C-850D-C51D00379EC1@heapingbits.net>
In-Reply-To: <7fc87dd2-88dd-16e9-979f-3770d41184b2@cs.tcd.ie>
References: <a212c2da-f2fd-9013-4934-a46e03b024f3@cs.tcd.ie> <87368A1A-0F1E-45C6-938C-0F755208E9B4@heapingbits.net> <7fc87dd2-88dd-16e9-979f-3770d41184b2@cs.tcd.ie>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/UvAhFnOzYKryI6cBQd1qgG-bem0>
Subject: Re: [TLS] three ECHO issues
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls/>
List-Post: <mailto:tls@ietf.org>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 08 Mar 2020 17:25:30 -0000


On 8 Mar 2020, at 10:14, Stephen Farrell wrote:

> Hiya,
>
> On 08/03/2020 16:07, Christopher Wood wrote:
>> Thanks for raising these issues! Please see inline below.
>>
>> On 8 Mar 2020, at 8:18, Stephen Farrell wrote:
>>
>>> Hiya,
>>>
>>> Thanks for the new ECHO PR. [1] I think this is the right direction
>>> but I have three issues with how it's done in the PR right now that
>>> I think would benefit from list discussion before a new I-D is
>>> produced or the PR is merged.
>>>
>>> 1) Padding. This should be easy but somehow seems to be hard;-(
>>> ISTM the current text is broken as it'd expose length information
>>> about ALPN in the CH and also in the EncryptedExtensions. I think
>>> it'd be good if the list reached some level of agreement on the
>>> goals of padding here rather than keep making different tweaks that
>>> don't work. I think the goal for padding ought be that we don't
>>> expose information about the content of the inner CH via the length
>>> of any h/s message. If we agree that (or some similar thing) then
>>> hopefully it should be just a matter of tweaking the algorithm so
>>> it works. (I've raised this before but seemingly not convincingly
>>> enough;-)
>>
>> We kept maximum_name_length so as to not change “too much” in the 
>> PR.
>> As this is orthogonal to the overall change, it can be addressed
>> separately. Can you please file an issue and propose text?
>
> Sure. But ECHO vs. ESNI does make a difference here e.g.
> due to the ALPN in the inner. If the outcome of (2) below
> is to keep the flexibility they may be other extensions
> that create length issues, either just in the inner CH
> or else there and possibly also in other bits of the h/s.
>
> That said, if the goal I stated above is something on
> which everyone's agreed, I'd be happy to craft a PR. But
> if that goal is not agreed, then probably any PR I make
> won't be useful, hence raising this on the list.

In general I think it’s a fine goal, but I think it’s probably a bit 
more challenging to specify this correctly than we might think. Take 
ALPN as an example. Servers can’t possibly know what ALPN tokens each 
client might offer up in their CH, so how can they express a maximum 
limit?

>
>>> 2) Variance between inner and outer CH. The current scheme is that
>>> almost any variation is allowed. In the work I've done so far
>>> looking at how to code that up, the trial decryption required
>>> becomes a major pain in the client code as soon as the TLS
>>> key-share differs between inner and outer. I don't know if that
>>> affects other code bases or if that's mostly an OpenSSL thing but
>>> think we ought establish on the list if that level of flexibility
>>> is needed now, or maybe later, or even never. The cost there is not
>>> just working out how to code it up, but this also creates new
>>> complex code paths that will be rarely executed which is usually a
>>> recipe for sadness later. So, I'd hope other code bases are checked
>>> for this before we merge the PR. (The problem here could be
>>> OpenSSL's internal, eh... "intricacy" is a polite term I guess, or
>>> it could be me being dim, but it seems real;-)
>>
>> Yes, this will be a pain to implement. But variance between the
>> inner and outer CH is permitted, and indeed a goal.
>
> I'm questioning whether that's a good goal or not. In my
> analysis of the various extensions, only SNI and ALPN seem
> to offer immediate value. Until one gets to new algos,
> which may mean PQC, there doesn't seem much more that's
> worth supporting really. And when one looks at the level
> of complexity to implement generic variance, I'm really
> not sure it's worthwhile. That said, I'd hack away at
> it as needed if others have taken a look at their code
> and found it ok to support. I've just not heard that so
> far and am concerned we're trading v, simple text in
> the I-D vs. really horribly complex and maybe flakey
> code, which doesn't seem like a good plan to me.
>
> Just to be clear: I do like the idea that the analysis
> be done on the flexible/full-variance scheme and I also
> like the idea of reconstructing a full CH from the
> recovered plaintext of the inner CH. Even with all
> that though, the ECHO spec can still impose interop
> restrictions on inner/outer CH variance to simplify
> implementation and make interop easier and more likely.
> My guess is that that'd be a worthwhile simplification.

Yep, it can, and that’s something we can tighten down as needed later 
on. For example, if we later decide that we never want to duplicate key 
shares, we can just make that so. For now, starting general aligns with 
the analysis and gives us the flexibility we need to further refine as 
needed.

>
> If more variation is needed later (e.g. to help
> incremental deployment of PQC algs), then that could
> just use a new extension instead of ECHO.
>
>>
>>> 3) I think we might be better off leaving out the compression stuff
>>> for now, and only figuring that out later. The current
>>> OuterExtensions thing is pretty ugly, and if the result of (2)
>>> above were that we constrain the variance between inner and outer
>>> some more then a generic compression scheme may not be needed. I
>>> do think we will want some compression thing in the RFC we end up
>>> with, but we might be better off to get interop without that first
>>> and then add compression later. (That's what I plan to do fwiw, so
>>> this is a less pressing issue for me given I'll be ignoring it for
>>> now:-)
>>
>> Can you elaborate on why it’s ugly?
>
> Allowing more than 1 OuterExtensions - that'd break some
> code in OpenSSL's generic extension handling. Not sure
> how bad that'll be to handle.

Whoops! Good catch. We should remove this paragraph:

Multiple "outer_extension" extensions MAY appear in a ClientHelloInner
(this is a violation of normal TLS rules, but the resulting 
ClientHelloInner
is never processed directly). However, there MUST NOT be
multiple "outer_extension" extensions with the same extension code 
point.

That’s leftover from a previous version. I’ll do that now.

>
>> What could we do differently?
>
> If e.g. we required the same TLS key-share in inner and
> outer, then you could just omit most of the octets from
> the inner and deterministically reconstruct. With a small
> number of such MUSTs, there might be no real need for a
> generic compression scheme at all. That's linked to (2)
> above though.
>
> If a generic compression is needed, then yes something
> ugly will likely be needed, but it could be simple and
> ugly, e.g. extension-specific, for those extensions that
> would make a difference. (And maybe we could punt on it
> too - e.g. require the definition of the PQC stuff to
> spec this compression if that's when it actually gets
> useful.)

That might work, too. For now, I’d prefer we not get bogged down in 
compression as it’s merely an optimization.

>> Text suggestions are welcome!
>
> Sure. And happy to offer some, but would like to see
> guidance from the WG on the mailing list first. (Sorry
> for being less github-cooperative about this, but being
> logged in there is not my normal state of being:-)

No problem. :-)

Cheers,
Chris