Tus contraseñas
solo las ves tú.
RoodyPass cifra todo en tu dispositivo antes de que nada salga. Ni siquiera nosotros podemos leer lo que guardas. Este es exactamente cómo funciona.
Resumen en una página
- Cifrado: AES-256-GCM con nonce aleatorio por entrada.
- KDF: PBKDF2-SHA256 con 600 000 iteraciones — coste prohibitivo para fuerza bruta.
- Zero-knowledge: el servidor solo ve datos cifrados. No tiene tu contraseña, no tiene tu clave.
- Local-first: la app funciona sin internet. La nube es opcional.
- Recuperación: 8 códigos de un solo uso que generas tú — no hay backdoor de "soporte".
- Open-source-friendly: nuestro backend no almacena nada que pueda revelar tus secretos. Si nos hackean, lo que se llevan no sirve sin tu contraseña.
Cómo se cifran tus datos
Cuando guardas una entrada en RoodyPass, esto pasa antes de que nada se envíe a ningún sitio:
- Tu contraseña maestra + un salt aleatorio único de 16 bytes pasan por PBKDF2-SHA256, 600 000 iteraciones. Resultado: una clave AES-256 de 32 bytes.
- Cada campo (título, usuario, contraseña, URL, notas, …) se cifra independientemente con AES-256-GCM. Se genera un
noncealeatorio de 12 bytes para cada cifrado. - El ciphertext resultante se guarda en SQLite local. Si tienes plan Pro o Team, también se replica a Supabase — pero ya viene cifrado de fábrica.
// Pseudocódigo del cifrado de una entrada
salt = randomBytes(16)
key = PBKDF2(master_password, salt, 600_000)
nonce = randomBytes(12)
cipher = AES_256_GCM.encrypt(plaintext, key, nonce)
stored = base64(nonce || cipher) // lo que llega al servidor
El nonce aleatorio garantiza que cifrar dos veces el mismo dato produce ciphertext distinto — incluso si alguien observa el tráfico entre dispositivos, no puede correlacionar entradas idénticas.
Tu contraseña maestra nunca sale de tu dispositivo
Para autenticarte contra Supabase, RoodyPass deriva una auth password distinta a partir de tu master password + tu email:
auth_password = PBKDF2(master_password, sha256(email), iterations)
Solo esa derivación es lo que se envía a Supabase. La master password original nunca cruza la red. Si nos hackean el servidor de auth, lo que se llevarían es un hash del que no se puede revertir a tu contraseña real (asumiendo entropía razonable y por la naturaleza de PBKDF2).
El salt para la clave de cifrado (enc_salt) sí se guarda en Supabase user_metadata — pero el salt no es secreto. Su única función es evitar ataques por rainbow tables. Sin tu contraseña maestra, tener el salt no sirve de nada.
Códigos de recuperación: el único backdoor que existe (y lo controlas tú)
Si olvidas la contraseña maestra, no hay nadie en el mundo que pueda recuperarla por ti — ni nuestro equipo, ni un juez, ni un atacante con una orden. La única vía de recuperación son los códigos de recuperación que generas tú mismo:
- Cuando configures la app, RoodyPass genera 8 códigos aleatorios de 24 caracteres (~120 bits de entropía cada uno).
- Para cada código se deriva otra clave con PBKDF2-600k (con un salt distinto) y se cifra tu contraseña maestra con esa clave.
- Los 8 wraps se guardan local + en Supabase. Los códigos en sí los ves una sola vez y nunca se almacenan.
- Si pierdes la contraseña, introduces uno de los 8 códigos. Se borra al usarlo.
El trade-off
Si tanto tu contraseña maestra como los 8 códigos se filtran a la vez, un atacante podría descifrar el wrap remoto y obtener tu contraseña. Por eso te recomendamos: imprime los códigos y guárdalos en papel (caja fuerte, archivo bancario, otro gestor cifrado). No los pegues en un email ni los dejes en una nota del móvil.
Auditoría planificada
RoodyPass es producto joven (v0.1.x). Antes de la versión 1.0 está prevista una auditoría externa enfocada en:
- Implementación del cifrado en Rust (módulo
crypto.rs). - Flujo de derivación de claves cliente/servidor.
- Manejo de tokens y refresh en el sync cloud.
- Extensión de navegador y el canal de comunicación con la app de escritorio.
Cuando esté hecha publicaremos el informe completo, incluyendo cualquier hallazgo. Si quieres revisar el código antes, escribe a [email protected] y te damos acceso al snapshot actual bajo NDA.
Lo que el servidor sabe sobre ti (y lo que no)
| Dato | El servidor lo ve |
|---|---|
| Email para login | Sí (sin él no podríamos autenticarte) |
| Hash derivado de la contraseña maestra | Sí (no la contraseña original) |
| Salt aleatorio (no secreto) | Sí |
| Títulos, usuarios, contraseñas, URLs, notas | No — solo ciphertext |
| Tu master password | Nunca |
| Tus 8 códigos de recuperación | Nunca (solo los wraps cifrados) |
| IPs y user-agent (en logs) | Sí, durante 14 días — solo para detectar abuso |
| Lista de plataformas en las que descargas la app | Sí (agregado, anónimo) |
¿Y la extensión del navegador?
La extensión no se conecta a internet por su cuenta. Habla únicamente con la app de escritorio a través de un servidor HTTP local en 127.0.0.1:49153 autenticado con un token único por usuario. Si la app está cerrada, la extensión no funciona (y no envía nada a ningún sitio).
El emparejamiento se hace manualmente: copias un token desde la app y lo pegas en la extensión. Sin ese token, nadie más en tu red puede leer entradas, incluso si tiene la extensión instalada.
Modelo de amenazas — qué cubre y qué no
RoodyPass te protege contra
- Filtraciones del servidor de Supabase — solo verán ciphertext.
- Ataques de fuerza bruta a la contraseña maestra — PBKDF2 con 600k iteraciones hace inviable cualquier intento moderno.
- Interceptación del tráfico HTTPS — todo viaja ya cifrado punta a punta antes de TLS.
- Phishing parcial — sin la contraseña maestra, ni el token ni el JWT sirven para descifrar entradas.
RoodyPass NO te protege contra
- Malware con privilegios de administrador en tu propio dispositivo — si tienen un keylogger, capturarán tu contraseña maestra al teclearla.
- Una contraseña maestra débil — si usas
123456, ningún cifrado del mundo te salva. - Olvido de la contraseña maestra sin códigos de recuperación guardados — los datos cifrados son irrecuperables.
- Pérdida de los 8 códigos junto con la contraseña — sin ninguno, no podemos hacer nada.
Reportes responsables
Si encuentras una vulnerabilidad en RoodyPass — la app, el worker Cloudflare, la extensión, lo que sea — escribe a [email protected] con los detalles. Respuesta en menos de 72 horas. No publiques nada hasta que la corrijamos.
¿Quieres entrar al detalle del código? El equipo de seguridad puede revisar los módulos src-tauri/src/crypto.rs, src-tauri/src/cloud/auth.rs y cloudflare-worker/worker.js bajo NDA. Escríbenos.
Sin tarjeta. Sin email.