Quanto dura una chiave simmetrica HTTPS

8

A quanto ho capito, HTTPS / SSL / TLS funziona con lo scambio di chiavi EC / DHE / RSA, fornendo una chiave simmetrica condivisa (ad es. per AES) utilizzata per comunicazioni future.

Per quanto tempo questa chiave simmetrica viene utilizzata dai principali browser prima di negoziare una nuova chiave?

    
posta arcyqwerty 10.04.2014 - 22:22
fonte

1 risposta

15

L'immagine completa è la seguente: la crittografia asimmetrica (RSA, DH ...) produce un segreto condiviso chiamato master secret . Dal master secret sono derivate le chiavi simmetriche utilizzate per la crittografia.

La distinzione si riferisce alla differenza tra una connessione e una sessione . Quando un client apre una connessione a un server, i due possono impegnarsi in una nuova stretta di mano completa, con crittografia asimmetrica, che si traduce in un nuovo segreto principale. O potrebbero accettare di riutilizzare un master secret da una connessione precedente. Quest'ultimo caso è chiamato "stretta di mano abbreviata". Diverse connessioni che funzionano sullo stesso master secret sono chiamate una sessione , ed è identificata da un ID di sessione che client e server si inviano reciprocamente nel loro ClientHello e ServerHello messaggi. Vedi questa risposta per i dettagli su questo processo.

Quando viene riutilizzato un master secret, ovvero per una nuova connessione all'interno di una sessione, vengono comunque derivate nuove chiavi simmetriche, poiché la derivazione funziona sia sul master secret, sia su due valori casuali che il client e il server si inviano reciprocamente messaggi iniziali Pertanto, le chiavi simmetriche vengono rinnovate con ogni connessione, ma attraverso la derivazione da un "master secret" che può essere ricordato per un lungo periodo e riutilizzato per molte connessioni successive.

Quando viene stabilita una connessione, la situazione normale è che le chiavi non vengono rinnovate fino alla fine della connessione. In qualsiasi momento, secondo la specifica del protocollo , il client o il server possono richiedere un nuovo handshake, all'interno della connessione; la nuova stretta di mano può essere o meno "abbreviata" (una stretta di mano abbreviata si verifica solo se entrambe le parti sono d'accordo), ma produrrà comunque nuove chiavi simmetriche (ma non necessariamente un nuovo segreto principale).

In pratica, questo non succede. Si verificherà un ulteriore handshake durante la connessione se il server vuole forzare il client ad autenticarsi con un certificato (questo è il caso comune con IIS: prima handshake senza autenticazione client e quando viene inviata la richiesta HTTP e il server apprende l'obiettivo effettivo percorso, innesca una stretta di mano in più). Ma è abbastanza raro che il software distribuito faccia realmente nuove strette di mano solo per il rinnovo della chiave. Il motivo principale è che il rinnovo delle chiavi non è necessario per la robustezza crittografica: AES utilizza blocchi a 128 bit e non blocchi a 64 bit, proprio per non dover rinnovare le chiavi in condizioni pratiche.

Quindi ciò che accade (specialmente in un contesto Web) è il seguente:

  • Le chiavi simmetriche per una connessione rimangono invariate fino alla fine di quella connessione.
  • Una connessione dura finché il client e il server lo consentono; in un contesto Web, il server normalmente chiude le connessioni che sono rimaste inattive per più di uno o due minuti.
  • Sessioni , ad esempio i valori segreti principali, vengono ricordati dai client e dai server e vengono riutilizzati quando possibile. Un tipico browser Web ricorderà le sessioni SSL finché non verrà chiuso (come un processo, cioè tutte le finestre chiuse). Un server Web tipico ricorderà le sessioni SSL per un determinato periodo di tempo, che è configurabile (in genere da 10 minuti a 10 ore circa), anche soggetto alla RAM disponibile e un limite configurabile (ciascuna sessione memorizzata utilizzerà un paio di kilobyte al massimo ).

Le chiavi simmetriche per una connessione sono conservate solo nella RAM. Il master secret normalmente deve essere conservato solo nella RAM, ma quando diversi server front-end operano dietro un load balancer, possono condividere i master segreti attraverso vari metodi, che possono anche essere un database. In tali configurazioni, i valori master secret possono quindi essere memorizzati su un supporto di memorizzazione permanente (che solleva un sacco di potenziali problemi, ovviamente).

Se spegni il sistema client (non solo lo metti in modalità sospensione o ibernazione, ma lo spegni davvero), allora è praticamente garantito che tutte le chiavi simmetriche, incluso il master secret, siano scomparse per sempre dal client macchina.

    
risposta data 11.04.2014 - 04:26
fonte

Leggi altre domande sui tag