Di Salvatore Valerio
Il Cryptosystem (cioè l’implementazione hardware e software della crittografia) in IPsec
Un sistema crittografico (Cryptosystem) è un insieme di differenti metodi per portare a termine l'autenticazione dell’utente e/o dell’apparecchiatura, la cifratura, la decifratura, l’integrità del messaggio con l’hashing, e i processi di scambio delle chiavi. In un cryptosystem la combinazione, la sinergia di tutti questi differenti metodi realizza un insieme sistematico e coerente che garantisce la sicurezza alle trasmissioni. L’utilizzo di un metodo piuttosto che un altro dipende dalle circostanze in cui si può trovare il traffico dell’utente.
Il sistema crittografico può essere descritto in base:
alla gestione dello scambio delle chiavi
- con operazioni manuali
- con lo scambio delle chiavi segrete metodo Diffie-Hellmann
- con lo scambio di chiavi pubbliche tramite una Certificate Authority
tipi di cifratura- simmetrica : a chiave segreta DES, 3DES, AES, CAMELLIA.
- asimmetrica: a chiave pubblica : RSA
autenticazione- con MAC e poi con HMAC
- con la firma digitale
firme HASH per garantire l’integrità dei dati- SHA
- MD5
- AES-XCBC

Tipi di cifratura
La cifratura dei dati è una operazione two-way. Cioè, i dati in chiaro possono essere trasformati mediante uno scrambling digitale in un testo cifrato. Questa operazione di scrambling digitale può essere invertita restituendo il testo in chiaro originale. Il processo di cifratura/decifratura si avvale durante la sua elaborazione di alcune particolari stringhe di dati chiamate chiavi che vengono combinate con i dati durante un procedimento chiamato algoritmo di cifratura. Le chiavi sono delle stringhe di numeri binari che rispettano alcuni principi matematici molto rigidi. Queste chiavi regolano il processo di funzionamento dell’algoritmo di cifratura. In base al tipo di chiave utilizzata la cifratura viene distinta in :
Cifratura Simmetrica
Cifratura Asimmetrica
La cifratura Simmetrica
La figura sotto è una rappresentazione del funzionamento della cifratura simmetrica che è anche nota come cifratura a chiave segreta. In questo tipo di cifratura i due utenti origine e destinazione sono entrambi in possesso della stessa chiave di cifratura che serve sia a cifrare che a decifrare. La cifratura simmetrica si usa per grandi volumi di dati. Durante la fase di scambio dei dati, le chiavi possono cambiare molte volte.
La cifratura simmetrica è estesamente usata in informatica poiché ha un relativamente basso carico di lavoro sulla CPU.
Le caratteristiche di un algoritmo crittografico
La più importante caratteristica di un algoritmo cryptographic è la sua robustezza agli attacchi. La sicurezza di un cryptosystem, o il grado di difficoltà per un attaccante di determinare i contenuti del ciphertext, è funzione di alcune variabili. Tra le variabili da prendere in considerazione oltre la robustezza degli algoritmi, cioè, dei procedimenti a cui vengono sottoposti i testi da cifrare/decifrare. Procedimenti questi (algoritmi) che non è necessario siano segreti. Certamente è fondamentale la segretezza della chiave usata per cifrare/decifrare (principio di kerckhoffs pubblicato nella Cryptographie Militaire 1883 “La sicurezza di un crittosistema non deve dipendere dal tener celato il crittoalgoritmo. La sicurezza dipenderà solo dal tener celata la chiave. ”). Di solito la lunghezza della chiave di cifratura è una garanzia di sicurezza e di robustezza agli attacchi. Maggiore è la sua lunghezza maggiore è la sicurezza.
Gli algoritmi di crittografia moderni sono costruiti in maniera tale che sia quasi impossibile determinare il testo in chiaro senza avere questa chiave. In ogni cryptosystem, vengono prese molte precauzioni per proteggere la segretezza della chiave di cifratura.
La robustezza, “infrangibilità” di un algoritmo di crittografia viene dimostrata matematicamente in base al tipo di attacco più efficiente per quell’algoritmo. Questo tipo di attacco deve dimostrare che sia impraticabile cioè, che con le tecnologie computazionali attuali e con quelle ragionevolmente prevedibili per i prossimi anni riuscire ad ottenere come risultato la “rottura” dell’algoritmo.
Tipi di cifratura simmetrica
La cifratura simmetrica si può dividere in base alla modalità in cui vengono cifrati i dati in: cifratura Stream e cifratura a Blocchi
La cifratura Stream
Quando bisogna cifrare uno Stream di dati, avviene che all’algoritmo di cifratura arriva un flusso di dati, uno stream di dati appunto. L’algoritmo di cifratura stream una volta inizializzato con una chiave, genera dinamicamente per ogni bit del flusso entrante da cifrare, la chiave di cifratura, che viene chiamata “key-stream”. A questo punto i bit del flusso verranno cifrati un bit alla volta. Questo tipo di crittografia si offre per la cifratura di grandi quantità di dati.
La cifratura a blocchi
Quando bisogna cifrare dei dati questi, vengono divisi in piccoli blocchi di lunghezza definita. Su questi blocchi vengono effettuate una serie di operazioni crittografiche chiamate “round” con l’ausilio di blocchi di chiavi crittografiche. In genere, la lunghezza dei blocchi di chiavi hanno la stessa lunghezza dei blocchi di dati ma, possono essere più lunghe.
La cifratura a blocchi può essere eseguita in cinque modalità:
ECB (Electronic Code Book) – In questa modalità ogni blocco è cifrato in modo indipendente dagli altri blocchi.
CBC (Cipher Block Chaining) – In questa modalità ogni blocco viene sincronizzato dall’algoritmo di cifratura con il blocco precedente, il primo blocco ha un IV (Initial Value) noto come (self-synchronizing) valore questo che viene ottenuto da un particolare generatore di numeri casuali crittograficamente sicuro il CSPRNG (Cryptographically Secure Pseudo-Random Number Generator). Non è necessario che gli IV (Initial Value) siano segreti, ma devono essere impredicibili.
CFB (Cipher FeedBack) – In questa modalità viene generato in interazione con un IV (Initial Value) un blocco keystream che viene utilizzato per trattare in XOR (OR esclusivo) il blocco di dati in chiaro per realizzare il Ciphertext.
OFB (Output FeedBack) – In questa modalità che ha delle similarità con il Cipher FeedBack e permette la cifratura di blocchi di grandezza differenti, con la differenza che l’output della funzione di blocco di cifratura è il FeedBack (invece del ciphertext). La cifratura viene realizzata trattando in XOR (OR esclusivo) ogni blocco di plaintext per realizzare il Ciphertext. Per questa modalità viene generato un vettore di inizializzazione IV (Initial Value).
CTR (Counter) – In questa modalità la Cifratura dei blocchi viene implementata attraverso un set di imput di blocchi, chiamati contatori. Questi contatori producono una sequenza di blocchi che sono un OR esclusivo con il plaintext da cui si ricava il ciphertext, questa operazione è invertibile. La sequenza di contatori devono avere la proprietà che ogni blocco nella sequenza sia diverso da ogni altro blocco. Se vi sono più messaggi cifrati dalla stessa chiave, i contatori devono essere differenti.
In IPsec gli algoritmi di crittografia simmetrica utilizzati vengono eseguiti in modalità CBC.
Crittografia a rete di Feistel
In crittografia, una struttura a rete di Feistel è un tipo di cifratura a blocchi con una particolare struttura sviluppata dal crittologo dell’IBM Horst Feistel, da cui ha preso il nome. La struttura a rete di Feistel ha il vantaggio che la cifratura e la decifratura diventano delle operazioni molto simili, richiedendo per l’inversione del funzionamento solamente un'inversione del gestore della chiave. È quindi possibile realizzare dei circuiti che sia in cifratura che in decifratura sono spesso gli stessi.
Un grande numero di algoritmi di crittografia a blocchi usano la struttura a rete di Feistel inclusi il DES, 3DES, AES, e Camellia. Tutti questi sono algoritmi di crittografia simmetrica utilizzati in IPsec in modalità CBC.
Il DES
Il DES (Digital Encryption Standard) è uno degli standard di cifratura simmetrici tra i più estesamente usati, almeno fino a qualche anno fa. Il DES traduce un testo chiaro in un testo cifrato usando un algoritmo di cifratura. L'algoritmo di decifratura sulla fine remota ripristina il testo in chiaro da un ciphertext. Le Chiavi abilitano la cifratura e la decifratura.
Il DES opera su blocchi di dati da 64-bit. L'algoritmo usa una serie di passi per trasformare degli blocchi di imput da 64-bit in blocchi di output da 64-bit. Nella sua forma standard, l'algoritmo usa chiavi da 64-bit dai quali sono scelte casualmente 56-bit. Il rimanenti 8-bit sono bit di parità, uno per ciascun blocco di 7-bit dei 56-bit scelti casualmente. Siccome vengono usati in una chiave DES 56-bit, per trovare con un metodo a forza bruta ovvero, con un metodo che prova tutte le chiavi possibili una a una, fino a trovare la chiave giusta occorrerebbero 2 alla 56 tentativi per trovare la chiave segreta di cifratura. Il numero esatto di tentativi è 2 alla 55. Ovvero il DES darebbe luogo ad uno spazio delle chiavi di settantadue milioni di miliardi di combinazioni (72.057.594.037.927.936). Il DES fino al 1998 era lo schema di cifratura simmetrico più estesamente usato. In seguito ad una sfida scientifica internazionale indetta dalla RSA l’algoritmo DES venne craccato dalla EFF (Electronic Frontier Foundation) che finanziò, coordinò e costruì una macchina apposita il DES Cracker, finalizzato a decriptare a forza bruta il DES. Attualmente il DES non viene più utilizzato.
3DES
Ritenendo la lunghezza delle chiavi del DES troppo corta e quindi considerandolo insicuro sono stati progettati diversi altri algoritmi tra cui il 3DES. Il 3DES (Triple DES) è un algoritmo che preserva l'investimento esistente in software fatto per implementare il DES ma rende più difficile gli attacchi a brute-force. Questo algoritmo sviluppato a partire dal DES con struttura a rete di Feistel è molto più robusto del suo predecessore e raddoppia effettivamente la sua robustezza.
Il 3DES prende un blocco di dati da 64-bit dai quali sono scelti casualmente 56-bit. Il rimanenti 8-bits sono bit di parità, uno per ciascun blocco di 7-bit dei 56-bit scelti casualmente e compie su questi blocchi di dati per tre volte di seguito l’operazione di cifratura con due o tre chiavi differenti a 56 bit, operazione questa chiamata “tecnica EDE (Encryption Decryption Encryption)” (nel caso di due chiavi differenti la prima e l’ultima operazione utilizzeranno la stessa chiave. Nel caso si usino tre chiavi differenti ogni operazione sul blocco userà una chiave differente) che rende effettivamente la chiave di cifratura di 168 bit e aumentando enormemente lo spazio di combinazioni delle chiavi.
Siccome vengono usati in una chiave 3DES 168-bit, per trovare con un metodo a forza bruta la giusta chiave ovvero, con un metodo che prova tutte le chiavi possibili una a una, fino a trovare la chiave giusta occorrerebbero 2 alla 168 tentativi per trovare la chiave segreta di cifratura. Ovvero il 3DES darebbe luogo ad uno spazio delle chiavi di 370 trilioni di trilioni di trilioni di trilioni di combinazioni.
Il vantaggio di usare il 3DES è che utilizza lo stesso standard del DES. Un limite nell’usare il 3DES è il tempo di lavorazione supplementare richiesto rispetto al DES richiede infatti il triplo del tempo sia per la cifratura che per la decifratura.
AES
L’AES (Advanced Encryption Standard) è un algoritmo di cifratura con struttura a rete di Feistel divenuto standard nel 2001, conosciuto anche come algoritmo Rijndael (acronimo ottenuto dal nome dei due autori Vincent Rijmen e Joan Daemen). È un algoritmo pubblico progettato per sostituire il DES e il 3DES. L’AES è il risultato di una gara internazionale intentata dal NIST (National Institute of Standard and Technology).
Le caratteristiche tecniche di questo algoritmo di cifratura simmetrica sono di prendere blocchi di dati da 128 bit e di avere chiavi di grandezza variabile tra 128, 192, e 256 bit. I requisiti di utilizzo della memoria sono molto bassi. Ed ha una grande efficienza computazionale su moti tipi di calcolatori. Il gruppo di sviluppo di IPsec dell’ IETF ha adottato l’AES (Advanced Encryption Standard) come algoritmo di cifratura predefinito per IPsec sostituendolo ai DES e 3DES.
CAMELLIA
Camellia è un algoritmo di Cifratura simmetrica con struttura a rete di Feistel. Camellia è un algoritmo di Cifratura simmetrica che è stato sviluppato nel 2000 in collaborazione fra le giapponesi NTT (Nippon Telegraph and Telephone Corporation) e Mitsubishi Electric Corporation. È un algoritmo che è stato progettato per resistere ad ogni attacco criptoanalitico noto. Camellia è un algoritmo implementabile sia in software che in hardware, offrendo lo stesso livello di sicurezza e di velocità di cifratura paragonabili all’AES.
Le caratteristiche tecniche di Camellia sono di prendere blocchi di dati da 128-bit ed avere chiavi di grandezza variabile tra 128, 192, e 256 bit. La grandezza predefinita delle chiavi è 128 bit. L’algoritmo Camellia liberamente disponibile è stato standardizzato dall’IETF con la RFC 3657 ed è stato implementato in IPsec RFC 4312.
Gli algoritmi DES, 3DES, AES e CAMELLIA, sono di pubblico dominio e liberamente disponibili.

La cifratura Asimmetrica
Nel 1976 Whitfield Diffie e Martin Hellman due ricercatori crittologi americani pubblicarono un fondamentale studio teorico dal titolo “New Directions in Cryptography”. In questo studio veniva illustrato la fattibilità di un nuovo metodo di cifratura “la cifratura asimmetrica” conosciuta anche come la “cifratura a chiave pubblica”. Con questo tipo di cifratura è stato risolto il problema della gestione delle chiavi che non occorre più trasmettere al destinatario del messaggio per la decodifica, con il pericolo che possano essere intercettate durante lo scambio.
La realizzazione della cifratura asimmetrica si basa sul concetto fondamentale in cui sono richiesti due differenti ma, strettamente connessi, valori di chiave. Questi valori sono chiamati chiave pubblica e chiave privata. In cui le chiavi private sono tenute segrete mentre le chiavi pubbliche vengono diffuse pubblicamente. Questo perché il modo particolare in cui vengono costruite le chiavi permettono di cifrare un messaggio con la chiave pubblica e di decifrarlo “solamente” con la corrispondente chiave privata.

Ad esempio, se due utenti Alice e Bob vogliono comunicare usando la cifratura a chiave pubblica, hanno entrambi bisogno di una coppia di chiavi pubbliche e di chiavi private. Alice deve creare la sua coppia di chiavi pubblica/privata, e Bob deve creare la sua coppia di chiavi pubblica/privata. Quando devono comunicare l’un l’altro in sicurezza, Alice e Bob usano chiavi diverse per cifrare e decifrare i dati. Ovvero Alice cifra un messaggio diretto a Bob con la chiave pubblica di Bob e questo può essere decodificato “solo” dalla corrispondente chiave privata di Bob che è unica ed strettamente associata a quella pubblica. Bob in risposta ad Alice cifrerà il messaggio con la chiave pubblica di Alice che solo Alice potrà decifrare con la sua chiave privata.

I meccanismi usati per generare queste coppie di chiavi pubblico/private sono complessi. Loro risultano dalla generazione di due numeri casuali, due numeri primi molto grandi dell’ordine di 200, 300 cifre circa almeno. Uno dei due numeri casuali diviene la chiave pubblica e l'altro diviene la chiave privata. Generare questi numeri è un processo molto pesante per il microprocessore. I numeri, così come il loro prodotto, devono aderire ad un severo criterio matematico per preservare l'unicità di ogni coppia di chiavi pubblica/privata. Criterio che hanno alcune funzioni matematiche definite “funzioni a trabocchetto”. Queste funzioni agiscono in modo tale che ad esempio sia facile calcolare il prodotto di due numeri primi ma, sia estremamente difficile, “impossibile” calcolare i suoi fattori primi. Gli Algoritmi di cifratura a chiave pubblica sono usati raramente per garantire la riservatezza dei dati a causa del sovraccarico di lavoro che richiedono alla CPU rispetto alla cifratura simmetrica. Gli Algoritmi di cifratura a chiave pubblica sono usati tipicamente invece, nelle applicazioni di autenticazione che comportano l’uso di firme digitali e nella gestione delle chiavi.
Alcuni dei più comuni algoritmi a chiave pubblica sono l’algoritmo RSA (dalle iniziali degli autori Ron Rivest, Adi Shamir, e Leonard Adleman), l'algoritmo El’Gamal, l’algoritmo DSA (Digital Segnature Algorithm), e l’algoritmo ECDSA (Elliptic Curve DSA).
Continua....