[Atp] Re: Basic Objectives/Requirements

Bryan Newbold <bryan@blueskyweb.xyz> Fri, 14 November 2025 00:54 UTC

Return-Path: <bryan@blueskyweb.xyz>
X-Original-To: atp@mail2.ietf.org
Delivered-To: atp@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 0044E891FE16 for <atp@mail2.ietf.org>; Thu, 13 Nov 2025 16:54:50 -0800 (PST)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: 0.399
X-Spam-Level:
X-Spam-Status: No, score=0.399 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, FROM_SUSPICIOUS_NTLD=0.499, HTML_MESSAGE=0.001, PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=no autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=blueskyweb.xyz
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RXIC7WGNUe-M for <atp@mail2.ietf.org>; Thu, 13 Nov 2025 16:54:49 -0800 (PST)
Received: from mail-qt1-x82e.google.com (mail-qt1-x82e.google.com [IPv6:2607:f8b0:4864:20::82e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 8A5ED891FDFD for <atp@ietf.org>; Thu, 13 Nov 2025 16:54:49 -0800 (PST)
Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4ed82e82f0fso13723931cf.1 for <atp@ietf.org>; Thu, 13 Nov 2025 16:54:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=blueskyweb.xyz; s=google; t=1763081683; x=1763686483; 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=U3+HwjDaqhI1/M0Vx2rIGG6nBD7xegsHWZk8qcIat44=; b=Ydkx49J8bphjvBbpOellMvc61WWOIVbJV1qnlmwqIjOzcGfrakyukM5W6WT5Qt0Ub1 sv8ILVWBYxPdSJTN9q12ZNEZmzviY0aOVhkEFAGN7alUOofUsvaDeJx749NWz0juxf0k DKPTbh6GedGounaCpsDSpV6a1sW5QtfI9LAKR9rddLxhBIuKcvp1aDBZPOUerGLifXm+ AfPPv+W3ueR0jsqbFtmUHvFMKpNxlmYT61KB9us8UvGNNU267Xtfvxvq8p0+txshnHEK QbYuTq4eVojt+Cg+kA7Ip77dzZZgbLTAuU/WCZ3jiWi5Qk3FcQpWCBHj+SAc4JrEcfB/ gvHA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763081683; x=1763686483; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=U3+HwjDaqhI1/M0Vx2rIGG6nBD7xegsHWZk8qcIat44=; b=gORIihuz3bHwTVRLpdAe2i5jL1L2+APv/lNXjYEUbPoQP84YzF5zY3Kg00I3amOCJa 6K6rRLCC42HGMAPwI+0wfaSgE09p8vI6gI9df4XDUfwzkmJED5M2hha5idHaMRtF7SGp b+i3rG07sDbUlshG6DQuPCvAy+pyVOlw2kdgPjjVfSyxY2xyGdrlyAE5h7Rkshr5ZyYS OixHzTz9bCTNkEetdDojBvoZ4r5Ii4iGS9pKSdOw5SLW02G5+y/oqkki6QTr5dNer9Ln gT1F1pWqU8Xi0PjFJx0EvuftAvvrXTWhbwjuAnYkj/z1sr5+mZxfDOXzcKKdWK0Vdlu/ oo2g==
X-Forwarded-Encrypted: i=1; AJvYcCXeQkHi9XJdde7HtLu83DOL13erdh8xxTENGgLN5MJHWBI/JytFDatjqqzFeA13UVDDols=@ietf.org
X-Gm-Message-State: AOJu0YwluBW7J9hVfARcuiDIVKKCVeVGXtfpdu/tWTFsuzxohxWri0Hz n9Fpa0ueWa1RHb+fS4tR5qA1QQJwfqjHn6GPsqxWVxQtqFhZf+JZqz+92cICbdLV427/lBpznuk C10IS0TANMx3fhTWSf7yaodAs6hqDfQLzlVTn6Zde
X-Gm-Gg: ASbGncuy63Yq+EvRadJymA3Fq2spCqZU6ij7N8wRfzsYXYCWLfKBTIA6NF9YTa4VYux pF6x/cja4iqMAKzBvXNTSLU4q+vso84o7oeFe0vK6PyRmXR7sEAEXyRRmzt6m6A0EbgFJwQRX/W lQz2rfRyBqDrIlWaJltRSiD80Ugnh6H00mrbOkKTD4BroSszpBNQW+7ksSKEmgSQNiSN6pWLFXI Djn6rqPQQSg82bazJJe2jO7ueODUGMx8Bdvo2DnkYxkRBYSu5w6fm8VrjLpvIOB/7XuyjU=
X-Google-Smtp-Source: AGHT+IFFKSp/Qp4Gm58dtEfrLtav3QhAdoiNrUk5Br2IurKUFfYgMbXYhb4KpXHX8JTjr3eqH22LouecrjPTy75oJgs=
X-Received: by 2002:ac8:5fcd:0:b0:4e8:b4d1:ece2 with SMTP id d75a77b69052e-4edf208ade7mr24308061cf.18.1763081683327; Thu, 13 Nov 2025 16:54:43 -0800 (PST)
MIME-Version: 1.0
References: <CABcZeBN1XgONPWM-mG=jT_FZnyDkZomoswjzqAZLKwr-LxGH=Q@mail.gmail.com> <LV3PR01MB867317D029908D40EDC2B12BBDC0A@LV3PR01MB8673.prod.exchangelabs.com> <CABFYohjzCYO+5bh2f3ff0edCVQNkeAm9TgMSZu68ZFFLeu+RQg@mail.gmail.com> <CAMzqgox9by5L6HP76vyrjbzzZYWUs4Rea6O-BA4EOGm_G9fw4w@mail.gmail.com> <CA+caGh_2K0LwbxT3kXY9grh5C9M2FLZ9Yg7TKOouuz2Jm24NPg@mail.gmail.com> <CAMzqgoyA78bHF+GUq+AN3kj2JB1MUv5CqpAz_Y+9hTcdxO7ETA@mail.gmail.com>
In-Reply-To: <CAMzqgoyA78bHF+GUq+AN3kj2JB1MUv5CqpAz_Y+9hTcdxO7ETA@mail.gmail.com>
From: Bryan Newbold <bryan@blueskyweb.xyz>
Date: Thu, 13 Nov 2025 16:54:32 -0800
X-Gm-Features: AWmQ_bnPTnevZvmZwd_Ec3ue-DVD3hLkCXa32xW_e3ZTBvPgRSLgjrBcxR0UUOA
Message-ID: <CABFYohgOyVw=Oibg1X5N0L1AjD3u-7MiCZGt1ThhbY+Pkhuj5w@mail.gmail.com>
To: Orie <orie@or13.io>
Content-Type: multipart/alternative; boundary="00000000000071ebf9064383718f"
Message-ID-Hash: W5KQVNPHMQ6NALRNHOVUNS4JTZP7VY5T
X-Message-ID-Hash: W5KQVNPHMQ6NALRNHOVUNS4JTZP7VY5T
X-MailFrom: bryan@blueskyweb.xyz
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Ryan Barrett <public@ryanb.org>, Bryan Newbold <bryan=40blueskyweb.xyz@dmarc.ietf.org>, Justin Richer <jricher@mit.edu>, Eric Rescorla <ekr@rtfm.com>, "atp@ietf.org" <atp@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Atp] Re: Basic Objectives/Requirements
List-Id: Authenticated Transfer <atp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/atp/PadiopZ401V2Un3wQ8dZpPxrKcc>
List-Archive: <https://mailarchive.ietf.org/arch/browse/atp>
List-Help: <mailto:atp-request@ietf.org?subject=help>
List-Owner: <mailto:atp-owner@ietf.org>
List-Post: <mailto:atp@ietf.org>
List-Subscribe: <mailto:atp-join@ietf.org>
List-Unsubscribe: <mailto:atp-leave@ietf.org>

On Wed, Nov 12, 2025 at 2:09 PM Orie <orie@or13.io> wrote:

> ```
> *Note that neither the signature itself nor the signed commit indicate
> either the type of key used (curve type), or the specific public key used.
> That information must be fetched from the account's DID document. With key
> rotation, verification of older commit signatures can become ambiguous. The
> most recent commit should always be verifiable using the current DID
> document.* *This implies that a new repository commit should be created
> every time the signing key is rotated. Such a commit does not need to
> update the data CID link.*
> ```
>
> In the context of the DID standard, there is no way to know "which key is
> the current signing key".
> A DID Document may have many different keys, each for different purposes
> (assertionMethod, authentication)... and they can come in all different
> kinds of formats.
>

Indeed, DID documents are flexible. But there is a clear way to pull out
the specific key used for AT repo signing, described in Section 2.3:

---
The signing key for repository commits is specified within the DID
document's verificationMethod array.  The key entry must have an id field
ending in #atproto.  When multiple possible verification methods are
present, implementations must use the first valid entry and ignore
subsequent ones.  The public key must be encoded using the
publicKeyMultibase format as specified in [CONTROLLEDID].  The signing key
must use one of the signing algorithms described in Section 2.6.2.
---

The text about not indicating the specific key is getting at the fact that
the information in the DID document can change over time. There is not
(currently) a fingerprinting or versioning system that might clarify that
better.

Other parts of AT currently use additional keys. For example, the
"labeling" moderation mechanism (which would not be in scope under the
initial charter, but could be included later down the line) uses a
verificationMethod with id '#atproto_label'. Details at
https://atproto.com/specs/label#signatures

If we consider "account" to be equivalent to the JOSE/COSE concept of
> "iss", then much of what we are trying to do with commit verification could
> have been:
>
> (account) -> (public keys)
> (signed commit) -> (account and key used to verify)
> ...
> (iss) -> application/jwk-set+json / application/cose-key-set ... ( current
> "account signing keys" )
> (iss + kid) -> application/jwk+json / application/cose-key    ... ( the
> specific key that was actually used to sign )
> ...
>

Yup, there is a strong analogy to "iss". The XRPC component of AT (HTTP
APIs) has a concept of "inter-service auth" using JWTs, and it includes a
DID with fragment to indicate a service type. There is a fuzzy concept
there about connecting typed service endpoints (eg, a URL) to a typed
verification method (eg, a public key). Details:
https://atproto.com/specs/xrpc#inter-service-authentication-jwt

--bryan