¿Es seguro generar JWT usando una clave privada?

0

Actualmente estoy creando una API de Rails usando ruby-jwt como mi generador de token de acceso. Elijo RS256 (RSA + SHA256) como mi algoritmo.

ruby-jwt usa una clave privada para codificar cargas útiles, y usa una clave pública para decodificar tokens.

Mi pregunta es, ¿es este enfoque lo suficientemente seguro? ¿Hay alguna posibilidad de que un atacante pueda explotar la clave privada desde una gran cantidad de tokens? ¿Por qué no usa una clave pública para codificar y una clave privada para decodificar?

    
pregunta Aetherus 12.06.2016 - 10:04
fuente

1 respuesta

2

Cuando se habla de hacer "reclamos", esto es exactamente cómo se hace. Una clave privada no debe ser distribuida. El guardián de la clave es el usuario auténtico de la clave. Les permite emitir reclamos auténticos. Si esa clave estuviera alguna vez comprometida, entonces se podrían hacer otras reclamaciones que serían aceptadas como auténticas. En otras palabras, quien tenga la clave privada puede hacerse pasar por un oráculo autorizado.

La clave pública, por otro lado, está destinada a ser distribuida a todos los servidores que deben confiar al propietario de la clave privada. Esta clave no permite que nadie haga reclamos, pero permite que todos reconozcan que el reclamo es cierto. Otras tecnologías, como SAML, utilizan una técnica similar: el servidor emisor posee un certificado privado y las partes confiables utilizan el certificado público de ese servidor para verificar la afirmación.

Para lo que vale, no hay nada especial en las claves públicas y privadas. Podría intercambiarlos una vez que se hayan generado, pero antes de que se distribuyera la clave pública, funcionaría de la misma manera. Y, técnicamente, sí, ya que JWT tiene un formato documentado, usted sabe cómo se debe ver la carga útil, lo que debilitaría un poco la seguridad de la clave, pero aún así no ayuda realmente, ya que cada bit en una clave Afecta múltiples bits. Sería muy difícil utilizar un ataque de texto sin formato elegido incluso contra un gran número de tokens, simplemente debido a la gran cantidad de bits que se utilizan. Recuerde, el objetivo de recuperar la clave privada no es obtener los datos descifrados (porque la clave pública ya está disponible), es cómo hacerse pasar por un servidor determinado.

    
respondido por el phyrfox 12.06.2016 - 12:03
fuente

Lea otras preguntas en las etiquetas