Beresta

Ваши данные

Приватность

Обновлено 20261103 · сверено с исходным кодом, а не написано по памяти

Beresta работает на вашем устройстве. Сервера для ваших данных у приложения нет — ни для книг, ни для учётных записей, ни для сбора отчётов. Версия для Windows и Linux один раз на машину обращается к моему серверу лицензий — что именно уходит. Всё, что уходит наружу, уходит туда, куда вы сами велели, и ниже перечислено поимённо.

Эта страница — не юридическая формальность. Она собрана сверкой с кодом: девять областей, 71 канал, каждый проверен отдельно. Где обещание нуждается в оговорке — оговорка написана, а не спрятана.

Чего нет вовсе

  • Наш сервер — только по вашей кнопке. Береста на Маке, iPhone и iPad сама не обращается к адресам проекта. Исключения два, и оба ниже: кнопка «Получить ключ для Windows и Linux» в «Настройках» → «Покупка» (с версии 1.9.1) и, на Windows и Linux, отметка машины под ключом. Зашитых внешних адресов немного: справочники книг Open Library и Google Books (туда приложение обращается только по вашему нажатию, см. ниже) и страница Apple для погашения промокода.
  • Нет аналитики, телеметрии и сборщиков падений. Ни Sentry, ни Crashlytics, ни Firebase, ни счётчиков — ничего.
  • Нет рекламы и слежки. Ни рекламных сетей, ни рекламного идентификатора, ни запроса на отслеживание.
  • Нет учётной записи и входа. Регистрироваться негде и не у кого. Ключ есть только у версии для Windows и Linux — это подписанная строка, а не учётная запись.
  • Нет уведомлений. Токен устройства не запрашивается никогда.
  • Нет проверки обновлений «домой». Приложение не сообщает о себе никуда.
  • Книга не ходит в сеть, пока вы читаете. Читалке запрещено обращаться наружу правилом содержимого; картинки сохранённых статей заменяются на местные ещё при сохранении.

Что уходит с устройства, даже если вы ничего не включали

Сетевых запросов на чей-либо узел без единой настройки не уходит ни одного. Но три вещи работают всегда, и о двух из них честно сказать неприятно.

1. Handoff — «что вы читаете прямо сейчас». Открыв книгу, приложение объявляет её вашим же соседним устройствам с той же учётной записью Apple: название книги и место, на котором вы остановились. Ни текста, ни хайлайтов, ни автора там нет. Канал — Apple, эфиром или через iCloud.

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

2. Приложение слушает App Store. При запуске оно подписывается на сделки вашей учётной записи, чтобы знать, оплачены ли обновления, и подтверждает магазину полученные. Apple при этом видит вашу учётную запись, устройство и страну — то же, что видит и без нас. Чек никуда не отправляется; о покупателе мы не узнаём ничего.

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

Что уходит, когда вы включили это сами

Синхронизация через папку

Вы выбираете каталог — на диске, на флешке, в каталоге Syncthing или внутри iCloud Drive. Туда уезжает: журнал ваших правок пополе (названия и метаданные книг, хайлайты с вашими мыслями, закладки, отрезки чтения, подписки RSS), позиции чтения, целые файлы книг и обложки всей библиотеки, а также имя устройства так, как его показывает система, и отметки о том, когда вы этим устройством пользовались.

В папке всё лежит открытым текстом. Шифрования Бересты там нет: это ваш каталог, и защищает его то, чем вы его защитили. Любой, у кого есть доступ к этому каталогу — или к облаку, в котором он лежит, — увидит, что вы читаете, где остановились, что выписали и что об этом подумали.

Если каталог лежит в iCloud Drive — всё вышеперечисленное лежит у Apple.

Синхронизация через S3 / Backblaze B2 или WebDAV

То же содержимое, но зашифрованное ключом, который есть только у вас (ChaCha20-Poly1305). Оператор хранилища видит зашифрованные объекты, их размеры и время обращений — и не видит содержимого. Ключ мы не знаем и восстановить не можем: потеряете код восстановления — данные в этом хранилище не прочитает никто, включая нас.

Подписки на ленты

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

Вырезки из браузера, каталог OPDS

Расширение браузера общается только с вашим же компьютером (127.0.0.1) и никуда больше. Оно ничего не собирает и ничего не отправляет в интернет. Если Береста не запущена в момент вырезки, страница ждёт в собственном хранилище расширения внутри браузера, на этом же компьютере, — не больше 20 страниц — и стирается оттуда, как только Береста её примет (или откажет, назвав причину). Каталог OPDS, если вы его включили, отдаёт вашу библиотеку в ту сеть, в которой машина находится сейчас, — по паролю. Хайлайты через него не отдаются.

Выгрузка в Obsidian

Снимок хайлайтов ложится в папку вашего хранилища. Дальше он живёт по правилам того, чем вы синхронизируете хранилище — iCloud, Obsidian Sync, Dropbox, Syncthing, git.

Что уходит по одному вашему нажатию

  • «Поделиться» (iPhone/iPad) — файл книги целиком либо файл с хайлайтами. В хайлайтах есть цитаты, ваши мысли и ссылка с точным местом и отпечатком файла.
  • Отчёт диагностики — показывается вам целиком до отправки; отправляете его вы. Точки приёма у нас нет. В нём есть личное — см. страницу поддержки.
  • Копирование в буфер обмена. Буфер на Маке читает любая программа, а при включённом Универсальном буфере он уезжает на другие ваши устройства. Помните об этом, копируя код восстановления: это и есть ключ от вашего шифрованного хранилища.
  • «Открыть первоисточник» и ссылки внутри PDF — адрес открывается вашим браузером, со всеми вашими куками и всеми рекламными метками, которые были в сохранённом адресе.
  • Покупка и «Восстановить покупки» — обычный разговор с App Store.
  • «Сведения из сети» (с версии 1.6) — кнопка в карточке книги открывает лист, и запрос уходит, только когда вы нажмёте в нём «Найти». Сама по себе, при ввозе или в фоне программа справочники не спрашивает. Справочников два: Open Library (её ведёт Internet Archive) и Google Books (Google).
    • Что уходит: название и автор книги, ISBN, если он набран; в Open Library — ещё код языка книги. В Google Books уходит и ваш ключ, если вы его вписали; хранится он только в Связке ключей устройства, а в Open Library не уходит никогда. Как любой сервер, справочник видит адрес, с которого пришёл запрос. Найденные обложки в листе — это ещё запросы к books.google.com или covers.openlibrary.org.
    • Что не уходит: ни библиотека, ни другие книги, ни хайлайты, ни ход и место чтения. Опознавателя устройства в запросе нет; куки не отправляются и не сохраняются.
    • Что дальше: что справочник делает с запросом, решают его правила — Internet Archive и Google. Ответ остаётся у вас на устройстве, и в карточку книги попадает только то, что вы отметили сами.

Береста для Windows и Linux: покупка и ключ

У версии для Windows и Linux, в отличие от маковой, есть мой сервер лицензий — потому что продаю её я, а не App Store. Он узнаёт ровно столько, сколько нужно, чтобы продать ключ и не дать ему разойтись по сотне машин. Книг, хайлайтов, хода чтения он не видит и не может увидеть: программа их туда не отправляет.

  • При покупке — почта (на неё приходит ключ), имя и телефон, если вы их указали, товар, сумма и номер заказа. Это журнал заказов (Google Таблицы) и уведомление мне в Telegram, как у всех покупок на сайтах Second Brain. Оплату принимает касса — Robokassa.kz, ЮMoney или ProEducation; номер карты мне не виден. Ключ уходит письмом через Resend.
  • Учёт ключей — номер заказа, сам ключ, вид (программа, продление, возвращение), дата покупки и почта. Он нужен, чтобы прислать ключи заново по вашей просьбе и отозвать ключ, если деньги вернулись.
  • Один раз на машину программа отправляет сам ключ и обезличенный отпечаток машины — 16 байт хеша от системного номера машины, перемешанного с номером ключа. По отпечатку нельзя узнать машину или её владельца, а одна и та же машина под двумя ключами даёт два несвязанных отпечатка. Вместе с ним уходит секрет машины — ещё один хеш того же номера: по нему сервер узнаёт, что освободить машину просит она сама; сервер хранит только хеш этого секрета, сам секрет — нет. Системный номер машины не уходит никогда. Ещё уходит имя компьютера — то, что показывает система (например, «Ноутбук Анны»): по нему вы узнаёте свою машину в списке, когда освобождаете место, — и язык окна, чтобы ответ пришёл на нём. Учётная запись и адрес в сети внутри запроса не уходят; адрес, с которого пришёл запрос, сервер видит, как любой сервер. Хранится отпечаток, хеш секрета, квитанция, имя компьютера, день отметки, время последнего обращения и время освобождения машины. Снова программа обращается к серверу, только когда вы сами нажимаете «Отметить эту машину» или «Освободить эту машину»: ключ и квитанция проверяются без сети.
  • «Пришлите мои ключи» — почта, которую вы ввели; ключи уходят только на неё.
  • Ключ для купивших в App Store (Мак, iPhone, iPad, с версии 1.9.1) — только по кнопке «Получить ключ для Windows и Linux». Уходит подписанная Apple запись о покупке Бересты (по ней сервер проверяет, что покупка настоящая, — без обращения к Apple) и почта, если вы её вписали, чтобы прислать копию ключа. Хранится то же, что в учёте ключей выше: номер покупки, ключ, дата и почта. Одна покупка — один ключ: повторное нажатие возвращает тот же.

Сервер и его горячий резерв стоят в Казахстане (Selectel и Hoster.kz); резервные копии учёта шифруются ещё на сервере, до отправки куда-либо. Удалить почту из учёта — напишите; ключ после этого продолжит работать, но прислать его заново я уже не смогу.

Кто и что узнаёт — поимённо

КтоЧто узнаётКогда
Appleучётную запись, устройство, страну; при Handoff — что вы читаете; при папке в iCloud Drive — всё содержимое обменавсегда / если папка в iCloud
Backblaze, оператор S3 или WebDAVзашифрованные объекты, их размеры и время обращенийесли вы его подключили
Узлы лент, страниц и картинокобращение с вашего адресаесли заведена подписка
Open Library (Internet Archive), Google Books (Google)название, автор и ISBN одной книги, код её языка (Open Library), ваш ключ (Google, если вписан), обращение с вашего адресапо нажатию «Найти» в листе «Сведения из сети»
Сайт первоисточникапереход из вашего браузера, с вашими кукамипо нажатию «Открыть первоисточник»
Всякий с доступом к папке обменавсё содержимое обмена — оно там незашифрованоесли папка общая
Мы, на Маке, iPhone и iPadничего—
Мы, Windows и Linuxпочта покупки, ключ, обезличенный отпечаток машины, имя компьютера, дни отметки и обращенийпри покупке и один раз на машину

Про этот сайт

Сайт — не приложение, и здесь обещание «без моего сервера» не действует.

  • Форма списка ожидания отправляет ваш адрес и, если вы его указали, имя на мой сервер рассылки (Listmonk, Hetzner, Германия); письма доставляет Resend. Отписаться можно ссылкой в любом письме.
  • Формы страницы «Береста для Windows и Linux» отправляют то, что вы в них ввели, на мой сервер платежей и лицензий (Selectel, Казахстан) — см. выше. Форма «Пришлите мои ключи» проверяет, что вы не робот, виджетом Cloudflare Turnstile: он загружается с challenges.cloudflare.com и видит ваш браузер и адрес — как любой сайт, к которому браузер обращается. На других страницах сайта виджета нет.
  • Шрифты лежат на самом сайте. Literata и Fira Mono отдаёт beresta.page, по лицензии SIL Open Font License; открытие страницы не отправляет запросов ни в Google, ни в другую службу шрифтов.
  • На страницах сайта стоит Яндекс.Метрика (счётчик 112548209). Она считает визиты, источники переходов и события: долистали ли вы на главной до блока о Windows и Linux, отправили ли форму письма о новых версиях и по каким кнопкам щёлкнули — App Store, скачивание программы, пресс-кит, форум, GitHub, переход к оплате. С событием уходит только то, по чему события различают: страница, язык, какая кнопка или какой файл, а у перехода к оплате — выбранный ключ и способ оплаты. Записи сессий (Вебвизор) выключены, содержимое полей не записывается, рекламы на сайте нет. Сам скрипт Метрики, как у любого её счётчика, сверяет свой идентификатор посетителя с сервисами Яндекса (запрос к yandex.ru): это делает Яндекс, а не мы, и этими данными мы не пользуемся. Любой блокировщик её отключает, и страница работает без неё полностью.

Ваши права и как ими воспользоваться

Ваши данные лежат у вас. Забрать их можно без нас: формат базы задокументирован открыто и лежит под CC0, хайлайты выгружаются в открытые JSON-LD и Markdown, книги хранятся байт в байт такими, какими вы их положили. Удалить — удалить файлы; никакой копии у нас нет и запрашивать удаление не у кого.

Если вы подписались на список ожидания и хотите, чтобы адрес исчез, — напишите, и он исчезнет.

Как узнать об изменениях

Дата вверху страницы — дата последней сверки с кодом. Существенные изменения я буду называть здесь же, а не менять текст молча. Что меняется в самой программе — на странице «Что нового».

Кто отвечает

ИП Second Brain Production, Казахстан, Караганда. Вопросы и просьбы: laukhin@dementiy.com.