A proposito dell'autore

E' certificato Cisco CCNA. Appassionato di reti e di Sicurezza. Redattore di NetworkingItalia per il quale ha scritto diversi articoli. Pubblica anche su AreaNetworking e ASSINT per il quale sta realizzando un corso online sulla sicurezza informatica. Al momento lavora presso un istituto professionale di Monza (MI) come Assistente Tecnico ma spera di poter cambiare.

Il Cryptosystem 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 Certifica 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).

La gestione dello scambio delle chiavi

Lo scambio delle chiavi con operazioni manuali

Uno dei più importanti aspetti nel creare una VPN sicura riguarda la gestione e lo scambio delle chiavi. Le chiavi una volta create devono essere scambiate tra i pari partecipanti per poter instaurare un canale sicuro. Lo scopo di scambiarsi le chiavi segrete è quello di assicurare delle comunicazioni a prova di intercettazione. Solo se, le chiavi sono conosciute “solamente” dalla sorgente e dalla destinazione, è possibile fornire un canale di comunicazione sicuro. Ma, il mero atto di scambiarsi le chiavi su un canale insicuro espone le chiavi ad un potenziale attaccante che può comprometterle. È quindi importante realizzare dei metodi “sicuri” per scambiarsi le chiavi. Questi metodi risolvono il problema di come scambiarsi le chiavi in sicurezza.
Uno dei metodi di scambio delle chiavi è quello manuale. Cioè, gli utenti si incontrano personalmente oppure si scambiano le chiavi su un canale sicuro “differente” da quello insicuro che verrà utilizzato.
Questo metodo di scambio viene chiamato in gergo “Out-of-band” cioè, viene usato un canale di comunicazione separato per trasferire le chiavi. In genere questi canali “sicuri” Out-of-band sono molto più “costosi” dei canali che verranno effettivamente usati è vengono utilizzati solo per lo scambio delle chiavi. Dopo lo scambio queste chiavi devono essere configurate manualmente sul sistema per poter permettere l’instaurazione di un canale sicuro.
Queste tecniche di gestione, di scambio e di inserimento manuale delle chiavi possono andare bene in un piccolo ambiente di rete statico dove i vari utenti si trovano sotto controllo di una singola amministrazione e/o magari dove c’è una politica di configurare le chiavi in modo statico ma, hanno i gravi difetti di essere soggette ad errori ( solitamente di digitazione ma, non solo), di essere vulnerabili ad alcuni tipi di attacchi e di non essere usabili in ambienti vasti e dinamici e cioè, di non scalare bene.
Quindi è necessario utilizzare altre tecniche automatiche di scambio per negoziare i parametri e le chiavi on-line.

Lo scambio della chiavi con l’algoritmo di scambio Diffie-Hellman

Diversi standard sono emersi per proteggere la segretezza delle chiavi e per facilitare lo scambio di queste chiavi su un canale insicuro in sicurezza. L’algoritmo di scambio Diffie-Hellman implementa lo scambio delle chiavi senza che sul canale insicuro vengano realmente scambiate le chiavi. Questo l’algoritmo è estesamente usato per stabilire una sessione adatta a cifrare i dati.
L’algoritmo Diffie-Hellman (RFC 2631) offre un modo sicuro per due utenti, Alice e Bob, di stabilire una chiave segreta condivisa che solamente loro conoscono. La chiave segreta condivisa può essere stabilita anche se gli utenti Alice e Bob stanno comunicando su un canale insicuro. Questa chiave segreta è usata poi per cifrare i dati usando l’algoritmo di cifratura della chiave segreta selezionato da Alice e Bob. I Due pari generano dei numeri primi Alice p e Bob q, composti da 200 o 300 cifre almeno (lunghezza stabilita in base al Gruppo D-H di appartenenza) e vengono condivisi e scambiati sul canale insicuro. Con questi numeri ogni pari (Alice e Bob) generano un numero “g”, un numero minore di “p” e “q”, con alcune restrizioni.
A questo punto Alice e Bob generano ognuno un grande numero casuale che viene tenuto segreto, chiamato “XA” e “XB”.
Con questo numero casuale viene generato dai pari una chiave pubblica YA e YB. Ognuno con la rispettiva formula YA = g ^ (esponente di) XA mod p per Alice e YB = g ^ (esponente di) XB mod p per Bob. Il risultato YA e YB vengono scambiati tra i pari sul canale insicuro.
A questo punto viene generato un segreto condiviso tra i pari che è un numero ricavato dalla seguente formula ZZ = YB^ (esponente di) XA mod p per Alice e ZZ = YA^ (esponente di) XB mod p per Bob. Cioè, il numero condiviso tra i pari ZZ è uguale sia per Alice che per Bob. L’algoritmo di scambio Diffie-Hellman che permette di condividere un segreto (la chiave ZZ ) senza scambiarlo realmente sul canale insicuro ora è realizzato.
È importante notare che Alice e Bob non hanno un metodo per determinare l’un l’altro l’identità. Lo scambio è vulnerabile ad un attacco man-in-the-middle. L’algoritmo Diffie-Hellman provvede a fornire la riservatezza ma non provvede a fornire l’autenticazione. L’autenticazione viene realizzata dall’uso di firme digitali nello scambio dei messaggi Diffie-Hellman.
I Diffie-Hellmann Group sono valori che specificano il tipo di generatore di cifratura (modulus per [MODP] o la grandezza del campo di Galois per la curva ellittica [EC2N]). Questi gruppi D-H specificano inoltre la lunghezza base dei numeri primi (che sono il materiale base) usato per generare il segreto condiviso. Più è grande il numero del gruppo D-H più sono grandi i numeri primi utilizzati.

Attualmente sono definiti 10 gruppi. La RFC 2409 definisce i gruppi da 1 a 4. La RFC 3526, definisce il gruppo 5 e i gruppi da 14 a 18. Più si sale di gruppo maggiore è la forza crittografica delle chiavi ricavate. La forza crittografica di ogni chiave così generata dipende, in parte, dalla forza del gruppo Diffie-Hellmann sulla quale i numeri primi sono basati. La scelta di un gruppo Diffie-Hellman molto grande può aumentare di molto il tempo di processamento dei pacchetti.

Lo scambio delle chiavi pubbliche mediante Certificate Autority

Quando vengono scambiate le chiavi pubbliche come fanno gli utenti ad avere la certezza che la chiave pubblica ricevuta sia autentica? Cioè, che appartenga veramente all’entità con cui si vuole comunicare?

È infatti possibile per un pirata informatico impersonare un utente legittimo (BOB) (attacco man-in-the-middle) ed inviare ad Alice una falsa chiave pubblica, così da decifrare i messaggi che Alice cifra con tale chiave.
È importante essere certi dell’identità del soggetto possessore della chiave pubblica. Con il semplice scambio delle chiavi pubbliche è possibile che NON si stia comunicando con chi crediamo di comunicare.

È necessario quindi che per risolvere questo problema, ci sia una parte terza agli utenti gerarchicamente superiore che garantisca sulla corrispondenza tra un utente e la sua coppia di chiavi asimmetriche PKI (Public Key Infrastructure.

Una Certification Authority (CA) è una “parte terza” agli utenti (Alice e Bob). Questa particolare entità viene riconosciuta dagli utenti come una parte “fidata” a loro gerarchicamente superiore. La CA offre un servizio utile a creare e garantire “fiducia” fra gli utenti. La CA crea, assegna, rilascia, sospende e revoca “certificati digitali”.

I certificati digitali

I certificati digitali sono degli oggetti informatici conformi allo standard ITU-T X.509v3 RFC 2510 e 3280 che garantiscono valore legale alle firme digitali, attraverso l’assicurazione della corrispondenza tra un determinato paio di chiavi asimmetriche e un particolare utente o apparecchiatura. Il certificato digitale è strettamente associato alla coppia di chiavi Pubblica/Privata e all’entità a cui si riferisce (Alice / Bob) o all’apparecchiatura e contiene una serie di dati identificativi dell’utente o dell’apparecchiatura, come il nome, il numero seriale, o l’indirizzo IP e della chiave pubblica più una serie di campi opzionali.
La CA rilascia il certificato digitale dopo un processo chiamato “procedura di certificazione” che serve a dare garanzie sulla autenticità, sulla corrispondenza fra le chiavi e il suo possessore. L’utente o l’apparecchiatura, in questo caso Alice dopo avere generato la sua coppia di chiavi Pubblica/Privata chiede alla CA di certificare la sua chiave pubblica. La CA o per lei la RA (Registration Autority) che è una emanazione amministrativa della CA realizzata per alleggerirne il lavoro.

Esegue una “procedura di identificazione” e identificando Alice come la proprietaria di una coppia di chiavi asimmetriche ne verifica la corrispondenza. A questo punto la RA chiede alla CA di generare un certificato digitale per Alice e la sua chiave pubblica. Il certificato dell’utente Alice viene firmato dalla CA con un suo certificato digitale chiamato “Root CA” che è auto–certificato (self–signed).

La CA con il suo proprio certificato digitale, che è un certificato particolarmente robusto, firma i certificati digitali degli utenti autenticandoli e garantendo per la loro corrispondenza ad una particolare identità. La CA pubblicherà su un particolare server pubblico chiamato “Certificate Server” liberamente accessibile, una lista dei certificati in corso di validità o con l’indicazione se questi certificati sono revocati o sospesi . In realtà le liste pubblicate sul Certificate Server sono di tre tipi e i certificati revocati e sospesi sono rispettivamente pubblicati nelle liste CRL (Certificate Revocation List) e CSL (Certificate Suspension List). L’utente Alice a questo punto riceve dalla CA un proprio certificato digitale firmato + il certificato digitale “Root” (self-signed) della CA.

Ogni volta che Alice invierà la sua chiave pubblica, allegherà il proprio certificato digitale oppure un numero seriale dello stesso.

La struttura di un certificato digitale

La struttura di un certificato digitale X.509 v3 mostrata sotto è formata da attributi ed estensioni:

– Attributi del certificato digitale

  • Versione: numero di versione del certificato che attualmente è la 3.
  • Serial Number: numero seriale del certificato che identifica il certificato in modo univoco all’interno della CA.
  • Firma: Identificativo dell’algoritmo usato dalla CA per firmare il certificato.
  • Issuer: questo campo identifica le entità che hanno firmato ed emesso il certificato. Questo campo contiene un distiguished name DN e Issuer Distinguished Name.
    • Distinguished Name: identificativo dell’utente suddiviso nelle voci: CN ed E che stanno per nome della Certificate Autority ed Email dell’utente certificato.
    • Issuer Distinguished Name: nello stesso formato del DN, identifica la CA che ha emesso il certificato.
  • Validità (not after, not before) : l’ora e le date di inizio del periodo di validità del certificato.
  • Soggetto : nome
  • Informazioni sulla chiave pubblica del soggetto
    • Algoritmo per l’utilizzo della chiave pubblica
    • Chiave pubblica
  • Estensioni (facoltativo) del certificato digitale.
  • CRLDistributionPoint : è un puntatore, un URL del server da dove scaricare la CRL (Certificate Revocation List) relativa ad un particolare certificato.
  • KeyUsage: questo campo dichiara gli scopi per i quali è possibile utilizzare la chiave pubblica (uno o più tra i seguenti):
    • Digital Signature : firma digitale.
    • Key Encipherment : “canale sicuro” per chiavi simmetriche.
    • Non Repudiation : assieme a “Digital Signature” per la firma e per il non ripudio dei do*****enti.
    • Data Encipherment : cifratura dei dati.
    • CRL e KeyCert Signature : firma di CRL (Certificate Revocation List). e la firma del Certificato della chiave (usato dalla CA).
  • Algoritmo di firma del certificato
  • Firma del certificato

La verifica

L’utente (Alice) quando invierà la propria chiave pubblica, allegherà il proprio certificato digitale oppure il suo numero di serie. La chiave pubblica dell’utente firmata dal certificato digitale viene pubblicato a cura della CA su un server chiamato “Certificate Server “ liberamente accessibile per le verifiche. Il ricevente (Bob) per verificare la corrispondenza del certificato ricevuto da Alice, scarica dal Certificate Server della CA mediante il numero seriale il certificato corrispondente e lo confronta con quello ricevuto da Alice. Le verifiche vengono eseguite in reciprocità fra Alice e Bob ed eseguite anche in maniera automatica e questo permette di accettare come affidabili tutte le comunicazioni fra i due pari.

Con una CA non è necessario configurare le chiavi su tutti i pari IPsec. Per aggiungere/configurare un nuovo pari IPsec ad una rete è sufficiente richiedere un certificato digitale ad una CA. Le CA forniscono una soluzione di gestire in modo dinamico e altamente scalabile le reti IPsec.
Uno dei metodi automatici di scambio delle chiavi è il protocollo IKE (Internet Key Exchange) che è un sofisticato meccanismo che utilizza le Certificate Autority per poter realizzare lo scambio delle chiavi on-line
Il problema dell’autenticazione viene risolto dal calcolo dell’Hashing

L’autenticazione è realizzata dall’uso di firme digitali hash.

Firme HASH per garantire l’integrità dei dati

  • SHA
  • MD5
  • AES-XCBC

Autenticazione

  • con MAC e poi con HMAC
  • con la firma digitale

Hashing

L’hashing garantisce l’integrità del messaggio. Un hash crittografico anche chiamato Digest o Message Digest o Firma, è un tipo di impronta digitale di un do*****ento elettronico. La somma di un imput di un do*****ento elettronico di lunghezza variabile è l’hash che ne è l’output compatto di lunghezza fissa. L’hash viene generato da una funzione matematica (algoritmo di hashing) che è una operazione One-Way. L’hash rappresenta quindi una sintesi (digest) dello stream di dati che è una vera e propria impronta digitale elettronica. Come analogia si può indicare l’impronta digitale per le persone. Per quanto possano essere identiche le fisionomie di persone differenti l’impronta digitale è unica per ognuno.
L’operazione di Hashing gode di importanti caratteristiche:

  • dato un do*****ento elettronico di imput si può facilmente calcolare il suo valore di hash, dipendendo dall’algoritmo utilizzato.
  • L’hash deve cambiare sensibilmente se il contenuto del do*****ento di imput viene alterato anche di un solo bit e quindi può essere utilizzato per rilevare se un do*****ento informatico è stato modificato in qualsiasi modo.
  • non deve essere possibile dato il valore di hash risalire al contenuto originale del do*****ento che l’ha originato (per questo l’hash è una funzione One-Way). Questa proprietà è valida se il do*****ento ha una dimensione sufficiente, pari almeno a quella dell’impronta. Come analogia per questo tipo di operazione si può indicare l’uovo, da cui con una semplice operazione si può ottenere una frittata ma da cui non è possibile invertire l’operazione e ricavare l’uovo originale.
  • non deve essere possibile generare un do*****ento che produca un’impronta informatica nota a priori.
  • non deve essere possibile generare due messaggi che abbiano lo stesso valore di hash. La probabilità di collisione (due do*****enti diversi che generano lo stesso valore di hash) deve essere molto bassa.

Con il termine non è possibile si intende che non è computazionalmente fattibile, con le tecnologie attuali e con quelle ragionevolmente prevedibili per i prossimi anni riuscire ad ottenere il risultato indicato in tempo utile.

I codici di autenticazione MAC

Per garantire la verifica dell’autenticità e dell’integrità di un do*****ento o di un dato è necessario utilizzare un codice di autenticazione. Ovvero, viene generato un valore di controllo della integrità e dell’autenticità di un messaggio, associando e concatenando ad esso una chiave segreta conosciuta solamente dai due pari.
I codici di autenticazione che consentono la verifica dell’integrità di un dato, basati sull’uso di una chiave segreta, sono chiamati MAC (Message Authentication Codes). Il MAC può essere utilizzato da due entità che devono comunicare in modo sicuro e fornisce la possibilità di verificare autenticità e integrità dei messaggi scambiati mediante la condivisione della conoscenza della chiave segreta utilizzata per il suo calcolo.

Chiunque non sia in possesso della chiave segreta non sarà in grado di ricreare il codice di autenticazione corretto.

HMAC (Hashed Message Authentication Codes)

Il meccanismo di calcolo del MAC basato sull’utilizzo di un algoritmo di HASH viene chiamato HMAC (Hashed Message Authentication Codes) ed è definito nella RFC 2104. Il principio che sta alla base del funzionamento di un HMAC è che se si concatena al messaggio da trasmettere una chiave segreta e si calcola il suo hash, questo hash dipenderà sia dal messaggio sia dalla chiave segreta. Il destinatario del messaggio, ripetendo lo stesso calcolo con la chiave segreta in suo possesso, potrà verificarne l’integrità e l’autenticità del messaggio controllando che HMAC calcolato e HMAC ricevuto coincidano. Questo darà la prova che anche il mittente è in possesso della stessa chiave segreta.
L’algoritmo di autenticazione HMAC è indipendente dall’algoritmo di hash utilizzato, è richiesto solamente che sia basato su un calcolo iterato su blocchi a lunghezza fissa di dati. Gli algoritmi che vedremo sono adatti per realizzare in IPsec degli HMAC e operano con blocchi di dati pari a 128 e 160 byte.

Funzionamento di HMAC

L’algoritmo di autenticazione HMAC coinvolge nel calcolo dell’hash sia il messaggio originale del mittente sia la sua chiave privata da cui viene ricavata una firma, un hash di lunghezza fissa come output. Questo valore di hash viene agganciato alla comunicazione come una firma hash (valore autenticatore) e spedito a destinazione. Il pari di destinazione alla fine remota riceve quindi il messaggio originale + la sua firma hash. A questo punto il destinatario compie una operazione in due passi:

  • Primo passo — il destinatario fa passare attraverso l’algoritmo HMAC il messaggio ricevuto con la chiave che è in suo possesso e ricava un valore di hash ricalcolato.
  • Secondo passo — il ricevente compara l’hash ricalcolato con il valore di hash ricevuto che è stato attaccato al messaggio spedito. Se l’hash originale e l’hash ricalcolato coincidono, l’integrità della comunicazione è garantita. Se la comunicazione originale viene modificata durante il transito, i valori di hash ricevuto e hash ricalcolato saranno diversi.
  • Gli algoritmi HMAC vengono indicati come HMAC- seguito dal nome dell’algoritmo di hash, come per esempio : HMAC-MD5(Message Digest 5), HMAC-SHA-1(Secure Hash Algorithm 1), AES-XCBC-MAC-96 che sono tre algoritmi usati da IPsec.

    • HMAC-MD5 – Conosciuto anche come HMAC-MD5-96 (RFC 1321), questa tecnica di hashing è basata su l’algoritmo MD5 sviluppato da Ronald Rivest del MIT, della RSA Data Security Incorporated, ed è descritto nel do*****ento RFC 1321. Il messaggio a lunghezza variabile e la chiave segreta condivisa a 128-bit sono combinate attraversano l’algoritmo di hash HMAC-MD5 per produrre un l’hash di 128-bit (16 byte). In IPsec una volta prodotto, il valore di 128-bit è troncato a solamente i primi 96 bit e questo è il valore authenticator che viene immagazzinato nel campo authenticator nell’AH o dell’ESP del nuovo pacchetto. Quando il pacchetto giunge al pari di destinazione, sul messaggio viene ricalcolato l’hash di 128-bit, ed i primi 96 bit ricalcolati che formano il valore authenticator (ICV) sono comparati al valore immagazzinato nel campo authenticator di 96 bit del pacchetto. ATTENZIONE: Ultimamente dopo il rilascio da parte di Patrick Stach, un ricercatore crittologo, di un sorgente in C di un particolare tipo di attacco che rende la falsificazione di questo hash alla portata di tutti, MD5 è stato definitivamente infranto e pertanto ne viene sconsigliato l’uso.
    • HMAC-SHA-1 – Conosciuto anche come HMAC-SHA-1-96 (RFC 2404), creato dal NIST (National Institute of Standards and Technology), questa tecnica di hashing è basata su SHA-1 specificato in FIPS-190-1 combinato con la tecnologia HMAC. Il messaggio di lunghezza variabile e la chiave segreta condivisa di 160-bit sono combinati attraversano l’algoritmo di hash di HMAC-SHA-1 per produrre un valore hash di 160-bit (20 byte). In IPsec una volta prodotto, questo hash viene troncato ai primi 96 bit, questo forma il valore authenticator che viene immagazzinato nel campo authenticator dell’AH o dell’ESP del nuovo pacchetto. Giunto al pari di destinazione, sul messaggio viene ricalcolato l’hash di 160-bit, ed i primi 96 bit ricalcolati che formano il valore authenticator (ICV) sono comparati al valore immagazzinato nel campo authenticator di 96 bit del pacchetto ricevuto.
    • AES-XCBC-MAC-96 – Questo algoritmo (RFC 3566 ) sviluppato sull’algoritmo CBC-MAC con l’uso dell’algoritmo AES in modalità denominata CBC (Cipher-Block-Chaining) e con un set di estensioni (X) garantisce un HMAC che fornisce integrità ai dati e l’autenticazione per l’origine dei dati. AES-XCBC-MAC-96 usa i blocchi cifrati AES, con la grandezza di blocco di 128 bit e la lunghezza delle chiavi di 128 bit che producono un valore di hash di 128-bit (16 byte). In IPsec una volta prodotto, questo hash viene troncato ai primi 96 bit, e viene immagazzinato nel campo authenticator dell’AH o dell’ESP del nuovo pacchetto. Giunto al pari di destinazione, sul messaggio viene ricalcolato l’hash di 128-bit, ed i primi 96 bit ricalcolati che formano il valore authenticator (ICV) sono comparati al valore immagazzinato nel campo authenticator di 96 bit del pacchetto ricevuto. AES-XCBC-MAC-96 è un relativamente nuovo algoritmo di hash che ha l’abilità di anticipare, resistere e rendere impraticabili le attuali tecniche criptoanalitiche e computazionali. La sicurezza fornita da AES-XCBC-MAC-96 è basata sulla forza dell’algoritmo AES. Al momento in cui si scrive non esiste nessun attacco crittografico pratico contro AES o AES-XCBC-MAC-96.

    La pratica di troncare l’HMAC ai primi 96 bit è dettata dalla volontà di garantire maggiore sicurezza perché mette un attaccante nella impossibilità di analizzare compiutamente l’HMAC ottenuto.
    Questo dà luogo al vantaggio che meno informazioni sul HASH vengono date, meno informazioni risultano disponibili ad un attaccante il quale, si trova nello svantaggio di dover predire un hash completo avendo a disposizione solo un hash incompleto.
    HMAC-SHA-1 attualmente viene considerato ancora un algoritmo sufficientemente robusto ed affidabile ma, in diverse implementazioni si pensa di rimpiazzarlo con HMAC-SHA-256 che non è altro che una versione del primo SHA portato da 160 bit a 256 bit e quindi con un valore di chiave più lungo. Il più nuovo algoritmo di hash AES-XCBC-MAC-96 è un algoritmo che garantisce una buona performance di velocità con una alta sicurezza ed è considerato più robusto dei precedenti.
    L’uso di questi algoritmi durante gli scambi deve sottostare negli Stati Uniti a delle direttive di sicurezza valide per le Agenzie federali Statunitensi le quali sono obbligate ad utilizzare solo degli algoritmi che hanno superato particolari test e ricevuto l’approvazione FIPS (Federal Information Processing Standards). Mentre HMAC-SHA-1 e AES-XCBC-MAC-96 sono algoritmi approvati FIPS e sono considerati sicuri ed affidabili, MD5 che è stato recentemente infranto da Patrick Stach, il suo HMAC non viene più considerato sicuro, non è un algoritmo approvato FIPS e ne viene pertanto sconsigliato l’uso.

    La generazione dei numeri casuali (Nonces)

    Come corollario necessario ma, imprescindibile di un sistema crittografico (Cryptosystem) è necessario parlare della generazione dei numeri casuali (nonces). Un nonce è l’acronimo di “number used once” cioè, un numero usato una sola volta. Un nonce è di solito un valore casuale o pseudo-casuale che viene usato come valore di imput in molti tipi di calcoli all’interno di un Cryptostystem. Questo nonce viene generato all’interno di un sistema informatico. Ed è di fondamentale importanza ai fini della sicurezza che questo valore sia impredicibile.
    Poiché i sistemi informatici, i computer sono macchine che operano in base a procedure completamente prevedibili sono cioè, dei sistemi assolutamente deterministici. Vale a dire che sono coerenti e che seguono sempre la stessa logica lineare. In sistemi del genere è piuttosto difficile generare dei numeri che siano realmente casuali.
    Ma i Nonces cioè, i numeri casuali usati una sola volta sono indispensabili per il corretto funzionamento di un Cryptosystem. Per questo motivo sono stati progettati degli algoritmi che generano dei numeri casuali chiamati RNG (Random Number Generator) e PRNG (Pseudo-Random Number Generator). Questi generatori di numeri pseudo casuali si trovano comunque all’interno di un sistema deterministico. Devono comunque seguire delle regole matematiche. Regole che per quanto complesse possano essere, generano numeri che possono essere predetti.
    Per un attaccante particolarmente preparato questi numeri, proprio perché generati all’interno di un sistema deterministico, si possono trovare all’interno di un range di imprevedibilità molto ristretto. Range che per tentativi ed errori è possibile restringere fino ad ottenere il corretto valore generato. I valori ottenuti con questi generatori non sono quindi utilizzabili in crittografia, perché forniscono numeri che in una certa maniera sono predicibili.
    Un numero è veramente casuale quando è veramente imprevedibile. Questa imprevedibilità è particolarmente importante quando i nonce vengono usati nel campo crittografico. Per ottenere questa imprevedibilità è stato necessario creare un particolare generatore di numeri casuali, che però, fosse sicuro e che fosse utilizzabile nel campo della crittografia. Un generatore di numeri casuali all’interno di un Cryptosystem deve essere crittograficamente sicuro.
    Un CSPRNG (Cryptographically Secure Pseudo-Random Number Generator) è un generatore di numeri pseudo-casuali crittograficamente sicuro. Questo generatore è un algoritmo particolarmente impredicidibile (ne esistono diversi tipi anche in versione Hardware ad esempio citiamo Fortuna, metodo Monte Carlo, Blum Blum Shub, Mersenne Twister). L’uso di questo tipo di generatore è fondamentale in crittografia in quanto permette di generare dei valori che sono veramente casuali cioè, che hanno un range di imprevedibilità molto ampio. È possibile per questi algoritmi raccogliere valori di imput dall’ambiente circostante come il rumore dovuto all’agitazione termica o da altri fenomeni entropici.

    Continua a leggere VPN ovvero Reti Private Virtuali: Tecnologia IPsec v3 – 4a parte

Close
Entra in contatto con altri professionisti ICT, seguici su Facebook e Twitter: