SSL/TLS
Applicazione di SSL/TLS Web Security Problemi Integrità Modifica dei dati, inserzione Confidenzialità Ascolto sulla rete Furti sulla macchina server SSL può risolvere alcuni problemi, ma misure di sicurezza fisica restano necessarie Autenticazione Impersonificazione Denial of service, Web server modificati Applicazione di SSL/TLS
SSL (Secure Socket Layer) Originariamente sviluppato da Netscape La versione 3 è disegnata contributi pubblici Standardizzazione presso IETF Comitato TLS (Transport Layer Security) formato TLS considerabile SSL v3.1 Compatibile con SSL v3
Due concetti di SSL Sessione SSL Connessioni SSL Un’associazione tra client e server Definisce un insieme di parametri crittografici creati dal protocollo di Handshake Può essere condivisa da diverse connessioni SSL Usata per evitare costose negoziazioni dei parametri criptografici per ogni connessione Connessioni SSL Un link di comunicazione sicuro, paritetico, transiente Associata con (derivata da) una sessione SSL Entrambe con diversi parametri che definiscono Session state Connection state
Stack di protocolli SSL Usa protocollo TCP: consegna dati affidabile Aggiunge funzioni di sicurezza SSL non è un protocollo singolo: protocollo a due livelli IP TCP SSL Record protocol SSL Handshake protocol SSL Change Cipher Spec protocol SSL Alert protocol HTTP
SSL Record protocol Dati applicativi Frammentazione Compressione Aggiunta MAC Cifratura Aggiunta header SSL Record protocol
Change Cipher Spec protocol Protocollo molto semplice: singolo comando tra client e server Il nuovo stato stabilito dal protocollo di handshake è uno stato di pending non ancora valido Il protocollo Change Cipher Spec rende attivo lo stato di pending: cambiano I parametri di connessione
Alert protocol Trasferisce gli alert collegati a SSL alle entità in connessione Reso sicuro con il Record protocol usando i parametri di connessione attuali Ogni messaggio è di due byte Un bite per la severità dell’alert Warning: connessione può essere ripristinata Fatal: connessione terminata Un bite per il tipo (alert code) Unespected message Bad record MAC Decompression failure Handshake failure Illegal parameter Close notify No certificate Bad certificate Unsupported certificate Certificate revoked Certificate expired Certificate unknown
Handshake protocol Consente a client e server Mutua autenticazione Negoziazione di crittatura e protocollo MAC Negoziazione delle chiavi crittografiche Stabilire uno state Eseguito prima di qualsiasi trasmissione di dati Eseguito anche se si riutilizza una sessione già esistente
Handshake protocol Tipo messagio Parametri Hello_request null Type 1byte Length 3 byte Content ≥ 0 byte Tipo messagio Parametri Hello_request null Client_hello Versione, random, id sessione, suite di cifratura, metodo di compressione Server_hello Certificate Catena dei certificati X.509 Server_key_exchange Parametri e firma Certificate_request Typo e CA Server_done Null Certificate_verify Firma Cleint_key_exchange Finished Valore hash
Handshake protocol Client Server Tempo Fase 1 client_hello Definizione delle caratteristiche di sicurezza (numero di protocollo, ID sessione, suite cifratura, metodo di compressione, numeri random iniziali) client_hello server_hello certificate Fase 2 Invio del certificato del server, invio chiavi server, eventuale richiesta certificato client, fine fase di hello server_key_exchange certificate_request server_hello_done Tempo certificate Fase 3 Invio del certificato del client (se richiesto), invio chiavi client, invio verifica del certificato client_key_exchange certificate_verify change_cipher_spec Fase 4 Modifica della siute di cifratura e fine del protocollo di handshake finished change_cipher_spec finished
Handshake fase 1 client_hello (lista delle preferenze del client) versione: la maggiore supportata dal client Numero random del client Incluso il time stamp per evitare attacchi di replay ID di sessione ≠ 0 richiesta di sessione già esistente per aprire la nuova connessione = 0 il client vuole aprire una nuova sessione Metodo di compressione supportato dal client Suite di cifratura Lista degli algoritmi di crittazione supportati dal client in ordine di preferenza Ogni elemento è un algoritmo di scambio delle chiavi
Handshake fase 1 server_hello (risposte alle richieste del client) versione: quella proposta dal client se supportata, se no massima supportata dal server Numero random del server ID sessione Se l’offerta fatta dal client è ancora supportata uguale a quello del client Nuovo ID assegnato dal server Metodo di compressione scelto dalla lista del client Suite di cifratura scelta dalla lista del client
Metodi di scambio delle chiavi Prima è scambiato un pre-master secret Da questo si deriva un master secret Le altre chiavi sono derivate dal master secret
Scambio del pre-master secret RSA Server manda il proprio certificato con chiave pubblica del server Client cripta il pre-master secret con la chiave pubblica del server e lo invia Diffie-Hellman (DH) a parametri fissi I parametri DH di server e client sono fissi e scambiati con i certificati Ephemeral DH I certificati server e client contengono le chiavi RSA Server crea i parametri DH (one-time) e li firma digitalmente Anonymous DH Nessun certificato, nessuna autenticazione, invio dei soli parametri DH vulnerabile ad attacchi MITM
Parametri di cifratura Algoritmi RC4, RC2, DES, 3DES, DES40 (40-bit DES), IDEA Algoritmi di hashing per MAC MD5 o SHA-1 Tipo di cifratura A stream o a blocchi Dimensione dei vettori di inizializzazione
Handshake fase 2 certificate (server) server_key_exchange Necessario per autenticare il server Con DH a parametri fissi si hanno tutte le informazioni per lo scambio di chiavi non serve la fase di scambio delle chiavi server_key_exchange Non serve per DH a parametri fissi e RSA (se RSA non è solo per firma) Contenuto del messaggio dipende dal metodo scelto Anonymous-DH: parametri DH pubblici e chiave pubblica del server Ephemeral DH: come sopra più firma su scambio chiave RSA Firma contiene valori numerici scambiati nella fase di hello
Handshake fase 2 certificate_request server_hello_done Il server può chiedere il certificato client (non usuale) mutua AuthN Due campi: Tipo di certificato (DH a parametri fissi, ephemeral DH, solo firma) Lista delle CA accettate dal server server_hello_done Server si mette in attesa della risposta del client
Handshake fase 3 Dopo server_hello_done client verifica il certificato server e i parametri hello certificate (client) Inviato solo se richiesto dal server client_key_exchange Contenuto funzione del metodo concordato RSA: pre-master secret (48-byte) criptato con chiave RSA del server DH a parametri fissi: sono nel certificato client messaggio null Anonymous o ephemeral DH Parametri e chiave pubblica inviati senza firma non c’è autenticazione del client!
Handshake fase 3 In questa fase non c’è autenticazione del client Chiunque può inviare il messaggio client_key_exchange certificate_verify Metodo di autenticazione del client Client firma con la propria chiave privata un messaggio contenente master secret e messaggi di handshake Eccetto per DH a parametri fissi che non ha chiave di firma E per DH a parametri fissi? Nessuna autenticazione Un attacante non può produrre le chiavi pre-master e master se non conosce le chiavi DH private
Handshake fase 4 change_cipher_spec finished Attiva le informazioni di cifratura scambiate e la connessione finished Un MAC creato sui messaggi di handshake usando il master secret Per verificare che la fase di handshake è andata a buon fine e che entrambe le parti hanno la stessa master secret finished del client verificato dal server e viceversa
Creazione del master secret Master secret: valore di 48-byte generato per sessione Creazione in due fasi pre-master secret scambiato durante handshake Con RSA: client crea, cifra e invia server decifra) Con DH: entrambi calcolano lo stesso valore master secret è calcola a partire da pre-master secret e stringhe random master_secret = MD5(pre_master_secret + SHA('A' + pre_master_secret + ClientHello.random + ServerHello.random)) + MD5(pre_master_secret + SHA('BB' + pre_master_secret + ClientHello.random + ServerHello.random)) + MD5(pre_master_secret + SHA('CCC' + pre_master_secret + ClientHello.random + ServerHello.random));
TLS (Transport Layer Security) TLS definito in RFC 2246 Simile a SSL v3 con alcune differenze: Numero versione: 3.1 MAC: TLS usa HMAC con pad in XOR (SSL appende i pad) Alert code aggiuntivi Suite di cifratura uguali a SSL ad esclusione di Fortezza Client con ephemeral DH non sono accettati in TLS Ci sono differenza nel calcolo di certificate_verify e finished Usata una diversa funzione di generazione di numeri pseudo-random
© 2005 Microsoft Corporation. All rights reserved © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.