Solo para agregar algunos detalles a las respuestas existentes ...
mi pregunta es ¿cómo sabría el cliente generar una clave aleatoria de 256 bits? (¿Por qué no 128?).
Esto depende de la suite de cifrado que se negocia. La lista de los definidos como parte de TLS 1.1 se encuentra en RFC 4346 Apéndice A.5 . Por ejemplo, TLS_RSA_WITH_AES_128_CBC_SHA
usará una clave de 128 bits, mientras que TLS_DHE_RSA_WITH_AES_256_CBC_SHA
usará una clave de 256 bits.
El paquete de cifrado que se negocia dependerá de la configuración del cliente y del servidor, no del certificado instalado en el servidor. Cuando el cliente inicia la conexión con un mensaje Client Hello
, envía una lista de conjuntos de cifrado que admite. Luego, el servidor elige el que desea y lo dice en su mensaje Server Hello
.
Este conjunto de cifrado determina cómo se comparten finalmente estas claves simétricas. El propósito inmediato del protocolo de enlace SSL / TLS es establecer un secreto maestro previo para compartir entre el cliente y el servidor. Esto se conoce más ampliamente como intercambio de claves (consulte RFC 4346 Apéndice F.1.1) .
Esto se divide en dos categorías (excluyendo el intercambio de claves anónimas):
- Intercambio de claves RSA (por ejemplo,
TLS_RSA_WITH_AES_128_CBC_SHA
): el cliente cifra el secreto maestro previo utilizando la clave pública del servidor (que se encuentra en el certificado).
- Intercambio de claves DH (E) (por ejemplo,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
): tiene lugar un intercambio de claves Diffie-Hellman. El servidor firma sus parámetros DH y el cliente verifica la firma con la clave pública en el certificado del servidor. (Tener un certificado basado en RSA no implica un intercambio de claves RSA).
Al final del protocolo de enlace, cualquiera de estos dos pasos se utilizaron, el cliente y el servidor están en posesión de un pre-master secret común, del cual derivan un master secreto (consulte RFC 4346 Sección 8.1 ).
A partir de ese master secret , ambas partes pueden derivar las claves de cifrado (y los secretos de MAC), como se describe en RFC 4346 Sección 6.3 .
Además del tipo de clave (RSA o DSS), no hay nada en esto que haga que el tamaño de la clave de cifrado dependa del certificado. Además, ambos tipos tienen conjuntos de cifrado que utilizan claves de 256 bits: por ejemplo, TLS_DHE_DSS_WITH_AES_256_CBC_SHA
y TLS_DHE_RSA_WITH_AES_256_CBC_SHA
. (DSS es un algoritmo de firma exclusiva, por lo que no obtendría un intercambio de claves similar a RSA para cifrar el secreto pre-maestro).
El tamaño de la clave en el certificado solo importa para evitar la falsificación del intercambio de claves (o para poder descifrar el tráfico registrado): si alguien pudo encontrar la clave privada de la clave pública en el certificado, podrían actuar como un MITM para hacerse pasar por el servidor real o podrían descifrar el secreto maestro maestro cifrado (y, por lo tanto, el tráfico registrado) al usar un intercambio de claves RSA (los conjuntos de cifrado DHE están diseñados precisamente para evitar el acceso al servidor - secreto del maestro, incluso si el atacante obtiene la clave privada y el tráfico registrado, consulte esta pregunta ). Por eso es importante una clave asimétrica suficientemente grande.
Las Autoridades de Certificación tienden a poner "256 bits" en sus sitios web porque se ve bien desde un punto de vista de marketing.
No está mal, pero puede ser engañoso para las personas que no entienden que lo que importa es la forma en que se configura su servidor y lo que apoyan sus clientes.