¿Se enviarán los parámetros RSA en un mensaje de intercambio de claves del servidor en TLS 1.1?

3

El TLS 1.1 (RFC 4346), la sección para el Mensaje de intercambio de claves del servidor (7.4.3) dice

  It is not legal to send the server key exchange message for the
  following key exchange methods:

       RSA
       DH_DSS
       DH_RSA

Pero, a continuación en la misma sección para la estructura del mensaje, se proporciona la siguiente estructura:

  struct {
      select (KeyExchangeAlgorithm) {
          case diffie_hellman:
              ServerDHParams params;
              Signature signed_params;
          case rsa:
              ServerRSAParams params;
              Signature signed_params;
      };
  } ServerKeyExchange;

¿En qué condición se enviarán los ServerRSAParams? ¿Por qué es necesario? En la especificación TLS 1.2 (RFC 5246), encuentro que la estructura ServerKeyExchange no indica ningún parámetro para enviar para RSA. Fragmento de RFC 5246 a continuación:

  struct {
      select (KeyExchangeAlgorithm) {
          case dh_anon:
              ServerDHParams params;
          case dhe_dss:
          case dhe_rsa:
              ServerDHParams params;
              digitally-signed struct {
                  opaque client_random[32];
                  opaque server_random[32];
                  ServerDHParams params;
              } signed_params;
          case rsa:
          case dh_dss:
          case dh_rsa:
              struct {} ;
             /* message is omitted for rsa, dh_dss, and dh_rsa */
          /* may be extended, e.g., for ECDH -- see [TLSECC] */
      };
  } ServerKeyExchange;
    
pregunta Jay 07.12.2012 - 05:46
fuente

1 respuesta

5

Como dice TLS 1.2 :

  

El servidor envía el mensaje ServerKeyExchange solo cuando       El mensaje de certificado del servidor (si se envía) no contiene datos suficientes       para permitir al cliente intercambiar un secreto premaster.

Por lo tanto, un mensaje ServerKeyExchange que contenga una clave pública RSA se usaría cuando la clave pública del servidor no sea apta para el intercambio de claves (por ejemplo, está en un certificado que está marcado solo como firma) pero Sin embargo, el cliente y el servidor desean utilizar RSA para el intercambio de claves.

Enviar una clave RSA como esta es una característica que ha quedado fuera de uso, pero se usó en TLS 1.0 con las suites de cifrado RSA_EXPORT . En ese momento, había regulaciones bastante estrictas en los EE. UU., Que limitaban el tamaño de las claves criptográficas que se usaban para el cifrado en sistemas que se exportaban fuera de los EE. UU. (Estas reglamentaciones se eliminaron en 2000); en particular, RSA cifrado se limitó a 512 bits (y 40 bits para cifrado simétrico). Las suites de cifrado RSA_EXPORT cumplieron con estas regulaciones de exportación. Cuando el servidor tiene una clave pública RSA, el cliente y el servidor acuerdan usar una de las suites RSA_EXPORT , y la clave pública del servidor es más grande que 512 bits, entonces el servidor debe enviar un ServerKeyExchange message con una clave RSA de como máximo 512 bits, y usa su clave RSA permanente (la que está en su certificado) para firmar el mensaje ServerKeyExchange .

La generación dinámica de claves RSA es un poco incómoda y costosa; un servidor SSL dado puede reutilizar esa clave con varios clientes, pero aún es más pesado que DHE. El principal caso de uso fue apoyar a los clientes débiles que solo pueden hacer RSA; sin embargo, incluso si las operaciones de clave pública RSA son muy rápidas, ECDHE (Diffie-Hellman con curvas elípticas) es competitivo y mucho más fácil para el servidor. Los clientes de TLS 1.1 pueden anunciar el soporte para las suites RSA_EXPORT , pero solo para la compatibilidad con versiones anteriores con SSL 3.0 y TLS 1.0 (sección A.5 de TLS 1.1 ):

  

Las implementaciones de TLS 1.1 NO DEBEN negociar      estos conjuntos de cifrado en modo TLS 1.1. Sin embargo, para atrás      compatibilidad que pueden ofrecerse en ClientHello para su uso con TLS   1.0 o servidores solo SSLv3. Los clientes de TLS 1.1 DEBEN comprobar que      El servidor no eligió una de estas suites de cifrado durante el      apretón de manos. Estos conjuntos de claves se enumeran a continuación para información      Propósitos y reservar los números.

La estructura ServerRSAParams en TLS 1.1 es, por lo tanto, una supervivencia de TLS 1.0 que de alguna manera evadió la ira de los editores de RFC 4346, pero finalmente se eliminó cuando se produjo RFC 5246.

    
respondido por el Thomas Pornin 07.12.2012 - 11:30
fuente

Lea otras preguntas en las etiquetas