Обновлено 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.