Almacenamiento local del navegador
Passwork permite guardar la clave maestra en el navegador para evitar introducir la contraseña maestra en cada inicio de sesión. Se utiliza el Local Storage Secret Code — un token generado por el servidor — para la protección.
La clave maestra guardada está protegida por un token que solo se emite tras una autenticación básica exitosa. Sin acceso a la cuenta, es imposible descifrar los datos del localStorage.
Local Storage Secret Code
Qué es
Local Storage Secret Code es un token aleatorio que:
- Se genera en el servidor cuando se crea un usuario
- Se emite al cliente tras una autenticación exitosa
- Se utiliza para cifrar la clave maestra en el localStorage
Características
| Parámetro | Aplicación web | Extensión del navegador |
|---|---|---|
| Longitud | 100 caracteres | 60 caracteres |
| Alfabeto | A-Z, a-z, 0-9 | A-Z, a-z, 0-9 |
| Entropía | ~596 bits | ~357 bits |
| Generación | En el servidor | En el servidor |
| Almacenamiento del token | En el servidor | En el servidor |
Ciclo de vida
- Creación — cuando se registra el usuario, el servidor genera el Secret Code
- Emisión — con cada autenticación exitosa, el servidor envía el Secret Code al cliente
- Uso — el cliente cifra la clave maestra y la guarda en el localStorage
- Rotación — el Secret Code puede ser regenerado por el administrador
Proceso de guardado de la clave maestra
Secuencia de guardado:
- El usuario activa la opción «Recordar contraseña maestra»
- El usuario introduce la contraseña maestra
- El cliente calcula la clave maestra (PBKDF2, 300.000 iteraciones, SHA-256)
- El cliente envía el hash de la clave maestra al servidor para verificación
- El servidor confirma la corrección y devuelve el Local Storage Secret Code
- El cliente cifra la clave maestra con el Secret Code (AES-256-CBC)
- La clave maestra cifrada se guarda en el localStorage
- El Secret Code no se guarda en el localStorage
Algoritmo de cifrado
| Parámetro | Valor |
|---|---|
| Algoritmo | AES-256-CBC |
| Relleno | PKCS#7 |
| Clave | Local Storage Secret Code (100 caracteres → 256 bits) |
| IV | Generado automáticamente (128 bits) |
Qué se guarda en el localStorage
| Datos | Formato | Protección |
|---|---|---|
| Clave maestra cifrada | Cadena Base64 | AES-256-CBC |
| ID del usuario | Cadena | — |
| Configuración de la aplicación | JSON | — |
- Contraseña maestra (nunca)
- Local Storage Secret Code (se emite con cada autenticación)
- Clave maestra sin cifrar
- Clave privada RSA
Proceso de recuperación de la clave maestra
Secuencia de inicio de sesión automático:
- El usuario abre la aplicación
- El cliente verifica si existe una clave maestra cifrada en el localStorage
- Si la clave existe — el cliente la recuerda para su posterior descifrado
- El usuario completa la autenticación básica (usuario/contraseña)
- El servidor verifica las credenciales
- El servidor devuelve los tokens de acceso y el Local Storage Secret Code
- El cliente descifra la clave maestra con el Secret Code (AES-256-CBC)
- La clave maestra se recupera — no se requiere introducir la contraseña maestra
Condiciones para el inicio de sesión automático
La recuperación automática de la clave maestra es posible si:
| Condición | Descripción |
|---|---|
| Presencia de la clave | El localStorage contiene la clave maestra cifrada |
| Autenticación | El usuario completó la autenticación básica |
| Secret Code válido | El servidor devolvió el Secret Code correcto |
| Descifrado exitoso | Los datos no están corruptos |
Modelo de seguridad
Protección contra amenazas
| Amenaza | Protección |
|---|---|
| Robo del localStorage | Los datos están cifrados, la clave de cifrado está en el servidor |
| Ataque XSS | El Secret Code no se almacena en el cliente |
| Robo de sesión | Se requiere autenticación básica |
| Acceso físico al dispositivo | Se requiere la contraseña de la cuenta |
Principio clave
Sin una autenticación exitosa en el servidor, es imposible descifrar la clave maestra.
Incluso si un atacante:
- Obtiene acceso al localStorage
- Extrae la clave maestra cifrada
- Obtiene acceso al sistema de archivos del dispositivo
No podrá descifrar los datos sin:
- La contraseña de la cuenta (o acceso SSO/LDAP)
- Una autenticación exitosa en el servidor
- Obtener el Secret Code del servidor
Limitaciones
| Escenario | Riesgo |
|---|---|
| Dispositivo compartido | Otro usuario puede obtener acceso tras su autenticación |
| Sincronización del navegador | La clave cifrada se sincroniza entre dispositivos |
| Compromiso del servidor | Un atacante podría obtener el Secret Code |
Gestión de datos guardados
Desactivación de la función
El usuario puede:
- Desmarcar «Recordar contraseña maestra» en la configuración
- Los datos se eliminarán del localStorage
Restablecimiento forzado
El administrador puede:
- Regenerar el Secret Code del usuario
- Todas las claves maestras guardadas quedan invalidadas
- El usuario deberá introducir la contraseña maestra nuevamente
Cierre de sesión
Al cerrar sesión:
- Se eliminan los tokens de sesión
- La clave maestra cifrada puede permanecer en el localStorage (para el próximo inicio de sesión)
- El usuario puede elegir opcionalmente «Cerrar sesión y olvidar»
Recomendaciones de seguridad
Cuándo utilizar «Recordar»
Recomendado:
- En un dispositivo personal con contraseña/biometría
- Para uso diario de Passwork
- Cuando la comodidad importa y el dispositivo está protegido
No recomendado:
- En dispositivos compartidos/públicos
- Con requisitos estrictos de seguridad
- Si el dispositivo puede perderse/ser robado
Políticas organizativas
El administrador puede:
- Desactivar la función «Recordar» a nivel de política
- Limitar el período de validez de la clave guardada
- Requerir la reintroducción periódica de la contraseña maestra
Protección de la memoria
Ofuscación en memoria
Además del cifrado del localStorage, Passwork utiliza un mecanismo para proteger las contraseñas en la memoria del navegador:
| Método | Descripción |
|---|---|
| División | La contraseña se divide en partes aleatorias |
| Ofuscación | Cada parte se ofusca (desplazamiento de caracteres) |
| Mezcla | Las partes se almacenan en orden aleatorio |
| Recuperación | El orden de recuperación se almacena por separado |
Esto es ofuscación, no protección criptográfica. Dificulta la lectura simple de la memoria (por ejemplo, en volcados) pero no protege contra ataques dirigidos con un depurador.
Diferencias de la extensión del navegador
La extensión del navegador tiene diferencias de implementación:
| Parámetro | Aplicación web | Extensión |
|---|---|---|
| Longitud del Secret Code | 100 caracteres (~596 bits) | 60 caracteres (~357 bits) |
| Almacenamiento | localStorage | chrome.storage.local |
| Aislamiento | Dominio compartido | Extensión aislada |
| Protección XSS | Depende de CSP | Aislamiento completo |
Ventajas de la extensión
- Almacenamiento aislado — inaccesible desde páginas web
- Contexto de ejecución separado — protección contra scripts maliciosos
- Protección XSS — los sitios visitados no pueden acceder a los datos de la extensión