7. Firma Digitale
La firma digitale è uno schema crittografico che mira a ottenere simultaneamente tre proprietà fondamentali per un messaggio: autenticazione, integrità e non-ripudio. - Autenticazione: Garantisce l'id
La firma digitale è uno schema crittografico che mira a ottenere simultaneamente tre proprietà fondamentali per un messaggio: autenticazione, integrità e non-ripudio.
- Autenticazione: Garantisce l'identificazione del firmatario del messaggio.
- Integrità: Garantisce che il messaggio non è stato modificato dopo la firma.
- Non-ripudio: Garantisce che il firmatario non possa negare di aver firmato il messaggio.
È importante notare che la firma digitale non affronta il tema della riservatezza (confidentiality) del messaggio. Per ottenere la riservatezza, la firma digitale deve essere combinata con tecniche di cifratura. È ottenuta combinando insieme più tecniche crittografiche, tipicamente basate su crittografia a chiave asimmetrica e funzioni hash.
Firma Digitale vs. Message Authentication Code (MAC)
I Message Authentication Code (MAC), come HMAC, non sono sufficienti per realizzare un sistema di firma digitale completo. Il problema principale risiede nella necessità di condividere la chiave di autenticazione tra mittente e destinatario.
- Autenticazione: Non garantita, perché il MAC del messaggio può essere generato da più soggetti che conoscono la chiave condivisa. Non si può attribuire la paternità univoca.
- Integrità: Non garantita, perché il ricevente, conoscendo la chiave, è in grado di modificare il messaggio e generare un nuovo MAC valido, rendendo la modifica indistinguibile.
- Non-ripudio: Non garantito, poiché il MAC del messaggio è generabile da più soggetti; il mittente potrebbe sostenere che sia stato il destinatario (o un altro soggetto con la chiave) a generare il MAC.
Gli schemi di firma digitale, invece, riprendono l'approccio MAC ma evitano la necessità di condividere chiavi e i problemi connessi, utilizzando algoritmi a chiave pubblica (asimmetrici).
Funzionamento della Firma Digitale
La firma digitale viene generata cifrando una "parte" del messaggio originale con la chiave privata del firmatario.
La verifica della firma avviene in due passaggi:
1. Si decifra la firma utilizzando la chiave pubblica del firmatario. Questo processo rivela un valore (solitamente un hash). 2. Questo valore decifrato viene confrontato con una "parte" del messaggio originale (o con il suo hash ricalcolato). Se i due valori coincidono, la firma è considerata valida.
Forma più Diffusa: Firma sull'Hash del Messaggio
Nella sua forma più diffusa e sicura, la cifratura non avviene sull'intero messaggio, ma sull'hash del messaggio stesso.
Questo approccio offre diversi vantaggi:
- Garantisce l'integrità dell'intero messaggio, anche se il messaggio è molto lungo.
- Mantiene limitato l'aumento di dimensione del file firmato, poiché si cifra solo un digest di dimensione fissa (l'hash), indipendentemente dalla dimensione del messaggio originale.
Algoritmi di Firma Digitale Principali
I principali algoritmi e combinazioni utilizzati per la firma digitale includono:
- RSA + SHA2: Combinazione dell'algoritmo RSA (per cifratura/decifratura asimmetrica) con una funzione hash SHA-2 (per generare il digest del messaggio).
- Digital Signature Algorithm (DSA)
- Elliptic Curve Digital Signature Algorithm (ECDSA)
- Edwards Curve Digital Signature Algorithm (EdDSA)
DSA (Digital Signature Algorithm)
DSA è un algoritmo per la firma digitale ideato dal NIST (National Institute of Standards and Technology) nel 1991.
- Funzionalità: Può essere utilizzato solo per la firma digitale, non per la cifratura dei dati.
- Generazione Chiavi: Utilizza chiavi pubbliche e private generate e rese sicure tramite operazioni esponenziali e logaritmi discreti su campi finiti.
- Sicurezza: La sua sicurezza è analoga a RSA (a parità di lunghezza di chiave).
- Prestazioni: Le prestazioni sono migliori in fase di firma e peggiori in fase di verifica rispetto a RSA.
ECDSA (Elliptic Curve Digital Signature Algorithm)
ECDSA ha una struttura analoga a DSA, ma si basa sulla teoria delle curve ellittiche in campo finito come problema matematico complesso per il calcolo delle chiavi.
Funzionamento Semplificato della Firma in ECDSA:
1. Si calcola l'hash del messaggio (H(m)). 2. Si determina un numero random temporaneo k (questo k è segreto e monouso per ogni firma). 3. Si esegue un calcolo basato su k e H(m) sulla curva ellittica (es. kG+H(m)Q, dove G è il punto generatore e Q è la chiave pubblica del firmatario). 4. Vengono derivati i valori s e r, che costituiscono la firma digitale.
Funzionamento della Verifica in ECDSA:
La verifica della firma utilizza un algoritmo che non necessita del parametro k (che rimane segreto al firmatario) e sfrutta la chiave pubblica del firmatario per ricostruire un valore e confrontarlo con r. Se i valori corrispondono, la firma è valida.