Безопасность в 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 этого диалога.
Настраиваемые сроки
- 1 час
- 24 часа
- 7 дней
- 30 дней
- Отключено
Если ничего не задано, срок по умолчанию не применяется: сообщения хранятся до ручного удаления.
Отсчёт начинается с момента, когда сообщение прочитано получателем (по умолчанию) либо когда оно отправлено (опция). Серверный сборщик запускается каждые 10 минут и удаляет всё просроченное.
Изменение срока видно в диалоге (системное сообщение с отметкой времени). Ни отправитель, ни получатель не может «продлить» уже истёкшее сообщение: ключ уничтожен.
4. Полная очистка аккаунта
В пользовательском портале кнопка «Уничтожить все мои сообщения» запускает немедленное уничтожение всех DEK, связанных с вашим аккаунтом: диалогов OTT, истории переводов, черновиков, зашифрованных вложений.
Операция:
- Мгновенна с криптографической точки зрения (ключ исчезает за миллисекунды).
- Необратима — мы не храним резервных копий уничтоженных DEK.
- Подтверждается двойным согласием (ввод пароля + подтверждающая фраза).
- Журналируется (метаданные аудита: отметка времени, IP, user-agent) без раскрытия уничтоженного содержимого.
Очистка сообщений не удаляет сам аккаунт (идентификатор, адрес электронной почты, платёжные настройки): для этого используйте полное удаление аккаунта — отдельное действие.
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 г.