# Модель безопасности

## Telegram-сессия

Зашифрованная MTProto-сессия по возможностям близка к уже авторизованному Telegram-клиенту. Компрометация сессии опаснее утечки одноразового кода входа.

Проект хранит сессию как AES-256-GCM ciphertext. Ключ находится только в `/home/response/.secrets/telegram-amocrm.env`.

Обязательно:

- `.secrets` — `0700`;
- env — `0600`;
- отдельная БД и отдельный DB user;
- HTTPS;
- уникальные `ADMIN_API_KEY`, `WIDGET_API_KEY`, `WEBHOOK_SHARED_SECRET`;
- рабочие, а не личные Telegram-аккаунты;
- 2FA на каждом аккаунте;
- резервная процедура отзыва сессии через Telegram → Устройства.

## Разделение ключей

`ADMIN_API_KEY` разрешает подключать/отключать аккаунты и менять назначения.

`WIDGET_API_KEY` разрешает менеджерам смотреть назначенные им аккаунты и ставить сообщения в очередь. Он будет доступен в клиентской части виджета, поэтому не должен совпадать с административным ключом или секретом Chats API.

`AMO_CHAT_SECRET` никогда не попадает в браузер и используется только backend для HMAC-подписи.

## Антиспам

Встроены:

- дневной лимит первых сообщений на аккаунт;
- минимальная пауза между первыми контактами;
- ручная постановка первого сообщения;
- отсутствие batch/mass-send endpoint;
- обработка `FLOOD_WAIT`;
- перевод аккаунта в `error` при `PEER_FLOOD`, privacy/restriction errors;
- аудит и очередь.

Значения по умолчанию — не гарантированные лимиты Telegram, а внутренний предохранитель.

## Резервные копии

Дамп БД сам по себе не раскрывает Telegram-сессии без `SESSION_ENCRYPTION_KEY`. Не храните дамп и env в одном публичном архиве или каталоге.

## Ротация SESSION_ENCRYPTION_KEY

В версии 0.1 автоматической ротации нет. Нельзя просто заменить ключ в env: существующие сессии перестанут расшифровываться. Для ротации нужен отдельный migration script, который расшифрует все записи старым ключом и зашифрует новым.
