Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create transaction privacy page #175 #349

Merged
merged 31 commits into from
May 28, 2021
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
84dd15e
docs(payments/privacy): import tx privacy content
johnsBeharry May 24, 2021
03aed32
feat(payments/privacy): add header and refine content
johnsBeharry May 25, 2021
a2f4a5f
docs(payments/privacy): simplify intro + more dos and donts
johnsBeharry May 25, 2021
86598ec
docs(payments/privacy): refine + add feedback from @DanGould
johnsBeharry May 25, 2021
d2a12c8
docs(payments/privacy): reduce design with privacy section
johnsBeharry May 25, 2021
9e52968
docs(payments/privacy): update image cache
johnsBeharry May 25, 2021
c82a8af
docs(payments/privacy): add illustrations
johnsBeharry May 26, 2021
c4d9765
docs(payments/privacy): update methods into
johnsBeharry May 26, 2021
c88fb1f
merge: branch 'master' into feature/tx-privacy
johnsBeharry May 26, 2021
0399085
docs(payments/privacy): update intro
johnsBeharry May 26, 2021
fc41d21
docs(payments/privacy): incorporate @gbks feedback
johnsBeharry May 26, 2021
256cfd5
docs(payments/privacy): reword address reuse dos
johnsBeharry May 26, 2021
5e39d8b
docs(payments/privacy): update after proof reading
johnsBeharry May 26, 2021
2db226b
docs(payments/privacy): update with feedback
johnsBeharry May 27, 2021
88e449b
Wording
danielnordh May 28, 2021
19bba71
Wording
danielnordh May 28, 2021
a4b6e3b
Wording
danielnordh May 28, 2021
19db00f
Wording
danielnordh May 28, 2021
49b2d1b
Wording
danielnordh May 28, 2021
d6f437a
Add mention about this being an advanced thing with sparse support so…
danielnordh May 28, 2021
acf2a0e
Wording
danielnordh May 28, 2021
b291d8b
Wording
danielnordh May 28, 2021
210bec4
Wording
danielnordh May 28, 2021
b036eb5
Wording
danielnordh May 28, 2021
b967527
Wording
danielnordh May 28, 2021
479c9f5
Change order to improve readability
danielnordh May 28, 2021
85c7c1d
Wording
danielnordh May 28, 2021
8e0c2db
A bunch to readability tweaks
danielnordh May 28, 2021
5e14a12
Remaining readability tweaks
danielnordh May 28, 2021
80fb9b7
Image captions
danielnordh May 28, 2021
d9b8210
fix link instead of footnote
pavlenex May 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions _compress_images_cache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -944,3 +944,12 @@ assets/images/guide/getting-started/visual-language/bitcoin-visual-language@2x.j
assets/images/guide/getting-started/visual-language/bitcoin-visual-language.jpg: bitcoin-visual-language.jpg
assets/images/guide/getting-started/visual-language/bitcoin-visual-language-mobile@2x.jpg: bitcoin-visual-language-mobile@2x.jpg
assets/images/guide/getting-started/visual-language/bitcoin-visual-language-mobile.jpg: bitcoin-visual-language-mobile.jpg
assets/images/guide/payments/privacy/header.jpg: header.jpg
assets/images/guide/payments/privacy/address-labeling.jpg: address-labeling.jpg
assets/images/guide/payments/privacy/address-labeling@2x.jpg: address-labeling@2x.jpg
assets/images/guide/payments/privacy/header@2x.jpg: header@2x.jpg
assets/images/guide/payments/privacy/privacy-header-mobile.jpg: privacy-header-mobile.jpg
assets/images/guide/payments/privacy/privacy-header-mobile@2x.jpg: privacy-header-mobile@2x.jpg
assets/images/guide/payments/privacy/coin-join.jpg: coin-join.jpg
assets/images/guide/payments/privacy/coin-join@2x.jpg: coin-join@2x.jpg
assets/images/guide/payments/privacy/privacy-preview.jpg: privacy-preview.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/guide/payments/privacy/header.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions guide/payments/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ An introduction to how receiving and requesting bitcoin works.

---

### Transaction privacy (coming soon)
### [Transaction privacy]({{ '/guide/payments/privacy/' | relative_url }})

An overview of how to help users maintain their financial privacy while using Bitcoin.
An overview of how to help users maintain transaction privacy with Bitcoin.

---

Expand Down
145 changes: 145 additions & 0 deletions guide/payments/privacy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
---
johnsBeharry marked this conversation as resolved.
Show resolved Hide resolved
layout: guide
title: Transaction privacy
description: An overview of how to help users maintain their financial privacy while using Bitcoin.
nav_order: 4
parent: Payments
permalink: /guide/payments/privacy/
main_classes: -no-top-padding
image: /assets/images/guide/payments/privacy/privacy-preview.jpg
johnsBeharry marked this conversation as resolved.
Show resolved Hide resolved
---

{% include picture.html
image = "/assets/images/guide/payments/privacy/header.jpg"
retina = "/assets/images/guide/payments/privacy/header@2x.jpg"
johnsBeharry marked this conversation as resolved.
Show resolved Hide resolved
mobile = "/assets/images/guide/payments/privacy/privacy-header-mobile.jpg"
mobileRetina = "/assets/images/guide/payments/privacy/privacy-header-mobile@2x.jpg"
alt-text = "Illustration of an eye, with a cross on top of an ink blot background"
width = 1600
height = 600
layout = "full-width"
%}


# Transaction privacy

<!--
This page should inform about what information is made public when sending or receiving, how the application can help minimize unnecessary privacy leaks, basic application functionality to help, and when we can, more advanced options.

- Single-use addresses (avoiding address reuse)
- Coin selection / labelling
- Coin join / Pay join

@TODO: address reuse / there should be something in here about also mindfully not giving the same unused address to different persons
@TODO: address reuse / write glossary term about Gap limit
-->

It’s a common misconception that Bitcoin payments are anonymous. Instead, they can be referred to as pseudonymous, this means that who owns a freshly generated addresses is not public knowledge. Unless your ownership is revealed, whether directly by yourself or indirectly by some third-party you are able to remain anonymous.

Transactions, their signatures, and addresses added to the Bitcoin blockchain remain public forever. This means that looking up any address or transaction is trivial, as demonstrated by going back to the very first block mined on [January 3, 2009](https://blockstream.info/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b).

While all transactions are public, there is no personal identification about the address owners stored on the blockchain itself.

> Each Bitcoin transaction contains at least one input and at least one output. This means that once a single address is known, there is a trail to follow the bitcoin.
>
> <cite>As documented by <a href="https://docs.wasabiwallet.io/FAQ/FAQ-GeneralBitcoinPrivacy.html#how-is-bitcoin-bad-in-terms-of-privacy">Wasabi Wallet</a></cite>

The key to keeping your transactions private is to prevent others from determining which addresses you own[^3]. When Satoshi let others know that they had mined the first block, which contained a single transaction, one can deduce that both the address that received the block reward and the sender address in the transaction belongs to Satoshi. This illustrates the permanence of associations between addresses and identity. While it's possible to break assumptions of ownership going forward, the challenge is to recover privacy once an association is made public. That being said, in this case the pseudonym “Satoshi Nakamoto” has yet to be associated with any personal identity.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

<!-- TODO: add graphic and heading that demonstrate points of compromise when transacting with bitcoin -->

## Methods to preserve privacy

Keeping Bitcoin payments private takes constant and diligent work but is not impossible[^1]. Let’s explore some practices that help preserve privacy of your Bitcoin payments.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

<!-- talk about the problem as you are talking about the solution -->

### Generate a new address for each payment

Creating new online personas is not the only way to preserve privacy. A new address can be generated by the wallet application used to receive bitcoin. This is achieved using [HD Wallets]({{ "/guide/glossary/#hd-wallet" | relative_url }}), a standard for how private keys get generated in modern Bitcoin applications. This allows each transaction not to be tied to a single address, making it difficult to associate with to the owner.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

Address re-use degrades the privacy of both the [sending](/guide/payments/send/) and [receiving](/guide/payments/receive) parties. Re-using an address on the receivers side means anyone with whom that address is shared can see previous payments and the amount of bitcoin controlled by that address. Likewise, the sender is revealing any previous transactions by their sending address.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

> If bad actors can see your income, holdings, and spending, they can use this information to target and exploit you[^2]

On the receiver’s side, by using a single address, the sender or anyone with whom the address is shared can see the previous activity and the amount of bitcoin controlled by the owner. By _sending_ to an address that is being reused, assuming an adversary uncovers the identity behind the owner there is now a single point for them to reach anyone else who has transacted with the address.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

<!--
TODO: Link / mention gap limit
TODO: Graphic / consider how to get the ui generating multiple addresses. make it easy for the user to not fail

> ###### Worked Example 1 - Savings Revealed
> * You save in bitcoin, using a single-address paper wallet.
> * All your bitcoin savings to this same address, let's say it contains $1 million worth.
> * You buy a small amount of bitcoins to add to your savings, depositing in the paper wallet.
> * The person who sold you the bitcoins follows their trail on the blockchain and finds your paper wallet containing $1 million.
> * He mentions it to someone in a cafe or bar.
> * Word gets around. A burglar raids your home. Kidnappers capture your children and know exactly how much to demand in ransom.

-->


{% include fact/dos.html %}
- Show a new address when the receive screen is entered.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved
- Make it easy to generate as many addresses as the receiver needs.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved
- Before broadcasting a transaction, inform senders if an address is already used.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved
{% include fact/close.html %}

{% include fact/donts.html %}
- Make it easy to reuse an address.
{% include fact/close.html %}

### Keep track of who knows about an address

<div class="center" markdown="1">

{% include image.html
image = "/assets/images/guide/payments/privacy/address-labeling.jpg"
retina = "/assets/images/guide/payments/privacy/address-labeling@2x.jpg"
alt-text = "A list of addresses with tags. Two are red, two are purple and one is blue"
width = 400
height = 400
layout = "float-right-desktop"
danielnordh marked this conversation as resolved.
Show resolved Hide resolved
%}

When [receiving bitcoin]({{ "/guide/payments/receive/" | relative_url }}) we can [add additional details to a payment]({{ "/guide/payments/receive/#inputting-additional-payment-details" | relative_url }}). Not only does this help to contextualize payments, but it also enables preventative measures for preserving privacy. Labeling addresses with the counterparty's name involved in each transaction can inform decisions for which [UTXOs]({{ "/guide/glossary/#unspent-transaction-output-utxo" | relative_url }}) are selected in future transaction inputs.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

To make this UTXO selection easier, some interfaces make it possible to select/filter UTXOs that cluster under one label.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could add an image here showcasing bluewallets UTXO management?

After talking last night I think a page dedicated to UTXO management is probably needed in the payments section...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UTXO page could be this PR #90

danielnordh marked this conversation as resolved.
Show resolved Hide resolved

_Check out the glossary to learn more about [how coin control works]({{ "/guide/glossary/#coin-control" | relative_url }})._
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

</div>

### Increase anonymity by collaborating with others

<div class="center" markdown="1">

{% include image.html
image = "/assets/images/guide/payments/privacy/coin-join.jpg"
retina = "/assets/images/guide/payments/privacy/coin-join@2x.jpg"
alt-text = "Example CoinJoin transaction with 3 participants with 1 input each, which get broken up into 5 equal outputs."
width = 400
height = 400
layout = "float-right-desktop"
danielnordh marked this conversation as resolved.
Show resolved Hide resolved
%}

The "common input ownership" heuristic[^4] assumes that all inputs in a transaction likely belong to the same owner. [CoinJoins]({{ "/guide/glossary/#coinjoin" | relative_url }}) is an advanced technique, where multiple participants collaborate on a transaction to break this heuristic. It becomes more difficult (although not impossible) to determine the individuals who own the outputs are since all the outputs typically have the same denomination. With CoinJoins, as with any other anonymity network, a large and diverse group of participants provides the best protection. CoinJoins are not yet widely supported by Bitcoin applications.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

Users still have to be mindful of how the UTXOs they received from the CoinJoin are spent. For instance, spending them together in a single transaction would unravel the anonymity gains from participating in the CoinJoin.

danielnordh marked this conversation as resolved.
Show resolved Hide resolved
</div>

### Design with privacy in mind
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

Thinking about privacy is critical during the design process. Your users will not have the same level of knowledge of how to use Bitcoin privately. It becomes especially important for them to understand the implications of their privacy degrading actions which often occur at the point of creating a transaction or requesting a payment. When managing funds
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

While there is no perfect solution that will guarantee 100% privacy, try to minimize how much information gets shared to the most essential. Also, consider ways to inform and prevent user actions that negatively impact their privacy as they use your product.
danielnordh marked this conversation as resolved.
Show resolved Hide resolved

<!--
There is no perfect solution to guarantee 100% privacy that lasts forever because things can be revealed over time. Since transactions are forever public, even if all precautions are taken at the time of payment to ensure the highest degree of anonymity, future behaviors of the wallet owner or transacting parties can still degrade previously attained privacy. A high amount of diligence is necessary whenever users are transacting with Bitcoin. The product should be able to guide, inform, and prevent them against privacy degrading actions.
-->

[^1]: [Bitcoin.org - Protecting your privacy](https://bitcoin.org/en/protect-your-privacy)
[^2]: [Wasabi Wallet Docs - Transaction Surveillance Companies](https://docs.wasabiwallet.io/why-wasabi/TransactionSurveillanceCompanies.html#attempt-to-invade-privacy)
[^3]: [Top Seven Ways Your Identity Can Be Linked to Your Bitcoin Address](https://99bitcoins.com/know-more-top-seven-ways-your-identity-can-be-linked-to-your-bitcoin-address/)
[^4]: [Bitcoin Wiki / Privacy](https://en.bitcoin.it/wiki/Privacy#Common-input-ownership_heuristic)
4 changes: 4 additions & 0 deletions guide/payments/receive.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,10 @@ If your application has a list of their payment requests or transaction history,

Once the payment has been finalized, consider what the receiver may want to do with those funds. You may want to help facilitate those follow-up activities, for example moving the funds to a shared multi-key wallet or doing a [coinjoin]({{ '/guide/glossary/#coinjoin' | relative_url }}).

---

Let's go, time go dive in a bit deeper with [Transaction privacy]({{ "/guide/payments/privacy" | relative_url }}).

<!--
On /guide/payments/send/#inputting-an-address
Add below as Do's & Don'ts
Expand Down