La cifratura a chiave asimmetrica utilizza due chiavi diverse: una per la cifratura dell’informazione e l’altra per la decifratura. Le informazioni cifrate con una delle due chiavi possono essere decifrate solo con l’altra. Le due chiavi prendono generalmente il nome di chiave pubblica (public key) e chiave privata (secret key) dal fatto che una delle due chiavi (quella pubblica) deve essere fornita a tutti quelli dai quali si vogliono ricevere messaggi cifrati, mentre l’altra (quella privata) deve essere tenuta segretamente nascosta dal proprietario della coppia di chiavi (è indipendente quale delle due chiavi si scelga come pubblica e quale come privata, ma una volta fatta la scelta è per sempre). Tale metodo, per contrapposizione al precedente è anche detto cifratura a chiave pubblica.
Il messaggio viene cifrato dal mittente per mezzo della chiave pubblica del destinatario ed inviato al destinatario stesso, il quale è in grado di decifrarlo poiché è a conoscenza della sua chiave privata (v. fig. 23.3).
In questo caso lo scambio della chiave pubblica può avvenire anche attraverso un canale insicuro, poiché chi reperisce la chiave pubblica relativa ad un’entità può soltanto inviare informazioni cifrate a tale entità, infatti soltanto chi conosce la chiave privata può decifrare le informazioni cifrate con la chiave pubblica.
La sicurezza del meccanismo di cifratura deriva dalla difficoltà di derivare una delle due chiavi conoscendo l’altra. Gli algoritmi di cifratura si basano sul fatto che al momento non esiste alcun metodo in grado di effettuare in tempi brevi la fattorizzazione in numeri primi. In sostanza, considerando numeri primi molto grandi e facendone il prodotto, trovare i due numeri primi nei quali è scomponibile il risultato ha un’elevata complessità computazionale.
Di seguito sono riportati alcuni tra gli algoritmi più utilizzati per la cifratura a chiave simmetrica.
La generazione delle chiavi viene effettuata con i seguenti passi
La chiave pubblica è rappresentata da (n,e) e quella privata da (n,d).
La cifratura dei messaggi avviene seguendo i passi di seguito riportati
Il messaggio cifrato è c.
La decifratura di un messaggio c avviene mediante i seguenti passi
La sicurezza del metodo di cifratura RSA deriva dal fatto che attualmente non è stato trovato un metodo per la fattorizzazione di numeri primi molto grandi che sia computazionalmente non molto complesso.
La lunghezza della chiave si riferisce generalmente al numero di bit necessari alla rappresentazione del valore n (il modulo). I due numeri prii p e q il cui prodotto è n, dovrebbero essere dello stesso ordine di grandezza, ma non troppo “vicini” tra loro (la loro differenza non deve essere un numero “piccolo”), in modo da rendere più difficile la fattorizzazione di n.
La lunghezza della chiave del metodo di cifratura RSA, dipende dalla sicurezza che si desidera ottenere con questo meccanismo: quanto sono importanti le informazioni trasmesse e per quanto tempo devono rimanere “segrete” agli altri. Più lunga è la chiave, più sicuro è il metodo, ma più tempo occorre per cifrare e decifrare i messaggi.
Un test di tentativo per la rottura del sistema RSA è stato effettuato nel 1999 con una lunghezza della chiave di 512 bit. La chiave è stata fattorizzata con successo in 7 mesi. Questo indica che le chiavi di 512 bit non si possono ritenere ad oggi molto sicure. In genere si utilizzano chiavi di 1024 bit per la generazione di chiavi di cifratura per la protezione di informazioni di importanza a livello aziendale e chiavi di lunghezza superiore, ad esempio 2048 bit, per la generazione di chiavi con importanza più elevata (ad es. la coppia di chiavi a livello di amministratore utilizzato come autorità di certificazione).
Per generare la coppia di chiavi si sceglie a caso un numero primo p grande, per cui il problema dei logaritmi discreti risulti intrattabile in Zp, quindi si sceglie g una radice modulo p (quindi g genera Zp). Si sceglie un valore k tale che 1 < k < p- 1. Quindi si calcola h = gk modp. La chiave pubblica è rappresentata dalla terna (p, g, h) e quella privata dalla terna (p, g, k).
Un messaggio M viene codificato, in maniera nota e reversibile, in un numero m : 1 < m < p- 1 e quindi, scelto un valore s : 1 < s < p- 1, cifrato per mezzo di una chiave pubblica (p, g, h) calcolando c1 = gs modp e c2 = mhs modp. Il messaggio cifrato è rappresentato da (c1, c2).
Un messaggio cifrato (c1, c2) viene decifrato per mezzo della relativa chiave privata (p, g, k) calcolando c1-kc2 modp = (gs)-kmhs modp = (gk)-smhs modp = h-smhs modp = mmodp.
L’operazione di cifratura è più veloce di quella per la verifica della cifratura stessa (mentre con RSA la verifica della cifratura è molo più veloce rispetto alla generazione della cifratura stessa) se gli esponenti pubblico e privato sono scelti in maniera opportuno (come avviene usualmente). Non è vantaggioso poiché sono più le volte che di un messaggio si deve verificarne la firma rispetto al numero di volte che questo deve essere firmato (una soltanto).
Il metodo di cifratura è analogo a quello dell’algoritmo ElGamal.
La generazione delle chiavi è effettuata con il seguente metodo
;
con 1 < h < p - 1 tale che g = hz modp < 1;
La chiave pubblica è rappresentata da (p, q, g, y) e quella privata da x.
La firma di un messaggio avviene secondo i seguenti passi
La firma è rappresentata da (s1, s2).
La verifica della firma avviene seguendo i seguenti passi
la firma è autentica se v = s1.
Gli algoritmi di cifratura a chiave asimmetrica hanno la caratteristica di non essere molto veloci nelle fasi di cifratura e decifratura. Per questa loro caratteristica vengono generalmente utilizzati soltanto nella fase di autenticazione tra le due entità che vogliono comunicare tra loro. In genere il mittente invia un messaggio casuale detto challenge e lo cifra con la chiave pubblica del destinatario. Solo il destinatario è così in grado di decifrarlo con la sua chiave privata (e magari rinviarlo al mittente, anche in chiaro, per conferma). Il mittente è così sicuro di parlare con il destinatario.
Dopo aver superato la fase di autenticazione, il mittente invia al destinatario, nella maniera illustrata precedentemente, una chiave simmetrica con la quale cifrare i messaggi che verranno scambiati successivamente nella comunicazione. In questo modo si sfrutta la velocità degli algoritmi di cifratura simmetrica, superandolo scoglio relativo al passaggio della chiave.
Un noto protocollo per lo scambio di chiavi è stato ideato da W. Diffie e M. Hellman (v. W. Diffie and M. E. Hellman, “New directions in cryptography”, IEEE Transactions on Information Theory 22, 1976).
[da completare ...]