Premessa

Zia Clorinda è incazzata, ed ha pure ragione, ripete in continuazione in modo ossessivo «Ma questa entropia che ca%%o è!». Per chi non conoscesse zia Clorinda consiglio di leggere l’articolo Mia zia zitella usa Bitcoin .

Dai consigli ricevuti

  • Tutti gli dicevano non detenere BTC negli exchange crea un tuo portafoglio personale, e cosi ha fatto.
  • Usa un wallet su un computer sicuro da dedicare esclusivamente ai Bitcoin, con orgoglio mi ha mostrato un bellissimo e scintillante portatile.
  • Non è finita qui, non detenere la chiave privata sul computer, firma le transazioni attraverso un Hardware Wallet cosi sei al sicuro visto che la chiave privata è memorizzata nell’HW, e così ha fatto.
  • Compra il top dell’Hardware Wallet quello che è completamente sconnesso air-gapped, prendi il COLCARD, anche in questo caso zia Clorinda investe per una mini scatoletta di plastica dal contenuto ignoto.
  • Crea un seed di 24 parole, massima sicurezza che ottieni dal protocollo BIP-39, fidati del COLCARD fa tutto in automatico!

I dati sono allarmanti vengono drenati bitcoin

AGGIORNAMENTO del 01/08/2026: fonte Galaxy Research sono stati drenati 1.367,05 BTC (~88,6 milioni di dollari) su 4.585 indirizzi

Analisi Blockchain

Nella notte del 30 luglio un’operazione automatizzata ha prosciugato 500 indirizzi single-sig in quattro blocchi consecutivi. Gli indizi convergono su chiavi private nate deboli. Tra le vittime nessun wallet multisig e nessun indirizzo taproot. La fonte .

Comunicati di sicurezza del produttore:

Cosa è successo

Siamo di fronte a un dispositivo hardware COLCARD, il quale ha generato un’entropia debole, rendendo possibile risalire alla chiave privata a partire da quella pubblica. La blockchain è pubblica e gli indirizzi sono stati oggetto di analisi, probabilmente già da diverso tempo. Una volta individuati gli UTXO, sono stati impartiti gli ordini di spostamento, sottraendoli ai legittimi proprietari.

Si è cercato di sovrascrivere una variabile di sistema responsabile della generazione di numeri casuali, creando un errore di compilazione dovuto alla presenza di duplicati. L’errore è stato reso silente.

L’orrore del codice coldcard , è stata inserita una pezza, voluta o non voluta, mai verificata nel corso degli anni, tale che l’errore di blocco in fase di compilazione ha comportato la disattivazione del generatore di numeri casuali TRNG. Al momento della generazione dell’entropia, essendo il TRNG hardware disabilitato, il software ha applicato un algoritmo pseudocasuale più debole denominato Yasmarang, previsto in MicroPython.

#ifdef MICROPY_PY_STM
// ports/stm32/rng.c
extern uint32_t rng_get(void);
# define CHIP_TRNG_SETUP()      
# define CHIP_TRNG_32()         rng_get()

# ifndef MICROPY_HW_ENABLE_RNG
# error "get a HW TRNG plz"  // Non si attiva mai MICROPY_HW_ENABLE_RNG(0) è definito (a 0)
# endif
#endif

Cosa concretamente rappresenta un bug, una svista di programmazione o una volontà del produttore? Ipotesi di bypassare l’entropia del processore hardware partendo dall’assunto che è qualcosa non dominabile e soggetta a bug ignoti, delegare ad un produttore terzo l’uso del random rispetto al codice scritto in proprio. Altra ipotesi di dolo voluto per predisporsi ad azioni di attacco bruto per drenare criprovaluta. Chiaramente Cointike ha necessità di affermare che trattasi di un bug del software cercandosi di rendersi estranea da eventuale dolo, qui siamo nel campo forense nella determinazione di responsabilità.

L’azienda continua a vendere le sue scatolette di plastica infischiandosene del bug, preoccupandosi solo di avvisare.

COLDCARD shop

Tutti ora consigliano

Zia Clorinda è ancora più incazzata perchè i nuovi consigli sono da nerd:

  • Bisognava creare un seed con un’entropia forte e con Passphrase chiamata anche impropriamente come 25° parola.
  • Ma non ti preservi, bisogna creare un multisig.
  • Bisogna che gli indirizzi siano di tipo Taproot non sono stati attaccati.

Pillole di entropia

Iniziamo dal lancio di dadi, che devono essere obbligatoriamente calibrati: vanno bene i dadi da casinò. Prendendo invece dadi comuni come quelli del Monopoli, vedrai che non sono calibrati; avrai quindi più probabilità di ottenere il numero 1 e il numero 6.

Dadi professionali calibrati

Un dado a 6 facce fornisce ~2,58496250072116 bit di entropia per lancio log₂(6).

Standard BIP39

Entropia per una seed phrase BIP39:

Lunghezza SeedEntropiaDivisione (/32)Checksum (bit)Bit Totali
12 parole128 bit128 / 324132
15 parole160 bit160 / 325165
18 parole192 bit192 / 326198
21 parole224 bit224 / 327231
24 parole256 bit256 / 328264

Il checksum in BIP39 serve solo come controllo di integrità per rilevare errori nella seed phrase.

Lancio Dadi, Entropia e Sicurezza BIP39

SeedEntropia Richiesta (BIP39)Lanci Minimi (D6)Lanci con Anti-BiasProbabilità di Indovinare il Seed
12128 bit5060$\frac{1}{2^{128}} \approx \frac{1}{3.4 \times 10^{38}}$
15160 bit6272$\frac{1}{2^{160}} \approx \frac{1}{1.5 \times 10^{48}}$
18192 bit7585$\frac{1}{2^{192}} \approx \frac{1}{6.3 \times 10^{57}}$
21224 bit8798$\frac{1}{2^{224}} \approx \frac{1}{2.7 \times 10^{67}}$
24256 bit99110$\frac{1}{2^{256}} \approx \frac{1}{1.2 \times 10^{77}}$

Probabilità di Indovinare un Seed da 24 Parole (256 bit)

Formula Base

$$ P = \frac{1}{2^{256}} $$

Passaggio 1: Logaritmo in Base 10

Per convertire $$ 2^{256} $$ in notazione scientifica, usiamo:

$$ \log_{10}(2^{256}) = 256 \times \log_{10}(2) $$

$$ \log_{10}(2) \approx 0.3010299957 $$

$$ 256 \times 0.3010299957 = 77.06367888 $$

Quindi:

$$ 2^{256} = 10^{77.06367888} $$

Passaggio 2: Separazione Mantissa ed Esponente

$$ 10^{77.06367888} = 10^{0.06367888} \times 10^{77} $$

$$ 10^{0.06367888} \approx 1.158 $$

Quindi:

$$ 2^{256} \approx 1.158 \times 10^{77} $$

Passaggio 3: Valore Completo

$$ 2^{256} \approx 115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.913.129.639.936 $$

Passaggio 4: Probabilità Finale

$$ P = \frac{1}{2^{256}} = \frac{1}{1.158 \times 10^{77}} $$

$$ P \approx 8.64 \times 10^{-78} $$

$$ P \approx 0.000…000864 \quad (\text{76 zeri prima dell'8}) $$

La probabilità di indovinare casualmente una chiave a 256 bit al primo colpo è così microscopica da essere praticamente zero.

Riepilogo Tutti i Seed

SeedEntropiaPassaggio Chiave2^n (approssimato)Probabilità P
12128 bit128 × 0.301 = 38.53$3.4 \times 10^{38}$$\approx 2.94 \times 10^{-39}$
15160 bit160 × 0.301 = 48.16$1.46 \times 10^{48}$$\approx 6.85 \times 10^{-49}$
18192 bit192 × 0.301 = 57.80$6.28 \times 10^{57}$$\approx 1.59 \times 10^{-58}$
21224 bit224 × 0.301 = 67.43$2.69 \times 10^{67}$$\approx 3.72 \times 10^{-68}$
24256 bit256 × 0.301 = 77.06$1.16 \times 10^{77}$$\approx 8.64 \times 10^{-78}$

La vera entropia di COLCARD

ColdCard non aveva 256 bit, aveva 40 bit di vera entropia in Mk3, e 72 bit in Mk4/Mk5. Con una GPU moderna, è possibile esplorare tutto lo spazio delle chiavi ECDSA 2^40 combinazioni in pochi minuti per il ColdCard Mk3. Per i modelli Mk4/Mk5 (72 bit), il tempo stimato sale da alcune settimane fino a un anno, teoricamente ancora vulnerabile, ma con uno spazio di ricerca numericamente molto più robusto.

Modello ColdCardEntropia realeSpazio di ricercaTempo stimato (GPU moderna)
Mk340 bit$2^{40} \approx 1,1 \times 10^{12}$Pochi minuti
Mk4/Mk572 bit$2^{72} \approx 4,7 \times 10^{21}$Settimane → Anni

Software per generare il seed dal lancio dei dadi

Analizziamo due software diffusi per ottenere il seed dal lancio dei dadi. Ian Coleman Mnemonic Code Converter ed il software scritto in python consigliato dalla stessa casa di COLCARD rolls.py .

Con lo stesso lancio di dati si ottengono seed differenti, gli algoritmi alla base sono differenti.

rolls.py, qualsiasi input, di qualsiasi lunghezza, viene trattato in un hash a 256 bit tramite SHA-256. È un procedimento a effetto valanga: cambiare anche un solo carattere dell’input stravolge completamente l’hash risultante.

iancoleman.io Dice [1-6] 62535634, nessun hashing sull’entropia grezza. Il tool tratta l’intera sequenza di lanci come un singolo numero in base 6, lo converte in un grande intero (BigInt) e ne prende la rappresentazione binaria diretta come entropia finale.

Ian Coleman mette esplicitamente in guardia gli utenti: You are not a good source of entropy. Secondo le sue stesse istruzioni, non bisogna mai fidarsi della propria intuizione sulla casualità.

Gli algoritmi sono entrambi validi, ma per i paranoici bisogna essere più robusti magari adottando HKDF-SHA512 applicato alla generazione di entropia BIP39, forse merita un’approfondimento.