Cos`è un Nonce nel mondo delle criptovalute? Mining di Bitcoin, Ethereum, crittografia
Nel dicembre 2010, sul palco del Chaos Communication Congress di Berlino, un piccolo gruppo chiamato fail0verflow annunciò di aver estratto la chiave di firma principale di Sony per la PlayStation 3. L'exploit non violava una curva ellittica a 256 bit. Non violava l'AES. Sfruttava il fatto che il sistema di firma del codice di Sony riutilizzava lo stesso numero per ogni firma prodotta. Quel numero era un nonce.
La stessa parola, "nonce", compare in tre angoli del mondo delle criptovalute che non hanno quasi nulla in comune. È la variabile che un miner di Bitcoin elabora trilioni di volte al secondo alla ricerca di un hash di blocco valido. È il contatore che il tuo portafoglio Ethereum usa per sequenziare le transazioni in uscita e il motivo per cui una transazione bloccata impedisce la firma di tutte le transazioni successive. È il valore univoco di cui un cifrario AES-GCM ha bisogno per impedire che due messaggi crittografati rivelino il contenuto l'uno dell'altro. Una parola, tre funzioni, nessuna delle quali intercambiabile. Confondere una funzione con l'altra è il motivo per cui i neofiti interpretano erroneamente gli errori "nonce too low", per cui i miner progettano configurazioni impossibili e per cui sistemi come la PS3 perdono la loro radice di fiducia.
Un nonce a 32 bit chiamato "numero utilizzato una sola volta": origine
L'acronimo inverso è ovunque. "Nonce sta per numero usato una sola volta." Corrispondentemente vero, ma storicamente errato. La parola inglese è precedente alla crittografia di circa 750 anni. L'espressione "for the nonce" compare in manoscritti del medio inglese intorno al 1200. Significava "per questa particolare occasione".
La crittografia ha introdotto il termine nel 1978 con il protocollo di autenticazione Needham-Schroeder. In questo caso, la proprietà che definisce il nonce non è la casualità, bensì l'unicità, entro un ambito definito. Wikipedia, rimettendosi alla pratica effettiva, definisce il nonce come "un numero arbitrario che può essere utilizzato una sola volta in una comunicazione crittografica". Un contatore, un timestamp, un valore casuale o qualsiasi combinazione dei tre rientrano in questa categoria. Ciò che conta è che, all'interno del sistema, lo stesso nonce non venga mai più utilizzato con la stessa chiave o nello stesso contesto.
Una sola parola fa il lavoro, e il lavoro si divide in tre parti. Il nonce di mining di Bitcoin varia finché l'hash del blocco non scende al di sotto del target di difficoltà. Il nonce dell'account di Ethereum è un contatore che la rete si rifiuta di far ripetere. Un nonce crittografico nella crittografia simmetrica è un valore associato a una chiave, e riutilizzarlo una sola volta decifra la crittografia.
Il termine è vago. I contesti, invece, non lo sono.

Come funziona il nonce nel mining di Bitcoin
In Bitcoin, il nonce occupa un campo a 32 bit all'interno dell'intestazione del blocco di 80 byte. Quattro byte. I valori vanno da zero a 4.294.967.295. Poco meno di 4,3 miliardi di numeri possibili, un numero che sembrava enorme quando Satoshi scrisse il protocollo e che ora viene elaborato in microsecondi da un ASIC delle dimensioni di una scrivania.
Il mining è una corsa per trovare un valore in quel campo che produca un hash di blocco valido. Prendiamo l'intestazione di 80 byte. Elaboriamola due volte con SHA-256, la funzione di hash crittografica su cui si basa la blockchain di Bitcoin. Il risultato è un numero a 256 bit. Confrontiamo questo numero con l'hash target impostato dal parametro di difficoltà della rete, il meccanismo di consenso che alimenta la prova di lavoro. Se è inferiore al target, il blocco è valido e il miner vince. Se è superiore al target, il nonce viene incrementato di uno e l'hash viene ricalcolato. I miner di Bitcoin ripetono questo processo finché qualcuno non trova un nonce valido e il nuovo blocco viene aggiunto alla blockchain.
Perché un campo così piccolo per un compito così grande? Ragioni strutturali. Il nonce è la parte più economica dell'intestazione che un miner può modificare. Ogni altro campo ha delle dipendenze. La radice di Merkle riassume le transazioni del blocco, quindi modificarla costringe a ricalcolare l'intero albero delle transazioni prima che si possa provare un nuovo hash. Il nonce aggira tutto questo. Ogni tentativo di hash è indipendente. Incrementare il nonce non porta a un progresso maggiore rispetto alla scelta di un valore casuale. Forza bruta, mascherata da linguaggio di consenso.
Il progetto ha retto per circa un anno. Poi gli ASIC lo hanno reso inutilizzabile. I miner moderni esauriscono l'intero spazio dei nonce, pari a 4,3 miliardi, in microsecondi, non in secondi. Un Bitmain Antminer S21 Pro funziona a 234 terahash al secondo. L'intero campo dei nonce viene esaurito su quell'hardware in circa 18 microsecondi . A maggio 2026, l'hashrate totale della rete Bitcoin si attestava intorno ai 996 EH/s, con una difficoltà di 132,47 trilioni. Un singolo S21 Pro elabora da solo ogni possibile valore di nonce decine di migliaia di volte al secondo.
Il protocollo di Satoshi lascia quindi al miner due vie d'uscita pulite una volta esaurito lo spazio a 32 bit. La prima è l'"extra nonce", un campo nascosto all'interno dello scriptSig della transazione coinbase. È codificato da BIP34. Da due a cento byte, controllati dal miner. Modificando l'extra nonce, il TXID di coinbase cambia, la radice di merkle deve essere ricalcolata, l'intestazione del blocco cambia e si apre una nuova ricerca del nonce a 32 bit. La seconda via d'uscita è incrementare il timestamp o ruotare i bit di versione entro l'intervallo consentito dal protocollo. I pool di mining attuali li ruotano tutti come parte del normale funzionamento. La modifica del nonce è la mutazione meno costosa. La modifica dell'extra nonce è la seconda meno costosa. Le rotazioni di merkle e timestamp sono più complesse, in ordine di complessità computazionale.
Quando qualcuno ottiene un hash inferiore al valore target (i minatori lo chiamano "golden nonce"), il nuovo blocco viene diffuso attraverso la rete peer-to-peer e ogni concorrente interrompe la propria ricerca per ricominciare dal round successivo.
| Modello ASIC | Hashrate | È ora di esaurire il nonce a 32 bit | Efficienza |
|---|---|---|---|
| Antminer S21 | 200 TH/s | ~21 µs | 17,5 J/TH |
| Antminer S21 Pro | 234 TH/s | ~18 µs | 15 J/TH |
| Antminer S21 XP | 270 TH/s | ~16 µs | 13,5 J/TH |
Un esempio reale e recente illustra il concetto. Il blocco 948.000, estratto all'inizio del 2026, ha l'hash `00000000000000000001b01841afc366a4f999b291c8563ee0d0db956fc2db44` e un valore nonce vincente di 2.582.463.598 . Quel singolo numero intero, combinato con il resto dell'intestazione del blocco, ha prodotto un hash sufficientemente basso da poter essere aggiunto alla blockchain. Ogni altro nonce provato dal miner in quel round ha prodotto un valore troppo elevato.
Questo è ciò che rappresenta, a livello meccanico, la prova di lavoro. Non un enigma nel senso di un rompicapo. Una ricerca di un nonce valido, pagata in elettricità.
Nonce hash vs nonce account: stessa parola, compito diverso
Il termine "nonce" viene riutilizzato anche per un altro scopo nel mondo delle criptovalute, e questa sovrapposizione è la principale fonte di confusione tra i neofiti. Il nonce di mining di Bitcoin è una variabile di ricerca. Il nonce dell'account di Ethereum è un contatore. Condividono solo il nome, ma quasi nient'altro.
| Hash nonce (Bitcoin) | Codice nonce dell'account (Ethereum) | |
|---|---|---|
| Lavoro | Cerca un hash valido sotto l'obiettivo | Sequenza delle transazioni in uscita per conto |
| Dove vive | Intestazione del blocco (32 bit) | Stato dell'account (numero intero completo, a partire da 0) |
| Chi lo muta? | Il minatore, in hardware, miliardi al secondo | Il portafoglio, automaticamente, uno per invio |
| Cosa significa "sbagliato" | Il biglietto della lotteria non funziona, prova con il prossimo nonce | La transazione è stata rifiutata o è bloccata. |
| Vincolato al consenso? | Sì, questa è la prova del lavoro svolto. | No, questa è una protezione contro la riproduzione |
Un hash nonce è un numero temporaneo che un miner scarta. Un account nonce è uno stato permanente inciso nella visualizzazione del tuo indirizzo da parte della rete. Confondere i due, trattando il nonce della blockchain di un blocco Bitcoin come se fosse un contatore di sequenza, è il motivo per cui le persone interpretano un errore "nonce too low" su Ethereum e presumono che la loro configurazione di mining sia guasta. Blockchain diverse, compiti diversi, stessa parola. Anche all'interno di un singolo ecosistema, il ruolo di un nonce nelle operazioni blockchain dipende interamente dal fatto che si stia monitorando il livello di consenso o il livello dell'account.
Il nonce dell'account Ethereum e il problema delle transazioni bloccate
Ogni account di proprietà esterna su Ethereum ha il proprio nonce. Il contatore inizia da zero, la prima volta che l'indirizzo invia una transazione. Da lì, aumenta di uno per ogni transazione che viene inclusa in un blocco. Quando invii qualcosa, il tuo portafoglio chiede alla rete il valore corrente, aggiunge il numero successivo in coda e firma. La rete accetta la coda di transazioni in uscita solo nell'ordine corretto: nonce 0, poi 1, poi 2. Non sono ammesse interruzioni.
Questo rigoroso ordinamento è ciò che conferisce a Ethereum la sua protezione contro gli attacchi di replay. Una transazione firmata è associata a un nonce specifico e, a partire dall'EIP-155, anche a un chainID specifico. Un attaccante non può ritrasmettere una vecchia transazione eseguita come se fosse nuova. Quando la ritrasmissione arriva, il nonce dell'account è già progredito oltre quel punto. Il chainID blocca immediatamente gli attacchi di replay tra blockchain. All'interno di una blockchain, una transazione confermata rimane in un determinato punto su un contatore che si è già spostato.
Lo stesso rigido sistema di ordinamento genera il problema che i nuovi wallet Ethereum continuano a riscontrare. Una transazione viene inviata con una mancia troppo bassa. I validatori la inoltrano. Il mempool la rimuove dalla coda di priorità. La transazione rimane quindi in un limbo: non confermata, non fallita, semplicemente bloccata. Peggio ancora, ogni transazione successiva firmata dallo stesso indirizzo acquisisce un nonce più alto. La rete si rifiuta di elaborarle finché la transazione bloccata non viene confermata o sostituita. Una singola transazione lenta blocca l'intera coda.
La soluzione risiede in un meccanismo chiamato "replace-by-fee" (sostituisci per commissione). Il tuo portafoglio ritrasmette una nuova transazione allo stesso nonce di quella bloccata, ma con più gas. L'EIP-1559, il modello di tariffazione del gas che gestisce Ethereum dall'aggiornamento di Londra dell'agosto 2021, stabilisce la regola: la nuova transazione deve aumentare sia `maxFeePerGas` che `maxPriorityFeePerGas` di almeno il dieci percento rispetto all'originale. Vuoi eliminare definitivamente la transazione bloccata invece di sostituirla? Invia un autotrasferimento di zero ETH allo stesso nonce bloccato, con una mancia più alta. Lo slot si consuma da solo e tutte le transazioni successive in coda vengono sbloccate.
Per contestualizzare, ecco i dati di maggio 2026. La mancia prioritaria media si aggira intorno a 1,875 Gwei. Una cancellazione standard di 21.000 gas si aggira intorno a $0,05 in una giornata tranquilla e sale a pochi dollari durante i periodi di congestione. C'è una lezione che tutti imparano a proprie spese: sostituire sempre prima il nonce in sospeso con il valore più basso . Aumentare la commissione su una transazione successiva mentre la precedente è ancora bloccata non serve a nulla.
L'astrazione dell'account modifica leggermente questa storia. Gli smart account ERC-4337 utilizzano un nonce bidimensionale, suddividendo l'intero in una "chiave" a 192 bit e una sequenza a 64 bit. Chiavi diverse formano flussi di transazioni paralleli. Un batch bloccato su una chiave non impedisce il lavoro su un'altra. Il nonce dell'account si è finalmente evoluto oltre il semplice contatore lineare.
Un ultimo mito da sfatare. La transizione di Ethereum al Proof of Stake, avvenuta con la fusione nel settembre 2022, non ha eliminato il nonce dell'account. Ciò che è scomparso è stato il nonce del mining all'interno dell'intestazione del blocco, perché ora i validatori vengono selezionati per slot anziché tramite un puzzle di hash. Il nonce dell'account è rimasto esattamente dove si trovava da sempre, nel trie dello stato dell'account.
Il nonce crittografico nella crittografia: la versione catastrofica
Uscendo dal contesto blockchain, il nonce crittografico svolge un lavoro più preciso. Se si commette un errore, tutto può crollare.
Ogni cifrario autenticato moderno associa una chiave segreta a un nonce per ogni messaggio. AES-GCM, il motore principale di TLS 1.3, utilizza 96 bit. La specifica è stata redatta dal NIST SP 800-38D. ChaCha20-Poly1305, l'alternativa codificata nella RFC 8439 (giugno 2018), copia la stessa lunghezza del nonce a 96 bit e la associa a una chiave a 256 bit. La regola per entrambi, in parole semplici, è: ogni coppia (chiave, nonce) viene eseguita una sola volta. Il riutilizzo non è un lieve degrado, ma un vero e proprio salto nel vuoto.
Che aspetto ha il precipizio? Riutilizzare un nonce in AES-GCM sotto una chiave. Immaginiamo che un attaccante abbia catturato entrambi i testi cifrati. Li sottopone a un'operazione XOR. Il risultato è l'operazione XOR dei due testi in chiaro sottostanti. La riservatezza è sparita in un attimo. Ma il peggio deve ancora venire. La modalità di autenticazione di GCM rivela la sua sottochiave di autenticazione interna, ovvero il valore che firma ogni testo cifrato sotto quella chiave. Con la sottochiave in mano, l'attaccante scrive nuovi testi cifrati autenticati e il destinatario legittimo li accetta come autentici. Un algoritmo di cifratura all'avanguardia, basato su un nonce difettoso, sfugge a un'operazione di Cesare.
Niente di tutto ciò è ipotetico. Un documento USENIX WOOT del 2016, intitolato "Nonce-Disrespecting Adversaries", ha analizzato endpoint HTTPS in produzione e ha individuato 184 server che riutilizzavano i nonce GCM. Le build difettose includevano specifiche immagini Cisco IOS XE e firmware Radware ADC. La vulnerabilità CVE-2016-0270 e diverse altre vulnerabilità correlate le tengono sotto controllo.
La vulnerabilità della PS3 di Sony nel dicembre 2010 è stata causata dallo stesso problema, ma con un algoritmo di crittografia diverso: l'ECDSA. Ogni firma ECDSA richiede un valore univoco e segreto, indicato con k . Il codice di firma di Sony ha omesso questo requisito di unicità, inserendo un valore k costante e riutilizzandolo per ogni firma. Un malintenzionato può ottenere due firme ECDSA su messaggi diversi con lo stesso valore di k , risolvendo così due equazioni lineari in due incognite. Il risultato è la chiave di firma privata, in forma chiusa. fail0verflow ha illustrato questo processo sul palco del 27° Chaos Communication Congress di Berlino. La chiave di firma principale di Sony è finita su Internet nel giro di poche ore. Ogni PS3 mai prodotta ha perso immediatamente la sua catena di sicurezza.
La soluzione deterministica, codificata come RFC 6979 nel 2013, elimina il generatore di numeri casuali dal processo. Il valore di k viene derivato da un HMAC del messaggio e della chiave privata. Stesso messaggio, stessa chiave, stesso k : nessun generatore di numeri casuali che possa essere corrotto. Le moderne librerie Bitcoin includono ECDSA deterministico come impostazione predefinita.
Da queste storie derivano due corollari che spesso confondono gli sviluppatori. Con i cifrari AEAD (AES-GCM, ChaCha20-Poly1305), un nonce prevedibile va bene. Un contatore funziona. L'unicità è l'unico requisito. Con le firme ECDSA e Schnorr, la regola si inverte. Un k prevedibile è catastrofico. Il nonce di firma in questo caso deve essere unico, imprevedibile e segreto allo stesso tempo. Mescolare i due approcci è esattamente il motivo per cui continuano a comparire bug di riutilizzo del nonce nel codice dei wallet personalizzati. L'audit del progetto di backup Kopia del 2024 ha registrato un rischio di collisione casuale GCM-nonce su chiavi di lunga durata, e i report di penetration testing sui nuovi SDK riportano risultati simili mese dopo mese.
Nonce vs sale vs IV: evitare la confusione a tre vie
Nei documenti sulla sicurezza informatica, si usano tre parole come se avessero lo stesso significato: Salt, Nonce e IV. Non sono sinonimi.
Il salt è un elemento fondamentale dell'hashing delle password. Si utilizza un valore casuale assegnato a ciascun utente, lo si aggiunge all'hash e, di conseguenza, le tabelle rainbow precalcolate per "password123" smettono di funzionare sul database. Il salt è presente in chiaro accanto all'hash. Nessuno lo nasconde. La condivisione del salt tra due utenti può essere problematica; un malintenzionato che riesce a decifrare la password di uno potrebbe decifrare anche quella dell'altro. Non è la fine del mondo, però.
Il nonce è un elemento fondamentale della messaggistica e delle firme. Viene utilizzato per ogni messaggio nella crittografia simmetrica, per ogni firma nell'ECDSA. I cifrari AEAD come AES-GCM espongono il nonce in chiaro, proprio come un salt accanto a un hash. L'ECDSA lo nasconde, lo tratta come un segreto e richiede una nuova casualità a ogni tentativo. In entrambi i casi, le collisioni non sono un semplice inconveniente, ma fatali. L'intera garanzia svanisce.
IV — abbreviazione di initialization vector — è il nome tradizionale di quello che le specifiche più recenti chiamano nonce. Le modalità CBC e CTR hanno utilizzato questo termine per anni. La documentazione AEAD moderna è passata a IV, principalmente perché "vector" suonava come un problema di matematica e veniva continuamente riutilizzato. "Nonce" si basa maggiormente su questa regola.
Hai bisogno di una regola che stia su un post-it? Un salt protegge un segreto che stai conservando. Un nonce protegge un segreto che stai inviando.

Perché il nonce è importante, al di là delle curiosità sul mining di bitcoin
Un nonce è un piccolo oggetto. Trentadue bit in Bitcoin. Un contatore in Ethereum. Dodici byte in AES-GCM. Ha un peso sproporzionato rispetto alle sue dimensioni. Per gli utenti comuni, ogni transazione Ethereum bloccata, ogni handshake TLS con un sito bancario, ogni firma prodotta da un portafoglio hardware dipende dalla corretta gestione del nonce. Per gli sviluppatori, la gestione errata del nonce è il punto di ingresso più comune per bug catastrofici nel codice crittografico personalizzato. L'incidente della PS3 è stato un caso estremo, ma la stessa modalità di errore continua a ripresentarsi nei nuovi SDK per portafogli e negli strumenti di backup. Per l'economia di Bitcoin, il nonce a 32 bit combinato con il meccanismo dell'extra-nonce è ciò che ha reso il mining ASIC una lotteria equa fin dall'inizio. Una delle scelte di design più importanti di Satoshi, nascosta in bella vista all'interno di un campo di intestazione apparentemente insignificante.
Un nonce è l'elemento che indica che questo evento si è verificato una sola volta, in quest'ordine e in questo modo preciso . Eliminandolo, ogni sistema che si basa sull'unicità collassa, trasformandosi in qualcosa che un attaccante può ricostruire a basso costo. Il consenso si rompe. La protezione contro gli attacchi di replay scompare. La crittografia viene compromessa. Le firme vengono falsificate.