Wireframe baja fidelidad · vista pública sin autenticación · descifrado client-side
Mobile — Enlace válido con contenido
Receptor abre enlace. Vista pública (sin login). Contenido descifrado en el navegador con clave del #fragment.
Contenido oculto — estado inicial
🔐
Contraseña compartida
Alguien compartió información contigo de forma segura
🔒 Compartido de forma segura
Este contenido fue cifrado end-to-end. Solo tú puedes verlo con este enlace.
Usuario
••••••••••••••••
👁
Contraseña
••••••••••••
👁
⏰ Este enlace expira en 23 horas
Usos restantes: 1 de 1 (un solo uso)
Campos ocultos por defecto. Tap en 👁 revela campo individual. "Revelar todo" muestra todos los campos.
Indicador de expiración y usos restantes visible. Tras usar, contador decrece.
Contenido revelado — con acciones
🔐
Contraseña compartida
Alguien compartió información contigo de forma segura
🔒 Compartido de forma segura
Este contenido fue cifrado end-to-end. Solo tú puedes verlo con este enlace.
Usuario
usuario@gmail.com
🙈
📋
Contraseña
K9#mP$xL2@qR
🙈
📋
⏰ Este enlace expira en 23 horas
Usos restantes: 1 de 1 (se consumirá al copiar)
Campos revelados. 🙈 oculta de nuevo. 📋 copia al portapapeles (muestra feedback "Copiado").
Si es "un solo uso", copiar consume el uso y enlace expira inmediatamente tras copiar.
Mobile — Estados de error y expiración
Enlace expirado, ya utilizado, o inválido.
Enlace expirado por tiempo
⏰
Enlace expirado
Este enlace ya expiró y no se puede acceder a la información compartida. Contacta a la persona que te lo envió para solicitar un nuevo enlace.
Enlace expiró por tiempo (24 horas pasaron). Servidor retorna estado "expired" sin contenido cifrado.
Enlace ya utilizado (un solo uso)
✓
Enlace ya utilizado
Este enlace era de un solo uso y ya fue utilizado. Por seguridad, no se puede acceder nuevamente. Si necesitas la información, contacta a quien te compartió el enlace.
Enlace de "un solo uso" ya fue accedido/copiado. Servidor marca como usado y bloquea accesos subsecuentes.
Mobile — Enlace revocado o inválido
Propietario revocó el enlace manualmente, o enlace no existe.
Enlace revocado por propietario
🚫
Enlace revocado
El propietario revocó este enlace por seguridad. Ya no es posible acceder a la información compartida. Contacta a la persona que te lo envió si crees que es un error.
Propietario revocó desde V27 (gestión de enlaces). Servidor retorna "revoked" sin contenido.
Enlace inválido o no existe
❓
Enlace no válido
Este enlace no existe o es inválido. Verifica que copiaste la URL completa correctamente, incluyendo todo lo que viene después del símbolo #.
ID no existe en servidor, o #fragment falta/incorrecto. Servidor retorna 404 sin revelar si el ID existió alguna vez.
Desktop / Web — Vista más amplia
Mismo contenido que mobile. Layout más amplio para mejor legibilidad en desktop.
🔒 Cifrado end-to-end
Este contenido fue cifrado antes de enviarse. La clave de descifrado está en la URL (después del #) y nunca se envió al servidor. Solo tú puedes ver esta información.
Usuario
usuario@gmail.com
🙈
📋
Contraseña
K9#mP$xL2@qR
🙈
📋
⏰ Información de expiración:
• Este enlace expira en 23 horas 45 minutos
• Usos restantes: 1 de 1 (un solo uso)
• Al copiar, el enlace se consumirá y no podrás acceder nuevamente
Desktop muestra más contexto sobre seguridad. "Copiar todo" copia todos los campos al portapapeles en formato texto.
Footer incluye CTAs para crear cuenta (marketing opportunity para convertir receptores en usuarios).
Desktop — Estado expirado
Mensaje de error más detallado en desktop.
Desktop — enlace expirado con más contexto
⏰
Este enlace ha expirado
El enlace que intentas acceder ya expiró y la información compartida ya no está disponible. Los enlaces compartidos tienen un tiempo de vida limitado por seguridad.
¿Qué puedes hacer?
• Contacta a la persona que compartió el enlace contigo
• Solicita que genere un nuevo enlace desde su cuenta
• Si tú también usas Password Vault, pídele que comparta la entrada contigo de forma permanente
Desktop incluye sugerencias sobre qué hacer cuando enlace expira. Oportunidad de marketing para convertir receptor en usuario.
Flujo técnico de descifrado
Diagrama explicando cómo funciona el descifrado client-side con clave en #fragment.
Flujo de descifrado seguro
URL del enlace:
https://vault.app/s/{ID}#clave_de_descifrado
1. Receptor abre enlace en navegador
└─> Cliente JavaScript lee URL
└─> Extrae ID del path: /s/{ID}
└─> Extrae clave del #fragment
2. Cliente solicita blob cifrado al servidor
└─> GET /api/shared/{ID}
└─> Servidor verifica validez (no expirado, usos disponibles)
└─> Servidor retorna blob cifrado (NO la clave)
└─> #fragment NUNCA se envía en HTTP requests
3. Cliente descifra en el navegador
└─> Usa clave del #fragment
└─> Descifra blob con AES-256
└─> Parsea JSON con campos compartidos
└─> Renderiza campos (ocultos por defecto)
4. Usuario revela/copia
└─> Click en 👁 → muestra campo
└─> Click en 📋 → copia al portapapeles
└─> Si es "un solo uso", cliente notifica al servidor
└─> Servidor marca enlace como usado
5. Seguridad garantizada
✓ Servidor nunca ve la clave de descifrado
✓ Servidor nunca ve el contenido sin cifrar
✓ End-to-end encryption real
✓ Incluso admin del servidor no puede descifrar
#fragment no se envía al servidor en requests HTTP. Solo vive en el navegador del receptor.
Servidor solo almacena blob cifrado + metadata (expiración, usos). No puede descifrar el contenido.
Variantes de contenido compartido
Ejemplos de diferentes combinaciones de campos compartidos.
Solo contraseña compartida
🔐
Contraseña compartida
Alguien compartió una contraseña contigo
🔒 Compartido de forma segura
Este contenido fue cifrado end-to-end.
Contraseña
K9#mP$xL2@qR
🙈
📋
⏰ Expira en 6 horas · Usos: 2 de 3
Solo contraseña compartida (caso más común). Múltiples usos permitidos (2 de 3 restantes).
Entrada completa con notas
🔐
Credenciales compartidas
Entrada completa compartida contigo
🔒 Compartido de forma segura
Este contenido fue cifrado end-to-end.
Nombre del servicio
Gmail Personal
Usuario
usuario@gmail.com
📋
Contraseña
K9#mP$xL2@qR
🙈
📋
URL
https://gmail.com
📋
Notas
Cuenta principal para correo personal. Recuperación: +34 123 456 789
⏰ Expira en 7 días · Ilimitado
Entrada completa: nombre, usuario, contraseña, URL, notas. Expira en 7 días con usos ilimitados.