Comunicazione sicura sulle reti IL Protocollo SSL Comunicazione sicura sulle reti
Comunicazione sicura TCP/IP non fornisce meccanismi di sicurezza. Uso WWW ristretto a scambi di informazioni non confidenziali. La proposta di Netscape : Secure Socket Layer (SSL) Un problema noto è che il protocollo TCP/IP non fornisce alcuna sicurezza. Le transazioni HTTP vengono fatte su una rete non sicura. Ogni cosa che passa tra un server e un client può essere ascoltata e modifica. Questo restringe l’uso del WWW allo scambio di informazioni non confidenziali e meno significative. I problemi di sicurezza sono diventati l’ostacolo numero uno all’espansione del Web. Netscape ha sviluppato il protocollo Secure Socket Layer per fornire un alto livello di sicurezza alle comunicazioni Internet.
SSL/TLS SSL è diventato in poco tempo uno standard de facto nella Internet Community. SSL è stato sottoposto all’IETF per trasformarsi nello standard ufficiale Internet per il Transport Layer Security (TLS). SSL è diventato uno standard de facto per la comunità di Internet. SSL è anche stato sottoposto all’Internet Engineering Task Force(IETF) per essere validato come lo standard Internet ufficiale per il Transport Layer Security (TLS). SSL v.3.0 e TLS v.1.0 non sono compatibili nonostante siano molto simili tra loro. In pratica il sw che realizza il protocollo TLS spesso supporta anche SSL. Per questo da qui in avanti illustreremo le caratteristiche di SSL, di tanto in tanto sottolineando i cambiamenti apportati da TLS.
SSL : caratteristiche determinanti SSL può essere sovrapposto a qualsiasi protocollo di trasporto (è indipendente da TCP/IP). Può essere utilizzato con vari protocolli di applicazione (HTTP,FTP e TELNET). Esistono parecchi standards che forniscono metodi di comunicazione sicura attraverso il web ma SSL/TLS sembra essere il vincitore. Infatti SSL e TLS possono essere sovrapposti a qualsiasi protocollo di trasporto e quindi sono indipendenti da TCP/IP. Inoltre possono essere utilizzati con application protocols come HTTP, FTP e TELNET.
SSL : relazioni con gli altri protocolli Application Software Client/Server Sw Application Protocols TELNET FTP HTTP SSL Protocol Encryption Algorithms RSA RC4 RC2 SSLref IDEA DES Triple DES Perciò quasi tutti i tipi di applicazioni utente possono essere modificate per migliorarre la sicurezza delle connessioni Web, Accennerò all fine,dopo aver visto le caratteristiche principali del protocollo, ad un implementazione di SSL/TLS : OpenSSL. Basic Transfer Protocol Internet
SSL: proprietà Connessione privata. Dopo un’iniziale handshake per definire una chiave segreta viene usata crittografia a chiave simmetrica (es. DES). Autenticazione comunicanti. L’identità dei comunicanti può essere autenticata usando crittografia a chiave pubblica (es. RSA). Connessione affidabile. I messaggi contengono controllo di integrità usando un MAC (Message Authentication Code) calcolato con funzioni hash sicure (es. SHA,MD5).
SSL: obiettivi (in ordine di priorità) Sicurezza crittografica Interoperabilità. Programmatori indipendenti possono sviluppare applicazioni utilizzando SSLv.3 che potranno scambiarsi i dati crittografici senza conoscere i rispettivi codici (solo se su hw compatibili). Estensibilità. Possibilità di inserire nuovi metodi a chiave pubblica e di crittografia a blocchi. Relativa efficienza. Implementando un schema di caching per ridurre il numero di connessioni e l’attività della rete.
SSL: Struttura del protocollo Handshake Protocol SSL Protocol Record Protocol TCP/IP Handshake: mutua autenticazione di server e client. Record: incapsulazione dei dati provenienti dai vari protocolli di più alto livello. SSL è un layered protocol. Sopra l’handshake protocol ci possono essere i protocolli visti in precedennza.
SSL: Handshake Protocol È usato per negoziare gli attributi di sicurezza di una sessione. Questi saranno inizialmente registrati in uno stato “pending” che soltanto successivamente diventerà effettivo. Pertanto i messaggi dell’handshake all’inizio sono messaggi in chiaro.
SSL: Handshake overview Client Server Client hello server hello Certificate* ServerKeyExchange* CertificateRequest* ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* ChangeCipherSpec Finished Il client spedisce al server un client hello message a cui il server deve rispondere con un server hello message, altrimenti avviene un fatal error e la connessione fallisce. Il client hello e il server hello stabiliscono i seguenti attributi: Protocol version, session ID, Cipher Suite, e Compression Method. Cipher Suite = codice standard che definisce la combinazione dell’algoritmo discambio delle chiavi, dell’algoritmo di crittografia dei dati e dell’algoritmo per la generazione dei digest( hash per MAC). In più due valori random vengono generati e scambiati. Dopo gli hello messages, il server spedirà il suo certificato (una catena di certificati x.509v3,prima il certificato del client seguito da ogni CA), se esso deve essere autenticato. In più può mandare un serverkeyexchange message se richiesto (ad es se il server non ha certificato). Se il server è autenticato può richiedere un certificato al client. A questo punto il server spedisce il server hello done message, che indica che la fase di hello dell’handshake è finita. Ora il server aspetta una risposta del client. Se il server ha spedito al client una richiesta di certificato, il client deve spedire o il certificate message o un no_certificate_alert. Poi spedisce il client key exchange message; il contenuto di questo messaggio dipenderà dall’algoritmo a chiave pubblica selezionato dal client e dal server nei messaggi di hello. Se il client ha spedito un certificato con firma digitale, viene spedito un certificate verify message per verificare esplicitamente il certificato. A questo punto il client manda un change cipher spec message e il client copia la cioher spec sospesa in quella corrente. Il client quindi immediatamente spedisce un finished message al server usando i nuovi algoritmi,chiavi e segreti. In risposta anche il server spedisce un ccsm, cambia il suo stato corrente e manda il suo finished message. A questo punto l’handshake è concluso e il server e il client possono iniziare a scambiarsi dati del livello applicazione. ChangeCipherSpec Finished Application data Application data
SSL: Hello messages Client Hello. EDH-RSA-DES-CBC-SHA Client_version random session_ID Cipher Suites (ES) Compression Methods Client version = la versione del protocollo SSL con cui il client desidera comunicare. Random = 28 bytes session id = se diverso da vuoto specifica l’id di una sessione che il client vuole riesumare. Cipher suite= una lista di opzioni crittografiche supportate dal client, ordinate partendo da quella preferita dal client Compression methods= una lista di algo di compressione supportati dal client, ordinati partendo da quello preferito dal client
SSL: Hello messages Server Hello. Server_version random session_ID Cipher Suite Compression Method Client version = la più bassa versione del protocollo SSL supportata dal client e più alta per il server. Random = 28 bytes diverso da quello del client session id = l’id di questa sessione. Cipher suite= l’opzione crittografica scelta da quelle supportate dal client. Compression method= l’algo di compressione scelto tra quelli supportati dal client.
SSL: Server key exchange Il tipo di parametri scambiati dipende dal metodo di cifratura definito nel Cipher Suite: RSA Diffie-Hellman In entrambi i casi il server manda i parametri in chiaro e gli stessi parametri firmati con una funzione hash.
SSL: Server key exchange RSA Diffie-Hellman Parametri modulo esponente Parametri firmati Hash ( client.random + server.random + parametri) Parametri C M C^A mod M Parametri firmati Hash ( client.random + server.random + parametri) Dove ‘+’ indica concatenazione e ‘Hash’ è l’algoritmo scelto (MD5 oSHA)
SSL: Client key exchange Il client genera un valore random di 46 bytes, il PreMasterSecret. Lo cripta con la chiave pubblica (RSA o Diffie-Hellman) ottenuta dal server attraverso il certificato o con un server key exchange message e lo manda al server.
SSL: Il MasterSecret Generazione dal PreMasterSecret: MD5 (pre_master_secret + SHA (‘A’ + pre_master_secret + ClientHello.random + ServerHello.random)) + MD5 (pre_master_secret + SHA (‘BB’ + pre_master_secret + MD5 (pre_master_secret + SHA (‘CCC’ + pre_master_secret + ClientHello.random + ServerHello.random)); Con una computazione simile dal master secret, il server e il client generano un key_block che partizioneranno nelle chiavi segrete necessarie alla comunicazione.
SSL: Il Master Secret Generazione del key block: Key_block = MD5 (master_secret + SHA (‘A’ + master_secret + ServerHello.random + ClientHello.random)) + MD5 (master_secret + SHA (‘BB’ + master_secret + MD5 (master_secret + SHA (‘CCC’ + master_secret + ServerHello.random + ClientHello.random)) + […];
SSL: Il Master Secret Esempio di partizionamento del key block: Client_write_MAC_secret = key_block[0..15] Server_write_MAC_secret = key_block[16..31] Client_write_key = key_block[32..36] Server_write_key = key_block[37..40] […]
SSL: Change Cipher Spec Protocol Consiste di un singolo messaggio (Change Cipher Spec Message) di un solo byte di valore 1. Serve per avvisare che i record successivi saranno protetti con i meccanismi negoziati nell’handshake. È possibile mandare un CCSM solo in determinati punti della comunicazione. Un CCSM in un altro momento causa un Unespected_Message_Alert. Nella documentazione SSL si fa riferimento a due protocolli “ausiliari”: - Change cipher spec protocol - Alert protocol vediamo a grandi linee in cosa consistono.
SSL: stato di una sessione Include: session id peer certificate compression method cipher specification premaster secret is resumable Session_id : una seq di bytes arbitraria scelta dal server per identificare la sessione corrente. Peer_certificate : x509.v3 Master sercret : 48 byte condivisi tra client e server is_resumable : un flag se la sessione può essere usata per iniziare nuove connessioni.
SSL: stato di una connessione Una sessione include più connessioni. Lo stato di una connessione include: server and client random server write_MAC_secret client write_MAC_secret server write_key client write_key initilization vector sequence number Random :seq di bytes scelte dal server e dal client per ogni connessione. Server Write key: chiave per algo a chiave simmetrica usata per dati scritti dal server e decriptati dal client Inizialization vector : usato per CBC CipheBlockChaining. Sequence number: ogni parte mantiene numeri di sequenza separati per i dati trasmessi e quelli ricevuti. Quando una parte manda o riceve un ChangeCipherSpec mess. il seq.numb. è settato a zero. All’inizio dalla prima sessione tutti i campi degli stati sono a null. In questo modo i mess. Dell’handshake sono mandati in chiaro. Con lo scambio dei Change Cipher Spec messages gli stati pending vengono salvati sugli stati correnti in modo che i messaggi successivi usino gli algoritmi decisi nell’handshake.
SSL: Finished Messages HASH (master_secret + pad2 + HASH (handshake_messages + Sender + master_secret + pad1)); HASH = MD5/SHA handshake_messages = tutti i messaggi a partire dal client hello fino a questo escluso.
SSL: Record Layer Si occupa della frammentazione compressione dei blocchi cifratura e delle operazioni inverse. Usa gli algoritmi di compressione e di cifratura definiti nello stato corrente.
SSL: Record Layer (autenticazione) Tutti i pacchetti vengono autenticati attraverso un Message Authentication Code (MAC): hash(MAC_write_secret + pad_2 + hash(MAC_write_secret + pad_1 + seq_num + SSLCompressed.type + SSLCompressed.length + SSLCompressed.fragment)); NOTA: il MAC viene calcolato prima della cifratura. Viene cifrato l’intero blocco, incluso il MAC. Uuno stream cipher è un algoritmo che converte una chiave in uno steam crittografficamente sicuro che può essere messo in XOR con il testo da cifrare. Pad_1: il carattere ‘6’ ripetuto 48 volte per MD5 o 40 per SHA Pad_2:il carattere ‘\’ “”” hash : Algoritmo di ashing definito nel cipher spec Sequence number: serve per eliminare attacchi di risposta (replay attack), cioè quelli in cui l’attaccante tenta di riusare vecchi messaggi. I s.n. sono lunghi 64 bits e sono mantenuti separatamente per ciascuna direzione di ogni connessione e sono rigenerati ad ogni nuovo scambio di chiave.
SSL: Record Layer (cifratura) SSLCompressed.fragment->SSLCipherText.fragment Metodi di cifratura usati: Stream Cipher Cipher Block Chaining (CBC) Uno stream cipher è un algoritmo che converte una chiave in uno steam crittografficamente sicuro che può essere messo in XOR con il testo da cifrare. Sensibile all’attacco della lunghezza dell’URL perché la lunghezza del testo cifrato rivela la lunghezza del testo in chiaro.( Sol: random padding ). CBC: È necessario specificare un padding che viene aggiunto al PlainText perché la sua lunghezza sia un multiplo della lunghezza specificata per i blocchi. Sensibile al cut & paste attack
SSL: Alert Protocol Uno dei tipi supportati dal record layer è il tipo alert. I messaggi di questo tipo comprendono il livello di severità (warning, fatal,…) la descrizione ( close_notify, unexpcted_message, bad_reccord_mac, decompression_failure, no/bad/unsupported_certificate, certificate_revoked/expired/unknown).
SSL: Analisi della sicurezza Resiste agli attacchi passivi. Debolezze con alcuni attacchi attivi: Man-in-the-Middle (senza autenticazioni) Key Exchange Algorithm rollback attacks Version Rollback attacks Debolezza a causa delle leggi degli USA sull’esportazione della crittografia. EXP nel cipher suite per specificare che si vogliono rispettare le leggi per l’esportazione di sw (1024bit per algo a chiave privata e 56bit per algo a chiave simm., di più se per firma digitale)
SSL: Conclusioni sulla sicurezza Client & server systems, chiavi e applicazioni devono essere sicure. Le implementazioni devono essere prive di errori e colmare le piccole debolezze del protocollo.
Un’implementazione: OpenSSL È una realizzazione in forma di sw libero dei protocolli SSL e TLS. Permette di incorporare le funzionalità dei protocolli SSL/TLS all’interno di programmi di comunicazione. Comprende programmi di utilità per la gestione delle chiavi e dei certificati, arrivando anche alla gestione di un’autorità di certificazione.
Riferimenti <<The SSL Protocol Version 3>> Transport Layer Security Working Group INTERNET-DRAFT (1996) <<Analysis of the SSL 3.0 protocol>> David Wagner (University of California, Berkeley), Bruce Schneier (Counterpane Systems) (1997) <<Secure Socket Layer and Transport Layer Security>> Liisa Erkomaa, Faculty of Computer Science, Helsinki University of Technology(1997)