[Acme] Re: I-D Action: draft-ietf-acme-dns-persist-01.txt
Henry Birge-Lee <henry@crosslayerlabs.com> Fri, 24 April 2026 17:34 UTC
Return-Path: <henry@crosslayerlabs.com>
X-Original-To: acme@mail2.ietf.org
Delivered-To: acme@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id B58BEE28A345 for <acme@mail2.ietf.org>; Fri, 24 Apr 2026 10:34:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1777052055; bh=muhVfXL7XdBlfY6xr4f6BlZFUi36aXXHDL83mi6Tm+c=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=O0026EEvcaN4Ul0jLrQmI3B4vl8BtT64ijtERjOC+cS/A/mDaRMcmxYIDdkDMMNkE 7H0awUKokHzQog+OeqOgbrUVE+TVwCOqvjVxB7et0zt+JNBEuuJiKYb42oGFN1sOEV tgw2LDaWbMVisLZh6QMdHckUsb1I5ucV43ipgvbg=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.098
X-Spam-Level:
X-Spam-Status: No, score=-1.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, BITCOIN_OBFU_SUBJ=1, 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_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TVD_PH_BODY_ACCOUNTS_PRE=0.001] autolearn=no autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=crosslayerlabs.com
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 a_p1YHu25_Tq for <acme@mail2.ietf.org>; Fri, 24 Apr 2026 10:34:14 -0700 (PDT)
Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (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 ABAE1E28A33B for <acme@ietf.org>; Fri, 24 Apr 2026 10:34:14 -0700 (PDT)
Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-35691a231a7so5655588a91.3 for <acme@ietf.org>; Fri, 24 Apr 2026 10:34:14 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1777052048; cv=none; d=google.com; s=arc-20240605; b=KsWsn1lxu3p97Tf2YjlBIY+7oYR/gctws96r1krLKj6jgINDc32sJHmE6vVqVFfCtG qufjFhfQzmW0Zfyanl6C+9fzVoyDyjIRmsMpMPz7CI75D1wI1/2z6UYP8ODZ4JClaQjK FZIEcnAultw3a00p+9DqDOJi70xigDfdUvxbvYutLCzQ2VRWVv5qWzez1pmgoJBiNgNl Y69FdX3wPfhTGTSoSkjubf0Sx3VDO9xNVaH2TYdURcNivUVxFCCY4FVv6BXtw2KS1LJW 10ajsQtpZbB1gVphC+2ALSa4P9RgsbFrMmNRzSbu0v1pUkIpQreZ2PNijCEItxbyc+II ucbw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=hI9kKXU9dXnxKSRWxssVLOa4SWOEqUplglkc7AWh1uE=; fh=OyxlA0Y/KG5e9VE81KzTIQPKKuHINT11jTps8uzNlbw=; b=HmPH2gPQ7mMxNBYcI8rqNwde9iJDyGEiIG0xW1X9eFMBwk70quUoT42EpIlvTpCBZ6 fo6YFYZvcJ3eeqdFsH3uubQZDFdG9bVhH6Unvg9l4eNAj88Ku3QsQtSsZ9rgjFVB4yFu dy/XSF8nh3RwMQ+CTKaMMUAEMMWsBVu5FuMtSjJm8xNHnAcGB69yLZr14P67wbdLRCjf fXhYGUzRWfNxjjM8SAzw61rpqd5fWpC4BSerxciUYYHLX/cS3LnXFJEizyadqGYyF04G DtoOQRShCzTuAAXZFP6X1cuLM9eiaWg+AXFqhCNnY+uZxniZOoH96sMXPMztcr8m1OpC eacg==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crosslayerlabs.com; s=google; t=1777052048; x=1777656848; 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=hI9kKXU9dXnxKSRWxssVLOa4SWOEqUplglkc7AWh1uE=; b=F+9D96rLL7X5NOUfjjh1QuLaLjGMHMk9KC66v7/DOGMifOBh6qbw2p+lVz1pcRHjdQ NBXYINGapyNZtSREvL/fZbr/QOpGlAyh7Wuc8qBOXmpP1ZkqquekV/K2v+Rtg7PTzy9n 3DRTmxwGCBkWS9vMsDEUj0Iz8/11ZIS4N7lCj2MBIzSsIrZJyq++t7R9Ys6Jez5sXyPC 7hjhGBdhBiIPW3qrPc6h2TjsTFTQxtqqFjV7CwD09c9ri6okPOOcITv1PxB2yF2B08m0 8bnyv0F/AbAnj1mKx7FwCqawX2Gd+AUe25X3nNGdwxVtUi/MfyAC8Nl9C3ODPBbj/Dyp UPAA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777052048; x=1777656848; 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=hI9kKXU9dXnxKSRWxssVLOa4SWOEqUplglkc7AWh1uE=; b=NxOSyYrCdp1gXabX8ThcPH+cegKjdhU+Cx6bMrKUJ1zI3bEglRa9KdnnroC0MjN/vJ CLQbiPDXtrqQyOjdHySljbDRbs/Hr3t4RBaHw2erKaigkBI3ttV4KHQUW4a+ClAvrvAA f6WJFB2MxHhEq2ALVcnkS9N/58hO2k3h7CCUhA0RJXC7qcZ84mzA76SJm+OWCS7y0gX1 1mK3IUP0nJiUACZMCR+e5tSst4cIvXbMzePrPCmNCwasa8gSiKPdh5wouMM5U6mHbG/N fjtvCLWhtUo2SGyMW8P+zNqTaGdLL/bkqC55TlMACCQsCnQZiwHWKFv+K4ffmlpZgxDW T27Q==
X-Forwarded-Encrypted: i=1; AFNElJ8pD8vdtR2hZNdsfNyEadnqtstbRigeik3hAbfdJ2oHoQvDJpOrZ5ZPQCbNC7AixDeMss13@ietf.org
X-Gm-Message-State: AOJu0Yw9g4nN321ENu0zt47/CKu7foV3dPyE0fG9URY1jyExhxz4aWa5 NvefO4QubK/qVB0Lyh8aAJfo0VRgZy4ao7WB2d/cP3JNqMIKUpY+8jqr5DT9NYHixc7oOekkw8n yTLsKl4MawRMIZaJ+rdF/gZDBT+Idkv7LcIu/kLqRvQ8=
X-Gm-Gg: AeBDiesTSlHOpYdd8ODly+GGtCsQ8NbRDQcX8wbCQIQnhUxTkppoFRi3wJdJ8qxZoJY EaEbe61wKtD5KGCwvZvTOBkazGPnUo0GdvTkKwB32sMl/lY48xGJBTL6eTuUk+eZl8s+2w3l16i W+mQXDclrUaNvTsCAM/O9WWBoDls9qfWV2kCuS6FGUL6p3+D9lykBx7JNhjcQG2HXBf1MHRPJRA VvS/smk2AQkZaaxrNrof/ZCI322iNxTfAmsHPMuKm2nAUS7Wmu107eEslU06WrsSA4AImtLME8i +ewvqCQ6TKNFilfnBngxwUeceP3YAFFewPPI/ciOGbo7cefhu0ZRLh/QnV3al2RX16ZUrH1rnir WDUbx7LbUe4FRb+icvVZ9hXBaPylETpZPGfBKQmQLwwQpYLGOduyToIp/YaT4Yo29C+Gu
X-Received: by 2002:a17:90b:5865:b0:35d:b00a:3c54 with SMTP id 98e67ed59e1d1-3614049447emr35955982a91.22.1777052048026; Fri, 24 Apr 2026 10:34:08 -0700 (PDT)
MIME-Version: 1.0
References: <177431800159.586.2629462791471129966@dt-datatracker-5775bcb475-pnkww> <2e64401b-d4b1-4670-a825-1e2f3ed0d091@gmail.com> <1CBE8462-924B-468D-BBB9-C264C0D9FB09@heurich.com> <CAKZgXHpBFha7Ruw_hOXEJW9KsNRu-EgB+3_JFsuB5gesTzv9eg@mail.gmail.com> <6bffeb0b-f567-4ac2-8278-1833b64b0e35@gmail.com>
In-Reply-To: <6bffeb0b-f567-4ac2-8278-1833b64b0e35@gmail.com>
From: Henry Birge-Lee <henry@crosslayerlabs.com>
Date: Fri, 24 Apr 2026 10:33:56 -0700
X-Gm-Features: AQROBzDNmsodOKBlDRBpFA72u0VdV7z0qL6FUiG1mpQ4xRLy3gSC19syt-4lKKo
Message-ID: <CAG0-MR8Hv0bw4BMNQTjS7Z=bYdkem65LN4+Q-Yv0mctzdjUqvw@mail.gmail.com>
To: Seo Suchan <tjtncks@gmail.com>
Content-Type: multipart/alternative; boundary="00000000000011fc8b0650382c69"
Message-ID-Hash: KE6ANCMKE42OOWCV3MKRS6GSXNAWAYCG
X-Message-ID-Hash: KE6ANCMKE42OOWCV3MKRS6GSXNAWAYCG
X-MailFrom: henry@crosslayerlabs.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-acme.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Mike Ounsworth <ounsworth+ietf@gmail.com>, Shiloh Heurich <shiloh=40heurich.com@dmarc.ietf.org>, acme@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Acme] Re: I-D Action: draft-ietf-acme-dns-persist-01.txt
List-Id: Automated Certificate Management Environment <acme.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/acme/gS9221XOH1_kshm5Nv4MUpVJuYE>
List-Archive: <https://mailarchive.ietf.org/arch/browse/acme>
List-Help: <mailto:acme-request@ietf.org?subject=help>
List-Owner: <mailto:acme-owner@ietf.org>
List-Post: <mailto:acme@ietf.org>
List-Subscribe: <mailto:acme-join@ietf.org>
List-Unsubscribe: <mailto:acme-leave@ietf.org>
Hi all, First regarding Seo's point: I have spoken to several other CAB/F participants about these types of privacy-focused account URIs and everybody I have spoken with is in favor of allowing this. I would also say that the general consensus that was present when Slaughter drafted the CAB/F ballot and (has to the best of my knowledge) persisted since is that the current language does allow these types of techniques. "identifying" needs only to be done by the CA and the schemes proposed here are sufficient for these purposes. Mike: you take a very IETF purist approach to this (which I appreciate). I will say that we are not the original sin here. The model for this approach was based off of RFC 8657 which, if it were to get used in mass, would create his same privacy leaking channel. I do think that the privacy conversations are slightly more relevant on this draft as we are introducing a mechanism that could save domain owners time and has the potential to see much larger adoption than RFC 8657 which was always an additional security mechanism (domain owners historically have not turned on a lot of the "extra" security features available to them). My overall stance on this is that the system you propose (SHA256(accounturi || domain_name)) is the logical recommended practice for avoiding this privacy issue and may be worth mentioning in the draft. I have had some CAs mention they would prefer just using a CA-side lookup table to avoid the technicalities of properly computing the hash, but I personally don't think this is too challenging. There is another interesting element to including this hash mechanism in the draft. Many CAs act as if RFCs (including those not referenced by the CAB/F) have implications for their compliance. This attitude I think causes CAs to prefer RFCs with as few algorithms specified as possible which creates the least compliance risk. I don't expect the WG will be particularly sympathetic to this stance, but I think its worth mentioning as compliance issues and overly-complex standards can cause real damage in the CA ecosystem. As for: does SHA256(accounturi || domain_name) need to be a mandated approach? I first don't fully agree with the "fail open" point. If a subscriber chooses to use an anonymized account uri there is no way to downgrade that to break the anonymity. I do see the point of path of least resistance and CAs will probably just operate with the default ACME account URI and create this leakage channel no matter how many security considerations we put in. However, I sort of see this from a broader perspective: 1. Consistency among standards is important. RFC 8657 already introduced this (including use of the traditional account URI) and the syntax of this record is largely copied from that standard. I have hesitation implementing anything that would make RFC 8657-style records invalid in this context. There is a security pro to this as well that some could recommend copying a dns-persist record into a CAA record for added security and this could cause an uptick in RFC 8657 adoption so long as the standards are compatible. 2. Simplicity of standards is important: I expect many people will upload this record by hand. Its not too hard to find the ACME account uri and then manually construct <ca name>; accounturi=<account uri from ACME command>. As soon as we put in a hashing requirement, the amount of effort for this manual construction goes up like 10x. Have you ever tried to validate a NSEC3 record by hand? Its doable but a real hassle and you never really know if you got it right until you try it. Obviously simple tooling could help with these records but if there is a way to keep them human readable and human writable I think that is preferred. 3. Are we really fixing anything? The CAB/F ballot already permits normal account URIs for CA subscriber accounts. Making this ACME draft mandate hashed account URIs doesn't fully close this channel. Also, if you are concerned about people taking the easy way out, as long as non-ACME supports "easy" account uris, people might just use ACME less to avoid the hassle. I normally target security and privacy that is comparable to the broader ecosystem a technology is embedded in and here there are two precedents that do not have this level of security (RFC 8657 and the CAB/F ballot). Thus, I have some hesitation forcing applicants to use the hashed account URIs, but I am open to including this technique in the draft and possibly replacing the CA lookup table approach. I still think good old simple account URIs should still be accepted. Best, Henry On Thu, Apr 23, 2026 at 8:32 PM Seo Suchan <tjtncks@gmail.com> wrote: > 1. ACME accounturi wasn't required to be random.: current Let's Encrypt's > accounturi format is just a counter from 0 for each accounts it registered > after https://acme-v02.api.letsencrypt.org/acme/acct/ , so it's trivial > to try every account it have if there is a match. > > > 2. CAB side of persistence dcv requirement have this paragraph: > (3.2.2.4.22) > > can said if outside observer can't know which account it points to > > >The issue-value MUST contain an accounturi parameter, where the parameter > value is > >a unique URI (as described by RFC 8657, Section 3) identifying the > account of the Applicant > >which requested validation for this FQDN; > > on could say if 3rd part don't know which account txt record it points to > that isn't 'identifying' an account. I think we should add this anyway but > I thought I should mention this. > 26. 4. 24. 12:16에 Mike Ounsworth 이(가) 쓴 글: > > Hi Shiloh, > > > On the privacy point, I think the right approach is for the CA to issue > distinct opaque aliases per validation domain name, or per small group of > domains, rather than reusing one visible identifier everywhere. That avoids > cross-domain correlation without needing to change `accounturi` to an array. > > I do think that Security Consideration section 7.2.2 is well-written and > clear about the benefits and risks related to using anonymous aliases here > -- that CAs who care about privacy issuing to subscribers who care about > privacy should use the anonymized alternative URI scheme described in 7.2.2. > > But I think the point being raised here is that the mechanism described by > 7.2.2 is fail-open; ie if a lazy CA uses non-anonymized URIs here, then the > subscriber doesn't get privacy, and that's it. In particular, as I > understand it, the ACME WG would be building a mechanism into the ACME > protocol that leaks extremely publicly which domains belong to the same > ACME account. > > Reminder about RFC7258: > > Abstract > > Pervasive monitoring is a technical attack that should be mitigated > in the design of IETF protocols, where possible. > > > So I think it's worth putting our thinking hats on about whether we can > design the acme dns-persist-01 mechanism so that unique non-linkable tokens > are baked into the protocol. For example, if the client constructs the > token out of pieces of the order object, such as SHA256(accounturi || > domain_name) or HMAC(domain_name, accounturi). In practice, accounturi is > basically a high-entropy secret, right, so salt it with the domain name and > you've got something that's unique per domain, easy to construct and > validate, and into password cracking or bitcoin mining territory to > de-anonymize. And now, the laziest possible CA implementation is to compute > SHA256(accounturi || domain_name) at the time of the neworder and stick it > in a lookup table, and now the behaviour we wanted in the first place is > the "short-cut" instead of something we have to beg for in a Security > Consideration. > > (that said, I'm not super familiar with the specifics and motivations of > this draft, so I'd be happy if I'm off-base) > > > On Wed, 15 Apr 2026 at 13:36, Shiloh Heurich <shiloh= > 40heurich.com@dmarc.ietf.org> wrote: > >> On Apr 4, 2026, at 01:17, Seo Suchan <tjtncks@gmail.com> wrote: >> > >> > accounturi in 3.1 challenge object need to be arrays of string not a >> single string to be used to be able to give any alternative uris: currently >> there is only one choice for client. to actually able to hide record we'd >> need something per domain name: hmac that uses account publickey as shared >> key and domain name as message? >> >> I think this raises two distinct questions: >> >> 1. Does the challenge object need to carry multiple acceptable >> `accounturi` values? >> 2. Does the current alternative-URI text provide meaningful privacy? >> >> My reading is that an array is not necessary if the intended model is >> that the CA tells the client the single `accounturi` value it expects in >> DNS for that validation attempt. That value could be either the canonical >> ACME account URL or a CA-issued opaque alias for the same account. In this >> model the client does not need a choice; it just uses the value from the >> challenge. >> >> I agree that the draft is not clear enough on this today. The current >> text about the client verifying that an alternative URI "identifies the >> same account" is confusing. If the CA provides an opaque alternative URI, >> the client generally cannot verify that mapping independently and has to >> rely on the challenge object. >> >> On the privacy point, I think the right approach is for the CA to issue >> distinct opaque aliases per validation domain name, or per small group of >> domains, rather than reusing one visible identifier everywhere. That avoids >> cross-domain correlation without needing to change `accounturi` to an array. >> >> I do not think an HMAC construction using the account public key is the >> right primitive here. HMAC requires a secret key, and the account public >> key is public. If a CA wants deterministic per-domain aliases internally, >> that is better treated as a CA implementation detail using CA-held secret >> material, not something the client derives. >> >> My preference would be to: >> - keep `accounturi` as a single string, >> - clarify that it is the specific value the CA expects for that >> validation attempt, >> - clarify that privacy-preserving alternatives may be per-domain opaque >> aliases, and >> - clarify that pre-provisioning without a challenge uses the canonical >> account URL unless the CA provides alternatives (e.g. out of band). >> >> If there is a concrete case where the client needs to choose among >> multiple simultaneously valid identifiers, then an array may be worth >> considering. For now, this seems more like a clarity problem than a >> field-shape problem. >> >> Shiloh >> >> _______________________________________________ >> Acme mailing list -- acme@ietf.org >> To unsubscribe send an email to acme-leave@ietf.org >> > _______________________________________________ > Acme mailing list -- acme@ietf.org > To unsubscribe send an email to acme-leave@ietf.org >
- [Acme] I-D Action: draft-ietf-acme-dns-persist-01… internet-drafts
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Seo Suchan
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Shiloh Heurich
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Matthew McPherrin
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Shiloh Heurich
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Seo Suchan
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Shiloh Heurich
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Mike Ounsworth
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Seo Suchan
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Henry Birge-Lee
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Mike Ounsworth
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Shiloh Heurich
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Sebastian Robin Nielsen
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Henry Birge-Lee
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Sebastian Robin Nielsen
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Henry Birge-Lee
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Mike Ounsworth
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Shiloh Heurich
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Seo Suchan
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Sebastian Robin Nielsen
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Seo Suchan
- [Acme] Re: I-D Action: draft-ietf-acme-dns-persis… Sebastian Robin Nielsen