[OAUTH-WG] Re: SD-JWT-based Verifiable Digital Credentials (SD-JWT VC) -- Shepherd Review

Brian Campbell <bcampbell@pingidentity.com> Tue, 21 April 2026 11:58 UTC

Return-Path: <bcampbell@pingidentity.com>
X-Original-To: oauth@mail2.ietf.org
Delivered-To: oauth@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id A9721E00E5BF for <oauth@mail2.ietf.org>; Tue, 21 Apr 2026 04:58:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1776772697; bh=l+gP2TKoztuThc7z635qHKUHHS4/V4g8yYZcb7RS9h0=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=E/jb4xmVNLvn9NWZxPtFnYORqc6mnnywRMH1EvRiZJG+fWru5PET8PPPDVnIyBonR mBVYfXmIvpZwa5l5AmMK8yhxBwwsWUf/k1602S7f9Emcl9FFkoDUMNtsTq/WElshcC H2p/33qM7q/FJFUEbbT5+W+JcXN6LmHnUjBT39gE=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -0.854
X-Spam-Level:
X-Spam-Status: No, score=-0.854 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, NORMAL_HTTP_TO_IP=0.001, NUMERIC_HTTP_ADDR=1.242, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=pingidentity.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 srj6eqfXQQoo for <oauth@mail2.ietf.org>; Tue, 21 Apr 2026 04:58:16 -0700 (PDT)
Received: from mail-vs1-xe29.google.com (mail-vs1-xe29.google.com [IPv6:2607:f8b0:4864:20::e29]) (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 9FD7EE00E5B8 for <oauth@ietf.org>; Tue, 21 Apr 2026 04:58:16 -0700 (PDT)
Received: by mail-vs1-xe29.google.com with SMTP id ada2fe7eead31-612d8a59ca0so2746195137.1 for <oauth@ietf.org>; Tue, 21 Apr 2026 04:58:16 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1776772696; cv=none; d=google.com; s=arc-20240605; b=jxwI5/ArFjtW7KV3yvHTLBk6cuxh/AwdFvhJAocfheg/WQ9bbV2fdI8quSZwkrFOJT CT/7xbJUmKq2hj6f90fdH+PpD0cB27zb6nu9ymWT3e9NxYV4PI6fiRTwzNtCO0vk4oOp QttysAcswr53hJxqlxJZIggzNQPAUntsiRz6gdx2fdKWMgT0ImzI5ckfZsdKbOfel4VF /IqsN59Ktas3sbpWwBk0STnn62+HivjJ/36HylsUO5IsfPZ+o+wldMi33GSF3llt+966 3lQSSEiWJtsnlPMIk/seSgwEOS57neQ++wD+/O63AjkrUPt4t9iMv2S4gtkrDSwYJlUr iGqQ==
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=l+gP2TKoztuThc7z635qHKUHHS4/V4g8yYZcb7RS9h0=; fh=l3Cg1nTgrksy+gWAQjSF91lKXqfMe8anR+qWb03j8gM=; b=TxzvjqUOI8vD36CkaK0n5wazenG42NH8Fvha9wTbwx15G0R3HuRJYb1WUrzDmyGcKV a+0iMqfZx5PJfS95BIaCpiVBr7KIkqUK9SVbZTrEr1NdEtQwu0wDv3QMEeg5Tb5hLkD+ qV2/YJ487IcBIyUjeKI+w1zps9E/rQ9IG6ZkRNwm8qlt1ALS2s2CJ0+4c3AJqrmAbWPA kR5TFBMf7Fvnd7iG/C1J9ecHdJ3dNDWUn0bQ7h4N0k8TQYxpIIZ0eVsnzKGx98sZQf2T FvTZRjQA4uIVndyiTxRMH0KrfMNE/XP8gP/hLmmztlEoNOPcBJRS5vBIjFuEheFv+qyc q0TA==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pingidentity.com; s=google; t=1776772696; x=1777377496; 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=l+gP2TKoztuThc7z635qHKUHHS4/V4g8yYZcb7RS9h0=; b=a2q4NDpr5XWxxKulqSyk0ZiXK7ljsX7jH7KNHvF3Huvqr6DmBccao6bQGK41TTOXvf 3ohLsi0+MbHr7YrC5Y1phaC+oVYDW+7XSrbx4naGDpKS1KOTdXUEICf/draT47AWnT4s X1Lv/VJ7IU7qvTZyxxKOu9JrUW5tzjnTHJLL4KcMdclBhnSY4PEEpv/ZwiHDVXB1axX1 U1UwLDm7xdVIOrfJ6S1l8FAkp4gipitoikaX/546YeveK0W1UGTchMWTEB9RhFOQFXyK HoePoEOSWf5R6b6B//2WRZ8EpB+pA2hb1qTw9+xFb9nKsA2WJWQVKq1e8x+F2/YncXPa fCJg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776772696; x=1777377496; 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=l+gP2TKoztuThc7z635qHKUHHS4/V4g8yYZcb7RS9h0=; b=pEHYgFhNG3HH2LfoqINEtbdHG5bc6+8Ct2SWgZ9OLTuCptLWUKsKsSI1is2BXbBO7Y MUl06LMr49GMDg6spEDMMgLu4Ab7nc+Nu98zQ4KHZ4BEnqe22hGuTLEyyycdIdy1Llut +cVFhoMCsPlPWHUDj1kiLJ17aPbEssmpQzJYLDXIDWX5mCOySs/fuKU6U/spNcFDMFqB Ul50wpK0Iowstk0Qa5RFxjEqEVtNaSewhlDtM3prb6dfG1VNgA8QmynbtwvAH8t4WEoe bP4cGpM5i0tXM8xAa/yV/IsN0esoZbbtaZmTr01FjddjSv2zu6UCjzWps7khUGoOp0hg idDg==
X-Gm-Message-State: AOJu0Yy57fEi0AWUIiGbkDi9uTfr9pZ5lQIqhorkMPRhgvJkhvPkJv54 kYHPz9OtRsX4UjdckSaKyRNBmBFG3WiGy8tzLlk2NZBTFjtWsPAVSCryBFPXY59ErIlfoRswv17 ENiBe6ZlQGaPGqk1jGcXtts1YF+ra+tEbEDC53QbmLe5hLZxBvoZgyN+ZFQDlNs4wYg7+FigArS 77YbmQysMgsumLnJBbZPgaoc26Fs18ZQ==
X-Gm-Gg: AeBDiesKv12HxUW/mOhp/xxsRTEi/GYRPTrcVrq0b0meX6zRadNK29SfepxPeDdmzRt piAuZFsZCH7oFt4Lljq7RcHHrtzHKLQssnM8Fja0MpyNcCVKmUtHwAN02w1iNHHODOHoLD2vZpq CFoZuA3cQABF6Xu5JEqa8eZzN0vEwRwchZ6gv1VgIaQ7E97eSrLywf0xLAvxmc1KvwysyXCxMZW zl5vNdqRKzwzlDaaz3zQAGLpBcNp2aZs7sLi5fx4/4+X1Vz/Ve1EUwYK9ICRvZG53dS3RFgWE4M jLGr6LyvHSSu1rDuJpPWPK5F7r3JgniEh5tgaTuRCWaH1vqjaAJEgZt8qrKgspg8OkGY1oy0YNg t8gZjj0ktUPH1VjkpapC4mVBrb6xw9x3dzINI
X-Received: by 2002:a05:6102:419f:b0:604:f029:224c with SMTP id ada2fe7eead31-616f4d6abf2mr8272126137.8.1776772695838; Tue, 21 Apr 2026 04:58:15 -0700 (PDT)
MIME-Version: 1.0
References: <ef2507a8-70dc-4f9c-87f0-27b63aea56e0@gmx.net> <CA+k3eCQ9CV8pSmnHB3KTJKKmMY-S5f1r+KQDp_bymS6u6W+v6A@mail.gmail.com>
In-Reply-To: <CA+k3eCQ9CV8pSmnHB3KTJKKmMY-S5f1r+KQDp_bymS6u6W+v6A@mail.gmail.com>
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Tue, 21 Apr 2026 05:57:47 -0600
X-Gm-Features: AQROBzDLrFrKAAJuxQJgftO7RdZMYE0lMbyNU9ND4ywZ0iCIxvibrtZsrCGti0o
Message-ID: <CA+k3eCRiTW4L0gSORTrndbBu5fprm6STGxARybnBV7f4bymaYw@mail.gmail.com>
To: Hannes Tschofenig <hannes.tschofenig=40gmx.net@dmarc.ietf.org>
Content-Type: multipart/alternative; boundary="00000000000061e5e5064ff7217f"
Message-ID-Hash: HJYGZ2LA35DRRVSCF27T3QQJQSFAKKMT
X-Message-ID-Hash: HJYGZ2LA35DRRVSCF27T3QQJQSFAKKMT
X-MailFrom: bcampbell@pingidentity.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-oauth.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: oauth <oauth@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [OAUTH-WG] Re: SD-JWT-based Verifiable Digital Credentials (SD-JWT VC) -- Shepherd Review
List-Id: OAUTH WG <oauth.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/q7yeFe1Z68J1V4GLrcXvSwC8EHE>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Owner: <mailto:oauth-owner@ietf.org>
List-Post: <mailto:oauth@ietf.org>
List-Subscribe: <mailto:oauth-join@ietf.org>
List-Unsubscribe: <mailto:oauth-leave@ietf.org>

https://github.com/oauth-wg/oauth-sd-jwt-vc/pull/405 has work aimed at the
discussion below

On Thu, Apr 9, 2026 at 1:02 PM Brian Campbell <bcampbell@pingidentity.com>
wrote:

> Thanks Hannes and apologies on behalf of the editorial team for being
> somewhat slow to get to this. Attempts at responding to individual items
> are inline below.
>
> On Sun, Apr 5, 2026 at 5:07 AM Hannes Tschofenig <hannes.tschofenig=
> 40gmx.net@dmarc.ietf.org> wrote:
>
>> Hi Oliver, hi Daniel, hi Brian!
>> Hi all,
>>
>> as a document shepherd I have reviewed the specification and here are a
>> few comments.
>>
>>
>> The draft currently repeats the idea that an SD-JWT VC can exist without
>> selectively disclosable claims several times. The normative statement in
>> Section 3.2.2.4 seems sufficient. The earlier mentions could likely be
>> shortened or removed to avoid repetition.
>>
>
> It's an important and maybe not-entirely-obvious concept of the draft that
> I don't want to be overlooked. I'm finding it mentioned in the abstract and
> in Section 3.2.2.4, which seems appropriate. Am I overlooking other
> mentions we could address to avoid excessive repetition?
>
>
>
>> Section 2: I suggest either moving the current Scope text into the
>> Introduction or expanding it. As written, Section 2 contains only two
>> bullets and does not describe the document very precisely.
>>
>> In particular, the abstract says that the specification describes "data
>> formats" and "validation and processing rules", which seems broadly
>> consistent with the document. By contrast, Section 2 says that the
>> document defines "a data model and media types", which feels imprecise
>> and incomplete.
>>
>> The document appears to do at least the following:
>>
>> - define an application-specific SD-JWT profile for verifiable digital
>> credentials (Section 3),
>> - define the application/dc+sd-jwt media type (Section 3.1),
>> - define JWT VC Issuer Metadata (Section 4),
>> - define SD-JWT VC Type Metadata, with separate sections for Display
>> Metadata and Claim Metadata (Sections 5, 7, and 8),
>> - define document integrity metadata for referenced documents (Section 6).
>>
>> I think the Scope section should either be merged into the Introduction
>> or rewritten so that the claimed scope better matches what the draft
>> actually specifies. I personally would prefer an expanded text in the
>> introduction section.
>>
>
> Yeah, agree, this generally makes a lot of sense. We'll work towards
> consolidating the Scope content into the Introduction.
>
>
>
>
>> The document currently explains the "digital credential" / "verifiable
>> credential" terminology transition in three places: Section 1.4, Section
>> 3.1, and Section 3.2.1. I think one substantive explanation is enough.
>> Repeating the background several times adds text without helping
>> readers. I suggest keeping the main explanation in one place, for
>> example in Section 1.4, and shortening the later occurrences to brief
>> forward references or removing the historical detail altogether.
>>
>> The three explanations are in
>>
>> - Section 1.4, which explains why the document uses "Verifiable Digital
>> Credential" and mentions alignment with newer terminology.
>> - Section 3.1, which explains that dc stands for "digital credential"
>> described as a conceptual synonym for "verifiable credential".
>> - Section 3.2.1, which explains the history of changing typ from
>> vc+sd-jwt to dc+sd-jwt.
>>
>
> Generally agree with this sentiment and we will work to consolidate into
> 1.4. But we believe we probably still need some of the compatibility text
> about the media types in 3.1.2.
>
>
>
>> Section 3.2.2.2 appears to restate material that is already covered
>> generically in RFC 9901 Section 9.7. My understanding is that the
>> purpose here is to define the application-specific profile for SD-JWT
>> VC, which RFC 9901 explicitly anticipates. If so, it may be clearer to
>> reference RFC 9901 for the general rule and keep only the
>> SD-JWT-VC-specific profiling decisions in this section, rather than
>> repeating the generic guidance for claims such as iss, nbf, exp, and
>> cnf. This would make it easier for readers to distinguish what is
>> inherited from SD-JWT from what is newly specified by the VC profile.
>>
>>
> Section 3.2.2.2 is not restating material from RFC 9901, it is defining
> the application-specific profile of these claims as suggested by Section
> 9.7 in RFC 9901.
>
>
>
>>
>> Section 3.5: I suggest reconsidering the title "Issuer Signature
>> Mechanisms".
>>
>> As written, this section does not really define signature mechanisms in
>> the cryptographic sense. The signature mechanism is handled by JOSE/JWS
>> and the alg value. Rather, this section defines how the recipient
>> determines the issuer's public verification key and validates that the
>> key belongs to the issuer identified by the SD-JWT VC.
>>
>> That is also how RFC 9901 frames the relevant check: the recipient must
>> validate the Issuer and that the signing key belongs to that Issuer. In
>> that sense, Section 3.5 appears to be about verification-key resolution
>> / validation, or more generally issuer-to-key binding, rather than about
>> signature mechanisms.
>>
>> I therefore suggest renaming the section to something like "Issuer
>> Verification Key Discovery and Validation" or "Issuer Verification Key
>> Binding Mechanisms". I think this would better reflect what the section
>> actually specifies.
>>
>
> Yeah, we've struggled with the naming here and will consider a rename to
> “Issuer Verification Key Discovery and Validation”
>
>
>
>> I also suggest making the trust model distinction between the two
>> defined cases more explicit. The "JWT VC Issuer Metadata" case uses
>> HTTPS-based metadata retrieval and obtains keys from issuer metadata,
>> whereas the x5c case uses an X.509 certificate chain carried in the
>> SD-JWT header and validates that chain directly. Those are different
>> ways of establishing trust in the issuer-key binding, not different
>> signature mechanisms. Both mechanisms rely on the use of X.509
>> certificates. In former case indirectly through TLS usage in HTTPS and
>> in the latter case throught the x5c parameter.
>>
>
> Yeah, we'll try to make the distinction more explicit and work towards
> concrete text.
>
>
>
>> Section 3.2.2.1: The examples urn:eudi:pid:aendgard:1 and
>> urn:eudi:pid:aendgard:2 do not seem appropriate as generic example URNs.
>> Since this text is illustrative, I suggest either using the RFC 6963
>> example namespace (e.g., urn:example:eudi:pid:aendgard:1).
>>
>
> Thanks for pointing this out, I knew about the reserved example domain
> names but not RFC 6963 for URNs. We will change the examples accordingly.
>
>
>
>>
>> Section structuring - Sections 5 to 8:
>>
>> I think Sections 7 and 8 would fit better as subsections of Section 5.
>> Section 5.2 defines display and claims as Type Metadata properties and
>> then points to Sections 7 and 8 for their detailed syntax and
>> processing. In particular, "Claim Metadata" does not appear to be a
>> separate kind of metadata document. Instead, it is the detailed
>> definition of the claims property within Type Metadata. Section 6,
>> however, seems top-level because it applies to the SD-JWT VC itself
>> (vct#integrity) and to Type Metadata.
>>
>
>
> We understand what you are suggesting here but we are not sure whether
> consolidating the sections will have the desired effect cleanly. We'll
>
>
>
>
>>
>> Section 6 might benefit from a more precise title. "Document Integrity"
>> sounds broader than the actual scope of the section, which is integrity
>> verification of referenced documents retrieved via vct, extends, and uri
>> using #integrity values. Something like "Integrity of Referenced
>> Documents" seems closer to what the section actually specifies.
>>
>
> We agree a more precise title would be worthwhile.
>
>
>
>>
>> Additionally, Section 6 would benefit from a short introductory
>> paragraph explaining the purpose of the integrity mechanism at a high
>> level. The current text immediately defines the #integrity rule, but it
>> does not first explain that the mechanism is meant to protect externally
>> retrieved metadata or rendering assets against substitution or
>> unexpected change. A brief overview up front would make the section
>> easier to follow. For example, something like the following could help:
>>
>> "This section defines how integrity can be asserted for documents
>> referenced by an SD-JWT VC and its Type Metadata. For references such as
>> vct, extends, and uri, a corresponding #integrity value can be used to
>> identify the expected content of the retrieved document. If such an
>> integrity value is present, the Consumer verifies that the retrieved
>> document matches it before processing that document."
>
>
> Generally, this makes sense and we can work on that.
>
>
>
>>
>>
>> The draft uses examples in an inconsistent way. Some are explicitly
>> labeled "non-normative" (e.g., Figure 2), some are covered by a
>> section-wide statement (Section 5.1), some by an appendix-wide statement
>> (Appendix B), and others are introduced simply as "an example" without
>> saying whether they are normative or not (e.g., Figure 13). I suggest
>> using one consistent convention throughout the draft, for example either
>> labeling every example explicitly as non-normative or adding a single
>> clear statement that all examples and figures containing sample data are
>> non-normative unless stated otherwise. Intuitively, examples are not
>> not-normative and hence stating that they are not-normative appears
>> redundant to me.
>>
>
> We can clean it up and remove redundancy where appropriate.
>
>
>>
>>
>> There are formatting problems with Figure 29 "Example Type Metadata
>> Document". Add line breaks.
>>
>>
>> For convenience I filed small nits as PRs, see
>> https://github.com/oauth-wg/oauth-sd-jwt-vc/pulls
>
>
> Thanks for doing the PRs. Much appreciated. We will consider them.
>
>
>
>>
>>
>> Ciao
>> Hannes
>>
>>
> Tschau,
> Brian, Daniel, & Oliver
>
>

-- 
_CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
material for the sole use of the intended recipient(s). Any review, use, 
distribution or disclosure by others is strictly prohibited.  If you have 
received this communication in error, please notify the sender immediately 
by e-mail and delete the message and any file attachments from your 
computer. Thank you._