Re: [TLS] Trust Expressions Follow-up

Orie Steele <orie@transmute.industries> Mon, 04 March 2024 20:03 UTC

Return-Path: <orie@transmute.industries>
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 A803BC17C8BA for <tls@ietfa.amsl.com>; Mon, 4 Mar 2024 12:03:48 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.095
X-Spam-Level:
X-Spam-Status: No, score=-7.095 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, 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] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=transmute.industries
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 LbkcF4CV_EKS for <tls@ietfa.amsl.com>; Mon, 4 Mar 2024 12:03:44 -0800 (PST)
Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) (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 B4F28C1930B0 for <tls@ietf.org>; Mon, 4 Mar 2024 12:02:46 -0800 (PST)
Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-29a858a0981so3519670a91.0 for <tls@ietf.org>; Mon, 04 Mar 2024 12:02:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=transmute.industries; s=google; t=1709582566; x=1710187366; 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=IHDhaU2BuP0uWUHxEwPZ5nKq1Qml6f5elIPAPMgi0qQ=; b=N+liQH5dlaEXEVMlw63yz04MAZPSmJTFQRHci/PFRMizPFtU1/M63OOOlIaG0y35Ou K4rDk11P8g3Dv+D2rqH2VVaBhQ8taxHL2JroEzYFuxdeecrzIDOrbOVWZBvIEYRIFdN3 9tTd9SlzeDu4fK3qBuyzOpD5syCayaBIgrwfQjFccbO6kMlIH8zSPsQX5uKdO4Rd6vGh fnxiOpQt5Rz/0lSNLDAMhYlECAMuSsRtKCsfCQVl03203OaEN0FxzhGNjN/1kiHi6m8Y dgUSq+A2T73U8DdWH00+8qOXZhpBMWG/cN2uk2MnedBnKUpCLpavq+/iHnwN51DyLScq anwA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709582566; x=1710187366; 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=IHDhaU2BuP0uWUHxEwPZ5nKq1Qml6f5elIPAPMgi0qQ=; b=nCpQlpKw41UhdiBGDdsMKxVuSOQhlLJqFCcleEY9900DImNraMvpV1py5lAK4w7lmr ZRmqhBNzKeTEwmoRMLUhpLHoziWkFq3K2MZqOkIjgFBqumfuMdCJu1xryvnC0Izqs05G DY6MR4bnmnYn/04VYkTHBQsh5CsL2taGogNdm1INmcQBMYGHE+NKB6XiWpRyWYBrfrte u3ILX8JnlY8GM5Rff4+cBcYvnGPWmi4Ib7Hau4NQNZIRSULN03ODRGhGP92QuG0gIIKB xaNz5xwOoTutf8/2VFSoWI2BqDA2ewzUNlHaROqdVY1XhBLLeOXHD+BkOJ4SxK9adfZf Xeiw==
X-Gm-Message-State: AOJu0Yz6Ex7rz0h15XLwzpFl9uJz5129YxuiJgV1mzW2tDg8tU9e6MBd b10MHvOSTPexfs0fNoV0e1BmoXwajcw+w/6UejxrsDO7yVnWZ0dNTScfeRM/wrWuGg6vJ7yEZEK GkL8OSe/1aZA/yt3IPBBEaUhA3mrh5q3E2Zx4ubMcqZCkaRQpN5piOA==
X-Google-Smtp-Source: AGHT+IFSNdOCeK09hez7dSP8OpO/+gcXToQ18QHsWK/zOYQ6ZmnS0DW2i1CLcPxrkOmGCZ0NsqHot69CNU+KPv7JQ2w=
X-Received: by 2002:a17:90a:ab06:b0:299:2cba:7588 with SMTP id m6-20020a17090aab0600b002992cba7588mr8846328pjq.1.1709582565829; Mon, 04 Mar 2024 12:02:45 -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> <CAF8qwaDpPpPNa5aOQzNDCJDNTfR8epby9aF6RtYO8jA37-EOmg@mail.gmail.com>
In-Reply-To: <CAF8qwaDpPpPNa5aOQzNDCJDNTfR8epby9aF6RtYO8jA37-EOmg@mail.gmail.com>
From: Orie Steele <orie@transmute.industries>
Date: Mon, 04 Mar 2024 14:02:34 -0600
Message-ID: <CAN8C-_KPy9Epma=_Ds+rR92jJHyBLsTuS_fWPKRp6O07Xc9fFg@mail.gmail.com>
To: David Benjamin <davidben@chromium.org>
Cc: "<tls@ietf.org>" <tls@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000008d14e80612db35a6"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/9BF6wK-00RJgHhCL-1y2eI1m9sg>
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: Mon, 04 Mar 2024 20:03:48 -0000

Thanks for your thoughtful reply.

Inline:

On Sat, Mar 2, 2024 at 9:21 PM David Benjamin <davidben@chromium.org> wrote:

> 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 think the SCITT analog here is managing code signing certs when trying to
verify a software bill of materials that covers both public and private CAs.


> 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.
>

This sorta lines up with the current solutions for short lived certs seen
in the wild today, such as Sigstore.

Is proving possession of an email address good enough to sign software?

What about scenarios with MFA, CI systems with certificates for each build
server, with HSM keys... etc.

It seems that there might be some conceptual alignment on "these certs for
this name, on these timescales", even if the certs are used for different
things.

SCITTs focus is to provide an access controlled audit log for details
related to the software supply chain.

I'm still trying to wrap my head around how
draft-davidben-tls-trust-expr maps to the CT use case (
https://datatracker.ietf.org/doc/rfc9162/), or how they might be related in
an ideal setting.

It seems like SCITT Receipts for a trust expression manifest might be a
thing, assuming you are trying to reason about which trust store manifests
that are used by a 3rd party, without the ability to talk to them
directly... Perhaps that's a "SCITT can help you audit how a trust store
was used" use case... or... maybe trust expressions help SCITT auditors
make quick sense of SCITT Receipts from PKIs that have aging identities
co-mingled with new ones, which seems to be common in software supply
chains.


> 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.
>

 Skimming the draft you mentioned, perhaps this is also a point of overlap
between your 2 drafts and the SCITT architecture:

https://datatracker.ietf.org/doc/html/draft-davidben-tls-merkle-tree-certs-01#section-10.3

You might build a "Merkle Tree certificate", using a SCITT transparency
service, since a SCITT receipt is logically an inclusion proof for a single
certificate,

A "signed feed of receipts" can be thought of as an intermediate data
structure for Merkle tree certs... possibly... I need more time to digest
the draft.

Thanks for your comments.


> 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>
>>
>

-- 


ORIE STEELE
Chief Technology Officer
www.transmute.industries

<https://transmute.industries>