Supongamos que estoy creando una aplicación web local (por ejemplo, una extensión de navegador) en HTML5 para cifrar una base de datos localmente. El acceso a la base de datos se controla mediante una contraseña y una clave maestra criptográfica se deriva de la contraseña mediante un PBKDF. Quiero almacenar la clave maestra derivada en la memoria solo mientras la aplicación está en uso para poder cifrar y descifrar los registros según sea necesario.
He examinado el uso de sessionStorage para este propósito. La ventaja es que la clave solo debe estar en la memoria y disponible en la pestaña del navegador actual. La clave se debe eliminar si esa pestaña o el navegador está cerrado. La ventaja es que si necesita actualizar la pestaña del navegador, seguirá teniendo la sesión activa y la clave maestra, de lo contrario tendrá que volver a ingresar la contraseña en cada actualización. Sin embargo, la actualización puede ser poco frecuente ya que es una aplicación de una sola página.
Al leer la especificación de sessionStorage en W3C, existe alguna preocupación:
La vida útil de un contexto de navegación puede no estar relacionada con la vida útil del proceso real del agente de usuario, ya que el agente de usuario puede admitir la reanudación de sesiones después de un reinicio.
¿Se trata de un reinicio del sistema operativo o un reinicio del navegador?
Lo que absolutamente quiero evitar es tener la clave criptográfica escrita en el disco donde es muy difícil deshacerse de ella. ¿La cita anterior indica que existe la posibilidad de que la clave en sessionStorage pueda almacenarse en el disco como parte del proceso de recuperación / reinicio de fallos? ¿O es este proceso de reinicio generalmente manejado solo en memoria?
a) ¿Alguien tiene algún conocimiento sobre cómo los exploradores de código abierto de Nivel 1 (Firefox, Chromium) manejan el SessionStorage y si los contenidos podrían escribirse en el disco, incluso temporalmente en el caso de un bloqueo del navegador?
b) ¿Existen mitigaciones para evitar que se produzcan fugas de la clave al disco en un bloqueo o reinicio del navegador? ¿Hay alguna configuración about:config
que se pueda usar para inhabilitar la recuperación de la sesión después de un fallo del navegador?
c) ¿Es la opción más segura no usar sessionStorage para almacenar una clave? ¿O tal vez mitigue el riesgo utilizando también el cifrado completo del disco?
Gracias por tu ayuda.