¿Los estándares TLS requieren que se use siempre la preferencia del lado del servidor cuando se negocien los cifrados?

1

El otro día, alguien me dijo que los estándares TLS requieren que el lado del servidor siempre tenga la autoridad para decidir qué cifrado mutuo usar cuando se negocia con un cliente remoto.

Esto tiene sentido, pero me hace preguntarme cuánto tiempo ha sido así y por qué hay opciones como: +SSL_OP_CIPHER_SERVER_PREFERENCE en openssl para las opciones de CTX: enlace

  

SSL_OP_CIPHER_SERVER_PREFERENCE

     

Al elegir un cifrado, use las preferencias del servidor en lugar de las preferencias del cliente. Cuando no está configurado, el servidor SSL siempre   seguir las preferencias de los clientes. Cuando está configurado, el servidor SSLv3 / TLSv1   Elija siguiendo sus propias preferencias. Debido a los diferentes   protocolo, para SSLv2 el servidor enviará su lista de preferencias a   El cliente y el cliente eligen.

Esto no tiene sentido ...

    
pregunta Mike B 09.05.2018 - 02:35
fuente

2 respuestas

2

Creo que la clave es darse cuenta de la diferencia entre aceptabilidad y preferencias. Cada lado tiene un conjunto de conjuntos de cifrado aceptados y un orden de preferencia entre esos conjuntos de cifrado. Los conjuntos de cifrados no aceptados no se consideran para preferencias en absoluto.

Debido al diseño del protocolo TLS, el cliente envía su conjunto de conjuntos de cifrado aceptados al servidor. Envía este conjunto como una lista ordenada, y el orden indica las preferencias del cliente. El servidor nunca muestra al cliente lo que acepta o cuáles son sus preferencias. Hace una selección y le dice al cliente qué es esa selección. Es por eso que el servidor tiene la autoridad final para seleccionar el conjunto de cifrado. Sin embargo, el servidor no tiene autoridad completa: no puede hacer que el cliente use un sistema de cifrado que el cliente no quiere.

Desde la perspectiva del cliente, el servidor no tiene un conjunto o preferencias aceptables. Todo lo que el cliente sabe es que el servidor eligió un conjunto de cifrado particular entre los que ofrecía el cliente.

El servidor debe seleccionar un conjunto de cifrado que sea aceptable tanto para el cliente como para el servidor. Si hay algún conjunto de cifrado que el cliente acepta pero el servidor no, el servidor no lo considerará en absoluto. Del mismo modo, si hay algún conjunto de cifrado que el servidor acepta pero no el cliente, entonces el servidor no puede seleccionarlo (eso violaría el protocolo y el cliente cerraría la conexión).

Cualquier conjunto de cifrado que se encuentre tanto en la lista de preferencias del cliente como en la lista de preferencias del servidor es, por construcción, aceptable para ambas partes. Entre los conjuntos de cifrado mutuamente aceptables, el servidor tiene autoridad para decidir cuál elegir.

Podría elegir uno al azar, o en función de la fase de la luna, o podría tomar un hash de la concatenación de las dos listas de módulos del tamaño del conjunto mutuamente aceptable y usar eso como un índice en el mutuamente Lista aceptable ordenada en orden alfabético inverso de la transformación rot13 de los nombres oficiales de conjuntos de cifrado. O puede hacer su elección de una manera más sensata, y OpenSSL ofrece las dos formas que realmente tienen sentido: entre el conjunto mutuamente aceptable, elija la que más prefiera el servidor o la que más prefiera el cliente.

    
respondido por el Gilles 09.05.2018 - 13:11
fuente
3

Dentro de TLS, el cliente envía una lista de cifrados admitidos en el orden de sus preferencias por parte del cliente. El servidor tiene sus propias listas de cifrados que está dispuesto a admitir. El servidor es libre de elegir cualquiera de los sistemas de cifrado que ofrece el cliente y que también son compatibles en el lado del servidor. No se especifica cómo se hace esta elección. Para que la elección sea simple, la API de OpenSSL permite a la aplicación del servidor elegir entre dos estrategias: usar la preferencia de cifrado del cliente o usar la preferencia del servidor . Hay argumentos para ambas estrategias:

  • usa la preferencia del cliente:
    El cliente puede mostrar una preferencia por cifrados que sean lo suficientemente fuertes pero que necesiten pocos recursos informáticos en el cliente. Por ejemplo, los clientes que tienen instrucciones nativas para AES probablemente preferirán algún cifrado basado en AES. Los clientes sin tales instrucciones (como los procesadores ARM de gama baja) pueden preferir ChaCha20 en lugar de que este algoritmo necesite muchos menos recursos en este caso.
  • usa la preferencia del servidor:
    El cifrado no es realmente barato y, por lo tanto, el servidor puede preferir sistemas de cifrado que necesitan la menor cantidad de recursos en el servidor (pero que aún son sólidos) para atender a muchos clientes en paralelo. Por lo tanto, incluso si el cliente preferiría que ChaCha20 ahorrara recursos en su sitio, el servidor podría elegir un cifrado basado en AES, ya que es mucho más barato hacerlo en el servidor si el servidor tiene soporte de hardware para AES (la mayoría lo hace).
respondido por el Steffen Ullrich 09.05.2018 - 06:14
fuente

Lea otras preguntas en las etiquetas