Estamos planeando usar JSON Web Tokens (JWT) para nuestro servidor de autenticación, y actualmente estoy evaluando qué enfoque de encriptación se debe tomar para el token JWE.
Parece que hay dos opciones para administrar la clave de cifrado simétrica:
- El emisor / destinatario comparte previamente una clave simétrica y encripta todos los tokens usando eso; la clave simétrica no está incluida en el mensaje.
- El emisor genera una clave simétrica por token, luego cifra el token utilizando la clave pública del destinatario y lo incluye en el mensaje.
No me parece que haya ninguna ventaja de seguridad inherente de ninguno de los dos, siempre que se utilicen algoritmos lo suficientemente sólidos y tamaños de clave lo suficientemente grandes.
Parece que la principal diferencia es que, en el primer caso, el destinatario debe confiar en que el emisor no filtrará la clave compartida previamente, mientras que en el segundo caso solo el destinatario tendrá la clave de descifrado necesaria. Sin embargo, dado que la carga útil de este token JWE será un token JWS firmado, el destinatario también debe tener una sólida relación de confianza con el emisor y debe confiar en que no pierda su propia clave de firma privada, por lo que no parece ser un gran problema. problema.
Dado que la opción 1 produce un token mucho más pequeño (debido a que no tiene una clave simétrica cifrada incrustada), ¿hay alguna buena razón para preferir la opción 2?