cryptocurrency mixing

62
Cryptocurrenc y Mixing Privacy implementations with JoinMarket for Bitcoin and Masternode mixing for Dash

Upload: ashmoran

Post on 14-Apr-2017

293 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Cryptocurrency Mixing

Cryptocurrency Mixing

Privacy implementations withJoinMarket for Bitcoin

and Masternode mixing for Dash

Page 2: Cryptocurrency Mixing

ContentsA normal transactionWhat is the problem for privacy?How does CoinJoin help?JoinMarket: peer-to-peer CoinJoin for BitcoinMasternode mixing: ahead-of-time mixing for DashSummary

Page 3: Cryptocurrency Mixing

Transactions

Page 4: Cryptocurrency Mixing

Example transactions

10 BTC 7 BTC

3 BTCsignatur

e

input output

output

3 BTC 4 BTC

1 BTCsignatur

e

input output

output2 BTC

signature

input

Page 5: Cryptocurrency Mixing

Example real transaction

signature

public key

Page 6: Cryptocurrency Mixing

Typical “send money” case

10 BTC 7 BTC

3 BTCsignatur

e

change returned to sender

money drawnfrom wallet

money sentto recipient

What does Bob knowabout Alice’s finances?

Page 7: Cryptocurrency Mixing

Multiple inputs

a: 6 BTC 7 BTC

3 BTC

signature

change returned to sender

money drawnfrom wallet

money sentto recipient

b: 4 BTCsignature

How much extra informationdoes this reveal to Bob?

Page 8: Cryptocurrency Mixing

Address reuse10 BTC 7 BTC

3 BTCsignatur

e

3 BTC 4 BTC

1 BTC

signature

1abcxyz…

What does this reveal about Alice and Dorothy?

3 BTCsignature

Page 9: Cryptocurrency Mixing

CoinJoin

Page 10: Cryptocurrency Mixing

Disjunct transactions

10 BTC 7 BTC

3 BTCsignatur

e

input output

output

3 BTC 4 BTC

1 BTCsignatur

e

input output

output2 BTC

signature

Even they are made by different people, do they need to be separate on the blockchain?

Page 11: Cryptocurrency Mixing

Joined transactions10 BTC 7 BTC

3 BTCsignatur

e

input output

output

3 BTC 4 BTC

1 BTCsignatur

e

input output

output2 BTC

signature

input

Is it possible to correlate the inputs with the outputs?

Page 12: Cryptocurrency Mixing

JoinMarket

Page 13: Cryptocurrency Mixing

JoinMarket actorsInvestor with

spare bitcoins and timeBitcoin user who wants

extra privacy

“taker”“maker”

Page 14: Cryptocurrency Mixing

JoinMarket principleIvan the Investor

How do we get people like Ivan to keep his coins in a wallet for mixing?

taker fee

Page 15: Cryptocurrency Mixing

Network topologyIRC server

(trading pit)

Tor network

mixing peer mixing peermixing peer

(future versions of JoinMarket may replace

IRC with P2Pcommunication)

Page 16: Cryptocurrency Mixing

CoinJoin communication

maker

taker

maker

runningyieldgenerator.py

runningyieldgenerator.py

private messages

runningsendpayment.py

public messages

orderorderbook

orderbookfillpubkeyioauthauth

txsig

(etc…)

Page 17: Cryptocurrency Mixing

Sample Transaction

3 parties, amount 25 BTC

Page 18: Cryptocurrency Mixing

How does it look?

Page 19: Cryptocurrency Mixing

Installation% git clone \ https://github.com/JoinMarket-Org/joinmarket.git \ joinmarket-btcmcr1% cd joinmarket-btcmcr1

Page 20: Cryptocurrency Mixing

Wallet generation

% python wallet-tool.py generate

2016-05-01 18:50:04,176 [MainThread ] [DEBUG] hello joinmarketWrite down this wallet recovery seed

warm shade knee satisfy child bone hug door leaf depress blur use

Enter wallet encryption passphrase: Reenter wallet encryption passphrase: Input wallet file name (default: wallet.json): saved to wallet.json

generate command

wallet seed

wallet filename

Page 21: Cryptocurrency Mixing

Switch to Bitcoin full node

see local Bitcoin Core/Classic etc data folder

Page 22: Cryptocurrency Mixing

Switch toBitcoin full node

display walletcommand% python wallet-tool.py wallet.json

2016-05-01 18:58:49,303 [MainThread ] [DEBUG] hello joinmarketEnter wallet decryption passphrase: 2016-05-01 18:58:50,722 [MainThread ] [DEBUG] requesting wallet history2016-05-01 18:58:54,491 [MainThread ] [DEBUG] rpc: getaddressesbyaccount ['joinmarket-wallet-9e5123']2016-05-01 18:58:54,496 [MainThread ] [DEBUG] importing 200 addresses into account joinmarket-wallet-9e5123restart Bitcoin Core with -rescan if you're recovering an existing wallet from backup seed otherwise just restart this joinmarket script

importing into a local watch-only wallet(local Bitcoin node has only public keys, not private keys)

Page 23: Cryptocurrency Mixing

Show wallet contents

display wallet command% python wallet-tool.py wallet.json2016-05-01 19:23:41,613 [MainThread ] [DEBUG] hello joinmarketEnter wallet decryption passphrase: 2016-05-01 19:23:43,774 [MainThread ] [DEBUG] requesting wallet history2016-05-01 19:23:47,478 [MainThread ] [DEBUG] rpc: getaddressesbyaccount ['joinmarket-wallet-9e5123']2016-05-01 19:23:47,484 [MainThread ] [DEBUG] rpc: listtransactions ['joinmarket-wallet-9e5123', 1000, 0, True]2016-05-01 19:23:51,193 [MainThread ] [DEBUG] rpc: listunspent [0]2016-05-01 19:23:51,200 [MainThread ] [DEBUG] bitcoind sync_unspent took 0.00770592689514secmixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/000 14hzgMvxf9GhPTWjBxA7MHd8ytGT9dsp7n new 0.00000000 btc m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa new 0.00000000 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa new 0.00000000 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc internal addresses m/0/0/1/for mixdepth=0 balance=0.00000000btcmixing depth 1 m/0/1/ external addresses m/0/1/0/ m/0/1/0/000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP new 0.00000000 btc m/0/1/0/001 17bSF43rrcK6stgAXbbEEwBQJMSMh2pMhX new 0.00000000 btc …

1st internal wallet

2st internal wallet, etc

Page 24: Cryptocurrency Mixing

Fund wallet (anyhow)

output sent to JoinMarket wallet

Page 25: Cryptocurrency Mixing

% python wallet-tool.py wallet.json2016-05-01 19:52:16,028 [MainThread ] [DEBUG] hello joinmarket…mixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/000 14hzgMvxf9GhPTWjBxA7MHd8ytGT9dsp7n used 0.10000000 btc m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa new 0.00000000 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa new 0.00000000 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc m/0/0/0/006 184EYAbYveTYYLNW1ewTFV4ysEqpAswvN4 new 0.00000000 btc internal addresses m/0/0/1/for mixdepth=0 balance=0.10000000btcmixing depth 1 m/0/1/ external addresses m/0/1/0/ m/0/1/0/000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP new 0.00000000 btc m/0/1/0/001 17bSF43rrcK6stgAXbbEEwBQJMSMh2pMhX new 0.00000000 btc

Check funds received

1st internal wallet

Page 26: Cryptocurrency Mixing

% python sendpayment.py wallet.json -N 5 -m 0 2500000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP2016-05-01 22:41:48,340 [MainThread ] [DEBUG] hello joinmarketGenerated random nickname: Supixaxal2016-05-01 22:41:48,415 [MainThread ] [DEBUG] starting sendpaymentEnter wallet decryption passphrase: 2016-05-01 22:41:52,519 [MainThread ] [DEBUG] requesting wallet history2016-05-01 22:41:53,273 [MainThread ] [DEBUG] rpc: getaddressesbyaccount ['joinmarket-wallet-9e5123']2016-05-01 22:41:53,279 [MainThread ] [DEBUG] rpc: listtransactions ['joinmarket-wallet-9e5123', 1000, 0, True]2016-05-01 22:41:54,070 [MainThread ] [DEBUG] rpc: listunspent []2016-05-01 22:41:54,078 [MainThread ] [DEBUG] bitcoind sync_unspent took 0.00794100761414sec2016-05-01 22:41:54,083 [MainThread ] [DEBUG] starting irc2016-05-01 22:41:54,083 [Thread-1 ] [DEBUG] starting ping thread2016-05-01 22:41:54,084 [Thread-2 ] [DEBUG] starting throttle thread2016-05-01 22:41:54,084 [MainThread ] [DEBUG] connecting2016-05-01 22:41:57,173 [MainThread ] [DEBUG] Connected to IRC and joined channel2016-05-01 22:41:57,174 [MainThread ] [DEBUG] >>pubmsg !orderbookwaiting for all orders to certainly arrive…2016-05-01 22:42:50,535 [MainThread ] [DEBUG] created fully signed tx, ending2016-05-01 22:42:50,574 [MainThread ] [DEBUG] line was zero length2016-05-01 22:42:50,575 [MainThread ] [DEBUG] disconnected irc2016-05-01 22:42:50,575 [MainThread ] [DEBUG] ending irc

Send fundssend payment

command

join themarket

broadcast

Page 27: Cryptocurrency Mixing

Check join

Page 28: Cryptocurrency Mixing

% python wallet-tool.py wallet.json2016-05-01 22:50:20,154 [MainThread ] [DEBUG] hello joinmarketEnter wallet decryption passphrase: 2016-05-01 22:50:22,238 [MainThread ] [DEBUG] requesting wallet history2016-05-01 22:50:26,245 [MainThread ] [DEBUG] rpc: getaddressesbyaccount ['joinmarket-wallet-9e5123']2016-05-01 22:50:26,251 [MainThread ] [DEBUG] rpc: listtransactions ['joinmarket-wallet-9e5123', 1000, 0, True]2016-05-01 22:50:30,130 [MainThread ] [DEBUG] rpc: listunspent [0]2016-05-01 22:50:30,137 [MainThread ] [DEBUG] bitcoind sync_unspent took 0.00749111175537secmixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa new 0.00000000 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa new 0.00000000 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc m/0/0/0/006 184EYAbYveTYYLNW1ewTFV4ysEqpAswvN4 new 0.00000000 btc internal addresses m/0/0/1/ m/0/0/1/000 19DZ1jXweJtmBNn7UUPdJU2G2A8cuDCQ5y used 0.07448981 btc for mixdepth=0 balance=0.07448981btcmixing depth 1 m/0/1/ external addresses m/0/1/0/ m/0/1/0/000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP used 0.02500000 btc m/0/1/0/001 17bSF43rrcK6stgAXbbEEwBQJMSMh2pMhX new 0.00000000 btc

Compare mixing depths

1st internal wallet

2nd internal wallet

Page 29: Cryptocurrency Mixing

% python sendpayment.py wallet.json -N 5 -m 1 0 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa 2016-05-01 22:54:38,682 [MainThread ] [DEBUG] hello joinmarketGenerated random nickname: Moxivexoh2016-05-01 22:54:38,759 [MainThread ] [DEBUG] starting sendpayment…

% python wallet-tool.py wallet.json…mixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa used 0.02411938 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa new 0.00000000 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc m/0/0/0/006 184EYAbYveTYYLNW1ewTFV4ysEqpAswvN4 new 0.00000000 btc m/0/0/0/007 14jmzkDjF2Ruyn3kQwYsaS2quorjyqsZ72 new 0.00000000 btc internal addresses m/0/0/1/ m/0/0/1/000 19DZ1jXweJtmBNn7UUPdJU2G2A8cuDCQ5y used 0.07448981 btc for mixdepth=0 balance=0.09860919btcmixing depth 1 m/0/1/ external addresses m/0/1/0/ m/0/1/0/001 17bSF43rrcK6stgAXbbEEwBQJMSMh2pMhX new 0.00000000 btc m/0/1/0/002 1Hi5j3iyjUmGstQq5tLYjMTKNoVvZ5czCB new 0.00000000 btc m/0/1/0/003 19VZdjKBPXTzcWqsfLpjzPs1do1KWcPncK new 0.00000000 btc m/0/1/0/004 1FFRrzqMZbdDxdX75p7UrjY9crLi1bzGEb new 0.00000000 btc m/0/1/0/005 1BSJ5Y77hBwRwKSwZXKnDBWZF3WikC3PNo new 0.00000000 btc m/0/1/0/006 18x4KsBcUQnrGccVHvHWSRb8gco8nKUyja new 0.00000000 btc internal addresses m/0/1/1/for mixdepth=1 balance=0.00000000btc

Empty a mixing depth

amount = 0

new totalbalance

Page 30: Cryptocurrency Mixing

Tumbling

Page 31: Cryptocurrency Mixing

Generate receive addresses

generate multiple addresses for enhanced privacy

Page 32: Cryptocurrency Mixing

% python wallet-tool.py wallet.json2016-05-02 16:16:38,556 [MainThread ] [DEBUG] hello joinmarketEnter wallet decryption passphrase: …mixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa used 0.02411938 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa used 0.05054509 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc m/0/0/0/006 184EYAbYveTYYLNW1ewTFV4ysEqpAswvN4 new 0.00000000 btc m/0/0/0/007 14jmzkDjF2Ruyn3kQwYsaS2quorjyqsZ72 new 0.00000000 btc m/0/0/0/008 1XDsccCJLDGsW9VvzaFT2kjS332wJnqwr new 0.00000000 btc internal addresses m/0/0/1/ m/0/0/1/001 1P1ZXH2KZWBnWmfxepbf4rVtui9ZYBYgE used 0.02309129 btc for mixdepth=0 balance=0.09775576btc

Check mixing depth 0

Coins Iprepared

earlier

We will be tumbling this much

Page 33: Cryptocurrency Mixing

% python tumbler.py wallet.json --timelambda=1 13hGdJFTFaSaD8eJ4rXQ2yL12gVEa7LHZM 1Ck161xjSdDHwdauh7BA9ePRtx3VVzdpVg 1GEn4mdF77EULNLzoE27Eo6mpwmr8xGNEn2016-05-02 16:20:24,266 [MainThread ] [DEBUG] hello joinmarket['13hGdJFTFaSaD8eJ4rXQ2yL12gVEa7LHZM', '1Ck161xjSdDHwdauh7BA9ePRtx3VVzdpVg', '1GEn4mdF77EULNLzoE27Eo6mpwmr8xGNEn']{'liquiditywait': 60, 'addrcount': 3, 'minmakercount': 2, 'amountpower': 100.0, 'txcountparams': (4, 1), 'mixdepthcount': 4, 'waittime': 20, 'txfee': 5000, 'mincjamount': 100000, 'mixdepthsrc': 0, 'makercountrange': (3, 1.5), 'maxcjfee': (0.01, 10000), 'donateamount': 0, 'timelambda': 1.0, 'mintxcount': 1}2016-05-02 16:20:24,305 [MainThread ] [DEBUG] tumbler transaction list…TBC

Start tumbletumble commandoption to use average wait time

of 1 minute instead of 30

outputs

Page 34: Cryptocurrency Mixing

2016-05-02 16:20:24,305 [MainThread ] [DEBUG] tumbler transaction list[{'srcmixdepth': 0, 'tx': [{'amount_fraction': 0.26377219630602206, 'destination': 'internal', 'makercount': 2, 'wait': 0.77}, {'amount_fraction': 0.736227803693978, 'destination': 'internal', 'makercount': 2, 'wait': 0.04}]}, {'srcmixdepth': 1, 'tx': [{'amount_fraction': 0.12876737962157553, 'destination': 'internal', 'makercount': 2, 'wait': 2.36}, {'amount_fraction': 0.10885260611117395, 'destination': 'internal', 'makercount': 2, 'wait': 3.95}, {'amount_fraction': 0.7623800142672505, 'destination': '1GEn4mdF77EULNLzoE27Eo6mpwmr8xGNEn', 'makercount': 2, 'wait': 0.16}]}, {'srcmixdepth': 2, 'tx': [{'amount_fraction': 0.5982821353871555, 'destination': 'internal', 'makercount': 2, 'wait': 0.28}, {'amount_fraction': 0.40171786461284453, 'destination': '1Ck161xjSdDHwdauh7BA9ePRtx3VVzdpVg', 'makercount': 2, 'wait': 0.89}]}, {'srcmixdepth': 3, 'tx': [{'amount_fraction': 1.0, 'destination': '13hGdJFTFaSaD8eJ4rXQ2yL12gVEa7LHZM', 'makercount': 3, 'wait': 0.18}]}]waits in total for 8 blocks and 8.63 minutesestimated time taken 88.63 minutes or 1.48 hourstumble with these tx? (y/n):y…

split of funds into next round

outputs

Page 35: Cryptocurrency Mixing

Collect coins

technical error:tumbling stalled before I could finish the presentation

% python wallet-tool.py wallet.json…mixing depth 0 m/0/0/ external addresses m/0/0/0/ m/0/0/0/001 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa used 0.02411938 btc m/0/0/0/002 1AgtMNiGVHS6oVisDbQT8VVhv9xC31QeUa used 0.05054509 btc m/0/0/0/003 12wtzHevXDxzi5eUqYja4cFCT9CA7msqDL new 0.00000000 btc m/0/0/0/004 1HPzdoUDVXyPs2Awr4VFGncvc8qL3pF5jv new 0.00000000 btc m/0/0/0/005 1KVr1QjiUsTPCyQhaGNth8BZwYaBydPTpp new 0.00000000 btc m/0/0/0/006 184EYAbYveTYYLNW1ewTFV4ysEqpAswvN4 new 0.00000000 btc m/0/0/0/007 14jmzkDjF2Ruyn3kQwYsaS2quorjyqsZ72 new 0.00000000 btc m/0/0/0/008 1XDsccCJLDGsW9VvzaFT2kjS332wJnqwr new 0.00000000 btc internal addresses m/0/0/1/ m/0/0/1/002 1Ei1yo2VDHQnHGUoaUZrJ7uWNovZU6cqg9 used 0.01039038 btc for mixdepth=0 balance=0.08505485btcmixing depth 1 m/0/1/ external addresses m/0/1/0/ m/0/1/0/001 17bSF43rrcK6stgAXbbEEwBQJMSMh2pMhX new 0.00000000 btc m/0/1/0/002 1Hi5j3iyjUmGstQq5tLYjMTKNoVvZ5czCB new 0.00000000 btc m/0/1/0/003 19VZdjKBPXTzcWqsfLpjzPs1do1KWcPncK new 0.00000000 btc m/0/1/0/004 1FFRrzqMZbdDxdX75p7UrjY9crLi1bzGEb new 0.00000000 btc m/0/1/0/005 1BSJ5Y77hBwRwKSwZXKnDBWZF3WikC3PNo new 0.00000000 btc m/0/1/0/006 18x4KsBcUQnrGccVHvHWSRb8gco8nKUyja new 0.00000000 btc internal addresses m/0/1/1/ m/0/1/1/001 15tt2crkHQsVKWBfXJoufZND626HgzrDKW used 0.01245286 btc for mixdepth=1 balance=0.01245286btc

Page 36: Cryptocurrency Mixing

Masternode Mixing

Page 37: Cryptocurrency Mixing

What is Dash?Fork of Bitcoin

Launched 18 January 2014Initially named XCoin, then Darkcoin, then Dash (“digital cash”) Initial goal was to add privacy features to Bitcoin

Current blockchain approx size: 2GBCurrent valuation:

40-50m USD market cap (compare Bitcoin 6-7bn USD)6 400 000 Dash @ 6-7USD (compare Bitcoin 15 500 000 coins @ 400-500USD)

Page 38: Cryptocurrency Mixing

What is a masternode?

Bitcoin:

Miner:secures the blockchain100% of block reward

Node:stores, validates and shares the blockchain

0% of block reward

Dash:

Miner:secures the blockchain45% of block reward

Masternode:stores, validates and shares the blockchain

provides higher-tier services eg mixing45% of block reward + fees1000 Dash

collateral

Page 39: Cryptocurrency Mixing

Denomination

mixing peer mixing peer(s)

40 dash

5 dash

23 dash

10 dash

17 dash

tx

10 dash 10 dash 10 dash 10 dash

1 dash 1 dash 1 dash 1 dash

1 dash

tx10 dash 10 dash 10 dash 10 dash

1 dash 1 dash 1 dash 1 dash

1 dash

numbers slightly simplified (no duffs)

Page 40: Cryptocurrency Mixing

Masternode mixing

masternode

mixing peer

mixing peer

10 dash10 dash

10 dash10 dash

10 dash10 dash10 dash10 dash

Page 41: Cryptocurrency Mixing

Masternode chaining

masternode

mixing peer

mixing peer

10 dash10 dash

10 dash10 dash

10 dash10 dash10 dash10 dash

mixing peer

10 dash10 dash

10 dash10 dash

10 dash10 dash

Page 42: Cryptocurrency Mixing

How does it look?

Page 43: Cryptocurrency Mixing

Dash-QT: 1

Page 44: Cryptocurrency Mixing

Dash-QT: Empty wallet

Page 45: Cryptocurrency Mixing

Request payment

Page 46: Cryptocurrency Mixing

Send Dash to wallet

Page 47: Cryptocurrency Mixing

Check Dash received

Page 48: Cryptocurrency Mixing

Wait for Dash to confirm

Page 49: Cryptocurrency Mixing

Start mixing

Page 50: Cryptocurrency Mixing

Mixed coins pending

Page 51: Cryptocurrency Mixing

Incoming denominations

Page 52: Cryptocurrency Mixing

Transactions

Page 53: Cryptocurrency Mixing

Transactions

Page 54: Cryptocurrency Mixing

Crea

te

Deno

min

atio

ns

Page 55: Cryptocurrency Mixing

Deno

min

ate

(mix

)mine not mine

Page 56: Cryptocurrency Mixing

Privacy threats

Page 57: Cryptocurrency Mixing

The nosey node attack

masternode

mixing peer

mixing peer

10 dash10 dash

10 dash10 dash

10 dash10 dash10 dash10 dash

mixing peer

10 dash10 dash

10 dash10 dash

10 dash10 dash👹

randomly chosen from a poolof (currently) 3500-4000 masternodes

chain depth2-8

Page 58: Cryptocurrency Mixing

Probability of snooping success

Attacker Masternodes /Total Masternodes Depth Of The Chain Probability of success

(n/t)^r DASH Required

10/1010 2 9.80e 05 10,000DASH

10/1010 4 9.60e 09 10,000DASH

10/1010 8 9.51e 11 10,000DASH

100/1100 2 8.26e 03 100,000DASH

100/1100 4 6.83e 05 100,000DASH

100/1100 8 4.66e 09 100,000DASH

1000/2000 2 25% 1,000,000DASH

1000/2000 4 6.25% 1,000,000DASH

1000/2000 8 0.39% 1,000,000DASH

2000/3000 2 44.4% 2,000,000DASH

2000/3000 4 19.75% 2,000,000DASH

2000/3000 8 3.90% 2,000,000DASH

Page 59: Cryptocurrency Mixing

Other threats (as of Sep 2014)

Source: Reply to Kristov's paper by Evan Duffield on Dash/forum

Page 60: Cryptocurrency Mixing

That’s all the threat stuff I had time to prepare

Page 61: Cryptocurrency Mixing

Summary

Page 62: Cryptocurrency Mixing

ReferencesCoinJoin Wikipedia article: https://en.wikipedia.org/wiki/CoinJoinCoinJoin: Bitcoin privacy for the real world (Greg Maxwell): https://bitcointalk.org/index.php?topic=279249Joinmarket - Coinjoin that people will actually use (Chris Belcher):https://bitcointalk.org/index.php?topic=919116.0Dash whitepaper (Evan Duffield, Daniel Diaz): https://www.dash.org/wp-content/uploads/2015/04/Dash-WhitepaperV1.pdfAn Analysis of Darkcoin’s Blockchain Privacy via Darksend+ (Kristov Atlas):http://cdn.anonymousbitcoinbook.com/darkcoin/darksend-paper/Atlas_Darksend-Analysis-v001.pdf