Seguridad

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

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:

  1. 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.
  2. Cada campo (título, usuario, contraseña, URL, notas, …) se cifra independientemente con AES-256-GCM. Se genera un nonce aleatorio de 12 bytes para cada cifrado.
  3. 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:

  1. Cuando configures la app, RoodyPass genera 8 códigos aleatorios de 24 caracteres (~120 bits de entropía cada uno).
  2. 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.
  3. Los 8 wraps se guardan local + en Supabase. Los códigos en sí los ves una sola vez y nunca se almacenan.
  4. 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:

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)

DatoEl servidor lo ve
Email para loginSí (sin él no podríamos autenticarte)
Hash derivado de la contraseña maestraSí (no la contraseña original)
Salt aleatorio (no secreto)
Títulos, usuarios, contraseñas, URLs, notasNo — solo ciphertext
Tu master passwordNunca
Tus 8 códigos de recuperaciónNunca (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 appSí (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

RoodyPass NO te protege contra

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.

Descargar gratis →

Sin tarjeta. Sin email.