Все записи

7 мин чтения

Что видит CardanoWall (и чего не видит)

CardanoWall видит данные аккаунта, биллинга и публичные записи подтверждений. По замыслу он не видит ваш Identity Seed в открытом виде, ваши приватные ключи и открытый текст запечатанного файла.

CardanoWall видит обычные служебные данные и публичные записи подтверждений, которые вы публикуете. По замыслу он не видит ваш Identity Seed в открытом виде, ваши приватные ключи и открытый текст файла, который вы запечатываете. Самый чувствительный материал хранится и используется на вашем устройстве, а не на наших серверах.

Это и есть честная версия модели приватности. CardanoWall — это размещённый сервис, построенный на шлюзе, поэтому ему действительно нужны данные об аккаунте, биллинге, публикациях и индексации, чтобы работать. Интересен не вопрос «видит ли CardanoWall хоть что-нибудь?» — конечно, видит. Интересно, какого рода данные он видит и что остаётся зашифрованным от нас.

В этой статье мы разбираем эту границу, категория за категорией.

Какие данные аккаунта хранит CardanoWall?

Обычные данные размещённого сервиса. В зависимости от того, как вы пользуетесь продуктом, это может включать:

  • идентификатор вашего аккаунта;
  • идентификаторы для входа, например адрес электронной почты или ссылку на привязанный аккаунт OAuth;
  • записи биллинга и ваш предоплаченный баланс;
  • метаданные API-ключей и их хешированную форму (никогда не сам ключ в открытом виде);
  • ссылки на платёжный процессор для пополнений;
  • настройки на уровне аккаунта;
  • метки времени действий с аккаунтом;
  • метаданные поддержки и эксплуатации;
  • журналы ограничения частоты запросов и безопасности.

Это данные того же рода, что хранит любой сервис с аккаунтами. Ничего из этого не является вашим Identity Seed.

Какие данные идентичности он может видеть?

Публичные ключи идентичности — и ничего приватного.

В CardanoWall идентичность детерминированно выводится из единственного 32-байтового Identity Seed, и сервису для работы нужны именно публичные ключи этой идентичности: показать вашу идентичность, подсчитать её подписанные подтверждения, привязать идентичность к вашему аккаунту после проверки владения и отобразить публичный профиль, когда вы решите его опубликовать.

Поэтому сервис может видеть публичные данные идентичности, такие как:

  • публичный ключ подписи Ed25519;
  • публичный ключ получателя X25519;
  • необязательный гибридный постквантовый публичный ключ получателя;
  • время создания идентичности в базе данных сервиса;
  • состояние связи между аккаунтом и идентичностью;
  • любые поля публичного профиля, которые вы включили.

Это публичные или служебные факты. Это не приватный ключ подписи и не приватный ключ получателя, и из них нельзя обратно восстановить ваш сид.

Что серверу видеть вообще не нужно?

Всё, что позволило бы ему действовать от вашего имени. Серверу это не нужно, и он специально устроен так, чтобы не хранить в пригодном для использования виде:

  • Identity Seed в открытом виде;
  • приватные ключи подписи Ed25519;
  • приватные ключи получателя X25519;
  • гибридные (постквантовые) секреты получателя;
  • материал разблокировки, который выдаёт ваш passkey;
  • расшифрованное содержимое вашего хранилища идентичности;
  • расшифрованный открытый текст запечатанного файла.

Всё это живёт на вашем устройстве после разблокировки или в резервных копиях, которые контролируете вы. Переносимая, каноническая копия идентичности — это её сид; именно этот артефакт, а не размещённый слой для удобства, и есть настоящая резервная копия.

Что зашифрованное хранилище раскрывает серверу?

Что оно существует — и почти ничего больше.

Чтобы вы могли разблокироваться на новом устройстве с помощью passkey, CardanoWall хранит по одной актуальной строке зашифрованного хранилища на аккаунт. Сервер может читать метаданные этой строки — когда она обновлялась в последний раз, её номер версии и какие зарегистрированные passkey с ней связаны, — потому что это нужно ему для интерфейса разблокировки и управления жизненным циклом.

Чего сервер не может сделать — так это расшифровать хранилище. Хранилище — это единый шифротекст в стиле age, адресованный исключительно факторам разблокировки вашего passkey WebAuthn (стансы PRF). В нём сознательно нет ни пути разблокировки по паролю, ни добавленного получателя с публичным ключом, так что хранимый шифротекст не раскрывает ничего, что сервер мог бы взломать офлайн. Это удобство на уровне сервиса, а не кастодиальное хранение: запертый ящик у нас, а единственные ключи — у ваших passkey.

В открытом виде хранилище содержит ваши Identity Seed и ваши приватные отображаемые метки — ровно тот материал, который никогда не должен быть доступен серверу для чтения. Та же архитектура управляет и отзывом: удаление passkey заново шифрует хранилище под оставшиеся факторы и безвозвратно удаляет предыдущий шифротекст, так что удалённый аутентификатор больше не может открыть текущее хранилище. Это реальный отзыв для текущего состояния, хотя и не ретроактивный — копия, которую злоумышленник уже выгрузил и всё ещё может открыть, — это отдельная проблема. Как passkey защищают ваше хранилище идентичности разбирает это подробнее.

Какие данные подтверждений публичны?

Само подтверждение. Записи Label 309 публикуются в Cardano именно для того, чтобы любой, у кого есть ссылка на транзакцию, мог их проверить. В зависимости от записи публичные данные могут включать:

  • хеши содержимого;
  • ссылку на транзакцию;
  • время блока, которое назначает блокчейн;
  • структуру записи;
  • подписи и публичные ключи подписавших, когда автор решил подписать;
  • корни Merkle для пакетированных записей;
  • метаданные конверта шифрования;
  • URI контентно-адресуемого хранилища (ar://, ipfs://);
  • количество зашифрованных слотов получателей;
  • семейство обмена ключами, использованное для запечатанной записи.

Эти данные публичны намеренно: именно они делают подтверждение проверяемым без доверия к CardanoWall. Для запечатанной записи обратите внимание на то, чего нет в ней: открытый текст файла никогда не попадает в блокчейн. Наблюдатель может увидеть, что запись запечатана, сколько в ней слотов получателей и какое семейство обмена ключами она использует, но не то, кто эти получатели, и не содержимое.

Что могут видеть шлюзы хранилища?

Хранимые байты и метаданные запросов.

Если запись указывает на содержимое в Arweave или IPFS, публичные шлюзы, которые отдают эти байты, видят запросы к ним. Для публичного файла эти байты — открытый текст. Для запечатанного файла эти байты — шифротекст, и они должны оставаться нечитаемыми без приватного ключа получателя.

Шлюзы также могут наблюдать тайминги, размер объекта и характер запросов. На них нельзя полагаться в вопросах конфиденциальности. Именно поэтому чувствительный файл нужно запечатать до того, как он попадёт в хранилище, а не рассчитывать на то, что слой хранения сохранит его в тайне.

Что может видеть браузер, пока вы разблокированы?

Всё, что нужно, чтобы действовать от имени вашей идентичности, — на всё время, пока сессия разблокирована.

После разблокировки ваши Identity Seed и выведенные из них приватные ключи живут в памяти сессии вашего браузера, чтобы приложение могло подписывать и расшифровывать. Когда вы расшифровываете запечатанный файл, его открытый текст тоже оказывается в браузере. При блокировке или выходе этот материал из памяти затирается по мере возможности.

Это приватность на стороне клиента, и она честна относительно своих пределов. Хранение секретов на вашем устройстве защищает вас от кастодиального хранения на сервере, но это значит, что ваше устройство и окружение браузера имеют значение. Вредоносное расширение браузера, враждебное локальное ПО или активная уязвимость межсайтового скриптинга во время разблокированной сессии могут прочитать то, что находится в памяти. Строгие заголовки content-security, разблокировка с минимумом скриптов и разблокировка только по явному действию — всё это снижает такую уязвимость, но не способно её устранить. Для чувствительных идентичностей используйте устройство, которому доверяете; хранилище браузера и ключи сессии объясняет, что именно кешируется, а что — нет.

Что может раскрыть адресная книга?

Ваш список контактов — это служебные данные, и они могут быть чувствительными по-своему.

Доверенные контакты — это локальные записи аккаунта, которые избавляют вас от необходимости каждый раз вставлять длинные публичные ключи, когда вы запечатываете файл кому-то. Запись может содержать отображаемое имя, публичный ключ подписи, необязательные адреса получателя (классический и постквантовый), то, как и когда вы проверили контакт, и заметки в свободной форме.

Это не Identity Seed, но список того, с кем вы переписываетесь, может раскрыть связи и рабочие процессы. Логирование в CardanoWall устроено так, чтобы держать это в тайне: серверные действия, создающие и редактирующие контакты, записывают только идентификатор запроса и идентификатор вашего аккаунта — никогда имя контакта, ключи, заметки или метод проверки.

Чего CardanoWall не обещает?

Он не обещает невидимости.

CardanoWall — это не сеть анонимности. Блокчейн, шлюзы хранилища, платёжная система, ваш вход в аккаунт, ваш браузер и ваш сетевой путь — всё это может раскрыть метаданные. Публикация неподписанной запечатанной записи держит отправителя, получателей и открытый текст вне самой записи Label 309 — но это приватность на уровне записи, а не полная анонимность. Адрес Cardano, оплачивающий комиссию, ваш IP, каким его видят шлюзы, и подобные сигналы живут вне записи и вне этой гарантии.

Он также не делает скомпрометированное устройство безопасным. Если в вашей разблокированной сессии исполняется вредоносный код, этот код видит то же, что и вы.

И опубликованное подтверждение публично по замыслу. Оно показывает, что определённые байты существовали к определённому публичному моменту времени. Само по себе оно не доказывает, кто их создал, кто ими владеет и что их содержимое правдиво, — см. что подтверждение не доказывает об этой границе.

Если коротко

CardanoWall видит служебные данные и публичные данные подтверждений. По замыслу он не видит ваш Identity Seed в открытом виде, ваши приватные ключи, открытый текст вашего хранилища и открытый текст запечатанного файла.

Так что на практике: запечатывайте чувствительные файлы до того, как они покинут ваше устройство, держите надёжную копию своего сида, разблокируйтесь на устройствах, которым доверяете, и относитесь ко всему, что публикуете в блокчейне, как к навсегда публичному.

Хорошая приватность начинается с того, что вы точно знаете, где живёт каждый вид данных, — и CardanoWall построен так, чтобы данные, которые важнее всего, жили вместе с вами.

Что почитать дальше

CardanoWall — это эталонная реализация Label 309, открытого, независимого от поставщика стандарта Proof of Existence. Стандарт подан в процесс Cardano CIP и рассматривается редакторами CIP как предложение категории Metadata (открытый pull request). Криптографическое ядро, SDK и инструменты командной строки открыты на github.com/cardanowall, так что вы можете проверить, что именно вычисляется на вашем устройстве, а не верить нам на слово.

securityprivacyidentity