Sto studiando la stretta di mano di Tls e ho qualche dubbio.
Dopo che il client ha convalidato il certificato digitale presentato dal server, il passo successivo è il contratto di scambio delle chiavi utilizzando, ad esempio, RSA per encrpificare e decrittografare i dati scambiati durante la sessione tls. In questo processo RSA il client genera un numero casuale e utilizza la chiave pubblica del server per crittografare questo numero casuale generato e inviare questo numero crittografato al server.
Questo numero casuale è il segreto pre-master. Il server utilizza la sua chiave privata per decrittografare il pre master secret. Da questo segreto pre-master, il client e il server possono generare il segreto principale che contina la chiave simmetrica da utilizzare nella crittografia dei messaggi. Questo segreto pre-master, poiché è stato crittografato utilizzando la chiave pubblica del server, può essere decrittato solo dal server con la sua chiave privata. Dubbio: Quindi, a causa di ciò la sicurezza nello scambio di chiavi dipende dalla chiave privata del server, giusto?
Quindi, se il pre master secret è encrpyeed con la chiave pubblica del server, se un ataccker può ottenere la chiave privata è possibile che l'attaccante possa decifrare le informazioni trasmesse nell'handshake e ottenere così l'accesso alla chiave master per decrittografare i dati trasmessi durante una sessione, sia che si tratti di dati di una sessione precedente o nuova. Dubbio: per risolvere questo problema c'è il concetto di perfetto segreto in avanti, giusto? Se esiste una garanzia che tutte le informazioni vengano crittografate prima che la chiave privata sia compromessa, continua a essere sicuro.
Dubbio: E per usare questo perfetto segreto in avanti l'algoritmo dh effimero dovrebbe essere usato giusto? Per generare un nuovo set di parametri dh per ogni sessione. Il mio dubbio su questo è, nel caso di un sito che utilizza https, come facciamo a sapere se usa dh o effimero dh? E quando usare dh o effimero dh in un sito https?