Herkos

Политика безопасности

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

Как сообщить об уязвимости

Пожалуйста, не открывайте публичный issue по проблемам безопасности.

Сообщите о ней конфиденциально по электронной почте security@herkos.email.

Что полезно указать: в чём проблема, как её воспроизвести, на какой платформе и версии вы проверяли и чего может добиться атакующий. Демонстрация уязвимости (proof of concept) очень помогает.

Никогда не указывайте в сообщении свой nsec, закрытый ключ или секрет bunker.

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

Что входит в область

Само приложение Herkos: обработка и хранение ключей, шифрование и расшифровка сообщений (включая проверки отправителя NIP-59 и изоляцию Bcc в local_packages/nostr_mail), блокировка приложения, связь с реле и мостами, обработка вложений, а также процесс сборки и выпуска. Для Herkos Drive — также его пакет протокола (packages/herkos_drive_protocol) и страница, которая открывает его ссылки (herkos.app/f/); см. его собственный раздел ниже.

Что не входит в область

Известные ограничения, прямым текстом

Это компромиссы проектирования, а не уязвимости. Мы лучше запишем их, чем кто-то обнаружит их на собственном горьком опыте:

Herkos Local Relay: что оно защищает и чего нет

Herkos Local Relay хранит на вашем устройстве события ваших приложений, в том числе частные (черновики, частные списки, получаемые вами конверты). Вот что их защищает и где проходит граница — для каждой платформы. О проблемах безопасности реле сообщайте так же, как о любых других (см. выше).

Вся база данных зашифрована, включая её журнал транзакций (SQLite3 Multiple Ciphers, AEGIS-256). Ключ — это 32 случайных байта, созданных на устройстве и хранящихся в защищённом хранилище системы: Keystore в Android, DPAPI в Windows, связка ключей (libsecret) в Linux. Вашего пароля у него нет, потому что реле должно запускаться само. Без ключа реле не запускается и сообщает об этом: оно никогда не открывает и не создаёт незашифрованную базу и никогда не удаляет ту, которую не может открыть.

Если… Android Windows Linux
кто-то копирует файл базы (резервная копия, синхронизируемая папка, образ диска) Защищено Защищено Защищено
украли выключенное устройство или диск Защищено: ключ в Keystore Защищено, если не знают пароль вашей учётной записи Windows: DPAPI защищает им ключ Защищено, если не знают пароль вашей связки ключей (почти всегда это пароль вашего сеанса)
другая учётная запись пользователя на том же устройстве Защищено Защищено: DPAPI работает отдельно для каждого пользователя Защищено: у каждого пользователя своя связка ключей
другое приложение или программа, работающие от имени вашего пользователя Защищено: Android изолирует каждое приложение, а Keystore отдаёт ключ только реле Нет: DPAPI шифрует для пользователя, а не для приложения; программа, работающая от вашего имени, может запросить ключ так же, как реле Нет: связка ключей вашего сеанса не отделяет приложения друг от друга
телефон с root-доступом или инструмент, выполняющий код от имени приложения Нет — —
кто-то держит в руках разблокированное устройство Только PIN или отпечаток пальца реле, если вы их задали Так же Так же
кто-то читает память реле во время его работы Нет Нет Нет

На компьютере граница DPAPI и связки ключей такая же, как у любой программы: они защищают от других пользователей и от того, кто унесёт диск, но не от вредоносной программы, уже работающей от вашего имени. Если вас беспокоит этот случай, защищает шифрование системного диска (BitLocker, LUKS) и отказ от запуска программ, которым вы не доверяете. В Linux без связки ключей (без Secret Service) реле не запускается и объясняет почему: оно никогда не хранит ключ в открытом виде.

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

Чего оно здесь не защищает:

Локальная сеть, если вы её включите (по умолчанию она выключена):

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

Копии. Зашифрованная копия защищена паролем (scrypt и XChaCha20-Poly1305): без него её никто не откроет, в том числе и мы. Экспорт в JSONL не шифруется и содержит ваши частные события в открытом виде; приложение об этом предупреждает.

Блокировка (PIN, а также отпечаток пальца или Windows Hello) запрашивается при открытии приложения, после 30 секунд вне его и для одобрения сопряжения. Это барьер удобства, как в Mail: она ничего не шифрует. В Android при заданном PIN нельзя делать снимки экрана и нет миниатюры среди недавних приложений, а начиная с Android 12 окно никакого другого приложения не может оказаться поверх окна реле, пока вы им пользуетесь.

Herkos Drive: что оно защищает и чего нет

Herkos Drive хранит ваши файлы на серверах Blossom, а список ваших файлов и папок — на реле Nostr, и то и другое в зашифрованном на вашем устройстве виде. Вот что их защищает и где проходят границы. Все подробности — в spec-drive.md и в модели угроз amenazas-drive.md, в packages/herkos_drive_protocol/; что видит каждое реле и каждый сервер — в политике конфиденциальности. Сообщайте о проблемах безопасности Drive так же, как о любых других (см. выше).

Чего реле и серверы сделать не могут:

Чего оно не защищает:

Как это проверяется. Две внутренние проверки по модели угроз (2 ноября 2026 года) и исправления по их итогам; тесты того, что показывает каждое событие и каждый блок; фаззинг каждого обработчика того, что приходит извне (события, печати, манифесты, ссылки, резервные копии). Внешнего аудита пока нет: он запланирован до публичной беты, и его отчёт будет опубликован полностью. Drive ещё находится в разработке.

Поддерживаемые версии

Исправления безопасности применяются к последней выпущенной версии. Учитывая размер проекта, старые версии не поддерживаются — пожалуйста, обновитесь, прежде чем сообщать о проблеме.