Hi woltx,

> I've been reviewing joinstr, and if I understand the code correctly, the 
> cryptographic scheme mentioned as an alternative to blind signatures isn't 
> implemented yet, is it? Currently, it seems that anyone can submit unrelated 
> inputs and outputs.

Thanks for reviewing joinstr. Yes, its not implemented right now as it requires 
a NIP and at least one relay using it.

> Instead of clients sending descriptors to the relay and then verifying them 
> using `scantxoutset`, it can send `txid:out` with a message signed with the 
> address, verify using `verifymessage` and then use `gettxout` to retrieve the 
> value. That way, only the owner can send the UTXO.

`scantxoutset` is only used to get UTXO details (txid, vout and amount) as I 
thought its easier for users to just share a descriptor for coinjoin. 

If a user sends `txid:out` with a message signed with the address, this would 
be publicly available to everyone connected to same relay and links an input 
with output. Responding with a secret shared by relay for the round confirms 
user owns one of the input but does not reveal exact input.


/dev/fd0


Sent with Proton Mail secure email.

------- Original Message -------
On Friday, September 9th, 2022 at 9:05 PM, woltx <wo...@protonmail.com> wrote:


> Hi /dev/fd0,
> 
> I've been reviewing joinstr, and if I understand the code correctly, the 
> cryptographic scheme mentioned as an alternative to blind signatures isn't 
> implemented yet, is it? Currently, it seems that anyone can submit unrelated 
> inputs and outputs.
> 
> Perhaps PR #24058 (https://github.com/bitcoin/bitcoin/pull/24058) (basic 
> support BIP-322) can improve this scheme as it implements proof of ownership.
> 
> Instead of clients sending descriptors to the relay and then verifying them 
> using `scantxoutset`, it can send `txid:out` with a message signed with the 
> address, verify using `verifymessage` and then use `gettxout` to retrieve the 
> value. That way, only the owner can send the UTXO.
> 
> I've done some tests connected to a node with BIP322 enabled:
> 
> # to send
> input_txt: str = json.dumps(input)
> result = core.signmessage(wallet, input['address'], input_txt)
> input['signature'] = result['result']
> nostr_interface.publish_input(input)
> 
> # to receive
> def validate_input(input: dict[str, int, str, str]) -> bool:
> 
> # ...
> result = core.verifymessage(address=input['address'], 
> message=json.dumps(message), signature=input['signature'])
> return result['error'] == None and result['result'] == True
> 
> 
> 
> 
> 
> ------- Original Message -------
> On Saturday, August 20th, 2022 at 1:52 PM, alicexbt via bitcoin-dev 
> bitcoin-dev@lists.linuxfoundation.org wrote:
> 
> 
> 
> > Hi Max,
> > 
> > There a few DoS vectors that need to be fixed. Its just a proof of concept 
> > that I wanted to share with everyone to get feedback which could be 
> > improved over time. There is also a warning at the bottom of README to not 
> > use this on mainnet as it might have bugs.
> > 
> > I will continue the development with coinjoin transactions on signet for a 
> > few weeks until there is a stable release with no bugs.
> > 
> > I have a few ideas in mind for various relay types that might be used 
> > concurrently to prevent numerous problems. Custom relays are supported by 
> > Nostr. Examples include paying a fee to register for a round, subscribing 
> > with a time limit, or using invite-only relays. I will run a free and open 
> > nostr relay for this project and try to fix the Dos issues before a mainnet 
> > version is released for python script(for nerds) and android app (for all 
> > users).
> > 
> > Related links:
> > 
> > https://github.com/fiatjaf/relayer
> > https://github.com/fiatjaf/expensive-relay
> > https://github.com/fiatjaf/relayer/tree/master/whitelisted
> > 
> > /dev/fd0
> > 
> > Sent with Proton Mail secure email.
> > 
> > ------- Original Message -------
> > On Saturday, August 20th, 2022 at 10:04 AM, Max Hillebrand 
> > m...@towardsliberty.com wrote:
> > 
> > > Great to see an implementation of the idea.
> > > 
> > > Maybe I misunderstand, but isn't there a vulnerability of denial of 
> > > service here?
> > > 
> > > A user who registers one input will receive the round secret identifier, 
> > > and this is all the information required for output registration. 
> > > However, that malicious user can now register multiple outputs, providing 
> > > the same secret, and nobody can link the malicious outputs to any 
> > > specific input. Therefor there cannot be a blame round where the 
> > > malicious input is removed, and thus there can be a ongoing free denial 
> > > of service attack without attribution or defense.
> > > 
> > > Skol
> > > Max
> > > 
> > > On August 20, 2022 10:20:00 AM GMT+02:00, alicexbt via bitcoin-dev 
> > > bitcoin-dev@lists.linuxfoundation.org wrote:
> > > 
> > > > Hi Bitcoin Developers,
> > > > 
> > > > I have written a python script as proof of concept for the coinjoin 
> > > > implementation using nostr. I used a lot of Python scripts created by 
> > > > others in school, so it feels nice to offer something that could be 
> > > > useful to others.
> > > > 
> > > > The implementation uses Bitcoin Core wallet and RPCs: `listunspent`, 
> > > > `getnewaddress`, `scantxoutset`, `createpsbt`, `combinepsbt`, 
> > > > `finalizepsbt` and `sendrawtransaction`. It requires python-nostr 
> > > > library because nostr is used for coordination between peers. Nostr is 
> > > > a decentralized network based on cryptographic keypairs. It is not 
> > > > peer-to-peer however simple and scalable.
> > > > 
> > > > Every step is published as an event using a nostr relay and 5 peers 
> > > > coordinate to create, sign and broadcast a coinjoin transaction. I need 
> > > > to write a NIP that would be an alternative to blind signatures. Relay 
> > > > will share a random secret with clients for one round which should be 
> > > > present in output registration request although never gets published. 
> > > > If someone tries to register an output without registering any inputs, 
> > > > request would not have the number initially shared with inputs so 
> > > > request would get rejected or published as unverified. Relay would not 
> > > > be able to link inputs and outputs as the number is same for all inputs 
> > > > in a round and they get registered at different times with new keys and 
> > > > IP address. Clients can use multiple relays at the same time to avoid 
> > > > trusting one relay. This would result in different shared secret number 
> > > > but same process. If a relay tries to cheat, users will not sign the 
> > > > transaction and avoid using it in future.
> > > > 
> > > > Usage:
> > > > 
> > > > 1)Run `python coinjoin.py` and enter descriptor for one of the inputs.
> > > > 2)Script will check inputs for this round in every 30 seconds and 
> > > > register a new adddress for output once 5 inputs are registered.
> > > > 3)Similar check happens every 30 seconds for outputs. Last peer should 
> > > > create a PSBT.
> > > > 4)Unsigned PSBT will be printed and signed by wallet with 
> > > > `walletprocesspsbt` RPC.
> > > > 5)Script will check signed PSBTs and last peer to sign should finalize 
> > > > coinjoin transaction once 5 signed PSBTs are received.
> > > > 6)Coinjoin transaction will be broadcasted and txid will printed.
> > > > 
> > > > Example:
> > > > 
> > > > ```
> > > > List of utxos in wallet:
> > > > 
> > > > wpkh([53830dca/84'/1'/0'/0/0]02449be5fb74725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5
> > > > 
> > > > Enter descriptor for the input registration: 
> > > > wpkh([53830dca/84'/1'/0'/0/0]02449be5fb74725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5
> > > > 
> > > > event id: 
> > > > bcbbe62d75d99fed73f1e50ac58a38d1840b658951893e63c0322b378d7d56f0
> > > > 
> > > > tb1qhxrp4zl54ul0twtyz0gury5399q7z0kvqqrl6m registered for output
> > > > 
> > > > event id: 
> > > > 9449c9065bef356d21507a98f88b028b17fc1c49eb195c8d4420604fcaaef041
> > > > 
> > > > Unsigned PSBT: 
> > > > cHNidP8BAP1yAQIAAAAFtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOrRRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA/////zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfzcDwAQAAAAD/////wMa4XAgnU+39Ien+KG9rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42ID6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GNSM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz71uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPSZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAAABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAAAAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgAAAAAAAAAAAAAAAAAAAA==
> > > > 
> > > > event id: 
> > > > 976744b38fa9343fb79e1b5215512ead6ee08e5890d79a201fc5b872f6de4eba
> > > > 
> > > > Signed PSBT: 
> > > > cHNidP8BAP1yAQIAAAAFtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOrRRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA/////zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfzcDwAQAAAAD/////wMa4XAgnU+39Ien+KG9rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42ID6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GNSM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz71uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPSZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAAABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAAAAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgAAAAAAAQBxAgAAAAG+qpMXZCy6tBuUlgo8JD0GVXKp60FkhwDeg2sF1fkFkwMAAAAA/f///wLo9wEAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUWwMAAAAAAAAWABRfPf//hwMjHB4OKj87cU19XOSh7yOWAQABAR/o9wEAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUAQhrAkcwRAIgOIhLoC5348U8YkEr4GU1K4yWskIOEXgW4Wsk/W2cR7ICIEJXqtOuDJ5CkwrSuwJLWtzab4dslbN3KuL/pyooMnOCASECRJvl+3RyUlXu61DrqTD6h3BfIemdE81xDPLB8hFTyAgAAAAAACICA77Cnd6o3kr0yc+91eabpOn5igs/MUMbudNYSS6oyMWMGFODDcpUAACAAQAAgAAAAIAAAAAAFAAAAAAAAAAA
> > > > 
> > > > event id: 
> > > > 5846b6e6902f3c5a43496d7d9785ed62444aa74963f03c33d637d8b09ee7a139
> > > > 
> > > > Coinjoin tx: 
> > > > 75e490b10b15a6a0422f25ff66ad98ef70390c8fecaac02712705dce8cc3564b
> > > > 
> > > > event id: 
> > > > 9b5d4bf279b59e2b6e539e683fba83da72dce2b640360aa95db1b1400be93190
> > > > ```
> > > > 
> > > > There are lot of things that could be improved and a few suggestions 
> > > > are in the gist that described the idea. I would love read to any 
> > > > opinions about this experiment and will start working on creating an 
> > > > Android app for joinstr next week.
> > > > 
> > > > Credits:
> > > > 
> > > > - fiatjaf (Nostr)
> > > > - Andrew Chow (PSBT)
> > > > - Jeff Thibault (python-nostr)
> > > > - Existing coinjoin implmentations
> > > > 
> > > > /dev/fd0
> > > > 
> > > > Sent with Proton Mail secure email.
> > > > 
> > > > bitcoin-dev mailing list
> > > > bitcoin-dev@lists.linuxfoundation.org
> > > > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
> > 
> > _______________________________________________
> > bitcoin-dev mailing list
> > bitcoin-dev@lists.linuxfoundation.org
> > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev

Reply via email to