Return-Path: <m@orru.net>
X-Original-To: cfrg@ietfa.amsl.com
Delivered-To: cfrg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
	by ietfa.amsl.com (Postfix) with ESMTP id DDC17C169409
	for <cfrg@ietfa.amsl.com>; Fri,  8 Nov 2024 23:37:58 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.755
X-Spam-Level: 
X-Spam-Status: No, score=-1.755 tagged_above=-999 required=5
	tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
	DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25,
	HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001,
	RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001,
	SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01,
	URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001]
	autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key)
	header.d=tumbolandia.net
Received: from mail.ietf.org ([50.223.129.194])
	by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id fhw4wcD_HYdN for <cfrg@ietfa.amsl.com>;
	Fri,  8 Nov 2024 23:37:55 -0800 (PST)
Received: from mail-qv1-xf31.google.com (mail-qv1-xf31.google.com
 [IPv6:2607:f8b0:4864:20::f31])
	(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 ietfa.amsl.com (Postfix) with ESMTPS id F3B8EC1519A2
	for <cfrg@irtf.org>; Fri,  8 Nov 2024 23:37:49 -0800 (PST)
Received: by mail-qv1-xf31.google.com with SMTP id
 6a1803df08f44-6cbe3ea8e3fso18636716d6.0
        for <cfrg@irtf.org>; Fri, 08 Nov 2024 23:37:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=tumbolandia.net; s=google; t=1731137868; x=1731742668;
 darn=irtf.org;
        h=to:subject:message-id:date:from:in-reply-to:references:mime-version
         :from:to:cc:subject:date:message-id:reply-to;
        bh=hJNSFy7nZ2GJAkgg45b7Pnri3pjSissrUbY/+5OAGtA=;
        b=dm61aAGhr4jHHy3WwHrPtDaYyG0EC5Z8aByXv2E1IOMZTnggmdW6ggsFSNIEC+ZSaO
         WxxTLpttpczuD++uu9wME0sBZQUmJxow91dHpM2u7V03QvGmJJr4CbST88Eu0t7Jb6Ta
         BrvFZ1Vpo9jADSJVUcvEgHw+Y9ZnCe+PfsOFw1aLUZ6mj3dROSc423uWMiWtmBT991Nd
         tIfr+dRaDSr553QF1cOflTL2jkXUlZ5WZFiPEMmd9cFdfOc0TMa+NFlau///s7amqSLU
         ctFmdge64WbJxah4wp/x9gcJxPbHCzHazpr5AJwJWjl0Jsn4LbIPnevbA/7H/lILHtR2
         37Gg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1731137868; x=1731742668;
        h=to:subject:message-id:date:from:in-reply-to:references:mime-version
         :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
        bh=hJNSFy7nZ2GJAkgg45b7Pnri3pjSissrUbY/+5OAGtA=;
        b=chE4Z3U1N3DT5PFRwCUoKB7be/Z5WwxpqFQD3XFNuMZNHqsi/O7U0J137xr/z+UCtA
         MOlEl83Yw8cudCSY5Hb6Rf7TogCZJPYdcxpWlN1nxK3KKuCoTyOAtXCD7zExzlR4iNGf
         WnL8oJwpyPGi4Jf8XpQR5mioZ3T6Ia/yCajaS2xmD3+iCxqHgEFvVnzm/+kuRBJYeZJD
         9W+KjZ4yAESfxQfTs0fzR/1SBGGU7AUjdXyuc/UxR7nl4U2FUhi8hIYF0YixOFWEOmDw
         8pmOUWVXjHuei5402xb1iVb1fTrQnBaxh+WtGV7WsVB3rhigN+3ay6+O6uEwaMn62d4j
         1GHg==
X-Gm-Message-State: AOJu0Yw6qXjSpdHhexI1WIEnOpo7L9/d30XaqDEKOd9c/U0lxFbRBowG
	9U4MVU+q80ymp/I4knsZabzIvXBeFD6xCRHjrGJumdUtcJYMoM73E/21i8WMJjWcg6wZ6yegzrG
	0RxiRBaKRHwTYHBtk5PYta8Npkmxm1TsJXWLaETDtwPXxf9r4Kbg=
X-Google-Smtp-Source: 
 AGHT+IHABfEi0rU9rW+XblTafFtETsZEokby+pF38vwzHBpeg2+MoFDv/smLtg/lj5Cp2ptbD5jF+iD+JWSO6kL2BMs=
X-Received: by 2002:a05:6214:3104:b0:6ce:26d0:c7bd with SMTP id
 6a1803df08f44-6d39e1ff171mr78157766d6.40.1731137868413; Fri, 08 Nov 2024
 23:37:48 -0800 (PST)
MIME-Version: 1.0
References: 
 <ME4P282MB0984F0B8403443FFA0952F718E4F2@ME4P282MB0984.AUSP282.PROD.OUTLOOK.COM>
In-Reply-To: 
 <ME4P282MB0984F0B8403443FFA0952F718E4F2@ME4P282MB0984.AUSP282.PROD.OUTLOOK.COM>
From: =?UTF-8?Q?Michele_Orr=C3=B9?= <lists@tumbolandia.net>
Date: Sat, 9 Nov 2024 08:37:32 +0100
Message-ID: 
 <CAOyO2_KEWKfxePtQgD-p3OPP2avirXh-02G-ZCdutb-BfPEARw@mail.gmail.com>
To: "cfrg@irtf.org" <cfrg@irtf.org>,
 Vasilis Kalos <vasilis.kalos@mattr.global>
Content-Type: multipart/alternative; boundary="000000000000b45adb062675f1d2"
Message-ID-Hash: FB33SAKMS6433FTNVXV2EXNM7AIU6B2N
X-Message-ID-Hash: FB33SAKMS6433FTNVXV2EXNM7AIU6B2N
X-MailFrom: m@orru.net
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency;
 loop; banned-address; member-moderation; header-match-cfrg.irtf.org-0;
 nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size;
 news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: =?utf-8?q?=5BCFRG=5D_Re=3A_Review_of_BBS_Signatures_draft-07?=
List-Id: Crypto Forum Research Group <cfrg.irtf.org>
Archived-At: 
 <https://mailarchive.ietf.org/arch/msg/cfrg/Xhi7F5Va7kt3VnqQZbjm7XuKD9A>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cfrg>
List-Help: <mailto:cfrg-request@irtf.org?subject=help>
List-Owner: <mailto:cfrg-owner@irtf.org>
List-Post: <mailto:cfrg@irtf.org>
List-Subscribe: <mailto:cfrg-join@irtf.org>
List-Unsubscribe: <mailto:cfrg-leave@irtf.org>

--000000000000b45adb062675f1d2
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi Vasilis,

Let me reiterate my suggestions, providing actionable comments, trying to
be more precise, and clarifying some parts of my previous email that might
have been misleading.

*Suggestion 0: add mentions of Pippenger and fixed-basis algorithms.*
*>>> Add in [draft-irtf-cfrg-bbs-signatures
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L280>,
line
280] : *
  Fixed-basis scalar multiplication algorithms can improve computation time
(~4x) while maintaining constant-time operations.
  Pippenger's algorithm can improve asymptotic complexity to O(N/log N).
Common implementations are not constant-time.
*Add references for both. *

*Suggestion 1: make pairings optional and allow for keyed-verification.*
Roughly speaking, one only needs to compute xA and check it is equal to B -
eA, whether it's done in a target group or G1 doesn't matter.
Concretely, the minimal change to provide compatibility is:

*>>> Change [draft-irtf-cfrg-bbs-signatures
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L706>,
line 706] in BBS: *
*- *3. if h(A, W + BP2 * e) * h(B, -BP2) !=3D Identity_GT, return INVALID
Better:
+ 3. if h(A, W) !=3D h(B - eA, BP2), return INVALID
By the way, this is going to improve performance as well (try to limit as m=
any
operations as possible over G2) without changing the API and remove the
confusing multiplicative/additive group notation.
Best:
+ 3. if DH(W, A, B - eA) =3D 1, return INVALID
You can then describe DH as  a pairing as above. Other people will override
your implementation of DH without making too much of a mess around.
For the record, this may be useful for everybody:  it can be that the
issuer has to re-check some signatures and in that case you're allowing it
to do DH as they like.
The same can be done for CoreProofVerify. Let's discuss blind BBS, and the
server proof, later as it's not as immediately important.

*Suggestion 2: make the user proof optional for one-more unforgeability
applications.*
I think there might have been a misunderstanding here. My proposal
(coherent with your response) is:
*>>> Change ProofInit [draft-irtf-cfrg-bbs-signatures
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L869-L931>,
line 869-931
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L869-L931>]
in BBS*
*Move 6-7 (and the relative randomness) into a separate proving function. *
*>>> Change CoreCommit [draft-kalos-bbs-blind-signatures
<https://github.com/BasileiosKal/blind-bbs-signatures/blob/main/draft-kalos=
-bbs-blind-signatures.md?plain=3D1#L582-L590>,
line 582-590
<https://github.com/BasileiosKal/blind-bbs-signatures/blob/main/draft-kalos=
-bbs-blind-signatures.md?plain=3D1#L582-L590>]
in blind BBS*
*Move 3-7 into a separate proving function, just like you do for the
standard BBS signature.*

Reason:
If one wants to prove one of the attributes is well-formed (e.g. is binary,
or 128-bits, etc), they will be able to do so without overwriting this core
function.
If you want to support many attributes, it won't make any sense to hardcode
=CE=A3-protocols in the spec rather than compressed =CE=A3-protocols ("bull=
etproofs").
If one wants to remove the CoreCommit proof for one-more unforgeability,
they will be able to set proof to the empty string in a separate spec.

*Suggestion 5: better describe the security guarantees in the draft.*
*>>> Add in [draft-irtf-cfrg-bbs-signatures
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L1737>,
line 1737]:*
*A paragraph similar to* [rfc9497
<https://datatracker.ietf.org/doc/html/rfc9497#section-7.2.3>, 7.2.3].

*Suggestion 6: add multiplicative blinding for Blind BBS.*
*>>> Add a paragraph similar to [draft-irtf-cfrg-voprf-07
<https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-voprf-07#name-blindi=
ng-considerations>,
6.6]*
*>>> Add a paragraph similar to [draft-irtf-cfrg-voprf-06
<https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-voprf-06#name-additi=
ve-blinding>,
7]*

*Suggestion 7: describe the behaviour of the user/prover concerning
**attributes
set by the server.*
*>>> Change the function signatures to match [rfc9474
<https://www.rfc-editor.org/rfc/rfc9474.html#name-blind-signature-protocol>=
,
4] *
*The API is similar to the one of VOPRF in rfc9497, which should also be
checked for consistency.*
In particular, *add a function Finalise, which MAY reject the signature if
the user so wishes.*

You can leave the function empty (trivially accept everything for now). Let
other extensions (and future schemes) do the work but give them an entry
point.


*Suggestion 10: make proofs extensible with arbitrary statements**>> Add
after [draft-irtf-cfrg-bbs-signatures
<https://github.com/decentralized-identity/bbs-signature/blob/main/draft-ir=
tf-cfrg-bbs-signatures.md?plain=3D1#L710>,
line 710] the following paragraph:*

+ We prove the following statement, expressed in Camenish-Stadler notation:
+
+ ```
+ ZkPoK{
+   "BBS-foobar" + ph,                               // Label for the proof
statement, whatever needs to be added to the challenge
+   (e, r1, r3, msg_j1, ..., msg_jU),                // Secret variables
+   (Abar, Bbar, D, Bv, H_j1, ..., H_jU),            // Public variables
unique to each proof
+   Bbar =3D D * r1 - Abar * e,                        // Statements to pro=
ve
+   Bv =3D D * r3 + H_j1 * msg_j1 + ... + H_jU * msg_jU
+ }
+ ```

*>> Add after [draft-kalos-bbs-blind-signatures
<https://github.com/BasileiosKal/blind-bbs-signatures/blob/main/draft-kalos=
-bbs-blind-signatures.md?plain=3D1#L582-L590>,
line
590] the following paragraph*
+ We prove the following statement, expressed in Camenish-Stadler notation:
+
+ ```
+ ZkPoK{
+   "blind-BBS-foobar" + api_id,                                       //
Label for the proof statement, whatever needs to be added to the challenge
+   (secret_prover_blind, msg_1, ..., msg_M),                          //
Secret variables
+   (Q_2, J_1, ..., J_M),                                              //
Public variables unique to each proof
+   C =3D Q_2 * secret_prover_blind + J_1 * msg_1 + ... + J_M * msg_M,   //
Statements to prove
+ }
+ ```

Reason:
More clarity on the statement to be proven.
It will allow people to adopt their own proof system: for L >=3D 8 it won't
make much sense to use =CE=A3-protocols in the spec rather than compressed
=CE=A3-protocols ("bulletproofs") whose proof size is going to be about
2log_2(L) + 2.
Extra features such as pseudonyms, rate limiting etc are just additional
"statements to prove".

Here are suggestions that I am putting on the side for now.

*Suggestion 3: bridge with rfc9576 <https://www.rfc-editor.org/rfc/rfc9576
<https://www.rfc-editor.org/rfc/rfc9576>>.*
*Suggestion 4: understand the security and efficiency trade-offs with PS.*
*Suggestion 9: simplify Fiat-Shamir and have a generic framework for future=
*
 *proofs.*
In particular, I'll follow up as soon as I can on the latter.

Julia also rightfully pointed out the limits in the description of your
proofs and in the claims of unlinkability.
I haven't had time to look properly into it yet, however I am persuaded
this is fine in the keyed-verification case [Orru24
<https://eprint.iacr.org/2024/1552.pdf>, Theorem 21]. However, in
keyed-verification, the server also gives an extractable proof of knowledge
of the secret key.

Ciao,
--
Michele.

On Fri, Oct 25, 2024 at 12:21=E2=80=AFPM Vasilis Kalos <vasilis.kalos@mattr=
.global>
wrote:

> Dear Michele and all,
>
>
>
> Thank you for the review! I do agree with the suggestions. See some
> comments inline.
>
>
>
> > *.BBS tokens and keyed-verification*
>
> > =E2=80=A6 the issuer and redeemer are the same person just like in Priv=
acy Pass
> (this is called "algebraic MAC" in cryptography). In fact, if the
> verifier has x, then we don't need a pairing map to check signatures: a
> BBS signature (A, e) for a message commitment C is valid if xA =3D C - eA=
.
>
> That=E2=80=99s true, but I don=E2=80=99t think the User (Client in pp) wi=
ll have access to
> the Issuer's sk. In the algebraic MAC case, it will be the Verifier (Orig=
in
> I think in pp) that will have the Issuer=E2=80=99s sk. For the Client to =
verify the
> signature without pairings, the Issuer will have to generate a ZKP of
> knowledge for an x so that pk =3D G * x and A * x =3D C - A * e. That to =
say,
> although I do really like the idea of a DH oracle, making the pairings
> optional may not be that simple.
>
>
>
> (We do have a draft on the above here
> <https://basileioskal.github.io/pairing-free-bbs/draft-vasilis-pairing-fr=
ee-bbs.html>.
> Would be open to merging the documents if there is a need)
>
> > *.Concrete security of the protocol *
>
> > *Suggestion 4: understand the security and efficiency trade-offs with P=
S
> signatures*
>
>
>
> The main advantage of BBS Signatures IMHO is the decoupling of the PK fro=
m
> the number of messages. TMU, in PS each =E2=80=9Ctype=E2=80=9D of credent=
ials (with a
> different number of attributes) will need a different PK. For that reason=
,
> BBS Signatures are more suitable for =E2=80=9Cgeneric use cases=E2=80=9D,=
 providing more
> flexibility (like hiding the Issuer use cases).
>
> > *.Blind BBS multiplicative blinding*
> > It is possible to have "blind BBS" as a pair (A, e) consistent with the=
 signature
> using *multiplicative* instead of additive blind.
>
>
>
> Note that in the last version of blind signatures
> <https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-03.html=
>
> we removed the =E2=80=9Csigner_blind=E2=80=9D and re-introduced it in pse=
udonyms
> <https://www.ietf.org/archive/id/draft-kalos-bbs-per-verifier-linkability=
-00.html>
> only. So, the blind signature currently is (A, e).
>
>
> > *.Blind BBS API design*
> > one-more unforgeable tokens. If the user proof can be optional, it's
> easy
>
> to just have another specification say that that function is just a nop
>
> We also added `FinalizeBlind
> <https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-03.html=
#name-finalize-blind-sign>`
> (Section 4.3.3 on the blind BBS signatures draft
> <https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures-03.html=
>)
> which will sign any point B, without checking any user provided proof.
>
> In any case, the documents are far from final. Any proposal and
> contribution will be extremely appreciated.
>
> > *.On the zero-knowledge proofs*
>
> > *Suggestion 9: simplify Fiat-Shamir and have a generic framework for
> future proofs*
>
>
>
> For a generic ZKP I expressed my thoughts here
> <https://mailarchive.ietf.org/arch/msg/cfrg/d58lWLAOLN5UgGSvu3VmwsJtG2E/>=
.
> I=E2=80=99m still not convinced that the core BBS draft is the best place=
 for such
> a description.
>
>
>
> Nevertheless, I will be happy to help with that, no matter where it lands=
,
> since I do find it really useful.
>
>
> Kind regards,
> Vasilis Kalos
>

--000000000000b45adb062675f1d2
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr">Hi Vasilis,=C2=A0<br></div><div dir=3D"lt=
r"><div><br></div><div>Let me reiterate my suggestions, providing actionabl=
e comments, trying to be more precise, and clarifying some parts of my prev=
ious email that=C2=A0might have been misleading.=C2=A0</div><div><br></div>=
</div><b>Suggestion 0: add mentions of Pippenger and fixed-basis algorithms=
.</b><div><div><i>&gt;&gt;&gt; Add in [<a href=3D"https://github.com/decent=
ralized-identity/bbs-signature/blob/main/draft-irtf-cfrg-bbs-signatures.md?=
plain=3D1#L280" target=3D"_blank">draft-irtf-cfrg-bbs-signatures</a>,=C2=A0=
line 280] :=C2=A0</i></div><div><div><font face=3D"monospace">=C2=A0 Fixed-=
basis scalar multiplication algorithms can improve computation time (~4x) w=
hile maintaining constant-time operations.</font></div><div><font face=3D"m=
onospace">=C2=A0 Pippenger&#39;s algorithm can improve asymptotic complexit=
y to O(N/log N). Common implementations are not constant-time.</font></div>=
<div><i>Add references for both.=C2=A0</i></div><div><br></div><div><b>Sugg=
estion 1: make pairings optional and allow for keyed-verification.</b></div=
><div>Roughly speaking, one only needs to compute xA and check it is equal =
to B - eA, whether it&#39;s done in a target group or G1 doesn&#39;t matter=
.=C2=A0<br></div><div><div>Concretely, the minimal change to provide compat=
ibility is:</div></div><div><i><br></i></div><div><i>&gt;&gt;&gt; Change [<=
a href=3D"https://github.com/decentralized-identity/bbs-signature/blob/main=
/draft-irtf-cfrg-bbs-signatures.md?plain=3D1#L706" target=3D"_blank">draft-=
irtf-cfrg-bbs-signatures</a>, line 706] in BBS:=C2=A0</i><br></div><div><fo=
nt face=3D"monospace"><i>-=C2=A0</i>3. if h(A, W + BP2 * e) * h(B, -BP2) !=
=3D Identity_GT, return INVALID</font></div><div>Better:</div><div><font fa=
ce=3D"monospace">+ 3. if h(A, W) !=3D h(B - eA, BP2), return INVALID<br></f=
ont></div><div><span aria-hidden=3D"true" style=3D"box-sizing:border-box;co=
lor:rgb(14,16,26);font-family:Inter,sans-serif">By</span><span style=3D"box=
-sizing:border-box;color:rgb(14,16,26);font-family:Inter,sans-serif">=C2=A0=
the way</span><span style=3D"box-sizing:border-box;color:rgb(28,28,28);font=
-family:Inter,sans-serif;font-size:18px"></span><span aria-hidden=3D"true" =
style=3D"box-sizing:border-box;color:rgb(14,16,26);font-family:Inter,sans-s=
erif">, this</span><span style=3D"box-sizing:border-box;color:rgb(14,16,26)=
;font-family:Inter,sans-serif">=C2=A0is going to=C2=A0improve performance a=
s well (try to limit as=C2=A0</span><span style=3D"box-sizing:border-box;co=
lor:rgb(28,28,28);font-family:Inter,sans-serif;font-size:18px"></span><span=
 aria-hidden=3D"true" style=3D"box-sizing:border-box;color:rgb(14,16,26);fo=
nt-family:Inter,sans-serif">many operations as possible</span><span style=
=3D"box-sizing:border-box;color:rgb(14,16,26);font-family:Inter,sans-serif"=
>=C2=A0over G2) without changing the API and remove the confusing multiplic=
ative/additive group notation.</span></div><div>Best:=C2=A0<br></div><div><=
div><font face=3D"monospace">+ 3. if DH(W, A, B - eA) =3D 1, return INVALID=
<br></font></div></div><div>You can then describe DH as =C2=A0a pairing as =
above. Other people will override your implementation of DH without making =
too much of a mess around.</div><div>For the record, this may be useful for=
=C2=A0everybody: =C2=A0it can be that the issuer has to re-check some signa=
tures and in that case you&#39;re allowing it to do DH as they like.</div><=
div>The same can be done for CoreProofVerify. Let&#39;s discuss blind BBS, =
and the server proof, later as it&#39;s not as immediately important.</div>=
<div><br></div><div><b>Suggestion 2: make the user proof optional for one-m=
ore unforgeability applications.</b><br></div></div><div>I think there migh=
t have been a misunderstanding here. My proposal (coherent with your respon=
se) is:=C2=A0</div><div><i>&gt;&gt;&gt; Change ProofInit [<a href=3D"https:=
//github.com/decentralized-identity/bbs-signature/blob/main/draft-irtf-cfrg=
-bbs-signatures.md?plain=3D1#L869-L931" target=3D"_blank">draft-irtf-cfrg-b=
bs-signatures</a>, line 869-931<a href=3D"https://github.com/decentralized-=
identity/bbs-signature/blob/main/draft-irtf-cfrg-bbs-signatures.md?plain=3D=
1#L869-L931" target=3D"_blank"></a>] in BBS</i></div><div><i>Move 6-7 (and =
the relative randomness) into a separate proving function.=C2=A0</i></div><=
div><i>&gt;&gt;&gt; Change CoreCommit [<a href=3D"https://github.com/Basile=
iosKal/blind-bbs-signatures/blob/main/draft-kalos-bbs-blind-signatures.md?p=
lain=3D1#L582-L590" target=3D"_blank">draft-kalos-bbs-blind-signatures</a>,=
 line 582-590<a href=3D"https://github.com/BasileiosKal/blind-bbs-signature=
s/blob/main/draft-kalos-bbs-blind-signatures.md?plain=3D1#L582-L590" target=
=3D"_blank"></a>] in blind BBS</i></div><div><i>Move 3-7 into a separate pr=
oving function, just like you do for the standard BBS signature.</i></div><=
div><br></div><div>Reason:</div><div><div><div>If one wants to prove one of=
 the attributes is well-formed (e.g. is binary, or 128-bits, etc), they wil=
l be able to do so without overwriting this core function.</div></div></div=
><div>If you want to support many attributes, it won&#39;t make any sense t=
o hardcode =CE=A3-protocols in the spec rather than compressed =CE=A3-proto=
cols (&quot;bulletproofs&quot;).</div><div>If one wants to remove the CoreC=
ommit proof for one-more unforgeability, they will be able to set proof to =
the empty string in a separate=C2=A0spec.<br></div><div><br></div></div><di=
v><div><b>Suggestion 5: better describe the security guarantees in the draf=
t.</b></div><div><div><i>&gt;&gt;&gt; Add in [<a href=3D"https://github.com=
/decentralized-identity/bbs-signature/blob/main/draft-irtf-cfrg-bbs-signatu=
res.md?plain=3D1#L1737" target=3D"_blank">draft-irtf-cfrg-bbs-signatures</a=
>, line 1737]:</i></div><div><i>A paragraph similar to</i>=C2=A0[<a href=3D=
"https://datatracker.ietf.org/doc/html/rfc9497#section-7.2.3" target=3D"_bl=
ank">rfc9497</a>, 7.2.3].</div></div><div><br></div><div><b>Suggestion 6: a=
dd multiplicative blinding for Blind BBS.</b></div></div><div><div><i>&gt;&=
gt;&gt; Add a paragraph similar to [<a href=3D"https://datatracker.ietf.org=
/doc/html/draft-irtf-cfrg-voprf-07#name-blinding-considerations" target=3D"=
_blank">draft-irtf-cfrg-voprf-07</a>, 6.6]</i></div></div><div><i>&gt;&gt;&=
gt; Add a paragraph similar to [<a href=3D"https://datatracker.ietf.org/doc=
/html/draft-irtf-cfrg-voprf-06#name-additive-blinding" target=3D"_blank">dr=
aft-irtf-cfrg-voprf-06</a>, 7]</i></div><div><br></div><div><b>Suggestion 7=
: describe the behaviour of the user/prover concerning=C2=A0</b><b>attribut=
es set by the server.</b></div><div><div><div><i>&gt;&gt;&gt; Change the fu=
nction signatures to match [<a href=3D"https://www.rfc-editor.org/rfc/rfc94=
74.html#name-blind-signature-protocol" target=3D"_blank">rfc9474</a>, 4]=C2=
=A0</i></div><div><i>The API is similar to the one of VOPRF in rfc9497, whi=
ch should also be checked for consistency.</i></div><div>In particular,=C2=
=A0<i>add a function Finalise, which MAY reject the signature if the user s=
o wishes.</i>=C2=A0=C2=A0</div><div><br></div><div>You can leave the functi=
on empty (trivially accept everything for now). Let other extensions (and f=
uture schemes) do the work but give them an entry point.</div></div><div><b=
r></div><div><b>Suggestion 10: make proofs extensible with arbitrary statem=
ents<br></b><i>&gt;&gt;=C2=A0Add after [<a href=3D"https://github.com/decen=
tralized-identity/bbs-signature/blob/main/draft-irtf-cfrg-bbs-signatures.md=
?plain=3D1#L710" target=3D"_blank">draft-irtf-cfrg-bbs-signatures</a>, line=
 710] the following paragraph:</i></div><div><br><font face=3D"monospace">+=
 We prove the following statement, expressed in Camenish-Stadler notation:<=
/font></div><div><font face=3D"monospace">+</font></div><div><font face=3D"=
monospace">+ ```<br></font></div><div><font face=3D"monospace">+ ZkPoK{<br>=
+ =C2=A0 &quot;BBS-foobar&quot; + ph, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // La=
bel for the proof statement, whatever needs to be added to the challenge</f=
ont></div><div><font face=3D"monospace">+ =C2=A0 (e, r1, r3, msg_j1, ..., m=
sg_jU),=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // Secret va=
riables<br>+ =C2=A0 (Abar, Bbar, D, Bv, H_j1, ..., H_jU),=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 // Public variables unique to each proof<br>+ =C2=
=A0 Bbar =3D D * r1 - Abar * e, =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// Statements to prove<br>+ =C2=A0=
 Bv =3D D * r3 + H_j1 * msg_j1 + ... + H_jU * msg_jU<br>+ }</font></div><di=
v><font face=3D"monospace">+ ```<br></font></div><div><font face=3D"monospa=
ce"><br></font></div><div><i><font face=3D"arial, sans-serif">&gt;&gt; Add =
after [<a href=3D"https://github.com/BasileiosKal/blind-bbs-signatures/blob=
/main/draft-kalos-bbs-blind-signatures.md?plain=3D1#L582-L590" target=3D"_b=
lank">draft-kalos-bbs-blind-signatures</a>,=C2=A0line 590] the following pa=
ragraph</font></i></div><div><div><font face=3D"monospace">+ We prove the f=
ollowing statement, expressed in Camenish-Stadler notation:</font></div><di=
v><font face=3D"monospace">+</font></div><div><font face=3D"monospace">+ ``=
`<br>+ ZkPoK{<br>+ =C2=A0 &quot;blind-BBS-foobar&quot; + api_id,=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// Label for the pro=
of statement, whatever needs to be added to the challenge</font></div><div>=
<font face=3D"monospace">+ =C2=A0 (secret_prover_blind, msg_1, ..., msg_M),=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 // Secret variables<br>+ =C2=A0 (Q_2, J_1, ..., J_M),=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 // Public variables unique to each proof<br>+=C2=A0 =C2=A0C =3D =
Q_2 * secret_prover_blind + J_1 * msg_1 + ... + J_M * msg_M,=C2=A0 =C2=A0//=
 Statements to prove<br>+ }</font></div><div><font face=3D"monospace">+ ```=
</font></div></div><div><span style=3D"color:rgb(240,240,240);font-family:&=
quot;Oxygen Mono&quot;,monospace;font-size:13.5px;letter-spacing:-0.2px;bac=
kground-color:rgb(40,40,40)"><br></span></div><div>Reason:</div><div><div>M=
ore clarity on the statement to be proven.=C2=A0</div></div><div>It will al=
low people to adopt their own proof system: for L &gt;=3D 8=C2=A0it won&#39=
;t make much sense to use =CE=A3-protocols in the spec rather than compress=
ed =CE=A3-protocols (&quot;bulletproofs&quot;) whose proof size is going to=
 be about 2log_2(L)=C2=A0+ 2.</div><div>Extra features such as pseudonyms, =
rate limiting etc are just additional &quot;statements to prove&quot;.</div=
><div><br></div>Here are suggestions that I am putting on the side for now.=
</div><div><br></div><div><b>Suggestion 3: bridge with rfc9576 &lt;<a href=
=3D"https://www.rfc-editor.org/rfc/rfc9576" target=3D"_blank">https://www.r=
fc-editor.org/rfc/rfc9576</a>&gt;.</b></div><div><b>Suggestion 4: understan=
d the security and efficiency trade-offs with PS.</b></div><div><b>Suggesti=
on 9: simplify Fiat-Shamir and have a generic framework for future</b>=C2=
=A0<b>proofs.</b></div><div>In particular, I&#39;ll follow up as soon as I =
can on the latter.<br></div><div><br></div><div>Julia also rightfully point=
ed out the limits in the description of your proofs and in the claims of un=
linkability.=C2=A0</div><div>I haven&#39;t had time to look properly into i=
t yet, however I am persuaded this is fine in the=C2=A0keyed-verification c=
ase [<a href=3D"https://eprint.iacr.org/2024/1552.pdf" target=3D"_blank">Or=
ru24</a>, Theorem 21]. However, in keyed-verification, the server also give=
s an extractable proof of knowledge of the secret key.</div><div><br></div>=
<div>Ciao,</div><div>--</div><div>Michele.</div></div><br><div class=3D"gma=
il_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Oct 25, 2024 at 12:=
21=E2=80=AFPM Vasilis Kalos &lt;vasilis.kalos@mattr.global&gt; wrote:<br></=
div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex"><div>





<div lang=3D"en-GR">
<div>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">Dear <=
/span><span style=3D"font-size:10pt">Michele</span><span style=3D"font-size=
:10pt">
<span lang=3D"EN-US">and all,</span></span><span style=3D"font-size:10pt"><=
u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">Thank =
you for the review! I do agree with the suggestions. See some comments inli=
ne.<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">&gt; <=
/span><span style=3D"font-size:10pt">*.BBS tokens and keyed-verification*</=
span><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u><u></u></span></p=
>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">&gt; =
=E2=80=A6</span><span style=3D"font-size:10pt"> the issuer and redeemer are=
 the same person just like</span><span style=3D"font-size:10pt">
</span><span style=3D"font-size:10pt">in Privacy Pass (this is called &quot=
;algebraic MAC&quot; in cryptography).</span><span style=3D"font-size:10pt"=
>
</span><span style=3D"font-size:10pt">In fact, if the verifier has x, then =
we don&#39;t need a pairing map to check</span><span style=3D"font-size:10p=
t">
</span><span style=3D"font-size:10pt">signatures: a BBS signature (A, e) fo=
r a message</span><span style=3D"font-size:10pt">
</span><span style=3D"font-size:10pt">commitment C is valid if xA</span><sp=
an style=3D"font-size:10pt">
</span><span style=3D"font-size:10pt">=3D C - eA.</span><span lang=3D"EN-US=
" style=3D"font-size:10pt"><br>
<br>
</span><span style=3D"font-size:10pt"><u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">That=
=E2=80=99s true, but I don=E2=80=99t think the User (Client in pp) will hav=
e access to the Issuer&#39;s sk. In the algebraic MAC case, it will be the =
Verifier (Origin I think in pp) that will have the Issuer=E2=80=99s
 sk. For the Client to verify the signature without pairings, the Issuer wi=
ll have to generate a ZKP of knowledge for an x so that pk =3D G * x and A =
* x =3D C - A * e. That to say, although I do really like the idea of a DH =
oracle, making the pairings optional
 may not be that simple.<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">(We do=
 have a draft on the above
<a href=3D"https://basileioskal.github.io/pairing-free-bbs/draft-vasilis-pa=
iring-free-bbs.html" target=3D"_blank">
here</a>. Would be open to merging the documents if there is a need)<br>
<br>
&gt; </span><span style=3D"font-size:10pt">*.Concrete security of the proto=
col *<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">&gt; <=
/span><span style=3D"font-size:10pt">*Suggestion 4: understand the security=
 and efficiency trade-offs with PS</span><span style=3D"font-size:10pt">
</span><span style=3D"font-size:10pt">signatures*</span><span lang=3D"EN-US=
" style=3D"font-size:10pt"><u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">The ma=
in advantage of BBS Signatures IMHO is the decoupling of the PK from the nu=
mber of messages. TMU, in PS each =E2=80=9Ctype=E2=80=9D of credentials (wi=
th a different number of attributes) will need a different
 PK. For that reason, BBS Signatures are more suitable for =E2=80=9Cgeneric=
 use cases=E2=80=9D, providing more flexibility (like hiding the Issuer use=
 cases).<br>
<br>
&gt; </span><span style=3D"font-size:10pt">*.Blind BBS multiplicative blind=
ing*</span><span lang=3D"EN-US" style=3D"font-size:10pt"><br>
&gt; </span><span style=3D"font-size:10pt">It is possible to have &quot;bli=
nd BBS&quot; as a pair (A, e) consistent with the</span><span style=3D"font=
-size:10pt">
</span><span style=3D"font-size:10pt">signature using *multiplicative* inst=
ead of additive blind.</span><span lang=3D"EN-US" style=3D"font-size:10pt">=
<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">Note t=
hat in <a href=3D"https://www.ietf.org/archive/id/draft-kalos-bbs-blind-sig=
natures-03.html" target=3D"_blank">
the last version of blind signatures</a> we removed the =E2=80=9Csigner_bli=
nd=E2=80=9D and re-introduced it in
<a href=3D"https://www.ietf.org/archive/id/draft-kalos-bbs-per-verifier-lin=
kability-00.html" target=3D"_blank">
pseudonyms</a> only. So, the blind signature currently is (A, e).<u></u><u>=
</u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><br>
&gt; </span><span style=3D"font-size:10pt">*.Blind BBS API design*</span><s=
pan lang=3D"EN-US" style=3D"font-size:10pt"><br>
&gt; </span><span style=3D"font-size:10pt">one-more unforgeable tokens. If =
the user proof can be optional, it&#39;s easy<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:10pt">to just have another =
specification say that that function is just a nop</span><span lang=3D"EN-U=
S" style=3D"font-size:10pt"><br>
<br>
We also added `<a href=3D"https://www.ietf.org/archive/id/draft-kalos-bbs-b=
lind-signatures-03.html#name-finalize-blind-sign" target=3D"_blank">Finaliz=
eBlind</a>` (Section 4.3.3 on the blind BBS signatures
<a href=3D"https://www.ietf.org/archive/id/draft-kalos-bbs-blind-signatures=
-03.html" target=3D"_blank">
draft</a>) which will sign any point B, without checking any user provided =
proof.<br>
<br>
In any case, the documents are far from final. Any proposal and contributio=
n will be extremely appreciated.<br>
</span><span style=3D"font-size:10pt"><u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">&gt; <=
/span><span style=3D"font-size:10pt">*.On the zero-knowledge proofs*<u></u>=
<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">&gt; <=
/span><span style=3D"font-size:10pt">*Suggestion 9: simplify Fiat-Shamir an=
d have a generic framework for future</span><span style=3D"font-size:10pt">
</span><span style=3D"font-size:10pt">proofs*<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">For a =
generic ZKP I expressed my thoughts
<a href=3D"https://mailarchive.ietf.org/arch/msg/cfrg/d58lWLAOLN5UgGSvu3Vmw=
sJtG2E/" target=3D"_blank">
here</a>. I=E2=80=99m still not convinced that the core BBS draft is the be=
st place for such a description.<u></u><u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><u></u=
>=C2=A0<u></u></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt">Nevert=
heless, I will be happy to help with that, no matter where it lands, since =
I do find it really useful.</span><span lang=3D"EN-US"><u></u><u></u></span=
></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10pt"><br>
Kind regards,<br>
Vasilis Kalos<u></u><u></u></span></p>
</div>
</div>

</div></blockquote></div>

--000000000000b45adb062675f1d2--

