I supponiamo che stai parlando di SSL. Un server SSL supporta diverse combinazioni di algoritmi crittografici denominati suite di crittografia . In particolare, un determinato server SSL può supportare uno o entrambi questi meccanismi di scambio di chiavi:
-
RSA: il server ha una chiave privata RSA; il client genera un valore casuale (il "segreto pre-master") e lo crittografa con la chiave pubblica RSA del server; il server decrittografa il valore ricevuto per ottenere il segreto pre-master.
-
DHE_RSA: il server ha una chiave privata RSA; il server genera una nuova coppia di chiavi Diffie-Hellman casuale, firma la parte pubblica con la sua chiave privata RSA e la invia al client; il client verifica la firma RSA (utilizzando la chiave pubblica RSA del server) e completa lo scambio di chiavi DH. (Variante: ECDHE_RSA: stesso principio, ma il DH è fatto su una curva ellittica.)
Quindi, un determinato server SSL potrebbe potenzialmente utilizzare la stessa chiave privata RSA sia per la crittografia (quando si utilizza uno scambio di chiavi RSA) sia per le firme (quando si esegue uno scambio di chiavi DHE_RSA). Si noti che il server può perfettamente avere due chiavi RSA, una dedicata alla crittografia (scambio di chiavi RSA) e una per le firme (scambio di chiavi DHE_RSA); le persone semplicemente non lo fanno regolarmente perché avere due chiavi distinte implica l'acquisto di due certificati distinti.
In tutte le generalità , la stessa chiave non deve essere utilizzata sia per la crittografia sia per le firme. Si noti che una grande fonte di confusione è che la crittografia RSA e le firme RSA sono due algoritmi distinti, che capita semplicemente di usare chiavi private che hanno lo stesso formato, e la gente ha trovato intelligente chiamarle entrambe "RSA".
I due motivi principali per cui non si utilizza la stessa chiave privata per la crittografia e le firme sono i seguenti:
-
Le interazioni tra la crittografia e l'algoritmo della firma non sono ben studiate. Potrebbe esistere un metodo che sfrutta la crittografia per falsificare le firme o le firme per eseguire una decrittografia subdola. Nel caso specifico di un server SSL, si ritiene solitamente che non vi sia alcuna interazione di questo tipo, in particolare perché quando il server decrittografa , non annuncia il risultato al client, e anche perché quando il server segni , lo fa su una chiave pubblica DH generata dal server stesso, non sui dati inviati dal client.
-
Normalmente, le chiavi di crittografia e le chiavi di firma richiedono cicli di vita distinti; le chiavi di crittografia devono essere affidate a terzi e le chiavi di firma non devono essere depositate presso terzi (vedi questo per qualche discussione sull'argomento). Ancora, nel caso specifico di un server SSL, non è necessario depositare la chiave privata RSA perché la crittografia è transitoria (i dati vengono decodificati quando arrivano, non memorizzati), quindi è possibile gestire la chiave privata del server in un modo che va bene sia per una chiave di crittografia che per una chiave di firma.