¿Algoritmos asimétricos recomendados para JWT?

1

Estoy implementando la autenticación JWT para un nuevo servicio web y no estoy seguro de qué algoritmo asimétrico elegir. He buscado alrededor y no he encontrado ningún consenso o recomendaciones claras. Según la documentos de PyJWT hay algunos algoritmos diferentes para elegir.

Me gustaría usar un algoritmo que sea seguro (obviamente), tenga una sobrecarga baja y sea una prueba de futuro. ¿Qué algoritmo encaja a la perfección?

    
pregunta user3607758 01.10.2018 - 08:00
fuente

3 respuestas

1

RFC7518 enumera los algoritmos y si son necesarios, recomendados u opcionales para una biblioteca JWT. Esto puede ayudarlo a elegir un algoritmo que tenga implementaciones en otras bibliotecas, con fines de interoperabilidad.

Desde una perspectiva de seguridad, hay estas opciones:

  • RSASSA vs. ECDSA. ECDSA usa curvas elípticas y algunas personas piensan que son más seguras que RSA. También son más rápidos y te permiten usar claves más pequeñas.
  • SHA256, SHA384, SHA512. Se podría decir que más es mejor, pero como el SHA256 ya es imposible de fuerza bruta, tiene poco sentido utilizar más bits.
  • PKCS1-v1_5 vs. PSS. PSS tiene algunas ventajas de seguridad, pero es más complejo que PKCS1, posiblemente haciendo más probables los errores de implementación.

Todas estas opciones son seguras y las diferencias son en gran medida teóricas. Probablemente recomendaría ECDSA usando P-256 y SHA-256, ya que

  • que es probable que se implemente en muchas implementaciones de JWT, de acuerdo con el RFC,
  • utiliza curvas elípticas que tienen algunos beneficios leves de seguridad y rendimiento.

La otra respuesta mencionó las computadoras cuánticas. No tenemos computadoras cuánticas viables en este momento, pero si existieran, podrían romper fácilmente todos los algoritmos JWT posibles. Entonces, desde un punto de vista post-cuántico, no importa cuál elijas, ya que todos son igualmente inseguros.

Ver también:

respondido por el Sjoerd 01.10.2018 - 09:24
fuente
1

RSA es a menudo el algoritmo de elección, ya que ahora es bastante antiguo y ha sobrevivido debido a un gran escrutinio. No te puedes equivocar al elegirlo. La variante 256 es lo suficientemente buena como IMO, ya que el SHA256 está lejos de romperse.

Si le importa el tamaño del mensaje, lo que probablemente haga en JWT, es posible que desee utilizar ECC. Permite firmas significativamente más cortas a la vez que es tan seguro como RSA en teoría. En la práctica, el problema está en la implementación. En el pasado ha habido curvas con picos y muchos problemas con la implementación, como los ataques fuera de curva. Es más probable que la ECC tenga errores en la implementación de la OMI.

Los algoritmos PS están basados en RSA pero aparentemente se modifican para tener una prueba de reducción. No daría demasiadas existencias en la prueba y, como es relativamente nuevo y más complicado, las implementaciones pueden tener problemas. Yo no elegiría estos.

Al final, elegiría uno de estos dos según el nivel de seguridad que necesite. ES256 es probablemente la mejor opción para la mayoría de las aplicaciones web.

PS: De cualquier manera, obviamente debes asegurarte de que tu biblioteca jwt se esté actualizando de manera oportuna en caso de que existan correcciones de errores relacionadas con la seguridad.

    
respondido por el Peter Harmann 01.10.2018 - 09:15
fuente
-1

Debe implementar su software de esta manera, ya que puede intercambiar fácilmente el algoritmo de firma. Esperemos que pyjwt también admita nuevos algoritmos, cuando existan.

Dado que varias personas tienen miedo de las computadoras cuánticas, que se dice que pueden romper RSA algún día, ya que la generación de factores primos puede ser fácilmente paralizable, debería considerar el uso de un algoritmo de curva elíptica.

Pero como el párrafo siguiente indica ... usando un El algoritmo "bueno" suele ser una mala idea, si se utiliza de forma incorrecta.

    
respondido por el cornelinux 01.10.2018 - 08:44
fuente

Lea otras preguntas en las etiquetas