Cryptocurrency Mixing

A
Cryptocurrency
Mixing
Privacy implementations with
JoinMarket for Bitcoin
and
Masternode mixing for Dash
Contents
A normal transaction
What is the problem for privacy?
How does CoinJoin help?
JoinMarket: peer-to-peer CoinJoin for Bitcoin
Masternode mixing: ahead-of-time mixing for
Dash
Summary
Transactions
Example transactions
10 BTC 7 BTC
3 BTC
signature
input output
output
3 BTC 4 BTC
1 BTC
signature
input output
output
2 BTC
signature
input
Example real
transaction
signature
public key
Typical “send money”
case
10 BTC 7 BTC
3 BTC
signature
change returned to sender
money drawn
from wallet
money sent
to recipient
What does Bob know
about Alice’s finances?
Multiple inputs
a: 6 BTC 7 BTC
3 BTC
signature
change returned to sender
money drawn
from wallet
money sent
to recipient
b: 4 BTC
signature
How much extra information
does this reveal to Bob?
Address reuse
10 BTC 7 BTC
3 BTC
signature
3 BTC 4 BTC
1 BTC
signature
1abcxyz…
What does this reveal about Alice and Dorothy?
3 BTC
signature
CoinJoin
Disjunct transactions
10 BTC 7 BTC
3 BTC
signature
input output
output
3 BTC 4 BTC
1 BTC
signature
input output
output
2 BTC
signature
Even they are made by different people,
do they need to be separate on the blockchain?
Joined transactions
10 BTC 7 BTC
3 BTC
signature
input output
output
3 BTC 4 BTC
1 BTC
signature
input output
output
2 BTC
signature
input
Is it possible to correlate the inputs with the outputs?
JoinMarket
JoinMarket actors
Investor with
spare bitcoins and time
Bitcoin user who wants
extra privacy
“taker”“maker”
JoinMarket principle
Ivan the Investor
How do we get people like Ivan to
keep his coins in a wallet for mixing?
taker fee
Network topology
IRC server
(trading pit)
Tor network
mixing peer mixing peermixing peer
(future versions of
JoinMarket may replace
IRC with P2P
communication)
CoinJoin
communication
maker
taker
maker
running
yieldgenerator.py
running
yieldgenerator.py
private messages
running
sendpayment.py
public messages
order
orderbook
orderbookfill
pubkey
ioauth
auth
tx
sig
(etc…)
Sample Transaction
3 parties, amount 25 BTC
How does it look?
Installation
% git clone 
https://github.com/JoinMarket-Org/joinmarket.git 
joinmarket-btcmcr1
% cd joinmarket-btcmcr1
Wallet generation
% python wallet-tool.py generate
2016-05-01 18:50:04,176 [MainThread ] [DEBUG] hello joinmarket
Write 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
Switch to
Bitcoin full node
see local Bitcoin Core/Classic etc data folde
Switch to
Bitcoin full node
display wallet
command
% python wallet-tool.py wallet.json
2016-05-01 18:58:49,303 [MainThread ] [DEBUG] hello joinmarket
Enter wallet decryption passphrase:
2016-05-01 18:58:50,722 [MainThread ] [DEBUG] requesting wallet history
2016-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-9e5123
restart 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)
Show wallet contents
display wallet command
% python wallet-tool.py wallet.json
2016-05-01 19:23:41,613 [MainThread ] [DEBUG] hello joinmarket
Enter wallet decryption passphrase:
2016-05-01 19:23:43,774 [MainThread ] [DEBUG] requesting wallet history
2016-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.00770592689514sec
mixing 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.00000000btc
mixing 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
Fund wallet (anyhow)
output sent to JoinMarket wallet
% python wallet-tool.py wallet.json
2016-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.10000000btc
mixing 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
% python sendpayment.py wallet.json -N 5 -m 0 2500000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP
2016-05-01 22:41:48,340 [MainThread ] [DEBUG] hello joinmarket
Generated random nickname: Supixaxal
2016-05-01 22:41:48,415 [MainThread ] [DEBUG] starting sendpayment
Enter wallet decryption passphrase:
2016-05-01 22:41:52,519 [MainThread ] [DEBUG] requesting wallet history
2016-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.00794100761414sec
2016-05-01 22:41:54,083 [MainThread ] [DEBUG] starting irc
2016-05-01 22:41:54,083 [Thread-1 ] [DEBUG] starting ping thread
2016-05-01 22:41:54,084 [Thread-2 ] [DEBUG] starting throttle thread
2016-05-01 22:41:54,084 [MainThread ] [DEBUG] connecting
2016-05-01 22:41:57,173 [MainThread ] [DEBUG] Connected to IRC and joined channel
2016-05-01 22:41:57,174 [MainThread ] [DEBUG] >>pubmsg !orderbook
waiting for all orders to certainly arrive
…
2016-05-01 22:42:50,535 [MainThread ] [DEBUG] created fully signed tx, ending
2016-05-01 22:42:50,574 [MainThread ] [DEBUG] line was zero length
2016-05-01 22:42:50,575 [MainThread ] [DEBUG] disconnected irc
2016-05-01 22:42:50,575 [MainThread ] [DEBUG] ending irc
Send funds
send payment
command
join the
market
broadcast
Check join
% python wallet-tool.py wallet.json
2016-05-01 22:50:20,154 [MainThread ] [DEBUG] hello joinmarket
Enter wallet decryption passphrase:
2016-05-01 22:50:22,238 [MainThread ] [DEBUG] requesting wallet history
2016-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.00749111175537sec
mixing 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.07448981btc
mixing 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
% python sendpayment.py wallet.json -N 5 -m 1 0 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa
2016-05-01 22:54:38,682 [MainThread ] [DEBUG] hello joinmarket
Generated random nickname: Moxivexoh
2016-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.09860919btc
mixing 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 total
balance
Tumbling
Generate receive
addresses
generate multiple addresses for enhanced privacy
% python wallet-tool.py wallet.json
2016-05-02 16:16:38,556 [MainThread ] [DEBUG] hello joinmarket
Enter 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 I
prepared
earlier
We will be tumbling
this much
% python tumbler.py wallet.json --timelambda=1 13hGdJFTFaSaD8eJ4rXQ2yL12gVEa7LHZM
1Ck161xjSdDHwdauh7BA9ePRtx3VVzdpVg 1GEn4mdF77EULNLzoE27Eo6mpwmr8xGNEn
2016-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 tumble
tumble command
option to use average wait time
of 1 minute instead of 30
outputs
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 minutes
estimated time taken 88.63 minutes or 1.48 hours
tumble with these tx? (y/n):y
…
split of funds into
next round
outputs
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.08505485btc
mixing 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
Masternode Mixing
What is Dash?
Fork of Bitcoin
Launched 18 January 2014
Initially named XCoin, then Darkcoin, then Dash (“digital
cash”)
Initial goal was to add privacy features to Bitcoin
Current blockchain approx size: 2GB
Current 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)
What is a
masternode?
Bitcoin:
Miner:
secures the blockchain
100% of block reward
Node:
stores, validates and shares the blockchain
0% of block reward
Dash:
Miner:
secures the blockchain
45% of block reward
Masternode:
stores, validates and shares the blockchain
provides higher-tier services eg mixing
45% of block reward + fees1000 Dash
collateral
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
tx
10 dash 10 dash 10 dash 10 dash
1 dash 1 dash 1 dash 1 dash
1 dash
numbers slightly simplified (no duffs)
Masternode mixing
masternode
mixing peer
mixing peer
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
Masternode chaining
masternode
mixing peer
mixing peer
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
mixing peer
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
How does it look?
Dash-QT: 1
Dash-QT: Empty
wallet
Request payment
Send Dash to wallet
Check Dash received
Wait for Dash to
confirm
Start mixing
Mixed coins pending
Incoming
denominations
Transactions
Transactions
reateDenomination
Denominate(mix)
mine not mine
Privacy threats
The nosey node attack
masternode
mixing peer
mixing peer
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash
mixing peer
10 dash
10 dash
10 dash
10 dash
10 dash
10 dash👹
randomly chosen from a pool
of (currently) 3500-4000 masternodes
chain depth
2-8
Probability of snooping
successAttacker Masternodes /
Total Masternodes
Depth Of The Chain Probability of success (n/t)^r DASH Required
10/1010 2 9.80e05 10,000DASH
10/1010 4 9.60e09 10,000DASH
10/1010 8 9.51e11 10,000DASH
100/1100 2 8.26e03 100,000DASH
100/1100 4 6.83e05 100,000DASH
100/1100 8 4.66e09 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
Other threats
(as of Sep 2014)
Source: Reply to Kristov's paper by Evan Duffield on Dash/forum
That’s all the threat stuff I had time to prepare
Summary
References
CoinJoin Wikipedia article:
https://en.wikipedia.org/wiki/CoinJoin
CoinJoin: Bitcoin privacy for the real world (Greg Maxwell):
https://bitcointalk.org/index.php?topic=279249
Joinmarket - Coinjoin that people will actually use (Chris Belcher):
https://bitcointalk.org/index.php?topic=919116.0
Dash whitepaper (Evan Duffield, Daniel Diaz):
https://www.dash.org/wp-content/uploads/2015/04/Dash-
WhitepaperV1.pdf
An Analysis of Darkcoin’s Blockchain Privacy via Darksend+ (Kristov
Atlas):
http://cdn.anonymousbitcoinbook.com/darkcoin/darksend-
paper/Atlas_Darksend-Analysis-v001.pdf
1 of 62

Recommended

BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session by
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session 병완 임
462 views18 slides
Concept of BlockChain & Decentralized Application by
Concept of BlockChain & Decentralized ApplicationConcept of BlockChain & Decentralized Application
Concept of BlockChain & Decentralized ApplicationSeiji Takahashi
5.1K views63 slides
Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015) by
Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015)Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015)
Ethereum VM and DSLs for Smart Contracts (updated on May 12th 2015)Zvi Avraham
4.6K views206 slides
The bitcoin blockchain by
The bitcoin blockchainThe bitcoin blockchain
The bitcoin blockchainSalah Hawila
572 views36 slides
CiscoLogistics - ContactCustomer by
CiscoLogistics - ContactCustomerCiscoLogistics - ContactCustomer
CiscoLogistics - ContactCustomerAles Vymyslicky
186 views14 slides
神に近づくx/net/context (Finding God with x/net/context) by
神に近づくx/net/context (Finding God with x/net/context)神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)guregu
5.6K views33 slides

More Related Content

Similar to Cryptocurrency Mixing

Bitcoin : A fierce Decentralized internet currency by
Bitcoin : A fierce Decentralized internet currencyBitcoin : A fierce Decentralized internet currency
Bitcoin : A fierce Decentralized internet currencyShivek Khurana
1.5K views38 slides
Bitcoin protocol for developers at techfest by
Bitcoin protocol for developers at techfestBitcoin protocol for developers at techfest
Bitcoin protocol for developers at techfestAlberto Gomez Toribio
800 views82 slides
Bitcoin, beyond payments by
Bitcoin, beyond paymentsBitcoin, beyond payments
Bitcoin, beyond paymentsPierre Noizat
1.3K views17 slides
How to integrate bit coin wallet using blockchain methodology by
How to integrate bit coin wallet using blockchain methodologyHow to integrate bit coin wallet using blockchain methodology
How to integrate bit coin wallet using blockchain methodologyMitosis Technology
109 views13 slides
Bitcoin protocol for developerBitcoin Protocol for Developers by
Bitcoin protocol for developerBitcoin Protocol for DevelopersBitcoin protocol for developerBitcoin Protocol for Developers
Bitcoin protocol for developerBitcoin Protocol for DevelopersParadigma Digital
1.5K views82 slides
Wallet from noob to pro by
Wallet from noob to proWallet from noob to pro
Wallet from noob to proBrian Yap
246 views33 slides

Similar to Cryptocurrency Mixing(20)

Bitcoin : A fierce Decentralized internet currency by Shivek Khurana
Bitcoin : A fierce Decentralized internet currencyBitcoin : A fierce Decentralized internet currency
Bitcoin : A fierce Decentralized internet currency
Shivek Khurana1.5K views
Bitcoin, beyond payments by Pierre Noizat
Bitcoin, beyond paymentsBitcoin, beyond payments
Bitcoin, beyond payments
Pierre Noizat1.3K views
How to integrate bit coin wallet using blockchain methodology by Mitosis Technology
How to integrate bit coin wallet using blockchain methodologyHow to integrate bit coin wallet using blockchain methodology
How to integrate bit coin wallet using blockchain methodology
Mitosis Technology109 views
Bitcoin protocol for developerBitcoin Protocol for Developers by Paradigma Digital
Bitcoin protocol for developerBitcoin Protocol for DevelopersBitcoin protocol for developerBitcoin Protocol for Developers
Bitcoin protocol for developerBitcoin Protocol for Developers
Paradigma Digital1.5K views
Wallet from noob to pro by Brian Yap
Wallet from noob to proWallet from noob to pro
Wallet from noob to pro
Brian Yap246 views
9hfuleqnrlml5uhh9ilx-signature-f880bde3edecbc4113a9071227f39f1fbf3aec3f859381... by abdallah76803
9hfuleqnrlml5uhh9ilx-signature-f880bde3edecbc4113a9071227f39f1fbf3aec3f859381...9hfuleqnrlml5uhh9ilx-signature-f880bde3edecbc4113a9071227f39f1fbf3aec3f859381...
9hfuleqnrlml5uhh9ilx-signature-f880bde3edecbc4113a9071227f39f1fbf3aec3f859381...
abdallah768034 views
“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren... by Dace Barone
“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren...“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren...
“Technical Intro to Blockhain” by Yurijs Pimenovs from Paybis at CryptoCurren...
Dace Barone175 views
Bitcoin Blockchain - Under the Hood by Galin Dinkov
Bitcoin Blockchain - Under the HoodBitcoin Blockchain - Under the Hood
Bitcoin Blockchain - Under the Hood
Galin Dinkov2.8K views
Bitcoin San Francisco Dev Talk 6-23-14, Tom Johnson by airealtime
Bitcoin San Francisco Dev Talk 6-23-14, Tom JohnsonBitcoin San Francisco Dev Talk 6-23-14, Tom Johnson
Bitcoin San Francisco Dev Talk 6-23-14, Tom Johnson
airealtime383 views
Monero Presentation by Justin Ehrenhofer - Madison, Wisconsin 2 2017 by Justin Ehrenhofer
Monero Presentation by Justin Ehrenhofer - Madison, Wisconsin 2 2017Monero Presentation by Justin Ehrenhofer - Madison, Wisconsin 2 2017
Monero Presentation by Justin Ehrenhofer - Madison, Wisconsin 2 2017
Bitcoin developer guide by 承翰 蔡
Bitcoin developer guideBitcoin developer guide
Bitcoin developer guide
承翰 蔡2.1K views
Eclipsecon Europe: Blockchain, Ethereum and Business Applications by Matthias Zimmermann
Eclipsecon Europe: Blockchain, Ethereum and Business ApplicationsEclipsecon Europe: Blockchain, Ethereum and Business Applications
Eclipsecon Europe: Blockchain, Ethereum and Business Applications
Bitcoin Micropayment Channels by JohannBarbie
Bitcoin Micropayment ChannelsBitcoin Micropayment Channels
Bitcoin Micropayment Channels
JohannBarbie2.5K views
create your own cryptocurrency by Bellaj Badr
create your own cryptocurrencycreate your own cryptocurrency
create your own cryptocurrency
Bellaj Badr527 views

Recently uploaded

Benefits in Software Development by
Benefits in Software DevelopmentBenefits in Software Development
Benefits in Software DevelopmentJohn Valentino
6 views15 slides
Introduction to Maven by
Introduction to MavenIntroduction to Maven
Introduction to MavenJohn Valentino
7 views10 slides
.NET Deserialization Attacks by
.NET Deserialization Attacks.NET Deserialization Attacks
.NET Deserialization AttacksDharmalingam Ganesan
7 views50 slides
EV Charging App Case by
EV Charging App Case EV Charging App Case
EV Charging App Case iCoderz Solutions
10 views1 slide
Quality Assurance by
Quality Assurance Quality Assurance
Quality Assurance interworksoftware2
8 views6 slides
aATP - New Correlation Confirmation Feature.pptx by
aATP - New Correlation Confirmation Feature.pptxaATP - New Correlation Confirmation Feature.pptx
aATP - New Correlation Confirmation Feature.pptxEsatEsenek1
222 views6 slides

Recently uploaded(20)

aATP - New Correlation Confirmation Feature.pptx by EsatEsenek1
aATP - New Correlation Confirmation Feature.pptxaATP - New Correlation Confirmation Feature.pptx
aATP - New Correlation Confirmation Feature.pptx
EsatEsenek1222 views
Bootstrapping vs Venture Capital.pptx by Zeljko Svedic
Bootstrapping vs Venture Capital.pptxBootstrapping vs Venture Capital.pptx
Bootstrapping vs Venture Capital.pptx
Zeljko Svedic16 views
How to build dyanmic dashboards and ensure they always work by Wiiisdom
How to build dyanmic dashboards and ensure they always workHow to build dyanmic dashboards and ensure they always work
How to build dyanmic dashboards and ensure they always work
Wiiisdom16 views
predicting-m3-devopsconMunich-2023.pptx by Tier1 app
predicting-m3-devopsconMunich-2023.pptxpredicting-m3-devopsconMunich-2023.pptx
predicting-m3-devopsconMunich-2023.pptx
Tier1 app10 views
Advanced API Mocking Techniques Using Wiremock by Dimpy Adhikary
Advanced API Mocking Techniques Using WiremockAdvanced API Mocking Techniques Using Wiremock
Advanced API Mocking Techniques Using Wiremock
Dimpy Adhikary5 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi217 views
Dapr Unleashed: Accelerating Microservice Development by Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski16 views
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile... by Stefan Wolpers
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...
How To Make Your Plans Suck Less — Maarten Dalmijn at the 57th Hands-on Agile...
Stefan Wolpers44 views
Top-5-production-devconMunich-2023.pptx by Tier1 app
Top-5-production-devconMunich-2023.pptxTop-5-production-devconMunich-2023.pptx
Top-5-production-devconMunich-2023.pptx
Tier1 app10 views

Cryptocurrency Mixing

  • 1. Cryptocurrency Mixing Privacy implementations with JoinMarket for Bitcoin and Masternode mixing for Dash
  • 2. Contents A normal transaction What is the problem for privacy? How does CoinJoin help? JoinMarket: peer-to-peer CoinJoin for Bitcoin Masternode mixing: ahead-of-time mixing for Dash Summary
  • 4. Example transactions 10 BTC 7 BTC 3 BTC signature input output output 3 BTC 4 BTC 1 BTC signature input output output 2 BTC signature input
  • 6. Typical “send money” case 10 BTC 7 BTC 3 BTC signature change returned to sender money drawn from wallet money sent to recipient What does Bob know about Alice’s finances?
  • 7. Multiple inputs a: 6 BTC 7 BTC 3 BTC signature change returned to sender money drawn from wallet money sent to recipient b: 4 BTC signature How much extra information does this reveal to Bob?
  • 8. Address reuse 10 BTC 7 BTC 3 BTC signature 3 BTC 4 BTC 1 BTC signature 1abcxyz… What does this reveal about Alice and Dorothy? 3 BTC signature
  • 10. Disjunct transactions 10 BTC 7 BTC 3 BTC signature input output output 3 BTC 4 BTC 1 BTC signature input output output 2 BTC signature Even they are made by different people, do they need to be separate on the blockchain?
  • 11. Joined transactions 10 BTC 7 BTC 3 BTC signature input output output 3 BTC 4 BTC 1 BTC signature input output output 2 BTC signature input Is it possible to correlate the inputs with the outputs?
  • 13. JoinMarket actors Investor with spare bitcoins and time Bitcoin user who wants extra privacy “taker”“maker”
  • 14. JoinMarket principle Ivan the Investor How do we get people like Ivan to keep his coins in a wallet for mixing? taker fee
  • 15. Network topology IRC server (trading pit) Tor network mixing peer mixing peermixing peer (future versions of JoinMarket may replace IRC with P2P communication)
  • 18. How does it look?
  • 19. Installation % git clone https://github.com/JoinMarket-Org/joinmarket.git joinmarket-btcmcr1 % cd joinmarket-btcmcr1
  • 20. Wallet generation % python wallet-tool.py generate 2016-05-01 18:50:04,176 [MainThread ] [DEBUG] hello joinmarket Write 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
  • 21. Switch to Bitcoin full node see local Bitcoin Core/Classic etc data folde
  • 22. Switch to Bitcoin full node display wallet command % python wallet-tool.py wallet.json 2016-05-01 18:58:49,303 [MainThread ] [DEBUG] hello joinmarket Enter wallet decryption passphrase: 2016-05-01 18:58:50,722 [MainThread ] [DEBUG] requesting wallet history 2016-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-9e5123 restart 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)
  • 23. Show wallet contents display wallet command % python wallet-tool.py wallet.json 2016-05-01 19:23:41,613 [MainThread ] [DEBUG] hello joinmarket Enter wallet decryption passphrase: 2016-05-01 19:23:43,774 [MainThread ] [DEBUG] requesting wallet history 2016-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.00770592689514sec mixing 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.00000000btc mixing 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
  • 24. Fund wallet (anyhow) output sent to JoinMarket wallet
  • 25. % python wallet-tool.py wallet.json 2016-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.10000000btc mixing 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
  • 26. % python sendpayment.py wallet.json -N 5 -m 0 2500000 19UBkuXV3kUFwdjkUyW6btL76NQSHNxoKP 2016-05-01 22:41:48,340 [MainThread ] [DEBUG] hello joinmarket Generated random nickname: Supixaxal 2016-05-01 22:41:48,415 [MainThread ] [DEBUG] starting sendpayment Enter wallet decryption passphrase: 2016-05-01 22:41:52,519 [MainThread ] [DEBUG] requesting wallet history 2016-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.00794100761414sec 2016-05-01 22:41:54,083 [MainThread ] [DEBUG] starting irc 2016-05-01 22:41:54,083 [Thread-1 ] [DEBUG] starting ping thread 2016-05-01 22:41:54,084 [Thread-2 ] [DEBUG] starting throttle thread 2016-05-01 22:41:54,084 [MainThread ] [DEBUG] connecting 2016-05-01 22:41:57,173 [MainThread ] [DEBUG] Connected to IRC and joined channel 2016-05-01 22:41:57,174 [MainThread ] [DEBUG] >>pubmsg !orderbook waiting for all orders to certainly arrive … 2016-05-01 22:42:50,535 [MainThread ] [DEBUG] created fully signed tx, ending 2016-05-01 22:42:50,574 [MainThread ] [DEBUG] line was zero length 2016-05-01 22:42:50,575 [MainThread ] [DEBUG] disconnected irc 2016-05-01 22:42:50,575 [MainThread ] [DEBUG] ending irc Send funds send payment command join the market broadcast
  • 28. % python wallet-tool.py wallet.json 2016-05-01 22:50:20,154 [MainThread ] [DEBUG] hello joinmarket Enter wallet decryption passphrase: 2016-05-01 22:50:22,238 [MainThread ] [DEBUG] requesting wallet history 2016-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.00749111175537sec mixing 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.07448981btc mixing 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
  • 29. % python sendpayment.py wallet.json -N 5 -m 1 0 14QNhbnkBC6HQJgfgBP2hRDo57Ct7pKNMa 2016-05-01 22:54:38,682 [MainThread ] [DEBUG] hello joinmarket Generated random nickname: Moxivexoh 2016-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.09860919btc mixing 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 total balance
  • 31. Generate receive addresses generate multiple addresses for enhanced privacy
  • 32. % python wallet-tool.py wallet.json 2016-05-02 16:16:38,556 [MainThread ] [DEBUG] hello joinmarket Enter 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 I prepared earlier We will be tumbling this much
  • 33. % python tumbler.py wallet.json --timelambda=1 13hGdJFTFaSaD8eJ4rXQ2yL12gVEa7LHZM 1Ck161xjSdDHwdauh7BA9ePRtx3VVzdpVg 1GEn4mdF77EULNLzoE27Eo6mpwmr8xGNEn 2016-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 tumble tumble command option to use average wait time of 1 minute instead of 30 outputs
  • 34. 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 minutes estimated time taken 88.63 minutes or 1.48 hours tumble with these tx? (y/n):y … split of funds into next round outputs
  • 35. 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.08505485btc mixing 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
  • 37. What is Dash? Fork of Bitcoin Launched 18 January 2014 Initially named XCoin, then Darkcoin, then Dash (“digital cash”) Initial goal was to add privacy features to Bitcoin Current blockchain approx size: 2GB Current 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)
  • 38. What is a masternode? Bitcoin: Miner: secures the blockchain 100% of block reward Node: stores, validates and shares the blockchain 0% of block reward Dash: Miner: secures the blockchain 45% of block reward Masternode: stores, validates and shares the blockchain provides higher-tier services eg mixing 45% of block reward + fees1000 Dash collateral
  • 39. 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 tx 10 dash 10 dash 10 dash 10 dash 1 dash 1 dash 1 dash 1 dash 1 dash numbers slightly simplified (no duffs)
  • 40. Masternode mixing masternode mixing peer mixing peer 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash
  • 41. Masternode chaining masternode mixing peer mixing peer 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash mixing peer 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash
  • 42. How does it look?
  • 46. Send Dash to wallet
  • 48. Wait for Dash to confirm
  • 57. The nosey node attack masternode mixing peer mixing peer 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash mixing peer 10 dash 10 dash 10 dash 10 dash 10 dash 10 dash👹 randomly chosen from a pool of (currently) 3500-4000 masternodes chain depth 2-8
  • 58. Probability of snooping successAttacker Masternodes / Total Masternodes Depth Of The Chain Probability of success (n/t)^r DASH Required 10/1010 2 9.80e05 10,000DASH 10/1010 4 9.60e09 10,000DASH 10/1010 8 9.51e11 10,000DASH 100/1100 2 8.26e03 100,000DASH 100/1100 4 6.83e05 100,000DASH 100/1100 8 4.66e09 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
  • 59. Other threats (as of Sep 2014) Source: Reply to Kristov's paper by Evan Duffield on Dash/forum
  • 60. That’s all the threat stuff I had time to prepare
  • 62. References CoinJoin Wikipedia article: https://en.wikipedia.org/wiki/CoinJoin CoinJoin: Bitcoin privacy for the real world (Greg Maxwell): https://bitcointalk.org/index.php?topic=279249 Joinmarket - Coinjoin that people will actually use (Chris Belcher): https://bitcointalk.org/index.php?topic=919116.0 Dash whitepaper (Evan Duffield, Daniel Diaz): https://www.dash.org/wp-content/uploads/2015/04/Dash- WhitepaperV1.pdf An Analysis of Darkcoin’s Blockchain Privacy via Darksend+ (Kristov Atlas): http://cdn.anonymousbitcoinbook.com/darkcoin/darksend- paper/Atlas_Darksend-Analysis-v001.pdf