Almacenar de forma segura los datos de la sesión en las cookies

5

Estoy intentando crear una arquitectura de servidor de aplicaciones sin estado y me gustaría almacenar datos de sesión en cookies. Todas las páginas que usen la sesión se servirán a través de HTTPS. Estaba planeando usar AES256 para garantizar que el cliente no pueda cambiar el valor de la cookie.

Entonces el flujo se vería así:

  1. El servidor recibe la solicitud y descifra la cookie de sesión usando la clave AES que se almacenaría en el servidor.
  2. Si se cambia la sesión, la nueva sesión se cifra con AES y la clave secreta. Luego se envía un nuevo valor con la respuesta.

¿Hay fallas serias con este enfoque? Me gustaría obtener otras opiniones antes de implementarlo.

    
pregunta Brian D. 08.08.2015 - 05:51
fuente

2 respuestas

3
  

Estaba planeando utilizar el usuario AES256 para garantizar que el cliente no pueda cambiar el valor de la cookie.

El cifrado proporciona confidencialidad, no proporciona autenticación.

Si no desea que los usuarios vean un valor de datos de sesión, debe cifrar y luego autenticar el valor. Esto evita que un ataque de cambio de bit cambie el valor dentro del token cifrado porque el hash con clave ya no coincidirá si se intercambian algunos bits.

Si no se requiere confidencialidad, simplemente puede autenticar. Por ejemplo, podría usar un HMAC sobre SHA-256 . Esto le mostrará al usuario final cuál es el valor en texto claro, sin embargo, no podrán cambiar el valor porque no podrán volver a calcular el valor hash ingresado sin la clave.

por ejemplo Tu cookie se configurará de la siguiente manera:

Set-Cookie: Session=Username=admin&expires=20150809104100&hash=7C2CD7DB7DF4055E782E3A5F70487FEB9A5CABEED3FB70F5D8772586FD8B2759

Expires evita que un usuario guarde su cookie fuera de línea para su uso posterior cuando no sean administradores porque el hash también se calcula al vencimiento:

Username=admin&expires=20150809104100

Puede usar este sitio para verificar esto (la clave utilizada fue stackexchange , sin embargo, debe usar un pseudoaleaje seguro criptográficamente clave de 128 bits generada).

Sin embargo, existe una tecnología estándar de Internet para hacer esto ya llamada Fichas web JSON . El algoritmo HS256 generará el valor del token del lado del cliente calculado por HMAC sobre SHA-256.

Si también desea el cifrado, elija A128GCM ; tenga en cuenta que una clave de 128 bits es suficiente para sus datos: una clave de 256 bits que utiliza AES-256 es más lenta e innecesaria. puede incluso ser menos seguro ya que hay diferencias significativas en cómo AES procesa una clave de 128 y 256 bits.

Como JSON Web Encryption solo admite algoritmos de cifrado autenticados, esto también evitaría el intercambio de bits.

    
respondido por el SilverlightFox 09.08.2015 - 13:15
fuente
2

El cifrado por sí solo no es suficiente porque solo proporciona confidencialidad y esta tarea también requiere autenticidad.

Si el texto simple en la cookie del atacante contiene algo como El número de usuario 9 está autenticado , entonces el atacante puede cambiar los bits en el texto cifrado que, cuando se descifre en el servidor, dirá Número de usuario 1 se autentica y se autentica como número de usuario 1. Esto se hace cambiando progresivamente los bits en el texto cifrado de la cookie y enviándolo al servidor.

Para evitar dicha manipulación, debe implementar cifrado autenticado que detectará (en el servidor) cambios no deseados en el texto cifrado (en el cliente).

    
respondido por el Cristian Dobre 09.08.2015 - 00:02
fuente

Lea otras preguntas en las etiquetas