Re: [kitten] [TLS] Fwd: Last Call: <draft-ietf-kitten-tls-channel-bindings-for-tls13-09.txt> (Channel Bindings for TLS 1.3) to Proposed Standard

Sam Whited <sam@samwhited.com> Wed, 27 October 2021 21:13 UTC

Return-Path: <sam@samwhited.com>
X-Original-To: kitten@ietfa.amsl.com
Delivered-To: kitten@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E5F103A14B1; Wed, 27 Oct 2021 14:13:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.101
X-Spam-Level:
X-Spam-Status: No, score=-2.101 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, RCVD_IN_MSPIKE_H2=-0.001, 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=samwhited.com header.b=O92Qlmwq; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=HBCbRKMI
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 vobtsL708kYd; Wed, 27 Oct 2021 14:13:42 -0700 (PDT)
Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B82EE3A14B0; Wed, 27 Oct 2021 14:13:42 -0700 (PDT)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id 0C4013201E89; Wed, 27 Oct 2021 17:13:41 -0400 (EDT)
Received: from imap42 ([10.202.2.92]) by compute1.internal (MEProxy); Wed, 27 Oct 2021 17:13:42 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samwhited.com; h=mime-version:message-id:in-reply-to:references:date:from:to :cc:subject:content-type:content-transfer-encoding; s=fm1; bh=GJ tppU7Keu2goyfhgh7xyNxYmErxv5S+9UsqMtde6gM=; b=O92Qlmwq7O3vZ4Bwg3 VDsPDJZBngMF9ZZY0RkAAChhFHHOUoh7lUOJ0eyirYR10yTCNVyktuYkIIa1gmhl rvz/NXq2iMwg0LJB0YHgTXpzCbhIjFs5GDX61MrF2FfT66sfBpJUh8Fcm9VJWK3n 13IQsHn4687ZrPWD71LjmbLVkeSk7mQOCp3rmYpvycqMEOOZyW5sRqak8utUnx8q oIlyg95RuZ3KU0mZ1QI5YRIaRLNOpTmKENBxrkb/BS19QGkNWl+mBxD5g28fiP1l 3hQJ2JcuM0HcdKl7eA7glj7Z5Ys1or1bIjh1QYL8KR5Ue4fL5rOvtvcz04+G0nCj DKSA==
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=fm1; bh=GJtppU7Keu2goyfhgh7xyNxYmErxv5S+9UsqMtde6 gM=; b=HBCbRKMIzSgj1q6sUeTQh3/EM+l8Kkod02EHifUa3YL7ojyev60yIYiE3 mb505wFx3KGMQeESNjMvSfCOXAQje8StCFPxq532P/GhzxmED9D/NePGv2/chFtr 6KlpagJ/4FapTwXn4sE4QS7dFZ3gLul2oUUgiDuz5soCbnEx8xlHgjB8SMdnVAv7 7+e+5TR+600dH0U/E5dk0jgRfhxVM9eyCZ5itIdYnS97/XvxkMWuPR06gPCOOjlL siOpPj51MWIYwzfonnT7Nb6tvgTpItA/5iRlUnMKDTT+6Ocgbdju5bFfBnVZfIQE vQEhe5s7SdjZtsIZYXyFQN7eJRwbQ==
X-ME-Sender: <xms:BcF5YYLH8soD7jivn8x-OLcVbe5VYFImTjRM_DZhWmTctkZpXIZBTw> <xme:BcF5YYLaa3j3Qi71CeWltirDyi-pjVifXAJJ0OjoIqlltXktDMQpT2qQR-pGWDUYs DaNyGXp2qKPvEbpLw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrvdegtddguddutdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgggkfgjfhffhffvufgtgfesthhqredtreerjeenucfhrhhomhepfdfu rghmucghhhhithgvugdfuceoshgrmhesshgrmhifhhhithgvugdrtghomheqnecuggftrf grthhtvghrnhepfeduudekkeeuteeuleefgeeuvdeuvdffhedvveeiffeghefhjefftdev veeuvdffnecuffhomhgrihhnpehivghtfhdrohhrghenucevlhhushhtvghrufhiiigvpe dtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehsrghmsehsrghmfihhihhtvggurdgtohhm
X-ME-Proxy: <xmx:BcF5YYstdU_kDJVbaCAkOU_dIEprcfH9JNIaVdtqzKTdFovdCZM_og> <xmx:BcF5YVay1ubCQkaarIKp6ND9W4NFbf12oZHdIG7h--PaFXNKFpYpYw> <xmx:BcF5Yfb2LmWp3lT3cH4m9R3QhJNi46eKxTLfRp-WpGggUi1USlA__A> <xmx:BcF5YWxyNWYrk8E0ZtvZZdtTJTZfl7t_iuDuMLZWoX16xWtZekpjfg>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 1755B2180085; Wed, 27 Oct 2021 17:13:41 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.5.0-alpha0-1369-gd055fb5e7c-fm-20211018.002-gd055fb5e
Mime-Version: 1.0
Message-Id: <269e7ad2-ad67-4236-8a7b-6a38ab04d798@www.fastmail.com>
In-Reply-To: <CACykbs3v0FC50WQHNqq-oXwKDE=Jha-o0P=Mgr92OgyeKPS6Ug@mail.gmail.com>
References: <163311243544.13917.11736165165419008870@ietfa.amsl.com> <20211001190002.GC98042@kduck.mit.edu> <CABcZeBPQG82xJdwMrmj4-=9aJymo1xts=D6VZedBW5X9k+34cQ@mail.gmail.com> <92ed26c1-bfde-43c1-93f4-2bbdbd4f6ec1@www.fastmail.com> <CAChr6Sw6Rs42DfS8KgD3qasPcWM_gGZhWN5C4b7W7JsPy0wDzw@mail.gmail.com> <8796f867-12b8-41f8-b124-82b3ab0e2d32@www.fastmail.com> <CAChr6SyKAnBcE9t68coGGXFt9WPLuDuWtVKoCXrK+QrwAVtPXw@mail.gmail.com> <f1bcd676-13ad-49b3-a8e8-8a272e0124e3@www.fastmail.com> <CABcZeBNo0gKjNZOKPYJYraioaw6G=z5ibTqh-o9GkWsDkfDmSQ@mail.gmail.com> <c4d6f2e5-0712-42a6-aef5-0cbada7e149e@www.fastmail.com> <CABcZeBM6y-6ZqaLGZ=8qr+uBnWOOgczhcx=ruy5S=n-YrHweKg@mail.gmail.com> <ca676a77-b2c9-4926-9842-d1d6587206ed@www.fastmail.com> <CACykbs11rHUweXmR1NSU0N2rRjcQ8Sf1S+DY2LO7T+e6cLt+5w@mail.gmail.com> <e9570c02c4f703780a4e317b26607ac124a3b595.camel@ruff.mobi> <CACykbs3v0FC50WQHNqq-oXwKDE=Jha-o0P=Mgr92OgyeKPS6Ug@mail.gmail.com>
Date: Wed, 27 Oct 2021 17:12:22 -0400
From: Sam Whited <sam@samwhited.com>
To: Jonathan Hoyland <jonathan.hoyland@gmail.com>, "Ruslan N. Marchenko" <rufferson@gmail.com>
Cc: KITTEN Working Group <kitten@ietf.org>, "<tls@ietf.org>" <tls@ietf.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/kitten/q6_CfoeK5l98TVKy8D6CetmgIRA>
Subject: Re: [kitten] [TLS] Fwd: Last Call: <draft-ietf-kitten-tls-channel-bindings-for-tls13-09.txt> (Channel Bindings for TLS 1.3) to Proposed Standard
X-BeenThere: kitten@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Common Authentication Technologies - Next Generation <kitten.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/kitten>, <mailto:kitten-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/kitten/>
List-Post: <mailto:kitten@ietf.org>
List-Help: <mailto:kitten-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/kitten>, <mailto:kitten-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 27 Oct 2021 21:13:50 -0000

I've been trying to figure out exactly what you mean before replying and
have been struggling to do so, so I apologize if I'm misunderstanding
your emails, but I believe this isn't a problem unless you use the
channel binding itself as keying material for something. The I-D
specifically has a section where it says *not* to do that for this
reason. This is supposed to be a generic mechanism that lets you
invalidate a session or token if a TLS session changes, that's all. Any
further use of the CB value would have the problems you describe, and
therefore they are forbidden.

On the other hand, if an XMPP session's authn and some sort of authz
token are both using this CB mechanism and are bound to the same TLS
session that is not a problem. If the session changes they both would
become invalid. if it doesn't, they both remain valid and do not leak
any information about each other that wasn't already public.

I believe there is value in having a generic channel binding, even if
it's so generic that this means it can't be used as a secret value
itself. Maybe I'm misunderstanding what you're saying though?

—Sam

On Wed, Oct 27, 2021, at 13:02, Jonathan Hoyland wrote:
> Hi Ruslan,
>
> Without digging into the guts of GSS-API and SCRAM I can't give you a
> concrete attack, the issue is that all our assumptions about protocol
> security assume that different protocols use totally separate key
> material. For example if I have one protocol that signs arbitrary
> blobs and another that requires me to sign a challenge to prove I know
> a private key then even if they're both perfectly secure on their own
> they are totally broken in composition. This separation of keys is one
> of the core reasons for the use of HKDFs, it lets us take some source
> randomness and use it to generate independent keys.
>
> Designing a channel binding that explicitly suggests people use the
> same key material for different things is bad practice and poor
> protocol design. Pretty much every attack is on the table if you have
> multiple protocols using the same keys, message forgery, improper
> authentication, key leakage, etc. The reason for separation of keys is
> to simply rule out this entire class of vulnerability. If you don't
> separate the keys then whenever you make any change to any protocol
> you have to consider its security in composition with every other
> protocol, including ones that you don't know about or that haven't
> been written yet.
>
> Using different labels for different purposes shouldn't require
> anything complicated, as it's just changing the input literals to the
> API call. You just need to use different strings based on the
> configuration. If keeping a counter of the number of calls to the API
> is really hard it might be easier to just pick a big enough random
> number to make collisions sufficiently unlikely.
>
> Using the second approach lets you achieve a higher level of security,
> but is perhaps overkill if you don't include attackers that can break
> TLS / steal certificates in your threat model. I totally accept that
> passing state between layers can be tricky, but if you need the
> security then I think the correct solution is to design the API
> carefully, rather than to implement something insecurely. As it so
> happens implementing my second suggestion specifically doesn't require
> any access to TLS internals. The authentication session needs to make
> two calls to the `Exporter` API but doesn't require anything more of
> the TLS connection.
>
> Regards,
>
> Jonathan
>
>
>
>
>
>
> On Tue, 26 Oct 2021 at 20:58, Ruslan N. Marchenko
> <rufferson@gmail.com> wrote:
>
>> Hi Jonathan,
>>
>> Am Dienstag, dem 26.10.2021 um 17:32 +0100 schrieb Jonathan Hoyland:
>> > Hi Sam, all,
>> >
>> > I'd like to again raise the issues I pointed out in
>> >
>> https://mailarchive.ietf.org/arch/msg/kitten/13pPj4E3-gYwpbu2K844uI1BPoU/
>> > . This draft hasn't received enough security analysis, and further,
>> >   I pointed out a specific security issue that remains unaddressed.
>> >
>> > Using the same label for different protocols produces trivial
>> > collisions, and thus it is perfectly possible that a message meant
>> > for GSS-API is identical in both form and key to a message for
>> > SCRAM, and thus there is strong potential for confusion. I'm not
>> > familiar with either of these protocols, so maybe they have
>> > internal reasons why this example doesn't work, but that misses the
>> > much larger and more significant point. Any future protocol that
>> > uses the same label will potentially be confusable, and further
>> > updates to GSS-API now must ensure that they don't form valid SCRAM
>> > messages, and vice versa.
>> >
>> > There isn't even a one-to-one relationship between GSS-API / SCRAM
>> > runs. This channel binding design doesn't protect against messages
>> > being swapped between two GSS-API runs on a single TLS connection.
>> > Again, whether that is a specific problem for GSS-API is totally
>> > irrelevant. Another protocol that uses this draft may well be
>> > vulnerable, and thus this is just leaving a huge security landmine
>> > in TLS channel bindings.
>> >
>> > At an absolute minimum this draft should include "A TLS session
>> > using this RFC to produce a binding for any purpose MUST NOT
>> > generate more than one per session. If a second exporter using this
>> > protocol is required the TLS session MUST be rekeyed."
>> >
>> Can you please elaborate a bit more on this particular attack vector?
>> What exactly information it may leak/compromise and how?
>>
>> The reason I'm asking is that application is the one glueing together
>> TLS and authentication sessions, however application does not always
>> have access to internals of either one(tls), or another(auth) or even
>> both. Therefore asking application to transfer context between
>> authentication and transport APIs may not always be feasible or even
>> possible.
>>
>> Regards, Ruslan
>>
>>

-- 
Sam Whited