SSL/TLS
|
[email protected] |
Web Security
Problemi
Integrità
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
|
[email protected] |
Applicazione di
SSL/TLS
Modifica dei dati, inserzione
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
|
[email protected] |
Due concetti di SSL
Sessione 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
|
[email protected] |
Stack di protocolli SSL
Usa protocollo TCP: consegna dati affidabile
Aggiunge funzioni di sicurezza
SSL non è un protocollo singolo: protocollo a due livelli
SSL
SSL
Change
Handshake
Cipher Spec
protocol
protocol
SSL
Alert
protocol
SSL Record protocol
TCP
IP
|
[email protected] |
HTTP
SSL Record protocol
Dati applicativi
Frammentazione
Compressione
Aggiunta MAC
Cifratura
Aggiunta header
SSL Record protocol
|
[email protected] |
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
|
[email protected] |
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
[email protected] |
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
|
[email protected] |
Handshake protocol
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
Versione, random, id sessione, suite di cifratura, metodo di compressione
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
Parametri e firma
Finished
Valore hash
[email protected] |

Handshake protocol
Client
Server
Fase 1
Definizione delle caratteristiche di sicurezza
(numero di protocollo, ID sessione, suite cifratura,
metodo di compressione, numeri random iniziali)
Fase 2
Tempo
Invio del certificato del server, invio chiavi server,
eventuale richiesta certificato client, fine fase di
hello
Fase 3
Invio del certificato del client (se richiesto), invio
chiavi client, invio verifica del certificato
Fase 4
Modifica della siute di cifratura e fine del protocollo
di handshake
|
[email protected] |
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
|
[email protected] |
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
|
[email protected] |
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
|
[email protected] |
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
|
[email protected] |
Handshake fase 2
certificate (server)
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
|
[email protected] |
Handshake fase 2
certificate_request
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
|
[email protected] |
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!
|
[email protected] |
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
|
[email protected] |
Handshake fase 4
change_cipher_spec
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
|
[email protected] |
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));
|
[email protected] |
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
|
[email protected] |
© 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only.
MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.
Scarica

SSL/TLS