Nonce

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Il termine nonce è l'abbreviazione di number only used once, "numero usato solo una volta".
I nonce vengono spesso utilizzati sui protocolli di autenticazione e sulle funzioni di hash crittografiche.

Il nonce nelle funzioni Bitcoin viene usato nelle transazioni e nel mining

Nonce nella firma delle transazioni

Nella firma delle transazioni Bitcoin, viene utilizzato un nonce come parte integrante del processo di firma ECDSA. Il nonce di firma viene utilizzato per introdurre casualità nella firma di ogni transazione, rendendo praticamente impossibile prevedere la chiave di firma privata utilizzata per creare la firma.

Quando un utente desidera firmare una transazione Bitcoin, il nonce di firma viene generato in modo casuale. Questo nonce viene combinato con la chiave privata del mittente e l'hash del messaggio (che include i dettagli della transazione) per calcolare la firma digitale utilizzando l'algoritmo ECDSA.

L'uso di un nonce casuale è fondamentale per garantire la sicurezza della firma delle transazioni.

È ben noto nella comunità crittografica che lo schema di firma ECDSA è fragile rispetto alle vulnerabilità nella generazione dei nonce. Un attaccante può recuperare la chiave privata ECDSA di un firmatario se conosce il nonce utilizzato per generare una singola firma; se un firmatario firma due messaggi distinti con lo stesso nonce; se un firmatario firma più messaggi con nonce inaspettatamente brevi; se l'attaccante può apprendere i bit più significativi di molti nonce di firma, e così via.
Quando la chiave privata può essere facilmente determinata la sicurezza dei fondi gestiti con quella chiave privata viene compromessa.

Una volta generato il nonce di firma, viene utilizzato insieme alla chiave privata per calcolare la firma digitale, che viene poi inclusa nella transazione Bitcoin come parte dell'input di firma scriptSig.
La firma consente al destinatario della transazione di verificare che la transazione sia stata autorizzata dal proprietario della chiave privata corrispondente.

In sintesi, il nonce di firma viene utilizzato per garantire l'imprevedibilità della firma ECDSA di ogni transazione Bitcoin, aggiungendo casualità al processo di firma e proteggendo così la sicurezza del sistema.

Nonce nel mining

Nel contesto del mining, il nonce è il numero che i miner devono trovare per minare un blocco. Questo numero, quando aggiunto all'hash di un blocco, deve soddisfare le condizioni del livello di difficoltà prestabilito.

Quando un miner trova un nonce che soddisfa i criteri richiesti, può creare il blocco e aggiungerlo alla blockchain, ricevendo come ricompensa la nuova criptovaluta.

I miner devono tentare di trovare un nonce valido eseguendo numerosi calcoli per ottenere un hash di blocco che soddisfi determinati requisiti, ovvero un certo numero di zeri iniziali: maggiori sono gli zeri richiesti e maggiore è la difficoltà. Durante la competizione per estrarre un nuovo blocco, il primo miner che trova un nonce che produce un hash di blocco valido ha il diritto di aggiungere il blocco successivo alla blockchain e viene ricompensato per questo.

In altre parole, il processo di mining coinvolge i miner che eseguono numerose funzioni di hash con diversi valori di nonce fino a quando non viene prodotto un output valido. Se l'output hash di un miner soddisfa una soglia predeterminata, il blocco viene considerato valido e viene aggiunto alla blockchain. Se l'output non è valido, il miner continua a provare con diversi valori di nonce. Una volta che un nuovo blocco viene estratto e convalidato con successo, il processo ricomincia.

Nel contesto di Bitcoin e della maggior parte dei sistemi Proof of Work, il nonce è semplicemente un numero casuale utilizzato dai miner per iterare l'output dei calcoli di hash. I miner adottano un approccio di tentativi ed errori, provando diversi valori di nonce, poiché la probabilità di indovinare con precisione un nonce valido è estremamente bassa.


aggiornato il 2022-01-10