Re: [TLS] Trust Expressions Follow-up

David Benjamin <davidben@chromium.org> Sun, 03 March 2024 03:21 UTC

Return-Path: <davidben@google.com>
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 EBB02C14F693 for <tls@ietfa.amsl.com>; Sat, 2 Mar 2024 19:21:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.247
X-Spam-Level:
X-Spam-Status: No, score=-14.247 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=chromium.org
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Z_jAsjL6gBJd for <tls@ietfa.amsl.com>; Sat, 2 Mar 2024 19:21:02 -0800 (PST)
Received: from mail-yw1-x112e.google.com (mail-yw1-x112e.google.com [IPv6:2607:f8b0:4864:20::112e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 67D92C14F5E8 for <tls@ietf.org>; Sat, 2 Mar 2024 19:21:02 -0800 (PST)
Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-60978e6f9a3so30716257b3.3 for <tls@ietf.org>; Sat, 02 Mar 2024 19:21:02 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1709436061; x=1710040861; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=E6C4a3Cf60d0r+uh4IAmMEs8PEhp+m59NFIY5C3J+rI=; b=NS9AFozeW8HubahJCKKbWWASQiAFWBfmcnaAt3Ttga8L+sgxGdS8fBzJ0Lf7z0rOJQ pHd6LJvnCVEmqNrYeQ/kY0GxNcCI7tMoo7S8glAONd6fo2UqP6IC/Nn/93mHxhoFi21T eUDmNOFP/DGg6MHfrlQi1Ho9+BEJR5zFd6xek=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709436061; x=1710040861; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=E6C4a3Cf60d0r+uh4IAmMEs8PEhp+m59NFIY5C3J+rI=; b=NGmgLAgUlEn5OH03gEfTXNbWTR0uAws/wldSQ3WtUOVQputwc6HcmMSsyHuPEPCVEb WKcAhev3hcahzpHTIArrfVLFM8JIRaM36gTwZMtKkaAihPywAk2RjdxfPxTZHf7xE6OX UcZWlv4SMOEV1oiYK48OVYXeB/n9swTYleqV0SBo3CmIwPMQivigJddNzAJU0i3vfkXG RLEiS1L+Kp64bQyf+1bhXRghaeT3zXdkM0pF4FnX19c2G4NoYu2y9UZWHj7eSa8MTKWl vYl5MBitB0rO5UlTlWK3xf3OnF3YCMFADX2aqgq1BHkRUpmGVITAM3a1NlPPweLzYk/x F1rg==
X-Gm-Message-State: AOJu0YzBbaTp2m1aRewaCHdLM8l7b1Gs7pSWUV2smirxht1Z0X/EOaTM FmzMT1cVxlFfv+WVULDf4drEyPHM0bv37d8IiWzcw8sIHtW+oJtFs/ywyDwz3MquEkBGIRSI6Fe ZVqP4gTIEi0FT+LC8+IfCAEtzpxgStPIgxgRQZ79aDWmHxv54
X-Google-Smtp-Source: AGHT+IGX4FxgsdxD0G9/aiofsT38D75oISeuW0Krev1i3XaDiH0eKzDaubwzXTeh8Ns1EjSnx1tNI9e2UHkji0wQd+E=
X-Received: by 2002:a05:690c:ed4:b0:607:ca2e:f23e with SMTP id cs20-20020a05690c0ed400b00607ca2ef23emr7356664ywb.30.1709436061091; Sat, 02 Mar 2024 19:21:01 -0800 (PST)
MIME-Version: 1.0
References: <CAF8qwaA1LeO0i=N_BGbvAGa=wpBzxbcoGEU8kOZXS9j0ZdqMzg@mail.gmail.com> <CAF8qwaAa4-FwYrziGd4S3AXHh=uZGH+FtxyV1kNDTOCQe_OOmg@mail.gmail.com> <CAF8qwaA-9koWawjsVEe4TpOd1PzyPLUkGO2YT4ZOXiHScb1SBQ@mail.gmail.com> <CAN8C-_Kmb0H-wBoBVmUbZRBAj6szniA7Tzem9g_bTuKt84XHNA@mail.gmail.com>
In-Reply-To: <CAN8C-_Kmb0H-wBoBVmUbZRBAj6szniA7Tzem9g_bTuKt84XHNA@mail.gmail.com>
From: David Benjamin <davidben@chromium.org>
Date: Sat, 02 Mar 2024 22:20:43 -0500
Message-ID: <CAF8qwaDpPpPNa5aOQzNDCJDNTfR8epby9aF6RtYO8jA37-EOmg@mail.gmail.com>
To: Orie Steele <orie@transmute.industries>
Cc: "<tls@ietf.org>" <tls@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000003055940612b9194f"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/abfz57ZGs1SDF8lwk_tMl30W5y0>
Subject: Re: [TLS] Trust Expressions Follow-up
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.39
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, 03 Mar 2024 03:21:07 -0000

Hi Orie,

Thanks for the note! I'm not very familiar with the SCITT work, so I can't
speak to it directly. But perhaps I can try to describe what we're trying
to achieve for TLS, and that might help you determine whether it applies to
SCITT?

We're looking here to address problems caused by single-certificate
deployment models in TLS. In an ecosystem where one server may serve many
diverse clients (ranging from evergreen browsers, to decade-old TV set-top
boxes) with different requirements, that deployment model results in a ton
of conflicts as the PKI evolves to meet user security needs. The first
message in this thread, and this document
<https://github.com/davidben/tls-trust-expressions/blob/main/explainer.md> try
to describe the problem and goals a bit.

TLS, being an online protocol, lends itself well to negotiation-based
solutions (we do it for cipher suites, etc.), where the server has multiple
certificates available and then somehow the client and server are able to
determine which to use. Trust expressions aim to provide that "somehow".
The manifests business is purely a supporting structure to get there, since
we need to be able to succinctly describe what are fairly large lists of
trusted CAs in many PKIs. If there isn't an analogous deployment problem or
online protocol in SCITT, the work probably isn't directly applicable.

I didn't quite follow the transparency service comments (this may be my
unfamiliarity with SCITT again), but this draft isn't trying to change PKI
structure. Or rather, it isn't trying to do so directly. Having a robust
negotiation mechanism *enables* us to explore structural changes. I do
think that will be valuable, as post-quantum dramatically changes some
trade-offs here. (Signatures and keys are now *huge*.*)* E.g. there's the
intermediate elision use case you noted. But that one isn't related to
transparency and is simply observing that intermediate elision and
short-lived trust anchors are the same thing.

We do have another draft, draft-davidben-tls-merkle-tree-certs, which
explores a much more differently structured PKI, aiming to fit with how the
Web PKI currently does transparency. Though we wrote that draft first and
have not yet had time to rebase it atop trust expressions. There are
probably other data points in this design space too, and I hope certificate
negotiation will help us find the right ones for various use cases.

David

On Fri, Mar 1, 2024 at 6:39 PM Orie Steele <orie@transmute.industries>
wrote:

> I found the CDDL in the appendix intriguing:
>
>
> https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#appendix-A
>
> In SCITT, we've been kicking around a related concept...
> It's had several names, all of which have led to confusion, so I will not
> repeat them here, but I want to overlay how they have been related in SCITT:
>
> trust-anchor = { ; cose sign1 of some key (JWK/PGP/COSE) or certificate
>     type: text,
>     * text => any,
> }
>
> trust-store-entry = { ; a receipt from a transparency service, proving a
> trust anchor in included in a log (like CT/KT)
>     id: text,
>     labels: [+ uint],
>     max_lifetime: uint,
>     * text => any,
> }
>
> trust-store-version = { ;  an aggregation of receipts, based on some
> query, for example, all receipts for trust anchors signed by the same key.
>     timestamp: int,
>     entries: [+ trust-store-entry],
>     * text => any,
> }
>
> trust-store-manifest = { ;  cose sign 1 of an aggregation of receipts,
> related to some subject, for example, a software bill of materials, where
> each receipt is for a specific software dependency
>     name: text,
>     max_age: uint,
>     trust_anchors: {+ text => trust-anchor},
>     versions: [+ trust-store-version],
>     * text => any,
> }
>
> One of the interesting topics we have discussed is producing stable
> identifiers for these structures, building on URI templates and thumbprints.
>
> In the examples I can see in the trust expressions draft, you have data by
> value instead of data by reference.
>
> Consider the following URI Template for expressing versions of a trust
> store:
>
> https://{service-provider}/{trust-store-manifest.name}/versions -> all
> versions of a trust store by name
> https://{service-provider}/{trust-store-manifest.name}/versions/1672531200
> -> all receipts for certs in a trust store version (certs by reference) ->
> list of signatures ( certs by value )
>
> We had wondered if it would be valuable to assign a naming convention and
> content addressed names to resources,
> so that you could ask an arbitrary scitt transparency service for details
> regarding any artifact that you might be holding as bytes.... for example:
>
> https://{service-provider}/{trust-store-manifest.name}/trust_anchors/{thumbprint(A1)}
> ->  all versions of a trust store by name containing A1.
>
> Obviously these names are not cross protocol friendly, we looked into URNs
> for that (don't throw things at me, I know this is a sensitive subject in
> the IETF).
>
> The concept of SCITT Receipts seems close to the purpose of intermediate
> ellison here:
> https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#name-intermediate-elision
>
> The idea was that if you had stable receipts from a transparency service
> you trusted, you might not need to care about all the parts of a cert chain
> that they validated before including the cert in their transparency log.
>
> I'd be interested in prototyping a SCITT mapping for this, if I can wrap
> my head around the use case a bit more.
>
> OS
>
>
>
>
>
> On Thu, Feb 29, 2024 at 6:31 PM David Benjamin <davidben@chromium.org>
> wrote:
>
>> Oh, I should have added: I put together an informal "explainer"-style
>> document to try to describe the high-level motivations and goals a bit
>> better. The format is adapted more from the web platform end, which likes
>> to have separate explainer and specification documents, but it seemed a
>> good style for capturing, at a high level, what we're trying to accomplish.
>> https://github.com/davidben/tls-trust-expressions/blob/main/explainer.md
>>
>> It's largely a copy of the start of this email thread, but I figured it'd
>> be useful to have a more canonical home for it. (We'll probably adapt some
>> of that text back into the draft, after some more wordsmithing.)
>>
>>
>> On Thu, Feb 29, 2024 at 7:18 PM David Benjamin <davidben@chromium.org>
>> wrote:
>>
>>> Circling back to this thread, we're now looking at prototyping the TLS
>>> parts in BoringSSL, on both the client (Chrome) and the server side. Let us
>>> know if you have any thoughts on the proposal!
>>>
>>> (Nothing that would prevent us from changing details, of course. But as
>>> there are a lot of pieces here, we'd like to get some experience with
>>> things.)
>>>
>>> On Thu, Jan 25, 2024 at 5:00 PM David Benjamin <davidben@chromium.org>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> Now that the holidays are over, I wanted to follow up on
>>>> draft-davidben-tls-trust-expr and continue some of the discussions from
>>>> Prague:
>>>>
>>>>
>>>> https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html
>>>>
>>>>
>>>> https://datatracker.ietf.org/meeting/118/materials/slides-118-tls-tls-trust-expressions-00
>>>>
>>>> First, I wanted to briefly clarify the purpose of excluded_labels
>>>> <https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#name-trust-expressions>:
>>>> it is primarily intended to address version skew: if the certificate is
>>>> known to match (example, v10) and the client says (example, v11), the
>>>> server doesn’t know whether v11 distrusted or retained the CA. We resolve
>>>> that with a combination of excluded_labels and TrustStoreStatus.
>>>> excluded_labels is not intended for user-specific removals. I’ve
>>>> reworked the Privacy Considerations
>>>> <https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#name-privacy-considerations>
>>>> section to discuss this more clearly.
>>>>
>>>> Second, I wanted to take a step back and try to better articulate our
>>>> goals. I think the best way to look at this draft is in three parts:
>>>>
>>>> 1. A new multi-certificate deployment model (the overall goal)
>>>>
>>>> 2. Selecting certificates within that model (the TLS parts of the draft)
>>>>
>>>> 3. Provisioning certificates (the ACME parts of the draft)
>>>>
>>>> We’d most like to get consensus on the first, as it’s the most
>>>> important. Trust expressions are a way to achieve that goal, but we’re not
>>>> attached to the specific mechanism if there’s a better one. We briefly
>>>> discuss this in the introduction
>>>> <https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#name-introduction>,
>>>> but I think it is worth elaborating here:
>>>>
>>>> The aim is to get to a more flexible and robust PKI, by allowing
>>>> servers to select between multiple certificates. To do this, we need a way
>>>> for the servers to reliably select the correct certificate to use with each
>>>> client. In doing so, we wish to minimize manual changes by server operators
>>>> in the long run. Most ongoing decisions should instead come from TLS
>>>> software, ACME client software, and ACME servers.
>>>>
>>>> Why does this matter? PKIs need to evolve over time to meet user
>>>> security needs: CAs that add net value to the ecosystem may be added,
>>>> long-lived keys should be rotated to reduce risk, and compromised or
>>>> untrustworthy CAs are removed. Even a slow-moving, mostly aligned ecosystem
>>>> is still made of individual decisions that roll out to individual clients.
>>>> This means, whether we like it or not, trust divergence is a fact of life,
>>>> if for no other reason than out-of-date clients in the ecosystem. These
>>>> clients could range from unupdatable TV set-top boxes to some IoT device to
>>>> a browser that could not communicate with its update service.
>>>>
>>>> Today, the mere existence of old clients limits security improvements
>>>> for other, unrelated clients. Consider a TLS client making some trust
>>>> change for user security. For availability, TLS servers must have some way
>>>> to satisfy it. Some server, however, may also support an older client. If
>>>> the server uses a single certificate, that certificate is limited to the
>>>> intersection of both clients.
>>>>
>>>> At the scale of the Internet, the oldest clients last indefinitely. As
>>>> servers consider older and older clients, that intersection becomes
>>>> increasingly constraining, causing availability and security to conflict.
>>>> As a community of security practitioners, I wish I could tell you that
>>>> security wins, that those servers can simply be convinced to drop the old
>>>> clients, and that this encourages old clients to update. I think we all
>>>> know this is not what happens. Availability almost always beats security. The
>>>> result of this conflict is not that old clients get updates, it is that
>>>> newer clients cannot improve user security. It takes just one
>>>> important server with one important old client to jam everything, with
>>>> user security paying the cost.
>>>>
>>>> We wish to remove this conflict with certificate negotiation, analogous
>>>> to TLS version negotiation and cipher suite negotiation. Certificate
>>>> negotiation, via trust expressions, means security improvements in new
>>>> clients do not conflict with availability for older clients. Servers can,
>>>> with the aid of their ACME servers, deliver different chains to different
>>>> clients as needed.
>>>>
>>>> Now, some of these problems can be addressed with cross-signs between
>>>> CAs, but this is a partial solution at best. Without negotiation, this
>>>> still means sending certificates for the lowest common denominator to all
>>>> clients. This wastes bandwidth, particularly with post-quantum
>>>> cryptography, where every signature costs kilobytes. Additionally, an
>>>> individual server operator cannot unilaterally configure this. Cross-signs
>>>> apply to entire intermediate CAs, not just the individual server’s
>>>> certificate.
>>>>
>>>> There’s more to say on this topic, as relieving this conflict solves
>>>> many other PKI problems and enables new solutions for relying parties, CAs,
>>>> and subscribers. We discuss some of these in the use cases
>>>> <https://davidben.github.io/tls-trust-expressions/draft-davidben-tls-trust-expr.html#name-use-cases>
>>>> section. But hopefully this helps clarify our goals and is a starting point
>>>> for discussion.
>>>>
>>>> We’d be interested to hear thoughts on these issues or others. Our hope
>>>> is to reach enough consensus on the list to determine whether it would make
>>>> sense to have a call for adoption around Brisbane.
>>>>
>>>> Thanks,
>>>>
>>>> David
>>>>
>>> _______________________________________________
>> TLS mailing list
>> TLS@ietf.org
>> https://www.ietf.org/mailman/listinfo/tls
>>
>
>
> --
>
>
> ORIE STEELE
> Chief Technology Officer
> www.transmute.industries
>
> <https://transmute.industries>
>