Differenza tra cifratura simmetrica e asimmetrica

Da Wikipedia, l'enciclopedia libera.

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[modifica | modifica wikitesto]

Quattro sono i tipi di minacce che l'osservatore può portare allo scambio dei messaggi privati in internet: l'intercettazione, la modifica, l'invio di messaggio sotto falso nome, il ripudio della potestà del messaggio.

  1. L'intercettazione è lettura del contenuto, perché trasmesso in chiaro o perché cifrato con un algoritmo noto. L'intercettazione può essere anche legale, quando gli inquirenti, autorizzati da un provvedimento della magistratura, decifrano i messaggi veicolati, per esempio, tra organizzazioni che si sospettano essere criminali;
  2. la modifica riguarda non solo la semplice intercettazione del contenuto del messaggio, ma anche la modifica, appunto. Può essere di tipo criminoso ma anche legale, per esempio quando si modifica un virus informatico per renderlo inoffensivo;
  3. nell'invio di messaggio sotto falso nome non solo si intercetta e si modifica il messaggio, ma ne viene creato uno il cui mittente si fa credere un altro, prendendone la potestà e le credenziali;
  4. si parla di ripudiare la potestà di un messaggio (il proverbiale non l'ho scritto io!) quando si nega di averne spedito uno, pur avendolo fatto. Questo caso è il più facile da risolvere, visto che il mittente lascia sempre una sorta di orma elettronica quando spedisce un messaggio.

Problematiche e loro soluzione[modifica | modifica wikitesto]

Le problematiche sono dunque quattro:

  1. 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;
  2. l'integrità è la ragionevole certezza che il messaggio non sia stato alterato da nessuno, cioè modificato nella sostanza, nell'integrità del codice;
  3. 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;
  4. il non ripudio riguarda l'essere certi che il mittente del messaggio non possa negare di averlo mandato, se io so che quando il mittente manda un messaggio lascia un'orma.

Se queste sono le problematiche, la loro soluzione sta nella crittografia, strumento fondamentale per la realizzazione dei meccanismi di sicurezza informatica.

Mc = Fcod (K, Morig.)

Morig → Fcod → Mc

Cambiando K, la chiave di decodifica, il codice segreto che qualcuno o qualcosa deve avere deciso, cambio cifratura.

Se è vero questo, devo anche avere una funzione di decodifica, che mi riproduca il messaggio originale.

Morig = Fdec (K, Mc)

La rete di computer deve poter fare questo.

Algoritmi e chiavi[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

Cifratura simmetrica
Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: 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[modifica | modifica wikitesto]

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

Problema logistico di distribuzione delle chiavi a più utenti[modifica | modifica wikitesto]

Il trasmittente (mittente) e il ricevente (destinatario) hanno necessità di 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, ma tanto alla funzionalità logistica; c'è, 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 abbiamo un numero alto di utenti (pensiamo a un servizio bancario via internet) allora dovranno esistere N chiavi segrete, per garantire la comunicazione codificata. Però generare, ad esempio, un milione di chiavi segrete per un milione di utenti comporta, senza dubbio, tempi e spese.

La crittografia asimmetrica[modifica | modifica wikitesto]

Magnifying glass icon mgx2.svg Lo stesso argomento in dettaglio: 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[modifica | modifica wikitesto]

La chiave di cifratura può essere resa pubblica, quella di decifratura deve essere tenuta rigorosamente privata dal proprietario.

Sostanzialmente ho due chiavi diverse (che non possono venire desunte l'una dall'altra in mancanza di informazioni segrete) e, per poter tornare al messaggio originale, io devo adoperare entrambe. Di per sé, l'algoritmo permette ad esse di scambiarsi di ruolo: tutt'e due, infatti, 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 anche fare il contrario, cioè cifrare il messaggio con la chiave privata e decodificare con quella pubblica, ma ciò non ha utilità per la confidenzialità del messaggio. Ha invece utilità per identificare in modo sicuro il mittente:

  • per firmare il messaggio → chiave privata;
  • per verificare la firma del messaggio → chiave pubblica.

In pratica ciò viene usato nei sistemi a doppia chiave, esposto nel seguito.

Risoluzione dei problemi di distribuzione[modifica | modifica wikitesto]

Il fatto di avere due chiavi risolve parzialmente i problemi di distribuzione, poiché sia la chiave pubblica che quella privata vengono generate casualmente una volta fatta richiesta dall'utente.

Voglio essere sicuro che il messaggio posso decifrarlo soltanto io, perché solo io ho la chiave privata.

Ciò permette di garantire una modalità di cifratura dal punto di vista logistico, non mi pongo il problema di trovare un sistema di distribuzione delle chiavi. Pensiamo alla crittografia simmetrica precedente l'informatica, come i cosiddetti codici serici, i servizi segreti britannici che cucivano i messaggi crittati dentro i colletti delle camicie degli agenti, o all'interno dei loro cappotti. I servizi di sua maestà britannica si erano inventati tale curioso modo di distribuire - simmetricamente - queste chiavi segrete ai loro agenti.

Si trattava, indubbiamente, di un tipo di distribuzione impegnativa.

Invece con la crittografia asimmetrica non si hanno problemi logistici di distribuzione delle chiavi.

Decodifica e autenticazione[modifica | modifica wikitesto]

Cifratura asimmetrica con autenticazione

Il meccanismo della codifica a doppia chiave ha una sua duplice valenza, oltre a quella di decodifica ha anche quella di autenticazione.

In questo sistema sia Alice che Bob (A e B) hanno ciascuno una chiave pubblica ed una privata.

Infatti, se voglio essere sicuro che sia uno e uno solo a mandarmi quel determinato messaggio faccio in modo di dare a lui solo la chiave per la codifica, e di poterla poi decodificare solo io una volta che mi è stata inviata, e questo viceversa. È uno scambio di chiavi per una doppia codifica.

Due cose fa il meccanismo della doppia chiave: decodifica il messaggio e autentica il mittente, in modo che io sappia con certezza che è stato quel determinato mittente a mandarmi quel determinato messaggio. Utilizzando due volte la simmetria ottengo il doppio meccanismo di decodifica cifrata e autenticazione del ricevente. Il mittente è, dunque, determinato in modo univoco.

Problema di lentezza dell'algoritmo a chiave asimmetrica[modifica | modifica wikitesto]

Gli algoritmi per la doppia codifica sono onerosi dal punto di vista computazionale.

Il tempo che serve al messaggio per essere codificato e decodificato è relativamente alto. Questo è il principale svantaggio della decodifica asimmetrica.

Questo 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, con un algoritmo a chiave asimmetrica ma sceglie una chiave simmetrica Ks, generata a random una volta soltanto.

Quello che si genera, prima di mandare il messaggio, lo si trasmette attraverso la codifica asimmetrica, con la chiave appena generata, e il messaggio viene trasmesso attraverso la codifica simmetrica.

Cifrari ibridi[modifica | modifica wikitesto]

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 simmetrica di sessione, la quale viene crittata con la chiave pubblica del destinatario, e poi spedita assieme al messaggio. Il destinatario, per prima cosa decritta la chiave di sessione attraverso la sua chiave privata, asimmetrica, ed infine 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.

Pro e contro della cifratura simmetrica e di quella asimmetrica[modifica | modifica wikitesto]

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

Collegamenti esterni[modifica | modifica wikitesto]