Firma Digitale
firma.png

Una firma digitale è un meccanismo con cui si ottiene l'autenticazione e l'integrità dei dati utilizzando delle funzioni di hash e un algoritmo di crittografia asimmetrica. Anche se viene utilizzata la crittografia, e per la firma digitale è necessario disporre di chiavi crittografiche, non è detto che il messaggio firmato è necessariamente anche cifrato: un messaggio può essere firmato ma trasmesso in chiaro. Ovviamente si può associare alla firma digitale anche la crittografia standard, per mantenere segreto il messaggio. Uno degli algoritmi di firma digitale utilizzati è il Digital Signature Algorithm.

La firma digitale cerca in qualche modo di essere un analogo della firma calligrafica su un documento cartaceo. Idealmente, una firma calligrafica ha (o cerca di avere) le seguenti proprietà:

  • È autentica: conferma a chi la esamina che il firmatario ha deliberatamente firmato il documento
  • Non può essere contraffatta: conferma che solo il firmatario ha firmato il documento e non qualcun'altro
  • Non è riutilizzabile: la firma è parte del documento
  • Rende il documento inalterabile
  • Non può essere ripudiata: il firmatario non può affermare che non ha firmato il documento

Naturalmente queste sono condizioni teoriche e dei bravi falsari potrebbero violare una o tutte queste proprietà.

Una firma digitale è costituita da un blocco di dati che vengono allegati al messaggio da firmare. Chi riceve il messaggio è in grado di verificare che il blocco di dati rappresenta una firma di un particolare mittente. Un algoritmo di firma digitale verifica il documento in base alla firma e indica se la firma è valida oppure no.

L'algoritmo di firma di un messaggio procede in questo modo:

  1. viene calcolato il codice hash del messaggio o del documento tramite una funzione di hash
  2. viene creata la firma utilizzando il codice hash del messaggio e la chiave privata del mittente (opzionalmente si impiega anche un numero generato casualmente)
  3. la firma viene inviata separatamente o incorporata nel messaggio
sign01.png

L'algoritmo di verifica di una firma funziona così:

  1. viene calcolato il codice hash del messaggio o del documento (naturalmente con la stessa funzione di hash utilizzata per firmare)
  2. viene verificata la firma utilizzando il codice hash calcolato e la chiave pubblica del mittente

se l'algoritmo da esito positivo allora il proprietario della chiave pubblica ha firmato quel messaggio o documento e nessun'altro.

sign02.png

La firma digitale sfrutta le proprietà degli algoritmi di hash con quelle degli algoritmi di crittografia e permette di ottenere i seguenti risultati:

  • Non è possibile allegare i dati di una firma valida di un documento A e allegarli ad un documento B: ogni firma è diversa. Poichè nella firma viene impiegato il codice hash del messaggio, se si sostituisse il messaggio non corrisponderebbe più il codice hash del documento A (contenuto nella firma originale) con quello del documento B (a cui è stata allegata la firma)
  • Dato un documento con una firma valida, non è possibile alterare il documento. Anche in questo caso la proprietà deriva da quelle delle funzioni di hash: un minimo cambiamento, anche di un solo bit, comporta la generazione di un codice diverso che non coincide più con quello utilizzato nella firma
  • L'algoritmo di verifica indica chi è il proprietario della firma. Infatti la verifica corretta avviene solo utilizzando la chiave pubblica (che chiunque può ottenere) relativa alla chiave privata di chi ha firmato e ogni altra chiave pubblica fornisce esito negativo.

Se si desidera combinare riservatezza e autenticazione dei dati, si può firmare e cifrare un messaggio. Ad esempio, quando Alice vuole inviare un messaggio cifrato e firmato a Bob, desidera che:

  1. Solo Bob possa decifrare il messaggio
  2. Bob possa verificare che è stata effettivamente Alice ad inviarglielo

La procedura funziona in questo modo:

  1. Alice firma il messaggio, utilizzando la sua chiave privata
  2. Alice cifra il messaggio firmato per Bob utilizzando la chiave pubblica di Bob
  3. Infine invia il messaggio cifrato con la firma incorporata (o il messaggio cifrato e la firma distaccata) a Bob

Quando Bob riceve il messaggio effettua queste operazioni

  1. Decifra il messaggio utilizzando la propria chiave privata e ottiene un messaggio in chiaro con la firma
  2. Verifica la firma di Alice usando la chiave pubblica di Alice

Algoritmi

Fattorizzazione Interi Logaritmo Discreto Curve Ellittiche
Firma RSA, Rabin-Williams, ESIGN DSA, Nyberg-Rueppel ECDSA, Nyberg-Rueppel su Curve Elittiche
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License