Skip to content

Commit 4ec350a

Browse files
committed
Reference StakeShuffle in place of CSPP++
Update verbiage on CSPP/StakeShuffle with more recent developments. Adds terms CoinShuffle++ and StakeShuffle to glossary. Adds video tutorial for privacy mixing on "How To" page. Addresses #1151 and #1152.
1 parent b343467 commit 4ec350a

File tree

4 files changed

+40
-29
lines changed

4 files changed

+40
-29
lines changed

docs/glossary.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,14 @@ Not using dedicated change addresses, or re-using existing ones, would enable a
8787
passive observer to infer a significant amount of information about your
8888
transaction sizes and where you are sending transactions to.
8989

90+
#### CoinShuffle++
91+
92+
The protocol Decred's [StakeShuffle](#stakeshuffle) privacy implementation utilizes. The CoinShuffle++ (CSPP) protocol is described in ["P2P Mixing and Unlinkable Bitcoin Transactions"](https://decred.org/research/ruffing2016.pdf) by Ruffing, Moreno-Sanchez and Kate. It uses [**DiceMix Light**](https://github.com/ElementsProject/dicemix/blob/master/doc/protocol.md), a faster iteration by Ruffing on the DiceMix process proposed in the CoinShuffle++ paper. This process allows for the creation of untraceable transactions, but the amounts are still publicly visible. To make the outputs indistinguishable, each mix must have a fixed denomination.
93+
9094
#### Coin Type
9195

9296
A unique number assigned to a cryptocurrency, which is used by [HD
93-
Wallets](#hd-wallet) during the process of generating public/private keypairs.
97+
Wallets](#hierarchical-deterministic-hd-wallet) during the process of generating public/private keypairs.
9498
Cryptocurrencies with assigned coin types are listed in
9599
[SLIP-0044](https://github.com/satoshilabs/slips/blob/master/slip-0044.md).
96100
The coin type of Decred is 42.
@@ -458,6 +462,10 @@ complete](https://en.wikipedia.org/wiki/Turing_completeness).
458462

459463
A change to consensus rules that is backwards compatible. Nodes running older versions without the new rules can still validate transactions and blocks. However, nodes running older versions can only partially validate transactions and blocks created by nodes using the new rules. This is because old nodes believe they are fully validating transactions, however, they are not able to undstand transactions created using the new rules. For instance, if a new transaction type is added via soft fork, only nodes using the new rules will be able to understand the new transaction type.
460464

465+
#### StakeShuffle
466+
467+
Decred's implementation of the [CoinShuffle++](#coinshuffle) protocol used to obfuscate ownership of DCR coins via Decred CoinJoin transactions created with a mixnet. When using StakeShuffle, the outputs are fully anonymized. None of the peers or the server can link outputs and inputs. The "StakeShuffle" term is often used interchangably with "CoinShuffle++" in regards to Decred's privacy implementation.
468+
461469
#### Stake transaction tree
462470

463471
[Transactions](https://www.reddit.com/r/decred/comments/66j4l4/decred_proof_of_stake_explained/dgjsyxd) relating to ticket buying and ticket voting rewards.

docs/privacy/cspp/how-to-cspp.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
1-
# How to use CoinShuffle++
1+
# <img class="dcr-icon" src="/img/dcr-icons/LockEye.svg" /> How to use StakeShuffle
22

33
---
44

5-
To use CSPP, several new options must be set in `dcrwallet`.
5+
## Using StakeShuffle with Decrediton
66

7-
Regardless of the intended setup, users must create two new accounts, `mixed` and `unmixed`, and point their wallets to Decred's CSPP servers:
7+
Privacy mixing is available within the Decrediton wallet software.
8+
9+
Follow along with the video tutorial [here](https://www.youtube.com/watch?v=QC65PBNwAK4) to get started.
10+
11+
## Using StakeShuffle via Command Line
12+
13+
To use StakeShuffle, several new options must be set in `dcrwallet`.
14+
15+
Regardless of the intended setup, users must create two new accounts, `mixed` and `unmixed`, and point their wallets to Decred's StakeShuffle servers:
816

917
Mainnet
1018

11-
- Download the CSPP server [TLS certificate](https://cspp.decred.org/cspp.decred.org.pem)
19+
- Download the StakeShuffle server [TLS certificate](https://cspp.decred.org/cspp.decred.org.pem)
1220
- Reference the certificate file using `--csppserver.ca=cspp.decred.org.pem`
13-
- Point `dcrwallet`to the CSPP mainnet server by setting `--csppserver=cspp.decred.org:5760`
21+
- Point `dcrwallet`to the StakeShuffle mainnet server by setting `--csppserver=cspp.decred.org:5760`
1422

1523
Testnet
1624

1725
- Testnet does **not** use the TLS certificate
18-
- Point `dcrwallet` to the CSPP testnet server by setting `--csppserver=cspp.decred.org:15760`
26+
- Point `dcrwallet` to the StakeShuffle testnet server by setting `--csppserver=cspp.decred.org:15760`
1927

2028
---
2129

@@ -100,12 +108,12 @@ Non-stakers are able to use this mechanism to mix received funds by using the un
100108

101109
## Tor Hidden Service
102110

103-
The CSPP server is accessible as a Tor hidden service, which provides two-way anonymity. The server doesn't know the IP of the client and the client also doesn't know the IP of the server. The latest onion address can be found at [CSPP server site](https://cspp.decred.org/) and can be configured by using the `--csppserver` flag.
111+
The StakeShuffle server is accessible as a Tor hidden service, which provides two-way anonymity. The server doesn't know the IP of the client and the client also doesn't know the IP of the server. The latest onion address can be found at [StakeShuffle server site](https://cspp.decred.org/) and can be configured by using the `--csppserver` flag.
104112

105113
In case `dcrwallet` connects to `dcrd` directly, the `--nodcrdproxy=1` option may be specified in addition to the above.
106114

107115
---
108116

109117
## Further Information
110118

111-
For more technical information about CoinShuffle++, visit Decred’s [cspp](https://github.com/decred/cspp) Github repository. You can also read about CoinShuffle++ on [Decred’s blog](https://blog.decred.org/2019/08/28/Iterating-Privacy/).
119+
For more technical information about CoinShuffle++, visit Decred’s [cspp](https://github.com/decred/cspp) Github repository. You can also read about CoinShuffle++/StakeShuffle on [Decred’s blog](https://blog.decred.org/2019/08/28/Iterating-Privacy/).

docs/privacy/cspp/overview.md

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
# <img class="dcr-icon" src="/img/dcr-icons/LockEye.svg" /> CoinShuffle++
1+
# <img class="dcr-icon" src="/img/dcr-icons/LockEye.svg" /> StakeShuffle
22

33
---
44

5-
## What is CoinShuffle++ and how does it work?
5+
## What is StakeShuffle and how does it work?
66

7-
**CoinShuffle++ (CSPP)** is a mixing protocol used to create Decred **CoinJoin** transactions.
7+
Decred's **StakeShuffle** is a **non-custodial** process used to create Decred **CoinJoin** transactions that obfuscate ownership of DCR coins, where the output addresses are anonymized via a mixnet. When using StakeShuffle, the outputs are fully anonymized. None of the peers or the server can link outputs and inputs.
88

9-
CSPP is a **non-custodial** process to obfuscate ownership of DCR coins, where the output addresses are anonymized via a mixnet. When using CSPP, the outputs are fully anonymized, none of the peers or the server can link outputs and inputs.
9+
The implementation is based on the **CoinShuffle++ (CSPP)** protocol from ["P2P Mixing and Unlinkable Bitcoin Transactions"](https://decred.org/research/ruffing2016.pdf) by Ruffing, Moreno-Sanchez and Kate. It uses [**DiceMix Light**](https://github.com/ElementsProject/dicemix/blob/master/doc/protocol.md), a faster iteration by Ruffing on the DiceMix process proposed in the CoinShuffle++ paper. This process allows for the creation of untraceable transactions, but the amounts are still publicly visible. To make the outputs indistinguishable, each mix must have a fixed denomination.
1010

11-
Decred's implementation is based on the CoinShuffle++ protocol from ["P2P Mixing and Unlinkable Bitcoin Transactions"](https://decred.org/research/ruffing2016.pdf) by Ruffing, Moreno-Sanchez and Kate. It uses [**DiceMix Light**](https://github.com/ElementsProject/dicemix/blob/master/doc/protocol.md), a faster iteration by Ruffing on the DiceMix process proposed in the CoinShuffle++ paper. This process allows for the creation of untraceable transactions, but the amounts are still publicly visible. To make the outputs indistinguishable, each mix must have a fixed denomination.
12-
13-
CoinShuffle++ does a fine job of anonymizing the output addresses, but if the change is not handled with care, it can link mixed and unmixed UTXOs. In many cases, change outputs can be linked to their inputs by doing a partial sum analysis. To deal with this threat, change from mixes flows to a separate wallet account, where it is then mixed into smaller denominations until the change is less than the smallest mixer denomination.
11+
StakeShuffle does a fine job of anonymizing the output addresses, but if the change is not handled with care, it can link mixed and unmixed UTXOs. In many cases, change outputs can be linked to their inputs by doing a partial sum analysis. To deal with this threat, change from mixes flows to a separate wallet account, where it is then mixed into smaller denominations until the change is less than the smallest mixer denomination.
1412

1513
Mixes occur episodically in **epochs**, with the mainnet epoch set to 20 minutes (1200 seconds).
1614

@@ -56,30 +54,27 @@ After a failed protocol run, peers can reveal session secrets to expose and excl
5654

5755
## Benefits
5856

59-
The implementation of the CSPP mixnet did not require changing the consensus rules. It is an opt-in implementation that obfuscates ownership of DCR coins with out requiring any modifications to the consensus rules.
57+
The implementation of the CSPP mixnet for StakeShuffle did not require changing the consensus rules. It is an opt-in implementation that obfuscates ownership of DCR coins without requiring any modifications to the consensus rules.
6058

6159
Other privacy implementations like zk-SNARKS and Ring Signatures provide substantial privacy, but impede the network from dropping historical transactions from their full nodes, a process also known as pruning. The CSPP mixnet does not have this effect on the blockchain and pruning remains possible. Pruning the blockchain reduces its size, which makes it easier to download and replicate.
6260

6361
At the same time, the CSPP mixnet presents a much simpler solution that is based on common cryptographic primitives and finite field arithmetic. It is simpler and more DoS resistant than [TumbleBit](https://decred.org/research/heilman2016.pdf), which was initially planned and developed,but dropped because of its vulnerability to Denial-of-Service attacks.
6462

6563
---
6664

67-
## Limitations
68-
69-
The current implementation has several limitations. Mainly the use of a centralized server, to which the CoinJoin leaks which inputs and change addresses belong to each peer, and the lack of support for Voting Service Providers and regular transactions.
70-
71-
The anonymity provided by CoinShuffle++ can be lost if wallet addresses are reused, or if change outputs are not handled correctly. It is imperative that addresses are never reused and that extended public keys of mixed and voting accounts are not revealed to other parties.
65+
## Considerations
7266

73-
The initial code only supports the CLI wallet, dcrwallet, and solo stakers. To implement CSPP beyond the CLI there are some issues that must be dealt with:
67+
The current implementation has limitations to consider. The use of a centralized server, to which the CoinJoin leaks which inputs and change addresses belong to each peer.
7468

75-
+ **dcrwallet:** Changes must be made to support unlocking individual accounts while other accounts keys are locked. CSPP requires hot keys to create on-demand transactions at the end of the timed process.
69+
The anonymity provided by StakeShuffle can be lost if wallet addresses are reused, or if change outputs are not handled correctly. It is imperative that addresses are never reused and that extended public keys of mixed and voting accounts are not revealed to other parties.
7670

77-
+ **Decrediton:** UI/UX must be made so that users have a simple way to opt-in into privacy. The UI must ensure users do not send funds from other accounts besides their mixed account, prevent receiving funds into accounts besides the change account, and use the mixed account to buy tickets.
78-
79-
+ **VSP API:** A new VSP API for buying tickets is needed. To fully support privacy, the way how users buy tickets through VSP must be substantially changed. Proposed changes are already outlined [here](https://github.com/decred/dcrstakepool/issues/574), and it entails moving from an account-based system to a ticket-based system, where users pay VSP fees upfront, and VSP tickets are indistinguishable from solo tickets.
71+
??? info "Development Update"
72+
While the initial code lacked support for mixing while staking with use of Voting Service Providers and for mixing regular transactions, later development of [VSPD](https://github.com/decred/vspd), a new implementation for Voting Service Providers to receive delegated voting rights, has allowed for anyone to participate in StakeShuffle mixing whether they solo stake or not. You can read about the changes that were necessary [here.](https://github.com/decred/dcrstakepool/issues/574) Support for mixing regular transactions is available as well. Additionally, while initial code was limited to command line tools, mixing is now available via GUI by way of using the [Decrediton](../../wallets/decrediton/decrediton-setup.md) wallet software.
8073

8174
---
8275

8376
## Further Information
8477

8578
For more technical information about CoinShuffle++, visit Decred’s [cspp](https://github.com/decred/cspp) Github repository. You can also read about CoinShuffle++ on [Decred’s blog](https://blog.decred.org/2019/08/28/Iterating-Privacy/).
79+
80+
To get started, see [How To Use StakeShuffle.](../how-to-cspp)

mkdocs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ nav:
116116
- 'gominer Pool Mining': 'mining/proof-of-work/pool-mining/gominer.md'
117117
- Privacy:
118118
- 'General Privacy': 'privacy/general-privacy.md'
119-
- CoinShuffle++:
119+
- StakeShuffle:
120120
- 'Overview': 'privacy/cspp/overview.md'
121-
- 'How to use CSPP': 'privacy/cspp/how-to-cspp.md'
121+
- 'How to use StakeShuffle': 'privacy/cspp/how-to-cspp.md'
122122
- Lightning Network:
123123
- 'Overview': 'lightning-network/overview.md'
124124
- 'Backups': 'lightning-network/backups.md'

0 commit comments

Comments
 (0)