Seguridad
Modelo de amenazas, arquitectura de cifrado y divulgación responsable de anonym.plus.
Principios de diseño
anonym.plus se basa en tres principios de seguridad:
- Offline-first: Toda la detección de PII y la pipeline de anonimización se ejecutan localmente. Los documentos nunca se suben a ningún servidor.
- Zero-knowledge: Su contraseña nunca sale de su dispositivo. Solo se envían pruebas criptográficas durante la autenticación. El servidor no puede acceder al contenido de su vault.
- Defensa en profundidad: Cifrado en reposo (AES-256-GCM), derivación de claves mediante Argon2id, bloqueo automático del vault y una frase de recuperación BIP39 de 24 palabras proporcionan protección por capas.
Modelo de amenazas
La siguiente tabla describe contra qué protege anonym.plus y qué queda fuera del alcance de sus garantías de seguridad.
| Amenaza | Mitigación | Estado |
|---|---|---|
| Documentos enviados a servidores externos | Todo el procesamiento se ejecuta localmente mediante Presidio + spaCy incluidos. Sin llamadas de red para la detección o anonimización de PII. | Mitigado |
| Datos del vault accedidos por un atacante con acceso al disco | Vault cifrado con AES-256-GCM. Clave derivada de la contraseña del usuario mediante Argon2id (64 MB de memoria, 3 iteraciones). Sin PIN o frase de recuperación, los datos son ilegibles. | Mitigado |
| Compromiso del servidor expone contraseñas de usuarios | Autenticación zero-knowledge. Las contraseñas se hashean en el lado del cliente antes de cualquier comunicación con el servidor. El servidor solo almacena pruebas criptográficas. | Mitigado |
| Claves de cifrado extraídas de la memoria | El material de claves se borra de la memoria cuando el vault se bloquea. Bloqueo automático tras 15 minutos de inactividad. | Mitigado |
| Man-in-the-middle en la comunicación API | Toda la comunicación API se realiza sobre HTTPS/TLS. No se implementa certificate pinning (TLS estándar de navegador/Tauri). | Parcialmente mitigado |
| Malware en el dispositivo del usuario | Fuera del alcance. Si un atacante tiene ejecución de código en su máquina, ninguna aplicación de escritorio puede garantizar la seguridad. Use protecciones a nivel de sistema operativo. | Fuera del alcance |
| La detección NLP no detecta entidades PII | Presidio + spaCy usan tanto NER (aprendizaje automático) como patrones regex. Umbrales de confianza configurables y paso de revisión manual. Los falsos negativos son posibles — revise siempre los resultados. | Parcialmente mitigado |
Arquitectura de cifrado
Cifrado del vault
Todos los datos locales (historial de procesamiento, claves de cifrado, configuración) se almacenan en un vault cifrado.
- Algoritmo
- AES-256-GCM (cifrado autenticado con datos asociados)
- Derivación de claves
- Argon2id con 64 MB de coste de memoria, 3 iteraciones, salida de 32 bytes
- Frase de recuperación
- Mnemónico BIP39 de 24 palabras (256 bits de entropía), generado durante la configuración inicial
- Desbloqueo rápido
- PIN opcional de 4-8 dígitos para mayor comodidad. Después de 3 intentos fallidos, se requiere la frase de recuperación.
- Bloqueo automático
- El vault se bloquea tras 15 minutos de inactividad (sin eventos de ratón, teclado o desplazamiento)
- Borrado de claves
- El material de claves de cifrado se borra de la memoria cuando el vault se bloquea
Cifrado de documentos (anonimización reversible)
Al usar el operador "Cifrar", las entidades PII se cifran con AES-256-GCM por clave para que puedan descifrarse posteriormente mediante la función de deanonimización.
- Algoritmo
- AES-256-GCM con nonce aleatorio por entidad
- Longitudes de clave
- 128-bit, 192-bit o 256-bit (256-bit recomendado y predeterminado)
- Almacenamiento de claves
- Zero-knowledge: los valores de las claves nunca salen del backend Rust. El frontend solo referencia claves por ID.
- Rotación de claves
- Genera nuevo material de clave. El valor antiguo de la clave se reemplaza permanentemente. Los documentos cifrados con la clave antigua requieren el valor antiguo para el descifrado.
Autenticación
- Manejo de contraseñas
- Las contraseñas se hashean en el lado del cliente usando Argon2id + HKDF + SHA-256 antes de cualquier comunicación con el servidor. El servidor nunca recibe contraseñas en texto plano.
- Tokens de sesión
- JWT con secretos separados para autenticación de usuario y administrador. Los tokens se almacenan en sessionStorage (se borran al cerrar la pestaña).
- Autenticación de administrador
- Secreto JWT separado (ADMIN_JWT_SECRET). Contraseña mínima de 12 caracteres. Autenticación de dos factores basada en TOTP.
Lo que ve el servidor
El servidor de anonym.plus gestiona cuentas, licencias y facturación de suscripciones. Esto es exactamente lo que puede y no puede acceder:
- Puede acceder a: Dirección de correo electrónico, estado de suscripción, activaciones de máquina, tickets de soporte, metadatos de pago (vía Stripe/PayPal).
- No puede acceder a: Sus documentos, resultados de detección de PII, salidas anonimizadas, claves de cifrado, contenido del vault, historial de procesamiento o contraseña.
Para un desglose completo de los datos recopilados, consulte la Política de Privacidad.
Divulgación responsable
Reportar una vulnerabilidad de seguridad
Si descubre una vulnerabilidad de seguridad en anonym.plus, le animamos a la divulgación responsable. Por favor, repórtela a través de nuestro formulario de contacto con la categoría "Security".
Al reportar, incluya: una descripción de la vulnerabilidad, pasos para reproducirla, la versión afectada y el impacto potencial.
Nos esforzamos por confirmar los reportes en 48 horas y proporcionar un cronograma de corrección en 7 días. No tomaremos acciones legales contra investigadores que sigan prácticas de divulgación responsable.
Nuestra información de contacto de seguridad también está disponible en /.well-known/security.txt (RFC 9116).
Componentes de código abierto
anonym.plus utiliza los siguientes componentes de código abierto para sus funciones críticas de seguridad:
- Microsoft Presidio — Motor de detección de PII (Apache 2.0)
- spaCy — Modelos NLP para Named Entity Recognition (MIT)
- Tesseract OCR — Extracción de texto de imágenes (Apache 2.0)
- Tauri — Framework de aplicaciones de escritorio con backend Rust (MIT/Apache 2.0)
- Argon2 — Hashing de contraseñas / derivación de claves (CC0)
Referencias
- Microsoft Presidio — Repositorio GitHub
- spaCy — NLP de nivel industrial
- RFC 5116 — Especificación de cifrado autenticado AES-GCM
- RFC 9106 — Especificación de la función de memoria intensiva Argon2
- BIP39 — Especificación de código mnemónico
- GDPR — Texto completo del Reglamento General de Protección de Datos