Auditoría en 5 minutos

Verifica tú mismo el cifrado de conocimiento cero de Vaulted

No confíes en las herramientas de seguridad: verifícalas. Cuatro pruebas en el navegador, sin instalaciones, cinco minutos.

La lista de comprobación de 60 segundos

Léela por encima primero. La guía detallada de abajo cubre cada paso en profundidad.

  1. 1

    Abre las DevTools → pestaña Network

    En Vaulted, pulsa Cmd+Option+I (macOS) o F12 (Windows/Linux). Cambia a la pestaña Network y filtra por Fetch/XHR.

  2. 2

    Crea un secreto e inspecciona el POST

    Escribe una cadena canario reconocible (p. ej. CANARY-12345) y haz clic en Create. Localiza la petición POST /api/secrets. Abre la pestaña Payload — solo verás ciphertext (base64) e iv. Busca tu canario en el cuerpo; no está ahí.

  3. 3

    Inspecciona el enlace para compartir

    Observa el enlace generado. La clave de descifrado va después del # (el fragmento de la URL). Según RFC 3986, los navegadores nunca envían los fragmentos al servidor — ni en las líneas de petición, ni en las cabeceras, ni en los referrers.

  4. 4

    Confirma que el descifrado se ejecuta en el cliente

    Abre el enlace en una pestaña nueva. La respuesta GET de /api/secrets/[id] devuelve solo ciphertext. En el panel Sources, busca crypto.subtle.decrypt — esa llamada se ejecuta en tu navegador, no en nuestro servidor.

Qué estás verificando

La promesa de Vaulted es concreta: el servidor nunca ve tu texto plano ni tu clave de cifrado. Eso se descompone en cuatro propiedades observables:

  1. El texto plano nunca aparece en ninguna petición de red.
  2. La clave de cifrado nunca aparece en ninguna petición de red.
  3. El fragmento de la URL (donde vive la clave) nunca llega al servidor.
  4. Los datos del lado del servidor por sí solos no pueden reconstruir el secreto.

Si las cuatro se cumplen, la arquitectura es de conocimiento cero por construcción — sin necesidad de lenguaje de marketing.

Prueba 1El texto plano nunca cruza la red

  1. Abre vaulted.fyi.
  2. Abre las DevTools y cambia a la pestaña Network. Filtra por Fetch/XHR.
  3. Escribe una cadena reconocible en el campo del secreto — algo como CANARY-12345.
  4. Haz clic en Create.

Verás un único POST a /api/secrets. Haz clic en él y mira la pestaña Payload.

El cuerpo contiene un campo ciphertext y un campo iv. Ambos son blobs codificados en base64url. Busca en el payload CANARY-12345 — no está ahí. El texto plano se cifró en el navegador antes de que se enviara la petición.

Si quieres ser minucioso, cambia la limitación de red a «Slow 3G» y repite. El ciphertext sigue pareciendo ruido; el texto plano sigue sin aparecer por ningún lado.

Prueba 2La clave tampoco cruza la red

Tras crear el secreto, Vaulted te muestra un enlace para compartir. Tiene este aspecto:

https://vaulted.fyi/s/abc123#dGhpcyBpcyBhIGtleQ
                              ^^^^^^^^^^^^^^^^^^^^
                              encryption key (base64url)

La parte que va después de # es el fragmento de la URL. Según RFC 3986, los navegadores procesan los fragmentos localmente — nunca aparecen en las líneas de petición HTTP, las cabeceras ni los referrers.

Para demostrarlo:

  1. Copia el enlace para compartir.
  2. Ábrelo en una pestaña nueva con la pestaña Network de las DevTools abierta.
  3. Localiza la petición GET /s/abc123.
  4. Mira la pestaña Headers — la URL completa de la petición, sin fragmento.
  5. Mira la pestaña Request — sin fragmento.
  6. Comprueba document.referrer en la página siguiente — el fragmento ha desaparecido.

La clave que el destinatario necesita para descifrar el secreto estaba en la URL, pero se quedó en su navegador. El servidor vio GET /s/abc123 y nada más.

Prueba 3El servidor por sí solo no puede descifrar

Abre un terminal y haz un curl directamente al secreto:

curl https://vaulted.fyi/api/secrets/abc123

Recibirás un JSON que contiene ciphertext e iv. Ese es todo el estado del lado del servidor de tu secreto.

Ahora intenta darle sentido. Sin la clave del fragmento de la URL, no puedes. AES-256-GCM con una clave aleatoria generada correctamente es, a todos los efectos prácticos, indistinguible del ruido aleatorio. Un volcado completo de la base de datos de los servidores de Vaulted produciría exactamente esto — blobs cifrados y metadatos.

Esta es la definición literal de conocimiento cero: el servidor almacena datos que no puede leer.

Prueba 4El cifrado ocurre en JavaScript que puedes ver

Vaulted utiliza la Web Crypto API, que es una primitiva del navegador — no hay WASM ofuscado ni un módulo nativo ocultando el trabajo. Puedes ver cómo ocurre el cifrado.

  1. En las DevTools, abre la pestaña Sources.
  2. Busca crypto.subtle.encrypt (usa Cmd+Option+F para la búsqueda global).
  3. Pon un punto de interrupción en la línea que llama a crypto.subtle.encrypt.
  4. Provoca la creación de un nuevo secreto.
  5. Se alcanza el punto de interrupción. Inspecciona los argumentos: verás tu texto plano como un Uint8Array, la clave AES-GCM y un IV aleatorio nuevo.
  6. Avanza sobre la llamada. El resultado es el ciphertext que se envía.

Ahora estás viendo cómo el texto plano se convierte en ciphertext, en tu navegador, antes de cualquier petición de red. No hay ninguna otra ruta que pudieran tomar los datos.

Qué demuestra esto

  • Ningún texto plano sale del navegador. Prueba 1.
  • Ninguna clave sale del navegador. Prueba 2.
  • El servidor no puede descifrar con lo que almacena. Prueba 3.
  • El cifrado es real y ocurre en el cliente. Prueba 4.

Esa es toda la promesa de conocimiento cero, demostrada contra un sistema de producción en funcionamiento en cinco minutos.

Qué no demuestra esto

La verificación es un trabajo honesto — conviene ser claro sobre sus límites.

  • Las pruebas demuestran el comportamiento en este momento. Un futuro cambio de código podría romper la propiedad. Si necesitas garantías continuas, suscríbete al changelog y vuelve a ejecutar las pruebas periódicamente.
  • No te protegen frente a tu propio dispositivo. Un keylogger o una extensión de navegador maliciosa pueden leer el texto plano tras el descifrado. Eso queda fuera del control de cualquier aplicación web.
  • Asumen que el JavaScript que ejecutaste es el JavaScript que sirve Vaulted. Un atacante dirigido que comprometiera la CDN podría servir un bundle distinto a un único usuario. Subresource Integrity y las compilaciones reproducibles mitigan esto; consulta nuestro modelo de amenazas para todos los detalles.

Ir más allá

Si quieres profundizar:

El argumento más fuerte a favor de una herramienta de seguridad no es su marketing. Es que puedas desmontarla y confirmar que hace lo que dice. Vaulted está construido para que puedas hacerlo.

Preguntas frecuentes

¿Tienes preguntas o has encontrado algo extraño? Escribe a [email protected] — publicamos nuestra política de divulgación responsable y respondemos en un plazo de 48 horas.