Что происходит с вашими данными при создании снимка
Создание снимка через API ProofSnap или в панели проходит в пять этапов:
- Вы передаёте URL по HTTPS: через API (с вашим ключом API) или в панели.
- Браузер на серверах ProofSnap во Франкфурте загружает страницу. Этот браузер подключается только к публичным адресам. В рабочем режиме URL также отправляется в Internet Archive, если вы этого не отключили.
- Для каждого файла вычисляется хеш SHA-256, а манифест подписывается. В календари OpenTimestamps и, если вы запросили квалифицированную метку времени, в Disig a.s. уходит только хеш манифеста.
- Запечатанный пакет хранится в зашифрованном виде во Франкфурте, а для пакетов, созданных в рабочем режиме, создаётся вторая копия в Ирландии.
- Когда пакет готов, вы скачиваете его или получаете подписанный вебхук.
Где хранятся данные
Для хранения и защиты данных API ProofSnap использует четыре сервиса:
- API
- Amazon Web Services в ЕС, Франкфурт (eu-central-1).
- Данные аккаунта и снимков
- Google Cloud Firestore в ЕС, Франкфурт (europe-west3).
- Вход в аккаунт
- Firebase Authentication, глобальный сервис Google.
- Пакеты доказательств
- Amazon S3 в ЕС, Франкфурт (eu-central-1). У каждого пакета, созданного в рабочем режиме, есть вторая копия в Ирландии (eu-west-1).
Что обрабатывается за пределами ЕС
Пакеты доказательств и данные снимков остаются во Франкфурте и Ирландии. Сервисы за пределами ЕС могут обрабатывать только следующие данные:
- URL страницы, который в рабочем режиме по умолчанию отправляется в Internet Archive (это можно отключить).
- Хеш манифеста, который отправляется в публичные календари OpenTimestamps. Содержимое файлов не передаётся.
- Имя хоста сайта, с которого сделан снимок: оно разрешается через Google Public DNS и Cloudflare DNS, а регистрационные данные домена запрашиваются в публичных сервисах RDAP и WHOIS.
- Данные для входа в аккаунт (Firebase Authentication) и платёжные данные (Stripe).
Снимок на сервере
Страница загружается, и снимок с неё делается на серверах ProofSnap, а не на вашем компьютере. Вы передаёте URL и получаете запечатанный пакет доказательств. Браузер, который делает снимок, подключается только к публичным адресам: частные IP-адреса, loopback-адреса и адреса облачных служб метаданных отклоняются, в том числе после перенаправления.
По умолчанию URL страницы в рабочем режиме также отправляется в Internet Archive (web.archive.org),
чтобы могла появиться независимая публичная копия. URL, похожие на приватные (например, ссылки для входа, сброса пароля или общего доступа) или содержащие токен, не отправляются никогда, а URL с параметрами запроса отправляется только в том случае, если вы зададите параметру снимка external_archive значение
true. Задайте значение false, чтобы полностью отключить архивирование. Результат архивирования фиксируется в пакете.
Как запечатывается каждый пакет
- Хеши
- Для каждого файла доказательств в пакете вычисляется хеш SHA-256, который записывается в файл
manifest.json. - Подпись
- Файл
manifest.jsonподписывается ключом RSA-4096, созданным только для этого пакета. После подписания закрытый ключ удаляется, а открытый ключ добавляется в пакет. Подпись подтверждает целостность пакета. - Метка времени в блокчейне Bitcoin
- Хеш манифеста отправляется в календари OpenTimestamps для привязки к блокчейну Bitcoin. После подтверждения привязки полное доказательство метки времени сохраняется вместе с пакетом; оно показывает, что пакет существовал не позднее момента привязки. Если доказательство метки времени добавить не удалось, это указывается в пакете.
- Квалифицированная метка времени
- По вашему запросу (только с рабочими ключами API; каждая метка оплачивается отдельно) ProofSnap запрашивает квалифицированную электронную метку времени (RFC 3161) у Disig a.s., квалифицированного поставщика доверительных услуг из доверенного списка ЕС. Если метку времени добавить не удалось, это указывается в пакете.
- Проверка без подключения к интернету
- Каждый пакет содержит скрипты проверки (
verify.shдля macOS и Linux,verify.ps1для Windows), с помощью которых его можно проверить офлайн и независимо от ProofSnap.
Реестр выданных пакетов
ProofSnap записывает в реестр хеши манифестов всех выданных им пакетов. Любой может проверить хеш через
GET /v1/ledger/{hash}: если хеш есть в реестре, это подтверждает, что ProofSnap выдал именно этот пакет. Подробности об эндпоинте приведены в документации API.
Резервная копия во втором регионе ЕС
Каждый пакет доказательств, созданный в рабочем режиме, копируется в отдельное хранилище Amazon S3
в другом регионе ЕС (Ирландия). Копия появляется в течение нескольких минут после создания пакета, а эндпоинт GET /v1/captures/{id} показывает состояние этой копии для каждого снимка. Копия удаляется вместе с оригиналом. Пакеты, созданные в тестовом режиме, не копируются.
Срок хранения
Доказательства хранятся 10 лет с даты снимка. Для страницы, снимки которой делаются по расписанию, срок отсчитывается с момента, когда в последний раз было установлено, что зафиксированная версия всё ещё актуальна:
- Каждая проверка, которая показывает, что страница не изменилась, продлевает срок хранения текущего снимка.
- Для снимка, который заменён более новой версией, срок отсчитывается с момента замены.
После окончания подписки у вас есть 30 дней, чтобы скачать все свои данные. В тарифе «Archive only» ваши доказательства остаются доступными для чтения, скачивания и проверки, даже если вы больше не делаете новых снимков.
Удаление
Пакет, который вы удаляете в панели или через API, сначала попадает в корзину, откуда его можно восстановить в течение 30 дней. Затем все сохранённые версии удаляются из обеих копий. Если вы выбираете безвозвратное удаление, пакет удаляется сразу. По истечении срока хранения или 30 дней, отведённых на скачивание данных аккаунта, все сохранённые версии удаляются тем же способом. Снимок под юридическим удержанием нельзя удалить, пока удержание действует. Кто и когда удалил пакет, фиксируется; само содержимое не сохраняется.
Кто имеет доступ к снимкам
- Ключи API
- Полный ключ хранится только в виде хеша SHA-256 и показывается один раз, при создании. Отозванный ключ перестаёт работать в течение 60 секунд. В тарифе Website Archive ключи API дают доступ только на чтение: с их помощью можно просматривать, скачивать и проверять снимки и управлять подписками на вебхуки. Снимки и расписания в этом тарифе запускаются в панели.
- Вход в панель
- Firebase Authentication. Прежде чем создавать ключи, запускать снимки или покупать тариф, нужно подтвердить адрес электронной почты.
- История доступа
- Если снимок скачивает, проверяет, перемещает в корзину, восстанавливает или удаляет не автор, а другой пользователь (например, владелец корпоративного аккаунта или сотрудник, назначенный на дело), это отражается в истории снимка.
- Лимиты запросов
- На снимки, заверения и другие платные операции действует ограничение частоты запросов на аккаунт (rate limit), общее для всех ключей этого аккаунта.
Шифрование при хранении и передаче
- При передаче
- Весь трафик API, панели и вебхуков идёт по HTTPS (TLS).
- При хранении
- Пакеты доказательств в обоих хранилищах зашифрованы алгоритмом AES-256 (шифрование на стороне сервера Amazon S3, SSE-S3: ключами шифрования управляет Amazon S3). В обоих хранилищах заблокирован любой публичный доступ.
Вебхуки: подпись и адреса доставки
- Подпись
- Вебхуки (webhook) подписываются HMAC-SHA256 по спецификации Standard Webhooks. Вебхуки, отправляемые на
webhook_url, заданный в запросе или в расписании, подписываются секретом вебхука того ключа API, с помощью которого задан этот адрес. Этот секрет можно сменить (ротировать) с переходным периодом 24 часа. У подписки на вебхуки на уровне аккаунта есть собственный секрет подписи, который показывается один раз, при создании подписки. - Адреса доставки
- Вебхуки отправляются только на публичные HTTPS-эндпоинты. Имя хоста заново разрешается и проверяется перед каждой доставкой, а соединение устанавливается только с проверенным IP-адресом, поэтому частные IP-адреса, loopback-адреса и адреса облачных служб метаданных отклоняются и после изменения DNS-записей. Перенаправления игнорируются.
Вебхуки: повторные попытки и подписки
- Повторные попытки
- Если доставка завершилась тайм-аутом, ошибкой соединения или HTTP-кодом ошибки (кроме 410 Gone), она повторяется до 5 раз примерно в течение 35 часов (через 5 мин, 30 мин, 2 ч, 8 ч и 24 ч) с тем же
webhook-id, чтобы получатель мог отбросить дубликаты. На каждую попытку ответ ожидается не более 10 секунд. - Скачивание
- В повторных доставках и в доставках по подписке на вебхуки нет ссылки для скачивания (она действует 24 часа). Получатель может запросить новую ссылку через
GET /v1/captures/{id}. - Подписки на вебхуки
- Подписка на вебхуки на уровне аккаунта отключается, если эндпоинт возвращает 410 Gone, после 5 дней без успешной доставки или, если она создана с помощью ключа API, при отзыве этого ключа. События хранятся 30 дней, их можно запросить через
GET /v1/events.
Внешние сервисы
- Оплата
- Платежи обрабатывает Stripe. ProofSnap не хранит номера карт.
- Служебные письма
- Письма для подтверждения адреса электронной почты и письма со ссылкой для сброса пароля отправляются через MailerSend.
- Метки времени
- Календари OpenTimestamps и, если запрошена квалифицированная метка времени, Disig a.s. получают только хеш манифеста, а не сами доказательства.
- Запросы DNS и WHOIS
- Чтобы задокументировать сайт, с которого сделан снимок, имя хоста разрешается через Google Public DNS и Cloudflare DNS, а регистрационные данные домена запрашиваются в публичных сервисах RDAP и WHOIS.