Hay cuatro CSPs ECDSA P256 disponibles en Windows. ¿Cuál debo usar?

3

Según el caso de soporte de Azure # 116120515025419, el centro de datos público solo admite lo siguiente

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

Dado que mi objetivo es usar ECC con Perfect Forward Secrecy, creo que estas son mis mejores opciones.

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256

El certificado de EV más barato que puedo encontrar está en Namecheap / Comodo, y son compatibles con las siguientes curvas:

 prime256r1, secp256t1, secp384r1, secp521r1.

Estoy usando esta guía para generar mi certificado, pero yo No estoy seguro de cuál de las siguientes opciones elegir

ECDSA_P256 Microsoft Software Key Storage Provider
ECDSA_secP256r1 Microsoft Key Storage provider
ECDSA_secP256k1 Microsoft Key Storage provider
ECDSA_nistP256, Microsoft Key Storage provider

Justificación para querer ECDSA 256

Mi elección para usar el certificado P256 permitirá a los desarrolladores usar CBC además de GCM. Podría elegir una longitud de bit más alta, pero los CSP de ECDSA más seguros no admiten CBC. ¿Es sabio de mi parte apoyar a CBC?

En caso de que sea importante, mis clientes objetivo son aplicaciones móviles, navegadores y dispositivos IoT.

Pregunta

  • ¿Cuál es la diferencia entre las curvas disponibles en Windows y cuál es la más adecuada para mi caso de uso? (¿por qué?)

  • Si tengo una opción, ¿cuál de las curvas es menos propensa a errores en implementaciones de terceros?

pregunta random65537 03.05.2017 - 19:53
fuente

1 respuesta

2

En una suite de cifrado como TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 , hay dos curvas involucradas:

  • Uno se usa para la parte ECDHE: una clave Diffie-Hellman intercambiada se usa entre el cliente y el servidor, sobre una curva dada.
  • El otro es para la firma ECDSA calculada por el servidor: el servidor firma su mensaje ServerKeyExchange . ECDSA es un algoritmo de firma que utiliza cálculos en una curva elíptica.

No hay ningún requisito de que ambas curvas sean iguales; En su mayoría no están relacionados y viven en mundos diferentes. A nivel conceptual, el que se usa para ECDHE es más importante, ya que debe garantizar la seguridad durante toda la vida útil de los datos que se intercambiarán a través del cable (es decir, si los datos siguen siendo importantes dentro de diez años, la curva aún debe sé robusto dentro de diez años); el que se usa en la firma es solo por ahora, y realmente no importa si se rompe mañana.

Tenga en cuenta que secreto hacia adelante tiene que ver con el intercambio de claves, es decir, la parte ECDHE. Esta es la misma idea: la seguridad del sistema de firmas solo importa por ahora. Por lo tanto, podría perfectamente tener un secreto hacia adelante impulsado por ECC con un conjunto de cifrado TLS_ECDHE_RSA_* , es decir, con una clave RSA en el certificado.

Normalmente, la opción de CSP (técnicamente, "proveedor de almacenamiento de claves CNG") es sobre el tipo de clave privada que se almacenará, es decir, que corresponde al certificado y la firma ECDSA (o RSA). La curva para ECDHE se elige de forma independiente (*), entre el cliente y el servidor, con secretos que se guardan solo en la RAM (y, por lo tanto, nunca se almacenan, que es el punto de confidencialidad).

Dicho esto, la única curva que se admite en todas partes es la curva P-256 de NIST, también conocida como "secp256r1" o "prime256r1" (no debe confundirse con "secp256k1", que es una curva distinta). La curva NIST P-384 también tiene una buena proporción de soporte generalizado, aunque tal vez no tanto como P-256. Además, el P-384 implica un poco más de trabajo computacional (aproximadamente tres veces más), lo que no importa en la práctica, excepto si están involucrados algunos sistemas integrados restringidos (no teléfonos inteligentes; realmente sistemas pequeños). Un punto adicional es que el P-256 ya garantiza una seguridad más que adecuada, incluso en lo que respecta a las mejoras tecnológicas: por lo que sabemos, si un intercambio de claves ECDHE P-256 se rompe alguna vez, será mediante el uso de un como sin embargo, la mítica computadora cuántica , y si tal bestia se construye alguna vez, entonces alcanzará la P-384 con casi la misma cantidad facilitar. En ese sentido, no hay ninguna ventaja de seguridad de usar P-384 en lugar de P-256.

Resumen: para una máxima interoperabilidad, use P-256. Las implementaciones SSL del cliente y del servidor todavía pueden decidir utilizar otra curva para la parte ECDHE; a menos que se aplique una guía específica, esa otra curva generalmente también será P-256 o (dependiendo de las implementaciones involucradas) Curve25519, que también es una buena opción para la seguridad.

(*) Mayormente. Algunas versiones de OpenSSL intentarán hacer coincidir el tamaño de la curva ECDHE con la curva utilizada en ECDSA, lo que puede tener sentido o no, ya que se relacionan con diferentes operaciones con diferentes características de seguridad, especialmente con respecto a futuras mejoras tecnológicas.

    
respondido por el Thomas Pornin 03.05.2017 - 21:00
fuente

Lea otras preguntas en las etiquetas