Bitcoin Colosseum
Come rompere l’anonimato di Cashu
5 min read 883 words

Come rompere l’anonimato di Cashu

Immagina di avere dei “contanti digitali” che dovrebbero essere privati come le banconote vere: nessuno sa chi le ha spese o da dove vengono.

Questo è (in teoria) Cashu: un sistema semplice e veloce per pagare in Bitcoin o Lightning senza lasciare tracce.

L’articolo che stiamo spiegando dimostra invece che questa privacy è fragile.

Se il server che emette i tuoi “contanti digitali” (chiamato mint) è gestito da qualcuno di cattiva fede, può collegare ogni tuo token alla tua wallet.

In pratica, il mint riesce a dire: “questo token da 64 satoshi è stato creato dalla wallet X e ora lo sta spendendo la wallet Y”.

Non servono hacker complessi: basta sfruttare due cose banali che già esistono nei browser (l’ETag e l’ID del “set di chiavi”).

In poche parole: Cashu è anonimo solo se ti fidi ciecamente del mint.

Se non ti fidi, puoi essere tracciato.

E l’autore lo ha provato davvero, usando il wallet cashu.me sul suo computer.

Cos’è Cashu, spiegato come a un bambino di 12 anni

Cashu funziona così:

  1. Vai al mint (un sito web).
  2. Gli mandi i soldi veri (Bitcoin/Lightning).
  3. Lui ti dà dei “biglietti” digitali (i token) firmati crittograficamente.
  4. Questi biglietti puoi spenderli, scambiarli o riscattarli senza che il mint sappia cosa stai facendo… in teoria.

Il trucco magico si chiama firma cieca (Chaumian blind signature): quando crei il token, lo “nascondi” al mint con la matematica. Il mint firma senza vedere il numero di serie. Sembra perfetto.

Ora entriamo un po’ più nel tecnico (livello intermedio)

Ogni token Cashu è fatto di prove (proofs). Ogni prova contiene:

  • l’importo (es. 64 satoshi)
  • un “segreto” (il numero di serie nascosto)
  • un campo importantissimo: “id” → l’ID del keyset

Il keyset è un gruppo di chiavi pubbliche che il mint usa per firmare i token di certi tagli (1, 2, 4, 8, 16… satoshi). Ogni keyset ha un ID unico, tipo 009d68d193ea3415.

Fin qui tutto normale. Il problema nasce quando il mint decide di essere malizioso.

Il trucco della de-anonimizzazione (ora entriamo nei dettagli tecnici)

L’articolo mostra un mint malizioso scritto in Cloudflare Workers. Ecco esattamente cosa fa:

  1. Al primo accesso il server ti assegna un walletId segreto e lo mette nell’header HTTP ETag:
  2. http

ETag: “6x10xf7xqvnsaohlctujd”

  1. Cache-Control: private, max-age=31536000 Il browser (Chrome, Firefox, ecc.) memorizza questo ETag e lo rimanda indietro ogni volta che parla con quel mint. È come un braccialetto invisibile.
  2. Il mint collega questo walletId a un keyset e lo salva in una tabella KV:
  3. js

// quando crea un nuovo keyset

  1. await KV.putkeyset:${kid}, JSON.stringify({ walletId }));
  2. Ogni volta che fai uno swap o un melt, il mint guarda i token che gli mandi. Ogni token ha dentro l’id del keyset con cui è stato creato. Il mint confronta:
  • il keyset del token che stai spendendo
  • il walletId della persona che sta facendo la richiesta (dall’ETag)

Se non coincidono, il mint scrive nei log:

[MALICIOUS] Wallet 6x10xf7xqvnsaohlctujd sta spendendo token creati da 9o3ztcs8nfcnbt59ejl0u (Keyset: 009d68d193ea3415)

Ecco! Ha appena collegato due wallet diverse.

Cosa succede se il browser non manda l’ETag? (caso POST)

I browser moderni a volte tolgono l’ETag nelle richieste POST. Il mint malizioso ha un piano B:

  • prende IP + User-Agent
  • fa un hash
  • crea una chiave di sincronizzazione sync_v4:hash(ip+ua)
  • se arriva un ETag, lo salva e lo associa.

In pratica riesce a tracciare anche cambiando browser sullo stesso computer.

Esempio concreto di token (così lo vedi davvero)

Ecco un pezzetto di un token Cashu (formato stringa):

cashuAeyJ0b2tlbiI6W3sibWludCI6Imh0dHBzOi8vbWFsaWNpb3VzLW1pbnQ…

“proofs”:[{

“secret”: “b09cfa145afe829d…”,

“C”: “03205eb432ae29786f1eba43ef3b19549a97c32806e554105c9300b60873340651”,

“amount”: 64,

“id”: “009d68d193ea3415”   ← questo è il “braccialetto”!

}]

Quel campo id è pubblico e visibile a chiunque guardi il token. Il mint sa a chi appartiene quel keyset.

Perché funziona anche con più dispositivi

L’autore ha provato sullo stesso PC con Chrome e Firefox: il mint ha capito che erano la stessa persona grazie a IP + User-Agent o all’ETag persistente.

Cosa può fare ancora un mint cattivo (segnali extra)

Oltre a keyset + ETag, può usare:

  • denominazioni uniche (hai chiesto solo token da 64 sat?)
  • timestamp di scadenza
  • commissioni particolari
  • lock P2PK
  • correlazione temporale delle richieste

Come difendersi (consigli pratici dell’articolo)

  1. Il wallet deve ignorare gli header ETag, Last-Modified, ecc.
  2. Usa sempre Tor (così IP e User-Agent cambiano).
  3. Verifica i keyset tramite canali pubblici (Nostr, ecc.).
  4. Preferisci wallet che non usano il browser (app mobile o desktop con caching disabilitato).

Conclusione

L’articolo di floppy (pubblicato il 22 marzo 2026) non dice che Cashu è inutile. Dice solo la verità scomoda: l’anonimato totale esiste solo se il mint è onesto. Se il mint è sotto controllo di un governo, di un exchange o di un attaccante, i tuoi token diventano tracciabili con una semplicità imbarazzante.

Il codice dimostrativo è pubblico su GitLab (https://gitlab.com/1440000bytes/keytag) e può essere riprodotto in pochi minuti su Cloudflare Workers.

Quindi, la prossima volta che usi Cashu, ricorda: stai usando un sistema bellissimo… ma stai comunque dando fiducia a un server centrale. E quella fiducia può essere tradita con due header HTTP e un campo “id” dentro il token.

Privacy vera? Solo se il mint è tuo… o se segui i consigli di difesa sopra.

https://uncensoredtech.substack.com/p/de-anonymize-cashu-transactions

Enjoyed this article?

Support the author with a Lightning tip.

Zap

Comments

1 comment

Ken 🎋
Ken 🎋

『 How to break the anonymity of #Cashu 』 nostr:naddr1qqsxxmmdv5khymmdwpjhyefdd3skummwd9kkzar094jxjttrv9eksagppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7q3q4yzptn3vkf4ravfl9dhu49pzqpsap3m5emze2e6v4tuyceht72eqxpqqqp65wna4h3q

Lightning Network non è irrimediabilmente rotta

Lightning Network non è irrimediabilmente rotta

Lightning Network non è irrimediabilmente rotta solo perché esiste una possibile minaccia futura dai computer quantistici. risponde all’. La vulnerabilità di cui si parla non rigua

5 min read
I database server di Bitcoin della CIA

I database server di Bitcoin della CIA

Venerdì 17 aprile abbiamo fatto per parlare dei rapporti tra Bitcoin e la CIA, partendo dalle affermazioni che Prof Jiang ha fatto su Bitcoin e la CIA in una recente intervista. La

2 min read