UniAuth
La seguridad no es una capa — es la base

Creado para la era cuántica

UniAuth está diseñado desde cero con la seguridad como valor por defecto, no añadida después. Cada hash, cada token, cada sesión está protegido con criptografía que resiste los ataques de hoy y de mañana.

Cimientos criptográficos

Cifrado en reposo AES-256-GCM

Cada valor sensible — secretos TOTP, tokens de acceso OAuth, claves privadas PQC, contraseñas de enlace LDAP — se cifra con AES-256-GCM antes de tocar la base de datos. Formato: iv:tag:ciphertext.

La clave de cifrado es un secreto de 256 bits independiente (ENCRYPTION_KEY), no derivado del secreto JWT. Rotar uno no compromete el otro.

Firmas de sesión ML-DSA-44

Cada sesión lleva una firma digital poscuántica (FIPS 204 ML-DSA-44, antes CRYSTALS-Dilithium). En cada solicitud, touchSession() verifica la firma; cualquier discrepancia revoca la sesión de inmediato y registra el evento.

Incluso si una firma clásica ECDSA o RSA fuera vulnerada por un ordenador cuántico, las sesiones ML-DSA siguen siendo seguras.

Hash de contraseñas Argon2id

Las contraseñas nuevas usan Argon2id (recomendado por OWASP: 64 MB de memoria, 3 iteraciones, 4 de paralelismo). Los hashes bcrypt heredados se migran de forma transparente al iniciar sesión. La fortaleza de la contraseña se evalúa con zxcvbn (puntuación ≥ 2 requerida) y se comprueba con la API de k-anonimato de HaveIBeenPwned.

Identificadores de sujeto por pares

Las apps conectadas nunca ven tu UUID real. Cada app recibe un identificador único, determinista y específico de la app: HMAC-SHA256(userId:clientId, secret). Las apps no pueden correlacionar usuarios entre servicios — tu privacidad es estructural, no basada en políticas.

Protección en tiempo de ejecución

Detección adaptativa de amenazas

Puntuación estadística del riesgo de inicio de sesión en 6 factores: IP nueva, user-agent nuevo, hora inusual, ráfaga de intentos fallidos, anomalía geográfica y confianza del dispositivo. Los inicios de sesión de alto riesgo activan automáticamente 2FA reforzada o un CAPTCHA.

Bloqueo progresivo de la cuenta

5 fallos = 1 min, 10 = 5 min, 15 = 15 min, 20+ = 1 hora. Devuelve un 401 genérico (sin enumeración de cuentas). Se restablece tras una autenticación correcta. El bloqueo se aplica por igual a los flujos de contraseña, passkey y enlace mágico.

Ciclo de vida de la sesión

Tiempo de inactividad de 24 horas + vida útil absoluta de 30 días. Huella SHA-256 (IP + UA) verificada en cada solicitud; cualquier discrepancia termina la sesión de inmediato. Máximo 10 sesiones simultáneas por usuario, se expulsa la más antigua.

Salidas a prueba de SSRF

Cada solicitud HTTP saliente (webhooks, descubrimiento OIDC, cierre de sesión backchannel) pasa por safeFetch — resuelta por DNS, fijada a la dirección IP validada. El rebinding de DNS entre la comprobación y la conexión del socket es imposible.

CORS + CSP + limitación de tasa

CORS estricto del mismo origen en todas las rutas de API. CSP con frame-ancestors 'none'. Limitación de tasa de doble capa (en memoria + ventana deslizante Redis). Umbrales por ruta ajustados al perfil de riesgo de cada punto de conexión.

Todo en tiempo constante

Cada comparación de hash, verificación de token, comprobación de código de respaldo y búsqueda de token SCIM usa crypto.timingSafeEqual. Sin canales laterales de temporización, en ningún sitio.

Cumplimiento y auditoría

Cada acción se registra, cada cadena se verifica, cada exportación se redacta.

Registro de auditoría encadenado por hash a prueba de manipulaciones
Registros de actividad con IP, UA y puntuación de riesgo
Exportación de datos RGPD (JSON)
Autoeliminación de la cuenta con purga total
Políticas de retención de datos configurables
Historial de contraseñas (por defecto: 5)
Notificaciones de eventos firmadas por webhook
Registro de auditoría de suplantación de administrador
Sistema de niveles de confianza (T0–T4)

¿Preguntas sobre nuestra seguridad?

Estaremos encantados de hablar de nuestra arquitectura, compartir informes de auditoría o repasar nuestro modelo de amenazas con tu equipo de seguridad.