Solo per aggiungere alcuni dettagli alle risposte esistenti ...
my question is how would the client know to generate a random 256 bit key? (Why not 128?).
Dipende dalla suite di crittografia che viene negoziata. L'elenco di quelli definiti come parte di TLS 1.1 si trova in RFC 4346 Appendice A.5 . Ad esempio TLS_RSA_WITH_AES_128_CBC_SHA
utilizzerà una chiave a 128 bit, mentre TLS_DHE_RSA_WITH_AES_256_CBC_SHA
utilizzerà una chiave a 256 bit.
Quale suite di crittografia viene negoziata dipenderà dalla configurazione del client e del server, non dal certificato installato sul server. Quando il client avvia la connessione con un messaggio Client Hello
, invia un elenco di pacchetti di crittografia supportati. Il server sceglie quindi quello che vuole e lo dice nel suo messaggio Server Hello
.
Questa suite di crittografia determina quindi in che modo queste chiavi simmetriche vengono infine condivise. Lo scopo immediato dell'handshake SSL / TLS è stabilire una condivisione pre-master secret tra il client e il server. Questo è più ampiamente definito come lo scambio di chiavi (vedi RFC 4346 Appendice F.1.1) .
Questo rientra in due categorie (escluso lo scambio di chiavi anonime):
- Scambio chiave RSA (ad esempio
TLS_RSA_WITH_AES_128_CBC_SHA
): il client codifica il segreto pre-master utilizzando la chiave pubblica del server (presente nel certificato).
- Scambio chiave DH (E) (ad esempio
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
): avviene uno scambio di chiavi Diffie-Hellman. Il server firma i propri parametri DH e il client verifica la firma con la chiave pubblica nel certificato del server. (Avere un certificato basato su RSA non implica uno scambio di chiavi RSA.)
Alla fine della stretta di mano, a seconda di quale di questi due passi sono stati utilizzati, il client e il server sono in possesso di un comune pre-master secret , da cui derivano un master segreto (vedi RFC 4346 Sezione 8.1 ).
Da quel master secret , entrambe le parti possono derivare le chiavi di crittografia (e i segreti MAC), come descritto in RFC 4346 Sezione 6.3 .
Oltre al tipo di chiave (RSA o DSS), non c'è nulla in questo che faccia dipendere la dimensione della chiave di crittografia dal certificato. Inoltre, entrambi i tipi dispongono di pacchetti di crittografia che utilizzano chiavi a 256 bit: ad esempio TLS_DHE_DSS_WITH_AES_256_CBC_SHA
e TLS_DHE_RSA_WITH_AES_256_CBC_SHA
. (DSS è un algoritmo di sola firma, quindi non si otterrebbe uno scambio di chiavi simile a RSA per crittografare il segreto pre-master.)
La dimensione della chiave nel certificato conta solo per prevenire la contraffazione dello scambio di chiavi (o per essere in grado di decifrare il traffico registrato): se qualcuno è riuscito a trovare la chiave privata dalla chiave pubblica nel certificato, potrebbe agire come un MITM per impersonare il server reale o sarebbe in grado di decifrare il segreto pre-master cifrato (e quindi il traffico registrato) quando si utilizza uno scambio di chiavi RSA (le suite di cifratura DHE sono progettate precisamente per impedire l'accesso al -master secret, anche se l'hacker si impossessa della chiave privata e del traffico registrato, vedi questa domanda ). Ecco perché conta una chiave abbastanza grande e asimmetrica.
Le autorità di certificazione tendono a mettere "256 bit" sui loro siti web perché sembra buono dal punto di vista del marketing.
Non è sbagliato, ma può essere fuorviante per le persone che non capiscono che è come è configurato il tuo server e cosa supportano i tuoi clienti.