3. La crittografia

3. La crittografia

1. Autenticazione, integrità, segretezza, non ripudio

La crittografia è il termine che indica un insieme di procedure con lo scopo di nascondere il significato di un messaggio e mostrarlo solo al mittente e al destinatario. La necessità di utilizzarla è nata nel V secolo a.C per lo scambio di informazioni militari riservate. A partire dal 750 d.C venne introdotta la crittoanalisi ovvero lo studio degli algoritmi che permettono di svelare il messaggio criptato senza conoscerne la chiave. Insieme alla crittografia, che è rappresentata dall’ideazione di metodi sempre più sicuri per cifrare i dati, creano la crittologia.

la crittografia
Processo di criptazione, immagine a cura di Alessandro Frasconi

In figura è stata rappresentata (in maniera schematica) la procedura di criptazione di un messaggio e da essa è possibile stabilire quali sono i componenti:

  • testo in chiaro: in inglese “plain text”, è il messaggio originale da criptare;
  • algoritmo di criptazione: un algoritmo è un insieme di operazioni elementari che occorrono per ottenere un determinato scopo, in questo caso per criptare il testo in chiaro. Questo prende in input: il testo in chiaro e la chiave di criptazione (in inglese “cipher key”);
  • messaggio criptato: in inglese “encrypted message”, è la stringa di output che si ottiene dall’algoritmo di criptazione e rappresenta il messaggio senza significato e illeggibile per chi non possiede la chiave.

Sotto l’immagine è rappresentato un esempio di criptazione: quella utilizzando il cifrario di Cesare. Questo algoritmo sarà spiegato in dettaglio al punto 4.

Con l’evoluzione della crittografia non è possibile garantire solo segretezza ai messaggi trasmessi ma assicura inoltre l’integrità del documento, l’autenticità del mittente e il non ripudio

Vediamo in dettaglio il motivo:

Integrità

Esiste un particolare algoritmo crittografico dal nome “hash” che trasforma un messaggio di lunghezza qualsiasi in un output di lunghezza fissa chiamato hash o digest del messaggio originale. Questa funzione ha altre due caratteristiche:

  • è unidirezionale: dal digest è impossibile risalire al messaggio di input;
  • è una funzione deterministica: per ogni stesso messaggio di input restituirà sempre lo stesso output.

Quindi una volta ottenuto il digest, questo viene messo in coda al messaggio e al destinatario non resta che provare anche lui ad eseguire la funzione di hash e verificare che i due output siano uguali per confermare che il messaggio non sia stato modificato dopo l’invio.

la crittografia
Utilizzo funzione di hash, immagine a cura di Alessandro Frasconi

Autenticità e non ripudio

Per verificare che un documento sia autentico si uniscono crittografia e identità digitale ed è quindi necessario introdurre il concetto di firma digitale (spiegato più in dettaglio al punto 3). Come nelle tradizionali firme, una volta firmato un documento non è possibile negarne la lettura per questo si dice avere la proprietà di non ripudio.

2. Principio di Kerckhoff

Il concetto fondamentale della crittografia è definito dal principio di Kerckhoff il quale afferma che: «La sicurezza di un crittosistema non deve dipendere dalla complessità dell’algoritmo ma solo dalla segretezza della chiave.». Infatti, gli algoritmi utilizzati sono tutti noti.

Uno dei più grandi problemi della crittografia era rappresentato dallo “scambio delle chiavi”: due parti che volessero scambiare dei messaggi crittografati avevano la necessità di conoscere entrambe la chiave di cifratura.

2.1 Chiave Simmetrica

La crittografia simmetrica (o crittografia a chiave privata) rappresenta un metodo semplice per cifrare messaggi utilizzando la stessa chiave per il processo di criptazione e quello di decrittazione, rendendo l’algoritmo di cifratura molto performante e semplice da implementare. Le chiavi possono essere identiche, oppure può esserci una trasformazione per passare da una chiave all’altra. Le chiavi rappresentano un segreto condiviso tra due o più parti che può essere utilizzato per mantenere un collegamento privato di informazioni. Il requisito che sia il mittente che il destinatario abbiano accesso alla chiave segreta è uno dei principali svantaggi della crittografia a chiave simmetrica, rispetto alla crittografia a chiave pubblica. Tuttavia, gli algoritmi di crittografia simmetrica sono di solito migliori per la crittografia di massa. Hanno una dimensione minore della chiave, il che significa meno spazio di archiviazione e una trasmissione più veloce. Per questo motivo, la crittografia a chiave asimmetrica viene spesso utilizzata per scambiare la chiave segreta della crittografia a chiave simmetrica.

la crittografia
Crittazione a chiave simmetrica, immagine a cura di Alessandro Frasconi

2.2 Chiave Asimmetrica

La crittografia asimmetrica (o crittografia a chiave pubblica o a coppia di chiavi) si utilizza per proteggere file, directory e intere unità da accessi non autorizzati, nonché per scambiare messaggi segreti. A questo scopo si utilizzano delle chiavi.

L’idea della crittografia a chiave pubblica è nata solo nel 1975. La crittografia asimmetrica è quindi un ambito molto recente della crittografia. 

Il maggior vantaggio della crittografia asimmetrica è contemporaneamente il maggiore svantaggio della crittografia simmetrica: ciascuno delle due o più parti dispone di una chiave privata evitando quindi di concordarne un’unica. La chiave segreta deve raggiungere il destinatario, ma più viene condivisa, più questa trasmissione diventa poco sicura e vulnerabile. In questo senso, la crittografia asimmetrica rappresenta un’alternativa pratica, dal momento che ogni utente ha la propria coppia di chiavi.

Nella crittografia asimmetrica, ogni parte della comunicazione dispone di una coppia di chiavi costituita da una chiave pubblica (in inglese “public key”) e da una chiave privata (in inglese “private key”). Le chiavi sono tenute collegate attraverso un algoritmo matematico: i dati crittografati con la chiave pubblica possono essere decrittati solo con la chiave privata. Per la protezione dei dati e l’esecuzione sicura della crittografia a chiave pubblica, è quindi essenziale che la chiave privata rimanga segreta a tutte le altre parti della comunicazione. Quindi il mittente ha sempre bisogno della chiave pubblica del destinatario. La chiave pubblica qui svolge una funzione unidirezionale: può crittografare i dati, ma non decodificarli, perché questo può essere fatto soltanto con la sua chiave privata. Tuttavia, la chiave pubblica non viene utilizzata solo per la crittografia, ma consente anche di controllare le firme digitali e le parti della comunicazione. La chiave viene consegnata al primo contatto. In breve, la crittografia asimmetrica consente a chiunque di accedere a una chiave pubblica, ma per decodificarla è necessaria la chiave privata. Questo consente uno scambio molto sicuro dei dati.

Quindi con questo tipo di crittografia non si risolve solo il problema della riservatezza, ma anche quello dell’autenticità dato che criptando con la chiave pubblica solo la rispettiva chiave privata potrà decriptare il file.

la crittografia
Crittazione a chiave asimmetrica, immagine a cura di Alessandro Frasconi

Lo svantaggio principale della crittografia a chiave pubblica è la sua lentezza e la richiesta di una potenza di calcolo notevolmente maggiore rispetto quella della crittografia a chiave simmetrica. Pertanto, è stato sviluppato un sistema ibrido che combina sistemi simmetrici e asimmetrici. La crittografia ibrida è la soluzione perfetta per sfruttare i vantaggi di entrambi i mondi. 

La crittografia asimmetrica distribuisce le chiavi, eliminando il passaggio complicato del trasferimento delle chiavi private di un sistema di crittografia simmetrico. Il risultato: una crittografia sicura, veloce e pratica.

3. Tecniche utilizzate

Cifratura di Cesare

Uno dei primi metodi di crittografia è la cifratura di Cesare. Questa prevede la sostituzione di ciascuna lettera con la lettera che si trova a x posizioni di distanza nell’alfabeto dove “x” rappresenta quindi la chiave di cifratura e decifratura.

In questo algoritmo è possibile utilizzare un attacco di forza bruta, o in inglese “brute force”, che consiste nel provare tutte le chiavi finché non si trova quella corretta. Questo tipo di attacco può essere adoperato dato che le chiavi possibili sono solamente 25 (quante sono le lettere dell’alfabeto).

3. La crittografia | Maturansia
Esempio cifratura di Cesare con chiave = +2, immagine a cura di Alessandro Frasconi

Cifratura monoalfabetica

La cifratura a sostituzione monoalfabetica utilizza un alfabeto per il testo in chiaro e una permutazione dello stesso per il testo cifrato la quale rappresenta la chiave del sistema. Se l’attaccante conosce la natura del testo in chiaro potrebbe sfruttare regolarità presenti in esso per attaccare.

Questa cifratura è facile da violare dato che conserva le informazioni di frequenza dell’alfabeto originario.

Ad esempio, la parola “bello” criptata potrebbe diventare “e8oop” e l’attaccante potrebbe sfruttare l’informazione della ripetizione della stessa lettera (“o”) cercando parole con quello schema.

Cifratura Playfair

Questa è una cifratura multi-lettera basata sull’uso di una matrice 5×5 costruita utilizzando una parola chiave. La tecnica cripta coppie di lettere anziché singole lettere (come nei precedenti) applicando delle regole ben precise:

  1. se le lettere sono uguali bisogna aggiungere “x” dopo la prima lettera;
  2. se le lettere appaiono nella stessa riga della tabella vengono codificate con le lettere alla propria destra;
  3. se le lettere appaiono nella stessa colonna della tabella vengono sostituite con le altre sottostanti;
  4. negli altri casi ciascuna lettera di testo in chiaro di una coppia verrà sostituita dalla lettera che si trova nella stessa riga e colonna occupata dall’altra lettera di testo in chiaro.

Firma digitale

Come anticipato al punto 1 vi è un grande utilizzo della crittografia per quanto riguarda la tecnologia di funzionamento della firma digitale. Essa attesta chi è il mittente e l’integrità del documento. 

  1. Come primo passo viene generata l’impronta digitale utilizzando la funzione di hash precedentemente descritta. In questo modo ad ogni documento differente, anche di un solo carattere, si associa una diversa impronta;
  2. a questo punto viene applicata la cifratura con la chiave privata dell’impronta digitale generata. In questo modo la firma sarà legata da un lato al soggetto sottoscrittore (tramite la chiave privata usata per la generazione) e dall’altro al testo (tramite l’impronta);
  3. ora l’impronta viene criptata con la chiave privata del mittente ottenendo la generazione della firma digitale;
  4. infine, viene accodata la firma del sottoscrittore generalmente alla fine del documento.

Il destinatario riceverà non solo il documento firmato ma anche il certificato che deve essere rilasciato dall’ente certificatore a garanzia della titolarità della chiave pubblica utile a decriptare la firma digitale.

Per aprire il documento, il destinatario dovrà utilizzare un apposito software per la verifica della firma digitale che acquisirà dal certificato annesso al documento firmato la chiave pubblica del mittente. Grazie ad essa viene decifrata la stringa della firma digitale che restituirà come risultato l’impronta del documento. A questo punto il destinatario effettuerà la funzione di hash sul documento originale comparando l’impronta generata con quella ricevuta: se coincidono il destinatario potrà essere sicuro dell’integrità e dell’autenticità del documento ricevuto.

4. Algoritmi utilizzati

DES (Crittografia simmetrica)

Il DES (Data Encryption Standard) è un algoritmo sviluppato dall’IBM che è stato adottato dal governo statunitense nel 1977 per la protezione di dati riservati e tuttora è usato da tutte le agenzie governative (tranne che per gli atti che richiedevano un livello di sicurezza più avanzato). 

Il DES è un codice cifrato a blocchi. Per cifrare si usa un blocco di 64 bit come chiave suddiviso in 8 sottoblocchi ognuno di 8 bit dove l’ultimo è di controllo, di conseguenza i bit liberi che costituiscono la chiave sono 56.

3. La crittografia | Maturansia
Suddivisione bit della chiave, immagine a cura di Alessandro Frasconi

La stringa da cifrare viene suddivisa in blocchi di 64 bit ciascuno e vengono cifrati in successione con lo stesso procedimento. Se un blocco non raggiunge la lunghezza di 64 bit si fa ricorso ad un procedimento detto “pad“, che può essere implementato in diversi modi: 

  • aggiungere zeri fino alla lunghezza stabilita;
  • nel caso in cui i dati fossero binari, aggiungere al blocco bit che sono l’opposto degli ultimi bit del messaggio;
  • nel caso di dati ASCII si usano byte generati in modo casuale specificando nell’ultimo byte il carattere ASCII corrispondente al numero di byte aggiunti;
  • generare bit casuali fornendo negli ultimi tre il numero di byte originali, ovvero quelli che costituiscono il messaggio senza riempimento.

Il procedimento di criptaggio avviene attraverso degli step ben precisi:

  1. un blocco di testo normale viene trasposto cioè cambia posizione con un altro;
  2. il blocco di 64 bit viene diviso in due metà di 32 bit;
  3. vengono applicati 16 passi tramite una funzione di trasposizione e sostituzione ad ogni metà mediante delle sottochiavi diverse per ogni passaggio ricavate dalla chiave originale. Durante ogni passo l’output della metà sinistra diventa l’input della destra e viceversa;
  4. al termine di questi 16 passaggi i due sottoblocchi vengono riuniti e viene effettuata una trasposizione inversa.

L’algoritmo di ogni passo è quindi ricorsivo, cioè utilizza i risultati del passo precedente. 

3. La crittografia | Maturansia
Procedimento DES, immagine a cura di Alessandro Frasconi

3DES (Crittografia simmetrica)

Per rendere ancora più sicuro l’algoritmo DES si è deciso di far passare in tre passaggi il processo di criptazione di decrittazione. In particolare, per la criptazione 3DES prevede di crittografare con la prima chiave, decifrare con la seconda chiave, infine criptare con la terza chiave. In maniera analoga la decrittazione avviene al contrario: decifrazione con la terza chiave, criptare con la seconda chiave, quindi decifrare con la prima chiave.

3. La crittografia | Maturansia
Algoritmo 3DES , immagine a cura di Alessandro Frasconi

AES (Crittografia simmetrica)

L’Advanced Encryption Standard (AES), conosciuto anche come Rijndael (che in realtà è una specifica implementazione) è un algoritmo di cifratura a blocchi a chiave simmetrica. Data la sua sicurezza e le sue caratteristiche si presume che in futuro venga utilizzato in tutto il mondo come è successo all’algoritmo DES che ha perso poi efficacia per vulnerabilità.

A differenza del DES, AES è un sistema a sostituzione permutazione e non un sistema basato sul principio crittografico di Shannon di “confusione e diffusione”. AES è un tipo di crittografia veloce, è relativamente semplice da implementare, richiede poca memoria ed offre un buon livello di sicurezza dei dati. Nell’ AES il blocco è di dimensione fissa (128 bit) e la chiave può essere di 128, 192 o 256 bit. Opera utilizzando matrici di 4×4 byte chiamate stati (in inglese “States”). Quando l’algoritmo ha blocchi di 128 bit in input, la matrice States ha 4 righe e 4 colonne; se il numero di blocchi in input diventa più lungo di 32 bit, viene aggiunta una colonna allo State, e così via fino a 256 bit. In pratica, si divide il numero di bit del blocco in input per 32 e il quoziente specifica il numero di colonne. Ecco i passaggi che compie l’algoritmo:

  • AddRoundKey – Ogni byte della matrice viene combinato con la sua sottochiave tramite un’operazione di XOR.

Successivamente per cifrare sono previsti diversi round o cicli di processamento: ogni round dell’AES (eccetto l’ultimo) consiste dei seguenti quattro passaggi: 

  • SubBytes – Sostituzione non lineare di tutti i byte che vengono rimpiazzati secondo una specifica tabella. 
  • ShiftRows – Spostamento dei byte di un certo numero di posizioni dipendente dalla riga di appartenenza. 
  • MixColumns – Combinazione dei byte con un’operazione lineare, i byte vengono trattati una colonna per volta. 
  • AddRoundKey – Precedentemente descritto.

I round sono 10 con l’ultimo round che salta il passaggio MixColumns. La fase di decifratura non è identica a quella di cifratura dal momento che gli step sono eseguiti in ordine inverso. Tuttavia, si può definire un cifrario inverso equivalente ai passi dell’algoritmo usato per la cifratura, usando la funzione inversa a ogni step e un differente key schedule.

3. La crittografia | Maturansia
Processi dell’algoritmo AES, immagine a cura di Alessandro Frasconi

RSA (Crittografia asimmetrica)

RSA prende il nome dai tre fondatori Ronald Rivest, Adi Shamir e Leonard Adleman.

Questo algoritmo lavora sfruttando i numeri primi vediamo ora come vengono generate le chiavi:

  1. si scelgono due numeri primi (p; q) maggiori di 300 cifre;
  2. si calcola il loro prodotto chiamato anche modulo n=p*q e si pone z =(p-1)(q-1). (coincide con la funzione di Eulero quando è il prodotto di due numeri primi, associando a un numero intero il numero dei numeri interi co-primi con e minori di compreso l’uno. Se n è un numero primo z(n) =n-1);
  3. si sceglie poi un numero e chiamato esponente pubblico, coprimo con z e più piccolo di z stesso (e non deve necessariamente essere primo);
  4. si sceglie il numero d chiamato esponente privato tale che il suo prodotto con e sia congruo a 1 mod(z), cioè 𝐝 ∙ 𝐞 ≡ 𝟏 𝐦𝐨𝐝(𝐳).

La chiave pubblica è (ne) mentre quella privata è (nd). La forza dell’algoritmo è che per calcolare d ed e non basta conoscere n ma si deve conoscere anche z e fattorizzarlo in fattori primi richiede molto tempo.

Ora che abbiamo la chiave pubblica e quella privata vediamo come RSA cifra un messaggio: definendo il messaggio M, questo viene cifrato attraverso l’operazione Me (mod n) trasformandolo nel messaggio cifrato c.

Una volta trasmesso il messaggio cifrato viene decriptato con cd  𝐌 (mod n). Il procedimento funziona solo se la chiave pubblica e e quella privata d sono legate dalla relazione 𝑑 ∙ 𝑒  1 (𝑚𝑜𝑑 𝑧). Quindi quando un messaggio viene cifrato con una chiave può essere decifrato solo con l’altra e viceversa. È importante notare che calcolare la radice e-esima di c mod (n) con n numero composto sia un problema non trattabile computazionalmente.

Accedi

[mepr-login-form use_redirect="true"]

Registrati

Accedi o Registrati

Il Manuale di Sopravvivenza alla Maturità 2024

Sta per arrivare il manuale che ha aiutato decine di migliaia di maturandi.

Iscriviti alla lista d’attesa per sapere quando sarà disponibile.