Firme digitali
24 Apr 2023
Indice
Introduzione
Una firma digitale è un meccanismo crittografico utilizzato per verificare l'autenticità e l'integrità di dati digitali. Bitcoin utilizza l'algoritmo ellittico ECDSA
per firmare le transazioni.
Quando un utente effettua una transazione in Bitcoin, questa viene firmata digitalmente utilizzando la chiave privata dell'utente. La firma digitale viene poi trasmessa insieme alla transazione sulla rete Bitcoin.
Una volta che la transazione viene inclusa in un blocco e aggiunta alla blockchain, gli altri nodi della rete Bitcoin utilizzano la chiave pubblica dell'utente per verificare la firma digitale della transazione.
In questo modo, gli altri nodi possono confermare che la transazione è stata effettivamente autorizzata dall'utente, che possiede la chiave privata corrispondente alla chiave pubblica utilizzata per firmare la transazione.
La verifica della firma digitale nella blockchain di Bitcoin è un processo critico per garantire l'integrità e la sicurezza della rete. Poiché la blockchain di Bitcoin è immutabile, una volta che una transazione è stata confermata e aggiunta alla blockchain, non può essere modificata o annullata.
- Per effettuare un pagamento, viene generata una transazione
T
. - Un sottoinsieme delle informazioni
M
* della transazioneT
viene firmato.
* Le informazioni della transazione sono molteplici, vedi sotto "Details" a questo link
Firmare una transazione T
- La transazione
T
viene creata. - Si selezionano delle informazioni
M
riguardo alla transazioneT
, come l'ID della transazione, le istruzioni riguardo al trasferimento ecc...M
sta per "messaggio della transazione". - Si calcola l'hash
H
delle informazioniM
(H = SHA256(M)
). - Si calcola la firma digitale
S
usando l'output di una funzione di hashFhash
usando come parametro la chiave privataKpriv
del mittente. - Si mandano al network (in particolare ai miners) la firma
S
, la chiave pubblicaKpub
e le informazioniM
.
= funzione che calcola l'hash H
delle informazioni M
;
= funzione per firmare con parametri (H, Kpriv)
che produrrà i valori R
ed S
;
Verificare una transazione T
La verifica non è altro che la funzione inversa della firma.
Per verificare una transazione bisognerà avere la firma digitale (con i valori R
ed S
) e la chiave pubblica per trovare il punto P
, che è un punto che si trova sulla curva ellittica.
R
eS
sono i valori della firma digitaleKpub
è la chiave pubblicaM
è l'insieme di informazioni (firmate) della transazioneG
è il punto generatore, un punto specifico sulla curva ellittica che viene scelto in modo tale da essere facilmente calcolabile e conosciuto da tutti i partecipanti della rete Bitcoin.
In conclusione, se la coordinata del punto P
appena calcolato è uguale a R
, allora possiamo veriricare che la firma digitale è valida.
⚠️ In questo processo la chiave privata rimane segreta e NON viene rivelata.