[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/>
- [jose] New I-D: draft-bormann-jwp-modular-bbs Christian Bormann
- [jose] Re: [OAUTH-WG] New I-D: draft-bormann-jwp-… David Waite
- [jose] Re: [OAUTH-WG] New I-D: draft-bormann-jwp-… Christian Bormann
- [jose] Re: [OAUTH-WG] New I-D: draft-bormann-jwp-… Brent Zundel
- [jose] Re: New I-D: draft-bormann-jwp-modular-bbs Karen ODonoghue