Your On-Chain Footprint

Understanding your exposure — and what you can do about it

Pseudonymous ≠ Anonymous

Bitcoin addresses aren't names — but they are identifiers.

Link an address to a person once, and every past and future transaction on that address becomes part of a permanent dossier. The rest of this talk is about understanding how — and what you can do about it.

The ledger never forgets

What's public today is public in 50 years.

Your financial life, on display

Given one address, an analyst starts building a picture:

  • Estimated balance (heuristic clustering — incomplete for most users)
  • Who you transact with
  • When you're active
  • Where your money comes from
balance4.217 BTC
first seen2019-03-14
top counterpartyKraken
active hours07:00–09:00 UTC
last spend2 days ago

What's at stake

Safety

A personal risk. Wealth on display invites theft, extortion, and coercion.

Freedom

A political risk. Exposed flows enable censorship, freezes, and blacklisting.

Fungibility

A systemic risk. When history taints coins, bitcoin stops being money.

Safety — easy to understand, hard to solve

The leak that links your identity to a Bitcoin address is usually off-chain:

Once anyone links your identity to a balance, no on-chain tool can undo it:

Safety demands compartmentalisation at every layer: on-chain, off-chain, social, and physical. There is no tool that fixes it for you.

Freedom — censorship, direct and indirect

Direct censorship — a blacklist the rest of the world honours, applied based on who you are or what you've done:

Indirect (self-)censorship is the larger effect. Knowing you might be traced, you don't donate, don't tip, don't try the privacy tool. The chilling effect costs more freedom than the blacklist itself.

Fungibility — the property worth defending

Fungibility means every coin spends the same as any other, no questions asked about its past. It is what makes money money. Bitcoin gives us fungibility by design — but third parties keep trying to take it away.

Fungibility is defended by behaviour, not by the protocol alone. Every fresh address, every CoinJoin, every refusal to grade coins keeps money equal for everyone.

Privacy failures are retroactive

The data you leak today can be deanonymised tomorrow.

Privacy you don't need today is insurance for a future you can't predict.

Who's watching?

The antagonists and their motivations

Commercial surveillance firms

Chainalysis · Elliptic · TRM Labs · and a long tail of startups.

State actors

Tax authorities · law enforcement · intelligence agencies

Motive: control, revenue, and national security overreach.

Criminals & hackers

The "$5 wrench attack" is cheaper than breaking any cipher.

Data brokers & advertisers

Motive: monetising your financial fingerprint.

Future adversaries

You're not just hiding from who exists now — but from everyone who will.

Threat model at a glance

ActorMotivePrimary tools
Surveillance firmsProfitClustering, ML, graph analysis
StatesControl & revenueSubpoenas, KYC, node surveillance
CriminalsTheftAddress scraping, public-source profiling
Data brokersMonetisationCombining leaked databases, KYC dumps
FutureUnknownAI, quantum, fresh leaks

How the curtain gets pulled back

Techniques used to deanonymise on-chain data

Common Input Ownership Heuristic

If several inputs are signed into the same transaction, assume one wallet owns them all.

assumed: one wallet addr A · 0.4 addr B · 0.7 addr C · 0.2 addr D · 0.9 TX payment · 1.8 change · 0.4

One sloppy transaction can collapse dozens of addresses into a single identity cluster.
Fix: CoinJoin — spend from clean, separated outputs.

Change output detection

Of two outputs, which one is "change" coming back to the sender?

0.5234 BTC P2WPKH input TX 0.5000 BTC P2PKH 0.0231 BTC P2WPKH round → payment script differs odd amount → change script matches input

Non-round amounts, matching script types, and "optimal change" algorithms all betray which output came back home.

Address reuse

One address appearing in multiple transactions links every counterparty together.

Alice Bob Charlie tx1 tx2 tx3 addr X (reused everywhere) YOU + Alice, Bob, Charlie

A fresh address per payment is the cheapest privacy gain you'll ever get.

Transaction graph & taint tracking

Follow the coins forward and backward through the UTXO graph.

source Exchange A Merchant Exchange B

"Tainted" coins can be flagged, frozen, or rejected by exchanges — years after the fact.

Temporal & amount correlation

Match an external event to the on-chain record. Cryptography never has to break.

Exchange log withdraw 0.5217 BTC 14:03:22 UTC Bitcoin mempool tx output 0.5217 BTC 14:03:24 UTC same second, same amount

An invoice of 0.02173 BTC matched on-chain is identity leakage with zero cleverness required.
Fix: Lightning payments leave no on-chain amount or timing trace.

Peel chains

A large UTXO pays a small amount; the change becomes the next large UTXO, which pays again, and again…

10.0 BTC tx 0.3 pay 9.7 BTC tx 0.5 pay 9.2 BTC tx 0.2 pay 9.0 BTC the shrinking orange trail is the spender's wallet

The trail doesn't need a name attached — the pattern alone is enough to follow.
Fix: break the chain with a CoinJoin before the next spend.

Wallet fingerprinting

Different wallets build transactions differently. Those differences are signatures.

Trezor script: P2WPKH locktime: tip low-R sigs: yes BIP69: yes ordered, predictable Ledger script: P2WPKH locktime: 0 low-R sigs: yes BIP69: no locktime = zero tell Electrum script: P2WPKH locktime: tip low-R sigs: no BIP69: no high-R signatures

Analysts can often name the wallet software from a single transaction.
Fix: Taproot + a mainstream wallet makes you one of millions.

Network-layer surveillance

"Spy nodes" connect to as much of the P2P network as possible and log who first announced each transaction.

spy spy spy your node broadcasts tx spy log first seen: tx abc1... @ 92.0.1.4 14:03:24 UTC

On-chain privacy means nothing if the network layer leaks your IP.

Cross-chain analysis

Atomic swaps and bridges don't break the trail — they just spread it across more ledgers.

BTC block n block n+1 tx 0.5 BTC block n+2 block n+3 ETH block m block m+1 block m+2 tx ~0.5 BTC block m+3 correlated by amount + time bridge / atomic swap leaves correlated traces

More hops, more chains, same trail — and most swap services keep logs. Shapeshift's own FAQ admitted they logged the link between your addresses and your IP by design.

Shapeshift, in their own words

Shapeshift FAQ stating they log the link between addresses and IP addresses

No account required ≠ private. “The only things logged… are the link between addresses… and standard IP logging.”

Machine learning classification

Every heuristic in this deck is being automated. Feed unlabelled transactions in; get predicted identities out.

unlabelled txs tx · 4 in / 2 out tx · 1 in / 8 out tx · 10 in / 10 out tx · 2 in / 2 out tx · 3 in / 1 out classifier predicted labels payment exchange wallet CoinJoin (unmixed) change output mining pool

Subset-sum analysis unmixes CoinJoins. Graph neural networks cluster wallets across millions of transactions at once.

The deanonymisation toolkit

Common input ownership
Change detection
Address reuse
Taint tracking
Temporal correlation
Peel chains
Wallet fingerprinting
Network surveillance
Cross-chain analysis
ML classification

These techniques compose. Each narrows the search; together they converge on identity.
Fix: CoinJoin makes clustering probabilistic, not certain.

Lightning leaves traces too

Off-chain is not invisible

Channel opens are on-chain events

Every Lightning channel starts with a funding transaction — visible, attributable, and datable.

2.0000 BTC your UTXO TX 1.9990 BTC 2-of-2 multisig (channel) change back to your wallet

A 2-of-2 multisig (or P2TR) output funded from a named cluster is an entry event: "this wallet just put 2 BTC into Lightning."

Nuance: public channels are announced in gossip within seconds. Private P2WSH channels are probabilistically flagged. Private Taproot channels look like any other P2TR spend — near-invisible until a force-close.

Channel closes reveal the final split

When a channel closes, the settlement transaction shows exactly how the balance ended up.

2.0000 BTC channel (opened 2024-03) CLOSE 0.3412 BTC you 1.6588 BTC counterparty

Observers learn the net change in your balance over the channel's life (income, spending, fees, and routing all fold into the settlement) — and force-closes leak even more (pending HTLCs, script templates).

The gossip network: a public map

Public Lightning channels are broadcast to every node — capacity, endpoints, fee policies, and often IP addresses.

YOU 03a1f... ACINQ WoS LNBIG 0.05 BTC 0.02 BTC

Your node_id, your channel sizes, your peers — all queryable. Run over Tor, or your IP joins the map too.

Channel balance probing

An attacker sends deliberately-failing payments of varying sizes and watches where they bounce.

attacker your channel probe 0.10 BTC → fails (too big) probe 0.05 BTC → fails probe 0.02 BTC → routes (OK) probe 0.03 BTC → fails

Binary search converges fast. Repeated over time, it reveals how much you spent and when — without ever completing a payment.

Invoices pin the destination

A classic BOLT 11 invoice embeds the recipient's node_id. The payer always knows who they paid.

BOLT 11 invoice lnbc250u1p3xyq... ...q9qy9qsqhp5... ...m6z4y8j2f0v... ...c7s4nx0aw5k... shared with payer decoded amount: 25,000 sats dest: 03a1f7...b2c9 ← your node_id hint: via LNBIG (private ch.) private channel leaked in hint

Private channels used as route hints are semi-public: the moment you accept a payment through one, the payer learns it exists.

CoinJoin → Lightning

The strongest practical stack: break the graph with CoinJoin, then move off-chain into a channel.

KYC'd coins tagged cluster CoinJoin anonset built mixed UTXO graph broken Lightning channel open off-chain spend

Sender wins: source hidden, spending off-chain, no amount/timing correlation, no "clean coin" tax at the merchant.

Receiver wins: even if a sender learns your node_id (previous slide), the channel's funding tx dead-ends at a CoinJoin — they can't walk the chain back to your KYC identity.

Nuances: a mixed UTXO flowing straight into a channel-open is a behavioural fingerprint (few users do this). Use Taproot channels, private, over Tor — and assume the channel-open itself is visible.

Custodians & LSPs see everything

If your wallet runs on someone else's node, they see what a chain analyst can only dream of.

user A user B user C Custodian / LSP knows senders, recipients, amounts, times KYC database compliance logs subpoena-ready

Wallet of Satoshi, Strike, LNbits-hosted, and most "it just works" Lightning apps are full-visibility observers.

Nuance: even custodial wallets preserve sender privacy against merchants — the custodian sees everything, but the recipient learns nothing about who sent the payment.

Splicing: ambiguity, not transparency

Splicing edits an open channel in place. On-chain, every splice is visible — but who initiated it and why is ambiguous.

splice-in ch 1.0 BTC ext UTXO +0.5 TX ch 1.5 BTC splice-out ch 1.0 BTC TX ch 0.6 BTC ext 0.4 could be: you topping up inbound liquidity (LSP) on-chain payment in could be: payment to 3rd party self-transfer to cold outbound liquidity stay on one channel → each new splice adds another unresolved data point

Bad pattern: repeatedly splicing in from the same wallet — that's address reuse in disguise and collapses back to peel-chain linking.

Good pattern: rotate sources (fresh CoinJoin outputs, separate wallets), accept counterparty-funded splices as free noise, vary amounts and timing, and never close — keep the intra-channel balance permanently hidden.

So what can we do?

Privacy is a ratchet, not a switch

Threat-model first

You can't defend against everything. Start by naming who you're trying to be private from.

the merchant nosy, not sophisticated sees: one payment goal: don't leak unrelated balances fix: fresh addresses, PayJoin, Lightning the chain analyst patient, well-funded sees: whole graph, clusters, timing fix: CoinJoin, Lightning, nyms, run your own node the nation-state everything, forever sees: off-chain too (KYC, ISP, devices) fix: disciplined nyms, dedicated hardware, op-sec — and it's hard

Most people need to beat the first two, not the third. Aim for proportional privacy — not paranoid.

Principles of hygiene

The cheap wins — things that cost nothing and help against every adversary.

None of these require new tools — just new habits. This is Tier 1, and it's free.

Labelling & coin control

Your wallet shows balances. A privacy-aware wallet shows stories.

UTXOs 0.2500 BTC ← Kraken withdrawal, 2024-06 KYC'd 0.0834 BTC ← freelance client "Acme" semi-public 0.1000 BTC ← post-CoinJoin, round 3 private 0.0042 BTC ← RoboSats, no-KYC private 0.0500 BTC ← tip jar, public donation addr doxxed

If you can't answer "what does this coin know about me?" before you spend it, the answer is "more than you wanted."

Sparrow, Wasabi, BlueWallet and others support labels and coin control. Use them.

Selective consolidation

Combining UTXOs is how wallets fingerprint you. But sometimes you have to — do it within a story, never across.

safe: within one story Kraken #1 Kraken #2 Kraken #3 TX Kraken combined no new linkage: these were already linked unsafe: across stories Kraken CoinJoin'd TX combined undoes the CoinJoin: the mixed coin is now KYC'd

Consolidation is fine — but it's a one-way operation. Every merge locks stories together permanently.

Nyms — identity compartments

Instead of one "you" on the chain, maintain several. Each nym has its own wallet, its own coins, and its own story.

YOU one person "salary" nym KYC exchange, taxable "donations" nym no-KYC, no links to salary "savings" nym cold, rarely touched observer sees: 3 unrelated clusters no way to link them without off-chain data

A blacklist can only target a named identity. Compartments don't make you invisible — they make the target smaller.

CoinJoin: what it actually does

Many people pool inputs into one transaction with equal-value outputs. Afterwards, no observer can say which output belongs to which input.

Alice — 0.5 Bob — 0.5 Carol — 0.5 Dave — 0.5 CoinJoin one tx, many peers 0.5 — ? 0.5 — ? 0.5 — ? 0.5 — ? anonset = 4 any output could belong to any input

CoinJoin breaks the graph probabilistically. Bigger pools, consistent denominations, and diverse counterparties matter more than fancy tooling.

"Can I CoinJoin 10 chunks then combine 3 BTC for one payment?" Yes — that's the intended use. Just don't merge with non-mixed coins on the way.

CoinJoin rounds: diminishing returns

Each round adds some uncertainty — but the curve flattens fast. Pool size matters more than round count.

rounds effective anonset 0 1 big jump 2 4 8 16 flat — pool size caps us

Round 1 gives you most of the win. Rounds 2–3 polish it. Round 20 in a tiny pool gives less than round 1 in a big one.

PayJoin — the invisible privacy tool

The recipient contributes an input to your payment. The result looks like any other transaction — but breaks the common-input heuristic at the source.

payer input 0.30 BTC merchant input 0.10 BTC TX 0.15 BTC (merchant receives) 0.25 BTC (payer change) CIOH says: "all one owner" (wrong!)

PayJoin transactions look identical to normal ones. Surveillance tools actively mis-cluster them — poisoning the wider graph, for free.

Silent Payments (BIP 352)

Publish one static identifier. Every payer derives a unique, unlinkable address to pay you — no coordination, no reuse.

your SP address sp1qqgste7k9h... Alice pays Bob pays Carol pays bc1p...a8f3 (fresh) bc1p...c2d9 (fresh) bc1p...91b7 (fresh)

No linkable invoice. No address reuse. No on-chain cluster to grow. Receive publicly and privately at the same time.

Network layer — don't leak from your pipes

If your transactions escape through your home IP and a stranger's server, nothing above matters.

leaky wallet public server logs your IP → your addresses request patterns → fingerprint first-hop broadcast → de-anon private wallet Tor your own node no third party sees you query no correlation with your IP broadcasts originate from Tor, not your IP Running your own node is the single biggest Tier-2 win. It's cheaper than you think. HTTPS connections hide what you ask; Tor hides who is talking to who over what domain.

What no tool fixes

The most dangerous leaks aren't on the chain at all.

Behaviour beats tooling here. The defence is discipline, not software.

The ladder — find your rung

You don't need to do everything. You need to do the next thing.

Tier 0 Awareness — you're already here. Tier 1 Hygiene — fresh addresses, labels, a wallet that respects you. Tier 2 Sovereignty — your own node, Tor, PayJoin, Silent Payments. Tier 3 Active privacy — CoinJoin, nyms, CoinJoin → Lightning. Tier 4 Defence in depth — compartments, dedicated hardware, op-sec.

Pick the rung above yours. Climb one. That's the win.

Start tonight: know your exposure

The most useful thing you can do right now is see what a stranger already sees.

It takes more than a minute, but it makes the whole thing real — and it's the cheapest Tier-1 upgrade you'll ever get.

Privacy is a herd property

You're not just defending yourself. You're defending everyone who needs privacy more than you do.

Fungibility is defended by behaviour — by yours.

Thank you

Questions?
← All decks