sesión almacenando una contraseña de clave de cifrado

1

Para una aplicación web que almacena archivos cifrados, se utiliza una clave pública para cifrar claves / iv aleatorias, que se utilizan para cifrar los archivos almacenados. La clave privada, utilizada para el descifrado, está protegida por una contraseña que debe ser proporcionada por el usuario para acceder a los archivos (la naturaleza del sistema es tal que solo un usuario tiene / necesita la capacidad de acceder a los archivos sin cifrar).

Para evitar que el usuario tenga que escribir la contraseña de la clave privada en cada carga de página, debe almacenarse (por ejemplo, durante 10 minutos). La pregunta es, ¿dónde / cómo almacenarlo?

  • Ponerlo en una cookie es análogo al usuario que lo escribe en cada Solicitud, así que eso es una ventaja. Pero, entonces alguien con acceso a su computadora podría mirar los datos de su navegador y ver / recuperar la clave en texto plano. Además, depende del navegador el que caduque a tiempo (lo que podría elegir no hacerlo)

  • Por otro lado, podría almacenarse en los datos de sesión en el servidor. Esto da un mejor control sobre su vencimiento, y significa la clave no está volando por todo el internet con cada solicitud (obviamente, esto es todo https, pero aún así). Pero eso significa almacenar el la contraseña, la clave y los datos, todos en la misma máquina (aunque temporalmente), que tampoco parece tan bueno.

¿Es uno de estos objetivamente mejor? ¿Hay alguna alternativa mejor que cualquiera?

    
pregunta frostcoinage 10.11.2017 - 19:21
fuente

2 respuestas

1

Si está guardando en caché la clave, siempre habrá algunos riesgos.

Ese riesgo se puede mitigar mediante:

  • Restricción de la cantidad de tiempo que la clave se guarda en la memoria
  • Restricción a la memoria dinámica solo para que se pierda en el cierre de la página
  • Usar un hardware o un almacén de claves virtual para facilitar el acceso a la clave, pero es más seguro. Ubikey o el almacén de certificados de Windows serían ejemplos.

Las claves privadas NUNCA DEBEN almacenarse en un servidor a menos que estén cifradas con una clave que solo el usuario tiene (lo que hace que el proceso sea más bien redundante). Una vez que la clave privada de un usuario se almacena en un servidor, ya no se puede considerar segura.

    
respondido por el Julian Knight 12.11.2017 - 14:01
fuente
0

Estás haciendo muchas suposiciones, muchas de las cuales están equivocadas. La más evidente es que el navegador tiene control exclusivo sobre cuándo caduca la cookie. Puedes eliminarlo en una respuesta del servidor cuando quieras. Puede almacenar más de una pieza de datos en una cookie (como un tiempo de caducidad y una firma para protegerse contra modificaciones. Si alguien tiene acceso a la memoria y al almacenamiento en el cliente durante una sesión, entonces tiene acceso a los datos que usted conoce). No es necesario almacenar el texto claro de la clave en el cliente para permitir el descifrado en el servidor (puede usar una clave de sesión adicional generada en el servidor, aunque si el objetivo es no usar una sesión http convencional no está relacionado con la capacidad, entonces hay poca diferencia al solo mantener la clave del servidor).

El uso de una sesión http simplifica muchos otros problemas (como csrf).

En cuanto a cuál de estos es mejor, o qué podría ser más apropiado, eso depende de su modelo de amenaza.

    
respondido por el symcbean 13.12.2017 - 00:50
fuente

Lea otras preguntas en las etiquetas