¿Es necesario firmar o fallará una cadena encriptada modificada?
¿descifrar?
En el mundo de la criptografía, un mensaje modificado se denomina mensaje manipulado. El cifrado por sí solo no proporciona protección contra la manipulación, pero los cifrados en bloque no se usan solos. Los cifrados de bloque se utilizan en diferentes modos, p. ECB, CBC, CTR, GCM, etc. Los diferentes modos tienen diferentes propiedades, algunos de ellos brindan protección contra la manipulación (a.k.a. Autenticated Encryption, es decir, GCM) y otros no.
Si está utilizando un modo de cifrado autenticado, un mensaje manipulado no podrá descifrar. Pero, si está utilizando otros modos como CBC o CTR (estos son los más difundidos en mi experiencia), un mensaje manipulado descifrará felizmente a menos que exista un error de relleno
Si no resulta en un json válido que pueda ser analizado en una sesión
estará vacío de la misma manera que lo haría con un inválido
firma.
Esto dependerá de cómo su aplicación maneje un json no válido, y aquí es donde puede aparecer un oráculo de relleno.
Mi entendimiento es que los ataques de oráculo de relleno funcionan obteniendo
retroalimentación del servidor. Sería una cadena json vacía cifrada
suficiente?
Se produce un ataque de oráculo de relleno cuando el atacante envía un mensaje alterado y puede distinguir si el relleno es correcto o no. Y esta es la razón por la que dije anteriormente que la forma en que su aplicación maneja un JSON no válido puede derivar en un oráculo de relleno
Imagine que un atacante envía un mensaje manipulado con un relleno incorrecto, su aplicación intentará descifrar el mensaje pero se lanzará una excepción de relleno incorrecta. Después de que el atacante manipule el mensaje de nuevo, pero esta vez es capaz de forjar un relleno correcto, su aplicación descifrará correctamente el mensaje, pero el contenido será JSON no válido, la aplicación intentará analizar el JSON no válido y emitirá un error. no se puede analizar
Si el atacante puede distinguir ambos escenarios porque el estado HTTP devuelto es diferente, o un seguimiento de pila muestra los diferentes mensajes de error, o simplemente cronometrando el tiempo de respuesta. Luego, el atacante tiene un oráculo de relleno y puede recuperar el texto sin formato de la cookie
Para evitar esto, siempre debe proporcionar el mismo mensaje de error cuando el mensaje no se puede descifrar y el mensaje se descifra pero el contenido no es válido. Además, debe asegurarse de que ambos escenarios requieran el mismo tiempo para responder.
OMI, el mejor enfoque sería utilizar un modo de cifrado autenticado que le ofrezca cifrado y firma juntos y deje que el marco de cifrado / biblioteca lo maneje
Por cierto, mencioné un modo de cifrado que nunca debería usarse. Es el BCE, si está utilizando este modo (algunas bibliotecas lo tienen por defecto) cámbielo por es un modo débil