Firme digitali

24 Apr 2023

Indice

  1. Introduzione
  2. Firmare una transazione
  3. Verificare una transazione

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 transazione T viene firmato.

* Le informazioni della transazione sono molteplici, vedi sotto "Details" a questo link

Firmare una transazione T

  1. La transazione T viene creata.
  2. Si selezionano delle informazioni M riguardo alla transazione T, come l'ID della transazione, le istruzioni riguardo al trasferimento ecc... M sta per "messaggio della transazione".
  3. Si calcola l'hash H delle informazioni M (H = SHA256(M)).
  4. Si calcola la firma digitale S usando l'output di una funzione di hash Fhash usando come parametro la chiave privata Kpriv del mittente.
  5. Si mandano al network (in particolare ai miners) la firma S, la chiave pubblica Kpub e le informazioni M.

= funzione che calcola l'hash H delle informazioni M;
= funzione per firmare con parametri (H, Kpriv) che produrrà i valori R ed S;

firmare transazione

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 e S sono i valori della firma digitale
  • Kpub è la chiave pubblica
  • M è l'insieme di informazioni (firmate) della transazione
  • G è 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.

validazione transazione