Autenticación y clave maestra
La autenticación en Passwork consta de dos etapas: autenticación básica y verificación de la contraseña maestra (cuando CSE está habilitado).
Autenticación en dos etapas
| Etapa | Propósito | Dónde se ejecuta |
|---|---|---|
| Autenticación básica | Verificación de credenciales | Servidor |
| Verificación de la contraseña maestra | Acceso a los datos cifrados | Cliente + Servidor |
Etapa 1: Autenticación básica
Autenticación local
- El usuario introduce su nombre de usuario y contraseña
- El servidor verifica la contraseña (PBKDF2, 600.000 iteraciones, SHA-512)
- En caso de éxito, se emiten Access Token y Refresh Token
- El cliente almacena los tokens para solicitudes posteriores
Parámetros de hashing de contraseña del servidor:
| Parámetro | Valor |
|---|---|
| Algoritmo | PBKDF2 |
| Función hash | SHA-512 |
| Iteraciones | 600.000 |
| Longitud de clave | 512 bits |
Autenticación SSO / LDAP
Con SSO o LDAP:
- El usuario es redirigido al proveedor externo
- Tras la autenticación exitosa, regresa a Passwork
- El sistema crea la sesión y emite tokens
- Si CSE está habilitado, se solicita la introducción de la contraseña maestra
Etapa 2: Verificación de la contraseña maestra
Con el cifrado del lado del cliente habilitado, se requiere la introducción de la contraseña maestra después de la autenticación básica.
Obtención de parámetros
El cliente solicita al servidor los parámetros para el cálculo de la clave maestra:
- Salt — único por usuario
- Número de iteraciones — 300.000
- Tipo de algoritmo — PBKDF2
Cálculo de la clave maestra
La derivación de clave se realiza en el cliente:
| Parámetro | Valor |
|---|---|
| Algoritmo | PBKDF2 |
| Función hash | SHA-256 |
| Iteraciones | 300.000 |
| Longitud de clave | 512 bits |
| Entrada | Contraseña maestra + Salt |
| Salida | Clave maestra (Base64) |
Cálculo del hash de verificación
Para confirmar la entrada correcta, se calcula un hash de la clave maestra:
| Parámetro | Valor |
|---|---|
| Algoritmo | SHA-256 |
| Entrada | Clave maestra (512 bits) |
| Salida | Hash (256 bits, cadena hexadecimal) |
Verificación del servidor
El servidor compara el hash recibido con el valor almacenado.
- El hash se calcula en el cliente a partir de una clave criptográficamente fuerte de 512 bits
- El servidor no conoce la clave maestra original
- El hashing adicional del lado del servidor no añade seguridad en este modelo Zero-Knowledge
Secuencia completa de autenticación
Fase 1 — Autenticación básica:
- El usuario introduce su nombre de usuario y contraseña
- El servidor verifica las credenciales (PBKDF2, SHA-512, 600K iteraciones)
- El servidor devuelve los tokens de acceso y la bandera CSE
Fase 2 — Contraseña maestra (si CSE está habilitado):
- El cliente solicita los parámetros PBKDF2 (salt, iteraciones)
- El usuario introduce la contraseña maestra
- El cliente calcula la clave maestra: PBKDF2(password, salt, 300K, SHA-256) → 512 bits
- El cliente calcula el hash: SHA-256(master key) → 256 bits
- El cliente envía el hash al servidor
- El servidor compara los hashes
- En caso de éxito, el servidor devuelve la clave privada RSA cifrada
Fase 3 — Descifrado de la clave:
- El cliente descifra la clave privada RSA con la clave maestra (AES-256-CBC)
- El cliente está listo para trabajar con los datos cifrados
La contraseña maestra nunca sale del cliente. El servidor solo ve el hash de la clave maestra. La clave privada RSA se transmite únicamente en forma cifrada.
Parámetros del salt
| Parámetro | Valor |
|---|---|
| Longitud | 20 caracteres |
| Alfabeto | A-Z, a-z, 0-9, @, ! (64 caracteres) |
| Entropía | ~120 bits |
| Generación | Servidor, al crear/cambiar la contraseña maestra |
| Almacenamiento | En el perfil del usuario en el servidor |
Propiedades del salt:
- Cada usuario tiene un salt único
- Se genera un nuevo salt cuando se cambia la contraseña maestra
- El salt no es secreto, pero garantiza la unicidad del hash
Escenarios de autenticación
Primer inicio de sesión (establecimiento de la contraseña maestra)
- El usuario completa la autenticación básica
- El sistema determina que la contraseña maestra no está establecida
- El servidor genera un nuevo salt
- El usuario introduce la nueva contraseña maestra
- El cliente realiza las operaciones criptográficas:
- Calcula la clave maestra (PBKDF2)
- Genera el par de claves RSA (2048 bits)
- Cifra la clave privada RSA con la clave maestra (AES-256-CBC)
- Calcula el hash de la clave maestra (SHA-256)
- El cliente envía al servidor:
- Clave pública RSA (abierta)
- Clave privada RSA cifrada
- Hash de la clave maestra
Inicio de sesión posterior
- Autenticación básica
- Obtener parámetros PBKDF2 (salt, iteraciones)
- Introducir contraseña maestra
- Calcular la clave maestra y el hash
- Verificar el hash en el servidor
- Descifrar la clave privada RSA (AES-256-CBC)
Cambio de contraseña maestra
- El usuario introduce la contraseña maestra actual
- Verificación de corrección (comparación de hash)
- Introducir la nueva contraseña maestra
- Generación de un nuevo salt en el servidor
- Recalcular la clave maestra y el hash
- Descifrar la clave privada RSA con la clave maestra antigua
- Recifrar la clave privada RSA con la nueva clave maestra (AES-256-CBC)
- Guardar los nuevos datos en el servidor
Restablecimiento de la contraseña maestra (por el administrador)
Cuando el administrador restablece la contraseña maestra:
- Se genera un nuevo par de claves RSA
- El usuario pierde acceso a los datos previamente cifrados
- Se requiere volver a otorgar acceso a las bóvedas
- El administrador inicia el restablecimiento
- Se eliminan los datos criptográficos del usuario
- El usuario establece una nueva contraseña maestra
- Se generan nuevas claves RSA
- Los administradores de bóvedas deben volver a otorgar acceso
Modelo de amenazas y protección
Protección de la contraseña maestra
| Amenaza | Protección |
|---|---|
| Interceptación durante la entrada | La contraseña maestra se procesa solo en el navegador |
| Interceptación durante la transmisión | Solo se envía al servidor el hash de la clave maestra |
| Ataque de fuerza bruta | PBKDF2 con 300.000 iteraciones |
| Tablas rainbow | Salt único por usuario |
| Compromiso del servidor | El servidor no almacena la contraseña maestra ni la clave maestra |
Protección del hash de la clave maestra
| Amenaza | Protección |
|---|---|
| Filtración del hash | El hash se calcula a partir de una clave de 512 bits (no de la contraseña) |
| Adivinación basada en el hash | PBKDF2 hace cada intento computacionalmente costoso |
| Recuperación de contraseña | Primero hay que adivinar la clave, luego la contraseña |
Protección de la sesión
| Parámetro | Access Token | Refresh Token |
|---|---|---|
| Duración | ~2,8 horas | 36 horas |
| Propósito | Autenticación de solicitudes | Renovación del Access Token |
| Almacenamiento | Almacenamiento seguro del navegador | Almacenamiento seguro del navegador |
Manejo de errores
Contraseña maestra incorrecta
- El hash calculado no coincide con el valor almacenado
- El servidor devuelve un error
- El cliente solicita volver a introducir la contraseña
- Es posible aplicar límites de intentos (configurado por el administrador)
Parámetros PBKDF2 no encontrados
Si no se encuentran los parámetros — la contraseña maestra no está establecida, se requiere la configuración inicial.
No se puede descifrar la clave RSA
Si falla el descifrado de la clave privada RSA — contraseña maestra incorrecta o datos corruptos.
Resumen criptográfico
| Operación | Algoritmo | Parámetros |
|---|---|---|
| Hashing de contraseña (servidor) | PBKDF2-SHA512 | 600.000 iteraciones |
| Derivación de clave maestra (cliente) | PBKDF2-SHA256 | 300.000 iteraciones, 512 bits |
| Hash de verificación | SHA-256 | 256 bits |
| Cifrado de clave RSA | AES-256-CBC | Clave maestra |
| Generación de clave RSA | RSA-OAEP | 2048 bits, SHA-256 |