[TLS] AD review of draft-ietf-tls-external-psk-guidance-02

Benjamin Kaduk <kaduk@mit.edu> Fri, 20 August 2021 19:50 UTC

Return-Path: <kaduk@mit.edu>
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 742483A078C; Fri, 20 Aug 2021 12:50:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.499
X-Spam-Level:
X-Spam-Status: No, score=-1.499 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.399, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=no 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 PQ74A2PyPduc; Fri, 20 Aug 2021 12:50:19 -0700 (PDT)
Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 653AB3A0783; Fri, 20 Aug 2021 12:50:16 -0700 (PDT)
Received: from kduck.mit.edu ([24.16.140.251]) (authenticated bits=56) (User authenticated as kaduk@ATHENA.MIT.EDU) by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id 17KJo86r031289 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 20 Aug 2021 15:50:14 -0400
Date: Fri, 20 Aug 2021 12:50:08 -0700
From: Benjamin Kaduk <kaduk@mit.edu>
To: draft-ietf-tls-external-psk-guidance.all@ietf.org
Cc: tls@ietf.org
Message-ID: <20210820195008.GI96301@kduck.mit.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/r6-eUIPxwjVIbUJXvRfQrGbHo7o>
Subject: [TLS] AD review of draft-ietf-tls-external-psk-guidance-02
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: Fri, 20 Aug 2021 19:50:23 -0000

Hi all,

In general the content here is good, though there's a few things in
sections 4 and 4.1 that I'm not entirely sure about, and we might stand
to be a bit more clear about to what extent TLS pre 1.3 is in scope (we
do talk about it in some places, but the declared scope is only (D)TLS
1.3 plus cTLS (which is a 1.3 variant).

I made a PR with some basically editorial suggestions:
https://github.com/tlswg/external-psk-design-team/pull/68

It seems like we might want to have a sentence or two in the
introduction or terminology section defining what we mean by "external
PSK" (e.g., "a symmetric secret key provided to the TLS library as an
external input").  I think the first mention of "provisioned
out-of-band" is currently not until §6...

Should we have a note that when we write "TLS 1.3" it applies to DTLS
and cTLS as well?

Section 1

The abstract notes that this document "lists the privacy and security
properties that are not provided by TLS when external PSKs are used",
but I don't see much analogous to that in the Introduction.  (The
overlap between Abstract and Introduction is a bit higher than I prefer,
but I don't have any suggested improvements.)


Section 4

   External PSK authentication in TLS allows endpoints to authenticate
   connections using previously established keys.  These keys do not
   provide protection of endpoint identities (see Section 5), nor do

We might want to disambiguate between "authentication of endpoint
identities" and "confidentiality protection for endpoint identities",
since just "protection" could read as either one.  (Also applies to the
following sentence.)

   they provide non-repudiation (one endpoint in a connection can deny
   the conversation).  Protection of endpoint identities and protection
   against an endpoint denying the conversation are possible when a
   fresh TLS handshake is performed.

I don't understand the last sentence -- is this a "fresh TLS handshake"
using the same external PSK that we just said doesn't provide these
things?  Are we equating "fresh handshake" with "uses certificates"?

Section 4.1

   2.  If PSK with DH is used, then compromise of a group member that
       actively completes connections with other group members can read
       (and modify) traffic.

I can't parse this sentence: "If <X>, then compromise of <Y>" needs
another clause, like "allows the attacker to <Z>", but currently the
sentence parses with <Y> basically consuming the rest of the sentence.

(Also, does "actively complete" mean to receive, initiate, or both?)

   4.  If a group member is compromised, then the attacker can perform
       all of the above attacks.

I'm not sure I understand how this item adds value, since (2) and (3)
explicitly assume "compromise of a group member" and for the case of (1)
compromising a group member naturally satisfies "any group member
can...".

   Additionally, a malicious non-member can reroute handshakes between
   honest group members to connect them in unintended ways, as described
   below.  Note that this class of attack is not possible if each member
   uses the SNI extension [RFC6066] and terminates the connection on
   mismatch.  See [Selfie] for details.

SNI only authenticates the server identity; it seems that if (e.g.) A
and B both initiate connections to C at the same time, the attacker can
make C think that A and B's connections/identities are swapped.  (I
don't remember if [Selfie] directly touches on this attack or not.)

   This attack violates the peer authentication property, and if "C"
   supports a weaker set of cipher suites than "B", this attack also
   violates the downgrade protection property.  [...]

I think we might want to say a little more about how this violdates the
downgrade protection property (or "fails to provide downgrade
protection", since violating a property is a somewhat unusual phrasing).
Most of the instances of the word "downgrade" in RFC 8446 rever to (TLS)
version downgrade, with essentially only the definition of "downgrade
protection" in Appendix E.1 mentioning arbitrary "cryptographic
parameters" that should be the same on both peers as in the absence of
an attack.  But in this setup we have three entities involved, and it's
not clear to which pair we should apply the test -- if A was intending
to talk to C, it would get the same parameters it actually did.  And the
attacker doesn't really affect the negotiation per se -- it can't force
a weaker cipher just because C has it enabled.  A has to offer it, and
it has to be the one that C actually picks.  So the negotiated
ciphersuite would only be different if B and C have different
most-preferred ciphers from A's list, which is perhaps a bit harder to
achieve in practice than just "C supports weaker ciphers".

Section 6.1

   *  Some secrets may be baked into or hardware or software device
      components.  Moreover, when this is done at manufacturing time,
      secrets may be printed on labels or included in a Bill of
      Materials for ease of scanning or import.

It seems like we should comment on the risks that printing the baked-in
PSK on a label or in a BoM incur for the security of the system of as
whole.

Section 7

   2.  Unless other accommodations are made, each PSK MUST be restricted

We probably want a few more words about what the accommodations are
for (e.g., "to mitigate the risks of group-shared PSK usage" or "to
provide explicit node identification").

Section 8

This one-paragraph security considerations feels quite short for a
document of this nature.  Perhaps we want a note about "security
considerations are discussed throughout this memo" (plus transition
phrase) as well as the current content?

I might also consider an introductory sentence to reiterate that the
biggest concerns specific to PSK relate to the determination of the
identities of the communicating parties and the increase in risk as the
PSK is shared more broadly (which seems to be a summary of the remaining
content of the section).

Section 10.1

It seems that we only reference DTLS 1.3 for our scope of applicability,
which doesn't necessarily make it a normative reference.  (cTLS is
referenced in the same way but is classified as informative already.)

NITS

Section 5

   PSK privacy properties are orthogonal to security properties
   described in Section 4.  Traditionally, TLS does little to keep PSK
   identity information private.  For example, an adversary learns

IIRC, "traditionally" is on the NIST word list and will get flagged by
Lars' review script and the RFC Editor.  If you change it now, that will
avoid getting pestered later (but changing it is not a hard
requirement).

Section 6.1

   *  Many industrial protocols assume that PSKs are distributed and
      assigned manually via one of the following approaches: typing the
      PSK into the devices, or via web server masks (using a Trust On

I don't think I know what a "web server mask" is.

Section 7

   3.  Nodes using TLS 1.3 SHOULD use external PSK importers
       [I-D.ietf-tls-external-psk-importer] when configuring PSKs for a
       client-server pair.  [...]

My read of the introduction is that we only provide guidance for (D)TLS
1.3 and cTLS, which means that importers will always be available.  Do
we need to specify "using TLS 1.3" here?

Section 7.1.2

   stack's internal session resumption cache.  This means that if a PSK
   identity collision occurs, the application will be given precedence
   over how to handle the PSK.

I don't think that the TLS stack will give an indication to the callback
that there was a collision, so "precedence over how to handle" may not
be quite accurate.  Maybe something like "the application's external PSK
usage will typically take precedence over the internal session
resumption path"?

Thanks,

Ben