Modelo de seguridad
Esta página describe qué protege Rempar, cómo, y qué no protege. El documento de referencia es el protocolo v1, cuyas cadenas están congeladas.
Objetivo
Una compromisión completa del servidor, de sus copias de seguridad y de su administrador no debe revelar ningún secreto: ni contraseña maestra, ni contenido, ni siquiera el nombre de un elemento.
Derivación de las claves (solo en el dispositivo)
password = NFKC(saisie)
master_key = Argon2id(password, kdf_salt, m=65536 KiB, t=3, p=4, 32 octets)
auth_key = HKDF-SHA256(master_key, info="rempart/auth/v1")
wrap_key = HKDF-SHA256(master_key, info="rempart/wrap/v1")
kdf_salt: 16 bytes aleatorios, creados con la cuenta o la bóveda local.auth_keyse envía al servidor como contraseña de cuenta. No permite derivar nada más.wrap_keynunca sale del dispositivo. Sella la clave de la bóveda.- Los clientes rechazan parámetros Argon2id más débiles que m=19456, t=2, p=1, incluso si el servidor los propone.
Formato de sellado
seal(key, plaintext, aad) = base64( 0x01 || nonce(24) || XChaCha20-Poly1305(key, nonce, plaintext, aad) )
Cada uso tiene su cadena AAD congelada: rempart/vaultkey/v1, rempart/itemkey/v1|<item_id>, rempart/item/v1|<item_id>, rempart/export/v1, etc. Un blob no puede reproducirse en otro contexto ni adjuntarse a otro elemento.
Bóveda y elementos
vault_key: 32 bytes aleatorios, creados una vez por bóveda.- Cada elemento tiene su propia
item_keyde 32 bytes. El blob almacenado es{ k: seal(vault_key, item_key), c: seal(item_key, contenu) }. - La lista se muestra desde un índice sellado local. Abrir una ficha solo descifra esa ficha.
- Los identificadores de elementos son UUID v4 vinculados en los dos AAD.
Kit de emergencia
32 bytes aleatorios, mostrados una sola vez en Crockford base32. recovery_wrap = HKDF(recovery_key, "rempart/recovery-wrap/v1") sella una copia de la clave de la bóveda; recovery_auth = HKDF(recovery_key, "rempart/recovery-auth/v1") autentica una restauración ante el servidor.
Cuenta y tokens
- Preconexión antienumeración: se devuelve una sal ficticia determinista para los correos desconocidos.
- Token de acceso por dispositivo (60 min) y token de actualización con rotación (30 días). Un segundo uso de un token ya renovado revoca el dispositivo (
token_reused). - 2FA TOTP opcional, recomendada. Obligatoria para los administradores.
- Todas las rutas sensibles tienen límite de frecuencia.
En el dispositivo
- Secretos ocultos con 12 puntos fijos, vueltos a ocultar tras 30 s.
- Portapapeles vaciado tras 30 s (ajustable de 10 s a 2 min). Las frases de recuperación nunca se copian enteras.
- Bloqueo tras 5 min, al suspender y al cerrar; la clave de la bóveda se pone a cero en memoria.
- Esperas progresivas tras cada fallo: 30 s, 1 min, 5 min. Nunca un borrado silencioso.
- Android:
FLAG_SECUREimpide las capturas. iOS y macOS: velo de privacidad en el selector de aplicaciones. - Biometría: la clave de la bóveda se confía al llavero del sistema protegido por Touch ID, Face ID o la huella dactilar, nunca a un archivo.
Qué no cubre el modelo
- Un dispositivo comprometido mientras la bóveda está abierta (software espía, registrador de teclas).
- Una contraseña maestra débil: Argon2id ralentiza el ataque, no lo hace imposible.
- La pérdida simultánea de la contraseña maestra y del kit de emergencia.
- Los metadatos de la cuenta: correo electrónico, número de elementos, tamaño de los blobs, fechas y plataformas de los dispositivos.
Informar de una vulnerabilidad
Escriba a security@rempar.org. Acusamos recibo en 48 horas y publicamos una corrección antes de cualquier divulgación.
¿Una pregunta sin respuesta aquí? support@rempar.org