# Differenza tra cifratura simmetrica e asimmetrica

La differenza tra cifratura simmetrica e asimmetrica riguarda due metodi diversi applicati nella codifica e decodifica dei messaggi, in particolare quelli veicolati attraverso il web, in difesa della sicurezza informatica.
La crittografia è una disciplina della matematica che è ben più antica della sicurezza informatica. Il problema crittografico è molto semplice: il messaggio di partenza è sempre un testo in chiaro, redatto in un linguaggio conosciuto. Esso viene poi elaborato attraverso un algoritmo, che ne fa una codifica crittografica, e ciò che ne risulta è quello che viene chiamato messaggio crittato (o cifrato): per essere letto, è necessaria la sua decifratura con l'ausilio di una determinata variabile crittografica (detta "chiave"), un'operazione, questa, che viene chiamata decodifica.
Il messaggio transita da un trasmettitore a un ricevitore attraverso un mezzo, in modo da non farsi intercettare da colui che è definito come osservatore, qualcuno o qualcosa che può immettersi nel transito del messaggio crittato dal mittente al destinatario.

## Problema dello scambio messaggi

Quattro sono i tipi di minacce che l'osservatore può portare allo scambio dei messaggi privati in internet:
Le problematiche sono dunque quattro:
* la confidenzialità è legata alla riservatezza (privacy) del mittente: avere una ragionevole certezza che, durante la trasmissione del messaggio, non c'è stato nessun osservatore dotato di strumenti in grado di leggerlo;
* l'integrità è la ragionevole certezza che il messaggio non sia stato alterato da nessuno, cioè modificato nella sostanza, nell'integrità del codice;
* l'autenticazione è la garanzia di sapere che un messaggio venga davvero da un mittente A, e non da qualche altro che si è spacciato per A;
* il non ripudio riguarda l'essere certi che il mittente del messaggio non possa negare di averlo mandato.

## Algoritmi e chiavi

Per ogni determinato tipo di algoritmo di decodifica esisteranno sempre delle chiavi di cifratura.
Se non si conosce la chiave non si può decodificare il documento o il messaggio. Tutto il sistema della crittografia è basato sulla chiave.
Lo scopo del crittoanalista (il "nemico" da affrontare) è capire il contenuto della chiave, poiché si fa prima a carpire la chiave segreta che a decodificare il messaggio, in relazione al tempo utile.
Esistono due grandi famiglie di codici crittografici: quelli a crittografia simmetrica e quelli a crittografia asimmetrica.

## La crittografia simmetrica

La crittografia simmetrica utilizza algoritmi di decodifica a chiave privata (DES, IDEA, 3DES, RC2 tra i più diffusi). Si tratta di algoritmi in cui la funzione di codifica e quella di decodifica usano la stessa chiave privata, o chiavi private diverse ma in diretta relazione tra loro (derivazione).

### Robustezza degli algoritmi nella crittografia simmetrica

La robustezza degli algoritmi simmetrici è legata alla lunghezza della chiave. Più lungo è il testo della chiave segreta, più difficile risulterà decifrare il messaggio. Usando 40 bit si ha una chiave debole (4 caratteri), 128 bit (13 caratteri) generano una chiave forte poiché solo in ambito militare è stato ideato un sistema in grado di decrittare tale codice in tempi relativamente ridotti. Il codice a 40 bit è stato adottato dagli anni sessanta in poi, quello a 128 bit dagli anni novanta in poi.

### Problema logistico di distribuzione delle chiavi a più utenti

Il trasmittente (mittente) e il ricevente (destinatario) devono conoscere e adoperare la stessa chiave, mantenendola rigorosamente segreta e utilizzando un canale di comunicazione sicuro.
Il problema, in questo caso, non è legato tanto alla complessità della chiave e dell'algoritmo utilizzato, quanto alla funzionalità logistica. Sussiste infatti il problema della distribuzione delle chiavi.
La validità della chiave segreta sta nel fatto che, nel caso di due utenti, deve poter esistere una e una sola chiave segreta. Ma se esiste un numero considerevole di utenti (si pensi a un servizio bancario via Internet) allora dovranno esistere N chiavi segrete, per garantire la comunicazione codificata. Generare per esempio un milione di chiavi segrete, per un milione di utenti, comporta tempo e spese.

## La crittografia asimmetrica

Questo problema viene risolto dalla crittografia asimmetrica, in uso dal 1976, nella quale vengono previste due chiavi differenti:
* la chiave di cifratura
* la chiave di decifratura.

### Utilizzo delle chiavi

La chiave di cifratura può essere resa pubblica, quella di decifratura deve essere tenuta rigorosamente privata e segreta dal proprietario.
Nella pratica si usano due chiavi diverse che non possono venire desunte l'una dall'altra in mancanza di informazioni segrete. Per riottenere il messaggio originale ("in chiaro") bisogna adoperarle entrambe. Di per sé, l'algoritmo permette di scambiare di ruolo le due chiavi. Infatti, ambedue consentono di codificare e decodificare il messaggio trasformato dall'altra, in questo modo:
* per cifrare il messaggio → chiave pubblica;
* per decifrare il messaggio → chiave privata.
Si potrebbe procedere al contrario, cioè cifrare il messaggio con la chiave privata e decodificare con quella pubblica, ma ovviamente non sarebbe utile per la confidenzialità del messaggio dato che la chiave pubblica normalmente può essere comunicata a chiunque. Risulta invece utile per identificare in modo sicuro il mittente del messaggio:
* per firmare il messaggio → chiave privata;
* per verificare la firma del messaggio → chiave pubblica.
Nella pratica questo viene usato nei sistemi a doppia chiave, esposto nel seguito.

### Risoluzione dei problemi di distribuzione

Il fatto di avere due chiavi risolve parzialmente i problemi di distribuzione, poiché sia la chiave pubblica sia quella privata vengono generate casualmente allo stesso tempo, dietro richiesta dell'utente. Solo chi ha la chiave privata può decifrare il messaggio.
Ciò permette di garantire una modalità di cifratura dal punto di vista logistico, evitando il problema di trovare un sistema di distribuzione delle chiavi. Ripensando alla crittografia simmetrica precedente l'informatica, come i cosiddetti codici serici, i servizi segreti britannici che cucivano i messaggi cifrati dentro i colletti delle camicie degli agenti, o all'interno dei loro cappotti. I servizi di Sua Maestà Britannica si erano inventati questo curioso modo di distribuire - simmetricamente - le chiavi segrete ai propri agenti.
Si trattava, indubbiamente, di sistemi di distribuzione impegnativi e vulnerabili. Invece grazie alla moderna crittografia asimmetrica non si hanno problemi logistici di distribuzione delle chiavi.

### Decodifica e autenticazione

Il meccanismo della codifica a doppia chiave ha una duplice valenza, oltre a quella di decodifica ha anche quella di autenticazione. In tale sistema sia Alice sia Bob (A e B) hanno ciascuno una chiave pubblica ed una privata.
Per essere certi che sia un solo individuo ben noto a mandare un determinato messaggio basta fornire soltanto a lui la chiave per la codifica. Analogamente il destinatario sarà sicuro di essere il solo a potere decodificare il messaggio cifrato una volta ricevuto. Si tratta in pratica di uno scambio di chiavi per una doppia codifica.

### Problema di lentezza dell'algoritmo a chiave asimmetrica

Gli algoritmi per la doppia codifica sono onerosi dal punto di vista computazionale. Da ciò deriva il principale svantaggio della decodifica asimmetrica, poiché il tempo necessario per la decodifica del messaggio è relativamente alto. Tale problema può essere attenuato, o addirittura risolto, utilizzando contemporaneamente un algoritmo a chiave asimmetrica e uno a chiave simmetrica.
In questo caso, il mittente non trasmette il messaggio originale, che può essere anche molto pesante per quantità di dati, con un algoritmo a chiave asimmetrica ma sceglie una chiave simmetrica K$_s$, generata casualmente una volta soltanto.
Quello che si genera, prima di mandare il messaggio, lo si trasmette attraverso la codifica asimmetrica, con la chiave appena generata mentre il messaggio viene trasmesso attraverso la codifica simmetrica.

## Cifrari ibridi

Esiste un terzo metodo, detto di tipo ibrido, che riassume le caratteristiche dei due tipi di crittografia appena illustrati. Infatti viene usato sia un algoritmo a chiave simmetrica sia uno a chiave asimmetrica, in contemporanea.
Ogni utente ha una coppia di chiavi privata e pubblica. Ogni volta che il mittente apre una nuova sessione viene generata una chiave di sessione, la quale viene cifrata con la chiave pubblica del destinatario e inviata insieme al messaggio. Il destinatario, per prima cosa decifra la chiave di sessione usando la propria chiave privata asimmetrica, poi usa la chiave di sessione, simmetrica, per decodificare il messaggio.
Il vantaggio di questo sistema è che unisce la comodità nella gestione delle chiavi del sistema asimmetrico alla velocità propria di quello simmetrico e consente uno scambio di chiavi sicuro anche su un canale non sicuro (ossia normalmente non crittografato e potenzialmente accessibile a tutti).

## Pro e contro della cifratura simmetrica e di quella asimmetrica

| | Cifratura simmetrica | Cifratura asimmetrica |
| Pro | Veloce | Distribuzione delle chiavi non impegnativa |
| Contro | Presenza della sola chiave privata, a rischio vulnerabilità; Difficoltà della distribuzione delle chiavi private in un sistema multiutente. | Impegnativa dal punto di vista computazionale |