Does reusing a bitcoin address hurt my privacy?
Why every payment to the same address links your history together, why wallets hand out a new address each time, and what Bitcoin Core does about it.
Published 3 min read
In short
Yes. Every transaction is public, so an address that receives many payments shows everyone who sees it your full history with that address and its balance. When you spend from it, the payments become linked to each other and to your change.
Hierarchical deterministic wallets make a fresh address for each payment at no cost, and since version 0.19.0.1 Bitcoin Core has offered an avoid_reuse option that leaves coins on already used addresses out of balances and payments. Use a new receiving address every time, and never publish a single donation address if privacy matters.
Bitcoin addresses are often compared to bank account numbers. The comparison misleads on one point that matters for privacy: a bank statement is private, a blockchain is not. Anyone can look up any address and see every payment it has received and sent, with amounts and dates, forever.
What does reuse reveal?
Suppose an employer pays the same address every month, and you also give that address to a friend for a refund.
- Your friend can see your salary payments, their dates and amounts, and the address’s balance.
- The employer can see the refund and every other payment to that address.
- When you spend, the transaction links the address to where the money went, and usually to a change address that is also yours.
Each reuse adds another person who can see the whole history. Spending coins from several reused addresses together links them all, because a transaction that combines inputs is normally made by one owner.
Why do wallets give a new address every time?
Wallets built on BIP32 derive an unlimited chain of addresses from one seed. A fresh address costs nothing to create and nothing to back up: the seed phrase already covers every address the wallet will ever derive, in order, along a fixed derivation path. That is why most wallets show a new receiving address each time you open the receive screen.
The Bitcoin developer guide recommends using each public key hash for one payment only, partly for privacy and partly to limit exposure of public keys.
What does Bitcoin Core do about it?
Bitcoin Core 0.19.0.1 (version 0.19.0 was tagged but never released) added an avoid_reuse option. According to its release notes, wallets can be created with it, and balance and payment commands accept it to control whether coins on already used addresses are included. With it enabled, the wallet also avoids partial spends, so that it does not spend the “wrong” coin from a reused address. It is an option chosen per wallet, not the default.
Does it matter for security as well as privacy?
Mostly it is a privacy issue. There is a smaller security argument too: an address that has never been spent from has revealed only a hash of its public key, while spending reveals the key itself. The developer guide’s advice to use each address once covers both points. In practice, a wallet that follows the advice gets both benefits without any extra effort from the user.
What about a donation address on a website?
A published donation address shows anyone its balance and every gift. If that is acceptable, a single address is simple. If not, the alternatives are a payment server that generates a fresh address per visitor, or a reusable payment method designed for this purpose where your wallet supports one.
What else links addresses?
Avoiding reuse is the first step, not the whole of privacy. An xpub given to a service reveals every address in its account, and an exchange that knows your identity knows the addresses you withdrew to. See what an xpub reveals.
The simplest habit costs nothing: take a new receiving address for every payment, and label it in your wallet so you remember who it was for.