Delivery-date: Sat, 07 Jun 2025 08:02:35 -0700 Received: from mail-yb1-f188.google.com ([209.85.219.188]) by mail.fairlystable.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1uNv46-0004Tq-DH for bitcoindev@gnusha.org; Sat, 07 Jun 2025 08:02:35 -0700 Received: by mail-yb1-f188.google.com with SMTP id 3f1490d57ef6-e7d961b8904sf4226885276.0 for ; Sat, 07 Jun 2025 08:02:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1749308548; x=1749913348; darn=gnusha.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:references:in-reply-to:message-id:to:from:date:sender:from :to:cc:subject:date:message-id:reply-to; bh=r15SPyeIohCfj5S9ekwRIS49BfaOZdq/m/0uAR9y8tU=; b=KtZVSmBzGbz7GDCuW+IDf6llgfDruNJj2z2RswzACyHzKmHaDS/tmXdaG+NAbrFP34 DKUBuw9pFpEt340Ob3gior+N7qFhTYc5QzuTEePa/p03a7dlnbPBgEBs0pRvSZ7siBae wI3sYb4UKmaTo7tKDzOAedY5vE3bC506tEl1Q1EEqIDo9BCqDJ+Q1SvipvC7HBvV2vuR Hg1u42CRBzRLZkI/Mtf7QsaBEN45CAyIoCtcCHBUym2/MhlHMFq2KFe1vz/Lag3igCiU abKWwEZOv6xwerWMZjlWOVEOGLrHjYqdM44omo8XWPKx8dcQ9CfDj6yxXXEOb8ox8kIN pyDg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749308548; x=1749913348; darn=gnusha.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:references:in-reply-to:message-id:to:from:date:from:to:cc :subject:date:message-id:reply-to; bh=r15SPyeIohCfj5S9ekwRIS49BfaOZdq/m/0uAR9y8tU=; b=Z3lnJmCtqv9dghrIoJcCUIsnqAI7QiXKPPEAyTSfsYGJZMdsGIJXn4pHW9uvLzQ6cV RSNJ1tEYo5hKlhBsCFnudmKZpUI8gWBdP+9Ko1OFf8mfNYtHqyUwhRngwOwwANmAU2S/ 4LNT71kMQCf57bMmou8pbWUY8TO6t7M1lUWpF6nrCbunA2b2Y/V4P8pZuUglKSHHM09O qNj3liIhNCuBpbNIoUKa5bhqORqu3d+G9+isuJlfMur5aw/oiUNbSQ5Rui65EGZfgqwQ PVdowgUCRYZKlQIaRwRJniQ/gH1oCENPb/Qd0gFPp7AVwKcZui+wpArv5PdhfTYG3rP3 LJ8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749308548; x=1749913348; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:references:in-reply-to:message-id:to:from:date:x-beenthere :x-gm-message-state:sender:from:to:cc:subject:date:message-id :reply-to; bh=r15SPyeIohCfj5S9ekwRIS49BfaOZdq/m/0uAR9y8tU=; b=c3OkT4xNOGzpCTiHgxAqFqqnp8QiSmpfpGU8371Xx5rbzvYk5dNQvWMy79jT+KRKbc 9GAoGAlnviO2slt2aXwiQR+SMtHJVVoQeiUSY6c61kcXRp8IAOJOJZquau8fDYTqPUrX yBayltJWRbsC2AM+HTOQAfh6GylRREXpaKBmZMvB8vJAdkKi4kcikzEQDqvfucn7QPip NZ8Qfnj8COlcRzfVWze8Mp4orp35Ln0OdesM/ovKsB6C609Aym+wZwhBwr1BQHA76+Of W3LRGwMPks9FbyOMa4FRX79NGopIDJwFdD8V/76VX38agT6wLBeH7vlRAex+ReBuV5NV ujRg== Sender: bitcoindev@googlegroups.com X-Forwarded-Encrypted: i=1; AJvYcCW9Pvm/z2w1dIn2e0fmpAP+9KMiJepFyHf2pr64JML6iVkqdjjG3SrtqPbQtOPuaanRHB0tSp5mUoEy@gnusha.org X-Gm-Message-State: AOJu0Yw7ojJIst1Juu7vvyetI2T2XjeNrEEjfqcs3cqeCDeqr0natKIE 9PdP+C/8D8W43d9RDVcZ7puF63mh4a+Xh4DPkrgAaosmezoFXcvUSsJH X-Google-Smtp-Source: AGHT+IGyip17Yo0okbneQ3y8o6ku+HqPGFKhygZGSJ/6er9cffXuf1g0sKkktZj0Nbfe8LRjVG/rVA== X-Received: by 2002:a05:6902:18ca:b0:e7d:5e41:a8b0 with SMTP id 3f1490d57ef6-e81a21d72a6mr9087417276.38.1749308548299; Sat, 07 Jun 2025 08:02:28 -0700 (PDT) X-BeenThere: bitcoindev@googlegroups.com; h=AZMbMZfxeIPoTkprtneQFWW88nbFG/cDKiZ8iVkQDWDORgKtkA== Received: by 2002:a25:b284:0:b0:e81:886a:57af with SMTP id 3f1490d57ef6-e818890ff74ls2640138276.0.-pod-prod-08-us; Sat, 07 Jun 2025 08:02:23 -0700 (PDT) X-Received: by 2002:a05:690c:4d09:b0:70f:8884:17af with SMTP id 00721157ae682-710f766691dmr107847527b3.6.1749308543748; Sat, 07 Jun 2025 08:02:23 -0700 (PDT) Received: by 2002:a05:690c:fc7:b0:710:fccf:6901 with SMTP id 00721157ae682-710fccf6a41ms7b3; Sat, 7 Jun 2025 07:39:23 -0700 (PDT) X-Received: by 2002:a05:690c:4446:b0:70e:142d:9c4e with SMTP id 00721157ae682-710f772fc8cmr106748007b3.26.1749307161911; Sat, 07 Jun 2025 07:39:21 -0700 (PDT) Date: Sat, 7 Jun 2025 07:39:21 -0700 (PDT) From: waxwing/ AdamISZ To: Bitcoin Development Mailing List Message-Id: In-Reply-To: <8fb3deaf-417c-4ec9-9d23-424c4926905an@googlegroups.com> References: <8fb3deaf-417c-4ec9-9d23-424c4926905an@googlegroups.com> Subject: [bitcoindev] Re: Sybil resistance in different coinjoin implementations MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_12426_283977031.1749307161576" X-Original-Sender: ekaggata@gmail.com Precedence: list Mailing-list: list bitcoindev@googlegroups.com; contact bitcoindev+owners@googlegroups.com List-ID: X-Google-Group-Id: 786775582512 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Score: -0.5 (/) ------=_Part_12426_283977031.1749307161576 Content-Type: multipart/alternative; boundary="----=_Part_12427_188103395.1749307161576" ------=_Part_12427_188103395.1749307161576 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi fd0, You make some interesting points in these comparisons. I will address a few= =20 things you say in the article at the end, here, but first I want to discuss= =20 some background related to aut-ct (and yes this is mostly already implicit= =20 in your article but for other readers, the following): I want to expand on something I said when we were discussing this on=20 delving [1]: There's always in my mind two very distinct threats from Sybilling. The=20 first is that your protocol might subtly (or grossly) depend on=20 non-collusion of participants. For that you want one kind of Sybil=20 resistance. The second is the problem of free-entry, which can occur even if=20 non-collusion is not a requirement. If anyone can join a protocol without= =20 real limits, then the resource usage implied when the number of protocol=20 users increases by 1000x can screw up resource utilization. (Bitcoin itself= =20 deals with this beautifully through implicit PoW dependence of messages to= =20 be considered valid.) My feeling when working on the idea of RIDDLE and then later aut-ct was=20 that I was only really addressing or thinking about the 2nd of those two=20 cases. It's not impossible to use a utxo ownership proof to address the 1st= =20 of the two above, but it's clearly much less strong, by default, than one= =20 would hope. Just a pure "I own a utxo" imposes no, or negligible cost. As per the=20 delving post, and in a few other places, I've noted you can impose an age= =20 and value restriction to bump up the cost. So it's not inconceivable but I= =20 suspect it's troublesome, and, it tends to fall into the "anything's better= =20 than nothing" category. While a fidelity bond with a public timeout is more= =20 convenient specifically because you don't need to have "prepared" it in=20 advance, a long time (so same lockup cost, but in advance). The actual problems with fidelity bonds are twofold: privacy headache from= =20 public utxo announcement, and expense (the expense part is unintuitive,=20 but, if a value lock is to impose cost that *specifically prevents Sybils*,= =20 it's very valuable that it be counted super-linearly in the size of the=20 utxo; otherwise, a high-net-worth Sybiler can split his amount into 100=20 pieces e.g. to get 100 valid entry tokens. Chris Belcher originally=20 proposed and implemented a quadratic scaling [2], but we reduced that=20 default exponent and made it configurable, precisely because the HNW=20 Sybiler (or honest participant) can nearly guarantee participation. It's a= =20 whole can of worms, though). So given that, it's very natural to look for alternatives to, or finesses= =20 on, fidelity bond ideas. Which you do, here, so, coming to some parts of=20 your article: > Since WabiSabi is a coinjoin implementation based on centralized=20 coordinator, a user must also trust the coordinator not to link inputs and= =20 outputs. I can see that being true only in one specific sense: that Wa(bi)Sabi=20 coordinators can Sybil and thus link. Obviously in the default honest mode= =20 of operation of coordinator this is not true of such systems. > Joinstr uses aut-ct as the primary=20 mechanism for sybil resistance, however fidelity bonds can also be used=20 with aut-ct. There is an initiator who creates the pool and adds sybil=20 requirements to join the pool. Everyone (maker and takers) needs to provide= =20 the proof for a successful coinjoin. Interesting idea to blend, but I am left considering an ambiguity: When you say "fidelity bonds can be used with aut-ct" I *thought* you=20 meant that: the anon set can be the anon-set of all timelocked UTXOs (that= =20 may or may not be fidelity bond type), but if you do that then of course=20 you need to form the anon set based on some time-range, I guess? The=20 problem I always had with this was how do we coordinate anything like this= =20 for the anon set to be big enough. Like, if you did it with aut-ct it would= =20 either have to be taproot or users publishing (where?) the pubkeys in order= =20 to make the tree. People need to actually create these timelocked utxos, so= =20 they need somehow to be told well in advance what the realistic parameters= =20 are for it. It seems very difficult practically to coordinate and then to= =20 get to decent privacy, also (in case you commit a big chunk of funds and=20 then only 5 other people do it .. you were hoping 5000, now you have little= =20 or no privacy from a big cost. Just an example) But reading further I see you were looking at it the other way; literally= =20 two separate things, both fidelity bonds, and aut-ct tokens. > Everyone shares aut-ct proof that proves they own a P2TR UTXO worth=20 0.1-0.2 BTC that is unspent until last block and aged more than 2016 blocks For me this example illustrates why Sybil-threat type 1 is not well=20 defended by this kind of system. How much does that really cost? It's=20 reasonable to answer "almost absolutely nothing", since you don't spend=20 those coins, and while in a vague, abstract sense they are "locked" (you=20 need some that lasted that long), a well funded attacker could always have= =20 that amount x10 or x100 sitting *somewhere*. Handwavy, but imo it's only if= =20 we want to prevent 1000 of those at once that it starts to be in some sense= =20 "costly". But a Sybil attack on a coinjoin does not need more than N-1=20 participants to Sybil an N-party join, so 1000 is way over the line. Cheers, AdamISZ/waxwing [1]=20 https://delvingbitcoin.org/t/anonymous-usage-tokens-from-curve-trees-or-aut= ct/862/3 [2] https://gist.github.com/chris-belcher/87ebbcbb639686057a389acb9ab3e25b On Tuesday, May 27, 2025 at 10:21:42=E2=80=AFPM UTC-3 /dev /fd0 wrote: > Hi Bitcoin Developers, > > I have written a post comparing the sybil resistance of joinmarket,=20 > joinstr and wabisabi. I did not include whirlpool in this post because it= s=20 > not used anymore. Although it won't be any different from wabisabi. > > Its not a long post but written after doing a lot of research. The result= s=20 > show that joinmarket has good enough sybil resistance. However, joinstr= =20 > provides better solution. > > Feel free to share your feedback. > > Link:=20 > https://uncensoredtech.substack.com/p/sybil-resistance-in-coinjoin-implem= entations > > /dev/fd0 > floppy disk guy > --=20 You received this message because you are subscribed to the Google Groups "= Bitcoin Development Mailing List" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to bitcoindev+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/= a34c4b4a-b8af-44d3-9b8f-ec525438cc92n%40googlegroups.com. ------=_Part_12427_188103395.1749307161576 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi fd0,

You make some interesting points in= these comparisons. I will address a few things you say in the article at t= he end, here, but first I want to discuss some background related to aut-ct= (and yes this is mostly already implicit in your article but for other rea= ders, the following):

I want to expand on someth= ing I said when we were discussing this on delving [1]:

There's always in my mind two very distinct threats from Sybilling.= The first is that your protocol might subtly (or grossly) depend on non-co= llusion of participants. For that you want one kind of Sybil resistance.

The second is the problem of free-entry, which can= occur even if non-collusion is not a requirement. If anyone can join a pro= tocol without real limits, then the resource usage implied when the number = of protocol users increases by 1000x can screw up resource utilization. (Bi= tcoin itself deals with this beautifully through implicit PoW dependence of= messages to be considered valid.)

My feeling wh= en working on the idea of RIDDLE and then later aut-ct was that I was only = really addressing or thinking about the 2nd of those two cases. It's not im= possible to use a utxo ownership proof to address the 1st of the two above,= but it's clearly much less strong, by default, than one would hope.
<= div>
Just a pure "I own a utxo" imposes no, or negligible c= ost. As per the delving post, and in a few other places, I've noted you can= impose an age and value restriction to bump up the cost. So it's not incon= ceivable but I suspect it's troublesome, and, it tends to fall into the "an= ything's better than nothing" category. While a fidelity bond with a public= timeout is more convenient specifically because you don't need to have "pr= epared" it in advance, a long time (so same lockup cost, but in advance).

The actual problems with fidelity bonds are twofo= ld: privacy headache from public utxo announcement, and expense (the expens= e part is unintuitive, but, if a value lock is to impose cost that *specifi= cally prevents Sybils*, it's very valuable that it be counted super-linearl= y in the size of the utxo; otherwise, a high-net-worth Sybiler can split hi= s amount into 100 pieces e.g. to get 100 valid entry tokens. Chris Belcher = originally proposed and implemented a quadratic scaling [2], but we reduced= that default exponent and made it configurable, precisely because the HNW = Sybiler (or honest participant) can nearly guarantee participation. It's a = whole can of worms, though).

So given that, it's= very natural to look for alternatives to, or finesses on, fidelity bond id= eas. Which you do, here, so, coming to some parts of your article:

> Since WabiSabi is a coinjoin implementation based o= n centralized=20 coordinator, a user must also trust the coordinator not to link inputs=20 and outputs.

I can see that being true only in o= ne specific sense: that Wa(bi)Sabi coordinators can Sybil and thus link. Ob= viously in the default honest mode of operation of coordinator this is not = true of such systems.

> Joinstr uses aut-ct as the primary mechanism for sybil resistance, however fidelity bonds=20 can also be used with aut-ct. There is an initiator who creates the pool and adds sybil requirements to join the pool. Everyone (maker and=20 takers) needs to provide the proof for a successful coinjoin.
=

Interesting idea to blend, but I a= m left considering an ambiguity:

=
When you say "fidelity bonds can be used with aut-ct" I *thought= * you meant=C2=A0 that: the anon set can be the anon-set of all timelocked = UTXOs (that may or may not be fidelity bond type), but if you do that then = of course you need to form the anon set based on some time-range, I guess? = The problem I always had with this was how do we coordinate anything like t= his for the anon set to be big enough. Like, if you did it with aut-ct it w= ould either have to be taproot or users publishing (where?) the pubkeys in = order to make the tree. People need to actually create these timelocked utx= os, so they need somehow to be told well in advance what the realistic para= meters are for it. It seems very difficult practically to coordinate and th= en to get to decent privacy, also (in case you commit a big chunk of funds = and then only 5 other people do it .. you were hoping 5000, now you have li= ttle or no privacy from a big cost. Just an example)

But reading further I see you were looking a= t it the other way; literally two separate things, both fidelity bonds, and= aut-ct tokens.

> <= /span> Everyone shares aut-ct proof that proves they own a P2TR UTXO= =20 worth 0.1-0.2 BTC that is unspent until last block and aged more than=20 2016 blocks

For me thi= s example illustrates why Sybil-threat type 1 is not well defended by this = kind of system. How much does that really cost? It's reasonable to answer "= almost absolutely nothing", since you don't spend those coins, and while in= a vague, abstract sense they are "locked" (you need some that lasted that = long), a well funded attacker could always have that amount x10 or x100 sit= ting *somewhere*. Handwavy, but imo it's only if we want to prevent 1000 of= those at once that it starts to be in some sense "costly". But a Sybil att= ack on a coinjoin does not need more than N-1 participants to Sybil an N-pa= rty join, so 1000 is way over the line.

Cheers,
AdamISZ/waxwing

[1] https://delvingbitcoin.org/t/anonymous-usage-to= kens-from-curve-trees-or-autct/862/3
[2] https://gist.github.com/= chris-belcher/87ebbcbb639686057a389acb9ab3e25b

On Tuesday, May= 27, 2025 at 10:21:42=E2=80=AFPM UTC-3 /dev /fd0 wrote:
Hi Bitcoin Developers,

<= /div>
I have written a post comparing the sybil resistance of joinmarke= t, joinstr and wabisabi. I did not include whirlpool in this post because i= ts not used anymore. Although it won't be any different from wabisabi.<= /div>

Its not a long post but written after doing a lot = of research. The results show that joinmarket has good enough sybil resista= nce. However, joinstr provides better solution.

Fe= el free to share your feedback.

--
You received this message because you are subscribed to the Google Groups &= quot;Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an e= mail to bitcoind= ev+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoind= ev/a34c4b4a-b8af-44d3-9b8f-ec525438cc92n%40googlegroups.com.
------=_Part_12427_188103395.1749307161576-- ------=_Part_12426_283977031.1749307161576--