Capitolo 4. Applicazioni Web 26
4.8 Gestione della sicurezza 44
4.8.2 Crittografia SSL 46
La crittografia è considerata fin dalla sua origine un’arte e una scienza vera propria dell’ambito della cifratura, anche se evolvendo si è ampliata arrivando a comprendere l’autenticazione, firme digitali e molte altre funzioni di sicurezza più elementari.
La crittografia per essere utile deve essere utilizzata all’interno di un sistema molto più ampio. Come una serratura, che di per se è un oggetto inutile, dimostra la sua importanza nel momento in cui viene a far parte di un sistema molto più ampio, come ad esempio una porta, una catena o qualcosa del genere, la crittografia è soltanto una piccola parte di un sistema di sicurezza più ampio. [24]
La crittografia deve essere in grado di distinguere gli accessi consentiti da quelli indesiderati.
Naturalmente la crittografia è sicura se inserita in un sistema sicuro. È inutile possedere una porta blindata che si apre solamente con una determinata chiave se poi viene lasciata la finestra aperta. Questo non giustifica in ogni modo l’utilizzo di una crittografia debole. Gli attacchi che colpiscono la crittografia non lasciano tracce poiché l’accesso compiuto dal mal intenzionato viene considerato da parte del sistema come “buono”. Un attacco che non lascia tracce è molto pericoloso in quanto può essere ripetuto tranquillamente più volte.
Un sistema di sicurezza è forte quando lo è il suo elemento più debole. [24]
In ambito web un elemento debole può essere considerato il canale in cui transitano le informazioni.
Le connessioni sono bidirezionali: vi è un invio di dati da parte del client verso il server e viceversa.
Il problema nasce quando una terza parte cerca di mettersi in mezzo fra il mittente e il destinatario della richiesta, leggendo tutte le comunicazioni e manipolandole in maniera arbitraria, cancellando, aggiungendo o modificando i dati trasmessi.
Per realizzare un canale sicuro occorre un segreto condiviso, rappresentato da una chiave segreta che nessuno conosce al di fuori del mittente e del destinatario.
La chiave segreta deve essere:
• nota solamente al mittente e al destinatario del messaggio • generata ogni volta che viene inizializzato un canale sicuro
Le reti per la trasmissione dati sono organizzate in livelli, ognuno costruito su quello inferiore, ovvero il livello inferiore fornisce dei servizi al livello superiore. Il TCP/IP è un tipo di protocollo utilizzato per il trasferimento dei dati e in particolare il termine TCP sta a rappresentare il livello di trasporto impiegato, ovvero si occupa di fornire un ordinamento dei pacchetti ed eventualmente di richiedere pacchetti andati persi nella rete, mentre IP (Internet Protocol) si riferisce al livello di rete permettendo ad un host di inserire pacchetti in una qualsiasi rete.
Dal punto di vista crittografico, il protocollo di comunicazione TCP/IP non è considerato affidabile, ovvero non è considerato un canale sicuro. TCP/IP è affidabile solo per quanto riguarda eventi casuali come la perdita di pacchetti, ma non è in grado di proteggere da un avversario attivo, in quanto questo può, senza interrompere il flusso TCP, modificare, aggiungere o eliminare dati. [24]
Per sua natura il protocollo TCP/IP non è affidabile sotto l’aspetto di riservatezza della comunicazione, ma sono comunque disponibili diversi approcci in grado di migliorare la sicurezza. L’approccio Security Socket Layer, noto come SSL, è una soluzione che permette di implementare la sicurezza appena sopra al livello TCP attraverso autenticazione, integrità dei dati e cifratura.
L’SSL è rappresentato da un protocollo a due livelli:
• SSL Record Protocol (livello subito superiore al TCP) che fornisce i servizi di basilari di sicurezza ai livelli superiori
• Handshake Protocol che permette al server e al client di autenticarsi a vicenda e di negoziare un algoritmo di crittografia e le relative chiavi prima che il livello di applicazione trasmetta o riceva il suo primo byte
Capitolo 4. Applicazioni Web
4.8.2.1 SSL Record Protocol
L’SSL Record Protocol si occupa di fornire il servizio di confidenzialità, definendo una chiave segreta comune usata per il criptaggio, e il servizio di integrità dei messaggi. Il Record Protocol frammenta i dati del messaggio che deve essere trasmesso in blocchi manipolabili ed eventualmente ne effettua una compressione. A questo punto calcola un Message Autentication Code (MAC) sui dati compressi. Infine effettua una criptazione simmetrica sul messaggio e sul MAC e dopo aver aggiunto un header e li trasmette al livello TCP.
I dati ricevuti subiscono il trattamento inverso. Vengono decriptati, verificati, decompressi, riassemblati e infine consegnati all’utente del livello più alto.
4.8.2.2 Handshake Protocol
L’avvio di una connessione può essere richiesto da parte del client o da parte del server e inizia sempre con uno scambio di messaggi chiamati SLL handshake.
L’inizio di una connessione avviene attraverso la fase Hello, con l’invio da parte del client di un messaggio di client Hello inviato al server e la risposta di quest’ultimo tramite un messaggio del tipo server Hello.
Lo scambio di questi messaggi serve alle due parti per mettersi d’accordo sul tipo di algoritmi da utilizzare per la generazione delle chiavi. La scelta dell’algoritmo da utilizzare è indicata dal server in base alla lista di algoritmi proposta dal client.
Nella fase di autenticazione viene verifica l’identità del server controllando che il certificato presentato dal server sia valido e che sia firmato da un’autorità fidata (CA). In questo caso si parla di autenticazione del server con client non autenticato ed è utile nel caso in cui vi è l’invio di dati sensibili verso il server e quindi si ha la necessità di essere certi dell’identità del destinatario.
Nel caso di autenticazione di entrambi le parti anche il client deve presentare il proprio certificato svelando la propria identità. Un’autenticazione di questo tipo potrebbe essere utile se il server è ad esempio una banca che deve inviare dati finanziari confidenziali a un suo cliente che necessita quindi di essere autenticato. [11] Sia nel caso di autenticazione del client che nel caso di autenticazione del server avviene la cifratura di alcuni dati condivisi con una chiave pubblica o privata e la
successiva decifratura con la chiave corrispondente. Nel caso di autenticazione del server questo mette a disposizione una chiave pubblica con la quale il client cifra i propri dati segreti. La corretta decifrazione dei dati è possibile solamente attraverso la chiave privata del server, assicurando l’identità del destinatario.
Il passo successivo all’autenticazione è la generazione di chiavi per la cifratura e per l’autenticazione dei dati provenienti dal livello di applicazione, attraverso i messaggi di
server key exchange e client key exchange.
Infine, attraverso l’invio del messaggio server hello done, vi è da parte del server l’annuncio della fine della fase di Hello al client. Con l’invio di un messaggio change
CipherSpec sia il server che il client verificano la correttezza dei dati ricevuti, e in caso
di successo, iniziano ad utilizzare gli algoritmi concordati.
La fase di handshake si conclude con l’invio da entrambi le parti del messaggio di
finished, il quale il primo dato ad essere cifrato.