[jose] Re: [OAUTH-WG] New I-D: draft-bormann-jwp-modular-bbs

Brent Zundel <brent.zundel@yubico.com> Tue, 07 July 2026 18:16 UTC

Return-Path: <brent.zundel@yubico.com>
X-Original-To: jose@mail2.ietf.org
Delivered-To: jose@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id D0A5A1123A15D for <jose@mail2.ietf.org>; Tue, 7 Jul 2026 11:16:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783448207; bh=rWITkUzspX6yn8dUxLb2DLd4DQ8zOdlfQKdw898vqWE=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=GbCyFsOtPafrUmHmFOGpH5NXXr+PXCSS98NvctkLYcTcxxBs0GQs971kqkVM0/Yr0 n5GLtLPQE9wMbWAgtVcHo/5REGMTcy1/o7gbQDsJ9SIEE1wffIghu3Du3mRp/laEhm 36kj5CwKP3Eax46c7mbeeoG/ScWcgDLsxZP6f5qo=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 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_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=yubico.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 WHimTq4Fu-FB for <jose@mail2.ietf.org>; Tue, 7 Jul 2026 11:16:45 -0700 (PDT)
Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) (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 1E2B81123A13D for <jose@ietf.org>; Tue, 7 Jul 2026 11:16:45 -0700 (PDT)
Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-5aebf120839so1171082e87.0 for <jose@ietf.org>; Tue, 07 Jul 2026 11:16:44 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1783448204; cv=none; d=google.com; s=arc-20260327; b=gKQzOvDAgem5TZygvFImy/mgloGS6IUhee2AqALvPmFWQv/lMkUL5KEbzf0ZJFuuk8 rYglT2F3jTV04d4as8Wjq/+phQicgkH81i5KixZ6KXdB0ttm+7+RqAnD5ff4nSDHGiA5 DAylrpOfo//IS3x9xd/Tto6uYtKrosNnIYPpP8BpCIlFkqr3ldf/GxyRbIES2ux5bAn1 VexQLPIgwP8IMQUILWh1fkOsj4NaFDsagPzqaBg7wBmuEgJQ9lIAxtbeBlVyrGwybs/1 V5k40huq+ckBAGNX1uGdgxkaX99sN3bQHjYPI7fhP2hCmjFXPTe7ueroLpYh9zCYtEsn cVtg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=7aEz9Gx1wb+sZlJuL/2htZGX2cZxE1XeKgAl0xXOi78=; fh=zlStinR/cumGUXuDT6x1fUeSeNUa0LiXK08TfH6NDrU=; b=XqwLCfC/qEZ3tsrRcQ+jwXhxvxGav9cp3mN2wmkTJ1YKzk+JIx82sVK6FUi5Zb2FD0 jiTFWS5t2Q8SKI7mxCjyT81WBWy1e28Mok0YVa4XwHK6+1u+q/RPozxAAYeyK3fxkkvU DZX2TTIwF4gk0VoxUW7Qd8kUHezNM0dWcyYXqDa7oUkopaYqK4UmHFxFb8Y9uswZ5Fnl JzD0nzuH/huFsN5s8Ar7N1T+tMXlgzrh4kQJwLVMAMtPVgEzlpgJnUvYN3nYNeyjJBkp PnEaOMlRkDxbqJnPRflGrs3XOkc39F6yCGKkeqG/U/h+m0SAgD8kuvdlHQ/h5OkARTcX azKQ==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yubico.com; s=google; t=1783448204; x=1784053004; 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=7aEz9Gx1wb+sZlJuL/2htZGX2cZxE1XeKgAl0xXOi78=; b=DSI8O/R/J/r+dj0GqpnFgH+2DFr5T8c5DO1Avr8zB97RJLcwzViE6jjmVsKH3g76ul oeporpE40/i1SZV0rJXZBVWco683G7/UIBQD0b0A9SGjGLiqvGWgCtq00h/e7HytbPW0 KSHm2WDElasgjTnxVfi54s8bqpTjcrlYvII/xPlh4ZpVnopUFep8q5ssNVWAgg2sqB+b izFblTmbeXyVpvu4fxcCkWTOn3cUPwYLmbPkWrrrzXqrjLaIundmc2qsGf0panJyLYzw KPHh8AmnHNHFRvONHudl5XZ9bfaP7laE7tW5a/pB1sM6E/tD3VMLIDUIj8RnsxXGB4fk Fu8g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783448204; x=1784053004; 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=7aEz9Gx1wb+sZlJuL/2htZGX2cZxE1XeKgAl0xXOi78=; b=AozXp6zaNMSnUNH3U4lIGYvXViHhUMU2+24NKtOg+ktSWkmGH3/bsFqvVsTxaLWBK2 njXw8zEr2R49GkFGdAF43GqAThhjecMpxS6uzy7lipR4BN5VNPYRtTx10E3p1nN3Vjvd HzBFEzNftrkm6tva1oy5MFbb9hc2h4HJC7gn8a1cEnnv221N8JT+8+D9ATR9h06v5FJ+ iStf+tX4fpa6iKargypFEUm8ZPtFwF6PSYX73tTsm/VKMqLHcJlH5CshwOOagWvtnBEg EhPv9AfcAMTJYJDRtrlBa6sjS4pwuTQnjNSFG7oz8NuitDShau20nAstaL1Eil8g338T g4bg==
X-Forwarded-Encrypted: i=1; AHgh+RoF14EtzVk9WqPk5yhTXkWecEB7Hwf0jdOs8IcB38I0QTkVOozn8XevDVnAGFYhGgqYgksG@ietf.org
X-Gm-Message-State: AOJu0YzXIYVEZN72MNxSe0ftV0njxpr56SQqxJsEwHfux1VtkyRuT8ES X5ZhQmbEdgCAYbfaJhH7sp6pamWgr720vjrhUd3GrO3NggZLDOICxKUPlPbKHlzIDWdqmysEISf 54Et4GXE9L1Gaev3ARLrV9ScD1YW6dv6MimqcJwXBfz5ZM7bo0g7SlqHqHw==
X-Gm-Gg: AfdE7cl+XUVMQZNL62PMLEfULDfT206+axOBBE6CcVhAdN9mMuZ056KQQuMAR7TejKJ 77d+IoFCUwIXnaCxC2Sp9ha2Oh2aBkCe1mNfqbZdWAYA6Yp2WGl2BIgV8QzJwXkl1lA5N5d7Hi9 qGYwzJokFchTofPtbE5aWKJZ5RA0A8JO8rguWZSEKLrdTPF9hi8sSP5WfDm00p7aM1JwSZCBHfV DctjaF8ZWhztRxwek17gwC9xHNMUtXYjGPkgzPWkCoayhKW+5lh2ISY8zC8Wmr/TvZxoNjBhB+r MBEWFnJL2mO3dRc/03O/PQRQhhRvSGLOphbZm+imEhW1oExvkkgJQ5U=
X-Received: by 2002:a05:6512:3e0d:b0:5ae:d72d:1000 with SMTP id 2adb3069b0e04-5b00ac66f9cmr815165e87.1.1783448203530; Tue, 07 Jul 2026 11:16:43 -0700 (PDT)
MIME-Version: 1.0
References: <178283255465.2087397.4256787017301844320@dt-datatracker-f9b87776f-xzl65> <00CEC1D1-A817-4517-9B10-74B26D6D2F39@gmx.de> <0AE12CC6-108D-4F55-BEA4-B16EA7642FB4@alkaline-solutions.com> <10CD5211-3B69-4B29-B10D-2E6877F4C54C@gmx.de>
In-Reply-To: <10CD5211-3B69-4B29-B10D-2E6877F4C54C@gmx.de>
From: Brent Zundel <brent.zundel@yubico.com>
Date: Tue, 07 Jul 2026 12:16:32 -0600
X-Gm-Features: AVVi8Ce143EqhuX4IIRnizChnTDAWwuuKbO1cjgPr5hDtS9x6FKFfh1dsxbZ9n4
Message-ID: <CAP5QTG4VZZinXgfArS7X=cBB-JDN-HjEZmeSUiaU6NzPk9rbcw@mail.gmail.com>
To: Christian Bormann <chris.bormann=40gmx.de@dmarc.ietf.org>
Content-Type: multipart/alternative; boundary="000000000000a5aa0906560964b6"
Message-ID-Hash: MLYDE2AIHX3NCWQGYMS65A7OJEP6JP5E
X-Message-ID-Hash: MLYDE2AIHX3NCWQGYMS65A7OJEP6JP5E
X-MailFrom: brent.zundel@yubico.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-jose.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: David Waite <david=40alkaline-solutions.com@dmarc.ietf.org>, jose@ietf.org, oauth <oauth@ietf.org>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [jose] Re: [OAUTH-WG] New I-D: draft-bormann-jwp-modular-bbs
List-Id: Javascript Object Signing and Encryption <jose.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jose/t1oS9RmJH9PxEt-KdK1MxRVzeKw>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jose>
List-Help: <mailto:jose-request@ietf.org?subject=help>
List-Owner: <mailto:jose-owner@ietf.org>
List-Post: <mailto:jose@ietf.org>
List-Subscribe: <mailto:jose-join@ietf.org>
List-Unsubscribe: <mailto:jose-leave@ietf.org>

I was thrilled to read this draft.
It roughly matches what I had hoped and imagined could come to be back when
JWP and BBS began their standardization journeys.

I'd love to help work on it.

On Mon, Jul 6, 2026 at 1:49 PM Christian Bormann <chris.bormann=
40gmx.de@dmarc.ietf.org> wrote:

> Hi David,
>
> I’ve tried to make the initial design simple on purpose - for a lot of
> these I had thought about more complex solutions, but realised it would
> likely be beneficial to propose a simpler version and discuss trade-offs of
> more complex parts from there.
> It was also my lessons learned from starting an implementation for most of
> the parts of this construction: the current version feels like a somewhat
> natural replacement for business logic currently using SD-JWT VC type
> credentials, while keeping the complexity of the implementation rather low
> (apart from some of the crypto parts).
>
> 1. The new “cmap” issuer header has overlap with the “claims” header in
> JPT. I notice one significant difference is a document
> substitution/structural mapping approach to support sub-claims - rather
> than using a path/pointer primitive to define the name of each top level
> claim or sub-claim, it replicates a claim/sub-claim tree and provides
> positional metadata.
>
>
> This somewhat surprised me, as the sd-jwt vc draft (
> https://www.ietf.org/archive/id/draft-ietf-oauth-sd-jwt-vc-13.html#name-example-2)
> and OpenID4VP (
> https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-claims-path-pointer )
> both seem to use more of a pointer syntax to decompose the document. While
> not yet published, I have been working based on feedback that this is more
> of the direction that implementors preferred, so I’m curious if there was a
> particular set of motivations to go with the “cmap" format.
>
>
> I had called it “claims” initially before I realized it clashed with JPT
> definitions. As I had shown at October 2025 IIW I had also started with a
> more complex design based on a JSON path logic (basically the DCQL paths
> from OpenID4VP), but realized that there was very little real-world gain
> compared to a static mapping at a lot of additional complexity. I did an
> implementation of both and decided to start with this proposal as a
> starting point.
>
> Happy to discuss how to best align between the different constructions.
>
> 2. The scalar encoding is defined as an ASCII decimal encoding of the
> integer value. I have two related observations here:
>
> 2a. When operating in scalar=true mode, I’m curious why this is not an
> I2OSP big-endian representation of the integer value. JSON numbers are a
> complicated substrate for exact integer handling, as JSON implementations
> typically use double-precision floats for numeric values, which both allow
> for decimals and lose integer accuracy above 53 bits. A binary
> representation seems like it would decouple from these issues.
>
> 2b. I’m curious whether it is worth limiting scalar claim values as
> defined here to uint64, when they are meant to be disclosable data.
>
> I have not designed these proof constructions myself, so I may be missing
> something here. However, my assumption is that there may be an efficiency
> case made between these two points: a proof over a bounded binary value may
> be substantially simpler than a proof that can span the scalar field and is
> currently allowed by the current decimal encoding.
>
>
> In general, there is a bit of discussion currently happening where to
> define the scalar encoding and how to limit - I tried to make choices that
> are easiest to implement, but my current mental model would be that we will
> likely define the scalar encoding in the BBS blind signature draft and only
> define how to convey that information in the Issuer Header in data models /
> credential formats (since there might also be additional type information
> depending on format).
>
> On the costs for full range: Yes, a range proof over the full range would
> be roughly 4x as costly. We probably want to limit the range, the question
> is if that happens as a general limitation in the BBS blind signature
> draft, or as a policy that can be chosen by the issuer (conveyed via issuer
> header).
>
> On the Why JSON: The canonical decimal encoding fully aligns with the JSON
> serialization of the integer —> BBS message value and disclosed payload are
> identical - otherwise we will very likely run into weird implementation
> problems of conflicting representation of integers.
> On the float concern: the message is the integer denoted by those octets,
> so nothing is ever round-tripped through a JSON number type.
>
> 3. The encoding for the device binding key is little endian, which
> surprised me considering both BBS and P-256 are big endian. Any elaboration
> on the motivation behind this decision?
>
>
> That is the construction that was proposed in the paper for device binding
> and how the sigma protocol currently works on the commitments:
> https://www.ietf.org/archive/id/draft-cllz-cfrg-ecdsa-pop-00.html#section-4.2.
> I tried to touch as little crypto as possible for this proposal (or rather
> reverted a lot of the initial proposal I had on those things).
>
> 4. For decoys, I assume JWP-BBS-DECOY was chosen partially because it
> isn’t a legal JSON Text value. Would it make sense if the scalar=true
> alternative was also defined to be a fixed, not valid value that e.g.
> proofs could be written to check against?
>
>
> Yeah, we should definitely iterate over that mechanism and values. I
> wanted to have a properly defined DECOY value to allow for things like
> “proof all entires in this array” - to allow the verifier to validate that
> all other entires are invalid basically. Once we properly define the max
> range of integer values, I’d make propose to make sure the raw_scalar value
> is out of range (invalid).
>
> 5. Device binding hits a case I hadn’t thought of, partly because I hadn’t
> considered a case for payloads both being candidates for disclosure and for
> commitments - that a conceptual payload might need to be represented over
> more than one slot. Is reserving space at a particular offset (e.g. the
> first four scalars) going to be appropriate? For example, is there a
> potential for a credential to be issued with more than one key encoded into
> it?
>
>
> I had thought about instead defining it as a claim and reserve more
> message indexes, something like this:
>
> “kb”: [0,1,2,3]
>
> But it again complicates parsing logic. There might be other proofs that
> also need multiple message slots, so maybe it makes sense to shift the
> design in that direction. Current proposal was the simplest I could come up
> with that fulfils the use-cases we have in mind.
>
> 6. For sub-proofs, my suspicion is that the metadata/setup would be
> encoded into the presentation header, while the actual proof values would
> be part of the presentation proofs sequence. Is that your expectation as
> well?
>
>
> Commitments are protected via the core proof, we need to figure out if we
> need to lock in the sub-proofs in that one as well (e.g., via the
> presentation header). I left it out for the time being since I wasn’t sure
> and the dangers of not binding seemed not too big? The paper currently
> binds more into the sub-proofs than the current proposal of mine does, but
> that is something I’d probably like to solve w/ the presentation header
> (e.g., including all commitments in the header to guarantee that nothing
> can be removed), but right now the BBS blind signature draft proposal
> slightly differs from the LSZ25 proposal in that in LSZ25 the commitments
> are inputs to core_proof, in the blind BBS draft they are currently
> outputs. Since that is one of the things currently being discussed with the
> BBS blind signature draft afaik, I wanted to wait for a resolution of that
> before making sure we have the right binding input to core & sub-proofs.
>
> Currently the whole sub-proof objects (alg, public inputs, proof bytes)
> are self-contained entries in the proofs sequence - only the binding runs
> through the core proof.
>
> 7. The draft currently says that the “kb” device binding header must be
> present to denote that there are slots reserved for holding the key, but
> also that the key MUST be asserted via a sub-proof.  Baking this usage
> policy in seems limiting, but I have not yet come up with a concrete
> example to back that up.
>
>
> We could loosen that to allow something like “traditional” device binding
> for certain high assurance use-cases as well. Optionality always comes at a
> cost though - the MUST was a conservative choice I made for the initial
> draft to keep things simple.
>
> 8. For sub-claims in particular, I’m noodling over whether this would be
> feasible to have in JWP rather than as an algorithm-specific feature -
> partly because I could see other algorithms wanting an identical facility
> in the future. There might be some commonality in how the constructions
> work across some algorithms, but certainly not all - and I suspect
> differences might be hard to reconcile at the presentation header level
> (such as equality taking a BBS12-381 G1 point as input). We could specify
> specifically e.g. range-proof for BBS-MOD in a single registry, but
> I haven’t figured out if there’s a way to encourage commonality or if that
> is just mapping out an overlapping namespace.
>
>
> Yeah, I was also contemplating where to best fit what. Given that we are
> also using BBS blind signature instead of core BBS for the commitments, my
> initial thought was to solve all problems in this draft right now and then
> discuss which of these should move to other drafts (like the raw scalars in
> the BBS blind signature draft). My goal was to basically use what is
> available in terms of other drafts and define something that can be (apart
> from some of the sub-proof details) implemented.
> I had initially also defined more concrete sub-proof constructions to have
> a fully implementable draft, but chose to remove them since those should
> definitely not live in this document (e.g., the device binding proof).
>
> 9.  With the exclusion of the device binding claim above, it appears all
> sub-claim usage is opt-in - such that a holder can support verifiers with
> differing capabilities without needing different credentials. This was a
> concern of mine with the BBS extensions published so far, and I’m delighted
> to see this.
>
>
> Yes, that was exactly the idea of this construction. We’ve roughly
> sketched out several bigger use-cases (age verification, verifiable
> pseudonyms, identity credentials) that can easily be built on top of such a
> construction with different sub-proof types.
>
> Best Regards,
> Christian
>
> On 6. Jul 2026, at 16:00, David Waite <david=
> 40alkaline-solutions.com@dmarc.ietf.org> wrote:
>
> Hello Christian - I’m excited to see this work!
>
> Some initial comments and questions from a brief read (in no semblance of
> priority order:)
>
> 1. The new “cmap” issuer header has overlap with the “claims” header in
> JPT. I notice one significant difference is a document
> substitution/structural mapping approach to support sub-claims - rather
> than using a path/pointer primitive to define the name of each top level
> claim or sub-claim, it replicates a claim/sub-claim tree and provides
> positional metadata.
>
> This somewhat surprised me, as the sd-jwt vc draft (
> https://www.ietf.org/archive/id/draft-ietf-oauth-sd-jwt-vc-13.html#name-example-2)
> and OpenID4VP (
> https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-claims-path-pointer )
> both seem to use more of a pointer syntax to decompose the document. While
> not yet published, I have been working based on feedback that this is more
> of the direction that implementors preferred, so I’m curious if there was a
> particular set of motivations to go with the “cmap" format.
>
> Ideally I think I would like to see a credential profiling of JPT,
> analogous to the SD-JWT VC work. That would motivate me to push for one of
> “cmap” or “claims” that can bend to support both generalized JPT and
> specific credential use cases, including the usage here.
>
> 2. The scalar encoding is defined as an ASCII decimal encoding of the
> integer value. I have two related observations here:
>
> 2a. When operating in scalar=true mode, I’m curious why this is not an
> I2OSP big-endian representation of the integer value. JSON numbers are a
> complicated substrate for exact integer handling, as JSON implementations
> typically use double-precision floats for numeric values, which both allow
> for decimals and lose integer accuracy above 53 bits. A binary
> representation seems like it would decouple from these issues.
>
> 2b. I’m curious whether it is worth limiting scalar claim values as
> defined here to uint64, when they are meant to be disclosable data.
>
> I have not designed these proof constructions myself, so I may be missing
> something here. However, my assumption is that there may be an efficiency
> case made between these two points: a proof over a bounded binary value may
> be substantially simpler than a proof that can span the scalar field and is
> currently allowed by the current decimal encoding.
>
> 3. The encoding for the device binding key is little endian, which
> surprised me considering both BBS and P-256 are big endian. Any elaboration
> on the motivation behind this decision?
>
> 4. For decoys, I assume JWP-BBS-DECOY was chosen partially because it
> isn’t a legal JSON Text value. Would it make sense if the scalar=true
> alternative was also defined to be a fixed, not valid value that e.g.
> proofs could be written to check against?
>
> 5. Device binding hits a case I hadn’t thought of, partly because I hadn’t
> considered a case for payloads both being candidates for disclosure and for
> commitments - that a conceptual payload might need to be represented over
> more than one slot. Is reserving space at a particular offset (e.g. the
> first four scalars) going to be appropriate? For example, is there a
> potential for a credential to be issued with more than one key encoded into
> it?
>
> 6. For sub-proofs, my suspicion is that the metadata/setup would be
> encoded into the presentation header, while the actual proof values would
> be part of the presentation proofs sequence. Is that your expectation as
> well?
>
> 7. The draft currently says that the “kb” device binding header must be
> present to denote that there are slots reserved for holding the key, but
> also that the key MUST be asserted via a sub-proof.  Baking this usage
> policy in seems limiting, but I have not yet come up with a concrete
> example to back that up.
>
> 8. For sub-claims in particular, I’m noodling over whether this would be
> feasible to have in JWP rather than as an algorithm-specific feature -
> partly because I could see other algorithms wanting an identical facility
> in the future. There might be some commonality in how the constructions
> work across some algorithms, but certainly not all - and I suspect
> differences might be hard to reconcile at the presentation header level
> (such as equality taking a BBS12-381 G1 point as input). We could specify
> specifically e.g. range-proof for BBS-MOD in a single registry, but
> I haven’t figured out if there’s a way to encourage commonality or if that
> is just mapping out an overlapping namespace.
>
> 9.  With the exclusion of the device binding claim above, it appears all
> sub-claim usage is opt-in - such that a holder can support verifiers with
> differing capabilities without needing different credentials. This was a
> concern of mine with the BBS extensions published so far, and I’m delighted
> to see this.
>
> -DW
>
>
>
>
> On Jul 3, 2026, at 2:02 PM, Christian Bormann <chris.bormann=
> 40gmx.de@dmarc.ietf.org> wrote:
>
> Dear JOSE & OAuth WG,
>
> Sorry for cross-posting, but this seems to be a topic that would fit both
> WGs and cross-posting seemed to be the best way.
>
> I have submitted a new ID that proposes a digital credential format
> building on top of JSON Web Proofs, SD-JWT VC, and blind BBS Signatures:
> Datatracker:
> https://datatracker.ietf.org/doc/draft-bormann-jwp-modular-bbs/  -
> GitHub: https://github.com/c2bo/draft-bormann-jwp-modular-bbs
>
>    This document defines a digital credential format that uses JSON Web
>    Proofs (JWP) as its container format and Blind BBS Signatures as its
>    signature scheme combined with a modular framework for attaching
>    zero-knowledge sub-proofs.  This allows a Holder to reveal some
>    attributes directly while proving predicates such as range or
>    equality over the ones they keep hidden.  A credential can
>    additionally be bound to an ECDSA P-256 device key, with possession
>    of the key proven in every presentation without revealing the public
>    key.  The credential type definition and data model follow SD-JWT VC
>    [I-D.ietf-oauth-sd-jwt-vc].
>
> The core idea behind this draft is to enable a credential format that
> functions similar to SD-JWT VC, but powered by a modular Anonymous
> Credentials framework.
> Instead of building on top of JWS/JWT, the container format is JWP
> (currently JSON / compact serialisation only) and the core data model &
> credential type system
> of SD-JWT VC are re-used. The core signature mechanism is BBS,
> specifically the blind BBS draft, since it adds committed disclosure -
> fresh Pedersen commitments
> to hidden messages at presentation time.
>
> The proposed construction allows for a digital credential format with
> unlinkable presentations where each claim/value can individually be
>
> - hidden
> - disclosed
> - committed
>
> Commitments can then be used as inputs to chained sub-proofs (also called
> Commit-and-Prove). This allows for sub-proofs like a range proof over
> issuance or expiration time (proving that the credential is not expired
> instead of disclosing the expiration time), or equality proofs (e.g.,
> proving two credentials
> contain the same name without disclosing the value). The draft introduces
> a registry and a few core sub-proofs, with one important sub-proof allowing
> for a key
> binding to a P-256 public key where a Zero Knowledge Proof of Knowledge
> over a valid signature replaces the KB-JWT of SD-JWT.
> The concrete constructions for these sub-proofs will be leveraged from
> existing work (e.g., for range proofs) and the key binding sub-proof is
> expected to be a
> separate draft in CFRG:
> https://datatracker.ietf.org/doc/draft-cllz-cfrg-ecdsa-pop/.
>
> The general idea for such a construction has been discussed for some time
> in the context of EU Digital Identity Wallets / eIDAS and the draft roughly
> follows the concepts of:
>
> -
> https://github.com/eu-digital-identity-wallet/eudi-doc-standards-and-technical-specifications/blob/main/docs/technical-specifications/ts14-zkps-from-mms.md
> - https://eprint.iacr.org/2025/1981 (Vision: A Modular Framework for
> Anonymous Credential Systems)
>
> This is a rough first draft and especially the sub-proof parts definitely
> need further work, but I’d love to get some feedback on the draft and the
> general concept.
>
> Given the reliance on JWP for serialisation, I thought JOSE would be a
> natural home, but since some parts of SD-JWT VC are re-used, there
> definitely
> is an argument to be made for OAuth as well. Are people interested in this
> kind of work and if so where should it happen?
>
> Happy to present the draft in Vienna if possible / still fits into the
> agenda.
>
> Best Regards,
> Christian
> _______________________________________________
> OAuth mailing list -- oauth@ietf.org
> To unsubscribe send an email to oauth-leave@ietf.org
>
>
> _______________________________________________
> OAuth mailing list -- oauth@ietf.org
> To unsubscribe send an email to oauth-leave@ietf.org
>
>
> _______________________________________________
> jose mailing list -- jose@ietf.org
> To unsubscribe send an email to jose-leave@ietf.org
>


-- 

Brent Zundel
Standards Architect | Yubico <http://www.yubico.com/>