La Crittografia

La Crittografia

Introduzione alla crittografia

La crittografia è l’unione di due parole greche: kryptós che significa “nascosto”, e graphía che significa “scrittura”. In tal modo si garantisce la confidenzialità dei dati che è uno dei requisiti essenziali nell’ambito della sicurezza informatica impedendo così la realizzazione di diversi tipi di attacchi informatici ai dati sensibili. Uno strumento o meccanismo che si avvale delle tecniche di crittografia viene definito strumento crittografico, e permette di trasformare le informazioni in modo da renderle comprensibili soltanto a chi possiede una ulteriore informazione, detta chiave. L’operazione di trasformazione di un messaggio dalla sua forma originale comprensibile in un messaggio incomprensibile è detta cifratura mentre l’operazione inversa è detta decifratura.

In generale è possibile distinguere due tipi di crittografia digitale:

  1. Crittografia Simmetrica (a chiave segreta): utilizza una stessa chiave (chiave segreta o chiave simmetrica) sia per la cifratura del testo in chiaro che per la decifratura del testo cifrato;
  2. Crittografia Asimmetrica (a chiave pubblica e privata): che utilizza due diverse chiavi (chiave pubblica e privata) per le due operazioni di trasformazione del messaggio.

La crittografia, infatti, utilizza algoritmi in grado di cifrare, in maniera reversibile, un documento rendendolo inintellegibile a chiunque non disponga delle informazioni necessarie a condurre a termine il processo di decifrazione. In generale valgono le seguenti caratteristiche:

  • la trasformazione avviene in funzione di una variabile detta chiave;
  • le operazioni di cifratura e decifratura sono relativamente semplici  nel caso in cui si conosca la chiave; in caso contrario risultano laboriose al punto da risultare praticamente (non teoricamente) inattuabili;
  • risulta egualmente laborioso dedurre la chiave con cui è stato cifrato un documento confrontandolo con la sua versione in chiaro (cioè non cifrata).

La crittografia

Classificazione dei sistemi di crittografia

In prima approssimazione, i sistemi di crittografia possono essere divisi in tre grandi gruppi:

  1. A repertorio;
  2. Algebrici;
  3. Letterali.

I sistemi a repertorio prevedono la sostituzione delle parole del testo in chiaro con un codice equivalente ottenuto consultando un dizionario. E’ quindi necessario che tale dizionario preveda la codifica di qualunque frase. Naturalmente la sicurezza di questi sistemi si basa principalmente sulla segretezza del repertorio che permette la traduzione del testo in chiaro a partire dal testo cifrato.

I sistemi algebrici sono quelli che trasformano il messaggio in una sequenza di numeri e, sfruttando una base matematica, eseguono operazioni su tali numeri; in tal modo il messaggio codificato non sarà più composto da lettere ma da cifre. A questa categoria appartengono i moderni sistemi di crittografia che prevedono l’utilizzo, oltre che della chiave segreta, anche di una chiave pubblica.

I sistemi letterali operano invece sul messaggio con operazioni di sostituzione, trasposizione e sovrapposizione. Questi sistemi hanno solo un’importanza storica.

Crittografia simmetrica

La crittografia simmetrica esegue l’operazione di cifratura a chiave simmetrica che utilizza una sola chiave sia per la fase di cifratura che per quella di decifratura dell’informazione. Quindi solo il mittente ed il destinatario devono conoscere entrambi la stessa chiave per potersi scambiare informazioni cifrate. Il problema relativo a questo tipo di cifratura, consiste essenzialmente nella modalità di scambio della chiave tra il mittente ed il destinatario. Infatti essa deve necessariamente essere scambiata attraverso un canale sicuro, altrimenti anche il “nemico” conoscerebbe la chiave potendo così decifrare agevolmente le informazioni.

Algoritmo simmetrico

  1. Creazione della chiave: il destinatario genera una chiave.
  2. Invio della chiave: il destinatario invia, in chiaro, la chiave al mittente per crittografare i dati.
  3. Crittografia dei dati: il mittente utilizza la chiave appena ricevuta per crittografare il messaggio da inviare.
  4. Invio dei dati: i dati cifrati vengono inviati al destinatario. Se qualcuno avesse messo le mani sulla chiave inviata precedentemente potrebbe decodificare i dati.
  5. Decodifica dei dati: il destinatario usa la chiave con l’algoritmo simmetrico giusto per decodificare i dati.

Negli algoritmi simmetrici viene utilizzata la stessa CHIAVE per effettuare sia la cifratura che la decifratura.

Crittografia simmetrica

Crittografia asimmetrica

La crittografia asimmetrica, conosciuta anche come crittografia a chiave pubblica/privata o crittografia a chiave pubblica è un tipo di crittografia dove, ad ogni attore coinvolto nella
comunicazione è associata una coppia di chiavi:

  • la chiave pubblica, che deve essere distribuita, serve a cifrare un documento destinato alla persona che possiede la relativa chiave privata;
  • la chiave privata, personale e segreta, utilizzata per decifrare un documento cifrato con la chiave pubblica.

In questo modo è possibile evitare qualunque problema connesso alla necessità di scambio in maniera sicura dell’unica chiave utile alla cifratura/decifratura presente invece nella crittografia simmetrica.

Attraverso un classico esempio, sarà possibile capire in maniera più semplice quanto è stato appena detto. Esempio:

  1. Alice chiede a Bob di spedirle la sua chiave pubblica. Mentre Bob conserva gelosamente la sua chiave privata.
  2. Alice riceve la chiave pubblica di Bob e cripta il messaggio e successivamente lo invia a Bob.
  3. Bob riceve il messaggio che potrà essere decriptato solo dalla sua chiave privata.

La coppia di chiavi pubblica/privata viene generata attraverso un algoritmo (ad esempio RSA) a partire da dei numeri casuali. Gli algoritmi asimmetrici sono studiati in modo tale che la conoscenza della chiave pubblica e dell’algoritmo stesso non siano sufficienti per risalire alla chiave privata e tale meccanismo è reso possibile grazie all’uso di funzioni unidirezionali. In realtà, in molti casi, l’impossibilità di risalire alla chiave privata non è dimostrata matematicamente, ma risulta dallo stato attuale delle conoscenze in matematica e della potenza di calcolo disponibile.

Algoritmo asimmetrico

  1. Creazione delle 2 chiavi: il destinatario genera una coppia di chiavi, Pu e Pr.
  2. Invio della chiave: il destinatario invia, in chiaro, la sua chiave Pu al mittente per crittografare i dati.
  3. Crittografia dei dati: il mittente usa la chiave Pu del destinatario con un algoritmo asimmetrico per crittografare il messaggio da inviare.
  4. Invio dei dati: i dati cifrati vengono inviati al destinatario. Nessuno può decodificare il messaggio perchè solamente il destinatario possiede la chiave Pr per farlo.
  5. Decodifica dei dati: il destinat.ario usa la chiave Pr con l’algoritmo asimmetrico giusto per decodificare i dati.

Negli algoritmi asimmetrici esiste una COPPIA DI CHIAVI complementari (dette Chiave Pubblica Pu e Chiave Privata Pr), che permette di effettuare entrambe le operazioni.

Crittografia asimmetrica

Algoritmi crittografici

Riassumendo, nella crittografia si utilizzano spesso due tipologie distinte di algoritmi:

  1. Simmetrici;
  2. Asimmetrici.

Entrambi gli algoritmi garantiscono la Riservatezza del messaggio.

Crittografia Simmetrica: algoritmi che usano di un’unica chiave per cifrare e decifrare; la chiave è lunga tipicamente 64-256 bit.

Standard principali

  • DES  e Triple-DES
  • RC5 e precedenti
  • AES
  • IDEA

Crittografia Asimmetrica: algoritmi che usano 2 chiavi non ricavabili l’una dall’altra, una per cifrare e l’altra per decifrare dette chiave pubblica e privata; le chiavi sono lunghe tipicamente 512-2048 bit.

Standard principali

  • Diffie-Hellman
  • RSA

Le differenze tra algoritmo simmetrico e asimmetrico

Gli algoritmi simmetrici basano il loro lavoro su una singola chiave, che viene utilizzata per crittografare e decrittografare i dati. Come in un lucchetto, la stessa chiave lo chiude e lo apre. Per superare il problema dello scambio della singola chiave si è pensato di ragionare in maniera diversa: si sono studiati algoritmi che permettono di elaborare sequenze di dati con 2 chiavi in grado di chiudere il lucchetto. La seconda è in grado di aprilo, ma solo se è stato chiuso correttamente con la prima, così come la prima è in grado di aprirlo solo se è stato chiuso correttamente con la seconda (chiavi complementari).

Con un algoritmo simmetrico:

  • La chiave viene comunque trasmessa. Siamo di nuovo al punto di partenza. Non importa quanto sicuro sia un cripto-sistema che fa uso di un algoritmo simmetrico.
  • Se un intruso riesce ad entrare in possesso di una chiave, il sistema viene compromesso irrimediabilmente, perdendo di valore intrinseco ed applicativo.

Con un algoritmo asimmetrico:

  • La chiave Pr, l’unica in grado di decodificare i dati crittografati con la chiave Pu (sua complementare), non è mai stata trasmessa.
  • L’intruso non riesce a impossessarsi della chiave Pr durante la trasmissione perché questa non viene mai trasmessa, in quanto mantenuta segreta e al sicuro dal mittente.

Paradigma di comunicazione con algoritmo asimmetrico

Quindi gli algoritmi a chiave pubblica, fanno uso di due chiavi complementari, dette chiave Pubblica e chiave Privata, create in modo che la chiave privata non possa assolutamente essere ricavata dalla chiave pubblica.

Il paradigma di comunicazione è il seguente:

  • Bob consegna la sua chiave Pu ad Alice la quale cifra il messaggio e spedisce il cifrato ottenuto a Bob.
  • Il messaggio cifrato con una chiave pubblica può essere decifrato solo con la corrispondente chiave privata.
  • Pertanto Bob, mediante la sua chiave Pr, può decifrare il messaggio e leggerlo in tutta sicurezza.

Con questo metodo solo la chiave privata deve essere tenuta segreta mentre la chiave pubblica può essere distribuita a chiunque voglia spedire un messaggio cifrato al possessore della chiave privata corrispondente. Qualora una chiave pubblica finisse nelle mani di un “pirata”, egli non potrà fare altro che cifrare messaggi senza poterli poi decifrare.

Proprietà sistema crittografico asimmetrico

  • Se un sistema crittografico asimmetrico soddisfa la seguente proprietà: dk(ek(M))=M, si dice sicuro.
  • Se un sistema crittografico asimmetrico soddisfa la seguente proprietà: ek(dk(M))=M, si dice che garantisce l’autenticità.

Idea di funzionamento del DES (algoritmo simmetrico)

Il DES (Data Encryption Standard) è un cifrario simmetrico che effettua una codifica a blocchi, pertanto è necessario che l’intero Messaggio in chiaro venga suddiviso in stringhe di plaintext, x, di 64 bit ciascuna. Utilizzando una chiave, k, di 56 bit (in realtà la chiave è da 64 bit, solo che 8 di questi sono di parità), si ottiene un testo cifrato rappresentato da una stringa di 64 bit.

Cifratura e decifratura procedono attraverso un certo numero di fasi in cui si ripetono le stesse operazioni, nel DES queste fasi sono 16 ed in ognuna di esse viene utilizzata una particolare sottochiave, ki, che viene generata a partire da k.

Attualmente DES è considerato insicuro per moltissime applicazioni. La sua insicurezza deriva dalla chiave utilizzata per cifrare i messaggi, che è di soli 56 bit. Nel gennaio del 1999 distributed.net e Electronic Frontier Foundation collaborarono per rompere pubblicamente una chiave di crittazione, e ci riuscirono in 22 ore e 15 minuti. Con le potenze di calcolo disponibili al 2009 si può forzare una chiave DES in poche ore esaminando tutte le possibili combinazioni. L’algoritmo è ritenuto sicuro reiterandolo 3 volte nel Triple DES, anche se in teoria così è esposto ad alcuni attacchi.

Negli ultimi anni DES è stato sostituito dall’Advanced Encryption Standard (AES) un nuovo algoritmo che elimina molti dei problemi del DES.

Idea di funzionamento dell’AES (algoritmo simmetrico)

L’AES (Advanced Encryption Standard) è un algoritmo di cifratura a blocchi che data la sua sicurezza e le sue specifiche pubbliche si è imposto come standard sostitutivo al DES. La differenza sostanziale dal DES è che AES è una rete a sostituzione e permutazione mentre DES è una Rete di Feistel (algoritmo di cifratura a chiave simmetrica). AES è veloce sia se sviluppato in software sia se sviluppato in hardware, relativamente semplice da implementare, richiede poca memoria ed offre un buon livello di protezione/sicurezza, motivi che complessivamente l’hanno preferito agli altri algoritmi simmetrici.

Nell’AES il blocco è a dimensione fissa (128 bit) e la chiave può essere di 128, 192 o 256 bit. AES opera utilizzando matrici  di 4×4 byte chiamate State. Quando l’algoritmo ha blocchi di 128 bit in input, la matrice State ha 4 righe e 4 colonne; se il blocco di bit in input diventa di 32bit più lungo viene aggiunta una colonna allo State, e così via fino a 256.

Questo nuovo standard di cifratura sta sostituendo i precedenti standard e la sua diffusione continua ad aumentare.

Idea di funzionamento dell’RSA (algoritmo asimmetrico)

In crittografia la sigla RSA  indica un algoritmo di crittografia asimmetrica, inventato da Ronald Rivest, Adi Shamir e Leonard Adleman utilizzabile per cifrare o firmare informazioni. Dopo essere stato progettato e standardizzato, l’R.S.A. è stato brevettato e quindi non se ne può far uso senza l’autorizzazione della “RSA inc.”.

Come funziona: Dati due numeri primi p e q (molto grandi) è facile calcolare il prodotto m=pq, mentre è molto difficile calcolare la fattorizzazione di m. Per avere tale sicurezza occorre che p e q siano composti da almeno 200 cifre decimali.

Per ottenere una discreta sicurezza è necessario utilizzare chiavi binarie di almeno 2048 bit. Quelle a 512 bit sono ricavabili in poche ore. Le chiavi a 1024 bit, ancora oggi largamente utilizzate, non sono più consigliabili. La fattorizzazione di interi grandi, infatti, è progredita rapidamente mediante l’utilizzo di hardware dedicati, al punto che potrebbe essere possibile fattorizzare un intero di 1024 bit in un solo anno di tempo, al costo di un milione di dollari (un costo sostenibile per qualunque grande organizzazione, agenzia o intelligence).

Precedente Steganografia digitale e modelli steganografici Successivo Funzioni di Hash e Digest

Lascia un commento

*