Skip to content

Improving ricochet privacy #17

@kristapsk

Description

@kristapsk

Ricochet transaction chains created with ricochet-send.sh and ricochet-send-from.sh already are helpful defense against automated blockchain analysis that limits number of hops they are analyzing (and they do - from what I have seen, they show scores, which are mostly proximity of address to specific activities), but they have distinguishable pattern - chain of 1 input, 1 output transactions. I believe privacy can be improved litle bit here by reducing number of 1 input, 1 output transactions and replacing at least some of them with 1 input, 2 output or 2 input, 2 output transactions which are more common (see 1in-1out vs 1in-2out statistics charts).

Additional factor is time, but I don't see how to improve that with these scripts, users can do it themselves by increasing sleeptime_min, sleeptime_max and hop_confirmations parameters of the scripts.

Add additional donation output to Tx0 / Tx1

That is what Samourai Wallet already does. They currently add 0.001 BTC fee to themselves.

My plan would be to add 1% with upper limit of 0.001 BTC donation to early hop, with txfee_factor randomization applied on top of it (so could be up to 0.0013 BTC with default settings). Of course, we don't want address reuse, so script would ask server side for PGP signed address, preferably over Tor (if torify is available), with clearnet HTTPS fallback. That currently looks to me unavoidable centralization. In worst case for the user, if I'm evil actor and torify does not work for the user, that would allow me to tie specific transactions to user IP address. My hope is that power Bitcoin users using these scripts to improve privacy will have working Tor instance on machine too.

Addititional Q - is torify often available? Should try 127.0.0.1:9050 (Tor default) and 127.0.0.1:9150 (Tor Browser default) SOCKS proxies too?

Also need to think how to do it in a way that donation is voluntary (otherwise it's not a donation), likely should be some documented way how to turn this off.

Would look like this.

ricochet-send.sh

  • Tx0: 1..n inputs from wallet (depends on Core's coin selection), 2 outputs (to ricochet Tx1 and change back to wallet)
  • Tx1: 1 input, 2 outputs (to ricochet Tx2 and development donation) - all legacy P2PKH
  • Txn...: 1 input, 1 output transactions as before

ricochet-send-from.sh

  • Tx0: 1..n inputs from wallet (1 if no address reuse), 2 outputs (to ricochet Tx1 and development donation)
  • Tx1: 1 input, 1 output transactions as before
  • Txn...: 1 input, 1 output transactions as before

Fake BIP78 payjoin in ricochet-send.sh Tx0

Currently ricochet hops always use legacy P2PKH addresses. If migrated to bech32 P2WPKH, ricochet-send.sh could ensure that Tx0 always have at least two inputs from wallet. That way it shares anonymity set with these payjoins. I think SegWit is requirement here, as I'm not aware of any payjoin implementations in the wild that uses P2PKH.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions