Безопасность в LangReply

Что мы шифруем, что уничтожаем и чего честно не можем гарантировать. Написано без маркетингового жаргона.

1. Шифрование при хранении

Чувствительные данные (учётные записи, история переводов, сообщения OTT, настройки) шифруются при хранении алгоритмом AES-256-GCM. Мастер-ключ находится вне Git-репозитория, на томе с ограниченным доступом (права 600, выделенный владелец).

Каждая чувствительная запись несёт собственный IV (случайный 96-битный nonce) и тег аутентификации GCM. Подмена шифротекста обнаруживается при расшифровке (криптографический отказ, без тихого повреждения данных).

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

2. Необратимое стирание (crypto-shredding)

Принцип

У каждого диалога OTT, каждой партии чувствительных сообщений и каждого аккаунта есть собственный DEK (Data Encryption Key) — уникальный, случайно сгенерированный ключ AES-256. Данные шифруются этим DEK; сам DEK зашифрован мастер-ключом (KEK).

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

Математическая гарантия

Пространство ключей AES-256 составляет 2256 возможных значений — около 1,16 × 1077. Восстановить уничтоженный ключ перебором при нынешнем состоянии открытой криптографии и доступных вычислительных мощностей (включая прогнозируемые постквантовые атаки Гровера, снижающие оценку до 2128) неосуществимо.

Что уничтожается на самом деле

  • DEK в оперативной памяти (немедленное обнуление).
  • Зашифрованный DEK в базе (UPDATE ... SET encrypted_dek = NULL + VACUUM в Postgres, где применимо).
  • Копии в кэше приложения.

3. Автоматически исчезающие сообщения

В любом диалоге OTT можно включить таймер автоочистки: по его истечении сообщения уничтожаются через crypto-shredding DEK этого диалога.

Настраиваемые сроки

Если ничего не задано, срок по умолчанию не применяется: сообщения хранятся до ручного удаления.

Отсчёт начинается с момента, когда сообщение прочитано получателем (по умолчанию) либо когда оно отправлено (опция). Серверный сборщик запускается каждые 10 минут и удаляет всё просроченное.

Изменение срока видно в диалоге (системное сообщение с отметкой времени). Ни отправитель, ни получатель не может «продлить» уже истёкшее сообщение: ключ уничтожен.

4. Полная очистка аккаунта

В пользовательском портале кнопка «Уничтожить все мои сообщения» запускает немедленное уничтожение всех DEK, связанных с вашим аккаунтом: диалогов OTT, истории переводов, черновиков, зашифрованных вложений.

Операция:

Очистка сообщений не удаляет сам аккаунт (идентификатор, адрес электронной почты, платёжные настройки): для этого используйте полное удаление аккаунта — отдельное действие.

5. Изоляция по аккаунтам

У каждого аккаунта свой DEK. Компрометация одного DEK раскрывает только данные этого аккаунта, но не других. Мастер-ключ (KEK) нужен, чтобы расшифровать DEK, но сам по себе он не позволяет прочитать аккаунт, DEK которого больше нет в базе.

Запросы к API ограничены по account_id. Ни один маршрут не принимает идентификатор аккаунта как свободный параметр без проверки принадлежности сессии.

6. Собственный движок перевода

Основной перевод выполняет NLLB-200 1.3B (202 языка), размещённый на нашем сервере, во внутреннем микросервисе, не доступном из Интернета. Для перевода содержимое не покидает нашу инфраструктуру.

Резерв: при недоступности основного движка автоматический резерв может обратиться только к Claude (Anthropic). Для чувствительных сценариев резерв отключается на уровне аккаунта; при срабатывании содержимое передаётся в Anthropic, и мы отмечаем это в ответе API.

Резервный сервис MyMemory удалён 28 июля 2026 года: он передавал содержимое открытым текстом в URL, без договора об обработке данных. Третьего резерва не существует: если ни один движок недоступен, перевод завершается ошибкой, а не передаётся третьей стороне без договора.

7. Аутентификация

Пароли хэшируются алгоритмом scrypt (N=16384, r=8, p=1). Сессии — через подписанную HMAC cookie HttpOnly. Доступна двухфакторная аутентификация: TOTP (Google Authenticator, Aegis, 1Password) и одноразовые коды по SMS (Twilio, сообщения на языке получателя).

Ограничение частоты запросов на конечных точках аутентификации (429 после повторных попыток). Пароли никогда не отправляются по электронной почте; сброс выполняется по одноразовой ссылке.

8. Резервные копии

Ежедневные зашифрованные резервные копии тома данных. Срок хранения: скользящие 14 дней, затем удаление.

Зашифрованная копия (AES-256) хранится вне площадки — в GitHub и Backblaze (США). Сообщения OTT/SMS и их ключи из неё исключены и никогда не покидают Европейский союз.

9. Ваши права (GDPR / Закон 25 / CCPA)

Право на доступ, исправление, удаление, переносимость и возражение. Запросы направляйте по адресу privacy@langreply.com; они обрабатываются в течение 30 дней. Удаление выполняется через описанный выше crypto-shredding.

10. Сертификации — честно

Сегодня у нас нет сертификатов SOC 2, ISO 27001 или HIPAA. Мы не станем утверждать обратное, пока это не станет правдой. Описанные здесь меры действительно внедрены; соответствующих внешних аудитов пока нет.

11. Чего мы честно не гарантируем

Мы предпочитаем говорить правду, а не продавать иллюзию. Вот чего crypto-shredding не делает:

  • Резервные копии: наши резервные копии не содержат таблиц сообщений и ключей — восстановление не может заново раскрыть уничтоженное сообщение. Осознанная плата за это: при потере базы данных история OTT/SMS восстановлению не подлежит.
  • Скриншот на стороне получателя: если вы отправите исчезающее сообщение, собеседник может сфотографировать свой экран другим устройством. Ни одна программа в мире этому не помешает. Signal тоже не может.
  • WAL, журналы, реплики: Postgres пишет журналы транзакций (WAL). Байт шифротекста мог побывать там до стирания. Эти журналы ротируются, но не мгновенно.
  • SSD и выравнивание износа: SSD распределяют записи физически. Логический DELETE не обязательно перезаписывает физический сектор. Именно поэтому crypto-shredding надёжнее физического стирания — но байт шифротекста какое-то время может сохраняться физически. Без ключа он остаётся нечитаемым.
  • Метаданные аудита: мы храним минимальные метаданные (отметка времени очистки, IP) для аудита и борьбы со злоупотреблениями. Они не содержат уничтоженного содержимого.
  • Сквозное шифрование: сообщения OTT шифруются при хранении на стороне сервера, но это не E2EE в смысле Signal (где даже сервер не может прочитать). Технически LangReply способен расшифровать сообщение, пока существует его DEK. Мы этого не делаем — но не можем утверждать обратное.

12. Сообщить о проблеме безопасности

Скоординированное раскрытие — на security@langreply.com с темой [SECURITY]. Мы подтверждаем получение в течение 72 часов и выпускаем исправление или меры смягчения в разумный срок в зависимости от серьёзности. Формальной программы вознаграждений за ошибки пока нет; мы упоминаем исследователей, которые этого хотят.

Последнее обновление: 6 августа 2026 г.