Qué ocurre con tus datos durante una captura
Una captura hecha con la API de ProofSnap o desde el panel pasa por cinco pasos:
- Envías una URL por HTTPS, a través de la API con tu clave de API o desde el panel.
- Un navegador que se ejecuta en los servidores de ProofSnap en Fráncfort carga la página. Solo se conecta a direcciones públicas. En modo de producción, la URL también se envía a Internet Archive, salvo que desactives esta opción.
- Se calcula el hash SHA-256 de cada archivo y se firma el manifiesto. Solo el hash del manifiesto se envía a los calendarios de OpenTimestamps y, si solicitas un sello cualificado de tiempo electrónico, a Disig a.s.
- El paquete sellado se guarda cifrado en Fráncfort, con una segunda copia en Irlanda de los paquetes creados en modo de producción.
- Descargas el paquete o, cuando está listo, recibes un webhook firmado que te avisa.
Dónde se aloja la API
- API
- Amazon Web Services en la UE, Fráncfort (eu-central-1).
- Datos de la cuenta y de las capturas
- Google Cloud Firestore en la UE, Fráncfort (europe-west3).
- Inicio de sesión
- Firebase Authentication, un servicio global de Google.
- Paquetes de pruebas
- Amazon S3 en la UE, Fráncfort (eu-central-1), con una segunda copia en Irlanda (eu-west-1) de cada paquete creado en modo de producción.
Qué se trata fuera de la UE
Los paquetes de pruebas y los datos de las capturas permanecen en Fráncfort y en Irlanda. Los servicios situados fuera de la UE solo pueden tratar los datos limitados que se indican a continuación:
- La URL capturada, que por defecto se envía a Internet Archive en las capturas de producción (puedes desactivarlo).
- El hash del manifiesto, enviado a los calendarios públicos de OpenTimestamps. No se envía ningún contenido de los archivos.
- El nombre de host del sitio capturado, que se resuelve mediante Google Public DNS y Cloudflare DNS y se consulta en los servicios públicos RDAP y WHOIS.
- Los datos de inicio de sesión en Firebase Authentication y los datos de pago en Stripe.
Captura en el servidor
La página se carga y se captura en los servidores de ProofSnap, no en tu ordenador. Envías una URL y recibes un paquete de pruebas sellado. El navegador de captura solo se conecta a direcciones públicas: las direcciones privadas, las de bucle local (loopback) y las de los servicios de metadatos de la nube se rechazan, incluso después de una redirección.
Por defecto, cuando una captura se hace en modo de producción, su URL también se envía a Internet Archive (web.archive.org) para que
se pueda crear una instantánea pública independiente. Las URL que parecen privadas, como los enlaces de inicio de sesión, de restablecimiento
de contraseña y los enlaces para compartir, o las que llevan un token, no se envían nunca. Una URL con cadena de consulta
solo se envía si asignas el valor true a la opción de captura
external_archive. Si le asignas false, el archivado se desactiva por completo. El paquete deja constancia del resultado.
Cómo se sella cada paquete
- Hashes
- De cada archivo de prueba del paquete se calcula un hash SHA-256, que se incluye en
manifest.json. - Firma
- El archivo
manifest.jsonse firma con una clave RSA-4096 generada solo para ese paquete. La clave privada se descarta después de firmar y la clave pública va incluida en el paquete. - Anclaje en Bitcoin
- El hash del manifiesto se envía a los calendarios de OpenTimestamps para su anclaje en la cadena de bloques de Bitcoin. Cuando se confirma el anclaje, la prueba de OpenTimestamps completa se guarda junto al paquete. Si no se puede añadir, el paquete deja constancia de ello.
- Sello cualificado de tiempo
- Si lo solicitas (solo con claves de producción, con cargo por sello), se obtiene un sello cualificado de tiempo electrónico (RFC 3161) de Disig a.s., prestador cualificado de servicios de confianza incluido en la Lista de confianza de la UE. Si no se puede añadir el sello, el paquete deja constancia de ello.
- Verificación sin conexión
- Cada paquete incluye scripts de verificación (
verify.shpara macOS y Linux,verify.ps1para Windows) que lo comprueban sin conexión y sin depender de ProofSnap.
Registro de emisión
ProofSnap registra el hash de cada manifiesto que emite. Cualquiera puede consultar un hash con
GET /v1/ledger/{hash}; una coincidencia confirma que ProofSnap emitió exactamente ese paquete.
Segunda copia
Cada paquete de pruebas creado en modo de producción se copia en un bucket de Amazon S3 independiente, situado en otra región de la UE
(Irlanda). GET /v1/captures/{id} indica el estado de la copia de cada
captura. La copia se elimina junto con el original.
Periodo de conservación
Las pruebas se conservan 10 años desde la fecha de captura. En una página capturada de forma programada, el periodo empieza a contar desde la última vez que se comprobó que la versión capturada seguía vigente:
- Cada comprobación que encuentra la página sin cambios amplía el periodo de conservación de la captura actual.
- En una captura sustituida por una versión más reciente, el periodo empieza a contar desde el momento de la sustitución.
Cuando termina una suscripción, tienes 30 días para descargarlo todo. El plan Archive only mantiene las pruebas consultables, descargables y verificables aunque dejes de hacer capturas.
Eliminación
Un paquete que eliminas en el panel o mediante la API pasa primero a la papelera, desde donde se puede restaurar durante 30 días. Pasado ese plazo, todas las versiones guardadas se borran de ambas copias. Si eliminas un paquete de forma definitiva, se borra de inmediato. Cuando vence el periodo de conservación, o cuando se cierra el plazo de 30 días que tiene una cuenta para descargar sus datos, todas las versiones guardadas se borran de la misma forma. Una captura sujeta a retención legal no se puede eliminar mientras la retención esté activa. Queda constancia de quién eliminó el paquete y cuándo, pero no de su contenido.
Control de acceso
- Claves de API
- Se guardan solo como hashes SHA-256. La clave completa se muestra una sola vez, al crearla. Una clave revocada deja de funcionar en un máximo de 60 segundos. En el plan Website Archive, las claves de API son de solo lectura: permiten listar, descargar y verificar capturas y gestionar suscripciones de webhook. Con ese plan, las capturas y las programaciones se inician desde el panel.
- Inicio de sesión en el panel
- Firebase Authentication. Antes de crear claves, iniciar capturas o comprar un plan, tienes que confirmar tu dirección de correo electrónico.
- Historial de accesos
- Cuando una persona distinta del autor de una captura, como el titular de la cuenta del despacho o un miembro de un asunto, la descarga, la verifica o accede a ella de otro modo, ese acceso queda registrado en la captura.
- Límites de frecuencia
- Las solicitudes de captura, de certificación y las demás solicitudes facturables tienen un límite de frecuencia por cuenta, común a todas sus claves.
Cifrado
- En tránsito
- Todo el tráfico de la API, del panel y de los webhooks usa HTTPS (TLS).
- En reposo
- Los paquetes de pruebas se cifran con AES-256 (cifrado del lado del servidor de Amazon S3) en ambos buckets. Ambos buckets bloquean todo acceso público.
Webhooks
- Firma
- Las entregas de webhook se firman con el esquema Standard Webhooks y HMAC-SHA256. Las entregas a una
webhook_urldefinida en una solicitud o en una programación se firman con el secreto de firma del webhook de la clave de API que la definió. Ese secreto se puede renovar con un periodo de solapamiento de 24 horas. Una suscripción de webhook de la cuenta tiene su propio secreto de firma, que se muestra una sola vez al crear la suscripción. - Destinos
- Las entregas solo van a endpoints HTTPS públicos. Antes de cada entrega, la dirección se resuelve y se comprueba de nuevo, y la conexión se establece solo con la dirección comprobada, de modo que las direcciones privadas, las de bucle local y las de los servicios de metadatos de la nube se rechazan incluso después de un cambio de DNS. Las redirecciones no se siguen.
- Reintentos
- Una entrega que agota el tiempo de espera, no consigue conectar o recibe una respuesta de error (salvo 410 Gone) se reintenta hasta 5 veces a lo largo de unas 35 horas (a los 5 min, 30 min, 2 h, 8 h y 24 h) con el mismo
webhook-id, para que el receptor pueda descartar los duplicados. Cada intento espera una respuesta como máximo 10 segundos. - Descargas
- Las entregas reintentadas y las de una suscripción no incluyen el enlace de descarga (válido 24 horas). El receptor puede obtener uno nuevo con
GET /v1/captures/{id}. - Suscripciones
- Una suscripción de webhook de la cuenta se desactiva cuando su endpoint responde con 410 Gone, después de 5 días sin ninguna entrega correcta o, si se creó con una clave de API, cuando esa clave se revoca. Los eventos se conservan 30 días y se pueden recuperar con
GET /v1/events.
Servicios de terceros
- Pagos
- Stripe procesa los pagos. ProofSnap no guarda números de tarjeta.
- Correos de la cuenta
- MailerSend envía los mensajes de confirmación del correo electrónico y de restablecimiento de contraseña.
- Sellado de tiempo
- Los calendarios de OpenTimestamps y, para un sello cualificado de tiempo electrónico, Disig a.s. reciben solo el hash del manifiesto, nunca las pruebas.
- Consultas DNS y WHOIS
- Para documentar el sitio capturado, su nombre de host se resuelve mediante Google Public DNS y Cloudflare DNS, y el registro del dominio se consulta en los servicios públicos RDAP y WHOIS.