Seguridad

Última actualización: 15 de marzo de 2026

Creemos que las herramientas de privacidad deben ser transparentes sobre cómo protegen tus datos, no solo que lo hacen. Esta página explica exactamente lo que sucede cuando utilizas Privacy First Labs — con suficiente detalle para que un ingeniero de seguridad lo evalúe, pero legible por cualquier persona.

El Principio Fundamental

Tus datos nunca salen de tu dispositivo. Todas las herramientas de Privacy First Labs procesan datos completamente en tu navegador utilizando Web APIs estándar. No se suben archivos. No se transmite texto sin cifrar. No se realiza procesamiento del lado del servidor.

Esto no es una política — es una garantía arquitectónica. Nuestras herramientas son páginas estáticas servidas por Cloudflare Pages. No hay servidor de aplicaciones, ni base de datos, ni endpoint de API que acepte tus datos. Puedes verificarlo tú mismo abriendo la pestaña de red de tu navegador mientras usas cualquier herramienta.

Cifrado de SafeSeal

SafeSeal te permite cifrar secretos (contraseñas, claves de API, credenciales) con una contraseña y compartirlos como un enlace o archivo. Así es exactamente cómo funciona.

Algoritmo de Cifrado

Utilizamos AES-256-GCM (Advanced Encryption Standard con claves de 256 bits en Galois/Counter Mode) a través de la Web Crypto API nativa del navegador. Es el mismo estándar de cifrado utilizado por gobiernos, bancos y aplicaciones de seguridad crítica en todo el mundo.

  • AES-256 proporciona confidencialidad — tu secreto es ilegible sin la clave
  • GCM mode proporciona autenticación — cualquier manipulación de los datos cifrados es detectada y rechazada
  • La Web Crypto API es una implementación nativa del navegador, no una biblioteca JavaScript de terceros que podría ser comprometida

Derivación de Clave

Tu contraseña nunca se utiliza directamente como clave de cifrado. En su lugar, derivamos una clave criptográfica a partir de ella usando PBKDF2 (Password-Based Key Derivation Function 2):

  • Función hash: SHA-256
  • Iteraciones: 600.000 — el mínimo recomendado por OWASP (2023) para SHA-256
  • Salt: 16 bytes de datos criptográficamente aleatorios, únicos por cifrado
  • Resultado: Una clave AES de 256 bits

El alto número de iteraciones significa que, incluso si un atacante obtiene los datos cifrados, descifrar la contraseña por fuerza bruta es computacionalmente costoso. El salt aleatorio garantiza que contraseñas idénticas producen claves diferentes.

Proceso de Cifrado

Cuando haces clic en "Cifrar", lo siguiente sucede completamente en tu navegador:

  1. Se genera un salt aleatorio de 16 bytes usando crypto.getRandomValues()
  2. Se genera un vector de inicialización (IV) aleatorio de 12 bytes usando crypto.getRandomValues()
  3. Tu contraseña + el salt se procesan mediante PBKDF2 (600.000 iteraciones) para producir una clave AES de 256 bits
  4. Tu secreto se cifra con AES-256-GCM usando la clave derivada y el IV
  5. El resultado incluye una etiqueta de autenticación de 16 bytes (verificación de integridad de GCM)

Tanto el salt como el IV se generan aleatoriamente en cada cifrado. Esto significa que cifrar el mismo secreto con la misma contraseña dos veces produce texto cifrado completamente diferente.

Modo Enlace

En modo enlace, los datos cifrados se codifican en el fragmento de la URL (la parte después de #):

privacyfirstlabs.io/safeseal/#1.<salt>.<iv>.<ciphertext>

El fragmento de la URL nunca se envía a ningún servidor. Esto no es una decisión nuestra — es cómo funciona el protocolo HTTP. Según la RFC 3986 (Section 3.5), el identificador de fragmento es procesado completamente por el cliente. Cuando abres el enlace, tu navegador solicita /safeseal/ a nuestro servidor — la parte #... permanece en tu navegador.

Los componentes se codifican usando base64url (RFC 4648, Section 5) para su inclusión segura en URLs.

Modo Archivo

En modo archivo, los datos cifrados se empaquetan en un archivo binario compacto .pflenc:

  • Byte 0: versión del formato (actualmente 1)
  • Bytes 1–16: salt
  • Bytes 17–28: IV
  • Bytes 29+: texto cifrado (incluyendo etiqueta de autenticación GCM)

Antes del cifrado, el nombre del archivo original se incorpora dentro del payload usando un encabezado compacto: un prefijo de longitud de 2 bytes seguido del nombre del archivo en UTF-8, seguido de los datos del archivo. Esto significa que el nombre del archivo original se recupera siempre al descifrar — el destinatario recibe el archivo con su nombre y extensión originales.

El archivo se genera completamente en tu navegador y se descarga a tu dispositivo. Nunca se sube ni se almacena en nuestros servidores. Compartes el archivo a través del canal que prefieras.

Privacidad del Nombre de Archivo

Por defecto, los archivos cifrados se descargan como originalname.pflenc — facilitando la identificación del archivo. Si prefieres no revelar el nombre del archivo, la opción "Ocultar nombre de archivo" descarga el archivo como secret.pflenc.

El nombre del archivo original siempre está cifrado dentro del payload .pflenc, independientemente de esta configuración. Al descifrar, el destinatario siempre recupera el nombre del archivo original de los datos cifrados. La casilla "Ocultar nombre de archivo" solo controla el nombre del archivo .pflenc externo durante la descarga — no afecta el contenido cifrado.

Proceso de Descifrado

Cuando el destinatario abre el enlace o sube el archivo .pflenc:

  1. El salt, IV y texto cifrado se extraen del fragmento de la URL o del archivo
  2. El destinatario introduce la contraseña
  3. PBKDF2 deriva la misma clave AES de la contraseña + salt (600.000 iteraciones)
  4. AES-256-GCM descifra el texto cifrado y verifica la etiqueta de autenticación
  5. Si la contraseña es incorrecta o los datos han sido manipulados, el descifrado falla con un error genérico

El mensaje de error intencionalmente no revela cuál verificación falló (contraseña incorrecta vs. datos corruptos). Esto impide que los atacantes utilicen diferencias en los errores para obtener información sobre el cifrado.

Lo Que Nuestro Servidor Ve

Para SafeSeal — nada. Nuestro servidor entrega archivos estáticos de HTML, CSS y JavaScript. No recibe, procesa ni almacena:

  • Tu texto secreto
  • Tu contraseña de cifrado
  • Los datos cifrados
  • La clave de descifrado
  • Ningún fragmento de URL (técnicamente imposible — los navegadores no envían fragmentos a los servidores)

Incluso si nuestros servidores fueran comprometidos, un atacante obtendría solo los archivos estáticos del sitio — nunca tus datos cifrados o claves.

Lo Que No Podemos Hacer

Debido a nuestra arquitectura de conocimiento cero:

  • No podemos descifrar tus secretos — nunca tenemos las claves
  • No podemos recuperar tu contraseña — solo existe en tu dispositivo y en el del destinatario
  • No podemos cumplir solicitudes para producir texto sin cifrar — no lo tenemos
  • No podemos saber si un enlace ha sido utilizado o cuántas veces — no tenemos seguimiento

Esto es por diseño. La responsabilidad de la gestión de claves recae en ti y en tu destinatario. Si la contraseña se pierde, el secreto es irrecuperable.

Verifícalo Tú Mismo

No tienes que fiarte de nuestra palabra. Así puedes verificar nuestras afirmaciones:

  • Pestaña de red: Abre las Herramientas de Desarrollo de tu navegador (F12), ve a la pestaña Red y utiliza SafeSeal. Verás cero solicitudes de red que contengan tu secreto o datos cifrados
  • Código fuente: Nuestro módulo de cifrado está diseñado para publicación open-source. La lógica central utiliza solo la Web Crypto API nativa del navegador — sin bibliotecas criptográficas de terceros
  • Prueba offline: Desconéctate de internet, luego cifra y descifra un secreto. Funciona — porque nada sale de tu navegador

Aislamiento de Procesamiento

Todas las operaciones computacionalmente intensivas (derivación de clave, cifrado, descifrado) se ejecutan en Web Workers — hilos de fondo aislados que:

  • Mantienen la interfaz responsiva mientras se ejecutan las 600.000 iteraciones de PBKDF2
  • No tienen acceso al DOM ni al contexto JavaScript principal de la página
  • Se crean por operación y se terminan inmediatamente después de completarse
  • No persisten ningún dato entre operaciones

Consideraciones de Seguridad

Fortaleza de la Contraseña

La seguridad de tu secreto cifrado depende de tu contraseña. Exigimos un mínimo de 8 caracteres, pero recomendamos encarecidamente usar una frase de contraseña más larga. PBKDF2 con 600.000 iteraciones proporciona protección significativa contra ataques de fuerza bruta, pero una contraseña débil (como "password123") aún puede ser adivinada.

Compartir Enlaces

Al usar el modo enlace, los datos cifrados están en la URL. Cualquier persona con acceso a la URL completa tiene los datos cifrados (aunque aún necesita la contraseña para descifrarlos). Comparte enlaces a través de canales seguros, y siempre comparte la contraseña por un canal diferente al del enlace.

Seguridad del Navegador

El cifrado del lado del cliente depende de un entorno de navegador seguro. Si tu navegador o dispositivo está comprometido (malware, extensiones maliciosas), las garantías de cifrado pueden no mantenerse. Mantén tu navegador y sistema operativo actualizados.

Sin Forward Secrecy

Si un atacante captura el enlace o archivo cifrado y posteriormente obtiene la contraseña, puede descifrar el secreto. Para casos de uso altamente sensibles, considera rotar contraseñas y usar métodos de compartición de corta duración.

Resumen Técnico

Cifrado AES-256-GCM (Web Crypto API)
Derivación de clave PBKDF2-SHA-256, 600,000 iterations
Salt 16 bytes, criptográficamente aleatorio, único por cifrado
IV 12 bytes, criptográficamente aleatorio, único por cifrado
Autenticación GCM mode (128-bit auth tag, included in ciphertext)
Transporte de clave URL fragment (never sent to server) or .pflenc file (downloaded locally)
Participación del servidor None — static site only
Biblioteca criptográfica Browser-native Web Crypto API (no third-party dependencies)
Navegadores objetivo Last 2 versions of Chrome, Firefox, Safari, Edge (ES2022)

¿Preguntas?

Si tienes preguntas sobre nuestra implementación de cifrado, encontraste una posible vulnerabilidad o deseas discutir nuestra arquitectura de seguridad:

Privacy First Labs
security@privacyfirstlabs.io

Damos la bienvenida a la divulgación responsable y estamos comprometidos a abordar las preocupaciones de seguridad con prontitud.