Per crit­to­gra­fia, o cifratura, si intende un pro­ce­di­men­to, secondo il quale un testo in chiaro viene con­ver­ti­to in una sequenza in­com­pren­si­bi­le tramite l’utilizzo di una chiave. Nel migliore dei casi il contenuto del testo segreto è ac­ces­si­bi­le solo se la cifratura viene resa nulla grazie all’utilizzo della chiave in questione. I termini “testo in chiaro” e “testo segreto” hanno radici antiche. Og­gi­gior­no i cifrari, ovvero gli algoritmi uti­liz­za­ti per de­ter­mi­na­ti processi di cifratura o de­ci­fra­tu­ra, vanno però oltre alla codifica di mere co­mu­ni­ca­zio­ni testuali, e vengono uti­liz­za­ti anche per altre in­for­ma­zio­ni elet­tro­ni­che come messaggi vocali, immagini o codici di pro­gram­ma­zio­ne.

La crit­to­gra­fia viene uti­liz­za­ta per pro­teg­ge­re file, drive e directory vari da accessi in­de­si­de­ra­ti o per garantire una tra­smis­sio­ne dati sicura. Già nell’antichità venivano uti­liz­za­ti dei cifrari, sebbene ben più semplici di quelli attuali, i quali si li­mi­ta­va­no alla codifica delle in­for­ma­zio­ni da pro­teg­ge­re. In questi casi, dei singoli simboli, parole o intere frasi del testo in chiaro venivano dislocati all’interno del messaggio, tecnica chiamata cifrario a tra­spo­si­zio­ne, o so­sti­tui­ti tramite delle com­bi­na­zio­ni al­ter­na­ti­ve dei simboli, cifrario a so­sti­tu­zio­ne.

Per poter de­co­di­fi­ca­re un testo criptato in questo modo, il de­sti­na­ta­rio doveva so­li­ta­men­te conoscere la regola, con la quale il testo era stato criptato in primo luogo. Le per­mu­ta­zio­ni ri­guar­dan­ti il cifrario a tra­spo­si­zio­ne av­ve­ni­va­no so­li­ta­men­te grazie all’utilizzo di una matrice, ovvero al fine di rie­la­bo­ra­re un testo segreto a tra­spo­si­zio­ne nel testo in chiaro, deve dunque essere co­no­sciu­ta o ri­co­strui­ta la matrice uti­liz­za­ta per la tra­spo­si­zio­ne. Il cifrario a so­sti­tu­zio­ne si basa invece su un ordine tabellare delle cifre e dei simboli del testo in chiaro sotto forma di un libro codice segreto.

Uno dei primi e più semplici cifrari di questo tipo risale all’epoca di Giulio Cesare. Il co­sid­det­to cifrario di Cesare si basa su di un cifrario con so­sti­tu­zio­ne mo­noal­fa­be­ti­ca. Per fare in modo che la sua cor­ri­spon­den­za militare fosse protetta dalle spie nemiche, l’esperto generale spostava le lettere delle sue parole di tre posizioni nell’alfabeto. Il risultato era il seguente:

Il numero degli spo­sta­men­ti, secondo il quale venivano spostati i simboli, possono essere intesi in questo caso come la chiave della cifratura. Questo non veniva indicato in numeri, bensì con la lettera cor­ri­spon­den­te dell’alfabeto. Uno spo­sta­men­to di tre posizioni, cor­ri­spon­de­va dunque alla chiave “C”.

Mentre il principio dietro al cifrario di Cesare è re­la­ti­va­men­te facile da intuire, le cifrature moderne si basano oggi su funzioni ma­te­ma­ti­che complesse, i co­sid­det­ti algoritmi, che combinano più so­sti­tu­zio­ni e tra­smu­ta­zio­ni e che vengono pa­ra­me­triz­za­te tramite la chiave sotto forma di password o codici binari. Questi pro­ce­di­men­ti rap­pre­sen­ta­no chia­ra­men­te grossi ostacoli per i crit­to­gra­fi. Molti dei sistemi crit­to­gra­fi­ci stabiliti risultano in­de­ci­fra­bi­li con i mezzi di­spo­ni­bi­li al giorno d’oggi.

Come funziona la crit­to­gra­fia?

Qualunque pro­ce­di­men­to crit­to­gra­fi­co si basa su due com­po­nen­ti: un algoritmo crit­to­gra­fi­co e almeno una chiave segreta. Mentre l’algoritmo descrive la me­to­do­lo­gia crit­to­gra­fi­ca, come ad esempio lo “spo­sta­men­to delle lettere lungo l’ordine di suc­ces­sio­ne dell’alfabeto”, la chiave definisce il parametro, ad esempio “C = tre posizioni”. Una crit­to­gra­fia può dunque essere definita come procedura quando un algoritmo crit­to­gra­fi­co fornisce il testo in chiaro ed una chiave, e come risultato finale si ottiene un testo segreto.

Chiave digitale

Nei processi crit­to­gra­fi­ci moderni le chiavi digitali vengono uti­liz­za­te sotto forma di stringhe di bit. Un criterio es­sen­zia­le per la sicurezza della crit­to­gra­fia è la lunghezza in bit della chiave. Questa determina la misura lo­ga­rit­mi­ca per il numero delle possibili com­bi­na­zio­ni di chiavi; a questo proposito si parla anche di spazio delle chiavi. Maggiore è lo spazio delle chiavi, più re­si­sten­te sarà la cifratura contro gli attacchi di forza bruta; ovvero una me­to­do­lo­gia di de­ci­fra­tu­ra che si basa sul tentare tutte le possibili com­bi­na­zio­ni.

Con il cifrario di Cesare ad esempio, dove lo spazio di chiavi è di 25 pos­si­bi­li­tà, gli attacchi di forza bruta hanno vita facile, essendo la lunghezza della chiave minore di 5 bit. Chiunque voglia dunque de­co­di­fi­ca­re tale crit­to­gra­fia dovrà solamente tentare un massimo di 25 com­bi­na­zio­ni per venire in possesso del testo in chiaro. Perciò il cifrario di Cesare non rap­pre­sen­ta realmente un ostacolo. I cifrari moderni al contrario uti­liz­za­no chiavi che offrono invece molte più com­bi­na­zio­ni. L’Advanced En­cryp­tion Standard (AES) ad esempio dà la pos­si­bi­li­tà di scegliere tra chiavi di lunghezza di 128, 192 o 256 bit; lo spazio di chiavi del pro­ce­di­men­to scelto sarà quindi pro­por­zio­nal­men­te grande.

Già con una crit­to­gra­fia a 128 bit si avranno 2128 pos­si­bi­li­tà, che cor­ri­spon­do­no a più di 340 se­sti­lio­ni di possibili com­bi­na­zio­ni. Se invece si utilizza la crit­to­gra­fia AES a 256 bit, il numero delle possibili chiavi sarà di più di 115 do­di­ci­liar­di. Anche di­spo­nen­do dell’at­trez­za­tu­ra tecnica adatta, ci vorrebbe un’eternità per provare tutte le possibili com­bi­na­zio­ni. Con la tec­no­lo­gia a di­spo­si­zio­ne gli attacchi di forza bruta ri­sul­te­reb­be­ro im­pra­ti­ca­bi­li nello spazio di chiavi AES. Sarebbe infatti ne­ces­sa­rio un computer cluster di un bilione di computer, dei quali ognuno dovrebbe provare un bilione di chiavi al secondo, e no­no­stan­te ciò ser­vi­reb­be­ro ancora 10 milioni di anni per mettere alla prova tutte le possibili com­bi­na­zio­ni e riuscire così a de­co­di­fi­ca­re una cifratura a 128 bit.

Il principio di Kerc­khoffs

Dato le lunghezze delle chiavi co­mu­ne­men­te uti­liz­za­te oggi, gli attacchi di forza bruta non rap­pre­sen­ta­no una minaccia seria per i moderni processi crit­to­gra­fi­ci. Infatti i crit­to­gra­fi cercano og­gi­gior­no delle vul­ne­ra­bi­li­tà nell’algoritmo, le quali con­sen­ti­reb­be­ro di ridurre i tempi di calcolo per la de­co­di­fi­ca di dati cifrati. Un altro approccio è quello di con­cen­trar­si sui co­sid­det­ti canali laterali, che prendono di mira l’im­ple­men­ta­zio­ne di un sistema crit­to­gra­fi­co in un di­spo­si­ti­vo o in un software. La se­gre­tez­za di un cifrario diventa dunque con­tro­pro­du­cen­te per la sua stessa sicurezza.

Perciò il principio di Kerc­khoffs, invece che basare la sicurezza di un sistema crit­to­gra­fi­co sulla se­gre­tez­za dell’algoritmo, si basa su quella della chiave uti­liz­za­ta. Auguste Kerc­khoffs, già nel 1883, formulò uno dei principi fon­da­men­ta­li della moderna crit­to­gra­fia: per co­di­fi­ca­re in maniera af­fi­da­bi­le un testo in chiaro, basterà corredare un pro­ce­di­men­to co­no­sciu­to e ben definito con dei parametri segreti. Questa ipotesi è so­stan­zial­men­te rimasta immutata fino ad oggi.

Come tanti altri settori dell’in­ge­gne­ria del software, anche alla base dello sviluppo dei mec­ca­ni­smi di codifica vi è l’ipotesi che l’open source non vada a discapito della sicurezza. L’utilizzo del principio di Kerc­khoffs porta con sé tanti altri benefici, ovvero permette di scoprire più ve­lo­ce­men­te le falle negli algoritmi crit­to­gra­fi­ci, poiché appositi processi hanno sempre addosso l’occhio critico degli esperti.

Espan­sio­ne della chiave: dalla password alla chiave

Gli utenti finali che vogliono cifrare o decifrare dei dati, non vengono so­li­ta­men­te a contatto con le chiavi, bensì uti­liz­za­no una stringa di più facile gestione: la password. Le password sicure hanno tra gli 8 e i 12 caratteri, formano una com­bi­na­zio­ne di cifre, numeri e caratteri speciali e hanno, al contrario delle stringhe di bit, un vantaggio decisivo, cioè quello che le password possono essere tenute a mente, senza eccessiva fatica, anche dagli uomini.

In quanto chiavi, le password sono inadatte all’utilizzo nell’ambito della cifratura, a causa della loro lunghezza in­suf­fi­cien­te. Molti cifrari con­ten­go­no perciò una tappa in­ter­me­dia: la password della lunghezza che si pre­fe­ri­sce viene con­ver­ti­ta a seconda del sistema crit­to­gra­fi­co in una stringa di bit cor­ri­spon­den­te. Al­tri­men­ti esistono anche pro­ce­di­men­ti tramite i quali vengono generate chiavi in maniera del tutto casuale a seconda delle pos­si­bi­li­tà tecniche a di­spo­si­zio­ne.

Un metodo co­mu­ne­men­te uti­liz­za­to per ottenere delle chiavi da password, è rap­pre­sen­ta­to dalla PBKDF2 (Password-Based Key De­ri­va­tion Function 2). Nell’ambito di questo pro­ce­di­men­to le password vengono integrate con una stringa pseu­do­ca­sua­le, il co­sid­det­to sale, e tramite una funzione crit­to­gra­fi­ca di hash, vengono con­se­guen­te­men­te commutate in stringhe di bit della lunghezza de­si­de­ra­ta.

Le funzioni di hash sono una funzione uni­di­re­zio­na­le, ovvero calcoli com­pa­ra­bil­men­te facili da ef­fet­tua­re, ma che pre­sen­ta­no non poche dif­fi­col­tà per essere ri­per­cor­si nel verso opposto. In crit­to­gra­fia un processo viene definito sicuro, quando a diversi documenti vengono assegnati diversi hash. Le password che vengono commutate in chiavi grazie all’utilizzo di funzioni uni­di­re­zio­na­li, e sono dunque ri­co­strui­bi­li (se lo sono) solo con un con­si­de­re­vo­le processo di calcolo. Un paragone calzante potrebbe essere quello della ricerca in una rubrica te­le­fo­ni­ca: mentre risulta semplice trovare un de­ter­mi­na­to numero di telefono se si conosce il nome dell’in­te­sta­ta­rio, può risultare un problema ir­ri­sol­vi­bi­le la ricerca di un nome avendo a di­spo­si­zio­ne solamente il numero di telefono.

La com­pu­ta­zio­ne ma­te­ma­ti­ca nel caso dell’utilizzo del PBKDF2 viene ef­fet­tua­ta in numerose ite­ra­zio­ni, ovvero ri­pe­ti­zio­ni, al fine di pro­teg­ge­re la chiave generata in questo modo dagli attacchi di forza bruta. Il sale aumenta l’impegno ne­ces­sa­rio per la ri­co­stru­zio­ne di una password sulla base di tabelle ar­co­ba­le­no. La tabella ar­co­ba­le­no è uno schema di attacco, tramite il quale i crit­to­gra­fi riescono ad ottenere una password sco­no­sciu­ta partendo dai valori hash salvati.

Ulteriori pro­ce­di­men­ti password-hashing sono scrypt, bcrypt e LM-Hash. Quest’ultimo tuttavia è da con­si­de­rar­si obsoleto e poco sicuro.

Il problema della tra­smis­sio­ne della chiave

Un problema centrale della crit­to­gra­fia è la questione su come far sì che delle in­for­ma­zio­ni possano essere co­di­fi­ca­te in un luogo e de­co­di­fi­ca­te in un altro luogo dif­fe­ren­te. Giulio Cesare, già all’epoca, dovette con­fron­tar­si con il problema della tra­smis­sio­ne delle chiavi. Ogni qualvolta il generale de­si­de­ras­se inviare una co­mu­ni­ca­zio­ne criptata da Roma al fronte germanico, egli doveva as­si­cu­rar­si che il de­sti­na­ta­rio fosse nella con­di­zio­ne di decifrare il messaggio segreto. L’unica soluzione possibile era la seguente, cioè che sia il testo segreto, sia la chiave per de­ci­frar­lo fossero co­mu­ni­ca­te tramite un mes­sag­ge­ro. Ma come fare in modo che la tra­smis­sio­ne della chiave potesse avvenire senza il rischio che andasse a finire nelle mani di terzi?

La medesima domanda mette alla prova i crit­to­gra­fi ancora oggi nell’ambito della tra­smis­sio­ne di dati cifrati in Internet. Le proposte per la soluzione di questo problema sono confluite nello sviluppo di diversi sistemi crit­to­gra­fi­ci e pro­to­col­li di scambio delle chiavi. Il problema di tra­smis­sio­ne delle chiavi di sistemi crit­to­gra­fi­ci sim­me­tri­ci può essere inteso come la mo­ti­va­zio­ne prin­ci­pa­le per lo sviluppo di cifrari asim­me­tri­ci.

Clas­si­fi­ca­zio­ne dei pro­ce­di­men­ti crit­to­gra­fi­ci

Nella crit­to­gra­fia moderna si distingue ge­ne­ral­men­te tra cifrari sim­me­tri­ci e asim­me­tri­ci. La clas­si­fi­ca­zio­ne dipende dall’utilizzo che viene fatto delle chiavi.

Nei sistemi crit­to­gra­fi­ci sim­me­tri­ci, la stessa chiave viene uti­liz­za­ta sia per la codifica che per la de­co­di­fi­ca di dati cifrati. Se due parti in co­mu­ni­ca­zio­ne vogliono scam­biar­si dei dati cifrati, dev’essere trovato un modo per tra­smet­te­re la chiave segreta comune senza com­pro­met­ter­ne la se­gre­tez­za. Al contrario, nei sistemi crit­to­gra­fi­ci asim­me­tri­ci, ognuna delle due parti produce la propria coppia di chiavi: una chiave pubblica, chiamata Public Key, e una privata, Private Key.

Se invece viene uti­liz­za­ta una com­bi­na­zio­ni di cifrari sim­me­tri­ci ed asim­me­tri­ci, allora si parlerà di un cifrario ibrido.

Cifrari sim­me­tri­ci

Fino agli anni settanta, la cifratura di in­for­ma­zio­ni si basava su sistemi crit­to­gra­fi­ci sim­me­tri­ci, le cui origini ri­sa­li­va­no agli antichi pro­ce­di­men­ti, come quello uti­liz­za­to da Giulio Cesare. Il principio alla base della cifratura sim­me­tri­ca è che la cifratura e la de­ci­fra­tu­ra avvengono entrambi grazie ad una stessa chiave. Se due parti vogliono co­mu­ni­ca­re in maniera cifrata, sia il mittente sia il de­sti­na­ta­rio devono disporre di una copia della chiave comune. Al fine di pro­teg­ge­re in­for­ma­zio­ni cifrate dagli attacchi di terzi, la chiave sim­me­tri­ca va tenuta segreta. Si parla perciò di una crit­to­gra­fia a chiave privata.

Mentre i cifrari sim­me­tri­ci classici lavorano sul livello delle lettere per tra­sfor­ma­re il testo in chiaro in testo segreto, la cifratura dei sistemi crit­to­gra­fi­ci assistiti da computer lavora sul livello dei bit. Si dif­fe­ren­zia­no in questo caso due diversi tipi di cifrari: il cifrario a flusso, anche riferito come cifrario a caratteri, e il cifrario a blocchi.

  • Cifrario a flusso o a caratteri: ogni carattere, ovvero bit, del testo in chiaro viene collegato ad un carattere o bit dif­fe­ren­te, derivante dal flusso di chiavi in uso; viene così con­ver­ti­to in un carattere cifrato.
  • Cifrario a blocchi: i simboli o bit da cifrare vengono rag­grup­pa­ti in blocchi di lunghezza fissa e tra­sfor­ma­ti perciò in un testo cifrato, ugual­men­te di lunghezza fissa.

I comuni metodi di cifratura dei sistemi crit­to­gra­fi­ci sim­me­tri­ci sono ope­ra­zio­ne di facilità com­pa­ra­bi­le a quella dei cifrari a so­sti­tu­zio­ne e a tra­spo­si­zio­ne, i quali vengono uti­liz­za­ti in com­bi­na­zio­ne e in cicli con­se­cu­ti­vi (ite­ra­zio­ni), per i moderni pro­ce­di­men­ti di cifratura dei testi in chiaro. Nei moderni algoritmi di cifratura sim­me­tri­ci viene inoltre integrata l’arit­me­ti­ca modulare assieme ad addizioni, mol­ti­pli­ca­zio­ni e alle ope­ra­zio­ni bit a bit XOR.

Tra i cifrari sim­me­tri­ci più co­no­sciu­ti vi sono anche il già superato Data En­cryp­tion Standard (DES) e il suo suc­ces­so­re Advanced En­cryp­tion Standard (AES).

Data En­cryp­tion Standard (DES)

DES è un cifrario sim­me­tri­co svi­lup­pa­to negli anni settanta dall’IBM e stan­dar­diz­za­to nel 1977 tramite il National Institute of Standards and Tech­no­lo­gy (NIST) americano. In quanto primo cifrario suf­fi­cien­te­men­te sicuro, secondo i criteri di allora, e assistito da computer, DES ha pra­ti­ca­men­te dato vita alla crit­to­gra­fia moderna. Questo standard è privo di brevetto, ma al giorno d’oggi, basandosi su una lunghezza di chiavi di 64 bit, di cui solamente 56 effettivi, risulta superato. Già nel 1994, tramite l’utilizzo di dodici HP-9735 e un processo di calcolo di 50 giorni, questo cifrario è stato de­crip­ta­to. Con i mezzi tecnici di­spo­ni­bi­li al giorno d’oggi una chiave DES potrebbe essere decifrata già in poche ore tramite degli attacchi di forza bruta.

L’algoritmo sim­me­tri­co lavora con cifratura a blocchi sul livello dei bit. Il testo in chiaro viene scomposto in blocchi di 64 bit, ognuno dei quali viene cifrato con una chiave a 64 bit. In questo modo 64 bit di testo in chiaro vengono commutati in 64 bit di testo segreto. Poiché ogni ottavo bit della chiave funge da bit di parità, alla fine dei conti vengono uti­liz­za­ti solo 56 bit effettivi per la codifica.

L’algoritmo crit­to­gra­fi­co DES rap­pre­sen­ta una co­sid­det­ta rete di Feistel e si basa su una com­bi­na­zio­ne di so­sti­tu­zio­ni e tra­spo­si­zio­ni, che vengono rea­liz­za­te tramite 16 ite­ra­zio­ni. Questo pro­ce­di­men­to, il cui nome deriva da Horst Feistel dell’IBM, è de­scri­vi­le in quattro passaggi:

1. Per­mu­ta­zio­ne d’entrata: l’intero blocco di testo in chiaro della lunghezza di 64 bit viene sot­to­po­sto ad una per­mu­ta­zio­ne d’entrata, che serve a mo­di­fi­ca­re la sequenza dei bit. Il risultato di questa per­mu­ta­zio­ne viene tra­scrit­to in due registri di 32 bit ciascuno. Vengono dunque a crearsi due metà blocchi, uno a sinistra, riferito come L, e uno a destra, R.

2. Per­mu­ta­zio­ne delle chiavi: i 56 bit della chiave rilevante per la cifratura vengono anch’essi sot­to­po­sti ad una per­mu­ta­zio­ne, e divisi con­se­guen­te­men­te in due grandi blocchi da 28 bit ciascuno, i blocchi C e D. Per ognuna delle 16 ite­ra­zio­ni viene generata una chiave di sessione da entrambi i blocchi di chiavi C e D. Inoltre i bit di entrambi le metà dei blocchi vengono spostati ci­cli­ca­men­te verso sinistra di uno o due bit. Questo dovrebbe as­si­cu­ra­re che in ogni ciclo di cifratura venga generato un’altra chiave di sessione. Suc­ces­si­va­men­te entrambe le metà dei blocchi C e D vengono tra­sfor­ma­ti in una chiave di sessione di 48 bit.

3. Ciclo di cifratura: ogni ciclo di codifica segue i passaggi da a) a d). Le chiavi di sessione si in­cro­cia­no quindi con i bit nella metà blocco R, mentre per il momento il blocco L rimane fuori dal processo.

  • Espan­sio­ne: il blocco R viene ampliato a 48 bit a seguito di un’espan­sio­ne. Inoltre i 32 bit del blocco vengono divisi in gruppi di 4 bit ciascuno durante l’espan­sio­ne e, secondo lo schema seguente, in parte duplicati e permutati.
  • Mi­sce­la­zio­ne con la chiave tramite ope­ra­zio­ne XOR: in ogni ciclo il blocco R, espanso a 48 bit, viene collegato ad una delle 48 sot­to­chia­vi tramite un’ope­ra­zio­ne XOR. Il risultato di questo col­le­ga­men­to è nuo­va­men­te un blocco di 48 bit.
  • So­sti­tu­zio­ne: in seguito alla fase di mi­sce­la­zio­ne tramite XOR, il blocco a 48 bit viene suddiviso in otto blocchi da 6 bit ciascuno, questi blocchi vengono a loro volta ripartiti in blocchi di 4 bit ciascuno, in maniera non lineare, grazie alle scatole di so­sti­tu­zio­ne, dall’inglese sub­sti­tu­tion box. Il risultato quindi è un blocco di 32 bit, il quale verrà nuo­va­men­te sot­to­po­sto ad un’ulteriore per­mu­ta­zio­ne.
  • Per­mu­ta­zio­ne: a seguito di ogni ciclo il risultato delle scatole di so­sti­tu­zio­ne verrà combinato, tramite un’ope­ra­zio­ne di XOR, con il blocco L, finora rimasto inu­ti­liz­za­to. Il risultato è un blocco di 32 bit, che verrà uti­liz­za­to nel secondo ciclo al posto del pre­ce­den­te blocco R, mentre il blocco R del primo ciclo andrà a so­sti­tui­re il blocco L del secondo ciclo.

4. Per­mu­ta­zio­ne finale: una volta terminati tutti e 16 i cicli, i blocchi L e R vengono rag­grup­pa­ti in un unico blocco da 64 bit il quale verrà poi sot­to­po­sto alla per­mu­ta­zio­ne finale, che effettua so­stan­zial­men­te il processo inverso di quella iniziale. A questo punto il testo in chiaro è stato cifrato.

La de­ci­fra­tu­ra di un testo segreto cifrato tramite DES avviene seguendo lo stesso schema al contrario.

Un punto critico prin­ci­pa­le del pro­ce­di­men­to DES è la lunghezza limitata delle chiavi, 56 bit, che risulta in uno spazio di chiavi in pro­por­zio­ne piccolo. Per questo motivo il DES non è più in grado di resistere agli attacchi di forza bruta sferrati con i potenti computer di­spo­ni­bi­li al giorno d’oggi. Inoltre il pro­ce­di­men­to di per­mu­ta­zio­ne delle chiavi, che include 16 cicli pra­ti­ca­men­te identici, viene ritenuto troppo debole.

Con il Triple DES (3DES) è stata svi­lup­pa­ta una variante del DES, il cui processo di crip­ta­zio­ne avviene in tre cicli con­se­cu­ti­vi. Però la lunghezza di chiave effettiva del 3DES è solamente di 112 bit, il che la rende comunque inferiore agli standard minimi odierni, che si attestano sui 128 bit. In aggiunta 3DES risulta chia­ra­men­te più im­pe­gna­ti­vo, in termini di calcolo, rispetto al DES. Tuttavia il Data En­cryp­tion Standard è stato lar­ga­men­te superato dal suo suc­ces­so­re che è l’Advanced En­cryp­tion Standard, un algoritmo di crit­to­gra­fia sim­me­tri­ca.

Advanced En­cryp­tion Standard (AES)

Negli anni novanta divenne palese che lo standard crit­to­gra­fi­co più uti­liz­za­to fino a quel momento, il DES, non era più all’altezza dello sviluppo tecnico; un nuovo standard era dunque ne­ces­sa­rio. Per questo motivo si stabilì come suc­ces­so­re l’algoritmo Rijndael, il cui nome deriva dai suoi svi­lup­pa­to­ri Vincent Rijmen e Joan Daemen. Questo algoritmo è un pro­ce­di­men­to, che per via della sicurezza, fles­si­bi­li­tà e per­for­man­ce venne uti­liz­za­to per un bando pubblico e suc­ces­si­va­men­te, alla fine del 2000, cer­ti­fi­ca­to dal NIST come Advanced En­cryp­tion Standard (AES). Anche AES suddivide il testo in chiaro da cifrare in blocchi, dunque entrambi questi due sistemi crit­to­gra­fi­ci sono basati su un cifrario a blocchi. Lo standard AES supporta le chiavi a 128, 192 e a 256 bit. Invece che blocchi da 64 bit, con AES, i blocchi sono chia­ra­men­te più grandi, difatti vengono uti­liz­za­ti i blocchi a 128 bit, i quali vengono cifrati secondo cicli con­se­cu­ti­vi, grazie all’aiuto di una rete a so­sti­tu­zio­ne e per­mu­ta­zio­ne (SPN). Anche il suc­ces­so­re del DES utilizza una nuova chiave ad ogni ciclo, che deriva ri­cor­si­va­men­te dalla chiave in uscita, la quale viene collegata al blocco di dati da cifrare con un’ope­ra­zio­ne di XOR. Lo svol­gi­men­to della cifratura può essere gros­so­la­na­men­te riportato nei seguenti quattro passaggi:  1. Espan­sio­ne della chiave: come con DES, AES utilizza una nuova chiave di sessione ad ogni com­bi­na­zio­ne. Questa viene derivata dalla chiave in uscita tramite la ri­cor­si­vi­tà. In questo modo la chiave in uscita viene espansa in lunghezza, per­met­ten­do così di portare il numero delle sot­to­chia­vi a 128 bit. Ogni chiave di sessione si basa su di un segmento della chiave in uscita espansa. Il numero delle sot­to­chia­vi ne­ces­sa­rie ammonta al numero dei cicli di cifratura (R) più una chiave di sessione per il preciclo (numero delle chiavi = R + 1). 2. Preciclo: nel preciclo viene riportato il blocco di partenza a 128 bit in una tabella bi­di­men­sio­na­le (array) e viene connesso con la chiave di sessione tramite un’ope­ra­zio­ne di XOR (KeyAd­di­tion). La tabella si compone di 4 righe e 4 colonne, ed ogni cella contiene un byte (unità di misura cor­ri­spon­den­te ad 8 bit) del blocco da criptare. 3. Cicli di cifratura: il numero dei cicli dipende dalla lunghezza di chiavi uti­liz­za­ta: 10 cicli con l’AES128, 12 cicli con l’AES192 e 14 cicli con l’AES256. In ogni ciclo vengono compiute le seguenti ope­ra­zio­ni:

  • SubBytes: i SubBytes si trovano nella fase in cui avviene una so­sti­tu­zio­ne mo­noal­fa­be­ti­ca. Ogni byte del blocco da criptare viene so­sti­tui­to con un equi­va­len­te tramite le scatole di so­sti­tu­zio­ne.
  • ShiftRows: la ShiftRow è invece una fase di tra­sfor­ma­zio­ne nella quale i byte vengono spostati ci­cli­ca­men­te verso sinistra nelle celle dell’array (vedi preciclo).
  • Mix­Co­lumns: anche questa è una fase di tra­sfor­ma­zio­ne; i dati all’interno delle colonne dell’Array vengono mescolati. Questo passaggio si basa su un nuovo conteggio di ogni singola cella. Inoltre le colonne dell’array vengono mol­ti­pli­ca­ti per la matrice e il risultato collegato tramite XOR.
  • KeyAd­di­tion: Alla fine di ogni ciclo avviene un’ulteriore KeyAd­di­tion (espan­sio­ne). Questo, come nel preciclo, si basa su un col­le­ga­men­to XOR del blocco dati con la chiave di sessione.

4. Ciclo finale: si tratta dell’ultimo ciclo crit­to­gra­fi­co. Di­ver­sa­men­te dai cicli pre­ce­den­ti, l’ultimo ciclo salta la fase di me­sco­la­men­to delle colonne (Mix­Co­lumns). Al termine di questo ciclo si ottiene il testo segreto. La de­co­di­fi­ca dei dati cifrati secondo lo standard AES avviene tramite l’utilizzo dello stesso algoritmo di cifratura e fa ri­fe­ri­men­to sia ai vari passaggi sopra indicati sia alle ope­ra­zio­ni ShiftRow, Mix­Co­lumns e SubBytes, la cui direzione viene però invertita. AES, grazie al suo algoritmo, ga­ran­ti­sce un’elevata sicurezza. Tutt’ora non è co­no­sciu­to alcun attacco capace di decifrare i dati cifrati con questo pro­ce­di­men­to. Gli attacchi di forza bruta risultano del tutto inef­fi­ca­ci a partire da una lunghezza delle chiavi di 128 bit. Dunque le ope­ra­zio­ni ShiftRows e Mix­Co­lumns offrono un mix di bit ottimale: alla fine dei conti ogni bit è di­pen­den­te dalla chiave. Questo sistema crit­to­gra­fi­co risulta quindi con­vin­cen­te per la sua facile im­ple­men­ta­zio­ne e per l’alta velocità di crip­ta­zio­ne. L’AES viene uti­liz­za­to nei cifrari delle WPA2, SSH e IPSec, oltre ad altri. In aggiunta a questi, l’algoritmo viene usato per la crit­to­gra­fia di archivi di file quali 7-Zip e RAR. Tuttavia la sicurezza dei dati cifrati con lo standard AES è mantenuta fin quando la chiave rimane segreta. Venendo uti­liz­za­ta la medesima chiave sia in fase di codifica sia in fase di de­co­di­fi­ca, il sistema crit­to­gra­fi­co AES, così come qualunque altro cifrario sim­me­tri­co, è soggetto al problema di tra­smis­sio­ne della chiave. L’utilizzo sicuro dell’AES si limita dunque ai campi di utilizzo che non ri­chie­do­no alcuna tra­smis­sio­ne di chiave o che per­met­to­no la tra­smis­sio­ne di quest’ultima tramite un canale sicuro. Ad ogni modo le co­mu­ni­ca­zio­ni cifrate in Internet ri­chie­do­no che i dati siano criptati su di un computer e de­crip­ta­ti su un computer dif­fe­ren­te. È per questo che vengono so­li­ta­men­te uti­liz­za­ti sistemi crit­to­gra­fi­ci asim­me­tri­ci, i quali per­met­to­no lo scambio in totale sicurezza delle chiavi sim­me­tri­che o che fun­zio­na­no anche senza dover tra­smet­te­re alcuna chiave comune. Come al­ter­na­ti­va ad AES vi sono altri cifrari sim­me­tri­ci a blocchi, come MARS, RC6, Serpent e Twofish; tutti questi erano i finalisti del bando per diventare il nuovo AES, al fianco dell’algoritmo Rijndael. Anche Blowfish, il pre­de­ces­so­re di Twofish, è tuttora in uso. Merita con­si­de­ra­zio­ne anche il cifrario a flusso Salsa20, svi­lup­pa­to nel 2005 da Daniel J. Bernstein, e finalista del progetto europeo eSTREAM.

Cifrari asim­me­tri­ci

Mentre nei cifrari sim­me­tri­ci viene uti­liz­za­ta la stessa chiave da entrambe le parti della co­mu­ni­ca­zio­ne cifrata, nel caso di una co­mu­ni­ca­zio­ne cifrata asim­me­tri­ca­men­te, tutte e due le parti generano una coppia di chiavi a testa. Così facendo ogni par­te­ci­pan­te alla co­mu­ni­ca­zio­ne dispone di due chiavi: una pubblica e una privata. Per poter co­mu­ni­ca­re, i due in­ter­lo­cu­to­ri dovranno rendere nota la propria chiave pubblica, cosa che so­li­ta­men­te avviene tramite un Key Server; in questi casi si parlerà di processo a chiave pubblica. Al contrario, la chiave privata deve rimanere segreta. Questo è proprio il punto di forza della crit­to­gra­fia asim­me­tri­ca rispetto a quella sim­me­tri­ca, ovvero che in nessun caso e in nessuna fase del processo deve essere trasmessa la propria chiave privata.

All’interno del processo crit­to­gra­fi­co asim­me­tri­co la chiave pubblica serve per la cifratura, e anche per per­met­te­re di con­trol­la­re l’au­ten­ti­ci­tà delle firme digitali e quindi per ve­ri­fi­ca­re gli utenti. Le chiavi private, invece, vengono uti­liz­za­te per la de­ci­fra­zio­ne e rendono possibile la creazione di firme digitali o di au­ten­ti­fi­car­si agli altri utenti.

Un esempio:

L’utente A desidera inviare un messaggio cifrato all’utente B, per fare ciò l’utente A necessita della chiave pubblica di B. La chiave pubblica di B permette ad A di cifrare un messaggio, il quale potrà poi essere decifrato solo con la chiave privata di B. All’infuori di B nessuno è in grado di leggere il messaggio. Lo stesso A, dopo la cifratura, non avrà più la pos­si­bi­li­tà di decifrare il messaggio.

Il vantaggio della cifratura asim­me­tri­ca sta dunque nel fatto che, dal punto di vista teorico tutti possono uti­liz­za­re la chiave pubblica dell’utente B per decifrare le proprie co­mu­ni­ca­zio­ni, le quali però saranno poi de­ci­fra­bi­li solo ed uni­ca­men­te dall’utente B con la sua chiave privata. Poiché viene dunque scambiata solo ed uni­ca­men­te la chiave pubblica, si può fare a meno di limitare le proprie co­mu­ni­ca­zio­ni ai soli canali a prova di in­ter­cet­ta­zio­ni e protetti da eventuali tentativi di ma­ni­po­la­zio­ne.

Uno svan­tag­gio di questo processo crit­to­gra­fi­co è tuttavia che B non può avere la certezza ma­te­ma­ti­ca che la co­mu­ni­ca­zio­ne ricevuta provenga realmente da A. Perciò, ipo­te­ti­ca­men­te potrebbe essere una terza persona, C, ad uti­liz­za­re la chiave pubblica di B per cifrare dei messaggi e magari avere come scopo quello di dif­fon­de­re un malware. Inoltre, anche A non ha la certezza che la chiave pubblica di cui dispone sia ef­fet­ti­va­men­te quella di B; anche C potrebbe creare una chiave pubblica e spac­ciar­la come quella di B, così da riuscire ad in­ter­cet­ta­re le co­mu­ni­ca­zio­ni che A invia, o crede di inviare, a B. Quindi è ne­ces­sa­rio un mec­ca­ni­smo per la crit­to­gra­fia asim­me­tri­ca, che renda possibile ve­ri­fi­ca­re la au­ten­ti­ci­tà del proprio in­ter­lo­cu­to­re.

Questo problema è ri­sol­vi­bi­le con i cer­ti­fi­ca­ti e le firme digitali.

  • Cer­ti­fi­ca­ti digitali: per poter gestire in maniera sicura i processi crit­to­gra­fi­ci, gli in­ter­lo­cu­to­ri hanno la pos­si­bi­li­tà di con­fer­ma­re la genuinità della propria chiave pubblica tramite il Cer­ti­fi­ca­te Authority (CA), ovvero un ente pubblico o privato che dispone dell’abi­li­ta­zio­ne a ri­la­scia­re cer­ti­fi­ca­ti digitali. Uno standard comune per i cer­ti­fi­ca­ti digitali è quello X.509. L’ap­pli­ca­zio­ne di tali cer­ti­fi­ca­ti avviene ad esempio con la tra­smis­sio­ne dati TLS/SSL tramite HTTPS o nella cifratura di e-mail con S/MIME.
  • Firme digitali: mentre i cer­ti­fi­ca­ti digitali vengono uti­liz­za­ti per ve­ri­fi­ca­re le chiavi pubbliche, le firme digitali servono ad inviare co­mu­ni­ca­zio­ni criptate ad un de­sti­na­ta­rio così che egli possa iden­ti­fi­ca­re il mittente senza problemi. Per fare ciò, ovvero creare una firma digitale, va uti­liz­za­ta la propria chiave privata. Suc­ces­si­va­men­te, il ricevente sarà in grado di ve­ri­fi­ca­re la firma grazie alla chiave pubblica del mittente. L’au­ten­ti­ci­tà delle firme digitali è com­pro­va­bi­le tramite la struttura ge­rar­chi­ca chiamata in­fra­strut­tu­ra a chiave pubblica, o in inglese Public Key In­fra­struc­tu­re (PKI). Un’al­ter­na­ti­va alla struttura ge­rar­chi­ca del PKI è il co­sid­det­to Web of Trust (WOT), una rete dove gli utenti si possono ve­ri­fi­ca­re a vicenda sia in maniera diretta che indiretta.

La prima pub­bli­ca­zio­ne scien­ti­fi­ca di un processo crit­to­gra­fi­co asim­me­tri­co è avvenuta nel 1977 da parte dei ma­te­ma­ti­ci Rivest, Shamir e Adleman, dai quali prende appunto il nome l’algoritmo RSA. Tale algoritmo si basa su co­sid­det­te funzioni uni­di­re­zio­na­li a tra­boc­chet­to ed è uti­liz­za­bi­le per la codifica sia dei dati sia della firma.

Rivest, Shamir, Adleman (RSA)

L’algoritmo RSA vale come uno dei processi a chiave pubblica più sicuri e meglio definiti. L’idea di rea­liz­za­re una codifica tramite una chiave di cifratura pubblica e una chiave di de­ci­fra­tu­ra segreta è da at­tri­buir­si ai crit­to­gra­fi Whitfield Diffie e Martin Hellman. Questo processo, pub­bli­ca­to nel 1976 con il nome di scambio di chiavi Diffie-Hellman, permette a due in­ter­lo­cu­to­ri di ac­cor­dar­si su una chiave segreta tramite un canale non sicuro. Per poterlo rea­liz­za­re, hanno usato l’algoritmo del puzzle come base di partenza, svi­lup­pa­to da Ralph Merkle. Infatti questo processo può anche essere iden­ti­fi­ca­to come lo scambio di chiavi Diffie-Hellman-Merkle (DHM).

Per questo algoritmo i crit­to­gra­fi uti­liz­za­ro­no funzioni uni­di­re­zio­na­li ma­te­ma­ti­che, che sebbene siano semplici da uti­liz­za­re, sono in­ver­ti­bi­li solo con un con­si­de­re­vo­le sforzo di calcolo com­pu­ti­sti­co. Questo processo per lo scambio delle chiavi è tutt’ora in utilizzo per l’in­ter­cam­bio di chiavi nell’ambito dei sistemi crit­to­gra­fi­ci sim­me­tri­ci. Un ulteriore merito del duo di ri­cer­ca­to­ri è rap­pre­sen­ta­to dal concetto di tra­boc­chet­to. Già dalla pub­bli­ca­zio­ne dello scambio di chiavi Diffie-Hellman erano state incluse delle scor­cia­to­ie nascoste, con lo scopo di rendere possibile l’in­ver­sio­ne delle funzioni uni­di­re­zio­na­li in minor tempo. Al tempo Diffie e Hellman non diedero in­di­ca­zio­ni concrete, ma con la teoria del tra­boc­chet­to hanno spinto molti altri crit­to­gra­fi ad indagare sulle sue pos­si­bi­li­tà.

Gli stessi Rivest, Shamir e Adleman si misero alla ricerca di scor­cia­to­ie per le funzioni uni­di­re­zio­na­li, ori­gi­na­ria­men­te spinti dalla mo­ti­va­zio­ne di confutare la teoria del tra­boc­chet­to. Ma com’è chiaro, la loro ricerca si sviluppò in un’altra direzione e sfociò in quello che poi diventò il processo crit­to­gra­fi­co che prende appunto il loro nome. Ad oggi RSA è con­si­de­ra­to il primo algoritmo scien­ti­fi­ca­men­te pub­bli­ca­to che consente la tra­smis­sio­ne di dati cifrati senza che avvenga lo scambio di una chiave segreta.

Con RSA viene impiegato un algoritmo che si basa sulla mol­ti­pli­ca­zio­ne di numeri primi di grandi di­men­sio­ni. Mentre in generale la mol­ti­pli­ca­zio­ne di due numeri primi con 100, 200 o 300 cifre non presenta grandi problemi, non esiste ancora alcun algoritmo fun­zio­na­le, capace di ri­per­cor­re­re un’ope­ra­zio­ne di questo tipo al contrario, ovvero di in­di­vi­dua­re i numeri primi che mol­ti­pli­ca­ti diano il risultato di partenza. La fat­to­riz­za­zio­ne dei numeri primi è spie­ga­bi­le con un esempio:

Se si mol­ti­pli­ca­no i numeri primi 14.629 e 30.491, si otterrà il prodotto 446.052.839. Questo numero ottenuto ha solamente quattro possibili divisori: 1; se stesso, ovvero 446.052.839; e i due numeri primi che mol­ti­pli­ca­ti lo danno come risultato. Esclu­den­do i primi due, poiché qualunque numero è di­vi­si­bi­le per uno e per se stesso, si ottengono dunque uni­ca­men­te i valori 14.629 e 30.491.

Questo schema è alla base della pro­du­zio­ne delle chiavi per l’algoritmo RSA. Sia la chiave pubblica sia la chiave privata sono una coppia di numeri:

Chiave pubblica: (e, N)

Chiave privata: (d, N)

N cor­ri­spon­de al co­sid­det­to modulo RSA, che è contenuto in entrambe le chiavi e deriva dal prodotto di due numeri primi scelti e molto grandi: p e q (N = p x q).

Al fine di generare la chiave pubblica, è inoltre ne­ces­sa­ria e, un numero scelto ca­sual­men­te con delle date li­mi­ta­zio­ni. Se si combinano N ed e si otterrà la chiave pubblica, la quale sarà presente nel testo in chiaro di entrambi gli in­ter­lo­cu­to­ri.

Per generare invece la chiave privata, oltre ad N si necessita d. d cor­ri­spon­de ad un valore derivante dai numeri primi, ca­sual­men­te generati, p e q, così come dal numero casuale e, i quali vengono calcolati gli uni con gli altri sulla base della funzione phi di Eulero (φ).

Per poter garantire la sicurezza della codifica RSA è ne­ces­sa­rio che i numeri primi che vengono uti­liz­za­ti nel calcolo della chiave privata, rimangano segreti. Il prodotto di entrambi i numeri primi, al contrario, può essere uti­liz­za­to nella chiave pubblica all’interno del testo in chiaro, questo poiché si dà per certo che og­gi­gior­no non esista alcun algoritmo capace di scomporre, in tempo rilevante, il prodotto di numeri primi nei vari fattori; risulta quindi im­pos­si­bi­le rin­trac­cia­re p e q partendo da N. Alla luce di ciò è possibile ab­bre­via­re il calcolo: il tra­boc­chet­to rap­pre­sen­ta il valore d, il quale è noto solamente al pro­prie­ta­rio della chiave privata.

La sicurezza dell’algoritmo RSA è in gran parte di­pen­den­te dall’avan­za­men­to tecnico. La capacità di calcolo dei computer raddoppia all’incirca ogni due anni. Non è quindi da escludere che nel prossimo futuro sarà di­spo­ni­bi­le un ef­fi­cien­te processo per la scom­po­si­zio­ne dei fattori primi nell’ordine di grandezza co­mu­ne­men­te uti­liz­za­to at­tual­men­te. In questo caso RSA offre la pos­si­bi­li­tà di adattare l’algoritmo allo sviluppo tecnico, uti­liz­zan­do per il calcolo numeri primi di grandezza ancora maggiore.

Crit­to­gra­fia a chiave privata basata su ID

La vul­ne­ra­bi­li­tà prin­ci­pa­le dei sistemi crit­to­gra­fi­ci asim­me­tri­ci è l’au­ten­ti­fi­ca­zio­ne utente. Nei processi crit­to­gra­fi­ci classici a chiave privata la chiave pubblica non è in nessun modo legata all’identità del suo uti­liz­za­to­re. Dovesse una terza persona riuscire a spac­ciar­si come uno dei par­te­ci­pan­ti di una tra­smis­sio­ne dati criptata grazie alla propria chiave pubblica, l’intero sistema crit­to­gra­fi­co verrebbe scar­di­na­to, senza neanche che l’algoritmo o una delle chiavi private di de­ci­fra­zio­ne vengano attaccati di­ret­ta­men­te. Già nel 1984 Adi Shamir, co-svi­lup­pa­to­re dell’algoritmo RSA, propose perciò un cifrario asim­me­tri­co basato su ID, in modo da tentare di com­pen­sa­re questa sua vul­ne­ra­bi­li­tà.

Riguardo alla crit­to­gra­fia basata sull’identità, che in inglese sta per identity-based en­cryp­tion (IBE), la pro­du­zio­ne della chiave pubblica degli in­ter­lo­cu­to­ri non dipende dalla chiave privata, bensì deriva da un ID univoco. In base al contesto di utilizzo è possibile uti­liz­za­re a questo scopo un indirizzo e-mail o un dominio. In questo modo viene meno l’au­ten­ti­fi­ca­zio­ne delle chiavi pubbliche tramite il Cer­ti­fi­ca­te Authority, il cui posto viene preso dal Private Key Generator (PKG), il co­sid­det­to ge­ne­ra­to­re di chiavi private. Si tratta di un algoritmo centrale, che mette il de­sti­na­ta­rio di un messaggio criptato nella con­di­zio­ne di esporre la chiave per la de­ci­fra­zio­ne legata alla propria identità.

La teoria del cifrario basato su ID risolve in questo modo un problema fon­da­men­ta­le dei sistemi crit­to­gra­fi­ci asim­me­tri­ci, ma porta con sé due ulteriori falle di sicurezza. Il primo punto critico sorge dal quesito ri­guar­dan­te la tra­smis­sio­ne della chiave privata per la de­ci­fra­zio­ne dal ge­ne­ra­to­re di chiavi private al de­sti­na­ta­rio della co­mu­ni­ca­zio­ne crit­to­gra­fa­ta, ovvero su come debba avvenire tale tra­smis­sio­ne. Si ri­pre­sen­ta così ancora una volta il problema relativo alla tra­smis­sio­ne delle chiavi.

L’altro ulteriore svan­tag­gio del processo basato su ID è rap­pre­sen­ta­to dal fatto che il de­sti­na­ta­rio della co­mu­ni­ca­zio­ne cifrata non sia l’unico ad essere a co­no­scen­za della chiave di de­crip­ta­zio­ne; il che rende la chiave privata uti­liz­za­bi­le abu­si­va­men­te e perciò tutt’altro che privata. Teo­ri­ca­men­te il ge­ne­ra­to­re di chiavi private è in grado di decifrare senza au­to­riz­za­zio­ne tutte le co­mu­ni­ca­zio­ni. Questo problema può age­vol­men­te essere aggirato generando la coppia di chiavi di­ret­ta­men­te sul proprio computer, tramite l’utilizzo di un software open source.

Il processo basato su ID più co­no­sciu­to è quello svi­lup­pa­to da Dan Boneh e Matthew K. Franklin.

Cifrario ibrido

Per crit­to­gra­fia ibrida si intende la com­bi­na­zio­ni di cifrari sim­me­tri­ci e asim­me­tri­ci nell’ambito della tra­smis­sio­ne dati su Internet. L’obiettivo di questa com­bi­na­zio­ne è quello di com­pen­sa­re le vul­ne­ra­bi­li­tà presenti in un sistema con i punti di forza dell’altro sistema.

I cifrari sim­me­tri­ci come AES risultano sicuri secondo gli standard tecnici odierni e per­met­to­no anche l’ela­bo­ra­zio­ne di grandi quan­ti­ta­ti­vi di dati in maniera rapida ed ef­fi­cien­te. Il design dell’algoritmo su base di una chiave privata comune, la quale deve essere scambiata in assoluta sicurezza tra il mittente e il de­sti­na­ta­rio di una co­mu­ni­ca­zio­ne cifrata, pone tuttavia gli uti­liz­za­to­ri dei processi sim­me­tri­ci dinanzi al problema della tra­smis­sio­ne delle chiavi, il quale può però essere risolto at­tra­ver­so i sistemi asim­me­tri­ci. I processi come RSA si basano su una se­pa­ra­zio­ne netta delle chiavi pubbliche e private, per­met­ten­do così di aggirare alla base il problema della tra­smis­sio­ne.

Una pro­te­zio­ne af­fi­da­bi­le contro le crit­toa­na­li­si viene offerta dall’algoritmo RSA, ma solamente nel caso in cui la lunghezza delle chiavi sia di almeno 1.976bit. Questo risulta in lunghi processi di calcolo, che di­squa­li­fi­ca­no l’algoritmo per la codifica e de­co­di­fi­ca di grandi quantità di dati. Inoltre le di­men­sio­ni del testo segreto da tra­smet­te­re, co­di­fi­ca­to tramite l’algoritmo RSA, sono de­ci­sa­men­te maggiori rispetto al testo in chiaro originale.

Per ciò che riguarda i processi di codifica ibridi, gli algoritmi asim­me­tri­ci non vengono uti­liz­za­ti per la codifica di dati utenti, bensì per la tra­smis­sio­ne di una chiave di sessione sim­me­tri­ca, al fine di as­si­cu­rar­ne la tra­smis­sio­ne protetta tramite un canale pubblico. Così facendo ci si assicura la pos­si­bi­li­tà di decifrare un testo segreto ef­fi­cien­te­men­te co­di­fi­ca­to tramite algoritmi sim­me­tri­ci.

Il pro­ce­di­men­to di una codifica ibrida è sud­di­vi­si­bi­le nei tre seguenti passaggi:

1. Am­mi­ni­stra­zio­ne della chiave: nei processi ibridi la codifica sim­me­tri­ca di una co­mu­ni­ca­zio­ne viene inclusa all’interno di un processo asim­me­tri­co. In tali processi è ne­ces­sa­rio generare sia chiavi sim­me­tri­che che asim­me­tri­che:

  • Prima di giungere al passaggio della tra­smis­sio­ne dei dati, entrambi gli in­ter­lo­cu­to­ri producono in­nan­zi­tut­to una coppia di chiavi asim­me­tri­che: una chiave pubblica ed una privata. Suc­ces­si­va­men­te avviene lo scambio delle chiavi pubbliche, nel migliore dei casi reso sicuro grazie ad un mec­ca­ni­smo di au­ten­ti­fi­ca­zio­ne. La coppia di chiavi asim­me­tri­che serve per la codifica e la de­co­di­fi­ca di una chiave di sessione sim­me­tri­ca e viene nor­mal­men­te uti­liz­za­ta più volte.
  • La codifica e de­co­di­fi­ca di un testo in chiaro avviene sulla base di una chiave di sessione sim­me­tri­ca. Questa viene generata nuo­va­men­te dal mittente ad ogni processo di codifica.

2. Codifica: nel caso in cui una co­mu­ni­ca­zio­ne debba essere trasmessa tramite Internet in maniera sicura, il mittente emette in­nan­zi­tut­to una chiave di sessione sim­me­tri­ca, con la quale saranno poi cifrati i dati in questione. Una volta terminato questo passaggio, entra in gioco la chiave pubblica del de­sti­na­ta­rio. Questa serve alla codifica asim­me­tri­ca della chiave di sessione. Sia i dati utente sia la chiave sim­me­tri­ca saranno a questo punto cifrati e potranno essere inviati senza pre­oc­cu­pa­zio­ni.

3. De­co­di­fi­ca: una volta arrivato al de­sti­na­ta­rio il testo segreto e la chiave di sessione cifrata, il de­sti­na­ta­rio userà la propria chiave privata per decifrare asim­me­tri­ca­men­te la chiave di sessione. Questa verrà in seguito uti­liz­za­ta per decifrare i dati utenti sim­me­tri­ca­men­te co­di­fi­ca­ti.

Seguendo questo schema è possibile rea­liz­za­re un efficace processo di crit­to­gra­fia, con il quale è possibile co­di­fi­ca­re e de­co­di­fi­ca­re au­to­no­ma­men­te grandi quantità di dati utente in modo rapido e sicuro. Dato che solamente una chiave di sessione viene cifrata asim­me­tri­ca­men­te, la com­ples­si­tà di calcolo e la derivante lentezza di codifica degli algoritmi asim­me­tri­ci non è un fattore rilevante nella cifratura ibrida. Il problema della tra­smis­sio­ne della chiave dei cifrari sim­me­tri­ci viene invece ridotto, grazie alla cifratura asim­me­tri­ca della chiave di sessione, al problema relativo all’au­ten­ti­fi­ca­zio­ne dell’utente, che a sua volta è ri­sol­vi­bi­le at­tra­ver­so l’utilizzo di cifrari asim­me­tri­ci puri, uti­liz­zan­do firme e cer­ti­fi­ca­ti digitali.

I processi ibridi vengono uti­liz­za­ti sotto forma di IPSec, con il quale è possibile tra­smet­te­re co­mu­ni­ca­zio­ni in totale sicurezza anche tramite reti IP non sicure. Anche l’Hypertext Transfer Protocol Secure (HTTPS) punta con il TLS/SSL su un pro­to­col­lo crit­to­gra­fi­co ibrido, il quale combina cifrari sim­me­tri­ci ed asim­me­tri­ci. Inoltre una con­ver­sio­ne del processo ibrido serve anche da base per altri standard crit­to­gra­fi­ci come Pretty Good Privacy (PGP), GnuPG e S/MIME, i quali vengono uti­liz­za­ti nel campo della codifica delle e-mail.

Una com­bi­na­zio­ne comune ri­tro­va­bi­le tra i processi ibridi è la crit­to­gra­fia sim­me­tri­ca dei dati utente tramite AES e la con­se­guen­te codifica asim­me­tri­ca della chiave di sessione tramite RSA. Al­ter­na­ti­va­men­te la chiave di sessione può essere usata anche in relazione al processo Diffie-Hellman. In tal caso ci si riferisce al processo Diffie-Hellman in versione effimera e serve a fornire la Forward Secrecy, che può essere però soggetta agli attacchi Man in the Middle. Un sostituto dell’algoritmo RSA è rap­pre­sen­ta­to dal sistema di cifratura Elgamal: un processo a chiave pubblica svi­lup­pa­to nel 1985 da Taher Elgamal, che si basa ugual­men­te sull’idea dello scambio di chiavi Diffie-Hellman e che viene uti­liz­za­to nella versione attuale del programma di cifratura PGP.

Vai al menu prin­ci­pa­le