# TgWitness · Русский > Documentation edition: Русский. Project version: `0.9.1`. Source branch: `main`. This index links the Markdown editions of the public pages. The complete handbook is built from the same page content, including source URLs. Untranslated sections retain the English original; a language edition is not a claim that every section has been translated. - [Project context, installation, measured scale and verification limits](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/index.md) - [English project summary](https://phishdestroy.github.io/TgWitness/llms.txt) - [Complete handbook · Русский](https://phishdestroy.github.io/TgWitness/ru/llms-full.txt) - [Complete handbook as Markdown · Русский](https://phishdestroy.github.io/TgWitness/ru/llms-full.md) - [Source code and release history](https://github.com/phishdestroy/TgWitness) - [Collection modes and evidence levels](https://phishdestroy.github.io/TgWitness/ru/guides/modes.md) - [Published checks and measurements](https://phishdestroy.github.io/TgWitness/ru/docs/validation/index.md) ## Complete documentation map ### Guides - [Работа с архивом](https://phishdestroy.github.io/TgWitness/ru/docs/archive/index.md): Загрузите историю, выполните поиск по сохраненным записям, просмотрите источники искусственного интеллекта и подключите свои инструменты. - [Выгрузка через GitHub Actions](https://phishdestroy.github.io/TgWitness/ru/docs/capture/index.md): Выберите Takeout,выгрузку через обычный API или журнал чата на временном раннере GitHub. - [Отдельный аккаунт](https://phishdestroy.github.io/TgWitness/ru/docs/dedicated-account/index.md): Подготовка отдельного аккаунта Telegram для сбора. - [Запуск за несколько минут](https://phishdestroy.github.io/TgWitness/ru/docs/start/index.md): Установите одной командой, подключите аккаунт Telegram и получите проверяемый архив на Windows, Linux или macOS. - [Подключение аккаунта](https://phishdestroy.github.io/TgWitness/ru/docs/accounts/index.md): Подключите Telegram с помощью QR-кода, номера телефона или импорта сеанса. Выберите источники и убедитесь, что новые сообщения поступают в ваш журнал. - [Выбор прокси](https://phishdestroy.github.io/TgWitness/ru/docs/proxies/index.md): Настройте автоматические маршруты MTProxy или используйте собственный прокси-сервер. Выберите режимы IP, правила резервирования и маршрут для внешних запросов. - [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/exports/index.md): Экспортируйте сохраненную историю Telegram, проверьте подписи и сравните журнал с контрольной точкой, сохраненной независимым свидетелем. - [Как устроены доказательства](https://phishdestroy.github.io/TgWitness/ru/docs/concepts/index.md): Проследите путь сообщения от момента захвата до контрольной точки. Измените пример записи, пересчитайте её цепочку SHA-256 и посмотрите, что обнаружит сохраненная контрольная точка. - [Расследование по всем чатам](https://phishdestroy.github.io/TgWitness/ru/docs/cases/index.md): Проводите комплексное расследование в Telegram, охватывающее каналы, группы, личные чаты и ботов: полная фиксация учетной записи, история общения, участники, ссылки, файлы, хронология событий и подтверждённые доказательства. - [Создание Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/case-board/index.md): Соберите сохраненные наблюдения, точные выделения и фрагменты действий на частной доске, обсудите их со своей командой и представьте сборник. - [Создание отчета](https://phishdestroy.github.io/TgWitness/ru/docs/reports/index.md): Выберите данные отчета, один из восьми шаблонов и содержание, затем просмотрите предварительный просмотр и экспортируйте в формате HTML, подписанного PDF или полного пакета доказательств. - [Подготовьте копию для распространения](https://phishdestroy.github.io/TgWitness/ru/docs/handover/index.md): Выберите записи и поля, которые может получить получатель, проверьте готовую копию и удостоверьте её подписанный манифест и границы журнала источников. - [Управление группой учетных записей](https://phishdestroy.github.io/TgWitness/ru/docs/groups/index.md): Сравнивайте групповые рабочие пространства, находите источники, просматривайте периоды наблюдения и применяйте общие настройки с исключениями для отдельных учетных записей. - [Безопасность установки](https://phishdestroy.github.io/TgWitness/ru/docs/security/index.md): Узнайте, где хранятся сеансы, ключи и доказательства, какие данные покидают Ваш компьютер, что охватывают меры защиты и как усилить безопасность установки. - [Поделиться делом](https://phishdestroy.github.io/TgWitness/ru/docs/access/index.md): Предоставьте рецензентам и аналитикам доступ к выбранным аккаунтам и чатам с отдельными правами доступа, ограничениями по продолжительности сеанса и отзывными токенами. - [Бот-свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/witness/index.md): Публикуйте подписанные контрольные точки журнала в своём канале Telegram с помощью отдельного свидетеля, имеющего собственный ключ и доступ к коллектору только для чтения. - [Постоянная работа на сервере](https://phishdestroy.github.io/TgWitness/ru/docs/server/index.md): Запускайте TgWitness на сервере с постоянным хранилищем данных, частным доступом к панели управления, резервным копированием и проверками после перезапуска. - [Поиск неисправностей](https://phishdestroy.github.io/TgWitness/ru/docs/troubleshooting/index.md): Проверьте доступ к панели управления, подключение к Telegram, отсутствующие сообщения, параметр FloodWait и статус Witness, используя соответствующие индикаторы для каждой проблемы. ### Reference - [Секретные чаты: реализация и демонстрация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/secret-chats/index.md): Ознакомьтесь с отдельной реализацией Секретного чата, опробуйте вымышленный интерфейс и проанализируйте неисправленные дефекты. - [TgWitness: запуск, масштаб и доказательства](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/index.md): Установка одной командой или сбор через GitHub Actions. Сценарии расследования, опубликованный масштаб и смысл проверки архива. - [Загрузить историю источников](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/index.md): Загрузка прошлых сообщений из включенных источников, приостановка и возобновление, а также проверка подписанного отчета о ходе работы. - [Анализ архива](https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/index.md): Выполняйте поиск по сохраненным сообщениям, просматривайте данные, обработанные искусственным интеллектом, и ведите аналитические отчеты с указанием источников. - [Командная строка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/index.md): Поиск, чтение контекста, подсчёт активности и экспорт сохраненных сообщений из скриптов и агентов с выводом в формате --json, стабильными кодами завершения и токенами с ограниченной областью действия, доступными только для чтения. - [Полнотекстовый поиск](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/index.md): Поиск сохраненных сообщений по формам слов, точным фразам, доменам и @именам пользователей, с отображением наиболее подходящих результатов в первую очередь, при этом индекс привязан к подписанному журналу. - [MCP только для чтения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/index.md): Подключите клиент MCP к выбранным рабочим пространствам и чатам с ограниченным по времени и отзывным доступом. - [Локальное распознавание текста (OCR) и транскрипция](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/index.md): Распознавайте захваченные изображения и аудио с помощью локального рабочего процесса; сохраняйте полученный текст с привязкой к исходному файлу. - [Исходящие веб-хуки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/webhooks/index.md): Отправка событий в заданном диапазоне на HTTPS-приемники с HMAC-подписями, повторными попытками и статусом доставки. - [Уведомление о несовместимости с операторами](https://phishdestroy.github.io/TgWitness/ru/docs/reference/notice/index.md): Наше уведомление оператора о компании Taylor Wessing и её исходных данных. - [Уведомление о несовместимости лицензий и архитектуры](https://phishdestroy.github.io/TgWitness/ru/docs/reference/license/index.md): TgWitness распространяется по лицензии MIT для всех, и почему он архитектурно несовместим с рабочим процессом Taylor Wessing. - [Быстрый старт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/index.md): Все способы установки и запуска TgWitness: пакет для Windows, Python, Docker и синтетическая демонстрационная версия с первыми проверками. - [Аккаунты и форматы сессий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/index.md): Войдите в систему с помощью телефона, QR-кода или ключа аутентификации, импортируйте сеансы из Telethon, Pyrogram или Telegram Desktop и управляйте несколькими учётными записями. - [Доступ и разрешения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/index.md): Устанавливайте ограниченный доступ к аккаунтам и чатам, выбирайте права доступа, ограничивайте количество сеансов и IP-адресов, а также отзывайте доступ. - [Подключение, прокси и защита данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/index.md): Аутентификация, автоматические пулы прокси-серверов, режимы работы с IP-адресами, политика резервного переключения, внешние запросы и хранение секретных данных. - [Развёртывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/index.md): Запускайте TgWitness в качестве службы на Windows, Linux, macOS или в Docker, через HTTPS, с резервным копированием и обновлениями. - [Как устроен сбор](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/index.md): Объём наблюдения, обновления в режиме реального времени, повторные проверки, вложения, собственные действия и значение пробелов — запись за записью. - [Работа и обслуживание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/index.md): Ежедневная эксплуатация панели управления: режимы работы, категории мониторинга, параметры, уведомления, экспорт данных, резервное копирование и емкость хранилища. - [Режим расследования](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/index.md): Комплексные расследования по всем учетным записям, включая каналы, группы, личные чаты и ботов — от определения объёма расследования до формирования подтверждённого пакета материалов по делу. - [Справочная информация по Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/index.md): Закладки, точные выделения, фрагменты действий, обсуждения, ограниченный доступ и история подписанных аннотаций, используемые в Case Board. - [Настройка и проверка отчетов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/index.md): Фильтры отчетов, восемь шаблонов дизайна, предустановленные настройки содержания, сохраненная история изменений и оценка, включённая в подписанные экспортные файлы. - [Возможности и ограничения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/index.md): Текущая модель сбора данных, рабочие процессы с несколькими учетными записями, экспорт данных и операционные ограничения TgWitness. - [Как устроены доказательства](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/index.md): Объяснение принципов работы цепочки хешей, подписей, контрольных точек и свидетелей с указанием точных формул, используемых верификатором. - [Формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/index.md): Содержимое подписанного ZIP-архива, типы записей, подтверждения обработки, профили пользователей, внешние копии и офлайн-проверка. - [Независимый свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/index.md): Запустите Witness с собственным ключом и ботом, публикуйте подписанные контрольные точки в канале и сверяйте экспортированные данные с ними. - [Метки времени](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/index.md): Временные метки RFC 3161 для подписанных контрольных точек: что отправляется в центр авторизации и как проверяется ответ. - [Безопасность и обращение с данными](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/index.md): Модель угроз, модель доступа, защита конфиденциальных данных в состоянии покоя, сетевая уязвимость, импорт сеансов и порядок сообщения об уязвимостях. - [Архитектура](https://phishdestroy.github.io/TgWitness/ru/docs/reference/architecture/index.md): Компоненты системы: сборщик, панель управления, журнал, рабочие процессы и модуль «witness», а также схема передачи данных между ними. - [Что проверено](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/index.md): Тестирование Telegram в режиме реального времени, автоматические проверки, проверки в браузере и то, что пока остаётся непроверенным. - [Список изменений](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/index.md): Все изменения по версиям, включая те, которые ещё не выпущены. - [Руководство по панелям](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/index.md): Все экраны панели: чаты, дневник, источники, экспорт, «Дополнительно», режимы защиты и проверка кода. - [Первоначальная настройка и параметры](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/index.md): Мастер настройки, цели, уровни интерфейса, маршруты подключения и настройки, общие для группы аккаунтов. - [Установка, проверка и обновление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/index.md): Установите с помощью одной команды, проверьте подписи и хеши, обновите и удалите установку. - [Хранение и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/index.md): Резервное копирование, перемещение старых файлов в облако, копии с защитой Object Lock и восстановление на новом компьютере. - [Экспорт аккаунта](https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/index.md): Экспорт того, что аккаунт может прочитать в данный момент: область действия, возобновляемые задания, подписанный архив и сжатые копии для обмена. - [Публичная витрина](https://phishdestroy.github.io/TgWitness/ru/docs/reference/showcase/index.md): Публикуйте сохраненные сообщения из выбранных публичных каналов и подписанные снимки состояния по ссылкам с ограниченным сроком действия и возможностью отзыва. - [Развертывание с высоким уровнем безопасности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/index.md): Защищённый сервер, работающий круглосуточно на Hetzner или Phala Cloud, шлюзовой DNS и проверки, которые может повторить любая третья сторона. --- # Установка TgWitness для экспорта чатов Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/start/ Установите одной командой, подключите аккаунт Telegram и получите проверяемый архив на Windows, Linux или macOS. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Установите одной командой, подключите аккаунт Telegram и выберите, что сохранить. ## Установите на свой компьютер Установщик включает Python и зависимости. Начните с экспорта переписки; добавьте наблюдение и инструменты расследования, когда они понадобятся. ### Linux / macOS ``` curl -fsSL https://get.destroy.tools/install.sh | bash ``` ### Windows · PowerShell / CMD ``` powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "irm https://get.destroy.tools/install.ps1 | iex" ``` Сервер Ubuntu: от root. Обычный компьютер: от своего пользователя. Откройте адрес панели из установщика и введите её ключ доступа. Затем подключите аккаунт Telegram. Ключ панели и авторизация Telegram — разные вещи. [Установка, подписи и обновления](https://phishdestroy.github.io/TgWitness/docs/reference/installation/) описывает сборку, локальный доступ и серверные варианты. Доступны также [инструкции для исходного кода и Docker](https://phishdestroy.github.io/TgWitness/docs/reference/quickstart/). ## Выберите первую задачу 1. [Подключите аккаунт](https://phishdestroy.github.io/TgWitness/ru/docs/accounts/) по телефону, QR-коду или через поддерживаемый импорт сессии. 2. Выберите чаты, папку или весь аккаунт. 3. [Экспортируйте выбранную историю](https://phishdestroy.github.io/TgWitness/docs/reference/account-export/) или включите наблюдение для сохранения будущих изменений. 4. [Проверьте архив](https://phishdestroy.github.io/TgWitness/ru/docs/exports/) по независимо полученному отпечатку ключа. ## Используйте временный исполнитель GitHub [Сбор через GitHub Actions](https://phishdestroy.github.io/TgWitness/docs/capture/) проводит через создание форка, авторизацию, выбор области и пароля архива. После запуска скачайте зашифрованный результат и сведения о рабочем процессе. Постоянный сервер сборщика для этого сценария не нужен. ## Ознакомьтесь с сайтом без регистрации [Откройте демо в браузере](https://phishdestroy.github.io/TgWitness/demo/?lang=ru): изучите вымышленные сообщения, сравните правки и посмотрите экспорт до установки. ![Вид диалога в TgWitness с примерами сообщений](https://phishdestroy.github.io/TgWitness/assets/chats-dark.png) Пример рабочей области. Ваш собственный журнал создаётся отдельно. ## Продолжите расследование Для длительной работы добавьте нужные источники, правила загрузки файлов, поиск, отчёты и разрешения на передачу. [Запуск, масштаб и доказательства](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) объясняет варианты и опубликованные измерения. Для установки на сервере следуйте инструкциям в разделе [«Обеспечение непрерывной работы](https://phishdestroy.github.io/TgWitness/ru/docs/server/)». --- # Используйте отдельную учетную запись. Ни в коем случае не вашу основную. Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/dedicated-account/ Подготовка отдельного аккаунта Telegram для сбора. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Прочитайте перед подключением аккаунта Наш совет не использовать вашу основную учетную запись — это не шутка. Это реальность. Основной аккаунт - Хеш вашего приложения: 99 % вышли из системы - Запреты, налагаемые исключительно из-за низкого уровня доверия, являются частым явлением - Использовать это — действительно глупая идея Дополнительная учетная запись на публичных парах - Более миллиона аккаунтов зарегистрировано с помощью этих пар - Эти терминологические пары используются уже более 5 лет - Никто не сможет увидеть через них что-либо из ваших данных 01 ## Почему не использовать ваш основной аккаунт? Это достоверная информация. Мы точно знаем, в чём заключаются подводные камни этих проблем. 1. ### Хеш вашего приложения: 99 % вышли из системы Вход на сайт my.telegram.org с учетной записи, к которой у вас нет доступа, с целью получения хеша приложения, а затем любой запрос с использованием этого хеша означает 99-процентную вероятность того, что из этой учетной записи будет выполнен выход. Вы можете это проверить. 2. ### Запреты, налагаемые исключительно из-за низкого уровня доверия, являются частым явлением Аккаунты блокируются просто потому, что Telegram им не доверяет, и такие блокировки происходят часто. Вы также можете это проверить. Использование собственного аккаунта — действительно глупая идея. 3. ### Скопированные сессионные ключи могут быть отозваны Одновременный запуск импортированного ключа TData/сеанса в Telegram Desktop и TgWitness может вызвать ошибку «`AUTH_KEY_DUPLICATED`». Telegram аннулирует эту авторизацию, поэтому обеим копиям потребуется новый вход в систему. Наличие отдельной учетной записи не предотвращает эту ситуацию. Полностью закройте исходный клиент и держите его закрытым во время использования импортированной сессии. Для параллельного использования войдите в TgWitness с помощью телефона или QR-кода, чтобы создать отдельную авторизацию; другие клиенты с отдельной авторизацией могут оставаться в системе. [Ознакомьтесь с предупреждением об импорте сеанса](https://phishdestroy.github.io/TgWitness/demo/guide.html?lang=ru#session-warning) Документация Telegram - [Ошибки при выходе из системы: AUTH_KEY_UNREGISTERED, SESSION_REVOKED](https://core.telegram.org/api/errors) - [Создание собственного хеша приложения: получение api_id](https://core.telegram.org/api/obtaining_api_id) 02 ## Почему TgWitness работает через пары хэшей и идентификаторов публичных приложений Именно поэтому мы построили TgWitness на основе пар «хеш приложения/ID приложения» для публичных приложений. По нашей логике, вероятность блокировки при их использовании ниже: через эти пары зарегистрировано более миллиона аккаунтов Telegram, и через них работают многие различные программы. По нашей логике, это лучше, чем работать напрямую с личным хешем приложения: эти пары, несомненно, существуют уже более 5 лет. ### Ваша собственная новая пара Создано на my.telegram.org с аккаунта. - Около 99 % аккаунтов вышли из системы - Одно новое приложение, одна учетная запись ### Публичные пары пула Те же самые пары, которые используют многие программы. - Зарегистрировано более миллиона аккаунтов - Множество различных программ - Опыт работы — более 5 лет ### Почему никто не может увидеть ничего из ваших данных через эти пары - #### Пара представляет собой имя, а не ключ Telegram запрашивает API-идентификатор и хеш API при подключении программы и при запросе кода входа. Они служат для идентификации приложения и не предоставляют доступа к какому-либо аккаунту; в документации Telethon отмечается, что одна пара идентификаторов работает с любым номером телефона. - #### Ваш сеансовый ключ никогда не покидает ваш сервер При входе в систему создаётся ключ авторизации посредством обмена по алгоритму Диффи–Хеллмана между вашим TgWitness и Telegram; сам ключ никогда не отправляется. Согласно документации Telegram: после авторизации ключ привязывается к пользователю, и каждый вызов с использованием этого ключа выполняется от имени данного пользователя. Другие программы с той же парой ключей имеют свои собственные ключи и не могут использовать ваш. - #### Трафик шифруется с использованием вашего ключа Каждый запрос и ответ шифруются с помощью ключа авторизации сеанса, а не с помощью хеша API. Знание хеша API не позволяет расшифровать ничего. - #### Владелец пары ничего не видит В Telegram отсутствует метод, позволяющий вывести список учетных записей, сеансов или сообщений по API-идентификатору. Владелец пары видит только настройки своего приложения на сайте my.telegram.org. - #### Только ваш аккаунт видит, о каком приложении идёт речь В разделе «Настройки» → «Устройства» вашего аккаунта перечислены название приложения и ID API, устройство, IP-адрес и даты для каждого сеанса. Никто другой не получает доступ к этому списку. Документация Telegram - [Авторизация пользователя: ключом становится пользователь](https://core.telegram.org/api/auth) - [auth.sendCode: api_id, api_hash](https://core.telegram.org/method/auth.sendCode) - [initConnection](https://core.telegram.org/method/initConnection) - [Создание ключа авторизации](https://core.telegram.org/mtproto/auth_key) - [Шифрование MTProto](https://core.telegram.org/mtproto/description) - [account.getAuthorizations](https://core.telegram.org/method/account.getAuthorizations) - [Что содержит запись сеанса](https://core.telegram.org/constructor/authorization) - [Получение api_id](https://core.telegram.org/api/obtaining_api_id) - [Открытый исходный код приложений Telegram](https://telegram.org/apps#source-code) Библиотеки и обсуждения - [Телемарафон: вход в систему](https://docs.telethon.dev/en/stable/basic/signing-in.html) - [opentele: официальные API приложений](https://opentele.readthedocs.io/en/latest/documentation/authorization/api/) - [opentele: TelegramClient](https://opentele.readthedocs.io/en/latest/documentation/telethon/telegramclient/) - [Stack Overflow: следует ли держать api_hash в секрете?](https://stackoverflow.com/questions/49490818/should-telegram-api-hash-be-kept-secret) ### Аналогичные пары терминов в других программах7 Пары официальных приложений Telegram являются общедоступными и встроены во многие независимые программы и библиотеки: - [opentelePython · src/api.py](https://github.com/anmv/opentele/blob/4df17bd8c443d6452afc5a2d29ec7922fad1a5c3/src/api.py#L575) - Desktop 2040 - Android 6 - Telegram X 21724 - iOS 10840 - macOS 2834 - Web 2496 - [opentele2Rust · opentele2-core/src/api.rs](https://github.com/DedInc/opentele2/blob/7e973bc71cd7a714ad13ac703c0895a90d36a735/crates/opentele2-core/src/api.rs#L641) - Desktop 2040 - Android 6 - Telegram X 21724 - iOS 10840 - macOS 2834 - Web 2496 - [GrampoPython · Grampo/ut/api.py](https://github.com/abbas-bachari/Grampo/blob/00aa662d853c4ac2180432371c5e0d9444bbfe9e/Grampo/ut/api.py#L526) - Desktop 2040 - Android 6 - Telegram X 21724 - iOS 10840 - macOS 2834 - Web 2496 - [tgmanagePython · api/schemas/api_app.py](https://github.com/xdsnich/tgmanage/blob/f67c46be0ab234bd04526a8663d3936bd98a8597/api/schemas/api_app.py#L47) - Android 6 - iOS 8 - Desktop 2040 - macOS 2834 - Telegram X 21724 - Web K 2496 - [LyChatBotTDLib · helpers/tdlib/index.js](https://github.com/LyoSU/LyChatBot/blob/fac0ae5d5f2cddb8a26312014f51c0f6f40ec191/helpers/tdlib/index.js#L11) - macOS 2834 - [hsadasdPython · config.py](https://github.com/herobrinovaleksandr-png/hsadasd/blob/6842c74895038c16e219324fcd07dbe8153f37f0/config.py#L68) - Desktop 2040 - Desktop 17349 - Telegram X 21724 - macOS 2834 - iOS 10840 - Web 2496 - +4 - [blb.teamblb.team/threads/…294](https://blb.team/threads/app-hash-app-id-ofitsial-nykh-kliyentov.294/) - Android 4 · 5 · 6 - iOS 8 - Desktop 2040 - Desktop 17349 - macOS 2834 - Telegram X 21724 Список официальных пар приложений на форуме, опубликованный для регистрации учетных записей 03 ## Способы создания дополнительной учетной записи Для учетной записи в Telegram требуется номер телефона, на который будет отправлен код для входа. Выбирайте в зависимости от того, как долго должна просуществовать эта учетная запись. - Оптимальный вариант ### Предоплаченная SIM-карта или eSIM ******** Последние При условии, что вы будете поддерживать его наполненным Будьте внимательны Наиболее надёжный вариант: приложение Telegram лучше всего принимает реальные номера мобильных телефонов. Номер, который оператор изымает из обращения, передаётся кому-то другому. - ### Приложение для виртуальных номеров ******** Последние Хотя приложение сохраняет номер Будьте внимательны Telegram может отказать в предоставлении виртуального номера, не доставить код или сразу ограничить возможности новой учетной записи; некоторые приложения изымают номера, которые не используются. - ### Аренда номера ******** Последние Срок аренды Будьте внимательны По завершении номер переходит к следующему клиенту. - ### Однократная активация ******** Последние Один код Будьте внимательны Номер немедленно возвращается в пул, зачастую с историей предыдущих владельцев. Прежде всего установите пароль для доступа к облаку. Лицо, которое впоследствии станет владельцем данного номера, сможет запросить код входа. Пароль для доступа к облачному сервису (двухэтапная аутентификация) не позволит ему войти в систему; без него учетная запись перейдет к следующему владельцу данного номера. Документация Telegram - [Часто задаваемые вопросы о спаме: виртуальные номера и предыдущие владельцы](https://telegram.org/faq_spam) - [Двухэтапная аутентификация](https://core.telegram.org/api/srp) ### Арендованные номера с префиксом +888 (фрагмент) Некоторые торговые площадки и сервисы предлагают временную аренду официальных номеров Telegram с кодом +888 от компании Fragment. Приблизительная стоимость: 20 долларов США в день. - Вы можете зарегистрировать учётную запись непосредственно в Telegram Web или Telegram Desktop. - Удалить аккаунты по номеру и создать новые. - Эти учетные записи, как правило, подвергаются меньшему количеству проверок на предмет мошенничества, однако они не обеспечивают иммунитета или особых привилегий. Этот номер не принадлежит вам. По окончании срока аренды владелец может вернуть его себе. Незамедлительно установите пароль для доступа к облачному хранилищу и не рассматривайте эту учетную запись как долгосрочную. Более надёжным остаётся использование номера +888, принадлежащего вам лично, или предоплаченной SIM-карты, которую вы контролируете. ### Готовые аккаунты с торговых площадок Некоторые торговые площадки (например, G2G или Z2U) продают готовые аккаунты Telegram — новые, со стажем или с файлами сеансов. - [G2G: списки учетных записей Telegram](https://www.g2g.com/uk/categories/telegram-accounts) - [Z2U: Списки учетных записей Telegram](https://www.z2u.com/telegram/accounts-5-15140) НИКОГДА НЕ ИСПОЛЬЗУЙТЕ СВОЙ ОСНОВНОЙ АККАУНТ! Специально созданный таким образом аккаунт всё же безопаснее, чем использование вашего основного аккаунта Telegram в TgWitness. #### Предупреждения перед покупкой - Это нарушает Условия предоставления услуг Telegram. - Многие учетные записи зарегистрированы массово (авторегистрация) или имеют неизвестную историю. - У некоторых поставщиков может по-прежнему иметься доступ для восстановления данных. - Учётные записи с таких торговых площадок впоследствии часто блокируются или подвергаются ограничениям. - Избегайте торговых площадок, на которых открыто продаются программы для кражи данных, инструменты для фишинга или явно похищенные учетные записи. - Приобретение учетной записи — даже той, которая рекламируется как «авторегистрация» — на платформах, открыто продающих фишинговые инструменты, программы-кражи, украденные сеансы или учетные записи, нарушает не только Условия предоставления услуг Telegram, но и законодательство большинства стран. Впоследствии это может привести к признанию ваших доказательств недействительными. Выбирайте с осторожностью. #### Если вы используете эту опцию 1. Рассматривайте аккаунт как одноразовый. 2. Немедленно завершите все остальные сеансы, установите пароль для доступа к облачному хранилищу и измените методы восстановления. 3. Используйте 2–3 учётные записи от разных провайдеров или учётные записи, которые вы зарегистрировали самостоятельно. **Премиум, удаление и семидневная отсрочка** Если для учетной записи активирован тариф «Премиум», лицо, имеющее доступ к номеру телефона, не сможет удалить учетную запись немедленно. Вы получите уведомление и будете иметь семь дней до удаления. Это важно, поскольку от данной учетной записи зависит ход вашего расследования: у вас есть время для подготовки замены. **Новые аккаунты и учетные данные API** Если вы получаете и используете собственный api_id/api_hash из новой учетной записи, которую вы зарегистрировали самостоятельно с помощью номера, полученного через SMS-сервис, учетная запись будет выведена из системы при первом запросе API или авторизации сеанса. Учитывайте это при планировании расследования. 04 ## Создание учетной записи От номера до первого зафиксированного чата. 1. ### Получите номер Предоплаченная SIM-карта или eSIM — в случае, если учетная запись должна действовать длительное время; аренда или однократная активация — для краткосрочной задачи. Перечень услуг приведён ниже. 2. ### Зарегистрироваться отдельно от основного аккаунта Зарегистрируйтесь в официальном приложении Telegram на отдельном устройстве, в эмуляторе или в профиле телефона, а не рядом с вашей основной учётной записью. 3. ### Заблокируйте файл с помощью облачного пароля Незамедлительно установите пароль для облачного хранилища и адрес электронной почты для восстановления доступа, которые не используются нигде больше. 4. ### Закройте настройки конфиденциальности Номер телефона: **«Никто**», «Найти меня по номеру», **«Мои контакты**», «Последнее появление», «Фотографии профиля» и «Биография»: **«Никто»** или **«Мои контакты»**; отключите синхронизацию контактов. 5. ### Не допускайте самоуничтожения данных Установите самоуничтожение учётной записи на максимально длительный срок, чтобы остановка работы TgWitness не привела к потере вашей учётной записи. 6. ### Присвойте ему нейтральный профиль Не указывайте имена, фотографии, имена пользователей или биографии из ваших других учётных записей, а также личные контакты. 7. ### Дайте системе разогреться Сначала присоединяйтесь к нескольким чатам в день. Новые учетные записи, которые действуют поспешно, сначала подвергаются ограничениям. 8. ### Ничего не передавайте ботам Ни в коем случае не нажимать кнопки «Поделиться номером телефона» или «Поделиться местоположением» для бота. Открывать ссылки и мини-приложения через VPN или прокси на этом устройстве. 9. ### Подключите его к TgWitness В своей рабочей области подключитесь через **«Учётная запись» → «QR-код**», затем нажмите **«Источники» → «Режим расследования**». Приложение — это среда, в которой вы действуете, а TgWitness — это запись. Документация Telegram - [Двухэтапная аутентификация](https://core.telegram.org/api/srp) - [Настройки конфиденциальности](https://core.telegram.org/api/privacy) - [Самоуничтожение аккаунта](https://core.telegram.org/method/account.setAccountTTL) 05 ## Службы нумерации Варианты для начала работы. Страны, цены и информация о том, принимает ли Telegram изменение номера, часто меняются; проверьте перед оплатой. ### Предоплаченная SIM-карта и eSIM 11 - [SMARTYsmarty.co.uk](https://smarty.co.uk) - UK - SIM - [VOXIvoxi.co.uk](https://www.voxi.co.uk) - UK - SIM - [iD Mobileidmobile.co.uk](https://www.idmobile.co.uk) - UK - SIM - [Threethree.co.uk](https://www.three.co.uk) - UK - SIM - [Asda Mobilemobile.asda.com](https://mobile.asda.com) - UK - SIM - [Ultra Mobileultramobile.com](https://www.ultramobile.com) - US - Предоплата Тарифный план PayGo, очень недорогой - [US Mobileusmobile.com](https://www.usmobile.com) - US - Предоплата - [Mint Mobilemintmobile.com](https://www.mintmobile.com) - US - Предоплата - [Tracfonetracfone.com](https://www.tracfone.com) - US - Предоплата - [eSIM Plusesimplus.me](https://esimplus.me) - eSIM - [Numero eSIMnumeroesim.com](https://numeroesim.com) - eSIM ### Приложения с виртуальными номерами 20 - [Google Voicevoice.google.com](https://voice.google.com) - US Только для США; для регистрации требуется номер телефона в США - [TextNowtextnow.com](https://www.textnow.com) - US - CA Номер будет отозван, если вы его не используете - [TextFreetextfree.us](https://www.textfree.us) - US - [2ndLine2ndline.co](https://www.2ndline.co) - US - CA - [Talkatonetalkatone.com](https://www.talkatone.com) - US - [TextMego-text.me](https://go-text.me) - US - CA - Другие страны - [textPlustextplus.com](https://textplus.com) [Google Play](https://play.google.com/store/apps/details?id=com.gogii.textplus) - [FreeToneGoogle Play](https://play.google.com/store/apps/details?id=com.textmeinc.freetone) - US [TextMe Up · textmeup.com](https://www.textmeup.com) - [Nextplusnextplus.me](https://nextplus.me) - US - [Dingtonedingtone.me](https://www.dingtone.me) - US - CA - [Burnerburnerapp.com](https://www.burnerapp.com) - US - CA - Платная версия В рамках пробного периода - [Hushedhushed.com](https://hushed.com) - Во многих странах - Платная версия Недорого - [Sidelinesideline.com](https://www.sideline.com) - US - [MySudomysudo.com](https://mysudo.com) - US - CA - UK - [2NumberGoogle Play](https://play.google.com/store/apps/details?id=com.bpmobile.second.phone) [App Store](https://apps.apple.com/app/id1216135390) - [SLYNUMBERslynumber.com](https://slynumber.com) [Google Play](https://play.google.com/store/apps/details?id=com.dev.slynumber) - [Phonerphonerapp.com](https://phonerapp.com) - [Onoffonoff.app](https://www.onoff.app) - EU Европейские номера мобильных телефонов в приложении - [Sonetelsonetel.com](https://sonetel.com) - Во многих странах - Свободный номер - [Zadarmazadarma.com](https://zadarma.com) - Во многих странах Виртуальные номера ### Количество арендованных номеров и активаций: 12 При аренде номер сохраняется в течение нескольких недель или месяцев. При однократной активации выдаётся единственный код: установите пароль для доступа к облачному хранилищу сразу после регистрации. - [OnlineSimonlinesim.io](https://onlinesim.io) - Аренда - Активации - [SMSPVAsmspva.com](https://smspva.com) - Аренда - Активации - [5SIM5sim.net](https://5sim.net) - Аренда - Активации - [SMSPoolsmspool.net](https://www.smspool.net) - Аренда - Однократно - [VAK-SMSvak-sms.com](https://vak-sms.com) - Аренда - Активации - [TextVerifiedtextverified.com](https://www.textverified.com) - Аренда - Активации - [JuicySMSjuicysms.com](https://juicysms.com) - Аренда - Активации - [365SMS365sms.org](https://365sms.org) - Аренда - Активации - [SIMSMSsimsms.org](https://simsms.org) - Аренда - Активации - [GrizzlySMSgrizzlysms.com](https://grizzlysms.com) - Однократно - [SMS-MANsms-man.com](https://sms-man.com) - Однократно - [Tiger SMStiger-sms.com](https://tiger-sms.com) - Однократно --- # Подключение Telegram: QR, телефон и импорт сессий Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/accounts/ Подключите Telegram с помощью QR-кода, номера телефона или импорта сеанса. Выберите источники и убедитесь, что новые сообщения поступают в ваш журнал. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Одно пространство = один аккаунт, его журнал и его ключ. ## Выберите способ входа **Аккаунты** → добавить пространство → настройки подключения. Используйте для этого отдельный аккаунт. - **QR-код:** отсканируйте его на экране «Устройства» в Telegram и подтвердите. - **Номер телефона:** номер, код, затем пароль 2FA, если он есть. - **Импорт сессии:** ваш собственный файл сессии или данные Telegram Desktop. Используйте встроенный профиль API или свои API ID и hash. Он только называет приложение — не входит в аккаунт и ничего не скрывает. **Вам сначала нужен прокси-сервер?** Вы можете [выбрать и протестировать маршрут подключения](https://phishdestroy.github.io/TgWitness/ru/docs/proxies/) перед входом в систему. У каждой учетной записи есть свой собственный маршрут. ## Выберите, что следует отслеживать 1. Выберите нужные чаты, группы или каналы. 2. Проверьте настройки сбора, в том числе медиа. 3. Запустите и проверьте подключение и недавнюю активность. У аккаунта должен быть доступ. Админы и участники видят разное, журнал показывает то, что получил этот аккаунт. Весь аккаунт? **Источники → Охват наблюдения → Режим расследования**, проверьте и нажмите **Сохранить охват**. Полный разбор: [расследование по всему аккаунту](https://phishdestroy.github.io/TgWitness/ru/docs/cases/). ## Проверьте весь путь В тестовой группе отправьте сообщение с другого аккаунта, отредактируйте и удалите его. В журнале должны появиться все три события. Затем [экспортируйте и проверьте](https://phishdestroy.github.io/TgWitness/ru/docs/exports/). «Подключено» значит, что связь работает. Пойманное тестовое сообщение значит, что события действительно доходят. ## Добавить ещё один аккаунт Новое пространство в **Аккаунтах**, те же шаги. Запишите отпечаток ключа каждого аккаунта, чтобы потом различать экспорты. --- # Прокси Telegram: MTProxy, SOCKS5 и маршрутизация Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/proxies/ Настройте автоматические маршруты MTProxy или используйте собственный прокси-сервер. Выберите режимы IP, правила резервирования и маршрут для внешних запросов. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Держите аккаунт на связи и сами решайте, может ли он когда-нибудь показать IP вашего сервера. ## Сначала выберите режим IP 01**Скрыть адрес** Только прокси. Если ни один не работает — ждёт. 02**Direct — в крайнем случае** Через задержку идёт напрямую, а как только прокси заработает — возвращается к нему. 03**Сервер, расположенный за туннелем или VPN** Напрямую можно. VPN этот режим не настраивает и не проверяет. Маршрут определяет тип соединения. Режим IP определяет, разрешено ли прямое соединение. ## Пусть пул поддерживает маршрут 1. **Аккаунт → Настройки → Настройки подключения**. 2. Выберите режим IP и **Автоматический MTProxy** или фиксированный маршрут. 3. Сохраните, затем **Проверить подключение к Telegram** (работает и до входа). 4. Запустите сбор и отправьте себе тестовое сообщение. Новые пространства стартуют на автоматическом MTProxy с режимом **Скрывать адрес**. Пул берёт четыре публичных списка, проверяет серверы, оставляет рабочие и заменяет умершие. ## Используйте собственный прокси-сервер SOCKS5, HTTP CONNECT, ссылка на прокси Telegram или каталог оператора. Перед переключением поставьте наблюдение на паузу. Секреты Fake TLS (`ee`…) не поддерживаются. **Настройки ротации, обмена и повторных попыток** **Параметры → Автоматический MTProxy**: пороги сбоев, паузы, ротация, аккаунтов на прокси. Лимит 1 значит, что аккаунт будет ждать, а не делить прокси. Разные прокси всё равно могут иметь общий внешний IP. ## Отделить Telegram от внешних запросов MTProxy возит только Telegram. Метки времени, уведомления, копии и проверка кода идут через отдельный SOCKS5/HTTP-прокси, маршрут аккаунта SOCKS5/HTTP или напрямую, если режим это разрешает. Или выключите их. `TGWITNESS_PROXY_FEED_PROXY` задаёт маршрут для загрузки списков. У [свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/witness/) свои настройки. Ничто из этого не трогает ваш браузер и системную сеть. Ещё: [режимы и значения по умолчанию](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/#ip-modes), [кто может менять маршруты](https://phishdestroy.github.io/TgWitness/ru/docs/access/). --- # Экспорт чатов Telegram и проверка подписанного архива Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/exports/ Экспортируйте сохраненную историю Telegram, проверьте подписи и сравните журнал с контрольной точкой, сохраненной независимым свидетелем. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Передайте файлы, которые получатель сам сверит с вашим пространством. Сохранить ссылкуЭкспорт подписанного ZIP-архиваПолучатель проверяет Впервые слышите о подписях и контрольных точках? [Измените пример записи](https://phishdestroy.github.io/TgWitness/ru/docs/concepts/#chain) и посмотрите, какие проверки это заметят. Хотите хранить копию отдельно от системы сбора данных? Перейдите в [раздел «Настройка S3»](https://phishdestroy.github.io/TgWitness/ru/docs/exports/#s3), [«Блокировка объектов»](https://phishdestroy.github.io/TgWitness/ru/docs/exports/#s3-retention) или [«Проверенное восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/exports/#s3-restore)». ## Сохраните надёжный справочный материал Запишите отпечаток ключа пространства где-нибудь вне сборщика. Во время сбора храните подписанные контрольные точки тоже в другом месте или запустите [независимого свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/witness/). Именно с этим получатель сверяет ключ и прежнее состояние журнала. ## Скачайте ZIP-архив с подписью **Экспорт** → подписанный ZIP с доказательствами. В нём весь журнал и подписанный манифест файлов. Читаемый отчёт настраивается в [Report studio](https://phishdestroy.github.io/TgWitness/ru/docs/reports/), а если нужно отдать только выбранное — сделайте [выписку для передачи](https://phishdestroy.github.io/TgWitness/ru/docs/handover/). У отчётов HTML, PDF и JSON свои печати. CSV — просто рабочая копия; для проверки целостности берите CSV из проверенного ZIP. ## Проверьте с помощью надёжной копии TgWitness В окружении проекта, со своим отпечатком и путями: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json ``` При успехе вы увидите `key_pinned: true` и `checkpoint_checked: true`. Сохраните этот вывод рядом с архивом. Контрольная точка должна быть не позже конца экспорта. ## Используйте результат проверки - **Файлы:** манифест связывает их хеши, подписи — журнал. Любое изменение будет заметно. - **Ключ:** сохранённый вами отпечаток подтверждает, что это тот самый ключ. - **Прежнее состояние:** контрольная точка сравнивает экспорт с началом журнала, сохранённым до передачи. - **Охват:** пробелы, результаты сбора и тест «отправить → изменить → удалить» показывают, что эта настройка действительно поймала. Подробнее: [что проверка доказывает, а что нет](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope). ## Настройка внешней копии в S3 **Экспорт → Внешняя копия** в вашем пространстве. Работает с AWS S3 и любым S3-совместимым хранилищем. Копирует сегменты журнала, сохранённые файлы, контрольные точки с метками времени и готовые экспорты чатов, каждый шифруется `AES-256-GCM` ещё на сборщике. В онлайн-демо эти настройки показаны с выключенной загрузкой. Настоящие учётные данные вводите только в своей установке. [![Полная панель настроек для внешнего хранения: конечная точка, регион, хранилище, ключи доступа, расписание, управление функцией Object Lock и ключом восстановления](https://phishdestroy.github.io/TgWitness/assets/off-site-copy.png)](https://phishdestroy.github.io/TgWitness/assets/off-site-copy.png) Вся форма с раскрытыми дополнительными настройками. Учётные данные хранилища не указаны. | Область применения | Что следует ввести | | --- | --- | | Конечная точка | URL хранилища, без пути к бакету и учётных данных. Пример: `https://s3.example.invalid`. | | Регион | Что требует ваш провайдер. По умолчанию `us-east-1`. | | Контейнер | Существующий бакет с правом записи. Пример: `example-case-backup`. | | Папка в хранилище | Префикс, по умолчанию `tgwitness`. Поверх добавляется префикс пространства. | | Идентификатор ключа доступа / Секретный ключ доступа | Оба вместе, хранятся в хранилище секретов. Чтобы оставить сохранённые, потом оставьте оба пустыми. | | Адреса в формате «Path» | Вкл.: `endpoint/bucket`. Выкл.: `bucket.endpoint`. Зависит от провайдера. | | Интервал копирования | От 1 до 1440 минут, по умолчанию 5. Только пока приложение запущено. | | Сохранение данных с помощью Object Lock | Дни и режим, если бакет поддерживает Object Lock. Ноль оставляет настройку бакета по умолчанию. | 1. Создайте бакет, заполните адрес и учётные данные при снятой галочке **Хранить внешнюю копию** и нажмите **Сохранить внешнюю копию**. 2. **Проверить подключение** загружает зашифрованный тестовый объект. 3. **Скачать ключ шифрования** и храните его подальше от сборщика. Нет ключа — нет восстановления. 4. Отметьте **Хранить внешнюю копию**, сохраните, затем **Копировать сейчас** или оставьте работать по расписанию. ## Проверьте срок хранения и ход копирования В разделе **Дополнительно** выберите срок хранения и `GOVERNANCE` или `COMPLIANCE`. TgWitness считывает срок с загруженного объекта и сообщает: подтверждён, отсутствует или проверка не удалась. Панель показывает последний проход, число объектов, байты, скопированную границу журнала и ошибки. Отсутствующий локальный файл попадает в отчёт и повторяется в следующий раз, остальное копируется дальше. Загрузка идёт напрямую, через SOCKS5 или HTTP. С маршрутом только через MTProxy копия ждёт с ошибкой. ## Храните ключ восстановления отдельно В JSON-ключе — ключ расшифровки, адрес, префикс и отпечаток ключа. Для восстановления нужен он и учётные данные хранилища с правом чтения. Сменили адрес, бакет или префикс? Скачайте ключ заново. В новом месте начнётся свежая копия, старые экспорты чатов останутся там, где были. ## Восстановление и проверка на другом компьютере Нужны установка TgWitness, которой вы доверяете, JSON-ключ, учётные данные только для чтения и пустая папка: ### Windows PowerShell ``` $env:TGWITNESS_S3_ACCESS_KEY = 'YOUR_READ_ACCESS_KEY' $env:TGWITNESS_S3_SECRET_KEY = 'YOUR_READ_SECRET_KEY' python -m tgwitness.replica restore --key-file tgwitness-replica-key.json --out restored-evidence ``` ### Linux / macOS ``` export TGWITNESS_S3_ACCESS_KEY='YOUR_READ_ACCESS_KEY' export TGWITNESS_S3_SECRET_KEY='YOUR_READ_SECRET_KEY' python -m tgwitness.replica restore --key-file tgwitness-replica-key.json --out restored-evidence ``` Сначала всё проверяется во временной закрытой папке: весь журнал, контрольные точки, хеши и размеры файлов. Небезопасные пути, конфликтующие сегменты или журнал короче контрольной точки — ошибка, и тогда ничего не записывается. При успехе получите `events.jsonl`, `media/`, `checkpoints/` и `exports/`. Сохраните JSON-вывод команды рядом и сверьте всё с контрольными точками или записями свидетеля, которые храните сами. --- # Экспорт Telegram через GitHub Actions Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/capture/ Выберите Takeout, выгрузку через обычный API или журнал чата на временном раннере GitHub. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Выберите Takeout,выгрузку через обычный API или журнал чата на временном раннере GitHub. Включите JavaScript, чтобы сгенерировать ключ и расшифровать ваш архив. **Полный справочник** [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Documentation](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) / [Folder](https://github.com/phishdestroy/TgWitness/blob/main/docs/ru/README.md) · [Independent capture](https://github.com/phishdestroy/TgWitness/blob/main/docs/OPTIONAL-CAPTURE.md) ![Independent capture](https://phishdestroy.github.io/TgWitness/assets/chapter-capture.svg) **Предварительная версия в ветке `main`.** Пользователь делает форк, запускает задачу, входит в Telegram во временной панели и выбирает режим, состав данных и настройки. Можно выгрузить весь доступный аккаунт, выбранные чаты или журнал одного чата, GitHub создаёт аттестацию ZIP либо манифеста частей, после чего результат передаётся в зашифрованном виде. Для просмотра через официальный Telegram Web с видеозаписью выберите `client=official_web` и укажите свой HTTP или SOCKS5 прокси в `official_proxy`. В панели доступны пассивное наблюдение и последовательная прокрутка, вход по QR, выбор чата, ограничения темпа и времени. Этот режим сохраняет отображаемое в одном чате, а полная выгрузка аккаунта остаётся в `client=api`. Подробности и пределы описаны в [руководстве официального клиента](https://github.com/phishdestroy/TgWitness/blob/main/docs/OFFICIAL-WITNESS.md). Верификатор сверяет архив с аттестацией GitHub, разрешёнными версиями workflow и сборщика, затем проверяет журнал и вложения. Получатель может изучить код сбора и проверить, что полученный файл соответствует зафиксированному запуску. **On this page** - [Расчёт времени сеанса](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#расчёт-времени-сеанса) - [Запуск по шагам](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#запуск-по-шагам) - [Проверка результата](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#проверка-результата) - [Какой режим выбрать](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#какой-режим-выбрать) - [Форк, ключи и приватность](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#форк-ключи-и-приватность) - [Если что-то не получается](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#если-что-то-не-получается) - [Проверка перед первой выгрузкой](https://phishdestroy.github.io/TgWitness/ru/docs/capture/#проверка-перед-первой-выгрузкой) ## Расчёт времени сеанса Перед сбором нажмите **«Рассчитать время и размер»**. Панель покажет оценку истории и вложений, оставшееся время с учётом входа и резерв на упаковку. Начальная оценка файлов использует скорость 1 МиБ/с с двукратным запасом, во время сбора она уточняется по фактическому темпу. Если объём не помещается, можно оставить только сообщения или выбрать меньше чатов. Ожидание Takeout учитывается после ответа Telegram. Сбор заканчивается, когда оставшееся время требуется для подготовки архива. Уже полученные данные сохраняются, а частичный результат отмечается в пакете. Для неполной выборки панель отдельно показывает, что весь объём ещё не оценён. ## Запуск по шагам Схема показывает пять этапов и подмену сообщения или сборщика на примере. Кнопка «Перейти к выгрузке» открывает мастер. 1. Нажмите **«Выгрузка через GitHub Actions»** на главной странице проекта, экране входа в панель или откройте **«Экспорт → Открыть помощник выгрузки»**. [Прямая ссылка на помощник](https://phishdestroy.github.io/TgWitness/sealed.html?lang=ru). Можно также открыть `tgwitness/static/capture.html` из доверенной копии репозитория локально в современном браузере. 2. Нажмите **«Создать и сохранить ключ»**. Сохраните `sealed-key.json` у себя. В GitHub копируется только отдельно показанное значение **recipient**. Закрытый файл ключа нельзя публиковать. Без него результат не восстановить. Отметьте, что сохранили файл, и перейдите на следующий шаг. Если архив уже получен, загрузите свой ключ и нажмите **«У меня уже есть архив»**. 3. Нажмите **«Создать форк TgWitness»**, затем в своём форке откройте **Actions** и включите выполнение workflow. Выберите **Sealed chat capture → Run workflow**. Вставьте только recipient и выберите 30, 60 или 120 минут. Телефон, коды, пароль Telegram и закрытый ключ в поля GitHub не вводятся. 4. Не дожидаясь конца задачи, скачайте артефакт **sealed-connection**. Распакуйте ZIP и откройте `connection.tgwsealed` в помощнике. Если страница перезагружалась, сначала загрузите сохранённый `sealed-key.json`. 5. Откройте ссылку для подключения. Войдите с помощью QR-кода или указав свой номер телефона и код доступа. Введите пароль двухэтапной аутентификации, если Telegram его запросит. По умолчанию используется встроенный пул учетных данных API, как и в обычном рабочем пространстве. Вы можете развернуть дополнительный раздел «Пользовательские учетные данные» и ввести `api_id` и `api_hash` с сайта [my.telegram.org/apps](https://my.telegram.org/apps). Оставьте оба поля пустыми, чтобы использовать встроенный пул; неполная или некорректно сформированная пара будет отклонена. Импорт сеансов не допускается, выберите режим и состав выгрузки. Ссылка для подключения содержит секретный ключ доступа: не разглашайте его. 6. Выберите **Telegram Takeout**, **Обычный Telegram API** или **Журнал одного чата**. Для выгрузки аккаунта доступны все чаты либо несколько выбранных, период, типы чатов, категории аккаунта и правила вложений. Проверьте настройки, при необходимости сохраните их для проверяющего, затем начните сбор. Пропуски, ошибки вложений и остановка по времени останутся в подписанном результате. 7. Скачайте **sealed-result**, распакуйте и откройте `delivery.tgwsealed` своим ключом в помощнике. Полученный `delivery.zip` содержит `evidence.zip` и `attestation.jsonl`. Для файлов больше 256 МиБ используйте локальную команду: ``` python -m tgwitness.sealed_crypto decrypt delivery.tgwsealed --key sealed-key.json --out delivery.zip ``` ## Проверка результата Распакуйте `delivery.zip` и проверьте `evidence.zip` доверенной установкой TgWitness: ``` python -m tgwitness.sealed_verify evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness ``` Нужны зависимости TgWitness и актуальный GitHub CLI. Проверка требует одобренную версию **нашего общего workflow**, даже если запуск принадлежит пользовательскому форку. Подпись произвольного изменённого форка не подходит. После окончания завершите временную сессию в **Telegram → Настройки → Устройства**, если её отзыв не подтверждён или задача была принудительно убита. Проверяющему передают `evidence.zip` и `attestation.jsonl`. Закрытый ключ `sealed-key.json` передавать не нужно: он используется только для расшифровки доставленного пакета. Расшифровка без последующей проверки аттестации не подтверждает, каким кодом получен архив. Чтобы заранее согласовать состав, после проверки настроек нажмите **«Сохранить настройки для проверки»** и передайте `sealed-export-settings.json` проверяющему до сбора. Сборщик фиксирует действующие настройки и их SHA-256 в подписанном журнале, квитанции экспорта аккаунта связывают с результатом тот же набор параметров. ``` python -m tgwitness.sealed_verify evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness --expected-selection sealed-export-settings.json --require-complete ``` `--expected-selection` отклоняет другой режим, набор чатов, фильтры или правила вложений.`--require-complete` отклоняет неполную выгрузку аккаунта и журнал чата, для которого общая полнота не установлена. Без этих параметров проверка всё равно сверяет подписи и аттестацию, показывая фактические настройки и пропуски. Файл, полученный только вместе с готовым архивом, не доказывает предварительного согласования. Большие результаты содержат `delivery-NNNNNN.tgwsealed`, а основной пакет `delivery.tgwsealed` содержит `evidence.parts.json` и аттестацию. Скачайте все части, расшифруйте основной пакет и положите его манифест рядом с частями: ``` python -m tgwitness.sealed_parts evidence.parts.json --key sealed-key.json --out evidence.zip python -m tgwitness.sealed_verify evidence.parts.json --assembled evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness ``` Аттестация относится к манифесту, он связывает части с собранным ZIP. Для большого архива задайте подходящий предел распакованного объёма через `--max-gib`, по умолчанию проверка ограничена 4 ГиБ. Проверка согласованных настроек работает и для частей. ## Какой режим выбрать | Режим | Что настраивается | Отличия | | --- | --- | --- | | Telegram Takeout, выбран по умолчанию | Весь доступный аккаунт или выбранные чаты, период, категории данных, вложения, JSON и HTML | Официальный механизм экспорта Telegram, может потребовать подтверждения и ожидания. Позволяет получать доступные покинутые группы и каналы, дополнительные данные аккаунта. | | Обычный Telegram API | Тот же выбор состава и представлений, в пределах доступных методов API | Не запускает Takeout, не перечисляет покинутые группы и каналы, контакты включают пользователей Telegram, но не весь сохранённый телефонный список. Лимиты запросов сохраняются. | | Журнал одного чата | Один чат, правила вложений, аватары | История и изменения, наблюдаемые во время запуска. Категории аккаунта, фильтр дат и представления Desktop не применяются. | У всех трёх режимов одинаковая аттестация GitHub и шифрование доставки, Takeout определяет способ получения данных. Автоматической замены Takeout обычным API нет. Совместимые JSON и HTML создаёт TgWitness, это не файлы с подписью Telegram и не обещание побайтового совпадения с экспортом Desktop. Описание механизма есть в [документации Telegram](https://core.telegram.org/api/takeout). По умолчанию выбраны Takeout, все доступные типы чатов с архивными, весь период, профиль и контакты, JSON и HTML, скачивание вложений. Начальный бюджет файлов составляет 4 ГиБ, пределы каждого типа видны в настройках, при превышении размера или бюджета сохраняются доступные серверные хеши. Хеш не восстанавливает файл. Фото профиля, истории, сведения о сессиях и дополнительные данные выбираются отдельно. Secret Chats и недоступные данные не выгружаются, личные облачные чаты входят в состав, если выбраны. Подпись обнаруживает подмену готового результата, но не доказывает, что владелец не изменил или не удалил сообщения до сбора. Takeout может потребовать подтверждения в уже действующей сессии, срок ожидания задаёт Telegram. Запуск работает максимум 120 минут с учётом входа и подтверждения, поэтому крупный аккаунт или долгое ожидание могут оставить результат неполным. Новый запуск создаёт новую сессию, локальная выгрузка может продолжать ту же сессию, но её подпись не получает аттестацию GitHub. В разделе **«Экспорт → Открыть помощник выгрузки»** мастер работает прямо внутри панели. Отдельная страница использует тот же мастер, оформление и темы. Четыре шага показывают, где вы находитесь: ключ → GitHub → сбор → готовый архив. GitHub и временная панель Telegram открываются в новых вкладках; после сбора нужно вернуться в мастер. При блокировке рабочей панели ключ удаляется из её памяти. Сохранённый файл ключа остаётся на вашем устройстве. | Задача | Вариант | | --- | --- | | Доступные данные аккаунта или выбранные чаты, ограниченное время сбора, архив с аттестацией запуска | Выгрузка через GitHub Actions | | Несколько чатов, постоянное наблюдение, поиск, чтение и управление аккаунтами | Локальная установка или Docker | | Восстановить удалённое до сбора или получить абсолютное доказательство истинности сообщений | Ни один из этих вариантов этого не обеспечивает | Это отдельный сбор: существующий журнал и сессия из вашей локальной панели никуда не загружаются. В облаке нужно войти заново, после старта состав и настройки изменить нельзя. При остановке по времени после начала сбора сохраняется частичный результат с указанием пропусков. До начала сбора или при отмене архив не создаётся. После уничтожения раннера продолжить тот же сбор нельзя, следующий запуск создаст новый журнал. ## Форк, ключи и приватность **Форк публикует копию кода, а не вашу переписку.** Данные Telegram не нужно коммитить в репозиторий. В параметры workflow передаются открытый ключ шифрования recipient и время работы. Закрытый `sealed-key.json` остаётся у вас. Не помещайте в репозиторий, Issues или логи API-ключи Telegram, коды входа, пароль 2FA, файлы сессий, закрытый ключ и расшифрованную ссылку подключения. В Artifacts загружаются только зашифрованные `connection.tgwsealed` и `delivery*.tgwsealed`. Срок хранения составляет **один день**, скачайте их вовремя. `sealed-key.json` нужно хранить отдельно: без него ни мы, ни GitHub не смогут восстановить зашифрованный результат. Во время работы Telegram-сессия и открытые данные находятся на временной машине GitHub. GitHub и HTTPS-туннель входят в модель доверия. Аттестация может публично раскрывать хеш архива и сведения о workflow, но не содержит саму переписку. Её время относится к фиксации архива, а не подтверждает даты сообщений. Два разных ключа решают разные задачи: ваш закрытый ключ расшифровывает доставку, а ключ журнала внутри сборщика подписывает наблюдения. Внешняя аттестация GitHub связывает готовый архив с разрешённой версией workflow. Проверка требует именно её: обычной подписи произвольного изменённого форка недостаточно. ## Если что-то не получается | Проблема | Что проверить | | --- | --- | | Нет кнопки Run workflow | Открыт ли ваш форк, включён ли Actions и синхронизирован ли форк с `main` исходного репозитория. Не меняйте закреплённые версии сборщика ради обхода ошибки. | | Не появился sealed-connection | Задача должна стартовать и пройти создание панели и загрузку артефакта. Очередь, правила репозитория, ошибка загрузки образа или туннеля могут остановить запуск. | | Ссылка не открывается | Раннер ещё работает; артефакт распакован; загружен ключ именно этого запуска. | | История приостановлена | Посмотрите статус в панели. Пока задача активна, можно продолжить чтение или завершить с уже собранными данными. Telegram может ограничить запросы. | | Нет sealed-result | После отмены и истечения времени до начала сбора архива нет. Ошибка сбора, аттестации или упаковки тоже предотвращает выдачу результата. Посмотрите упавший шаг, не публикуя секреты. | | Большой файл не открывается в браузере | Для пакетов больше 256 МиБ используйте команду расшифровки выше. Ошибочный или потерянный ключ не заменяется новым. | | Проверка отклоняет подпись | Укажите точное `OWNER/REPOSITORY` своего форка и используйте доверенную актуальную версию TgWitness. Не принимайте файл политики, предложенный вместе с неизвестным архивом. | | Сессия осталась в Telegram | Завершите её в «Настройки → Устройства». Автоматический выход может не сработать при сетевой ошибке или принудительном завершении задачи. | ## Проверка перед первой выгрузкой Перед важной выгрузкой проверьте небольшой чат под своим контролем: сообщение и вложение должны попасть в архив, расшифровка и проверка должны завершиться успешно, а временная сессия — исчезнуть из Telegram либо требовать ручного отзыва. Автоматические тесты проверяют синтетический чат и отдельно настоящую аттестацию GitHub; они не заменяют сквозной тест с реальным аккаунтом. GitHub и HTTPS-туннель входят в доверенную инфраструктуру. Временный раннер обрабатывает сессию Telegram и сообщения, а готовый архив шифруется для получателя. В архиве указаны выбранные данные, настройки, результаты загрузки истории и вложений, а также статус завершения сбора. Режим сохраняет доступную историю; удалённые до сбора сообщения и пропущенные версии остаются за её пределами. Форк не отменяет правил использования Actions. Эта версия предназначена для проверки функции; обещать на её основе неограниченный бесплатный сервис нельзя. Подробности, ограничения, криптографический формат, проверка без сети и порядок публикации закреплённых версий: [Sealed Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md). --- # OSINT-расследования по чатам Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/cases/ Проводите комплексное расследование в Telegram, охватывающее каналы, группы, личные чаты и ботов: полная фиксация учетной записи, история общения, участники, ссылки, файлы, хронология событий и подтверждённые доказательства. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Целое дело по каналам, группам, личным чатам и ботам: собрать, связать, восстановить хронологию, передать. Один выдуманный инцидент от начала до конца. Сбор, поиск и профили людей находят записи, [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/case-board/) их упорядочивает, [Report studio](https://phishdestroy.github.io/TgWitness/ru/docs/reports/) оформляет. ПРАКТИЧЕСКИЙ ПРИМЕР / ИЗМЕНЕНИЕ ПОЛУЧАТЕЛЯ ПЛАТЕЖА ### Один инцидент. Четыре переписки. След, который необходимо восстановить. Пост в канале ведёт на бота. В группе обсуждают новую платёжную ссылку, бот её показывает. Пост редактируют, в личном чате ссылку повторяют, сообщение в группе исчезает. Кто опубликовал каждую версию?Где появилась эта ссылка?Какой файл был сохранен?Что изменилось и когда? Загрузка истории, ИИ, MCP, OCR и вебхуки: [Работа с архивом](https://phishdestroy.github.io/TgWitness/ru/docs/archive/). ## 1. Обеспечить охват всего аккаунта Охват всего аккаунта — только на отдельном аккаунте. Основному — выбранные чаты или папка. 1. [Подключите аккаунт](https://phishdestroy.github.io/TgWitness/ru/docs/accounts/) в отдельном пространстве. Запишите номер дела, ID аккаунта, пространство и отпечаток ключа. 2. **Источники → Охват наблюдения → Режим расследования**: **Весь аккаунт**, все четыре типа источников, **Собственные действия**. У каждого нового чата сохраняются профиль и последние **200 видимых сообщений**. **Сохранить охват** и подтвердите. 3. **Загрузить чаты** и сравните со списком чатов аккаунта. Лимит — 1000 диалогов (до 20 000 в **Параметры → Чаты из списка аккаунта**); чаты сверх лимита появятся, когда станут активными. 4. **Настройки записи** → **Вся видимая активность**, проверьте лимиты вложений и место на диске. Запустите и проверьте на сообщении, правке и удалении. КаналыГруппыЧастные чатыБоты ОДИН АККАУНТ / ОДИН КЛЮЧ ПОДПИСИ**Вся выбранная активность, видимая в учетной записи, → один журнал** Сообщения · правки · уведомления об удалении · видимые реакции · события, связанные с членством · собственные действия «Весь аккаунт» — это все чаты, которые этот аккаунт может открыть, за вычетом исключений. Секретных чатов нет. Новые чаты добавляются по мере появления, старая история сама не скачивается. ## 2. Получение истории и сохранение файлов Создайте коллекцию в Case Board и отметьте важное. Ведите реестр источников: ID чата, название, аккаунт, роль, начало живого сбора, результат истории, результат медиа, пробелы. | Требования | Действия в панели | Что он предлагает | | --- | --- | --- | | История по всем включенным чатам | Источники → Загрузить полную историю | Доступные прошлые сообщения попадают в журнал рабочей области с возможностью приостановки/возобновления и подписанным отчётом о ходе работы. [Руководство по истории](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/). | | Существующий контекст чата в журнале | Источники → Настройки записи → Снимок истории | Недавние сообщения в виде подписанных записей. По умолчанию 500, до 10 000 в **Параметры → Наибольший снимок истории**. | | Полная история одного чата, доступная на данный момент | Экспорт всего чата → Экспорт всего чата или «Чаты» → Экспорт чата | Отдельный подписанный архив с `chat.json` и `chat.html`, по одному на чат. | | Контекст появления нового чата | Область наблюдения → При появлении нового чата или бота | Его профиль и до 1000 последних сообщений (200 в режиме расследования). На существующие чаты не распространяется. | | Объём вложения в байтах | Загрузка видимых вложений + ограничения по типам файлов | Ищите `media.saved` с SHA-256 и размером. «В очереди», «пропущено» или «ошибка» — значит, не сохранено. | Экспорт чата не попадает в журнал и профили людей. Чтобы искать по старой истории внутри TgWitness, используйте **Загрузить всю историю** или снимки. Здесь: канал, группа, чат с ботом и личный чат, плюс файл счёта и его хеш. Удалённое до начала сбора уже не вернуть. ## 3. Отслеживайте ход разговора и свои собственные действия Пусть работает. Отметьте горячие чаты звёздочкой как приоритетные, настройте перепроверки в **Настройки записи → Перепроверка** и следите за `recheck.completed`, FloodWait и результатами медиа. **Чаты → Профиль → Сохранить профиль сейчас** сохраняет описание чата, команды бота и другие метаданные. **Подписка на бота или принятие приглашения в рамках расследования** 1. **Чаты → Открыть ссылку Telegram**, сначала сохраните превью. Ссылка и превью становятся подписанными записями. 2. Если нужно, **Вступить / открыть и наблюдать** вступает в чат или запускает бота с его стартовым параметром. 3. Чтобы задокументировать действие, ответьте или нажмите **Нажать кнопку** в панели. Получите `interaction.requested` и `interaction.result` с ответом бота. Это настоящие действия. Нажатия кнопок в другом приложении не видны, только ответ бота. Без веб-приложений, платежей и телефона/геолокации. ## 4. Отслеживайте пользователей, ссылки и файлы в различных чатах 1. **Журнал**, **Все источники**, ищите фразу, домен или юзернейм. Открывайте результаты и отправляйте их **На доску**. 2. **Чаты → Люди → Включить профили**, выберите человека: история имён, ответы, активность, **Также в…**, ссылки, кошельки, телефоны. Открывайте процитированные записи. 3. Проследите тот же числовой ID пользователя в других чатах. Совпадающее имя, кошелёк или аватар — зацепка, а не доказательство. 4. Сравните хеши файлов. Одинаковый SHA-256 = одинаковые байты. Кто их отправил — отдельный вопрос. СХЕМА ДЕЛА / ПЕРЕЙДИТЕ ПО ССЫЛКАМВымышленный случай · не является реальным графиком КАНАЛ / ОБЪЯВЛЕНИЕ**Исходный текст → отредактированный текст** Записи № 101, № 188 Сообщение № 84 · отправитель не указан ГРУППА / ОПЕРАЦИИ**Пользователь 71001 публикует новую ссылку** Запись № 146 · сообщение № 309 · подтверждение сохранения файла № 151 БОТ / ПЕРЕПИСКА О ЗАКАЗЕ**Кнопка ведёт на эту страницу** Запись № 173 · сообщение № 12 Метаданные кнопки «Вернуться» ЧАСТНОЕ / ДАЛЬНЕЙШИЕ ДЕЙСТВИЯ**Пользователь 71001 повторяет адрес назначения** Запись № 205 · сообщение № 922 · Квитанция о сохранении файла № 209 Четыре чата содержат различные наблюдения. Следуйте исходным записям для каждого соединения; сообщение в канале не имеет указанного отправителя. Числовые идентификаторы и ссылки на записи придуманы специально для этого пошагового руководства. На этой пояснительной схеме показано, как сопоставлять результаты поиска, профили и проанализированные записи; в Case Board хранятся соответствующие карточки и ссылки на источники. | Связь | Вспомогательные замечания | Заключение: оставить без изменений | | --- | --- | --- | | Тот же аккаунт в Telegram | Идентификатор пользователя 71001 в группе № 146 и в частном чате № 205 | Один и тот же ID отправителя в обоих чатах. Кто это в реальной жизни — другой вопрос. | | Повторное указание адресата | `pay.example.invalid/new` в #146, метаданные кнопки #173, отредактированные сообщения #188 и #205 | Одна и та же ссылка в четырёх местах. Кто ею управляет — нужны другие источники. | | Объём файла в байтах | Идентичные полные значения SHA-256 в завершённых квитанциях о передаче медиафайлов № 151 и № 209 | Оба файла совпадают побайтно. | Профили охватывают только тех, кто что-то написал в *этом пространстве*, это не список участников. Число цитат на факт: **Параметры → Записей на факт**. ## 5. Восстановите последовательность и отметьте пробелы Версии в **Чатах**, затем **Журнал** с **Все источники** + **Правки**, **Удаления**, **Охват**. В хронологию ставьте оба времени: дату Telegram и момент наблюдения. 1. 09:00 · #101**Зафиксированное сообщение в канале** Первоначальное назначение сохраняется. 2. 09:12 · #146 / #151**Группа предоставляет другую ссылку** Пользователь 71001 публикует сообщение; завершается загрузка вложения. 3. 09:16 · #173**Бот показывает тот же пункт назначения** Сохраненные метаданные клавиатуры содержат ссылку. 4. 09:20 · #188**Изменения в объявлениях канала** Сохраняются как исходные, так и отредактированные записи. 5. 09:24 · #205 / #209**В частном сообщении это повторяется** Сохраненное вложение имеет тот же полный SHA-256, что и № 151. 6. 09:28 · #231**Поступает уведомление об удалении группы** Предыдущее замечание остаётся в силе: ни лицо, удалившее сообщение, ни точное время удаления не указываются. Приведены примерные временные рамки наблюдений и ссылки. Между этими записями содержатся и другие записи журнала. Порядок в журнале — это порядок поступления, а не обязательно порядок событий. Держите раздельно живые записи, снимки, восстановленные сообщения, удаления и «не найдено при перепроверке» и отмечайте каждый пробел как неизвестный. ## 6. Расширьте сферу применения на другие учетные записи, используемые для сбора данных Одно пространство на аккаунт, те же шаги. Запишите роль и отпечаток каждого. Номера сообщений свои у каждого аккаунта, поэтому всегда указывайте пространство и чат. [Группа аккаунтов](https://phishdestroy.github.io/TgWitness/ru/docs/groups/) показывает статус, делится настройками и экспортирует всех вместе — у каждого свой журнал и ключ. Общую хронологию по аккаунтам собирайте в своих заметках. Долгое дело? Добавьте [независимого свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/witness/) и проверьте, что на самом деле ловит каждый аккаунт. ## 7. Предоставить пакет материалов по делу, поддающийся проверке Подписанный ZIP из каждого пространства (всегда весь журнал, фильтры не важны), плюс профили людей, экспорты чатов и файлы. ``` CASE-001/ # assembled by the analyst case-notes.md # question, findings, alternative explanations sources.csv # every chat, role, acquisition result and gap timeline.csv # account + chat + message + seq + both times workspace-A/ evidence.zip # complete signed observation journal retained-checkpoint.json profiles-operations.json # separately signed people profiles history-channel.zip # signed current-history export history-group.zip verification.txt workspace-B/ # separate journal and trusted fingerprint witness/ # retained checks, journal and signed posts SHA256SUMS # hashes of the delivered files ``` Отпечатки передавайте отдельно. Проверяйте всё по его собственному пространству: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json python -m tgwitness.verify profiles-operations.json --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --evidence evidence.zip python -m tgwitness.verify history-channel.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 ``` Храните вывод верификатора, оригиналы, охват и запись о передаче вместе с выводами. Оформите всё в Report studio. Если получателю нужно меньше, сделайте [сокращённую передачу](https://phishdestroy.github.io/TgWitness/ru/docs/handover/). --- # Доска дела: сообщения и доказательства Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/case-board/ Соберите сохраненные наблюдения, точные выделения и фрагменты действий на частной доске, обсудите их со своей командой и представьте сборник. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Превратите сохранённые сообщения в дело, над которым работает вся команда. Закладки, точные цитаты, срезы и обсуждения, каждое связано с источником. Каждое изменение — подписанная ревизия. ## От сообщения до карточки дела 1. **Расследование → Case Board** (режим «Стандартный» или «Эксперт»). Создайте коллекцию для дела. 2. В **Журнале** или в чате нажмите **На доску** (или **B**). Карточка попадёт во «Входящие», дайте ей название и переместите. 3. Выделите текст в сообщении — **Выделить → на доску** сохранит точную цитату и версию. Отметьте, почему это важно. 4. Обсуждайте, ставьте статус, возвращайтесь к источнику, когда нужно. **Презентация** проведёт команду по всему материалу. ### Следуйте по одной измененной ссылке для оплаты Синтетический пример · локальная иллюстрация 1. **Захват.** Откройте сохраненное наблюдение № 142 и его версию сообщения. 2. **Добавьте в закладки.** Сохраните цитату, ссылку на источник и свой вопрос на карточке. 3. **Проверка.** Добавьте комментарий команды и переместите карточку в статус «Проверка». 4. **Представить.** Пройтись по процессу сбора данных и открыть контекст цитируемого источника. #### Сохраненное наблюдение № 142 «Используйте новую ссылку для оплаты». Операционный чат · сообщение 38 · зафиксировано в 09:12 UTC #### Карточка: изменено место назначения > Используйте новую ссылку для оплаты. Вопрос: какой вариант появился в более ранней версии? #### Проверка командой Аналитик: сравните с замечанием № 101. Статус: Рецензия · версия сохранена #### Контекст исходного текста Карточка → сохраненная версия → предыдущее наблюдение Аннотации и данные наблюдения за Telegram остаются отдельно идентифицируемыми. ## Сохраните полезный диапазон один раз Shift-клик по двум сообщениям для **Срез между**, **Срез по времени** или сохранение текущих фильтров журнала. **Показать записи после закладки** покажет, что пришло позже. Срезы по времени используют время наблюдения, срезы по ID сообщений следят за этими сообщениями по мере их изменений. ## Назначьте каждому коллеге соответствующую роль **Рецензент** читает, **Аналитик** добавляет карточки и комментарии, **Оператор** ещё и управляет коллекциями и решениями. Права на чаты действуют и на карточки. ## Подготовьте конечный результат Срезы экспортируются в подписанный JSON или CSV. В отчёты можно включить закладки, срезы и комментарии — это настраивается в [Report studio](https://phishdestroy.github.io/TgWitness/ru/docs/reports/). Для получателя с ограниченным доступом используйте [передачу](https://phishdestroy.github.io/TgWitness/ru/docs/handover/). Подробнее: [справочник по Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/). --- # Отчёты по Telegram: HTML и подписанный PDF Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reports/ Выберите данные отчета, один из восьми шаблонов и содержание, затем просмотрите предварительный просмотр и экспортируйте в формате HTML, подписанного PDF или полного пакета доказательств. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Ведите читателя от вопроса дела прямо к сохранённым записям. Report studio собирает выбранные данные, истории изменений, графики и ваши выводы. Восемь дизайнов, HTML и нативный PDF. Каждый отчёт в HTML, PDF и JSON запечатывается вашим ключом. ## Составьте отчет за три шага 1. **Экспорт → Настройка и предпросмотр → Данные**: всё пространство или выбранные чаты, авторы, даты (UTC, когда TgWitness увидел запись) и типы записей. 2. **Дизайн и содержимое**: выберите дизайн и что войдёт в отчёт — графики, участники, переписка, изменения, материалы Case Board, данные дела и заметки. 3. **Предпросмотр**: проверьте числа, активность, примеры и диапазоны отсутствующих ID. Сохраните и скачайте нужный формат. ### Оформите сохраненный материал таким образом, чтобы он был понятен читателю Синтетический пример · схематическое представление, а не сгенерированный отчет 1. **Выбор.** Выберите два чата и период наблюдения для дела. 2. **Составьте текст.** Выберите макет и разделы, отвечающие на поставленный вопрос. 3. **Предварительный просмотр.** Проверьте количество выделенных фрагментов и сохраненный текст «до и после». 4. **Проверьте.** Сгенерируйте окончательный файл и сверьте его подпись с отпечатком доверенной рабочей среды. #### Выбранные замечания 2 чата · 1 день наблюдения Сообщения, правки и уведомления об удалении #### Структура отчета ##### Изменено место назначения платежа Вопрос по делу → объем → выводы → ссылки на записи **Контекст сообщения** Замечание № 142: «Используйте новую ссылку для оплаты». **Сохранены изменения** До: old.example.invalid → После: new.example.invalid #### Проверить выбор 18 комментариев · 2 сохраненных правки Время отправки, редактирования и просмотра обозначено отдельными метками. #### Окончательный результат Подписанный PDF + подписанный JSON или подписанный ZIP-архив с читаемым отчётом Получатель проверяет файл и доверенный отпечаток. ## Выберите стиль изложения **Classic, Editorial, Briefing, Analytics, Technical, Overview, Reading series, and Ledger & margin**: те же записи, разный вид. При смене сохраняются выбор и заметки. Любой из 25 языков. PDF собираются со встроенными шрифтами, браузер не нужен. Для китайского, японского и корейского нужен шрифт вроде Noto Sans CJK на сервере (в системе или в `TGWITNESS_FONT_DIR`), иначе будут только HTML и JSON. ## Прочитайте изменение в контексте Правки показываются «до» и «после», удаления — с последней сохранённой версией. Ответы, пересылки, реакции, кнопки и вложения сохраняют свои ссылки. Предпросмотр дизайна использует первые 50 000 записей, предпросмотр данных считает всё точно. Окончательную вёрстку страниц покажет только сгенерированный PDF. ## Тщательно подбирайте формулировки для копии, предназначенной получателю Фильтры влияют только на отчёт, в ZIP с доказательствами по-прежнему весь журнал и файлы. Если получателю нужно меньше, используйте [сокращённую передачу](https://phishdestroy.github.io/TgWitness/ru/docs/handover/). Ещё: [содержимое отчётов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/), [проверка экспорта](https://phishdestroy.github.io/TgWitness/ru/docs/exports/). --- # Передача доказательств Telegram с ограничением данных Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/handover/ Выберите записи и поля, которые может получить получатель, проверьте готовую копию и удостоверьте её подписанный манифест и границы журнала источников. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Делитесь только нужным, оригинал остаётся нетронутым. Передача — это отдельная подписанная выписка: выберите чаты и людей, скройте личности или текст, отберите файлы и заметки команды. Манифест фиксирует, что оставлено, сокращено и исключено. ## Подготовьте выдержку для получателя 1. **Экспорт → Выписка для передачи**: укажите цель, выберите чаты и период, **Загрузить людей выбранных чатов**, если нужны конкретные люди. 2. Все остальные: псевдонимы, исключение или как записано. Текст и файлы включаются отдельно, телефоны и почту можно скрыть. 3. Case Board: ничего, закладки и срезы или карточки с комментариями. Имена команды можно заменить псевдонимами. 4. **Скачать выписку для передачи**, откройте, проверьте, просмотрите перед отправкой. ### Один оригинал, одна копия для обмена Синтетический пример · иллюстрация носит исключительно ознакомительный характер 1. **Выберите.** Включите чат по делу и укажите, о каком лице идет речь в выдержке. 2. **Минимизировать.** Выберите, как другой участник будет отображаться в копии, предназначенной для совместного доступа. 3. **Проверьте.** Откройте сгенерированный отчет и записи из архива перед отправкой. 4. **Поделитесь.** Предоставьте проверенную копию и отдельно сообщите её проверенный отпечаток. #### Исходные замечания Нора · пользователь 71002 «Я получил ссылку на отредактированный вариант». Источник журнала сохраняет эту запись. #### Копия для получателя Показать так, как записано: Нора · пользователь 71002 · «Я получила исправленную ссылку». Псевдоним: P01 · «Я получил исправленную ссылку». Опустить: сообщение этого участника не включается в текст. #### Ознакомьтесь с фактическими файлами Ознакомьтесь с файлами report.html и records.jsonl. Проверьте идентификационные данные, текст, вложения и дополнительные комментарии команды. #### Подписанный отрывок Выбор + хеши файлов + подписанный манифест Отдельный пакет, привязанный к границе исходного журнала ## Используйте элементы управления в комплексе | Контроль | Влияние на текст | | --- | --- | | Люди | Выбранные люди остаются названными, остальные получают псевдонимы или исключаются. | | Текст | Весь текст, только текст выбранных людей и вашего аккаунта или никакого. | | Файлы | Файлы выбранных людей и вашего аккаунта, все показанные файлы или никаких. | | Доска дел | Ничего, закладки и срезы или карточки с обсуждением. | Прочитайте и сам текст, и файлы: псевдоним не убирает имена, написанные внутри сообщения или вложения. Если выбранного файла нет, восстановите его или исключите вложения. ## Текст должен поддаваться независимой проверке ``` python -m tgwitness.verify handover.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 ``` Оригинальный архив и контрольные точки храните у себя. Получатель может проверить свою копию, не получая всё пространство. Оформление: [Report studio](https://phishdestroy.github.io/TgWitness/ru/docs/reports/). Доверенные ссылки: [проверка экспорта](https://phishdestroy.github.io/TgWitness/ru/docs/exports/). --- # Управление группами аккаунтов Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/groups/ Сравнивайте групповые рабочие пространства, находите источники, просматривайте периоды наблюдения и применяйте общие настройки с исключениями для отдельных учетных записей. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Ведите несколько аккаунтов вместе — у каждого по-прежнему свои записи и ключ. Группа собирает статус подключения, запуск/паузу, общие настройки и экспорт на одном экране. Удобно, когда несколько аккаунтов работают по одному делу. ## Открыть обзор группы Откройте группу в **Аккаунтах**. У каждого аккаунта видно состояние, маршрут, задержку и последнее сохранённое сообщение. **Требует внимания** перечисляет сломанные, **Исправить** ведёт прямо туда. **Запустить все** / **Приостановить все** спрашивают перед действием. **Настройки группы** общие, но собственные значения аккаунта остаются, пока вы их не замените. ### Проверьте изменение маршрута в группе Синтетический пример · иллюстративные проверки и результаты 1. **Выберите.** Выберите группу и проверьте, какие аккаунты будут изменены. 2. **Подготовка.** Сохраняйте отдельный маршрут для каждого аккаунта, когда это необходимо. 3. **Проверьте.** Протестируйте предложенное соединение и проанализируйте результаты измерений. 4. **Приступить к работе.** Перед сохранением проверьте текст ещё раз и проанализируйте результат для каждой учётной записи. #### Команда по делу Коллектор каналов · Коллектор групп · Справочная учетная запись 3 отдельных рабочих пространства #### Проверенный текст 2 аккаунта следуют предложенному маршруту. Справочный аккаунт следует собственному маршруту. #### Проверки перед началом работы Коллектор каналов: время передачи данных в Telegram — 84 мс Групповой сборщик: время передачи данных Telegram — 91 мс Эти цифры являются вымышленными показателями, приведенными в качестве примера. #### Результаты применения Коллектор каналов: маршрут сохранен, наблюдение возобновлено. Групповой сборщик: повторная проверка завершилась неудачно, восстановлены предыдущие настройки. Справочный аккаунт: собственный маршрут сохранен. ## Измените маршрут, добавив этап проверки 1. **Изменить маршрут группы**, выберите тип и настройки. 2. **Проверить выбор**: какие аккаунты изменятся и у каких свой маршрут. 3. **Подготовить и проверить** проверяет новое подключение к Telegram и, где возможно, внешний IP. 4. **Применить проверенное подключение** и посмотрите на каждый результат. Работавшие аккаунты продолжат, простаивавшие так и останутся. Задержка — это время установки соединения с Telegram, внешний IP — то, что показал маршрут во время проверки. Результаты у аккаунтов могут отличаться. ## Используйте перекрывающийся доступ **Чаты, которые видят несколько аккаунтов**, показывают общие источники и их охват. Каналы и супергруппы можно экспортировать сразу несколькими аккаунтами через **Экспорт … аккаунтами**. Личные чаты и обычные группы — нет: номера сообщений там свои у каждого аккаунта. ## Экспорт группы в виде пакета **Экспорт группы** даёт один ZIP с подписанным экспортом каждого аккаунта и подписанным их списком. У каждого свой отпечаток для проверки. Общую хронологию по-прежнему собираете вы. Дальше: [отчёты](https://phishdestroy.github.io/TgWitness/ru/docs/reports/), [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/case-board/), [проверка экспорта](https://phishdestroy.github.io/TgWitness/ru/docs/exports/). --- # Доказательства Telegram: цепочка хешей и подписи Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/concepts/ Проследите путь сообщения от момента захвата до контрольной точки. Измените пример записи, пересчитайте её цепочку SHA-256 и посмотрите, что обнаружит сохраненная контрольная точка. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Сообщения меняются. Ваша запись того, что вы видели, — нет, и проверить это может кто угодно. Ниже два небольших эксперимента. Вымышленные сообщения, всё работает в браузере, в Telegram ничего не уходит. ## От экспорта чата до проверяемой записи [Экспорт Telegram Desktop](https://telegram.org/blog/export-and-more) сохраняет видимую сейчас историю в HTML или JSON. TgWitness добавляет непрерывный журнал изменений, подписи на каждой записи и контрольные точки, с которыми могут сверяться другие. | Задача | Экспорт из Telegram Desktop | TgWitness | | --- | --- | --- | | Просмотр сохраненных переписок | HTML или JSON с выбранными медиафайлами | Сохраненные чаты, журнал с возможностью поиска и отчеты в автономном режиме | | Отслеживайте изменения во времени | История, доступная при экспорте | Старые версии, поздние правки и удаления — всё сохранено | | Проверьте файлы после передачи | Стандартные файлы экспорта в формате HTML/JSON не подписаны | Подписанный манифест, подписанные записи и запечатанные отчёты, проверяемые по доверенному ключу | | Сравните с предыдущим сохраненным состоянием | Сохраните отдельную справочную копию или хеш | Подписанные контрольные точки, отдельный свидетель и опциональные внешние временные метки | Сравнение основано на [коде экспорта Telegram Desktop](https://github.com/telegramdesktop/tdesktop/tree/768d47cda6c7f447c10a25d1f363279493a90ed7/Telegram/SourceFiles/export/output) по состоянию на 2 ноября 2026 года. ## Одно сообщение, три замечания Новое сообщение, правка и удаление становятся тремя отдельными записями. Правка не перезаписывает первую, удаление её не стирает. 01 / ПУТЬ СООБЩЕНИЯИллюстративная последовательность Telegram delivers an update to the collector, which appends a journal record. · Telegram · Коллектор · Журнал · обновление → · добавить → ПРОСМОТР ТЕКУЩЕГО ЧАТА Сообщение № 42 Сообщение удалено Сообщение исчезло из окна чата. ЖУРНАЛ НАБЛЮДЕНИЙ 3 записи 1. 01 `message.new` Встреча в 10:00 ✓ 2. 02 `message.edited` Встреча в 11:00 ✓ 3. 03 `message.deleted` Уведомление об удалении № 42 ✓ Все три зафиксированных события сохраняются в журнале. Упрощённый путь для одного уже выбранного источника. Оперативные записи также используют тот же журнал. Захват данных зависит от того, что доступно для просмотра в учётной записи и что предоставляет Telegram. Telegram не сообщает, кто удалил сообщение и когда именно. TgWitness оставляет эти поля пустыми, а не угадывает. ## Измените запись. Проследите хеш. Каждая запись содержит хеш предыдущей. Контрольная точка, сохранённая в другом месте, фиксирует длину журнала и последний хеш. 02 / ПЕСЧАНКА HASH-CHAINНастоящий SHA-256 · примеры записей ЗАПИСЬ 01**Сообщение получено**`h₁ = SHA-256(e₁)`Ссылки на 64 нуля ЗАПИСЬ 02**Встреча в 11:00**`h₂ = SHA-256(e₂)`Включает h₁ ЗАПИСЬ 03**Зафиксировано удаление**`h₃ = SHA-256(e₃)`Включает h₂ ХРАНИТСЯ В ДРУГИХ ИСТОЧНИКАХ**3 записи · заголовок `h₃`**Сравните эту фиксированную границу с предоставленным журналом. Изменение события приводит к изменению его хеша. Восстановление цепочки приводит к изменению её начала. Удаление конца делает цепочку короче, чем сохраненная контрольная точка. **Ознакомьтесь с записью № 2 и полными хешами** В данном примере представлен точный JSON-файл в кодировке UTF-8 с хешированием. Значения являются вымышленными; девять полей и формат сериализации соответствуют формату журнала. ``` ``` Хеш сохраненной записи № 2 `` Пересчитанный хеш записи № 2 `` Данная тестовая среда вычисляет хэши, а не подписи. Реальный верификатор также проверяет подпись Ed25519, последовательность и ссылку каждого события. Простое восстановление хэшей не позволяет создать действительные подписи с использованием доверенного ключа. ## Фактические правила в нескольких строках ХЭШ + ПОДПИСЬ h0 = 064 hi = hex(SHA-256(C(ei))) σi = Ed25519.Sign(sk, unhex(hi)) **C** — это девять полей события в виде UTF-8 JSON: ключи по порядку, без лишних пробелов, без ASCII-экранирования, без NaN/бесконечности. `previous_hash` — это hi−1, h0 — 64 нуля, подписи покрывают 32 сырых байта дайджеста. Поля: `seq`, `observed_at`, `source_at`, `kind`, `chat_id`, `message_id`, `actor_id`, `payload`, `previous_hash`. Полная спецификация: [кодирование событий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#event-canonicalization). СОХРАНЕННАЯ КОНТРОЛЬНАЯ ТОЧКА Nexport ≥ Ncheckpoint hexport[Ncheckpoint] = Hcheckpoint Проверьте подпись контрольной точки по закреплённому ключу, затем сравните её с журналом. Поздний экспорт может быть длиннее, но в точке должен совпадать. ## Три вопроса, три различных проверки [01 / ЦЕЛОСТНОСТЬ**Изменилась ли эта запись?** Хеши и подписи по ключу, которому вы доверяете.](https://phishdestroy.github.io/TgWitness/ru/docs/exports/)[02 / НЕПРЕРЫВНОСТЬ**Что было сохранено ранее?** Сравните экспорт с контрольными точками, которые сохранил свидетель.](https://phishdestroy.github.io/TgWitness/ru/docs/witness/)[03 / ПРЕДОСТАВЛЕНИЕ**Поступили ли эти тестовые события?** Отправьте, измените и удалите тестовые сообщения и посмотрите, что поймал каждый аккаунт.](https://phishdestroy.github.io/TgWitness/ru/docs/cases/) Подписи отвечают на вопрос «меняли ли», контрольные точки — «совпадает ли с тем, что было раньше», тестовые сообщения — «поймали ли мы всё». [Что проверка доказывает, а что нет.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) Дальше: [расследование по всему аккаунту](https://phishdestroy.github.io/TgWitness/ru/docs/cases/) от начала до пакета для передачи. [Export Clinic: watch the controlled Desktop experiment](https://phishdestroy.github.io/TgWitness/docs/export-clinic/). Compare the two-minute film, the original recording and seven pairs of test exports. Local modification is disclosed. --- # Защита сессий Telegram и хранилища доказательств Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/security/ Узнайте, где хранятся сеансы, ключи и доказательства, какие данные покидают Ваш компьютер, что охватывают меры защиты и как усилить безопасность установки. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Что уходит с вашей машины, что открывает каждый секрет и что защищено, а что остаётся на вас. **127.0.0.1**Адрес панели по умолчанию **256-битный**случайный токен панели **0**CDN, аналитика или удалённые шрифты **Ed25519**подпись на каждой записи ## Где всё хранится Сборщик, панель и все записи остаются на вашей машине. По умолчанию связь есть только с Telegram, всё остальное включается отдельно. 06 / ЧТО ОСТАЁТСЯ В СИСТЕМЕВаша установка ВАШ КОМПЬЮТЕР ИЛИ СЕРВЕР **Панель**127.0.0.1:8787 · токен bearer **Коллектор**один клиент Telegram на каждое рабочее пространство КАТАЛОГ ДАННЫХ **Журнал**SQLite · с цепочкой хешей · подписанный **СМИ**Файлы, имена которых сформированы на основе SHA-256 **Хранилище**Fernet · сессия, пара API, ключ подписи, прокси - **Telegram**Всегда · по вашему маршруту Тип подключения аккаунта по протоколу MTProto: прямое, SOCKS5, HTTP или MTProxy. Режим «Скрытие IP» ожидает подключения к рабочему прокси-серверу. Для перехода на прямое подключение в качестве резервного варианта требуется режим, явно разрешающий такую возможность. - **Текст для внешних ресурсов**Необязательно · по умолчанию отключено Журнал, файлы и контрольные точки шифруются с помощью алгоритма AES-GCM перед загрузкой в хранилище, совместимое с S3. Ключ хранится у вас; вложения именуются по хэшам с ключом, а не по хэшам их содержимого. - **Уведомления**Необязательно · по умолчанию отключено Указание проблем и количества изменений с указанием названий чатов. Выдержки из сообщений отправляются только в том случае, если вы включите эту функцию. - **Авторитетный источник временных меток**Необязательно · по умолчанию отключено Только хеш SHA-256 подписанной контрольной точки и случайный нонс. Никаких сообщений, никаких имен участников чата. - **Свидетель**Необязательно · по умолчанию отключено С помощью токена, предназначенного только для чтения, извлекает подписанные контрольные точки и счетчики захватов. Инструмент не может читать переписки или изменять настройки. По умолчанию: с данного компьютера выходит только соединение с Telegram. Дополнительные места назначения настраиваются для каждого рабочего пространства. Текст сообщений и мультимедийные файлы хранятся в незашифрованном виде в каталоге данных: обеспечьте их защиту с помощью шифрования диска и прав доступа к файлам. ## Что открывает каждая тайна | Секретно | Где хранится | Какие возможности это открывает | В случае утечки | | --- | --- | --- | --- | | **Токен панели** | `panel-token.txt` в папке данных; браузер хранит его для вкладки | Всё во всех пространствах | Остановите TgWitness, удалите `panel-token.txt`, запустите снова — будет новый | | **Сессия Telegram** | Хранилище, зашифрованное (`credentials.enc`) | Сам аккаунт в Telegram | Завершите сессию в Telegram в разделе *«Настройки» → «Устройства»* | | **Ключ подписи** | Хранилище, зашифрованное (`signing.enc`) | Подпись записей вашим отпечатком | Контрольные точки в другом месте, свидетель и метки времени по-прежнему показывают, что было раньше | | **Ключ хранилища** | `vault.key` рядом с данными или внешний мастер-ключ | Хранилище секретов | Считайте, что сессия и ключ подписи тоже утекли | | **Токен Witness** | На хостинге Witness | Только чтение: контрольные точки и состояние | Удалите его на странице свидетеля и создайте новый | | **Ключевые фразы для текстов на внешних ресурсах** | Vault; загрузите его один раз для восстановления данных | Внешнюю копию | Тот, у кого есть ещё и бакет, может её расшифровать: считайте копию раскрытой | ## Что охватывают меры защиты ### : освещено - Изменённая, удалённая или переставленная запись: ломается цепочка хешей или подпись. - Журнал обрезан или пересобран после того, как вы сохранили контрольную точку в другом месте: точка перестаёт совпадать. - Подбор токена: 256 случайных бит, сравнение за постоянное время, 15 ошибок в минуту — и адрес блокируется. - Враждебное содержимое чатов: текст остаётся текстом, не HTML; вложения скачиваются как файлы; панель ничего не грузит с чужих сайтов. - Украденная папка данных при внешнем ключе хранилища: сессии и ключи остаются зашифрованными. ### Решать вам - Главный токен может всё. Давайте другим ограниченный доступ, а главный держите при себе. - Администратор машины может прочитать всё и переподписать журнал. Храните отпечаток и контрольные точки в другом месте. - Сообщения и медиа TgWitness не шифрует. Шифруйте диск и ограничивайте права. - Обычный HTTP вне localhost раскрывает токен. Используйте HTTPS или SSH-туннель. - Подписи не скажут, что было пропущено. Проверяйте охват и доставку на своих аккаунтах и источниках. [Дайте доступ к делу](https://phishdestroy.github.io/TgWitness/ru/docs/access/) с правами, сроком действия и лимитом сессий. ## Усиление безопасности установки Выполнено 0 из 8 1. **Используйте отдельный аккаунт Telegram**, никогда не основной. 2. **Держите панель на 127.0.0.1.** Удалённо — только через HTTPS (встроенный Caddy) или SSH-туннель. 3. **Зашифруйте диск** с папкой данных: сообщения и медиа хранятся как есть. 4. **Ограничьте папку данных** служебной учётной записью (0700 в Unix, права папки в Windows). 5. **Храните ключ хранилища отдельно** на серверах: задайте `TGWITNESS_VAULT_KEY_FILE` до первого запуска. 6. **Сохраняйте отпечаток и контрольные точки** на другой системе, запустите свидетеля на другом хосте. 7. **Ни в коем случае не загружайте** ключи `data/`, сеансовые ключи, `panel-token.txt` или ключи хранилища на GitHub или в чат. 8. **Не регистрируйте** заголовки `Authorization` или тела запросов на обратном прокси-сервере. **Можно ли изменить токен панели без потери данных?** Да, он только открывает панель. Остановите TgWitness, удалите `panel-token.txt`, запустите снова. Журнал, сессии и ключи останутся. Если задан `TGWITNESS_TOKEN`, используется он, а не файл. **Почему сообщения не шифруются при хранении?** Сборщику нужно читать их для поиска, сравнения и экспорта. Ключ на той же машине не остановит того, кто и так может читать эту машину. Шифрование диска защищает украденный диск, права — работающий. ## Сообщить об уязвимости **Security → Report a vulnerability** на GitHub. Версия, последствия и минимальный пример на вымышленных данных. Никогда не присылайте учётные данные, папки аккаунтов или настоящие доказательства. Если приватные отчёты выключены, откройте issue с просьбой о закрытом канале, без деталей эксплойта. --- # Настройка бота-свидетеля для доказательств Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/witness/ Публикуйте подписанные контрольные точки журнала в своём канале Telegram с помощью отдельного свидетеля, имеющего собственный ключ и доступ к коллектору только для чтения. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Отдельный процесс проверяет ваш журнал и публикует подписанные контрольные точки в канал. ## Два сервера, два ключа подписи ХОСТИНГ / СБОРЩИК**Учётная запись + журнал** Ключ подписи сборщика сеансов Telegram Конечная точка контрольной точки, доступная только для чтения ← запросить подписанный ответ → HOST B / WITNESS**Проверка + сохранение** Закрепленный отпечаток сборщика; отдельный ключ подписи свидетеля Собственный журнал + токен бота Witness → API бота Telegram →**Ваш канал · подписанные сообщения TGW1** Witness самостоятельно выполняет проверки. Доступ сборщика ограничен только чтением. При публикации бот использует подключение и токен Witness; сессия учетной записи Witness не предоставляется. 03 / РЕШЕНИЯ ПО КОНТРОЛЬНЫМ ТОЧКАМПримерные ответы ПОСЛЕДНЕЕ УТВЕРЖДЕНИЕ**120 записей**`head 9c7d…` СЛЕДУЮЩИЙ ОТВЕТ**128 записей**`head a4f2…` Принято: количество записей увеличивается, подпись подтверждается, а ключ совпадает. Свидетель сохраняет эту новую границу. Во всех примерах ответов предполагается наличие действительной подписи и закреплённого ключа. Хэши здесь приведены в сокращённом виде. Само по себе большее количество не может служить доказательством того, что весь старый префикс остался неизменным; сравните экспорт с сохраненными контрольными точками. ## Подготовьте бота и канал Создайте бота через BotFather и разрешите ему писать в ваш канал. Запускайте свидетеля в другом месте: другой хост, в идеале под управлением другого человека, стоит намного больше, чем второй процесс рядом со сборщиком. ## Три шага в разделе «Дополнительные функции» 1. **Доступ только для чтения.** **Дополнения → Независимый свидетель**, создайте токен и сохраните файл. Он читает контрольные точки и состояние, больше ничего. 2. **Канал и интервал.** Канал Telegram или вебхук Discord, плюс адрес сборщика, доступный свидетелю. Сохраните файл настроек. 3. **Запуск.** Положите `witness.json`, `witness-token.txt` и `bot-token.txt` вместе на хост свидетеля и выполните: ``` python -m tgwitness.witness run --config witness.json --check-config python -m tgwitness.witness run --config witness.json ``` Дождитесь первого подписанного поста в канале, затем сохраните отпечаток свидетеля в надёжном месте. Вместо этого Discord? Сохраните URL вебхука как `discord-webhook.txt`. Один свидетель публикует в одно место; длинные проверки приходят в Discord файлом. ## Выберите периодичность публикаций Публикация каждой проверки даёт регулярную внешнюю запись: каждые пять минут — это около 288 постов в день на пространство. В расширенных настройках можно публиковать только при изменениях или проблемах, использовать прокси или свой Bot API. **Что именно подтверждает этот бот?** Он запрашивает у сборщика подписанную контрольную точку, проверяет её по ожидаемому ключу и ведёт свой подписанный журнал, включая пропущенные и отклонённые ответы. Он проверяет состояние журнала, а не следит за Telegram сам. Для этого проведите контрольный тест доставки. ## Проверьте доказательства позже Храните журнал свидетеля, посты и отпечатки. [Как сверить их](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#verify) с экспортом сборщика. --- # Поиск и анализ сохранённого архива Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/archive/ Загрузите историю, выполните поиск по сохраненным записям, просмотрите источники искусственного интеллекта и подключите свои инструменты. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Найдите сообщение. Проверьте источник. Соберите доказательства. 01**Включить историю** Загрузите прошлые сообщения включённых источников в пространство. 02**Следите за источниками** Ищите, а потом открывайте сохранённое сообщение за каждым результатом. 03**Обеспечьте четкую передачу информации** Ваш анализ — в одном файле, подписанные доказательства — рядом. Зафиксированные записи, распознанный текст и выводы аналитиков четко разграничены. ## Загрузить предыдущие сообщения 1. **Источники → Чаты в охвате**: проверьте включённые чаты и запустите наблюдение. 2. **Загрузить всю историю**. Берётся список источников в его текущем виде. 3. **Приостановить историю** / **Продолжить историю** — в любой момент. После перезапуска продолжайте вручную. 4. Проверьте результат по каждому источнику и очередь загрузок, сохраните подписанный отчёт о ходе вместе с экспортом. Так заполняется пространство. Экспорт одного чата в HTML/JSON — отдельная операция. [Подробнее](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/). ## Сначала выполните поиск, а потом принимайте решение об использовании ИИ 1. **Журнал** ищет локально, с фильтрами по источнику и времени. 2. Найдите фразу или домен, откройте запись и её версии. 3. Для ИИ администратор настраивает провайдера в **Интеграциях**. Затем **Спросить архив**: выберите чаты и период, посмотрите **Данные для модели** и снимите галочки с того, что не должно уйти. 4. Проверьте цитаты, сохраните ответ как отчёт и добавьте свои заметки. Поиску ИИ не нужен. Отчёты хранят источники и правки отдельно от подписанного журнала. [Настройка провайдера](https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/). ## Выберите нужный вам вариант подключения | Задача | Открыть | Настройка | | --- | --- | --- | | Дать ИИ-клиенту читать выбранные чаты | **Интеграции → MCP** | [Установить MCP, создать ограниченный токен, подключить](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/) | | Распознавание текста в сохраненных медиафайлах | Запись `media.saved` → **Распознать вложение** | [Настроить локальный Docker-воркер](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/) | | Отправка событий в n8n или SIEM | **Интеграции → Исходящие веб-хуки** | [Добавить получателя, проверять HMAC, отсеивать дубли ID](https://phishdestroy.github.io/TgWitness/ru/docs/reference/webhooks/) | **Какой токен доступа куда вводить?** Доступ к панели — для людей. У MCP свои токены только для чтения, у вебхуков свой секрет HMAC. Сессия Telegram никому из них не нужна. [Предоставьте доступ к панели](https://phishdestroy.github.io/TgWitness/ru/docs/access/) или [настройте клиент MCP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/). ## Предоставление источников и выводов Положите отчёт рядом с подписанным ZIP. Отчёт — это ваше прочтение источников, ZIP — то, что проверяет получатель. [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/exports/) · [Проведение полного расследования](https://phishdestroy.github.io/TgWitness/ru/docs/cases/) --- # Доступ рецензентов к материалам дела Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/access/ Предоставьте рецензентам и аналитикам доступ к выбранным аккаунтам и чатам с отдельными правами доступа, ограничениями по продолжительности сеанса и отзывными токенами. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Поделитесь тем материалом, который кому-то нужен. Остальное держите под контролем. 01**Выберите доказательство** Целые пространства или отдельные чаты. 02**Выберите действия** Просмотр, экспорт или только нужные операции. 03**Установите ограничения** Личный токен со сроком действия, лимитом сессий и правилами IP, если нужно. Объём сбора данных определяет, что именно фиксируется. Объём доступа определяет, что пользователь может видеть и делать. ## Предоставить кому-либо доступ 1. Как администратор откройте **Доступ**. 2. Назовите доступ, выберите пространства и чаты. 3. Проверяющему достаточно **Просмотра**. Для скачивания добавьте **Экспорт**. 4. Установите ограничения, затем нажмите **«Создать доступ**». 5. Скопируйте токен (показывается один раз) и отправьте его лично вместе с адресом панели. 6. Сначала проверьте, что он увидит, в отдельной сессии браузера. ## Начните с описания задачи, которую им необходимо выполнить | Лицо | Доступ | Результат | | --- | --- | --- | | Рецензент | Выбранные чаты; только для просмотра | Читает чат, ничего не может изменить. | | Аналитик | Выбранные чаты; просмотр и экспорт | Читает и скачивает то, что нужно для дела. | | Оператор | Выбранные полные рабочие пространства; источники и сбор данных | Решает, что наблюдать, запускает и останавливает сборщики. | Это просто примеры, а не фиксированные роли. Доступ, ограниченный чатами, никогда не получает настроек аккаунта и полных экспортов журнала. Доступ ко всем пространствам включает аккаунты, добавленные позже. ## Вы можете изменить своё решение в любой момент Меняйте доступ когда угодно, изменения действуют со следующего запроса. Завершите одну сессию или отзовите всё. Уже скачанные файлы не вернуть. Сбор продолжает работать. **Ограничения по сеансам и IP-адресам** Ограничьте параллельные сессии и входы, задайте дату окончания, разрешите IP или подсети или привяжите к IP первого входа. Срок считается по бездействию, открытая панель считается активной. За прокси проверьте, какой IP клиента видит приложение. **Основной ключ и журнал активности** Главный токен остаётся у администратора. Выданный доступ не может управлять чужим доступом или открыть консоль администратора. Изменения доступа и сессии подписываются в журнал, без токенов. Администратор сервера по-прежнему видит всё. Все семь прав и правила сессий: [справочник по доступу](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/). --- # Сервер TgWitness для сбора данных Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/server/ Запускайте TgWitness на сервере с постоянным хранилищем данных, частным доступом к панели управления, резервным копированием и проверками после перезапуска. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Держите сборщик в работе, а данные — в сохранности при перезапусках. ## Выберите способ запуска Нативно: [лаунчер](https://phishdestroy.github.io/TgWitness/ru/docs/start/) плюс шаблоны служб в [deploy/](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md). Docker, из папки проекта: ``` docker compose up -d --build --wait docker compose exec tgwitness cat /data/panel-token.txt ``` Панель слушает localhost:8787. Открывайте локально или через SSH-туннель, с токеном из второй команды. ## Сохраните весь каталог данных Нативно: `data/live`. Docker: том `tgwitness-data`. Журналы, сессии и ключи должны храниться вместе. Подписанный экспорт — это доказательство, а не резервная копия. 1. Сначала остановите сбор. 2. Скопируйте всю папку данных в надёжное место вне хоста. 3. Попробуйте восстановить её на отдельной установке, прежде чем ей доверять. ## Проверьте после перезапуска Проверьте пространство и ключ, подключение, источники и то, что новые сообщения приходят. TgWitness догоняет то, что ещё хранит Telegram, а не всё, что произошло, пока он был выключен. «Здоровый» контейнер значит, что веб-сервер отвечает. Работает ли сбор, покажут тестовое сообщение и свидетель. ## Публикуйте только то, что намереваетесь HTTPS, тома, обновления и восстановление — в справочнике по развёртыванию. Что реально проверено: [журнал проверок](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/). --- # Telegram: ошибки входа, FloodWait и пропуски сбора Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/troubleshooting/ Проверьте доступ к панели управления, подключение к Telegram, отсутствующие сообщения, параметр FloodWait и статус Witness, используя соответствующие индикаторы для каждой проблемы. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Начните с симптома и проверяйте по одному. ## Панель запрашивает токен Нужен токен панели из файла, который назвал лаунчер. Docker: `docker compose exec tgwitness cat /data/panel-token.txt`. Не код Telegram, не токен бота и не токен свидетеля. ## Telegram не подключается Запустите проверку подключения. На публичном прокси выберите другой и сохраните. Проверьте тип прокси и формат секрета. Обновление списков само по себе маршрут не меняет. ## Подключено, но новых сообщений нет 1. Запущено ли наблюдение, в том ли пространстве? 2. Выбран ли источник и виден ли он этому аккаунту? 3. Отправьте уникальное сообщение в тестовую группу и найдите его. 4. Поищите в журнале перерывы или ошибки Telegram. В тихом чате просто нет ничего нового. Если важна полнота, проведите контрольный тест доставки. ## FloodWait или задержка после перезапуска FloodWait — это Telegram говорит «помедленнее». Переждите и снизьте нагрузку, переподключение не поможет. После перезапуска TgWitness догоняет то, что ещё есть у Telegram; остальное — пробел, запишите его. ## Бот настроен, но ничего не публикует Запущен ли свидетель, может ли бот писать в канал, доступны ли ему сборщик и Bot API? Поищите в его журнале неудачные публикации. Опрос на стороне сборщика не значит, что пост ушёл. ## Где находится интеграция с токенами GitHub? **В стадии планирования. В разделе** «Дополнительная информация» описывается предлагаемый рабочий процесс проверки форка и сборки. В настоящее время отсутствует форма для ввода токена GitHub или автоматизированная проверка соответствия работающей установки репозиторию. Ознакомьтесь с [текущим статусом функциональности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/). Сообщаете об ошибке? Версия, ОС, шаги и ошибка без личных данных. Никогда не кладите сессии, токены, личные сообщения или папку данных в публичный issue. --- # 56 329 сообщений. Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/validation/ Датированный срез проверок трёх серверов TgWitness: целостность журналов, результаты тестов и скорость сбора с явными ограничениями. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) TGWITNESS / РЕАЛЬНЫЕ ЭКСПОРТЫ Собрано. Выгружено. Два новых экспорта Telegram с замером от сбора до готового архива. Откройте демо, сравните числа и скачайте пример. [Открыть демо](https://phishdestroy.github.io/TgWitness/demo/?lang=en)[Скачать пример экспорта](https://phishdestroy.github.io/TgWitness/demo/downloads/tgwitness-demo.zip) В демо и примере вымышленные сообщения. Замеры ниже получены на реальных экспортах. TGW / 001 Сохранённый срез · не онлайн-мониторинг Дата проверки 2026-11-06 18:37:38 UTC Проверенный коммит [92e539af](https://github.com/phishdestroy/TgWitness/commit/92e539af40d8368d198ff5e040f1d876f2c1310e) Текст и метаданные · подписанные архивы **56 329**Сообщений выгружено **160.531**Сообщений/с · лучший запуск **2**Подписанных экспортов **3**Серверов проверено Сервер AWARP · 2 аккаунта **27 030**Сообщений выгружено **142.983**сообщений/с Только сбор 189.043 с Полный экспорт 211.647 с Сервер BWARP · 2 аккаунта **29 299**Сообщений выгружено **160.531**сообщений/с Только сбор 182.513 с Полный экспорт 206.650 с 01 / ## Скорость на реальных экспортах. Один новый экспорт на сервер, по два аккаунта. Текст и метаданные через WARP, без вложений. Это отдельные запуски, а не гарантия производительности. сообщений/с Сервер A**142.983 сообщений/с** Сервер B**160.531 сообщений/с** Сервер C Не измерено — Число сообщений ÷ время сбора. Подготовка, отбор и упаковка не входят в этот интервал. Число сообщений ÷ полное измеренное время экспорта, включая подготовку и упаковку. Для сервера C нет результата замера сбора. В обоих запусках нет повторно использованных записей и дубликатов ID. На сервере A параллельно шло чтение защищённого источника. Паузы FloodWait соблюдены: A · 4, B · 3. **Точные замеры и хеши архивов** | Сервер | Сообщения | Только сбор | Полный экспорт | | --- | --- | --- | --- | | Сервер A | 27 030 | 189.043 с **142.983 сообщений/с** | 211.647 с **127.713 сообщений/с** | | 2026-11-06T18:26:51.500Z → 2026-11-06T18:30:23.228Z SHA-256 `20e507fc68446680ed002fd486d0968a944ec0c71e02f937331ae2b19ab4cd66` | | | | | Сервер B | 29 299 | 182.513 с **160.531 сообщений/с** | 206.650 с **141.781 сообщений/с** | | 2026-11-06T18:25:40.419Z → 2026-11-06T18:29:07.173Z SHA-256 `824601b502762efaabb8ff9afdb1e8d7fff189862ef2cbc4d8d26d0d68c83e4c` | | | | Оба архива прошли проверку с закреплённым ключом коллектора. Это подтверждает целостность относительно ключа, но не авторство сообщений Telegram. 02 / ## Все три. С точным объёмом проверки. На каждом сервере проверены целостность журналов, права на файлы, хранилища, сетевые маршруты и запущенные процессы. A Проверен ### Сервер A Сбор и экспорт 8 vCPU · 16 GiB · Ubuntu 24.04 Журналов проверено 21 Событий в журналах 4 517 Чекпоинтов 147 Новый замер сбора, проверка архива и целостности резервных копий. B Проверен ### Сервер B Сбор и экспорт 8 vCPU · 16 GiB · Ubuntu 24.04 Журналов проверено 21 Событий в журналах 1 993 Чекпоинтов 147 Новый замер сбора, проверка архива и целостности резервных копий. C Проверен ### Сервер C Панель и вложенная VM 8 vCPU · 32 GiB · Ubuntu 24.04 Журналов проверено 14 Событий в журналах 7 185 Чекпоинтов 973 Проверены авторизация панели, привязка к loopback и вложенная VM. Замер сбора на этом сервере не проводился. **Результаты тестов, охват и технические заметки** 03 / ## Успешные проверки и пробелы — рядом. Последний результат каждого теста pytest с учётом повторных запусков. Отдельные наборы проверок браузера и доказательств указаны ниже и не прибавлены к общему числу pytest. **1 585**Прошли **3**С ошибкой **37**Пропущены Три браузерных теста захвата завершились с ошибкой: в контейнерах недоступна обязательная песочница Chromium. Её не отключали. 37 пропусков по платформе не считаются успехом. - Проверки браузера**102 прошли** - Проверки интерфейса**66 прошли** - Проверки доказательств**15 прошли** - Проверки сайта**9 прошли** - Дополнительные проверки**13 прошли** 04 / ## Что остаётся неподтверждённым. 1. 01 ### Песочница браузера В этой среде остаются три ошибки браузерных тестов. Успешный запуск в другой среде не заменяет эти результаты. 2. 02 ### Свежесть резервных копий 42 журнала резервных копий и 51 285 файлов прошли проверку целостности. На момент среза 3 507 событий были новее последней копии. Рабочим данным также нужно постоянное хранилище. 3. 03 ### Сетевой охват 16 из 40 проверяемых маршрутов недоступны. Эти аккаунты не подключали к Telegram напрямую в обход маршрута. 4. 04 ### Независимое время Сохранённый журнал свидетеля прошёл проверку целостности. Последнее событие — 6 ноября в 07:27 UTC; независимую временную привязку не проверяли. 5. 05 ### Открытые вопросы безопасности Остаются замечания к защите ключей и аккаунтов, постоянному хранению и контролю релизов. Успешная проверка целостности не является сертификатом безопасности. 6. 06 ### Границы доступа Отдельный CI-сервер и учётная запись публикации не проверены на уровне ОС или аккаунта. Эта страница охватывает три проверенных сервера. 7. 07 ### Границы замера Два публичных источника, два отдельных запуска, без скачивания вложений и повторных серий. Для сервера C скорость сбора не измерена. Эти числа не прогнозируют другую нагрузку. 05 / ## Срез с датой и исходными числами. Это измерения оператора, а не независимое свидетельство. JSON содержит только агрегаты. Имена источников и аккаунтов, тексты сообщений, учётные данные и приватные архивы не публикуются. 1. Закрепить коммит и проверить установленный релиз. 2. Собрать данные в новое пространство без повторного использования записей. 3. Отдельно измерить время сбора и полного экспорта. 4. Проверить архив с закреплённым ключом и сохранить его SHA-256. Проверенный релиз `92e539af40d8-83e41104669e` [Скачать данные ↓](https://phishdestroy.github.io/TgWitness/validation/snapshot.json) SIGNED AUDIT / ENGLISH ### Check the numbers. The English report includes the measured results, open findings and a reproducible signature check. [Read the report ↗](https://github.com/phishdestroy/TgWitness/blob/main/website/validation/audit/REPORT.md)[Signed statement ↓](https://phishdestroy.github.io/TgWitness/validation/audit/PROOF.json)[Measurements CSV ↓](https://phishdestroy.github.io/TgWitness/validation/audit/MEASUREMENTS.csv)[Python verifier ↓](https://phishdestroy.github.io/TgWitness/validation/audit/VERIFY.py)[File checksums ↓](https://phishdestroy.github.io/TgWitness/validation/audit/SHA256SUMS.txt) The signature protects the report against alteration. It does not independently attest the measurements or certify GDPR compliance. The report records the completed audit at 19:08 UTC; the infrastructure snapshot above was taken earlier. **Хеши исходных результатов** Эти хеши идентифицируют сохранённые результаты. Сам хеш не доказывает измерения; приватные оригиналы нельзя скачать с этой страницы. - benchmark-1.json`66cdf2db25901ee1f780a0e2d14b9b84888dbe525bff73bae19819b217f95d0c` - benchmark-2.json`ad2978fe2a7563476da43293eaaf5f498ee12522f0ea3e401bc43205c64874d1` - test-totals.json`922cf87d9320b149f2fc6791fc05f98335ec0952f9258e6eaeff179aeef33bb1` - infra-summary.json`325d390ef752b15f44203f97348863e24f0f631fe88998d5e1f398a5311a9339` Это срез проверки, а не утверждение, что проверены все функции и все аккаунты. Отсутствие измерения обозначено явно. --- # TgWitness: экспорт Telegram, OSINT и проверка данных Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/ Установка одной командой или сбор через GitHub Actions. Сценарии расследования, опубликованный масштаб и смысл проверки архива. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Установка одной командой или сбор через GitHub Actions. Сценарии расследования, опубликованный масштаб и смысл проверки архива. TgWitness — открытый инструмент экспорта Telegram и работы с расследованиями. Установите его одной командой, подключите аккаунт, выберите переписку и получите подписанный архив. Также доступны временный сбор через GitHub Actions и длительные расследования с сохранением правок, наблюдений об удалении, поиском и отчётами. ## Начните со своей задачи | Ваша задача | Кратчайший путь | Результат | | --- | --- | --- | | Сохранить переписку или аккаунт | Установить, подключить аккаунт, выбрать область экспорта | Подписанный архив с выбранной историей, результатами сбора и материалами проверки | | Собрать данные на временном исполнителе | Запустить сбор через GitHub Actions, авторизовать новую сессию и выбрать область | Зашифрованный архив с данными о происхождении из рабочего процесса GitHub | | Следить за изменениями | Оставить наблюдение включённым для выбранных чатов | Сохранённые версии, уведомления об удалениях, вложения и сведения о покрытии | | Расследовать и передать выводы | Искать по архиву, использовать доску дела и настроить отчёт или копию для передачи | Выводы со ссылками на источники и проверяемый комплект для получателя | ### Установка одной командой Установщик включает Python и зависимости. Исходный код, Docker, провайдер ИИ и независимый свидетель — дополнительные варианты, а не обязательные условия запуска. Linux / macOS: ``` curl -fsSL https://get.destroy.tools/install.sh | bash ``` Windows, в PowerShell или командной строке: ``` powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "irm https://get.destroy.tools/install.ps1 | iex" ``` Откройте панель, подключите свой аккаунт Telegram и выберите область сбора. Сама установка сбор не запускает. [Руководство по установке](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/) объясняет локальный доступ, серверы, обновления и проверку загруженной сборки. Для временного исполнителя используйте [сбор через GitHub Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md). Нужны форк на GitHub, авторизация и пароль архива. Страница сбора объясняет эти шаги и ограничение времени сессии до запуска. Скачайте и сохраните полученный архив вместе с материалами для проверки. ## Дополнительные настройки по мере необходимости Для экспорта одного чата нужны аккаунт и выбранная область. Длительное наблюдение, несколько аккаунтов, прокси, правила загрузки вложений, оформление отчётов, доступ рецензентов, внешние метки времени и резервное хранение служат разным задачам расследования и передачи материалов. Настраивайте их, когда они нужны. Область сбора, разрешения и копии с сокращённым набором данных помогают выбирать, что собирать и передавать. Подсказки по юрисдикциям и настройки отчётов поддерживают это решение; выбор профиля сам по себе не устанавливает соответствие закону или допустимость доказательств. См. [экспорт аккаунта](https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/), [доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) и [настройку отчётов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/). Приложение работает на выбранном компьютере или сервере. Для обычного сбора не нужны GPU или LLM. Дополнительные OCR, транскрибация и ИИ-анализ имеют собственные требования к ресурсам. Выбирайте конфигурацию по потоку сообщений, вложениям, объёму истории и числу одновременно работающих аккаунтов; простая установка не означает одинаковый расход памяти при любой нагрузке. ## Сохранять материал независимо от того, кому он выгоден Цель — сохранять наблюдаемый материал, контекст и изменения независимо от того, чью позицию они поддерживают. Доказательства могут противоречить версии самого сборщика. Источники, пробелы покрытия и аналитические выводы должны оставаться различимыми, чтобы другой человек мог оценить тот же материал. Логика работы: наблюдение доступных аккаунту данных → подписанный журнал → экспорт → проверка получателем. Правки добавляют версии. Наблюдения об удалении сохраняют ранее полученное содержимое. Записи покрытия показывают известные перерывы. Отчёты и ИИ-анализ ссылаются на сохранённые источники; интерпретация не становится исходным наблюдением только потому, что включена в подписанный отчёт. | Проверка | Что может установить получатель | | --- | --- | | Хеши файлов, подписи и цепочка журнала | Переданные записи и файлы согласуются с ожидаемым ключом и границей журнала | | Отдельно сохранённая контрольная точка или свидетель | Архив согласуется с ранее сохранённым состоянием журнала | | Проверенная внешняя метка времени | Указанные байты существовали к этому времени при заявленных предпосылках доверия | | Аттестация сбора на GitHub | Архив соответствует одобренному рабочему процессу, ревизии сборщика и записанному хешу | Эти проверки помогают оценить целостность и происхождение. Они не превращают содержимое сообщения в истинное утверждение и не восстанавливают удалённые сообщения, которые никто не успел сохранить. Используйте независимо полученный отпечаток ключа и шаги из [руководства по доверию](https://github.com/phishdestroy/TgWitness/blob/main/docs/TRUST.md) и [описания формата доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/). ## Опубликованный масштаб и измеренная производительность Ниже приведены результаты разных нагрузок и дат. Счётчики не взаимозаменяемы: событие журнала не обязательно является уникальным сообщением Telegram. | Дата | Нагрузка | Опубликованный результат | Что измерялось | | --- | --- | --- | --- | | 1 ноября 2026 | Работающий сервер, десять баз рабочих пространств | 1 610 818 записей журнала; 900 232 события новых сообщений, 80 683 правки и 400 536 событий удаления | Подсчёт в режиме чтения; без замера скорости и повторной проверки всей цепочки | | 5 ноября 2026 | Поиск по 1 000 000 синтетических сообщений в 200 чатах | Индекс построен за 71 секунду; медианное время отдельных поисковых запросов — 9–190 мс | Локальный тест поиска, не доставки из Telegram | | 6 ноября 2026 | Два новых экспорта из настоящего Telegram | 27 030 и 29 299 сообщений; всего 56 329 за два запуска | По два аккаунта через WARP, текст и метаданные, без загрузки вложений | | 6 ноября 2026 | Те же два экспорта с подготовкой и упаковкой | 127,713 и 141,781 сообщения в секунду | Полная скорость экспорта; оба архива проверены по заранее закреплённым ключам | [Протокол проверок](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) содержит подсчёт на сервере, проверки живого сбора и замер поиска. [Производительность экспорта](https://phishdestroy.github.io/TgWitness/docs/validation/) публикует два реальных запуска, оборудование, длительность, хеши архивов и подписанные файлы измерений. Эти результаты относятся к указанным ревизиям и условиям, а не устанавливают универсальную скорость или предел ёмкости. ### История и длительность тестирования По сообщению автора проекта на 6 ноября 2026 года тестирование продолжается более шести месяцев. Это история тестирования проекта. Датированные публичные замеры выше описывают отдельные запуски; они не подтверждают независимо проверенный непрерывный сбор в течение шести месяцев. Возраст сообщений в экспорте также отличается от времени работы сборщика. ## Точно читать статус возможностей Оценивайте каждый сценарий по реализации, опубликованной сборке и результатам проверок. Текущий исходный код обозначен как preview. Этот статус версии сосуществует с работающим сбором, экспортами, независимой проверкой и опубликованными измерениями масштаба. В одном приложении могут быть новая предварительная функция и проверенный сценарий; называйте конкретную возможность и факты, на которых основана оценка. Читайте вместе [текущие возможности](https://github.com/phishdestroy/TgWitness/blob/main/docs/STATUS.md), [функции и ограничения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/), [проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) и [историю изменений](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/). При ссылке на результат указывайте проверенную ревизию. Снимок измерений от 6 ноября также сохраняет неудачные и пропущенные тесты; они не считаются успешными. ## Документация для людей и ИИ Сайт предоставляет краткий `llms.txt`, полный английский справочник в `llms-full.txt` и `llms-full.md`, а также Markdown-версии страниц. Это форматы документации; для работы TgWitness ИИ не требуется. Дополнительные [MCP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/) и [командная строка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/) позволяют авторизованным инструментам читать выбранные сохранённые записи. Текст сообщений остаётся недоверенным входом. Сводки должны ссылаться на источники, отделять наблюдаемые факты от предположений и сохранять неопределённость. Полнотекстовый поиск, OCR и вывод ИИ не изменяют исходные подписанные наблюдения. --- # Установка TgWitness: Windows, Linux, macOS и Docker Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/ Все способы установки и запуска TgWitness: пакет для Windows, Python, Docker и синтетическая демонстрационная версия с первыми проверками. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Все способы установки и запуска TgWitness: пакет для Windows, Python, Docker и синтетическая демонстрационная версия с первыми проверками. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) **Английский язык** · [Русский](https://github.com/phishdestroy/TgWitness/blob/main/docs/ru/QUICKSTART.md) · [Украинский](https://github.com/phishdestroy/TgWitness/blob/main/docs/uk/QUICKSTART.md) · [Español](https://github.com/phishdestroy/TgWitness/blob/main/docs/es/QUICKSTART.md) · [Португальский (Бразилия)](https://github.com/phishdestroy/TgWitness/blob/main/docs/pt/QUICKSTART.md) · [Türkçe](https://github.com/phishdestroy/TgWitness/blob/main/docs/tr/QUICKSTART.md) · [العربية](https://github.com/phishdestroy/TgWitness/blob/main/docs/ar/QUICKSTART.md) · [Фарси](https://github.com/phishdestroy/TgWitness/blob/main/docs/fa/QUICKSTART.md) · [Урду](https://github.com/phishdestroy/TgWitness/blob/main/docs/ur/QUICKSTART.md) · [Хинди](https://github.com/phishdestroy/TgWitness/blob/main/docs/hi/QUICKSTART.md) · [Индонезийский язык](https://github.com/phishdestroy/TgWitness/blob/main/docs/id/QUICKSTART.md) · [Tiếng Việt](https://github.com/phishdestroy/TgWitness/blob/main/docs/vi/QUICKSTART.md) · [Упрощённый китайский](https://github.com/phishdestroy/TgWitness/blob/main/docs/zh/QUICKSTART.md) TgWitness — это автономное приложение для мониторинга групп и каналов Telegram, доступ к которым имеют ваши учетные записи. Оно работает локально с собственным каталогом данных. **Впервые на сайте?** [Ознакомьтесь с демо-версией,](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/#explore-the-interface) прежде чем подключить учётную запись. [Выберите руководство](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) по прокси-серверам, свидетелям, экспорту данных или настройке сервера. ## Установка и запуск [Выгрузка через GitHub Actions (предварительная версия)](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md) Выберите один из способов. Портативные версии для скачивания становятся доступны после публикации релизной сборки: | Хостинг | Ничего не установлено | Из исходного текста: Python 3.11+ | Docker: Engine/Desktop с Compose версии 2.20 и выше | | --- | --- | --- | --- | | Windows | Извлеките файл «`TgWitness--windows-amd64-portable.zip`» из релизов GitHub, дважды щелкните по файлу «`TgWitness.cmd`» | Дважды щелкните по ссылке `Start.cmd` | Дважды щелкните по ссылке `scripts\Docker.cmd` | | Linux / macOS | — | `sh start.sh` | `sh scripts/docker-start.sh` | Для запуска из исходного кода [скачайте и распакуйте текущую ветку `main`](https://github.com/phishdestroy/TgWitness/archive/refs/heads/main.zip) или клонируйте репозиторий: ``` git clone https://github.com/phishdestroy/TgWitness.git cd TgWitness ``` `Start.cmd` предложит установить Python 3.12 для вашего пользователя Windows, если подходящая версия Python не найдена (через winget или подписанный установщик с python.org). `start.sh` выведет точную команду установки для вашего дистрибутива Linux или macOS, если Python отсутствует. При первом запуске из исходного кода автоматически создается `.venv` и устанавливаются зависимости. Docker собирает приложение и запускает его в фоновом режиме; установка Python на хосте не требуется. Команды «`scripts\Docker.cmd`» и «`scripts/docker-start.sh`» выводят адрес панели и токен, когда контейнер находится в рабочем состоянии. Соответствующие команды Docker для всех поддерживаемых хостов: ``` docker compose up -d --build --wait docker compose exec tgwitness cat /data/panel-token.txt ``` Откройте страницу **http://127.0.0.1:8787**. Используйте токен, выведенный программой-помощником Docker или второй командой Docker, либо просмотрите **файл data/live/panel-token.txt** для переносимой или исходной установки. Продолжите на этапе **«Подключение к Telegram»** ниже. Нативные установки и установки через Docker используют отдельные хранилища; запуск Docker не приводит к импорту существующего нативного журнала. Что касается сервера, [развёртывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) включает автоматическую настройку HTTPS, перезапуск, размещение изображений, обновления и резервное копирование. ## Ознакомьтесь с интерфейсом 1. Запустите **файл `TgWitness-Demo.cmd`** в портативном пакете, файл **`scripts\Demo.cmd`** в исходной папке Windows или файл ``sh start.sh --demo` ` в Linux/macOS. При запуске из исходного кода сначала создаётся файл ``.venv` ` и устанавливаются зависимости. 2. Откройте страницу **http://127.0.0.1:8787**. 3. Локальная демо-версия автоматически открывает пример журнала. Для прямого локального доступа не требуется ввод токена. Демонстрационные сообщения являются вымышленными. В демонстрационном режиме невозможно подключить реальный аккаунт Telegram. ## Подключить Telegram > [!ПРЕДУПРЕЖДЕНИЕ] **Не используйте то, что вы не можете позволить себе потерять.** Мы настоятельно не рекомендуем подключать личные или ценные аккаунты, а также создавать API-идентификатор или хэш на аккаунте, который для вас важен. Telegram блокирует аккаунты непредсказуемо и зачастую навсегда, независимо от используемого клиента. Бесперебойное тестирование зависит от Telegram, а не от TgWitness, и не гарантирует ничего в дальнейшем. 1. Если запущена встроенная демонстрационная версия, остановите её и запустите **файл Start.cmd** или `sh start.sh`. В противном случае оставьте запущенной установку, созданную выше. 2. Используйте токен панели, соответствующий вашему способу установки, чтобы открыть панель. 3. Если вам требуется прокси-сервер, сохраните его в разделе **«Аккаунт» → «Настройки» → «Настройки подключения» → «Изменить маршрут подключения**». 4. В разделе **«Учётная запись**» введите свой номер телефона и нажмите **«Продолжить**», выберите **«QR-код» → «Показать QR-код**» или выберите файлы и нажмите **«Подключить учётную запись**». Указание **«API ID + Hash»** не является обязательным: рабочая область использует сохранённую или импортированную пару, либо рабочую пару из встроенного пула. Чтобы использовать собственное приложение, вставьте одну пару `API ID:API Hash` в поле «API ID». Для получения полного ключа авторизации выберите **«Ключ авторизации**», вставьте все 512 шестнадцатеричных символов и выберите предоставленный DC ID. Идентификатор пользователя является необязательным полем и проверяется при вводе. 5. Завершите выбранный вами способ входа: по телефону/коду/двухфакторной аутентификации (2FA), подтверждение из приложения Telegram с авторизованной учётной записью для сканирования QR-кода или импорт поддерживаемой авторизованной сессии. 6. Проверьте отображаемый идентификатор учётной записи. Открытые **источники**: ваши чаты загружаются автоматически; добавьте свои группы. 7. В разделе **«Выберите**, **какие изменения сохранять»** выберите категории событий или предустановку **«Сообщения, правки и удаления»**, а затем сохраните настройки мониторинга. 8. Выберите настройки вложений отдельно, затем нажмите **«Начать наблюдение**». Учетные данные API идентифицируют ваше приложение; сами по себе они не предоставляют авторизацию учетной записи. Для закрытых групп не требуется публичное имя пользователя, однако ваша учетная запись должна иметь доступ к ним. Для существующих аккаунтов см. [аккаунты и форматы сессий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/): панель принимает Telethon StringSession, SQLite от Telethon/Pyrogram, ZIP-архивы TData для одного аккаунта и поддерживаемые JSON-файлы аккаунтов. Выберите файл сессии вместе с сопутствующим JSON-файлом и нажмите **Подключить аккаунт**. Вход по QR-коду также доступен с теми же необязательными настройками API. Сессии TDLib, ботов, а также реестры аккаунтов в форматах CSV/JSON не поддерживаются. Для добавления нескольких аккаунтов используйте **Аккаунты → Импорт учетных записей** и выберите поддерживаемые файлы сессий. Сопутствующие JSON-файлы сопоставляются по базовому имени файла; каждый импортированный аккаунт получает собственное рабочее пространство. См. [массовый импорт и группы аккаунтов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#bulk-import-and-account-groups). Чтобы добавить ещё одну учётную запись, нажмите **кнопку «+»** рядом с выбором учётной записи или откройте **«Учётные записи» → «Настройки» → «Настройки подключения» → «Рабочие пространства»**, либо воспользуйтесь **разделом «Учётные записи**». Рабочие пространства имеют отдельные сессии, журналы, ключи, источники и очереди. При переключении между видами остальные сборщики данных продолжают работать. Одна и та же учётная запись Telegram не может быть назначена двум рабочим пространствам в данной установке. Фиксированного количества рабочих пространств нет; они используют один процесс, поэтому их пропускная способность зависит от мощности компьютера. Токен панели в режиме реального времени защищает доступ к вашим авторизациям в Telegram и сохраненным материалам; он не связан с учетными данными API Telegram. Автоматическая регистрация происходит только для явно запущенной локальной демонстрационной версии, к которой осуществляется прямой доступ. Удаленная или прокси-версия по-прежнему использует `data/demo/panel-token.txt`. ## Просмотр и экспорт - **Журнал:** поиск и фильтрация записей по источнику и типу события. - Выберите событие, чтобы просмотреть его исходную запись, информацию об авторе и сохраненные версии. - В сведениях о редактировании отображается доступное содержание до и после изменения. В сведениях об удалении отображается последнее зафиксированное содержание, если таковое имеется; неизвестный участник остается неизвестным. - **Форматы экспорта:** подписанные файлы ZIP, JSONL, CSV и автономный HTML. - **Полный экспорт чата** (Источники → Полный экспорт чата): загрузите всю видимую историю одного чата в виде подписанного пакета с `chat.json` (в стиле Telegram-export) и читаемого `chat.html`. Чаты с ограниченным доступом доступны, если учетная запись является участником. Это текущий моментальный снимок, а не реконструкция удаленных или ранее отредактированных сообщений. Проверьте копию с помощью `python verify.py chat-export.zip --fingerprint TRUSTED_SHA256`. - **Контрольная точка сохранения:** граница подписанного журнала должна находиться за пределами сборщика данных. - **Скачать подписанную квитанцию о запуске:** сохраните запись о программе и версии сборщика. - **Подготовка запроса на получение временной метки:** подготовьте автономный запрос к сервису выдачи временных меток; следуйте инструкциям в файле [TIMESTAMP.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/) для получения и проверки ответа. - **Проверка журнала:** проверьте подписи событий и звенья цепочки. При экспорте в формат ZIP также проверяются мультимедийные файлы. Поддерживаемые браузеры сохраняют объёмные экспортированные данные непосредственно в выбранный файл. Другие браузеры буферизуют не более 128 MiB. При работающем сервере интерфейс командной строки (CLI) для потоковой передачи данных поддерживает загрузку более объёмных файлов без буферизации всего ответа: ``` python -m tgwitness.download --token-file data/live/panel-token.txt --out evidence.zip ``` Для другого рабочего пространства добавьте `--profile ID`, воспользовавшись меню **«Экспорт» → «Идентификатор рабочего пространства**». Для удалённого сервера добавьте `--url https://your-server`. По умолчанию лимит передачи данных составляет 5 ГиБ; `--max-mib` позволяет изменить его. Для подписанного ZIP-содержимого по умолчанию установлен отдельный лимит проверки в 4 ГиБ в несжатом виде (**параметры** позволяют его увеличить; проверку таких архивов осуществляйте с помощью `verify.py --max-gib N`). Проверьте архив с помощью надёжной копии программы проверки и независимо сохраненного отпечатка ключа/контрольной точки. ## Ознакомьтесь с инструкцией по установке ``` python start.py --setup-only python start.py --check python start.py --check --json ``` `--check` проверяет локальные зависимости, поддержку подписи, хранилище, настройки ключей и адрес прослушивания. Он ничего не устанавливает и не подключается к Telegram. Занятый порт может означать, что запущен другой экземпляр. Используйте другой `--port` или сначала остановите его. Программа запуска устанавливается в папку «`.venv`». Вспомогательные команды «`python -m tgwitness...`» должны использовать «`.venv\Scripts\python.exe`» в Windows или «`.venv/bin/python`» в Linux/macOS, если данная среда ещё не активирована. ## Сеансы, защита и эксплуатация Закрытый, согласованный файл Telethon в формате SQLite `.session` можно преобразовать локально с помощью `python -m tgwitness.sessions account.session --out account.tgwitness-session`, а затем загрузить в Account. Также доступны прямой импорт файлов и вход с помощью QR-кода. См. [файл CONNECTION-SECURITY.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) для ознакомления с форматами входа, SOCKS5, HTTP CONNECT, MTProxy и внешними мастер-ключами. **Приостановка наблюдения** останавливает сбор данных. **Блокировка** закрывает доступ только через браузер. Закрытие вкладки не останавливает процесс сбора данных. Остановка процесса прерывает сбор данных; моментальный снимок истории не позволяет восстановить все пропущенные изменения или удаления. Ознакомьтесь [с принципами работы сбора данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) в отношении политик событий, очередей вложений, изоляции учетных записей и поведения при перезапуске. Сеансы и секретные данные зашифрованы. Для хранения содержимого сообщений, мультимедиа и экспортированных данных требуется зашифрованный диск или том. Подписи подтверждают целостность данных относительно доверенного ключа; они не подтверждают происхождение из Telegram и не предотвращают фальсификацию со стороны оператора, который контролирует сборщик данных и его ключ. Ознакомьтесь с [файлом OPERATIONS.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/) для получения информации о резервном копировании и восстановлении, с [файлом DEPLOYMENT.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) — о размещении, а также с [каталогом deploy/](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md) для примеров использования сервиса. Установленная панель управления также содержит руководство по автономной настройке по адресу `/guide.html`. Фактические результаты проверки и существующие ограничения изложены в файлах [VERIFICATION.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) и [READINESS.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/READINESS.md). --- # Установка, проверка подписи и обновление TgWitness Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/ Установите с помощью одной команды, проверьте подписи и хеши, обновите и удалите установку. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Translation coverage: this edition includes material from the English original. Установите с помощью одной команды, проверьте подписи и хеши, обновите и удалите установку. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Начало работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) [Проект](https://github.com/phishdestroy/TgWitness/blob/main/README.md) · [Быстрый старт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) · [Развертывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) **На этой странице** - [Установка одной командой](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#install-with-one-command) - [Где всё работает](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#where-everything-runs) - [Настройки полнотекстового поиска](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#full-text-search-settings) - [Доступ через командную строку](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#command-line-access) - [Проверить перед запуском](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#verify-before-running) - [Обновление существующей установки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#update-an-existing-installation) - [Повседневные команды в Ubuntu](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#everyday-commands-on-ubuntu) - [Удалить TgWitness](https://phishdestroy.github.io/TgWitness/ru/docs/reference/installation/#remove-tgwitness) ## Установка одной командой Установщик с пошаговыми инструкциями включает в себя частную среду выполнения Python. Используйте тот же адрес для будущих установок: каждая публикация обновляет установщик, хеши, подписи и информацию о сборке. **Linux / macOS (Bash):** ``` curl -fsSL https://get.destroy.tools/install.sh | bash ``` На сервере Ubuntu запустите программу от имени root, чтобы установить фоновый сервис. На настольном компьютере запустите программу от имени обычного пользователя. **Windows (PowerShell или командная строка):** ``` powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "irm https://get.destroy.tools/install.ps1 | iex" ``` В Windows администраторские права не требуются. Дочерний процесс PowerShell оставляет ваш терминал открытым с результатом. Python и зависимости остаются в папке установки. В Ubuntu выберите **«Этот компьютер**», **«Временная ссылка HTTPS**» или **«Собственный домен**». Установщик выводит адрес панели и ключ доступа. Для получения временной ссылки откройте этот HTTPS-адрес в браузере и введите ключ. При локальном доступе к удалённому серверу используйте перенаправление SSH с вашего компьютера (`ssh -L 8787:127.0.0.1:8787 user@server`) и откройте `http://127.0.0.1:8787`. В macOS и Windows локальная панель открывается в вашем браузере; оставьте терминал запущенным. Войдите в Telegram на панели и выберите, что собирать. Сама по себе установка не запускает сбор данных из Telegram. ## Где всё работает `get.destroy.tools` — это **Cloudflare Worker, обслуживающий статические загрузки**. У него нет панели TgWitness, сеанса Telegram или базы данных с данными о пользователях. Он не маршрутизируется на VPS проекта. Приложение работает на том компьютере, на котором вы выполняете команду. | Установка | Программа | Данные | | --- | --- | --- | | Ubuntu с правами root | `/opt/tgwitness` | Системная служба: `/var/lib/tgwitness-`; используйте `tgwitness paths` для указания точного пути. | | Пользователь Linux / macOS | `~/.local/share/tgwitness` | `data/live` в рамках данной установки. | | Пользователь Windows | `%LOCALAPPDATA%\TgWitness` | `data\live` в рамках данной установки. | Нажмите `TGWITNESS_INSTALL_DIR` , чтобы выбрать другую папку. Установленные версии и данные хранятся отдельно. Установщик не загружает ваши аккаунты, сообщения или ключи на сайт загрузки. При выборе туннеля Cloudflare трафик панели проходит через Cloudflare; использование собственного домена направляет трафик на ваш собственный сервер. With `TGWITNESS_TRUSTED_PROXIES`, the panel accepts a single `X-Forwarded-Proto: https` from a trusted proxy to set Secure download cookies. Каждая установка включает **файлы START-HERE.html** и **START-HERE.txt** с указанием локальных путей, команд и ссылок на репозиторий. Запустите `tgwitness guide` , чтобы открыть руководство. В Windows используйте `& "$env:LOCALAPPDATA\TgWitness\bin\tgwitness.cmd" guide` в PowerShell. ## Настройки полнотекстового поиска [Полнотекстовый поиск](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/) (предварительная версия) не требует настройки. Его индекс создаётся в фоновом режиме после обновления. | Переменная или команда | Эффект | | --- | --- | | `TGWITNESS_FULLTEXT=disk` | По умолчанию: индекс хранится в `search/fulltext.sqlite3` каждого рабочего пространства | | `TGWITNESS_FULLTEXT=memory` | Файл индекса отсутствует; индекс перестраивается при каждом запуске | | `TGWITNESS_FULLTEXT=off` | Без индекса; только поиск по точному тексту | | `tgwitness index status` | Состояние индекса каждого рабочего пространства | | `tgwitness stop`, `tgwitness index rebuild`, `tgwitness start` | Перестроить все индексы из подписанного журнала | Выбор администратора в разделе **«Журнал» → «Фильтры» → «Индекс поиска»** переопределяет переменную для данного рабочего пространства. Команды находят каталог данных той установки, в которой они запускаются; в остальных случаях добавьте `--data-dir` путь из `tgwitness paths`. Для полного украинского словаря (данные по лицензии GPL-3.0) установите `pymorphy3-dicts-uk` в среду Python данной установки. ## Доступ через командную строку [Командная строка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/) (предварительная версия) считывает архив для скриптов и агентов. | Переменная | Эффект | | --- | --- | | `TGWITNESS_URL` | Адрес панели для `tgwitness search`, `context`, `messages`, `stats` и `export`; по умолчанию `http://127.0.0.1:8787` при наличии токена | | `TGWITNESS_MCP_TOKEN` | Архивируйте токен подключения из **раздела** **«Интеграции» → «MCP»**, который используется совместно с клиентами MCP; `--token-file` вместо этого считывает его из файла | | `TGWITNESS_DATA` | Каталог данных считывается напрямую, если не указан `--data-dir`, URL или токена | ## Проверьте перед запуском Однострочная команда доверяет HTTPS для запуска начального скрипта. Этот скрипт проверяет SHA-256, а также RSA-подпись проекта на приложении и ограничениях перед установкой. Вы также можете сначала скачать и проверить начальный скрипт. Публичный ключ выпуска — [release-signing.pub](https://github.com/phishdestroy/TgWitness/blob/main/deploy/installer/release-signing.pub). Его SHA-256: ``` 039d98a658ccda14253e45a00335b4a68d840976d8ec18b8d4355cc7c458447d ``` Сохраните этот отпечаток из ревизии репозитория, которой вы доверяете. Контрольная сумма с того же сервера загрузки позволяет обнаружить несоответствие; независимый доверенный открытый ключ служит для аутентификации подписи выпуска. Используйте новый пустой каталог для загрузки файлов, необходимых для проверки, указанных ниже. **Linux / macOS — запускайте в новом пустом каталоге для загрузок** (требуются curl и OpenSSL): ``` curl -fSLO https://get.destroy.tools/install.sh && curl -fSLO https://get.destroy.tools/install.sh.sig && curl -fSLO https://get.destroy.tools/release-signing.pub && test "$(openssl dgst -sha256 release-signing.pub | awk '{print $NF}')" = \ '039d98a658ccda14253e45a00335b4a68d840976d8ec18b8d4355cc7c458447d' && openssl dgst -sha256 -verify release-signing.pub -signature install.sh.sig install.sh && bash install.sh ``` Цепочка `&&` цепочка останавливается до выполнения, если загрузка, проверка отпечатка ключа или проверка подписи завершились неудачно. Если между загрузкой скрипта и проверкой его подписи произошла публикация, загрузите и то, и другое заново. Старые установщики сохраняют неизменяемые URL-адреса пакетов. **Windows — перед запуском проверьте изображение SHA-256:** ``` Invoke-WebRequest https://get.destroy.tools/install.ps1 -OutFile install.ps1 -UseBasicParsing Get-FileHash .\install.ps1 -Algorithm SHA256 Invoke-RestMethod https://get.destroy.tools/SHA256SUMS.txt ``` Сравните хеш со `install.ps1` строкой. Для независимой проверки подписи используйте OpenSSL (например, из Git Bash) и тот же отпечаток открытого ключа, что указан выше: ``` curl -fSLO https://get.destroy.tools/install.ps1 && curl -fSLO https://get.destroy.tools/install.ps1.sig && curl -fSLO https://get.destroy.tools/release-signing.pub && test "$(openssl dgst -sha256 release-signing.pub | awk '{print $NF}')" = \ '039d98a658ccda14253e45a00335b4a68d840976d8ec18b8d4355cc7c458447d' && openssl dgst -sha256 -verify release-signing.pub -signature install.ps1.sig install.ps1 && powershell.exe -NoProfile -ExecutionPolicy Bypass -File install.ps1 ``` Сама система Windows проверяет подписи пакетов с помощью .NET и не требует OpenSSL. Это отдельные подписи RSA-3072 / SHA-256, а не Authenticode. [Манифест](https://get.destroy.tools/manifest.json) содержит версию программного обеспечения, точный коммит Git, неизменяемый идентификатор выпуска и SHA-256 каждого артефакта. Страница содержит ссылку на соответствующий исходный код. Манифест и список контрольных сумм также имеют отдельные подписи (`manifest.json.sig` и `SHA256SUMS.txt.sig`). ## Обновление существующей установки **Новая публикация обновляет сайт загрузки; установленные программы обновляются при повторном запуске установщика.** Автоматического обновления или автоматического перезапуска работающей коллекции не предусмотрено. Текущий канал установщика — **«preview»**; он использует опубликованные и проверенные сборки из `main`, коммит которой может быть более поздним, чем последний пронумерованный релиз на GitHub. Версия страницы определяется `pyproject.toml`; её коммит и идентификатор сборки позволяют различать обновления в пределах одной и той же предварительной версии. Публикация происходит автоматически после того, как данная фиксация проходит проверку приложения и безопасности, а подписанный пакет проходит тесты на работу в среде Ubuntu и установку в Windows PowerShell. Во время выполнения проверок или в случае их сбоя те же команды продолжают устанавливать предыдущую проверенную сборку. Манифест сборки показывает, какая фиксация доступна в данный момент; сам номер версии может оставаться неизменным между обновлениями предварительной версии. Используйте ту же папку установки и того же пользователя ОС, что и ранее. Сделайте резервную копию всего каталога данных при остановленной сборе данных; `tgwitness paths` идентифицирует его. Подписанный экспорт не является полной резервной копией установки. **Установка с правами root в Ubuntu по адресу `/opt/tgwitness`:** ``` curl -fsSL https://get.destroy.tools/install.sh | TGWITNESS_INSTALL_DIR=/opt/tgwitness bash -s -- --no-start ``` После успешной установки: ``` /opt/tgwitness/bin/tgwitness restart /opt/tgwitness/bin/tgwitness status /opt/tgwitness/bin/tgwitness open ``` Для установки пользователем Linux/macOS используйте исходный файл `TGWITNESS_INSTALL_DIR` или значение по умолчанию и запустите первую команду установки ещё раз. Перед обновлением закройте панель, работающую в фоновом режиме, а после обновления запустите её снова. Для настроенной службы под Linux запустите соответствующую `tgwitness restart` команду. **Windows:** закройте запущенную панель, запустите команду установки для Windows ещё раз, затем откройте `bin\tgwitness.cmd` в той же установке. Установщик сохраняет данные, сессии, настройки доступа и ключи подписи. Он переключает лаунчер только после того, как новая среда пройдет проверки; в случае неудачной установки предыдущий лаунчер остаётся на месте. Сохраните резервную копию, созданную до обновления, на случай изменения формата хранения. ## Повседневные команды в Ubuntu | Команда | Результат | | --- | --- | | `tgwitness open` | Текущий URL панели и ключ доступа. | | `tgwitness paths` | Точные пути к программам, данным и руководствам. | | `tgwitness guide --print` | Инструкции по работе в автономном режиме. | | `tgwitness status` / `tgwitness logs` | Журналы доступности / обслуживания. | | `tgwitness stop` / `tgwitness start` | Остановить/возобновить работу сервиса; сохранить данные. | | `tgwitness token rotate` | Замените ключ администратора и завершите сеансы браузера. | | `tgwitness tunnel off` | Отключить общедоступный быстрый туннель; сохранить локальную панель. | | `tgwitness tunnel on` / `tgwitness tunnel restart` | Создать ссылку на быстрый туннель / заменить его адрес. | См. раздел [«Доступ»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) для получения информации о токенах коллег, сессиях и IP-ограничениях, а также раздел [«Публикация установщика»](https://github.com/phishdestroy/TgWitness/blob/main/deploy/installer/README.md#automatic-publication-from-github) для ознакомления с рабочим процессом выпуска из GitHub в Cloudflare. ## Удалить TgWitness Деинсталлятора нет: нужно остановить работу панели и удалить её папки. Удаление папки с данными приводит к безвозвратной потере журналов, ключей подписи, сеансов Telegram и сохраненных файлов. Перед этим: 1. Экспортируйте то, что вам нужно (**Экспорт → Скачать подписанный ZIP**), и храните отпечаток ключа подписи и контрольные точки за пределами этого компьютера. Чтобы сохранить само рабочее пространство, скопируйте всю папку с данными после остановки сбора данных. 2. Удалите серверы, созданные в **разделе «Дополнительно» → «Сервер 24/7»** из спи**ска «Ваши серверы»** или с помощью `python -m tgwitness.cloud destroy`; провайдер выставляет счета за них до тех пор, пока они не будут удалены. 3. Завершите сессию каждой учётной записи в Telegram в разделе **«Настройки» → «Устройства**». Удаление файлов не приводит к выходу из сессии на стороне Telegram. **Установка с правами root в Ubuntu.** Обратите внимание на папку с данными, остановите службу, а затем удалите службу, папки и ярлык: ``` /opt/tgwitness/bin/tgwitness paths /opt/tgwitness/bin/tgwitness stop systemctl list-unit-files 'tgwitness-*' systemctl disable tgwitness- rm /etc/systemd/system/tgwitness-.service systemctl daemon-reload rm -rf /opt/tgwitness /var/lib/tgwitness- /usr/local/bin/tgwitness ``` **Установка для пользователей Linux или macOS.** Закройте панель. Настроенная служба пользователя Linux останавливается с помощью `systemctl --user disable --now tgwitness-`; его модуль находится в `~/.config/systemd/user/`. Затем удалите `~/.local/share/tgwitness` (или ваш `TGWITNESS_INSTALL_DIR`) и `~/.local/bin/tgwitness` ярлык. **Windows.** Закройте панель и удалите `%LOCALAPPDATA%\TgWitness` (или ваш `TGWITNESS_INSTALL_DIR`). Установщик не добавляет ни служб, ни запланированных задач, ни ярлыков. --- # Настройка сбора Telegram и параметров TgWitness Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/ Мастер настройки, цели, уровни интерфейса, маршруты подключения и настройки, общие для группы аккаунтов. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Мастер настройки, цели, уровни интерфейса, маршруты подключения и настройки, общие для группы аккаунтов. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Начало работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) [Аккаунты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/) · [Связь](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) · [Доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) Новая рабочая область открывается `/first-run`: язык и время, уровень интерфейса, цель, подключение, Telegram и чаты. Каждый ответ сохраняется на сервере сразу же после его изменения, поэтому при перезагрузке процесс продолжается с того же шага. На последнем экране отображается список ответов, и вы можете вернуться к любому из них. Язык, часовой пояс IANA, тема и уровень сохраняются для каждого оператора и каждого рабочего пространства. По умолчанию используются язык браузера, часовой пояс устройства, системная тема и простой интерфейс. При смене языка настройки панели сохраняются. Время в подписанном журнале никогда не меняется. `/settings` редактирует те же записи, что и мастер. Поиск охватывает основные поля, параметры и расширенные формы; скрытое поле можно открыть без изменения уровня. Уровни влияют только на то, что отображается: сервер самостоятельно проверяет права доступа. Настройки коллекции и первое подключение принадлежат администратору рабочей области. | Уровень | Поля | Боковая панель | | --- | --- | --- | | Просто | Только самое необходимое | Главная, Чаты, Изменения, Архивы, Настройки | | Стандарт | Общие настройки с пояснениями | Добавлены разделы «Case Board», «Аккаунты» и «Доступ» | | Эксперт | Все поля, ограничения и технические детали | Добавлены разделы «Источники», «Дополнительные функции», «Запросить архив», «Параметры», «Аккаунт», «Системный журнал» и «Интеграции» | В [руководстве по панели](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/) описаны все разделы. ## Цели | Цель | Коллекция | Файлы | Внешние сервисы | Адрес сервера | | --- | --- | --- | --- | --- | | Архивная копия | Выключено; **«Запустить»** запускает экспорт | Фотографии размером до 20 МБ | Выключить | Автоматически | | Подписка на чаты | Непрерывный | Фотографии и видео продолжительностью до 60 секунд / размером до 20 МБ | Временные метки и уведомления о проблемах | Автоматически | | Доказательства | Непрерывный | Все файлы размером до 1 ГБ | Временные метки, drand, уведомления | Нет, скрыть | В качестве доказательств рекомендуется использовать внесерверную копию, бота-свидетеля и проверку кода. Для адресов хранилища и уведомлений сначала необходимо указать пункт назначения. Функция, взаимодействующая с внешним сервисом, запрашивает разрешение на отправку запросов за пределы Telegram; отключение этой функции предлагает одновременно отключить временные метки, уведомления и внесерверную копию. При изменении целевого значения сначала отображаются различия, а ручные изменения можно сохранить. Поле, отличающееся от целевого значения, помечается как **«Изменено вами»** и может быть восстановлено. Ревизия настроек предотвращает применение проверенного изменения поверх изменения, внесённого на другой вкладке. ## Связь **Automatic** сначала пробует подключиться к публичным серверам MTProxy, затем к WARP, а затем — к прямому соединению, причём последнее используется только в том случае, если адрес сервера может быть отображён. Automatic и WARP могут устанавливать компоненты с проверкой хешей и регистрировать сервер в Cloudflare. WARP использует существующий менеджер wgcf/wireproxy и локальный порт SOCKS5; таблица маршрутизации системы не изменяется. При необходимости использования внешних сервисов Automatic отдаёт предпочтение WARP перед MTProxy. Ваш собственный прокси принимает `tg://proxy`, `socks5://`, `http://` и `https://`. Сертификат HTTPS- прокси проверяется перед отправкой ему учетных данных. Проверка подключения действительна в течение пяти минут и привязана к маршруту, политике и ответам мастера; изменение любого из этих параметров требует новой проверки. Доступна опция **«Продолжить без проверки»**, которая не заменяет вход в Telegram. Выбранный маршрут перепроверяется в фоновом режиме, а функция «Автоматический» повторно запускает цепочку действий после потери соединения. Если ни один из общедоступных прокси не отвечает, индикатор становится красным, и запускаются действия WARP и повторная проверка. ## Группы аккаунтов Аккаунты в группе используют общие настройки. Откройте **«Аккаунты» → «Группы и общие настройки» → «Общие настройки**» или **«Настройки группы»** на странице «Настройки» аккаунта. Группа совместно использует цель, сохраненные файлы, временные метки, drand, уведомления о проблемах, внешнюю копию, запросы за пределами Telegram, IP-режим, параметры записи, график повторной проверки, правила уведомлений, настройки отчетов, параметры и маршрут подключения. Адреса для уведомлений, учетные данные прокси и данные для входа сохраняются для каждого аккаунта отдельно, так же как и запуск и приостановка сбора данных. - Каждый участник подписан на группу. В настройках можно выбрать значение 🔗 **из группы** или ✏️ **собственное значение**; **нажатие «Вернуть значение группы»** восстанавливает исходное значение. - При внесении изменения отображается список затронутых аккаунтов (**применимо к 2 из 3 аккаунтов**), и перед заменой собственного значения запрашивается подтверждение для каждого аккаунта. Аккаунты, галочка у которых снята, сохраняют свои значения. - Параметр, которым группа не делится, остаётся в состоянии **«Не поделиться»: каждый аккаунт сохраняет своё собственное значение,** пока вы не нажмёте **«Поделиться этим значением**». - **При копировании настроек из одной учётной записи** значения выбранной учётной записи становятся значениями для всей группы. - Аккаунту, перемещённому в группу, задаётся вопрос: **«Принять настройки группы?».** В противном случае он сохраняет свои собственные настройки, отмеченные значком ✏️. Аккаунты, добавленные позже, изначально используют настройки группы. - Учетная запись-наблюдатель сохраняет свой IP-режим до тех пор, пока не будет приостановлена. Каждое изменение фиксируется в подписанном журнале основного рабочего пространства и каждого участника, к которому оно доходит. При удалении группы её аккаунты и их текущие значения сохраняются. Страница группы `/groups/` отображает участников, задачи, требующие внимания, и чаты, доступные нескольким аккаунтам. См. раздел [«Группы аккаунтов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#bulk-import-and-account-groups)». ## Существующие рабочие пространства В рабочей области, содержащей сессию или ранее завершённую настройку, мастер не отображается. Её значения не заменяются целью при загрузке страницы. Скрытие поля не отключает эту функцию и не удаляет её значение. Оценка объёма и времени учитывает до трёх выбранных чатов и до 20 сообщений из каждого. Это приблизительная оценка: она не учитывает ограничения Telegram, скорость конкретного сервера или файлы в каждом чате. --- # Сессии Telegram: TData, Telethon и способы импорта Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/ Войдите в систему с помощью телефона, QR-кода или ключа аутентификации, импортируйте сеансы из Telethon, Pyrogram или Telegram Desktop и управляйте несколькими учётными записями. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Войдите в систему с помощью телефона, QR-кода или ключа аутентификации, импортируйте сеансы из Telethon, Pyrogram или Telegram Desktop и управляйте несколькими учётными записями. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Начало работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) TgWitness входит в систему как учетная **запись пользователя Telegram** (а не как бот) через протокол MTProto с использованием Telethon. Каждая учетная запись находится в собственном **рабочем пространстве** (называемом *«workspace»* в API и инструментах командной строки) с собственной сессией, источниками, журналом и ключом подписи. Файлы сеансов, строки сеансов и ключи аутентификации являются **средствами авторизации учетной записи**: любой, кто имеет один из них, может действовать от имени этой учетной записи. Они не содержат истории сообщений. > [!ПРЕДУПРЕЖДЕНИЕ] **Не используйте то, что вы не можете себе позволить потерять.** Мы настоятельно не рекомендуем подключать личные или иные ценные учетные записи, а также создавать API-идентификатор / API-хэш на учетной записи, которая для вас важна. Дело не в том, что TgWitness не прошел тестирование: Telegram неожиданно ограничивает доступ и навсегда блокирует аккаунты — при объёме запросов, который он считает чрезмерным, независимо от клиента или цели, без надлежащей документации. Многие блокировки неподдаются отмене. Используйте специальные аккаунты. Бесперебойное проведение тестов зависит от Telegram, а не от программного обеспечения, и не гарантирует ничего на будущее. - [Краткий обзор](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#at-a-glance) - [Прежде чем начать: идентификатор API и хеш API](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#before-you-start-api-id-and-api-hash) - [Номер телефона](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#phone-number) · [QR-код](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#qr-code) · [Ключ аутентификации + идентификатор DC](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#auth-key--dc-id) - [Файлы учетных записей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#account-files): [Telethon .session](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#telethon-session) · [Pyrogram .session](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#pyrogram-session) · [Пара «сессия + JSON»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#session--json-pair) · [TData](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#telegram-desktop-tdata) · [StringSession](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#telethon-stringsession) · [JSON-файл учетной записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#account-json) - [Определите, чем вы располагаете](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#identify-what-you-have) · [Неподдерживаемые форматы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#unsupported-formats) - [Наличие нескольких учётных записей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#multiple-accounts) · [Обеспечение безопасности файлов учетных записей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#keeping-account-files-safe) · [Устранение неполадок](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#troubleshooting) ## Краткий обзор | Что у вас есть | Вкладка **«Добавить аккаунт**» | Вам также понадобятся | | --- | --- | --- | | Номер телефона и доступ к кодам входа в систему | **Телефон** | Пароль двухфакторной аутентификации (2FA), если она включена | | Telegram открыт на другом устройстве | **QR-код** | Пароль двухфакторной аутентификации (2FA), если она включена | | Файл `.session` (Telethon или Pyrogram) | **Файлы** | Дополнительный файл JSON с настройками приложения | | `.session` + `.json` с одинаковым названием | **Файлы** (выберите оба) | Обычно ничего больше | | Папка «`tdata`» в Telegram Desktop | **Файлы** (в формате ZIP) | Локальный пароль для настольной версии, если он установлен | | StringSession Telethon (текст, `.txt`, `.tgwitness-session`) | **Файлы** | Отдельная пара API не требуется | | `.json` с сессией или ключом аутентификации | **Файлы** | Отдельная пара API не требуется | | Ключ аутентификации (512 шестнадцатеричных символов) и его номер DC | **Ключ аутентификации** | Необязательный идентификатор пользователя | TgWitness распознает файлы по их **содержимому**, а не по именам. Переименование файла никогда не приводит к его преобразованию. ## Прежде чем начать: идентификатор API и хеш API Вы можете войти в систему без создания приложения Telegram API. Если пара не введена, не импортирована или не сохранена в рабочей области, TgWitness выбирает пару из встроенного пула 50 публичных пар API (`tgwitness/api_pool.py`), отдавая предпочтение Telegram Desktop для нового входа и в первую очередь используя сохраненную пару; остальные кандидаты перемешиваются. Если Telegram отклоняет пару (`API_ID_INVALID`, `API_ID_PUBLISHED_FLOOD`, `UPDATE_APP_TO_LOGIN`), пробуется следующая, до восьми на один вход в систему; отклоненные пары пропускаются до перезапуска. Пара, с помощью которой был осуществлен вход, сохраняется вместе с учётной записью и повторно используется для неё. Идентификатор **API** и хеш **API** идентифицируют приложение в Telegram; они сами по себе не авторизуют учётную запись. В отсутствующих полях подключения используется детерминированная пара устройство/ОС из входящих в комплект каталогов [opentele2 2.0.0](https://github.com/DedInc/opentele2/tree/7e973bc71cd7a714ad13ac703c0895a90d36a735): Desktop `2040`, Android `6`, Android X `21724`, iOS `10840`, macOS `2834` и Web `2496`. Идентификатор сборки исходного кода Android `4` также использует каталог Android, как указано в [BuildVars Telegram для Android](https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java). Для Web по умолчанию используется A; импортированный суффикс версии приложения `K` или языковой пакет `macos` выбирает K, а версия `0.7.0` выбирает Webogram. Неизвестные идентификаторы приложений сохраняют значения по умолчанию хоста Telethon. Импортированные поля всегда имеют приоритет, включая более старую версию приложения и пустой языковой пакет. Каталог никогда не изменяет ID/хэш API. Его моментальный снимок версии проверяется явно, а не извлекается во время входа в систему. Сохраненный профиль остается неизменным после обновлений. `account.getAuthorizations` сообщает о сохраненных метаданных авторизации Telegram; это не повторение каждого нового `initConnection`. Сравните его с фактически отправленным профилем. Подключение существующей авторизации не проверяет соответствующий хеш API: `initConnection` отправляет ID API, тогда как хеш используется в запросах на вход. После авторизации с нового телефона или по QR-коду TgWitness запрашивает настройки, ближайший дата-центр, статус подключения, языки (если языковой пакет не пуст), обновления приложения и обновления условий предоставления услуг с интервалом 0.3–1.5 секунд между запросами. Обновление статуса на короткое время помечает аккаунт как онлайн. Эта последовательность запускается один раз по завершении входа в систему, а не при импорте данных, повторном подключении или перезапуске. Авторизация сохраняется в первую очередь; неудачный запрос останавливает последовательность без повторных попыток или отмены входа. Результаты записываются как `account.initialized` с указанием названий ошибок, а не телами ответов. Эта последовательность не является гарантией отсутствия ограничений для учетной записи. Для `tdesktop` при отсутствии `tz_offset` используется локальное смещение UTC сервера, округлённое до 900 секунд с помощью алгоритма [opentele2](https://github.com/DedInc/opentele2/blob/7e973bc71cd7a714ad13ac703c0895a90d36a735/crates/opentele2-core/src/fingerprint.rs) (MIT; лицензия в `tgwitness/client_profiles.LICENSE` ). Оно обновляется при каждом подключении, чтобы учитывать изменения, связанные с переходом на летнее время. Импортированное значение `tz_offset` имеет приоритет на любой платформе и сохраняется в точности, включая ноль. Остальные записи `initConnection.params` сохраняются. Форма входа по HTTP принимает числовое значение часового пояса, возвращаемое при импорте файла; булевы значения, дроби и смещения, выходящие за пределы поддерживаемого диапазона, отклоняются. Прямые, SOCKS5 и HTTP CONNECT маршруты используют `ConnectionTcpObfuscated` от Telethon (зашифрованный сокращённый MTProto). HTTPS CONNECT сохраняет TLS до прокси и использует тот же запутывающий транспорт внутри туннеля. MTProxy сохраняет требуемый рандомизированный промежуточный транспорт и обработку секретных данных. Переключение маршрутов применяет те же варианты. Запутывание изменяет структуру пакетов; оно не скрывает аккаунт или метаданные его клиента от Telegram и не подразумевает иммунитет к ограничениям. После подключения авторизованного клиента TgWitness проверяет конфигурацию, ближайший дата-центр, текущую авторизацию, базовые настройки проверенного уровня, языки, обновления приложения и обновления условий предоставления услуг. Эти диагностические проверки выполняются один раз для каждого экземпляра клиента, до начала сбора данных, и отображаются в деталях подключения с указанием времени. `account.connection_checked` записывает результат без хешей сеанса, IP-адресов, токенов или хешей API. Он никогда не принимает условия и не устанавливает обновления. Сбой запроса или состояние FloodWait останавливают последующие запросы; отсутствующий результат остаётся неизвестным. Локальные проверки по-прежнему могут сообщать о своих результатах, в то время как сетевые проверки пропускаются. Диагностика FloodWait сохраняет в `telegram.backoff` неудавшийся метод TL, любые обертки Takeout/range, запрошенное сервером время ожидания и фактический крайний срок. Сведения о соединении показывают метод и крайний срок, пока запросы приостановлены. Диагностика включает счетчики вызовов клиента по каждому методу с момента создания данного клиента; они отдельно учитывают вложенное разрешение узлов, но не учитывают пакеты или внутренние попытки повторного вызова Telethon. Текущие счетчики также доступны как `collector.rpc_activity` в API состояния. Аргументы запроса, имена пользователей, хэши доступа или текст исключений не включаются. Последняя диагностика и полный крайний срок сохраняются после перезапуска. Более ранние ожидания без записи о методе не могут быть отнесены к конкретному методу задним числом. См. [: ограничения экспорта](https://github.com/phishdestroy/TgWitness/blob/main/docs/EXPORT-LIMITS.md) для проверки исходного кода и различия между обнаружением и сбором истории. `official_app=True` или `False` — это флаг текущей авторизации в Telegram. Ни одно из этих значений не определяет, является ли аккаунт ограниченным, доверенным или находится под наблюдением. Существующие снимки `account.devices` в режиме сбора доказательств по-прежнему содержат историю всех подключённых устройств; диагностика подключения сохраняет только описание текущего устройства. Перед подключением в рамках консультативных проверок сравниваются платформа API, языковой пакет, форматы устройства/ОС и версии приложения, локаль мобильной системы, а также фактический уровень схемы Telethon с базовыми данными проверенного каталога. Предупреждения появляются в журнале сервера и метаданных статуса аккаунта; они никогда не заменяют импортированные значения и не изменяют уровень схемы. Отличие на уровне — это сигнал о проверке совместимости, а не доказательство нарушенного или ограниченного аккаунта. Эти проверки и код ошибки `official_app` не подтверждают, что Telegram считает аккаунт защищённым от ограничений. Статус Отключённый аккаунт использует сохраненный профиль вместо генерации нового описания устройства. Если вы предпочитаете использовать собственное приложение (в этом случае риску подвергается учетная запись, на которой оно зарегистрировано; см. раздел [«Зачем нужен встроенный пул API?](https://github.com/phishdestroy/TgWitness/blob/main/docs/PROJECT-GUIDE.md#connect-a-telegram-account)»): 1. Откройте сайт [my.telegram.org](https://my.telegram.org) и войдите, указав любой номер телефона, который принадлежит вам. Код приходит в приложение Telegram, а не в виде SMS. 2. Выберите **инструменты для разработки API**. 3. Создайте приложение: укажите любое название и краткое имя (5–32 буквы), платформа — **«Настольный компьютер**». Поля «URL» и «Описание» можно оставить пустыми. 4. Скопируйте **App api_id** (число) и **App api_hash** (32 шестнадцатеричных символа). В панели под формой входа указаны поля**«Идентификатор API» и «Хеш**». Вы можете ввести одну пару `api_id:api_hash` в **поле «Идентификатор API»**, и оба поля будут заполнены. Одну пару можно использовать для всех ваших учётных записей. После успешного входа данные сохраняются в зашифрованном виде исключительно в данной рабочей среде и никогда не отправляются обратно в браузер. Здесь задействованы три различных типа учетных данных: | Секретно | Открыть | Где это находится | | --- | --- | --- | | Токен панели | Веб-панель TgWitness | `panel-token.txt` в каталоге данных или `TGWITNESS_TOKEN` | | Идентификатор API + хеш | Ничего не говорит само по себе; определяет приложение | Встроенная пара, импортированные настройки или ваше собственное приложение на сайте my.telegram.org | | Авторизация учетной записи | Аккаунт в Telegram | Создается посредством входа с помощью телефона или QR-кода либо импортируется в качестве сеанса | Если для доступа к Telegram требуется прокси-сервер, сначала настройте его в разделе **«Аккаунт» → «Настройки» → «Настройки подключения» → «Изменить маршрут подключения**». ## Номер телефона 1. Откройте **раздел «Аккаунт»**, перейдите на вкладку **«Телефон»** и введите номер в международном формате, например, `+44 7700 900123`. Пробелы и дефисы удаляются автоматически. 2. Нажмите **«Продолжить**». Поля «API ID» и «Хеш» можно оставить пустыми. 3. Введите код, отправленный Telegram (обычно в приложение Telegram; доставка по SMS не гарантируется). 4. Если для аккаунта настроена двухэтапная аутентификация, введите соответствующий пароль. Это не токен панели и не код доступа к устройству. 5. Проверьте идентификатор учетной записи, отображаемый после входа в систему, а затем выберите источники. Коды входа и пароль двухфакторной аутентификации (2FA) никогда не записываются на диск. ## QR-код Используйте эту функцию, если учетная запись уже авторизована на телефоне или другом компьютере. 1. Вкладка **«QR-код»** → **Показать QR-код**. Поля «API ID» и «Хеш» можно оставить пустыми. 2. На устройстве, на котором выполнен вход: **«Настройки» → «Устройства» → «Привязать настольное устройство**», отсканируйте код и подтвердите. 3. Введите пароль двухфакторной аутентификации (2FA) в TgWitness, если Telegram запрашивает его. Изображение QR-кода генерируется локально. Срок действия кодов истекает; нажмите **«Сгенерировать другой QR-код»,** чтобы повторить попытку. Блокировка панели, переключение рабочего пространства или вход под другим аккаунтом приводят к аннулированию кода, ожидающего обработки. ## Ключ аутентификации + идентификатор DC Ключ авторизации — это исходный 256-байтовый ключ авторизации, лежащий в основе каждого сеанса Telegram, записанный в виде **512 шестнадцатеричных символов** вместе с номером центра обработки данных **DC 1–5**. 1. Вкладка **«Ключ аутентификации**». Вставьте полный ключ; сокращённый ключ, содержащий символ `…`, не будет работать. 2. Выберите идентификатор DC, предоставленный вместе с ключом. 3. По желанию введите **идентификатор пользователя**. В этом случае TgWitness откажется подключаться, если Telegram сообщит о другом аккаунте. 4. **Аккаунт в** Press **Connect**. Ключ авторизации (512 символов) не является хешем API (32 символа). Тот же ключ также можно импортировать в формате JSON; см. раздел [«JSON-файл учетной записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#account-json)». ## Файлы учетных записей Откройте **«Добавить аккаунт» → «Файлы»** и выберите до **четырёх файлов**, **относящихся к одному аккаунту**, общим объёмом **8 MiB**, затем нажмите **«Подключить аккаунт**». Формы **Files**, **Auth key** и массового импорта отображают предупреждение о параллельных сессиях перед подключением. По умолчанию импортированные авторизации используются повторно. Оставьте исходный клиент закрытым, пока его ключ используется здесь. **Files** и **Auth key** также предлагают **создать независимую авторизацию**, описанную ниже. Массовый импорт по-прежнему использует прямой режим. Вход через телефон и интерактивный QR-код создают отдельные авторизации. Заголовок предупреждения остаётся видимым в форме импорта; его полное объяснение открывается автоматически при предоставлении файлов или строки ключа/сеанса. Его можно свернуть после прочтения, чтобы на телефоне оставались доступными элементы управления выбором файлов и подключением. - Файлы конвертируются **в памяти** на вашем сервере TgWitness. Загруженные файлы не сохраняются, архивы ZIP не распаковываются на диск, и не происходит обращения к каким-либо внешним сервисам. - Полученный файл затем сверяется с данными Telegram. Если в файле указан идентификатор пользователя, он должен совпадать с идентификатором учетной записи, указанным в отчёте Telegram. - Файлы, в которых описываются разные учётные записи или разные учетные данные API, отклоняются, вместо того чтобы выбрать одну из них. - Поле **«Пароль или текст сеанса**» содержит поле локального пароля TData — поле для вставки StringSession и **чтения файлов без входа в систему** (заполняет форму без обращения к Telegram). ### Создать независимую авторизацию Выберите **Создать независимую авторизацию** перед подключением импортированных файлов или авторизационного ключа. TgWitness кратковременно подключается к импортированному донору, использует его для утверждения QR-токена входа нового клиента и отключается от донора сразу после утверждения. Новый клиент имеет собственный ключ авторизации и отдельно выбранный профиль Desktop . Предоставленные донором учетные данные API и профиль устройства используются только для подключения к донору. Ни одна существующая авторизация не отменяется и не аннулируется. **На этом этапе исходный клиент донора должен оставаться полностью закрытым.** Первоначальное соединение по-прежнему использует скопированный ключ, поэтому данный режим не может устранить риск параллельного использования. После подключения новой авторизации владелец может вновь открыть исходный клиент и использовать оба независимо друг от друга. Интерактивный вход с помощью QR-кода **** позволяет исходному клиенту утвердить вход без копирования или подключения своего ключа в данном случае. Если Telegram запрашивает 2FA, этот режим использует `twoFA` из выбранного JSON-файла, если он присутствует, или запрашивает пароль. В случае отклонения импортированного пароля происходит возврат к форме ввода пароля. Пароли не сохраняются. Ключ-кандидат сохраняется в зашифрованном виде в поле `independent_login.enc`, включая изменения, произошедшие во время миграции между дата-центрами. После прерывания выберите того же донора и эту опцию, чтобы возобновить работу с сохраненным ключом-кандидатом. Рабочая область остаётся зарезервированной для этой учётной записи; неудачное завершение не приводит к удалению новой рабочей области. Сохраните её каталог данных и ключ хранилища. Окончательные учетные данные и запись в журнале `account.authorized` включают метод импорта, форматы ввода и ID API донора, без ключа или пароля донора. 5 ноября 2026 года специальная учетная запись прошла проверки в режиме реального времени с донорами Telethon, Pyrogram и TData: прохождение двухфакторной аутентификации (2FA), уникальные новые ключи авторизации, одновременный доступ донора и нового клиента, а также чтение общедоступного канала. В случае с Telethon также был возобновлен сохраненный кандидат после прерывания на этапе ввода пароля. Каждая новая авторизация завершила шесть запросов инициализации после входа в систему, а её подписанный журнал был проверен. Исходная сессия оставалась пригодной к использованию во всех четырёх предоставленных форматах. База данных ошибок [RPC Telegram](https://core.telegram.org/api/errors.json) связывает `FRESH_CHANGE_ADMINS_FORBIDDEN` со сменой администраторов, `FRESH_CHANGE_PHONE_FORBIDDEN` — со сменой номера телефона, а `FRESH_RESET_AUTHORISATION_FORBIDDEN` — с отзывом других сессий, изменением их срока действия или регистрацией пароля. `SESSION_TOO_FRESH_*` и `PASSWORD_TOO_FRESH_*` касаются передачи прав собственности и вывода доходов или подарков. Это не операции сбора данных; новый вход в систему не влечет за собой полный запрет на чтение в течение 24 часов. При экспорте можно отдельно возвращать `TAKEOUT_INIT_DELAY_*`. TgWitness сохраняет паузы, запрошенные сервером, и не повторяет прием токенов автоматически, а также не аннулирует сессии для обхода ограничений. ### Телемарафон `.session` | | | | --- | --- | | Что это такое | База данных SQLite, создаваемая инструментами на основе Telethon, например, `my_account.session` | | Признан | Таблицы `sessions` (вместе с `dc_id`, `server_address`, `port`, `auth_key`) и `version` = 7 или 8 | | Требования | Ровно одна строка, относящаяся к авторизованной сессии; закрытая, полная база данных | Сначала закройте программу, создавшую файл. Если рядом с ним присутствует файл `my_account.session-journal` или `my_account.session-wal`, это означает, что база данных не завершена: откройте и корректно закройте исходный клиент. Удаление этих вспомогательных файлов может привести к появлению повреждённой копии. ### Pyrogram `.session` | | | | --- | --- | | Что это такое | Инструменты на основе Pyrogram, использующие базу данных SQLite, создают | | Признан | Таблица `sessions` с `dc_id`, `auth_key`, `test_mode`, `user_id`, `is_bot`; `version` = 2 или 3 | | Требования | Допускается один авторизованный сеанс **пользователя** в производственной сети. Сеансы ботов и тестовых распределённых центров (DC) отклоняются. | При входе в систему сохраненный идентификатор пользователя сверяется с данными Telegram. ### Пара «сессия + JSON» Отчёты часто предоставляются в виде двух файлов с одинаковыми именами, например, `447700900123.session` и `447700900123.json`. Выберите **оба файла** одновременно. - На основании данных JSON TgWitness использует `app_id`/`api_id` и `app_hash`/`api_hash`, поэтому вам как правило, не требуется вводить учетные данные API. - Профиль подключения использует `device_model` (псевдоним `device`), `system_version` (псевдоним `sdk`), `app_version`, `lang_code`, `system_lang_code` (псевдоним `system_lang_pack`), `lang_pack` и опциональный `tz_offset` (секунды от UTC, от -43200 до 50400). Указанные поля имеют приоритет над сгенерированными значениями по умолчанию и языком панели/браузера . Конфликтующие псевдонимы отклоняются. Окончательный профиль сохраняется в зашифрованных учетных данных рабочей области и повторно используется после перезапуска, включая версию приложения. - `phone`, настройки прокси и токены устройств **игнорируются**. `twoFA` доступен только для чтения, если выбран параметр **Создать независимую авторизацию**; при прямом импорте он игнорируется. - JSON-файл без поддерживаемого поля авторизации является лишь метаданными. Добавьте файл сеанса или продолжите вход с помощью телефона или QR-кода. JSON-файл, содержащий поддерживаемый сеанс или авторизационный ключ, может авторизоваться самостоятельно; см. [Account JSON](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#account-json). ### Telegram Desktop (TData) TData — это папка `tdata` приложения Telegram Desktop (кроссплатформенного приложения с сайта desktop.telegram.org). | Система | Местоположение по умолчанию: `tdata` | | --- | --- | | Windows | `%APPDATA%\Telegram Desktop\tdata` (портативная версия Telegram: рядом с `Telegram.exe`) | | Linux | `~/.local/share/TelegramDesktop/tdata` | | macOS | `~/Library/Application Support/Telegram Desktop/tdata` | Чтобы импортировать его: > **Предупреждение о параллельной сессии.** Прямой импорт TData повторно использует ключ авторизации Telegram Desktop. Не используйте этот ключ одновременно в Desktop и TgWitness. Telegram может аннулировать авторизацию с помощью `AUTH_KEY_DUPLICATED`, в результате чего обе копии станут непригодными для использования до нового входа в систему. > > > > Полностью закройте Desktop, включая его процесс в трее, и держите эту копию закрытой, пока TgWitness использует импортированную сессию. **Закройте программу, не выходите из системы и не отзывайте сессию:** отзыв также делает импортированную копию недействительной. Если вам необходимо, чтобы оба клиента работали, выберите **Создать независимую авторизацию** и держите Desktop закрытым до тех пор, пока новый вход в систему не пройдет успешно, либо войдите в систему TgWitness с помощью телефона или QR-кода. Рекомендуется использовать отдельную учётную запись, однако это не гарантирует безопасность параллельного использования клонированных ключей. > > > > Это также относится к импортированным `.session` файлы, текст StringSession и шестнадцатеричный код авторизационного ключа. Другие клиенты с собственными, независимо созданными авторизациями могут оставаться авторизованными. См. [документацию Telegram по AUTH_KEY_DUPLICATED](https://core.telegram.org/api/errors#406-not-acceptable). 1. Полностью закройте Telegram Desktop. 2. Создайте ZIP-архив, содержащий **только** эти два элемента из `tdata`: - `key_datas` - 16-символьный файл с расширением «`s`», расположенный рядом с ним, обычно «`D877F783D5D3EF8Cs`» Сжатие всей папки вместе с кэшем мультимедиа, как правило, превышает установленные ограничения (512 записей, 32 MiB в распакованном виде). 3. Выберите ZIP-файл в разделе **«Файлы**». Если у Telegram Desktop установлен **локальный пароль**, сначала введите его в поле **«Пароль» или «Текст сеанса**». Это не пароль двухфакторной аутентификации (2FA). Поддерживается: один аккаунт на архив, современное хранилище `key_datas`/`key_data0`/`key_data1`, локальный пароль. Не поддерживается: папки с несколькими авторизованными аккаунтами, устаревшие версии десктопного приложения, ZIP-архивы, защищённые паролем, а также отдельное нативное приложение для macOS «Telegram для macOS». ### Telethon StringSession Одна строка текста, обычно начинающаяся с `1` и содержащая около 350 символов. Загрузите её в виде файла `.txt` или `.tgwitness-session` (размером не более 4 КиБ) или вставьте в поле **«Пароль» или «Текст сеанса**». Принимаются только строки формата Telethon; строки Pyrogram и TDLib используют другие форматы. ### JSON-файл учетной записи Один объект JSON размером не более **64 КиБ** в файле с расширением **`.json`**. | Поле (псевдонимы) | Значение | | --- | --- | | `api_id` (`app_id`) | Идентификатор приложения — положительное число | | `api_hash` (`app_hash`) | Хеш приложения, 32 шестнадцатеричных символа | | `string_session` (`session_string`, `session_str`; устаревшее `session`) | Текст StringSession для Telethon, а не имя файла | | `auth_key` (`auth_key_hex`) + `dc_id` | Полный 512-символьный ключ аутентификации и DC 1–5 | | `user_id` (`id`) | Необязательно; проверка в Telegram производится до сохранения авторизации | | `device_model` (`device`) | Описание устройства подключения | | `system_version` (`sdk`) | Версия ОС, с которой установлено соединение | | `app_version` | Версия приложения, отправленная в Telegram | | `lang_code`, `system_lang_code` (`system_lang_pack`), `lang_pack` | Язык клиента, язык системы и языковой пакет клиента; допускается пустое значение `lang_pack` | | `tz_offset` | Необязательное смещение по отношению к UTC в секундах, отправляемое в поле `initConnection.params`; целое число или строка, представляющая десятичное целое число | Если присутствуют как псевдоним, так и основное имя, они должны совпадать. Явные поля сеанса Telethon имеют приоритет над общим блоком `session` в другом формате. Если оба содержат распознаваемые сеансы Telethon, они должны описывать одну и ту же авторизацию. При отсутствии явного поля `session` должно быть действительным объектом StringSession Telethon. Примеры: ``` { "app_id": 1234567, "app_hash": "0123456789abcdef0123456789abcdef" } ``` ``` { "api_id": 1234567, "api_hash": "0123456789abcdef0123456789abcdef", "auth_key": "REPLACE_WITH_ALL_512_HEXADECIMAL_CHARACTERS", "dc_id": 2, "user_id": 123456789 } ``` В первом примере заполняются только учетные данные API; войдите в систему с помощью телефона или QR-кода либо добавьте файл сеанса. Массовые списки (массив JSON с учетными записями) не принимаются. ## Определите, чем вы располагаете | Как видите | Это | Использование | | --- | --- | --- | | `*.session`; при открытии в текстовом редакторе в верхней части отображается `SQLite format 3` | Telethon или Pyrogram SQLite | **Файлы** (обнаруживаются автоматически) | | Папка «`tdata`», содержащая файл «`key_datas`» | Telegram Desktop TData | Скомпрессируйте два файла в ZIP, затем **«Файлы»** | | Одна строка текста, начинающаяся с `1`, ~350 символов | Telethon StringSession | **Файлы** | | `*.json` с `app_id`/`app_hash` | Сопутствующие метаданные | **Файлы** вместе с данными сеанса | | `*.json` с `auth_key` или `string_session` | JSON-файл учетной записи | **Файлы** | | 512 символов `0-9a-f` | Ключ аутентификации | **Ключ аутентификации** | | 32 символа `0-9a-f` | Хеш API | **Идентификатор API + хеш** | | `td.binlog` или `db.sqlite` из приложения TDLib | Хранилище TDLib | Не поддерживается | | `123456789:AA…` | Токен бота | Не поддерживается | ## Неподдерживаемые форматы | Формат | Альтернативный вариант | | --- | --- | | Хранилище TDLib (`td.binlog`) и экспорт данных из TDLib | Войдите с помощью телефона или QR-кода | | **Строки** сеансов Pyrogram | Используйте файл Pyrogram с кодом `.session` или сканируйте QR-код с телефона | | TData с несколькими авторизованными учетными записями | Выйдите из других учётных записей в Telegram Desktop или используйте файл сеанса для каждой учётной записи отдельно | | Токены ботов | Не поддерживается: TgWitness осуществляет мониторинг в качестве учетной записи пользователя | | Списки многих учетных записей в форматах CSV/JSON | Импортируйте поддерживаемые файлы сессий через **Аккаунты → Импорт учетных записей** или войдите по номеру телефона / QR-коду в отдельных рабочих пространствах | | Тестовые сеансы DC или сеансы с ботами | Используйте рабочую учетную запись пользователя | ## Наличие нескольких учётных записей Нажмите **кнопку «+»** рядом с выбором учетной записи или откройте **«Учетная запись» → «Настройки» → «Настройки подключения» → «Рабочие пространства»**, введите название и войдите в систему. - Неограниченное количество рабочих пространств, включая основное. Каждое из них имеет собственную сессию, прокси- маршрут, источники, политику сбора данных, журнал, ключ подписи, контрольные точки и настройки экспорта. - Переключение между отображаемыми рабочими пространствами не приводит к приостановке работы остальных. - Журнал привязан к учетной записи, с которой он был создан. Для входа под другой учетной записью требуется отдельное рабочее пространство, при этом одна учетная запись не может быть привязана к двум рабочим пространствам. - Токен главной панели управляет всеми рабочими пространствами. [Предоставленный доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) позволяет ограничить доступ других пользователей к выбранным аккаунтам и чатам с помощью отдельных прав доступа и ограничений по продолжительности сеанса. - **Функция «Учётные записи»** позволяет переименовать рабочую область и удалить добавленную рабочую область вместе с её сессией, журналом, источниками и ключом подписи. Главную рабочую область нельзя удалить с панели. ### Массовый импорт и группы аккаунтов Воспользуйтесь **меню «Аккаунты» → «Импорт аккаунтов»**, чтобы добавить несколько аккаунтов, сопоставить файлы по базовому имени и просмотреть результаты каждого входа в систему. Каждому аккаунту выделяется собственная рабочая область. Группа объединяет связанные аккаунты, не объединяя при этом их сессии, ключи или доказательства. **Открыв группу** в разделе **«Аккаунты»,** вы перейдёте на её страницу по адресу `/groups/`: - **Аккаунты:** маршрут подключения каждого участника, наблюдения и последнее сообщение, с кнопками «Запустить**все»** и **«Приостановить все**». - **Требует внимания:** аккаунты, из которых вышли, которые недоступны или у которых возникли проблемы с подключением, приемом данных, источником или мультимедиа; каждое имя ведёт к соответствующей карточке. - **В чатах нескольких учетных записей отображаются:** общие источники, учетные записи, наблюдающие за ними, и перерывы в периоде наблюдения за рабочим пространством (до семи дней). **Экспорт с N учетными записями** распределяет экспорт канала или супергруппы между ними и подписывает один архив. - **Экспорт группы:** один элемент ZIP, в котором находится подписанный экспорт каждого аккаунта в разделе `accounts/` и `manifest.json` с указанием их SHA-256 и отпечатков ключей, подписанных главным рабочим пространством в `manifest.signature.json`. Проверяйте каждый архив аккаунта отдельно с помощью `python -m tgwitness.verify` и доверенным отпечатком этой учетной записи. Участники используют общие настройки группы; при этом каждый аккаунт может сохранять свои собственные значения. См. [раздел «Общие настройки»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/#account-groups), [руководство по импорту и группам](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Accounts.md#import-accounts-and-share-settings), а также [панель управления пулом MTProxy](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Proxies.md#pool-dashboard-and-custom-sources). ## Выйти **«Учётная запись» → «Выйти из Telegram»** (с приостановкой наблюдения) отправляет запрос в Telegram на завершение сеанса, в результате чего он также исчезает из раздела **«Настройки» → «Устройства»** данной учётной записи и удаляется из хранилища рабочего пространства. Журнал, источники, настройки и ключ подписи сохраняются, и в журнале фиксируется факт выхода из системы. Рабочая область по-прежнему принадлежит данной учетной записи: только эта учетная запись может подключиться к ней повторно. Если Telegram не отвечает, сессия всё равно удаляется здесь, и на панели отображается соответствующее сообщение; завершите её в Telegram в разделе **«Настройки» → «Устройства**». ## Обеспечение безопасности файлов учетных записей - Относитесь к каждому `.session`, TData ZIP, StringSession, Auth Key и JSON-файлу учетной записи как к паролю. TgWitness хранит импортированные данные авторизации в зашифрованном хранилище; вы можете удалить исходные файлы впоследствии. - Не запускайте одну и ту же авторизацию одновременно в двух программах. Telegram может отозвать её (`AUTH_KEY_DUPLICATED`), и обе копии перестанут работать. - Сеанс, срок действия которого истек или который был отозван, не может быть восстановлен посредством преобразования. Войдите в систему заново. ## Устранение неполадок | Сообщение или признак | Что делать | | --- | --- | | *Не удаётся прочитать данную сессию. Закройте исходный клиент…* | Файл SQLite открыт или не завершен (файл-сайдкар `-journal`/`-wal`). Корректно закройте исходную программу и скопируйте файл заново. | | *Поддерживаемые схемы базы данных Telethon SQLite: 7 и 8* / *Pyrogram … 2 и 3* | Файл был создан с использованием очень старой или неизвестной версии библиотеки. Вместо этого войдите в систему с помощью телефона или QR-кода. | | *Поддерживаются только авторизованные сеансы пользователей в производственной среде* | Файл Pyrogram принадлежит боту или тестовой сети. | | *Архив TData превышает 512 записей или 32 МиБ* | В ZIP-архив следует включить только файлы `key_datas` и `D877F783D5D3EF8Cs`, а не всю папку. | | *Не удаётся расшифровать TData. Проверьте локальный пароль на рабочем столе* | Введите локальный пароль Telegram Desktop в поле **«Пароль» или «Текст сеанса**». | | *Импортируйте по одной учетной записи TData за раз* | В Telegram Desktop было несколько учётных записей; см. раздел [«Неподдерживаемые форматы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#unsupported-formats)». | | *Выбранные файлы содержат информацию о различных учетных записях или учетных данных API* | Выберите файлы только из одной учетной записи. | | *Файл JSON не содержит учетных данных или авторизационных данных для поддерживаемых API* | Проверьте названия полей в [JSON-файле учетной записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#account-json). | | *Только метаданные API* | В JSON отсутствует сессия. Добавьте файл `.session` или воспользуйтесь номером телефона/QR-кодом. | | *HEX-код авторизационного ключа должен содержать все 512 шестнадцатеричных символов* | Ключ усечён или содержит символы «`…`». | | Идентификатор учетной записи не совпадает с импортированной учетной записью | Идентификатор пользователя в файле отличается от того, который указывает Telegram; данный файл относится к другому аккаунту. | | Данный аккаунт уже принадлежит другому рабочему пространству | Откройте эту рабочую область вместо того, чтобы добавлять аккаунт дважды. | | Ссылка работает, однако в списке чатов в разделе **«Источники»** отсутствует закрытая группа | Проверьте членство. Программа анализирует первые 1 000 диалогов; увеличьте этот лимит в разделе **«Параметры**». | | Ошибка подключения через прокси | Проверьте режим маршрутизации и IP. При автоматическом режиме MTProxy происходит попытка подключения к другой рабочей записи. При режиме «Скрыть адрес» происходит ожидание; режим «Прямой» в крайнем случае позволяет подключиться напрямую после заданной задержки. См. [режимы маршрутизации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/#ip-modes). | См. также: [подключение и безопасность](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) прокси-серверов и шифрования, а также [принципы сбора данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/), которые фиксируются после входа в систему. --- # Токены, области доступа и разрешения TgWitness Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/ Устанавливайте ограниченный доступ к аккаунтам и чатам, выбирайте права доступа, ограничивайте количество сеансов и IP-адресов, а также отзывайте доступ. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Translation coverage: this edition includes material from the English original. Устанавливайте ограниченный доступ к аккаунтам и чатам, выбирайте права доступа, ограничивайте количество сеансов и IP-адресов, а также отзывайте доступ. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Начало работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) Предоставьте рецензенту доступ к одному чату, аналитику — право на экспорт дела, а оператору — контроль над выбранными аккаунтами. Каждый пользователь получает собственный токен. Главный токен панели управления остается у администратора. [Настройка учетной записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/) · [Маршруты подключения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) · [Модель безопасности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/) ## Две области применения, две разные задачи **Объём сбора данных** определяет, что именно записывается в учётной записи: выбранные чаты, папка Telegram или вся учётная запись. **Объём доступа** определяет, какие из этих записанных учётных записей и чатов может просматривать и использовать другое лицо. Предоставление доступа не означает вступление в чат Telegram, начало сбора данных или предоставление прав доступа к учётной записи Telegram. Право доступа может открывать доступ к выбранным рабочим пространствам, выбранным чатам в них, ко всем рабочим пространствам или ко всем аккаунтам в [группе аккаунтов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/#bulk-import-and-account-groups). Доступ**ко всем рабочим пространствам, включая добавленные позже**, также распространяется на будущие аккаунты. Групповой доступ также распространяется на аккаунты, добавленные в эту группу позже. Выбирайте рабочие пространства явно, если работа над делом должна ограничиваться только ими. ## Предоставить кому-либо доступ 1. Войдите в систему в качестве главного администратора и откройте раздел **«Доступ**». 2. В разделе **«Предоставить кому-либо доступ**» введите имя, которое вы сможете распознать в журнале. 3. Выберите рабочие пространства и, при необходимости, отдельные чаты. 4. Выберите, что может сделать данный человек. Глагол **«просматривать»** всегда указывается. 5. Установите срок действия, ограничения на вход в систему/сессию и разрешённые адреса в соответствии с вашими потребностями. 6. Нажмите **«Создать доступ**». Скопируйте токен сейчас: он отображается только один раз. 7. Отправьте адрес панели и токен в личных сообщениях. Получатель вводит этот токен на обычной странице входа; ему не потребуется ваш основной токен панели или сессия Telegram. Откройте панель с выданным токеном в отдельном сеансе браузера и проверьте доступные чаты и разрешённые действия, прежде чем передать её. Access names remain in encrypted local storage and are resolved by the administrator's panel. Names are omitted from new access and workspace-creation audit records; existing signed records keep their original fields. ## Выберите права доступа Для публичной демонстрации, содержащей только текст, используйте **«Публичную витрину»** вместо обычного доступа рецензента. В ней отображаются явно выбранные публичные каналы, сохраненные правки и удаления, а также подписанная статистика, при этом поля авторов замазаны, а файлы закрыты на границе API. [Создайте и проверьте витрину](https://phishdestroy.github.io/TgWitness/ru/docs/reference/showcase/). | Разрешение | Возможности инструмента | | --- | --- | | `view` | Просмотр разрешённых чатов, сохраненных сообщений, профилей, файлов и отфильтрованных записей журнала. Все это всегда доступно. | | `export` | Разрешен экспорт истории чатов и досье. Для экспорта доказательств из всего рабочего пространства требуется доступ ко всему рабочему пространству. | | `sources` | Управление источниками, моментальными снимками и захватом профилей. Доступ, ограниченный чатами, действует только в разрешённых чатах; поиск источников по всей учётной записи и настройки области действия остаются закрытыми. | | `collect` | Запустить или остановить сборщик данных. Требуется доступ ко всему рабочему пространству, поскольку сбор данных затрагивает учетную запись. | | `interact` | Выполняйте поддерживаемые взаимодействия с Telegram в пределах предоставленных прав доступа. При доступе, ограниченном чатами, невозможно использовать предварительный просмотр ссылок для всего аккаунта. | | `settings` | Изменение настроек сбора данных, временных меток, уведомлений, внешних копий и параметров. Требуется доступ ко всему рабочему пространству. | | `account` | Входите в Telegram или выходите из него, а также управляйте маршрутами подключения. Требуется доступ ко всему рабочему пространству. | | `board.read` | Читать заметки на доске дел только в пределах разрешённого рабочего пространства и чатов. | | `board.write` | Добавляйте закладки, выделения, фрагменты, комментарии и статусы «открыто»/«просмотрено». Также требуется функция ``board.read``. | | `board.manage` | Управляйте коллекциями, окончательными статусами команды и карточками других участников. Также требуется доступ к доске для чтения и записи. | Only the main administrator can download the off-site replica recovery key. Delegated `settings` or `account` access does not grant that key. Права доступа и их сфера действия проверяются одновременно. Установка флажка напротив права доступа не приводит к открытию других чатов и не разблокирует операции в масштабе рабочего пространства в случае доступа, ограниченного конкретным чатом. Для параллельного экспорта доступ должен охватывать экспортируемый чат во всех выбранных учётных записях. Выданный доступ не позволяет создавать новые права доступа, управлять сессиями других пользователей или открывать консоль администратора. ### Три полезных настройки | Лицо | Объём работ | Разрешения | | --- | --- | --- | | Рецензент | Записанные чаты по одному из дел | `view` | | Аналитик, готовящий передачу дел | Чаты для расследования и экспорта | `view`, `export`; добавьте `interact` только в том случае, если им необходимо действовать через Telegram | | Оператор сбора данных | Выбранные полные рабочие пространства | `view`, `sources`, `collect`; добавляйте `settings` или `account` только при необходимости | Начальные настройки формы «Доступ» также включают «Доску дел»: рецензент может читать, аналитик может читать и писать, а оператор может управлять ею. Настройки остаются редактируемыми, а существующие права доступа не расширяются автоматически. См. [раздел](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/) [«Доска дел»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/) для получения информации о наследуемых областях охвата чатов и конфиденциальности экспорта. ## Ограничения и сеансы | Настройки | Как это работает | | --- | --- | | Параллельные сессии | Ограничьте количество одновременных сеансов от 1 до 100. При достижении предела отклоните следующий вход в систему или завершите самый старый сеанс. | | Вход в систему разрешён | Ограничьте количество успешных использований токена для запуска сеансов. Существующие сеансы не завершаются только по той причине, что был использован последний разрешённый вход в систему. | | Срок действия до | Срок действия доступа окончательно истек. Пользователь с истекшим доступом не может войти в систему или продолжать отправлять запросы. | | Протоколы без активности | Таймаут бездействия сеанса — от 5 минут до 30 дней. Успешные запросы продлевают его; открытая панель может поддерживать активность посредством опроса. | | Допустимые адреса | Укажите конкретные IP-адреса или подсети CIDR. Оставьте поле пустым, чтобы разрешить доступ с любого адреса, если не включена привязка к первому входу в систему. | | Привязать к первому входу в систему | При первом успешном входе в систему фиксируется разрешённый адрес для данного доступа. | IP-адрес — это адрес клиента, видимый приложению. При использовании обратного прокси-сервера или туннеля проверьте адрес, указанный в **разделе «Открытые сессии»**, прежде чем полагаться на правила, основанные на IP-адресах: в противном случае может показаться, что несколько пользователей используют один и тот же адрес прокси-сервера. ## Изменить или отменить доступ Отредактируйте запись в разделе **«Предоставленный доступ»**, чтобы изменить её область действия, разрешения или ограничения. Изменения области действия и разрешений проверяются при последующих запросах, включая запросы из уже открытых сеансов. Отзыв доступа приводит к завершению всех сеансов и делает выданный токен непригодным для использования. **Функция «Открытые сеансы»** также позволяет администратору завершить отдельный сеанс без отзыва всего доступа. Saved export copies retain their creator, workspace, chat scope and required permissions. An issued access can list or download its own copies only while those permissions still apply; copies containing Case Board also require `board.read`. The administrator can retrieve all copies. Older copies without this metadata and group bundles are administrator-only. Download tickets and prepared file responses recheck access after preparing the file, before sending its bytes. Each access, including the administrator, can hold ten pending download tickets per workspace; the workspace-wide limit is 1,000. Tickets expire after 120 seconds and are single-use. Отзыв не позволяет восстановить файлы, которые кто-либо уже скачал. Выход из системы, блокировка панели или завершение сеанса не останавливают работу запущенного сборщика данных. ## Что видит администратор Рецензенты и аналитики получают отчеты о ходе сбора данных без указания прокси-конечных точек, диагностики пулов, путей к серверам или исходных ошибок подключения. Для диагностики подключения требуется разрешение `account` для всего рабочего пространства. Для чтения уведомлений, внешних копий и настроек параметров требуется разрешение `settings`. Полные строки User-Agent из браузера не сохраняются в сессиях доступа. При обновлении они также удаляются из изменяемого кэша сеансов. Журнал процессов панели маскирует литералы IP-адресов, учетные данные URL и помеченные секреты. Локальные журналы служб и ранее подписанные записи журнала не перезаписываются. Правила доступа и подписанные записи входа по-прежнему используют адрес клиента. ### Заменить главный ключ Используйте **Access → «Мои ограничения» → «Перевыпустить ключ администратора**» или запустите `tgwitness token rotate` из управляемой установки при работающей панели. Все существующие сеансы браузера завершаются, включая сеансы, открытые с помощью токенов коллег. Запрашивающий браузер получает новый сеанс; сохраните новый ключ администратора, прежде чем скрыть его. Выданные токены коллег остаются действительными до тех пор, пока их не отзовут отдельно. В установке, использующей `TGWITNESS_TOKEN`, необходимо изменить этот параметр среды и перезапустить систему. ### Границы запросов и прокси The API admits up to 600 requests per minute per client and credential family: panel, archive/MCP or witness. Authentication cooldowns are separate for these families. Ten rejected authentications within a minute start an exponential cooldown, from one second up to five minutes. A failed attempt after the cooldown increases it; ten minutes without a failed attempt resets escalation. Rejections return HTTP 429 and `Retry-After`. Limits are in memory, shared across workspaces in one panel process; restart clears them. Live streams are limited to four per bearer token and 32 for the panel process. Opening a stream also consumes the API request budget. Request bodies have a 60-second receive deadline, reduced to 10 seconds for login, demo access, archive API and witness-head paths, or 8 seconds for MCP transport. Each application permits four unfinished bodies per client address, with overall limits of 32 and 64 MiB of reserved route allowances. Requests without bodies do not consume these slots. Oversized bodies return 413, timed-out bodies return 408, and exceeded client capacity returns 429 with `Retry-After: 1`. Exhausted overall body capacity returns 503 with `Retry-After`. Перенаправленные IP-заголовки игнорируются, если фактический TCP-узел не принадлежит к `TGWITNESS_TRUSTED_PROXIES` (IP-адреса, разделенные запятыми, или CIDR-блоки). Установите `TGWITNESS_PROXY_HEADER` в `x-forwarded-for` или `cf-connecting-ip`. XFF просматривается от ближайшего прокси к первому ненадежному узлу. Неправильно сформированные или дублирующиеся метаданные доверенных адресов отклоняются, поэтому они не могут унаследовать прокси-адрес из списка разрешенных адресов. Управляемый быстрый туннель доверяет локальному коннектору Cloudflare; настройка в собственном домене доверяет локальному Caddy. Прямые развертывания по умолчанию не доверяют никаким прокси-серверам. Если вы запускаете Uvicorn самостоятельно, отключите обработку прокси-заголовков, чтобы этот пограничный узел получал данные от реального узла. `TGWITNESS_PANEL_ALLOWED_IPS` ограничивает доступ ко всем панелям, включая панель администратора, только перечисленными IP-адресами или CIDR-блоками. Проба маршрутизационной идентичности установщика остается общедоступной и не возвращает данные учетной записи. Добавьте необходимый локальный административный маршрут перед включением списка разрешенных адресов. Руководство по управляемой установке **START-HERE** содержит инструкции по настройке службы и восстановлению. Селектор запроса API `ws` должен идентифицировать рабочую область в пути запроса; неизвестные, несоответствующие и дублирующиеся селекторы отклоняются с кодом ошибки 404. Скрипты и стили панелей содержат метаданные целостности SHA-384. Карта импорта также охватывает локально импортированные модули JS в браузерах, поддерживающих целостность import-map. Динамически сгенерированный языковой ответ находится отдельно. Эти проверки обнаруживают подмену ресурсов по отношению к доставленной странице; они не устанавливают доверия к скомпрометированному серверу, который может заменить как саму страницу, так и её хеши. **Журнал с момента запуска** объединяет системные журналы процесса с записями активности из каждого рабочего пространства: входы в систему, отказы, изменения маршрута и действия оператора. Это консоль в оперативной памяти для текущего процесса, а не постоянная копия каждого сообщения. Часто повторяющиеся события, связанные с сообщениями, сохраняются в журнале, а не заполняют консоль. Предоставление, изменение и отзыв доступа, а также начало или завершение сеансов также приводят к созданию подписанных записей в журнале `access.*`. Токены не включаются в эти записи. Выданные токены и учетные данные сеансов хранятся в виде хэшей в зашифрованном хранилище. ****Главный администратор и граница доверия**** Основной токен панели остается неограниченным. Вход в браузере с его использованием создаёт сессии, подпадающие под ограничения сеансов, настроенные администратором. Скрипты, отправляющие основной токен напрямую, сохраняют полный доступ и не учитываются как сеансы браузера. Это контроль доступа на уровне приложения в рамках одной установки. Все рабочие пространства используют общий серверный процесс; это не означает изоляции от администратора хоста. Обеспечьте конфиденциальность основного токена, сеансов Telegram, ключей подписи и каталога данных. Токен-свидетель представляет собой отдельный контрольный точка/удостоверение работоспособности, а не токен доступа к панели. --- # Прокси Telegram и безопасность подключения Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/ Аутентификация, автоматические пулы прокси-серверов, режимы работы с IP-адресами, политика резервного переключения, внешние запросы и хранение секретных данных. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Аутентификация, автоматические пулы прокси-серверов, режимы работы с IP-адресами, политика резервного переключения, внешние запросы и хранение секретных данных. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) В данном документе описывается поведение TgWitness версии 0.8.0 и его ограничения. Аутентификация, доступ к источнику, сетевое соединение и полнота сбора данных представляют собой отдельные состояния. Для ознакомления с этапами входа в систему, форматами файлов и работой с несколькими учетными записями начните с раздела [«Учетные записи и форматы сеансов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/)». Информацию о правилах обработки событий и поведении при перезапуске см. в разделе [«Как работает сбор данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/)». ## Пошаговая инструкция по настройке подключения В **«Подключение»** администратор может выбрать **«Эта учетная запись»**, **«Группа учетных записей»** или **«Все учетные записи»**, а затем выбрать маршрут. **«Просмотреть выбор»** отображает список затронутых учетных записей. **«Подготовить и проверить»** тестирует предложенный маршрут без изменения сохраненного. **«Применить проверенное подключение»** повторно проверяет, приостанавливает мониторинг, если необходимо, сохраняет маршрут и возобновляет уже запущенный мониторинг. Сбор данных никогда не запускается на учетной записи, ранее находившейся в режиме ожидания. Загрузка истории остается приостановленной и может быть возобновлена отдельно. Перед переключением приостановите активные экспорты. Изменения в группе по умолчанию сохраняют учетные записи с их собственным маршрутом. Снимайте эту опцию только тогда, когда в предварительном просмотре отображаются именно те изменения, которые вы намереваетесь внести. Приложение сообщает о результатах для каждой учетной записи; это не транзакция типа «всё или ничего» между базами данных. В случае неудачного переключения восстанавливаются предыдущие настройки этой учетной записи. Невозможность возобновления отображается явно. Срок действия предварительного просмотра истекает через десять минут, а изменения в настройках подключения или членстве в группах требуют новой проверки. | Маршрут | Что управляет TgWitness | | --- | --- | | Прямой | Подключения с хоста; VPN внешнего хоста не обнаруживается и не принудительно применяется. | | VPN | Один профиль WireGuard с полным туннелем на каждую учетную запись, реализуемый локальным процессом SOCKS5 в пользовательском пространстве. Никаких сетевых интерфейсов или драйверов не устанавливается. | | Мой прокси | Учетные данные SOCKS5, HTTP CONNECT или MTProxy. В поля SOCKS5/HTTP можно ввести URL-адрес. При выборе нескольких учетных записей введенный прокси-сервер используется для всех них. | | Публичный MTProto | Существующий пул назначает маршруты Telegram. Внешние запросы отключены до тех пор, пока в расширенных настройках не будет настроен отдельный подходящий прокси-сервер. | | WARP | Отдельный локальный туннель для каждой выбранной учетной записи с регистрацией в WARP и профилем WireGuard, хранящимся в хранилище этой учетной записи. | Проверка текущего маршрута использует новый неавторизованный транспорт Telegram, а не сессию учетной записи. Для маршрутов, поддерживающих HTTP, также запрашивается HTTPS- трассировка Cloudflare через этот маршрут и отображаются указанные в отчете IP-адрес выхода, страна, состояние WARP и время проверки. Измеренная задержка — это время установки соединения Telegram, а не результат ping по ICMP. Подготовка WARP завершается сбоем, если трассировка не сообщает об активном состоянии WARP. Эти проверки устанавливают наличие связи, а не подлинность или полноту перехваченных сообщений. Один только запущенный локальный процесс не является успешной проверкой выхода. ### Портативные версии WARP и WireGuard Это неофициальная интеграция **с WARP** с использованием [wgcf 2.3.1](https://github.com/ViRb3/wgcf/releases/tag/v2.3.1) и [wireproxy 1.1.3](https://github.com/windtf/wireproxy/releases/tag/v1.1.3). Администратор явно соглашается с настройкой перед первой загрузкой или регистрацией в WARP. Эти соединения для настройки устанавливаются напрямую с GitHub и Cloudflare и раскрывают IP-адрес компьютера. Трафик обычных учётных записей сохраняет существующий маршрут до момента запуска приложения. Cloudflare выбирает адрес выхода и страну; отдельные туннели могут использовать один и тот же адрес выхода. Выбор страны, периодическая ротация IP-адресов и общесистемный VPN-kill-switch не поддерживаются данной функцией. Поддерживаемые версии вспомогательных программ: Linux и macOS x86-64/ARM64, а также Windows x86-64. Артефакты сверяются с хешами SHA-256, включёнными в проверяемый исходный код, а кэшированные исполняемые файлы проверяются повторно перед запуском. Ни одна вспомогательная утилита не добавляется в PATH, не устанавливается в качестве системной службы и не получает общедоступного прослушивателя. Все файлы находятся в каталоге `portable-routes/` рабочей области и в зашифрованных записях хранилища. Для прослушивателя loopback SOCKS5 требуются независимо сгенерированные учетные данные. Личные профили и учетные данные учетной записи WARP шифруются с помощью существующего хранилища рабочей среды. Во время работы вспомогательной программе требуется конфигурационный файл в виде открытого текста, доступный только владельцу; при нормальном завершении работы он удаляется. В случае сбоя хоста этот файл может остаться в папке данных, доступной только владельцу. Это не обеспечивает шифрование диска и не защищает от его администратора. Супервизор закрывает туннель, если родительский канал панели исчезает. Неудавшийся туннель никогда не включает прямой резервный вариант. Перезапуск панели восстанавливает выбранный туннель; неудавшиеся запуски повторяются с ограниченной задержкой. **Stop tunnel** также приостанавливает мониторинг и сохраняет состояние остановки. **Start tunnel** запускает туннель; возобновите мониторинг отдельно, когда будете готовы. Загруженные профили WireGuard должны содержать один интерфейс и один узел, полные маршруты IPv4 и IPv6, а также не должны содержать хуков, включений, подстановок переменных среды или дополнительных прослушивателей. Адреса публичных конечных точек разрешаются и фиксируются перед запуском. Используйте внешний VPN или шлюз SOCKS5 для OpenVPN/IPsec и частных конечных точек. ## Методы аутентификации **Идентификатор API и хеш API служат для идентификации приложения; они не заменяют данные для входа в учётную запись.** Их использование в TgWitness не является обязательным. Приоритет: сначала пара, введённая в форму, затем — из импортированного JSON-файла учётной записи, далее — пара, сохранённая в рабочей области, и, наконец, встроенный пул из 50 общедоступных пар, которые пробуются в случайном порядке с автоматической ротацией в случае отказа Telegram. Только пара Telegram Desktop (2040) отправляется с соответствующим описанием клиента Telegram Desktop. Ваша собственная пара из инструментов разработки API на сайте [my.telegram.org](https://my.telegram.org) может использоваться со всеми вашими учётными записями; при этом каждая учётная запись по-прежнему имеет собственную авторизацию. | Метод | Требования | Служба поддержки TgWitness | | --- | --- | --- | | Номер телефона, код, двухфакторная аутентификация (2FA) — по желанию | Доступ к учётной записи; пара API не обязательна | Вход в панель управления | | HEX-код авторизационного ключа + DC-идентификатор | Полный ключ длиной 512 символов и DC 1–5 | Вкладка **«Ключ** прямой **авторизации»**; при желании перед сохранением авторизации проверяется идентификатор пользователя | | Telethon StringSession | Действительная строка сеанса | Вход в панель управления | | Telethon SQLite `.session` | Закрытый, последовательный текст | Прямой импорт схем через панель управления 7/8; опциональный автономный интерфейс командной строки (CLI) | | Pyrogram SQLite `.session` | Закрытая производственная сессия пользователя | Прямой импорт схем через панель 2/3 | | Telegram Desktop TData ZIP | Одна современная учетная запись; локальный пароль, если учетная запись защищена | Преобразование в памяти с проверкой контрольных сумм и расшифровки | | JSON-файл учетной записи | Поддерживаемые поля API/сессии/ключа | Метаданные сами по себе заполняют учетные данные API; по-прежнему требуется вход с помощью сеанса/ключа или номера телефона/QR-кода | | Вход с помощью QR-кода | Подтверждение от официального приложения Telegram | Локальное генерация QR-кодов, управление сроком действия и повторными попытками, опциональная двухфакторная аутентификация (2FA) | | TDLib / Pyrogram StringSession | Другие форматы, специфичные для библиотек | Не поддерживается | | Токен бота | Бот с собственной моделью доступа и обновления | Не используется данным сборщиком данных | Telegram использует доставку кодов; доставка SMS не гарантируется. Хеш API не может восстановить отмененную сессию или заменить забытый пароль двухфакторной аутентификации. TgWitness не сохраняет коды входа или пароль двухфакторной аутентификации Telegram на диск. Для частного источника учетная запись должна уже иметь доступ. Имя пользователя группы не требуется. Использование прокси или импорт сеанса не предоставляют ни членства, ни прав администратора. Текущее членство не гарантирует доступ к истории, предшествующей вступлению в группу. ## Импорт файла сеанса Telethon Telethon SQLite, Pyrogram SQLite и Telegram Desktop TData используют разные форматы. Панель распознаёт и преобразует поддерживаемые структуры; переименование файла не меняет его формат. Выберите одну сессию и сопутствующий JSON в разделе **«Файлы»**, затем нажмите **«Подключить аккаунт»**. Допускается до четырёх связанных файлов общим объёмом до 8 MiB. Подробности о TData и JSON приведены в разделе [«Ограничения форматов»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/). Восстановление локального пароля не поддерживается. Вход по номеру телефона с 2FA или по QR-коду создаёт отдельную авторизацию. Дополнительный путь командной строки, доступный исключительно для Telethon, по-прежнему остается в использовании: 1. Прекратите работу клиента, использующего исходную сессию, и создайте точную копию. Конвертер отклоняет файлы с незавершённым журналом WAL. Закройте исходный клиент надлежащим образом, а не удаляйте эти файлы, чтобы обойти проверку. 2. Из среды TgWitness выполните следующую команду: ``` python -m tgwitness.sessions account.session --out account.tgwitness-session ``` 1. В разделе **«Добавить аккаунт» → «Файлы**» загрузите результат или вставьте его строку и продолжайте. 2. Проверьте отображаемый цифровой идентификатор аккаунта, выберите источники и начните наблюдение. **Преобразованный файл представляет собой незашифрованный секретный ключ доступа к учётной записи.** Храните его в защищённом месте и ни в коем случае не фиксируйте его в репозитории и не отправляйте сторонним сервисам конвертации. TgWitness сохраняет авторизованную сессию в своём зашифрованном хранилище. Копирование сессии не приводит к созданию отдельной авторизации: не запускайте одновременно несколько клиентов с клонированными ключами авторизации и не предполагайте независимую доставку обновлений. Преобразование передаёт авторизацию, а не исходные сообщения, кэш объекта или постоянный курсор обновления. Оно не обеспечивает восстановление обновлений после перезапуска процессов. ## MTProto, Telethon и прокси-серверы MTProto — это протокол Telegram. Telethon — это библиотека клиента на языке Python, которую использует TgWitness. MTProxy — это транспортный прокси Telegram; SOCKS5 и HTTP CONNECT обеспечивают общие туннели. Ни один из них не заменяет аутентификацию учетной записи. Сохраните маршрут для каждой рабочей области в разделе **«Аккаунт» → «Настройки» → «Настройки подключения» → «Изменить маршрут подключения**» перед входом в систему. Для новых рабочих областей по умолчанию установлен режим **«Автоматический» MTProxy · публичные списки** с опцией **«Скрыть адрес**». Существующие рабочие области, в которых явно использовался режим «Прямой», сохраняют режим, допускающий его использование. ## Режимы IP Маршрут выбирает тип подключения. Режим IP, настройка**«Защита IP»** в разделе «Аккаунт» панели управления, определяет, когда адрес сервера может быть раскрыт. Эти настройки не устанавливают VPN и не перенаправляют весь трафик устройства. | Режим | Telegram | Внешние запросы | | --- | --- | --- | | Скрыть адрес (`hide`) | Используйте прокси; если ни один из них не работает, подождите. Прямого резервного варианта нет. | Требуется SOCKS5/HTTP; запросы без соответствующего прокси-сервера отклоняются. | | Direct — в крайнем случае (`fallback`) | Автоматический MTProxy может использовать Direct по истечении настроенной задержки, а затем вернуться к рабочему прокси-серверу. | Предпочтительно использовать настроенный внешний прокси-сервер или маршрут SOCKS5/HTTP учетной записи; в противном случае допускается использование прямого подключения. | | Сервер, расположенный за туннелем или VPN (`tunnel`) | Допускаются прямые маршруты и немедленное переключение на резервный пул. | Прямой доступ разрешён, если не настроено соответствующее прокси-сервер. | Режим «туннель» или «VPN» предполагает, что вы управляете этой сетью отдельно. Без работающего туннеля адресаты могут увидеть собственный адрес сервера. Выбирайте режим в соответствии с вашей фактической сетью, а не по названию опции. ### Выберите вариант | Маршрут | Настройки | Границы | | --- | --- | --- | | Автоматический MTProxy | Встроенные списки или каталог операторов | Поддерживается рабочий маршрут Telegram; выбор альтернативного варианта зависит от режима IP | | Прямой | Режим «Туннель» или «VPN» | Telethon использует сетевой маршрут хоста | | SOCKS5 | Хост, порт, опционально — имя пользователя/пароль | python-socks, поддержка удалённого DNS-адреса | | HTTP CONNECT | Хост, порт, опционально — имя пользователя/пароль | Используется простой HTTP-запрос CONNECT; поддержка TLS для самого прокси не реализована | | MTProxy | Хост, порт, секретный ключ | Экспериментальный формат передачи данных Telethon: 32 шестнадцатеричных цифры или «`dd`» + 32 шестнадцатеричных цифры | Поддельные секретные ключи TLS `ee` отклоняются. Функция нормализации в Telethon 1.45 может удалять префикс и домен, однако это не реализует механизм Fake TLS. Вставьте `tg://proxy?server=…&port=…&secret=…` или `https://t.me/proxy?server=…&port=…&secret=…` и выберите **«Заполнить поля из ссылки**». При этом происходит проверка и заполнение полей без установления соединения или сохранения; проверьте и сохраните маршрут отдельно. Поля для ручного ввода остаются доступными. См. [ссылки на прокси Telegram](https://core.telegram.org/api/links#proxy-links). ### Общедоступные прокси-серверы, предоставляемые вашей установкой Встроенный список объединяет четыре источника: [SoliSpirit/mtproto](https://github.com/SoliSpirit/mtproto), [zakky8/mtproto-proxy-pro](https://github.com/zakky8/mtproto-proxy-pro), [kort0881/telegram-proxy-collector](https://github.com/kort0881/telegram-proxy-collector) и [3yed-61/MTP-Collector](https://github.com/3yed-61/MTP-Collector). Включённый в комплект снимок содержит данные о конечных точках, информацию об источниках и даты загрузки. Наличие провайдера в списке не является доказательством того, что прокси работает или предоставляет все обновления Telegram. **MTProxy автоматически** проверяет работоспособность транспортного соединения Telegram, поддерживает рабочий прокси-сервер и переключается на другой в случае сбоя. Рабочие пространства предпочитают использовать разные прокси-серверы при наличии достаточного количества рабочих записей; уникальный выходной адрес не гарантируется. Неработающие прокси-серверы отдыхают перед повторной попыткой. Если ни один из них не работает, режим IP определяет, следует ли сбору данных подождать или можно использовать прямое соединение. Смена прокси-серверов не приводит к смене учётной записи или удалению её журнала. Выбор и изменения маршрутов фиксируются в подписанном журнале. Пока активны автоматические маршруты, списки обновляются ежечасно, а проверки каналов транспорта выполняются по умолчанию каждые десять минут. Эти интервалы можно настроить. **Обновление общедоступных списков** инициирует их перезагрузку; простой просмотр списка не изменяет сохраненный ручной маршрут. **Трафик Telegram и HTTPS-запросы используют разные маршруты.** Загрузка списков осуществляется через отдельное HTTPS-соединение и предоставленный маршрут внешних запросов. `TGWITNESS_PROXY_FEED_PROXY` явно переопределяет этот маршрут с помощью HTTP/SOCKS5-прокси; оба варианта сборщика Compose перенаправляют его. Фоновый пул следует за основным рабочим пространством. Ни сеансы Telegram, ни учетные данные API, ни токен панели, ни токен бота не передаются поставщикам данных. Названия поставщиков, даты создания моментальных снимков и маршрут загрузки указаны в разделе **«Откуда взят список**». MTProxy передаёт только трафик Telegram. HTTP-операции рабочего пространства, такие как временные метки, уведомления, внесайтовые копии и проверки источников, используют отдельный SOCKS5/HTTP-прокси, если он настроен, а затем — маршрут SOCKS5/HTTP аккаунта. При отсутствии того или другого «Скрыть адрес» отклоняет запрос; остальные режимы разрешают «Прямой». Внешние запросы можно отключить. Явно настроенный прокси для загрузки ленты остаётся отдельным переопределением оператора. Независимый сервис свидетелей использует свой собственный маршрут. Для частных сервисов, управляемых оператором, существующая настройка серверной среды `TGWITNESS_ALLOW_PRIVATE_DESTINATIONS=1` разрешает частные адреса назначения и сохраняет разрешение имен хостов на стороне прокси. Её нельзя включить через панель управления. Режим «только публичные» отклоняет адреса назначения в формате `.onion` перед отправкой запроса в публичный резолвер; для onion-сервисов Tor требуется явная настройка частных адресов назначения и подходящий прокси. Данное поведение DNS применимо к внешним HTTP-операциям, а не к транспортному протоколу Telegram. Cloudflare предоставляет документацию по [JSON-конечной](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/) [точке DNS](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/). ****Параметры автоматического пула**** В разделе «**Параметры» → «Автоматический MTProxy**» настройте порог сбоя, время ожидания, плановую ротацию, совместное использование прокси и допустимую задержку переключения на резервный сервер. | Контроль | По умолчанию | | --- | --- | | Отключается перед заменой | 3 в течение 10 минут | | Количество проб прокси-серверов на каждую попытку подключения | 3 | | Первый / максимальный перерыв после сбоя | 10 минут / 6 часов | | Планируемая ротация | Отключено; включить при сбое | | Учётные записи на один прокси | 0: предпочтительно создавать отдельные записи, объединять их при необходимости. Установите 1, чтобы дождаться появления эксклюзивной записи. | | Задержка перед разрешенным прямым переходом на резервный вариант | Протоколы 10; Скрытие адреса по-прежнему не работает Direct | | Обновление ленты / проверки передачи данных | Протоколы 60 / 10; значения основного рабочего пространства применяются к общему пулу | Использование разных прокси-серверов не гарантирует получения разных адресов выхода. Эти настройки не обходят ограничения Telegram и не обеспечивают анонимность. Чтобы заменить общедоступный список на свой собственный каталог операторов, настройте приведённую ниже переопределение. Это полностью отключает внешние подписки, в том числе в случае, когда массив `proxies` пуст. Скопируйте [пустой каталог](https://github.com/phishdestroy/TgWitness/blob/main/deploy/proxies.config.example) в папку «`proxy-config/proxies.json` » и добавьте ваши развернутые публичные конечные точки: ``` {"format": "tgwitness-proxy-catalog-v1", "proxies": [ {"id": "project-eu", "label": "Project EU", "link": "tg://proxy?server=REPLACE_HOST&port=443&secret=REPLACE_SECRET"} ]} ``` Примерные значения необходимо заменить. Допускается до 32 уникальных записей. Аутентифицированный список возвращает метки/хосты/порты без общих секретных ключей; при выборе одного из них его учетные данные сохраняются в хранилище рабочей среды. Доступность остается непроверенной до момента явно указанного теста транспорта. При наличии некорректно сформированного каталога допускается ручная настройка. Запуск в нативной среде: укажите `TGWITNESS_PROXY_CATALOG` в качестве локального пути к файлу JSON. Docker: ``` docker compose -f compose.yaml -f deploy/compose/compose.proxies.yaml up -d --build ``` Накладка монтирует каталог `proxy-config` в режиме «только для чтения»; файлы должны быть доступны для чтения контейнеру с UID 10001. Данный каталог исключён из Git, контекста сборки Docker и архивов исходного кода. В этом каталоге настраиваются учётные записи для сбора данных; [бот-свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/) использует собственный маршрут HTTP/SOCKS5, а не MTProxy. Прямой резервный вариант регулируется описанным выше IP-режимом. Приостановите наблюдение перед изменением маршрута. Сохранение отключает старые клиенты и отменяет незавершённый вход в систему; новый клиент использует сохранённый маршрут. Связь между учётной записью и журналом/сессией сохраняется. Настройки заменяют предыдущий маршрут: при их редактировании необходимо повторно ввести учетные данные прокси. Учетные данные шифруются с использованием алгоритма `network.enc`. API не возвращает имя пользователя, пароль или секретный ключ. Подписанные записи содержат тип маршрута и информацию о наличии учетных данных, исключая конечную точку и секретные ключи. Оператор может увидеть конечную точку в панели управления. Поля с секретными данными очищаются после сохранения, блокировки или переключения рабочих пространств. **Функция «Проверить соединение с Telegram»**, доступная также до входа в систему, открывает и закрывает временное неавторизованное соединение с Telegram через маршрут. Она не обращается к веб-сайту проверки IP-адресов. Успешное выполнение этой функции подтверждает наличие транспортного соединения, но не гарантирует доступ к группам, полную доставку сообщений или анонимность. Прокси применяется к соединениям клиента Telegram, включая загрузку медиафайлов из дата-центров Telegram. Для браузера, pip, SSH и запускаемых вручную инструментов TSA предусмотрены отдельные маршруты. Имя хоста прокси может разрешаться локально. `rdns` влияет на имена хостов назначения; Telegram часто предоставляет числовые IP-адреса дата-центров. Протоколы SOCKS5 и простой HTTP CONNECT сами по себе не шифруют учетные данные прокси-сервера или туннель «клиент-прокси». MTProto отдельно защищает трафик Telegram. Используйте соответствующий безопасный канал для подключения к прокси в ненадежной сети. Закрытые группы являются облачными чатами; протокол MTProto не преобразует их в секретные чаты с сквозным шифрованием. ## Шифрование и подписи | Уровень | Реализовано | Ответственность оператора | | --- | --- | --- | | Трафик Telegram | Telethon MTProto | Доверие к платформе, маршрутизация и доступность | | Веб-панель | Токен-носитель, настройка loopback по умолчанию, ограничения на количество запросов | HTTPS или SSH-туннель для удалённого доступа | | Секреты | Fernet для хранения учетных данных API, сеансов, учетных данных прокси и закрытого ключа для подписи | Обеспечьте защиту ключа дешифрования и хоста, на котором работает система | | Ключ хранилища | Локальный ключ или внешний мастер-ключ для новой установки | Отдельное защищённое хранилище и резервное копирование ключей | | Сообщения и вложения | Хранение приложений в виде открытого текста | Зашифрованный диск/том | | ZIP/JSONL/CSV/HTML | Проверка целостности данных, отсутствие шифрования содержимого | Защита экспортированных копий и передач данных | | Происхождение и время | Подписанный журнал, подтверждение обработки, инструменты в соответствии с RFC 3161 | Доверенный ключ, независимые контрольные точки/TSA и процедура хранения | В разделе**«Защита хранилища»** в учетной записи отображаются следующие состояния. Токен панели — это секретный ключ доступа, а не пароль для шифрования. Он предоставляет права администратора; [выданные токены](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) могут быть привязаны к конкретным учетным записям и чатам. Рабочие пространства используют общий хост-процесс и не являются изолированными арендаторами. BitLocker, LUKS, FileVault или управляемый зашифрованный том могут обеспечить защиту хранилища в рамках соответствующих моделей угроз. Администратор разблокированного работающего компьютера по-прежнему может прочитать данные. При планировании хранилища учитывайте файлы WAL/SHM баз данных SQLite, мультимедиа, временные экспортные файлы, файлы подкачки, резервные копии и загрузки из браузера. Том Docker не шифруется только по той причине, что он является томом. TgWitness не реализует шифрование SQLCipher или объектное шифрование. ## Внешний мастер-ключ При **новой** установке поместите главный ключ за пределами каталога данных. Это не приведёт к автоматическому переносу существующего хранилища с локальными ключами. Подготовьте каталог для ключей, доступный только для учетной записи службы, а затем выполните: ``` python -m tgwitness.security create-master-key /private/keys/tgwitness-master.key export TGWITNESS_VAULT_KEY_FILE=/private/keys/tgwitness-master.key python -m tgwitness --data-dir /private/observations/new-case ``` PowerShell с использованием установленной среды проекта: ``` python -m tgwitness.security create-master-key E:\PrivateKeys\tgwitness-master.key $env:TGWITNESS_VAULT_KEY_FILE = 'E:\PrivateKeys\tgwitness-master.key' python -m tgwitness --data-dir E:\PrivateData\new-case ``` В Docker смонтируйте файл в режиме «только для чтения» вне каталога `/data`, например, в каталоге `/run/secrets/tgwitness-master.key`, и задайте переменную среды с указанием этого пути. UID службы должен иметь права на чтение этого файла. Передавайте путь, а не байты ключа, через файлы среды/конфигурации. Каждое рабочее пространство получает случайный публичный солевой ключ (salt) и собственный ключ Fernet, полученный с помощью алгоритма HKDF-SHA256. В базе данных «`vault.external.json`» хранятся метаданные о выведении ключа, а не сам мастер-ключ. Отсутствие или неверность ключа приводит к сбою при запуске без автоматической замены. Сохраняйте как метаданные о солевом ключе, так и мастер-ключ для восстановления. Все рабочие пространства производятся от одного и того же мастер-ключа; его компрометация затрагивает всю инсталляцию. Запущенный процесс может расшифровывать секретные данные. Это не HSM и не KDF на основе пароля. Произвольные пароли, введенные пользователем, не допускаются вместо случайного ключа. Сохраняйте существующий ключ для действующих установок до тех пор, пока не будет осуществлена и проверена плановая миграция. Удаление `vault.key` или замена мастер-ключа может привести к потере доступа к сеансам/ключам подписи. Храните зашифрованные резервные копии и ключи отдельно и проверяйте возможность восстановления в изолированной среде. --- # Развёртывание TgWitness: Docker, HTTPS и резервирование Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/ Запускайте TgWitness в качестве службы на Windows, Linux, macOS или в Docker, через HTTPS, с резервным копированием и обновлениями. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Запускайте TgWitness в качестве службы на Windows, Linux, macOS или в Docker, через HTTPS, с резервным копированием и обновлениями. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) **Английский язык** · [Русский](https://github.com/phishdestroy/TgWitness/blob/main/docs/ru/DEPLOYMENT.md) · [Украинский](https://github.com/phishdestroy/TgWitness/blob/main/docs/uk/DEPLOYMENT.md) · [Español](https://github.com/phishdestroy/TgWitness/blob/main/docs/es/DEPLOYMENT.md) · [Португальский (Бразилия)](https://github.com/phishdestroy/TgWitness/blob/main/docs/pt/DEPLOYMENT.md) · [Türkçe](https://github.com/phishdestroy/TgWitness/blob/main/docs/tr/DEPLOYMENT.md) · [العربية](https://github.com/phishdestroy/TgWitness/blob/main/docs/ar/DEPLOYMENT.md) · [Фарси](https://github.com/phishdestroy/TgWitness/blob/main/docs/fa/DEPLOYMENT.md) · [Урду](https://github.com/phishdestroy/TgWitness/blob/main/docs/ur/DEPLOYMENT.md) · [Хинди](https://github.com/phishdestroy/TgWitness/blob/main/docs/hi/DEPLOYMENT.md) · [Индонезийский язык](https://github.com/phishdestroy/TgWitness/blob/main/docs/id/DEPLOYMENT.md) · [Tiếng Việt](https://github.com/phishdestroy/TgWitness/blob/main/docs/vi/DEPLOYMENT.md) · [Упрощённый китайский](https://github.com/phishdestroy/TgWitness/blob/main/docs/zh/DEPLOYMENT.md) ## Выберите вариант установки Для получения портативного пакета извлеките файл `TgWitness--windows-amd64-portable.zip` из GitHub Releases. Для других способов загрузите и распакуйте ZIP-архив с исходным кодом или клонируйте репозиторий, а затем выполните следующую команду из каталога проекта: | Установка | Начало | Работает в фоновом режиме? | | --- | --- | --- | | Портативный пакет для Windows | `TgWitness.cmd` | Нет; оставьте окно открытым. | | Встроенная версия для Windows | `Start.cmd` | Нет; для работы в фоновом режиме используйте дополнительную задачу входа в систему. | | Встроенная поддержка Linux/macOS | `sh start.sh` | Нет; для работы в фоновом режиме используйте systemd/launchd. | | Docker на любом поддерживаемом хосте | `docker compose up -d --build --wait` | Да, при условии, что работает демон Docker. | | Помощник по работе с Docker в Windows | `scripts\Docker.cmd` | Да; помощник отслеживает работоспособность веб-сервера. | | Помощник по работе с Docker в Linux/macOS | `sh scripts/docker-start.sh` | Да; помощник отслеживает работоспособность веб-сервера. | Что касается облачного сервера, доступ к которому должна иметь возможность проверить третья сторона — созданного с помощью API провайдера, без использования SSH, доступ к которому осуществляется исключительно через Cloudflare Tunnel — см. [раздел «Развертывание с высоким уровнем надежности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/)». При запуске создаётся частный файл `.venv` и устанавливаются закреплённые зависимости. Docker собирает их внутри образа, не требуя наличия Python на хосте. Для первоначальной настройки необходим доступ к Интернету. Если Python версии 3.11 или выше не обнаружен, `Start.cmd` запрашивает разрешение перед установкой Python 3.12 для текущего пользователя Windows (с помощью winget, в противном случае — с помощью установщика с сайта python.org после проверки подписи Python Software Foundation); при этом никогда не запрашиваются права администратора. Docker и службы операционной системы остаются обязательными предварительными условиями. При установке на локальном компьютере и в переносимом режиме используется папка «`data/live`» внутри соответствующей директории. В Docker используется том с именем «`tgwitness-data`», расположенный в «`/data`». Эти установки являются отдельными, пока вы сознательно не перенесёте весь каталог данных. Не ожидайте, что новый контейнер Docker автоматически обнаружит локальные учётные записи. ## Требования к установке Для установки из исходного кода требуется Python 3.11 или более поздней версии с модулями `venv` и `ensurepip`, доступ к Интернету для установки первых зависимостей, а также каталог проекта с правами на запись для `.venv`. Для работы панели, входящей в комплект, не требуется Node.js или сборка интерфейса. Запустите программу запуска из вашей обычной учётной записи в ОС; TgWitness не требует прав администратора или root. - **Windows:** `Start.cmd` проверяет `py -3`, затем `python`, далее — папки по умолчанию для каждого пользователя и установочные папки «Program Files», при этом требуется версия 3.11 или более поздняя. Если ни один из вариантов не сработает, предлагается автоматическая установка для каждого пользователя, описанная выше. Также работает `py -3 start.py`. Портативный пакет не требует установки Python. - **Linux:** `start.sh` пробует `python3.13`, `python3.12`, `python3.11`, `python3` и `python`, а также выводит команду установки для apt, dnf, pacman, zypper, apk или Homebrew, если ни одна из них не подходит. Для установки в Debian/Ubuntu может потребоваться пакет `python3-venv`, соответствующий выбранному интерпретатору. Устаревшую версию Python, установленную по умолчанию в дистрибутиве, необходимо заменить или дополнить версией Python 3.11+. - **macOS:** установите актуальный дистрибутив Python версии 3.11 или выше; не следует полагать, что интерпретатор, поставляемый с операционной системой, соответствует требованиям. Используйте файл `python3 start.py` из каталога проекта. - **Docker:** используйте Docker Engine/Desktop с Compose версии 2.20 или более поздней. Docker Desktop должен использовать контейнеры Linux в среде Windows. Контейнер устанавливает свои собственные зависимости Python; на хосте не требуется отдельная установка Python. ## Локальный компьютер Используйте `Start.cmd` в Windows или `sh start.sh` в Linux/macOS. Команды `scripts\Setup.cmd` или `sh start.sh --setup-only` обеспечивают подготовку среды. При первом запуске программа-запуска устанавливает необходимые зависимости; при последующих запусках используется уже подготовленная среда. Для настройки и сбора данных из Telegram требуется доступ к Интернету, однако просмотр существующих записей и создание экспортов возможны в автономном режиме. После настройки запустите команду `python start.py --check`, чтобы проверить локальные зависимости, алгоритм Ed25519, хранилище, конфигурацию ключей и адрес прослушивания без запуска сборщика данных. Используйте команду `--json` для получения структурированного вывода. Передайте соответствующие команды `--data-dir`, `--host` и `--port`. Данная проверка не предусматривает установку пакетов, создание журнала или подключение к Telegram; она не является проверкой целостности или полноты охвата. При запуске отдельно проверяются существующие журналы. Команда `python start.py --help` также позволяет избежать установки. После запуска start.py выполните вспомогательные команды с параметром `.venv\Scripts\python.exe` в Windows или `.venv/bin/python` в Linux/macOS, либо сначала активируйте эту среду. Приведенные ниже примеры с параметром `python -m ...` предполагают, что среда уже активна. ``` python -m tgwitness --data-dir /path/to/private/data --host 127.0.0.1 --port 8787 ``` Переменные среды: TGWITNESS_DATA, TGWITNESS_HOST, TGWITNESS_PORT, TGWITNESS_TOKEN. TGWITNESS_VAULT_KEY_FILE выбирает режим внешнего ключа для новой установки; см. ниже. TGWITNESS_TOKEN, если указан, должен содержать не менее 24 символов; используйте криптографически случайное значение. При его отсутствии приложение генерирует 256-битный случайный токен в файле panel-token.txt. Переопределение переменных среды не приводит к перезаписи этого файла. Перезапустите систему для смены учетных данных. Каталог данных может принадлежать ровно одному процессу. Кроссплатформенная блокировка файлов на уровне ОС предотвращает случайные одновременные записи. Используйте один рабочий процесс Uvicorn. Панель управления может управлять любым количеством рабочих пространств, при этом дополнительные каталоги рабочих пространств располагаются в папке profiles//. Для отдельных экземпляров службы используйте отдельные каталоги и порты. Файлы WAL базы данных SQLite должны храниться в локальном постоянном хранилище, а не в сетевой файловой системе. Не используйте один том совместно для нескольких реплик. ## Портативный пакет для Windows Каждый релиз на GitHub содержит `TgWitness--windows-amd64-portable.zip` и его `.sha256`. Он включает официальную встраиваемую среду выполнения Python 3.12 с сайта python.org (контрольная сумма зафиксирована в `tools/build_portable.py`), TgWitness и его зафиксированные зависимости, а также три программы запуска: | Файл | Цель | | --- | --- | | `TgWitness.cmd` | Запустите панель; дополнительные параметры передаются напрямую, например, `TgWitness.cmd --port 8790` | | `TgWitness-Demo.cmd` | Запустите синтетическую демонстрацию по ссылке `data\demo` | | `TgWitness-Check.cmd` | Запустите проверку готовности, не запуская программу | Закреплённый словарь русской морфологии и цветовые профили PDF включены в пакет для офлайн-использования. Упаковка допускает только известные пути к файлам внутри каталогов зависимости `data`; наличие неожиданных файлов в этих каталогах приводит к сбою сборки. Распакуйте весь архив в папку с правами на запись, например `Documents\TgWitness`; не запускайте программу из ZIP-архива или из папки «Program Files». Среда выполнения использует изолированный путь к модулям, поэтому другие установки Python и `PYTHONPATH` не влияют на её работу. Данные хранятся в папке «`data`» данного пакета. Для обновления остановите TgWitness, распакуйте новую версию в новую папку и скопируйте туда папку «`data`». Скомпилируйте его самостоятельно на 64-разрядной версии Windows с использованием Python 3.12: ``` python tools/build_portable.py ``` ## Контейнер ``` docker compose up -d --build --wait ``` При этом создаётся именованный постоянный том для каталога /data. Веб-порт сопоставляется с адресом 127.0.0.1:8787. Процесс запускается с UID 10001 с ограниченными правами, корневой файловой системой, доступной только для чтения, а также доступными для записи каталогами /data и /tmp. `--wait` проверяет работоспособность веб-сервера перед возвратом результата; он не осуществляет авторизацию в Telegram и не обеспечивает доставку сообщений. Предоставленные вспомогательные программы используют таймаут готовности в 180 секунд после сборки. Первоначальная загрузка зависимостей может занять больше времени. Оба базовых файла Compose используют название проекта «`tgwitness`», поэтому при распаковке нового выпуска в другой каталог не происходит автоматического выбора нового тома данных. Сохраняйте активным только одно развертывание для данного проекта. Для независимых установок используйте уникальное имя « `docker compose -p NAME ...`» и другой порт хоста, а при обновлениях сохраняйте оба. Для более старого развертывания, использующего другое название проекта, продолжайте использовать его исходное название с `-p`; команда `docker compose ls` выводит список существующих проектов. Скопируйте `deploy/env.example` в `.env` и измените `TGWITNESS_PORT`, чтобы использовать другой порт обратной связи. Например, `TGWITNESS_PORT=8788` открывает доступ к панели управления по адресу `http://127.0.0.1:8788`; контейнер по-прежнему прослушивает порт 8787. `.env` игнорируется в Git. Получите начальный токен: ``` docker compose exec tgwitness cat /data/panel-token.txt ``` Полезные команды: ``` docker compose ps docker compose logs --tail 100 -f docker compose stop docker compose up -d --wait ``` `restart: unless-stopped` перезапускает сборщик данных после сбоя или перезапуска демона Docker. На сервере под управлением Linux включите запуск Docker при загрузке с помощью диспетчера служб вашего дистрибутива, обычно это `sudo systemctl enable --now docker`. В Windows/macOS включите настройку «Запуск при входе в систему» в Docker Desktop. Выход из системы, переход в режим сна или остановка демон Docker могут прервать сбор данных. Явно остановленный контейнер остаётся остановленным до тех пор, пока вы не запустите его заново. В приведённой конфигурации размер тома /tmp ограничен 512 MiB. При экспорте вместо этого используется `temporary-exports/` каждого рабочего пространства в постоянном каталоге /data. Зарезервируйте место там для одновременных экспортов, роста журнала/WAL, мультимедиа и резервных копий. Программа запуска использует файл deploy/constraints.txt для фиксации соответствующих версий зависимостей среды выполнения. Установка Docker и серверов с высоким уровнем надежности осуществляется на основе файлов deploy/requirements.lock и deploy/build.lock с использованием команды pip --require-hashes: каждый файл пакета должен соответствовать значению SHA-256, зафиксированному в коммите, поэтому файл, заменённый на PyPI или в зеркале, будет отклонен. Базовый образ Python и пакеты операционной системы по-прежнему требуют независимой квалификации выпуска. Не используйте команду `docker compose down -v`, если только вы не намерены уничтожить журнал и ключи. Отчеты о работоспособности контейнера отражают доступность веб-сервера, а не успешность сбора данных из Telegram. Проверьте состояние коллектора на панели управления, наличие сигналов о работоспособности, ошибки и события, связанные с охватом. ### Профиль независимого свидетеля Дополнительный сервис `witness` запускает [независимый «свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/)» в собственном контейнере с собственным ключом и журналом в томе `witness-data`, а для сборщика предоставляется только токен «свидетеля» с правом только на чтение. Создайте токен на странице **«Witness»** панели управления, добавьте его вместе с токеном бота и каналом в `.env`, а затем запустите профиль: ``` docker compose --profile witness up -d # deploy/compose/compose.image.yaml: same flag docker compose logs witness # witness key fingerprint ``` Сервис подключается к сборщику внутри сети Compose по адресу `http://tgwitness:8787` (`TGWITNESS_WITNESS_COLLECTOR` переопределяет его; например, `/profiles/` для другого рабочего пространства). Для свидетеля на отдельном сервере, управляемом другим лицом, используйте `deploy/compose/compose.witness.yaml` , указав в `TGWITNESS_WITNESS_COLLECTOR` HTTPS-адрес сборщика; этот файл содержит только свидетель. ## Установите опубликованный образ Скопируйте `deploy/env.example` в `.env`. Установите `TGWITNESS_IMAGE` в значение опубликованной версии, используя путь к репозиторию **в нижнем регистре**, например: ``` TGWITNESS_IMAGE=ghcr.io/your-owner/your-repository:0.9.1 TGWITNESS_PORT=8787 ``` Запустите этот файл самостоятельно вместо `compose.yaml`: ``` docker compose --project-directory . -f deploy/compose/compose.image.yaml pull docker compose --project-directory . -f deploy/compose/compose.image.yaml up -d --wait docker compose --project-directory . -f deploy/compose/compose.image.yaml exec tgwitness cat /data/panel-token.txt ``` На хосте не требуется сборка исходного кода, Python или компилятор. Процесс выпуска предназначен для контейнеров Linux AMD64 и ARM64, включая виртуальную машину Linux в Docker Desktop. Используйте тег версии или `ghcr.io/owner/repository@sha256:...` из сводки рабочего процесса. Не настроено ни перемещение тега `latest`, ни автоматическое обновление приложения. Образ и варианты исходного кода используют один и тот же том данных, если их названия проектов совпадают. ## Автоматическая активация HTTPS на сервере Используйте сервер с Docker, домен, находящийся под вашим контролем, и постоянное локальное хранилище. Настройте записи A/AAAA домена на сервер; публикуйте запись AAAA только в том случае, если к серверу осуществляется доступ по протоколу IPv6. Разрешите входящий трафик по портам TCP 80 и 443, а также исходящий трафик DNS/HTTPS для выдачи сертификатов. Эти порты не должны быть заняты другими службами. Скопируйте `deploy/env.example` в `.env` и укажите имя хоста без схемы или пути: ``` TGWITNESS_DOMAIN=watch.your-domain.org ``` Запустите сборку исходного кода с использованием HTTPS-оверлея: ``` docker compose -f compose.yaml -f deploy/compose/compose.https.yaml up -d --build --wait docker compose -f compose.yaml -f deploy/compose/compose.https.yaml exec tgwitness cat /data/panel-token.txt ``` ``` docker compose --project-directory . -f deploy/compose/compose.image.yaml -f deploy/compose/compose.https.yaml up -d --wait ``` Для опубликованного изображения вместо этого используйте `deploy/compose/compose.image.yaml` в качестве первого файла. Сохраните оба аргумента `-f` для последующих команд status, logs, update и stop. Caddy получает и обновляет сертификат, перенаправляет HTTP-соединения на HTTPS и пересылает запросы коллектору в частной сети Compose. Состояние сертификата хранится в отдельном постоянном томе. Порт хоста коллектора, к которому осуществляется прямое подключение, остается доступным только для локального цикла. В предоставленной конфигурации Caddy регистрация доступа не включена. Откройте `https://watch.your-domain.org` и введите токен панели. Готовность к работе не подтверждает выдачу сертификата или доступность извне. Если HTTPS не готов, проверьте DNS, правила брандмауэра, а также: ``` docker compose -f compose.yaml -f deploy/compose/compose.https.yaml logs --tail 100 caddy ``` Предоставленный образ Caddy соответствует тегу `2-alpine`. При выполнении команды «pull» этот образ обновляется; если вам требуются фиксированные версии инфраструктуры, закрепите проверенный дайджест в своей среде развертывания. ## Обновления и резервное копирование Сохраните название проекта Compose и объём данных при обновлениях. Сначала остановите коллектор и создайте полную резервную копию. Для развёртывания по умолчанию на основе исходного кода: ``` docker compose stop docker compose cp tgwitness:/data ../tgwitness-backup-before-update ``` Каждый раз используйте новое место для резервного копирования, находящееся за пределами репозитория, и защищайте его как материал, требующий доступа к учетной записи. Приведённый пример пути носит иллюстративный характер; используйте своё собственное место для резервного копирования. Скопируйте весь каталог, включая скрытые файлы, все рабочие пространства, ключи, журналы и мультимедийные файлы. Если настроен, отдельно создайте резервную копию главного ключа внешнего хранилища. ZIP-архив с доказательствами не является восстанавливаемой резервной копией приложения. В случае использования HTTPS также сохраните тома Caddy, если вам необходимо сохранить состояние его сертификата или учётной записи. Для развёртывания исходного кода загрузите файлы новой версии и выполните следующую команду: ``` docker compose up -d --build --wait ``` Для развёртки образа замените `TGWITNESS_IMAGE` на нужную версию, а затем выполните: ``` docker compose --project-directory . -f deploy/compose/compose.image.yaml pull docker compose --project-directory . -f deploy/compose/compose.image.yaml up -d --wait ``` Используйте файл(ы) Compose вашей установки также для приведённых выше команд stop/copy. Сохраните `.env`, пользовательскую конфигурацию и то же название проекта. `down` сохраняет именованные тома; **`down -v` удаляет их**. Не копируйте `.venv` между операционными системами или версиями Python. Для обновления исходного кода остановите TgWitness, создайте резервную копию всего каталога данных , замените исходные файлы и запустите `python start.py --setup-only` перед запуском. Проверьте доступ к панели управления, идентификационные данные учётной записи, статус наблюдения и охват данных после обновления. Перезапуск не восстанавливает пропущенные обновления Telegram. Для отката может потребоваться резервная копия, созданная до обновления, если в будущей версии будут изменены форматы хранения данных. ## Удалённый сервер Обеспечьте, чтобы сервис работал в режиме loopback и использовал SSH-туннель, либо завершайте соединение HTTPS на обратном прокси-сервере. Базовый файл Compose предназначен исключительно для локального использования; дополнительный оверлей `deploy/compose/compose.https.yaml` предоставляет Caddy для настроенного домена. Не допускайте появления токена bearer в URL-адресах и журналах прокси-сервера. Обратный прокси-сервер должен ограничивать размер запросов и частоту подключений. Не допускайте открытого доступа к простому HTTP из Интернета. Примеры для systemd, задачи входа в Windows, пользовательского агента macOS и Caddy находятся в [deploy/](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md). Перед установкой проверьте и настройте пути. Это готовые шаблоны, а не подтверждение проверки на каждой из этих платформ. Обычный запуск приложения не регистрирует фоновые службы или задачи. В Windows при запуске `pythonw.exe` без окон диагностические данные о запуске и работе сервера сохраняются в `logs/server.log` в каталоге данных (5 МБ на файл, две сменяющиеся резервные копии). При запуске в консольном режиме сохраняются консольные журналы. Регистрация доступа по HTTP отключена в обоих режимах. Защищайте журналы вместе с каталогом данных и проверяйте их перед передачей. ## Перезапуск и пробелы Сохраняется последнее запрошенное состояние наблюдения. Если наблюдение было активным, при запуске происходит попытка повторного подключения и возобновления работы с выбранными источниками. Ручная пауза отменяет это намерение. Неудачная попытка перезапуска регистрируется и отображается на панели. StringSession сохраняет авторизацию, но не сохраняет устойчивое состояние обновлений/сущностей Telethon. Диалоги перезагружаются при запуске. Telegram/Telethon могут восстанавливать некоторые сбои в передаче данных во время работы, однако TgWitness не гарантирует устойчивого воспроизведения данных после перезапуска процесса. При каждом запуске записывается предыдущая начальная точка журнала и граница автономного режима. Монитор проверяет подключение каждые 10 секунд и добавляет сигнал активности каждую минуту (**Параметры → «Запись активности каждые**»). Кратковременные перебои могут быть пропущены; наличие подключения не гарантирует полной доставки обновлений. Снимки представляют собой явные наблюдения текущей истории, а не восстановление пропусков. Очередь медиафайлов хранится в базе данных SQLite каждого рабочего пространства. Сообщение и соответствующее задание фиксируются атомарно. Прерванные выполняющиеся задания восстанавливаются для повторной попытки при запуске. Каждая загрузка имеет базовый таймаут в 120 секунд плюс время, рассчитанное исходя из скорости 256 КиБ/с в зависимости от размера файла, а также ограничение в 1–2 000 МиБ на каждый тип вложения; настройки таймаута, скорости и повторных попыток находятся в разделе **«Параметры**». Коллектор пропускает файлы с неизвестным размером. При приостановке работы задания в очереди сохраняются. При повторной попытке используется исходный наблюдаемый дескриптор файла, а не последняя версия сообщения, отредактированная впоследствии. Временные сбои имеют ограниченное количество попыток; паузы FloodWait для мультимедиа сохраняются после перезапуска. Восстановление мультимедиа осуществляется отдельно от восстановления обновлений Telegram и не позволяет воссоздать исчезнувшие файлы. ## Резервное копирование, восстановление и емкость Остановите процесс до того, как будет скопирован **весь каталог данных**, включая файлы vault.key, signing.enc, credentials.enc, базу данных SQLite и файлы WAL, мультимедиа, токен, контрольные точки, а также все профили и подкаталоги. Восстановите полную копию, пока целевой сервис остановлен. Отсутствие ключей хранилища или несоответствие ключей подписи приводят к сбою запуска; не генерируйте ключи заново, чтобы принудительно получить доступ. Храните секретные резервные копии в зашифрованном виде с контролем доступа. ZIP-архивы с доказательствами представляют собой переносимые артефакты для анализа, а не резервные копии приложения или сеансов Telegram. Автоматического удаления данных по истечении срока хранения не предусмотрено. Запланируйте дисковое пространство для всех сообщений, исходных метаданных, мультимедиа, временных экспортов и резервных копий. При запуске осуществляется проверка и экспорт записей потока вместо загрузки всего журнала целиком. Экспорт фиксирует моментальный снимок прочитанных данных, в то время как запись новых данных в WAL может продолжаться; при длительном экспорте страницы WAL могут сохраняться, поэтому объём дискового пространства по-прежнему имеет значение. Размер ZIP-архивов ограничен 4 ГиБ в несжатом виде в соответствии со значением по умолчанию независимого верификатора; **Параметры → «Наибольший подписанный ZIP-архив»** позволяет увеличить этот предел, и такие архивы проверяются с помощью `verify.py --max-gib N`. Для других форматов ограничения по количеству событий отсутствуют. Поддерживаемые браузеры передают фрагменты ответа в потоковом режиме в файл, выбранный пользователем. Другие браузеры буферизуют не более 128 MiB и направляют более объёмные передачи в авторизованный CLI: ``` python -m tgwitness.download --token-file data/live/panel-token.txt --out evidence.zip ``` Используйте `--profile ID` из **меню «Экспорт» → «Идентификатор рабочей области»** для другой рабочей области, `--format zip|jsonl|csv|html`, `--url https://your-server` для удалённого сервера или `--max-mib`, чтобы изменить ограничение на передачу данных в 5 ГиБ. Использование простого HTTP допускается только для петлевого соединения. Токены передаются в заголовках, перенаправления не допускаются, существующие файлы не перезаписываются, а незавершённые загрузки не публикуются как завершённые файлы. Если TGWITNESS_TOKEN переопределяет сгенерированный токен, используйте отдельно защищённый файл, содержащий это активное значение: файл panel-token.txt не перезаписывается при переопределении. SHA-256 команды является лишь контрольной суммой передачи; независимо проверьте подписанный ZIP-архив. На панели отображаются медиафайлы в очереди или с ошибками, самые старые медиафайлы в ожидании, свободное место на диске, паузы в запросах Telegram, а также источники, доступ к которым не подтверждён. Данные диагностические показатели не являются полноценным средством сквозного мониторинга доставки. Рабочие пространства используют общий процесс; активность одного аккаунта может всё же повлиять на работу других. Сохраняются отдельные рабочие процессы, хранение/ротация данных, надежное восстановление обновлений и полная квалификация развертывания. Доступ к панели с ограниченным охватом задокументирован в разделе [«Доступ и разрешения»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/); независимые контрольные точки описаны в [руководстве для свидетелей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/). Подробные инструкции: [подключение/безопасность](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) и [режимы работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/). --- # Phala и Intel TDX: аттестация сборщика Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/ Защищённый сервер, работающий круглосуточно на Hetzner или Phala Cloud, шлюзовой DNS и проверки, которые может повторить любая третья сторона. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Translation coverage: this edition includes material from the English original. Защищённый сервер, работающий круглосуточно на Hetzner или Phala Cloud, шлюзовой DNS и проверки, которые может повторить любая третья сторона. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) Развертывание с высоким уровнем надежности добавляет независимые проверки среды сбора данных к проверке архива. Рецензент запрашивает записи о развертывании и доступе, хранящиеся у поставщика облачных услуг и Cloudflare, а развертывание с использованием Intel TDX добавляет аппаратную аттестацию среды сборщика данных. Обычное использование локальной среды и Docker остаётся без изменений. Ничто здесь не запускается, пока вы не выполните развёртывание с помощью `python -m tgwitness.cloud`, а сборщик считывает данные с хоста только тогда, когда развертывание устанавливает `TGWITNESS_ASSURANCE`. Блок-схема · Оператор → Сервер, брандмауэр без правил входящего трафика (API провайдера); Оператор → Туннель и DNS (API Cloudflare); Сервер, брандмауэр без правил входящего трафика → Туннель и DNS (только исходящие сообщения); Сервер, брандмауэр без правил входящего трафика → Ключ подписи, созданный на сервере; Verifier, токены только для чтения → Журнал провайдера и брандмауэр; Verifier, токены только для чтения → Адрес туннельного коннектора и входной трафик; Verifier, токены только для чтения → Подписанное заявление /api/assurance; Verifier, токены только для чтения → Архив доказательств в формате ZIP · Оператор · Verifier, токены толькодля чтения · Сервер, брандмауэр безправил входящего трафика · Журнал провайдера ибрандмауэр · Адрес туннельногоконнектора и входнойтрафик · Подписанное заявление/api/assurance · Архив доказательств вформате ZIP · Туннель и DNS · Ключ подписи, созданный насервере · API провайдера · API Cloudflare · только исходящие сообщения **Схема в текстовом формате** 1. Оператор → Сервер, брандмауэр без правил входящего трафика (API провайдера) 2. Оператор → Туннель и DNS (API Cloudflare) 3. Сервер, брандмауэр без правил входящего трафика → Туннель и DNS (только исходящие сообщения) 4. Сервер, брандмауэр без правил входящего трафика → Ключ подписи, созданный на сервере 5. Verifier, токены только для чтения → Журнал провайдера и брандмауэр 6. Verifier, токены только для чтения → Адрес туннельного коннектора и входной трафик 7. Verifier, токены только для чтения → Подписанное заявление /api/assurance 8. Verifier, токены только для чтения → Архив доказательств в формате ZIP **На этой странице** - [Что может проверить верификатор](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#what-a-verifier-can-check) - [Провайдеры](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#providers) - [Конфиденциальная виртуальная машина на Phala Cloud (Intel TDX)](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx) - [Перед началом работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#before-you-start) - [Из панели](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#from-the-panel) - [Быстрый туннель без домена](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#quick-tunnel-without-a-domain) - [Развертывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#deploy) - [Отладка развертывания и блокировка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#debug-deployment-and-lock) - [Удалить развертывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#remove-a-deployment) - [Любой сервер (самосертифицированный)](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#any-server-self-attested) - [Проверить](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#verify) - [Отчет о передаче доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#report-for-evidence-handover) - [Cloudflare в качестве внешнего свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#cloudflare-as-an-outside-witness) - [Чтение результатов развертывания](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#reading-the-deployment-result) ## Что может проверить верификатор | Заявление | Как это проверяется | Ведёт | | --- | --- | --- | | Сервер был создан с помощью API провайдера в известный момент времени | Объект «Сервер» и его создание в собственном журнале провайдера | Провайдер | | Никто не использовал пути доступа провайдера | Журнал консольных запросов, восстановление, сброс пароля, перекомпиляция, ISO, образы, резервные копии | Провайдер | | Ничто не смогло подключиться к нему | В брандмауэре провайдера отсутствуют правила входящего трафика; SSH скрывается с момента первой загрузки | Провайдер (брандмауэр), хост (SSH) | | Доступ к панели осуществляется только через туннель | Входящий трафик через туннель перенаправляется исключительно на панель; коннектор запускается с адреса сервера | Cloudflare | | Именно это программное обеспечение работает | Подписанный хеш дерева исходного кода коллектора совпадает с хэшем коммита, развернутого в производственной среде. | Collector, сверка с Git | | Ключ подписи был создан на этом сервере | Ключ подписывает заявление, в котором указываются идентификатор сервера провайдера и хеш полученного им файла cloud-init. | Collector, проверенный провайдером | | Журнал принадлежит этому ключу и серверу | Каждый запуск процесса в доказательстве ZIP содержит показатели хоста для данного сервера | Доказательства ZIP | Коллектор записывает состояние SSH, сеансы, историю входа в систему и информацию о загрузке в подписанные записи process-start и `host.state`. На обычной виртуальной машине это локальные инвентарные записи, которые эксперт сравнивает с независимыми записями провайдера. Приведенное ниже развертывание Intel TDX дополнительно проверяет измерения, основанные на аппаратных средствах. ## Провайдеры | `--provider` | Учетные данные | Доступ Verifier только для чтения | Журнал провайдера для верификатора | Хранится для | | --- | --- | --- | --- | --- | | `hetzner` | `HCLOUD_TOKEN` | Прочитать токен того же проекта | Действия сервера и брандмауэра | Пока эти ресурсы существуют | | `digitalocean` | `DIGITALOCEAN_TOKEN` | Личный токен доступа только для чтения | Действия Droplet | Пока Droplet существует | | `linode` | `LINODE_TOKEN` | `linodes`, `firewall`, `events` области, доступные только для чтения | События учетной записи, версии правил брандмауэра | 90 дней | | `vultr` | `VULTR_API_KEY` | Пользователь с доступом на чтение и `activity_logs` разрешением | Журнал активности аккаунта (метод, путь, участник) | 30 дней, а с подпиской на журнал аудита — дольше | | `aws` | `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` | `ec2:DescribeInstances`, `ec2:DescribeSecurityGroups`, `cloudtrail:LookupEvents` | История событий CloudTrail | 90 дней | | `phala` | `PHALA_CLOUD_API_KEY` | API-ключ того же рабочего пространства | Версии приложений и операции с CVM: изменения конфигурации и среды Docker Compose, перезапуски, обновления ОС | Пока приложение существует | | `generic` | нет | нет | нет: **самоподтверждённый** | – | Используйте отдельный проект, команду, аккаунт или субаккаунт для каждого дела: тогда у верификатора будет доступ только для чтения, и он увидит только эту развертку. Учетные данные считываются из `--provider-token-file` или из указанной выше переменной, но ни в коем случае не из командной строки. Для AWS в файле указывается `ACCESS_KEY_ID SECRET_ACCESS_KEY [SESSION_TOKEN]`; регион — `--location`. В каждом отчёте указывается, какую информацию не могут отобразить записи каждого провайдера. Короче говоря: Hetzner регистрирует запросы консоли; консоль восстановления DigitalOcean, Lish/Glish от Linode и веб- консоль Vultr не регистрируются как таковые, поэтому доступ root блокируется при первой загрузке, и для входа в консоль требуется сброс пароля или изменение параметров загрузки, которые регистрируются. Vultr возвращает адрес консоли при нажатии любой клавиши, позволяющей прочитать данные инстанса; ни в записи, ни в отчёте он не сохраняется. ## Конфиденциальная виртуальная машина на Phala Cloud (Intel TDX) При этом `--provider phala` коллектор работает в конфиденциальной виртуальной машине Intel TDX на [Phala Cloud](https://phala.com/), управляемой dstack. Хост и сотрудники Phala не могут читать её память, а процессор подписывает подтверждение того, что именно загрузила машина. Верификатор не доверяет Phala на слово: `tgwitness.tdx` самостоятельно проверяет каждое подтверждение, вплоть до закрепленного корневого центра сертификации Intel SGX, по спискам отзывов Intel и подписанным Intel данным о платформе, и отклоняет машины, которые могут быть отлажены или перенесены. | Запись отчёта | Что здесь показано | | --- | --- | | `tdx_binding` | Аттестация охватывает подписанное заявление сборщика и случайное значение данного запроса. | | `tdx_quote` | Intel подтверждает достоверность аттестации; она считается пройденной только в том случае, если Intel оценивает платформу как актуальную. | | `tdx_compose_hash` | RTMR3, воспроизводимый из журнала событий dstack, измеряет количество сообщений, составленных в приложении, о которых сообщает сборщик данных. | | `tdx_compose` | Этот код байт за байтом соответствует коду, скомпилированному из развернутого коммита: исходные файлы закреплены по хешу, оба изображения — по дайджесту, другого кода нет | | `tdx_identity` | Аттестация поступает от развернутого приложения и экземпляра с использованием ключей из KMS Phala и зашифрованного диска. | | `tdx_os` | Значения MRTD и RTMR0-2 соответствуют значениям, рассчитанным верификатором на основе образа ОС dstack, публикуемого Dstack-TEE, определённого по хешу образа ОС, сообщаемому CVM, а также на основе таблиц ACPI, формируемых QEMU для конфигурации виртуальной машины: прошивка, ядро, initrd, командная строка с хешем корневой файловой системы, память, виртуальные процессоры и устройства. Образ для разработки не проходит проверку | The OS image (about 180 MB, of which 21 MB are kept) is downloaded once from [Dstack-TEE/meta-dstack](https://github.com/Dstack-TEE/meta-dstack/releases) into `dstack-images` beside the record; `--tdx-image FOLDER` uses another folder or an unpacked image, `--tdx-image none` skips the comparison. The measurement follows `dstack-mr` and the `qemu-acpi` crate of Dstack-TEE/dstack. Private measurement regressions compare QEMU's own ACPI output and a retained Phala Cloud quote; live qualification also needs the published image. `--tdx-measurements` still compares MRTD and RTMR0-2 given as JSON instead. Каждый запуск коллектора, зафиксированный в журнале, сопровождается таким подтверждением, поэтому `verify --evidence` проверяет каждый запуск и образ ОС, с которого он был загружен. Ревизии приложений Phala и операции CVM служат в качестве журнала поставщика: изменение конфигурации Docker Compose после развертывания приводит к отклонению отчета, а перезапуски фиксируются для последующего анализа. В панели выберите **«Конфиденциальная виртуальная машина · Phala Cloud»** в разделе **«Дополнительно»** → **«Сервер 24/7»** и вставьте ключ API Phala Cloud; быстрый туннель работает так же, как на Hetzner. Из командной строки: ``` python -m tgwitness.cloud deploy --provider phala --name case-1 --server-type tdx.small \ --ref v0.8.0 --repository https://github.com/phishdestroy/TgWitness --quick-tunnel \ --provider-token-file phala-key.txt python -m tgwitness.cloud verify --record deployments/case-1/deployment.json \ --provider-token-file phala-key.txt --cloud-init deployments/case-1/docker-compose.yaml \ --source CHECKOUT_OF_COMMIT --fingerprint COLLECTOR_FINGERPRINT --report certificate.md python -m tgwitness.cloud check-report --report certificate.pdf --verifier-fingerprint VERIFIER_KEY ``` `--tdx-collateral` считывает сертификаты и списки отзывов Intel из файла, а не загружает их с сайта Intel. Шлюз DNS здесь недоступен: у Phala нет провайдерского брандмауэра для исходящего трафика. ### Сертификат аттестации При развёртывании Phala `verify --report certificate.md` также записывает сертификат: автономный файл `certificate.html` и файл формата A4 `certificate.pdf`, содержащий заключение, цепочку доверия от корневого сертификата Intel до ключа сборщика, сравнение с обычными серверами и серверами повышенной надёжности, результаты измерений рядом со значениями, рассчитанными на основе опубликованного образа, информацию о том, кто ручается за каждую часть, цепочку сертификатов Intel, все проверки, журнал поставщика, а также инструкции по повторению проверки. Отчёт в формате JSON остаётся авторитетным документом; страницы отображают его содержимое. Отчёт заверяется цифровой печатью; данные заверения находятся в `certificate.seal.json` и соседних файлах `.tsq`/`.tsr`: | Печать | Что это добавляет | | --- | --- | | Квалифицированная электронная временная метка, `http://tsa.belgium.be/connect` | Метка времени RFC 3161 для точной последовательности байтов `certificate.json`, выданная квалифицированным поставщиком доверенных услуг федерального правительства Бельгии (FPS Policy and Support, BOSA). Его подразделение включено в бельгийский доверенный список ЕС как квалифицированная служба меток времени со статусом granted; корневой сертификат (Belgium Root CA6) и записи списка по состоянию на выпуск от 20 октября 2026 года закреплены в `tgwitness/tsa_roots.py`. Согласно статье 41 Регламента (ЕС) № 910/2014 такая метка времени пользуется презумпцией точности даты и времени и целостности связанных данных во всех государствах — членах ЕС | | Метка времени по RFC 3161, FreeTSA | Вторая, независимая отметка времени | | Подпись верификатора | Ed25519 над текстом, содержащим SHA-256 отчёта и каждую метку времени, с использованием собственного ключа верификатора (`--sign-with FOLDER`, по умолчанию `~/.tgwitness/verifier`); PDF-файл содержит подпись, сгенерированную тем же ключом | `--timestamp URL` (повторяемый) выбирает другие центры сертификации, `--timestamp none` — ни один, `--sign-with none` оставляет печать неподписанной. `check-report` проверяет хеш отчёта, подпись верификатора, каждую временную метку относительно доверенного корня и её квалифицированный статус, а также подпись PDF-файла. Юридическая сила квалифицированной временной метки за пределами ЕС, а также отчёта в целом, определяется судом или органом власти, получающим данный документ; печать подтверждает момент создания отчёта и отсутствие в нём изменений. Аттестация не может исключить наличие уязвимости в модуле TDX или микрокоде Intel, а также физический доступ к шине памяти. Тот, кто контролирует приложение в аккаунте Phala, может развернуть другой компоуз; он отображается как новая ревизия с новым хешем компоуза. Хост контролирует источник времени машины и сеть. Развёртывание, проверка с `--evidence`, перезапуски, сравнение образа ОС, заверение сертификата и удаление проверены непосредственно на Phala Cloud; см. [прогон от 4 ноября 2026 года](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#live-phala-cloud-deployment--4-november-2026). ## Прежде чем начать 1. Зона Cloudflare, её ID учётной записи и токен API с правами **Cloudflare Tunnel Edit**, **Zone Read** и **DNS Edit**, указанные с помощью `--cloudflare-token-file` или `CLOUDFLARE_API_TOKEN`. Для верификатора: **права Cloudflare Tunnel Read**, **DNS Read** и, для журнала аудита, **Account Settings Read**. Без домена для [быстрого туннеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#quick-tunnel-without-a-domain) ничего из этого не требуется. 2. Учетные данные провайдера с правом записи в выделенный проект; `lock` использует то же самое: - Hetzner: токен API с правами на чтение и запись; - DigitalOcean: личный токен доступа с правом записи; - Linode: личный токен доступа с `linodes`, `firewall` и `events` областями доступа «чтение/запись»; - Vultr: ключ API выделенного аккаунта или суб-аккаунта; - AWS: разрешены учетные данные IAM `ec2:DescribeVpcs`, `ec2:DescribeImages`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:RunInstances`, `ec2:CreateTags`, `ec2:DescribeInstances`, `ec2:DescribeSecurityGroupRules` и `ec2:RevokeSecurityGroupIngress`. 3. Кит, который нужно запустить. Тег релиза однократно сопоставляется с соответствующим китом с помощью `git ls-remote`; сервер всегда получает только 40-символьный коммит. ## Из панели На вашем компьютере в меню **«Дополнительно» → «Сервер 24/7»** запускается то же самое `deploy` для Hetzner в три шага: выберите Европу или США, вставьте токен Hetzner (чтение и запись), затем проверьте тип сервера, месячную стоимость, адрес и версию, которые панель нашла по этому токену. Ничего не создается до вашего подтверждения. Панель отображает каждый шаг в виде `deploy` по мере их появления, а затем — адрес, токен панели и отпечаток ключа подписи. Без домена сервер получает [быстрый туннель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#quick-tunnel-without-a-domain) ; **в разделе «Ваши серверы» → «Найти текущий адрес»** он запрашивается заново после перезапуска. Для фиксированного адреса под вашим собственным доменом откройте **«Дополнительно» · «Ваш собственный домен** » и добавьте токен Cloudflare (подготовленная ссылка выбирает «Зона чтения», «Редактирование DNS» и «Редактирование туннеля Cloudflare»). Токены передаются с каждым запросом из вкладки браузера на TgWitness на том же компьютере и никуда не записываются; запись развертывания, отредактированный файл cloud-init, токен панели и, для быстрого туннеля, ключ адреса хранятся в `deployments/NAME` внутри каталога данных. Панель предоставляет доступ к этому только главному администратору по прямому loopback-соединению (`127.0.0.1`без прокси или заголовков туннеля); панель, доступ к которой осуществляется через сеть, вместо этого отображает команды . По умолчанию версия соответствует тегу релиза запущенной панели, определяемому через API GitHub. Местоположение, тип сервера и цена получаются из API Hetzner: `cpx22` если он предлагается, в противном случае — самый дешёвый тип x86 с объёмом памяти не менее 2 ГБ. ## Быстрый туннель без домена `--quick-tunnel` заменяет `--zone`, `--cloudflare-account` и `--panel-host`; при этом не используется ни учётная запись Cloudflare, ни токен: ``` python -m tgwitness.cloud deploy --provider hetzner --name case-2026-11 --server-type cpx22 \ --ref 0123456789abcdef0123456789abcdef01234567 --quick-tunnel --provider-token-file hetzner.token ``` На сервере cloudflared открывает [быстрый туннель](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) к панели: случайный `https://….trycloudflare.com` адрес, который меняется при каждой перезапуске cloudflared или сервера. Небольшой сервис на сервере публикует каждый адрес в случайной теме ntfy.sh , подписав его (HMAC-SHA256) ключом, хранящимся только в каталоге развёртки (`address-key.txt`), и повторяет это каждые три часа, поскольку ntfy.sh хранит сообщения в течение 12. `deploy` и **Find текущий адрес** принимают только подписанные сообщения, поэтому поддельное сообщение не сможет направить вас и ваш токен панели на чужой адрес. Тема находится в записи и в опубликованном cloud-init: любой, у кого они есть, может прочитать текущий адрес, который по-прежнему запрашивает токен панели. Сервер не открывает входящий порт ни в том, ни в другом случае. Верификатор не имеет ключа адреса, и любой, кто читает тему, может публиковать в ней сообщения. Поэтому коллектор также публикует сам адрес, подписанный собственным ключом Ed25519, а `verify` берет самое новое сообщение, подписанное ключом коллектора в записи развертывания; сообщения упорядочиваются по времени их получения ntfy.sh, а не по времени, указанному в них. Коллектор, созданный до введения данного изменения, ничего не подписывает, и `verify` затем берет самое новое сообщение и указывает это в проверке `statement`; поддельное сообщение может только привести к сбою этой проверки, поскольку адрес по-прежнему должен отвечать ключом коллектора. Ограничения: быстрый туннель не привязан к учётной записи Cloudflare, поэтому `verify` отмечает проверки туннеля, коннектора и DNS как недоступные; лучший возможный результат — `incomplete`. На Phala Cloud проверка проходит: коннектор работает внутри конфигурации Docker Compose, включённой в измерения. Записи провайдера, брандмауэр, подписанное заявление, измерения хоста и сравнение установщиков проверяются как обычно. Для побайтового сравнения с эталонным установщиком нужен развёрнутый коммит с поддержкой `--quick-tunnel`; при проверке версии 0.7.0 собирается установщик для домена и обнаруживаются различия. Cloudflare не гарантирует доступность быстрых туннелей, ограничивает очередь 200 запросами и не передаёт Server-Sent Events. Поэтому обновления панели в реальном времени (после 0.7.0) могут не проходить через такой туннель, и страницу придётся перезагружать; эта часть ещё не проверялась. Для постоянной работы используйте собственный домен. ## Развертывание Сначала просмотрите всё, что будет отправлено. `plan` не отправляет запросов ни провайдеру, ни Cloudflare: ``` python -m tgwitness.cloud plan --provider hetzner --name case-2026-11 --server-type cpx22 \ --ref 0123456789abcdef0123456789abcdef01234567 --zone example.org \ --cloudflare-account CLOUDFLARE_ACCOUNT_ID --panel-host case.example.org ``` Затем выполните развертывание с теми же параметрами и учетными данными: ``` python -m tgwitness.cloud deploy --provider hetzner --name case-2026-11 --server-type cpx22 \ --ref 0123456789abcdef0123456789abcdef01234567 --zone example.org \ --cloudflare-account CLOUDFLARE_ACCOUNT_ID --panel-host case.example.org \ --witness-host case-witness.example.org \ --provider-token-file hetzner.token --cloudflare-token-file cloudflare.token ``` Типы серверов для начала: `cpx22` (Hetzner), `s-1vcpu-2gb` (DigitalOcean), `g6-standard-1` (Linode), `vc2-1c-2gb` (Vultr), `t3.small` (AWS). `--location` и `--image` по умолчанию для каждого провайдера — Ubuntu 24.04 в европейском регионе. `--repository` принимает коммит из другого репозитория Git по протоколу https без указания учетных данных в URL (по умолчанию `https://github.com/phishdestroy/TgWitness.git`). `deploy` также принимает `--out` для другого каталога развертывания (по умолчанию `deployments/NAME`; каталог, в котором уже находится развертывание, отклоняется) и `--wait`, количество минут ожидания подписанного отчета сборщика: от 1 до 240, по умолчанию 20 или 60 для `generic`. Команда: 1. создаёт туннель Cloudflare, входящий трафик которого перенаправляет имя хоста панели на саму панель и, если указано, имя хоста свидетеля на `/api/witness/head` и `/api/assurance` только; 2. создаёт проксированные записи CNAME для этих имён хостов, отклоняя имена, которые уже существуют; 3. создаёт брандмауэр провайдера без правил входящего трафика и сервер за ним без SSH-ключа, без резервных копий, без консольного агента и с cloud-init, который маскирует SSH, блокирует root, устанавливает `cloudflared`, загружает именно этот коммит, проверяет его и запускает TgWitness в качестве защищённого сервиса systemd; 4. ожидает подписанного заявления сборщика и проверяет, указаны ли в нём этот сервер и хэш данного файла cloud-init. `deployments/case-2026-11/` затем содержит: | Файл | Содержание | Поделиться? | | --- | --- | --- | | `deployment.json` | Идентификаторы, хеши, выполненные вызовы API (метод, путь, статус) и первое подписанное утверждение | Да, с помощью верификатора | | `cloud-init.redacted.yaml` | Точный файл cloud-init, в котором два секрета заменены на `REDACTED` | Да | | `panel-token.txt` | Токен панели | Нет | Корневой пароль провайдера, токен туннеля и токен панели никогда не записываются `deployment.json`. Опубликуйте отпечаток коллектора, указанный в конце, через канал, которым вы не управляете в одиночку, например, через канал свидетеля или в сообщении получателю. Войдите в Telegram по адресу `https://case.example.org` с помощью токена панели, как описано в [руководстве по работе с аккаунтами](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/). Действия панели записываются в подписанный журнал; они не являются SSH-сессиями. [Свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/) может опрашивать `https://case-witness.example.org`. SSH отсутствует: если начальная инициализация завершится сбоем, коллектор никогда не ответит. Удалите сервер и разверните его заново или воспользуйтесь отладочным развертыванием, чтобы найти причину. ### Секреты в пользовательских данных Cloud-init хранит два секрета: токен панели и токен туннеля Cloudflare. Ключ подписи среди них нет; он создаётся на сервере. Hetzner, DigitalOcean и Linode не возвращают пользовательские данные через свои API. Vultr возвращает их любому ключу, который может читать инстанс, а EC2 — через `DescribeInstanceAttribute`. Для AWS предоставляйте верификатору только три действия из таблицы, ни в коем случае `ec2:Describe*`. Для Vultr следует предположить, что ключ верификатора может читать оба токена. Токен туннеля позволяет кому-либо запустить второй коннектор: `verify` сообщает о любом коннекторе, не находящемся на сервере, и заявления коллектора нельзя подделать таким образом, поскольку каждый из них подписывает новый челлендж. При использовании `--quick-tunnel` вторым секретом является ключ адреса: кто бы ни прочитал его, может опубликовать ложный адрес, который панель примет. В публичном заявлении сборщика не указываются адрес сервера и источники логинов; оба эти элемента остаются в подписанном журнале. ## Отладка развертывания и блокировка `--debug-ssh-key KEY --debug-ssh-from 198.51.100.4` поддерживает SSH для одного ключа с одного адреса или небольшой сети, максимум /24 для IPv4 или /48 для IPv6. `KEY` уже зарегистрирован у провайдера: имя или ID SSH-ключа в проекте Hetzner, ID или отпечаток SSH-ключа в команде DigitalOcean, имя пользователя Linode, SSH-ключи которого добавлены в профиль root, ID SSH-ключа в учётной записи Vultr или имя пары ключей EC2 в регионе. Эти параметры не применяются к `generic`. Такое развертывание регистрируется как `debug` и **никогда не** отмечается как «высокого уровня безопасности». По завершении выполните `sudo tgwitness-lock` в качестве последней команды последнего сеанса SSH, а затем: ``` python -m tgwitness.cloud lock --record deployments/case-2026-11/deployment.json --provider-token-file hetzner.token ``` Брандмауэр теряет все правила входящего трафика. Затем в отчётах отображается, когда SSH был разрешён, а когда был закрыт; это окно остаётся видимым. ## Удалить развёртку `destroy` Удаляет сервер и его брандмауэр, найденные по метке развертывания, так что развертывание, завершившееся сбоем на полпути, также удаляется, а затем — записи DNS, указывающие на его туннель, и сам туннель. Журнал сервера и ключ подписи удаляются вместе с ним: сначала экспортируйте доказательства. Запись сохраняется, помеченная `removed`, с указанием вызовов API, связанных с удалением. ``` python -m tgwitness.cloud destroy --record deployments/case-2026-11/deployment.json --confirm case-2026-11 \ --provider-token-file hetzner.token --cloudflare-token-file cloudflare.token ``` Удаление через API реализовано для Hetzner. Для других провайдеров `destroy` процесс останавливается перед удалением и указывает метку для удаления в консоли провайдера. Ручно установленный сервер (`generic`) теряет только свои записи туннеля и DNS. Для быстрого развертывания туннеля не требуется токен Cloudflare: его туннель заканчивается на сервере, а его сообщения удаляются из ntfy.sh в течение 12 часов. ## Любой сервер (с самоподписью) `--provider generic` предназначено для сервера, приобретённого или установленного вручную. `deploy` создаёт туннель и DNS, записывает `install.sh` (частный) и `install.redacted.sh` (для публикации), а затем ожидает. Скопируйте `install.sh` на свежеустановленный сервер Ubuntu 24.04 и запустите его там: ``` sudo bash install.sh ``` Он фиксирует состояние хоста в том виде, в каком он был (логины, аккаунты, `authorized_keys`, сокеты прослушивания, сервисы, запланированные задания, пакеты), устанавливает коммит, включает брандмауэр хоста, удаляет себя, маскирует SSH и завершает сессию. Отчёт по такому серверу в лучшем случае является **САМОУДОСТОВЕРЕННЫМ**: тот, кто запустил установщик, имел права root до этого, и у проверяющего нет доступа к записям провайдера. Это всё же лучше, чем необъяснимый сервер: инвентарь, хэш установщика и каждый последующий вход в систему подписаны. ## Проверить Верификатору потребуются `deployment.json`опубликованный установщик, учетные данные только для чтения и, в идеале, выгрузку коммита и доказательство ZIP: ``` git clone -c core.autocrlf=false https://github.com/phishdestroy/TgWitness.git checkout git -C checkout checkout 0123456789abcdef0123456789abcdef01234567 python -m tgwitness.cloud verify --record deployment.json \ --provider-token-file read-only.token --cloudflare-token-file cloudflare-read.token \ --fingerprint COLLECTOR_FINGERPRINT --cloud-init cloud-init.redacted.yaml \ --source checkout --evidence tgwitness-evidence.zip --report report.md ``` В момент проверки верификатор запрашивает все данные у провайдера и Cloudflare; запись предоставляет только идентификаторы, по которым необходимо запросить информацию. Код завершения равен 0 для **PASS**, 1 для **FAIL** и 2 для **REVIEW**, **INCOMPLETE** или **SELF-ATTESTED**. `--fingerprint` должно поступать из независимого канала; без него ключ сравнивается только с записью оператора. `python verify.py` по-прежнему проверяет само доказательство ZIP, как описано в разделе [«Доказательства](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/)». Действия провайдера классифицируются: создание и запуск в течение 30 минут после создания проходят успешно; консоль, восстановление, сброс пароля, пересборка, ISO, образы, снимки, резервные копии, Systems Manager, подключение к экземпляру EC2 и открытие портов брандмауэра завершаются сбоем; действия, связанные с питанием, и всё неожиданное помечаются для проверки. Неизвестное действие никогда не проходит незаметно. ## Отчёт о передаче доказательств `--report report.md` создаёт отчёт в формате Markdown и `report.json` рядом с ним: 1. результат, отпечаток ключа коллектора, развёртывание, провайдер, фиксация, сервер, брандмауэр, туннель; 2. каждая проверка с указанием её статуса и источника (API провайдера, API Cloudflare, отчёт сборщика, журнал доказательств); 3. журнал провайдера с оценкой каждого действия и, если провайдер это фиксирует, с указанием исполнителя; 4. конечные точки Cloudflare, хранящие соединения туннеля, конфигурацию и журнал аудита; 5. подписанное заявление сборщика; 6. что подтверждает отчёт, а что нет; 7. команды для воспроизведения результата, а также SHA-256 каждого предоставленного файла. Передайте отчет, `report.json`, `deployment.json`, опубликованный установщик и доказательства ZIP. Подготовьте отчет заранее: журналы провайдеров хранятся в течение ограниченного времени. ## Cloudflare в качестве внешнего свидетеля Здесь всё необязательно. Без учётной записи Cloudflare сервер всё равно работает, и два из них работают уже сегодня: | Что | Что здесь показано | В TgWitness | | --- | --- | --- | | Быстрый туннель или туннель вашего домена | Доступ к панели осуществляется только через туннель | Мастер настройки сервера, см. выше | | ретранслятор drand `drand.cloudflare.com` | записи, сделанные после раунда drand, более поздние, чем эта: дневник велся по ходу событий | режим «доказательства», **«Дополнительные свидетели»**, «без аккаунта» ([формат](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#optional-records-in-evidence-mode-drand-and-telegram-devices)) | | Уведомления о состоянии туннеля | когда туннель не работал, по электронной почте или через веб-хук от Cloudflare | Настройте их в панели управления Cloudflare | | DNS-шлюз (`--gateway-dns`или **Cloudflare Gateway DNS** в мастере) | каждое имя, запрос на которое обращался сервер, на который Cloudflare отвечал по протоколу TLS; брандмауэр Hetzner не пропускает DNS-запросы никуда больше; может ли политика шлюза переписать ответы | Hetzner, бесплатный тарифный план Zero Trust, без домена; `verify` проверяет брандмауэр, местоположение, ведение журналов, политики, запросы сервера и журнал аудита; режим «evidence» копирует журнал в дневник | | Шлюз с Cloudflare: один клиент на сервере, брандмауэр исходящего трафика, пропускающий только Cloudflare | каждое соединение, установленное сервером, а не только DNS | ещё не реализовано | | Доступ перед панелью | кто и когда вошёл в панель | не реализовано: требуется собственный домен | | Регистрация SSH-команд | каждая команда в сеансе отладки | ещё не реализовано | Logpush, который позволяет хранить собственную копию Cloudflare в R2, является функцией Enterprise: на бесплатном тарифном плане Cloudflare отвечает `logpush is not enabled for this account`. Журнал шлюза хранится там 24 часа, поэтому в режиме «доказательства» он копируется в подписанный журнал (**журнал Cloudflare Gateway, содержащий DNS-запросы данного сервера**, — токен только для чтения с правом «Account Analytics Read»). Без плана «Zero Trust» у аккаунта есть одно DNS-местоположение. Когда Cloudflare отклоняет другое, сервер использует существующее, и его запросы различаются по адресу; для этого фильтра также требуется «Zero Trust PII Read», и `destroy` оставляет общее местоположение. Один запрос журнала охватывает не более трёх часов, поэтому копия и `verify` чтение данных за день в трехчасовых интервалах. Gateway DNS отвечает за системный резолвер. Запросы DNS через HTTPS по порту 443 к другому резолверу, а также соединения с адресами, по которым поиск не проводится (например, с дата-центрами Telegram), не фиксируются в его журнале. Cloudflare не имеет доступа к шифрованным данным Telegram, другим устройствам, привязанным к аккаунту Telegram (список устройств в режиме «evidence mode» фиксирует их со стороны Telegram) или гипервизору провайдера. ## Как читать результат проверки среды В случае обычной виртуальной машины провайдер контролирует инфраструктуру хоста, а локальные ресурсы проверяются наряду с записями провайдера. В случае Intel TDX верификатор дополнительно проверяет характеристики оборудования, привязку коллектора, компоновку и показатели ОС. Ознакомьтесь с отдельными результатами, чтобы увидеть, какие проверки прошли успешно, а какие были недоступны. Исторические данные о брандмауэре зависят от провайдера; Linode сохраняет версии правил. Запись [валидация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) содержит список протестированных развертываний и оставшихся активных проверок, а [область верификации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) связывает эти проверки среды с получением архива и проверкой его целостности. --- # Панель TgWitness: чаты, журнал и экспорт Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/ Все экраны панели: чаты, дневник, источники, экспорт, «Дополнительно», режимы защиты и проверка кода. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Все экраны панели: чаты, дневник, источники, экспорт, «Дополнительно», режимы защиты и проверка кода. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Начало работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) ![Начало работы](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) [Первоначальная настройка и параметры](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/) · [Аккаунты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/) · [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) · [Отчёты по делам](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) Что делает каждый экран, что записывается в подписанный журнал и где находится подробное руководство. Панель отображает по одному рабочему пространству за раз: одну учетную запись Telegram с собственными источниками, журналом и ключом подписи. Селектор в верхней части боковой панели позволяет переключаться между рабочими пространствами. Адрес содержит рабочее пространство (`?ws=…`); пока адрес, селектор и загруженная учётная запись не совпадают, действия остаются заблокированными. Используйте методы сбора данных [Compare](https://github.com/phishdestroy/TgWitness/blob/main/docs/COLLECTION-MODES.md), чтобы выбрать между наблюдением в режиме реального времени, полной историей, экспортом данных свежих учетных записей/чатов и передачей сохраненных записей. На странице Экспорт над элементами управления загрузкой находится то же сравнение, что и выше. **На этой странице** - [Ориентируйтесь](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#find-your-way) - [Начните здесь](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#start-here) - [Чаты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#chats) - [Журнал](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#journal) - [Источники](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#sources) - [Экспорт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#exports) - [Настройки, учётные записи и подключение](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#settings-accounts-and-connection) - [Дополнительная информация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#extras) - [Режимы защиты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#protection-modes) - [Другие инструменты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#more-tools) ## Ориентируйтесь Ежедневные разделы находятся в верхней части боковой панели, **раздел «Аккаунты»** — под **разделом «Рабочая область** », а всё остальное — в разделе **«Дополнительные инструменты и настройки** ». Переключатель **уровня интерфейса** в верхней панели определяет, сколько разделов отображается: | Уровень | Разделы в боковой панели | | --- | --- | | Просто | Главная, Чаты, Изменения, Архивы и Настройки | | Стандарт | Также Case Board, «Учётные записи» и «Доступ» | | Эксперт | Также: «Источники», «Дополнительные функции», «Запросить архив», «Параметры», «Аккаунт», «Системный журнал» и «Интеграции» | Простые вызовы: «Начать здесь», «Журнал» и «Экспорт», **«Главная**», **«Изменения»** и **«Архивы**». Уровень скрывает только разделы. Скрытая функция продолжает работать, а сервер самостоятельно проверяет каждое разрешение. Уровень, язык, тема и часовой пояс сохраняются для каждого оператора и рабочего пространства; см. [настройки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/). В верхней панели также имеются: - **Перейти к разделу** (Ctrl+K или ⌘K на Mac): найти чат, параметр или запись в журнале по `#number`. Клавиши со стрелками — перемещение, Enter — открытие, Esc — закрытие. - **Уведомления**: проблемы и изменения в чатах, выявленные из журнала. Функция **«Пометить всё как прочитанное»** обнуляет счётчик, а **«Правила уведомлений»** открывает настройки правил. Настройка отправки уведомлений в Telegram, Discord или по электронной почте осуществляется в разделе [«Дополнительно» → «Уведомления](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#notifications)». - Индикатор подключения для этой рабочей области. **Состояние коллектора** под верхней панелью разбивает его на подключение к Telegram, прием событий, источники и очередь вложений. - **«Замок**»: закрывает панель в этом браузере. Коллекция продолжает работать на сервере. - Режим защиты, указанный рядом с номером версии; см. [«Режимы защиты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#protection-modes)». Демо-рабочая область содержит вымышленные сообщения и никогда не подключается к Telegram. Действия, которые могли бы изменить реальную рабочую область, в ней не допускаются. ## Начните здесь Выберите задачу. **Функция «Экспорт моего аккаунта»** скачивает то, что аккаунт может прочитать в данный момент. **Функция «Следить за расследованием»** фиксирует новые сообщения, отмеченные правки и уведомления об удалении из выбранных вами чатов. На карте настройки показаны три шага: подключить аккаунт, выбрать источники, начать наблюдение. Вопрос о цели остаётся на этой странице, пока вы не ответите на него или не пропустите его. Вместо этого открывается новое рабочее пространство с [начальной настройкой](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/). ## Чаты Сохраненные беседы по умолчанию доступны только для чтения. - Поиск в списке по имени или ID. **Команда «Выбрать»** добавляет или удаляет чаты из списка наблюдения. Команда «Открыть **ссылку Telegram»** принимает имя пользователя или ссылку-приглашение и сохраняет превью в журнале. Команда **«Присоединиться / открыть и наблюдать»** присоединяет вас к чату и добавляет его в ваши источники; открытие бота отправляет его `/start`. - В заголовке чата подсчитываются сообщения**, удалённые, сохраненные**, **удалённые до сохранения** и **не найденные при повторной проверке**. Список чатов и уведомления используют те же определения. Удалённое сообщение отображается красным цветом и сохраняет свой сохраненный текст; отредактированное сообщение сохраняет все сохраненные версии. Каждое удаление содержит известную информацию: когда оно было прочитано, то, что Telegram не сообщает, кто его удалил, или что поступило только уведомление. - **Функция «Загрузить историю»** отображает последние 100, 250 или 500 сообщений в этом окне и в журнале. Чтобы загрузить все включённые источники, воспользуйтесь [меню «Источники» → «Полная история](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#sources)». - **Функция «Экспорт чата»** позволяет скачать всю видимую историю в виде подписанного `chat.json` и `chat.html`. Несколько подключенных аккаунтов могут разделить работу: каждый скачивает свой диапазон номеров сообщений и подписывает свою часть, а аккаунт, запустивший экспорт, подписывает архив. См. раздел [«Экспорт одного чата](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Chat-Export.md)». - **В разделе «People»** перечислены все пользователи, чьи сообщения сохранены в этом чате. Профили пользователей по умолчанию отключены, поскольку содержат личные данные третьих лиц. Если они включены для конкретного чата, в профиле отображаются имя и история пользовательских имён, флаги Telegram, хеши аватаров, активность, кто кому отвечает, другие отслеживаемые чаты, а также упомянутые кошельки, телефоны, пользовательские имена и ссылки. Каждый факт указывает на свою запись. **Экспорт профилей** сохраняет подписанный файл, по желанию в формате с паролем ZIP; отключение профилей приводит к удалению файла профиля. См. [профили участников](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#people-profiles). - **Функция «Сохранить профиль» теперь** создаёт моментальный снимок чата или профиля бота: описание, участники, ссылка для приглашения, команды бота. ### Только для чтения, отправка и секретные данные Два переключателя над сообщениями обеспечивают защиту аккаунта и читателя: - **Режим «Только для чтения»** включен при открытии чата. Отключите его, чтобы отправлять сообщения или нажимать кнопки бота . При каждом действии появляется запрос **«Отправить от имени @account?**» или **«Нажать эту кнопку бота от имени @account?**», сообщающий, что участники чата увидят это действие и что оно попадёт в подписанный журнал. **Опция «Не спрашивать снова в течение 10 минут в этом чате»** позволяет на некоторое время отключить этот запрос. Отправка отключена для цели **«Доказательства по делу**» — как в панели, так и в API. - **Функция «Mask secrets»** скрывает данные, похожие на пароль, код входа, ключ API или хэш, токен бота, строку сеанса, закрытый ключ, JWT или номер платежной карты (номера карт проверяются по сумме Луна). **Функция «Show»** раскрывает одно значение; раскрытие фиксируется в журнале. Отключение маскировки для данного браузера также фиксируется. Изменяется только отображение: исходные записи и все экспортированные данные сохраняют полный текст. ## Журнал Все записи, подписанные рабочим пространством, отсортированы по дате — самые новые вверху. - **В разделе «Обзор»** подсчитываются просмотренные сообщения, зафиксированные правки, уведомления об удалении и выбранные источники. - **Хронология событий** — фильтрация по типу события (все, правки, удаления, реакции, членство, охват), по тексту и по источнику. **Загрузить предыдущие события** — переход на предыдущую страницу. - Откройте запись, чтобы увидеть её детали, хэш и содержимое. **Ссылка на эту запись** — это адрес, по которому открывается та же запись. Возможные секретные данные замаскированы в этом предварительном просмотре; в экспортированных файлах сохраняется исходный текст. - Журнал доступен только для добавления записей: ни одна из панелей не позволяет редактировать или удалять записи. Проверьте это с помощью **«Экспорт» → «Проверить журнал»** или `python -m tgwitness.verify`; см. раздел [«Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/)». ## Источники Какие беседы записывает данная рабочая область и какую информацию из них она сохраняет. Изменения применяются к будущей активности; сохраненные записи остаются без изменений. **Функция «Обновить список чатов»** считывает чаты и папки аккаунта. Она не загружает сообщения. ### Объём работ - **Что фиксирует эта учетная запись** : **Выбранные чаты** (только те чаты, которые вы добавляете), **Папка Telegram** (одна из папок аккаунта, включая чаты, добавленные в неё позже) или **Вся учетная запись** (каждый чат, а также каждый новый чат, группу, личный чат или бота по мере их появления). **Режим расследования** предназначен для выделенного аккаунта: он записывает всё, что видит аккаунт, его собственные сообщения и нажатия кнопок, а также сразу сохраняет профиль каждого нового чата и ранее видимые сообщения. На изображении [специальное руководство по аккаунтам](https://phishdestroy.github.io/TgWitness/docs/dedicated-account/) объясняется, почему никогда не следует использовать свою основную учётную запись. - **Типы источников** ограничивают режимы «папка» и «весь аккаунт» каналами, группами, личными чатами и ботами. **«Собственные действия»** добавляют собственные сообщения аккаунта, правки и нажатия клавиш при ответе. - **При появлении нового чата или бота**: сохраните его профиль и до выбранного количества его последних видимых сообщений. Ограничения: опубликованный облачный сборщик данных не принимает секретные чаты. Отдельный интерфейс [Pseudo-secret и его демо-версия](https://phishdestroy.github.io/TgWitness/ru/docs/reference/secret-chats/) описаны с указанием их статуса разработки и имеющихся дефектов. Ничего не записывается, пока TgWitness не запущен; после перезапуска он фиксирует только то, что Telegram ещё возвращает, и в отчёте отображается пробел. Чаты, выходящие за пределы списка чатов (диалоги 1,000, если не изменено в параметрах), добавляются при их следующей активации. Кнопки бота, нажатые в другом приложении, невидимы; ответ бота записывается. ### Чаты, входящие в сферу действия Фильтруйте по статусу (**Включено**, **Приостановлено**, **Приоритет**, **Исключено**, **Неподтверждённый доступ**, **Игнорируется**) и типу, а затем выполняйте действия с выбранными элементами: включайте, приостанавливайте, помечайте или снимайте приоритет, исключайте из области действия или удаляйте. Значок статуса отображает только состояние; действия находятся в меню каждой строки с описанием их функции. При приостановке и исключении требуется подтверждение, в том числе при массовых действиях. При удалении источника требуется указать его название, после чего удаляются профили его участников ; сохраненные записи остаются в журнале. Источник, который не отображается в списке чатов аккаунта, — это **получает обновления, но нет в списке чатов**, пока продолжают поступать записи; в противном случае — **доступ не подтверждён**. **Доступные чаты** добавляет чаты с **Добавить выбранное** или **Добавьте все совпадающие**. ### Полная история Загружает доступную историю каждого включённого источника в раздел «Чаты» и журнал. Ход работы сохраняется после перезапуска; вложения отображаются в соответствии с вашими настройками мультимедиа. См. [историю источников](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/). ### Запись - **Выберите, какие изменения следует сохранить**: новые сообщения, правки, уведомления об удалении, видимые реакции, вступления в группу и выходы из неё. Предустановка изменяет форму; кнопка **«Сохранить настройки записи»** применяет её. Повторное включение категории не восстанавливает пропущенные события. - **Сохранение медиафайлов при наличии**: загрузка вложений размером до определенного предела на файл, установка предела для каждого типа от 1 до 2 000 MiB и ограничение длительности видео в секундах (0 означает отсутствие ограничения). Результат каждой попытки загрузки фиксируется. - **Перепроверка**: приоритетные чаты проверяются каждые несколько минут, остальные — реже, благодаря чему аккаунт не превышает ограничения Telegram по FloodWait. Значение 0 отключает группу. Отметьте приоритетные чаты звездочкой в списке; количество чатов за один проход и пауза между ними указаны в параметрах. См. [коллекцию](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/). ## Экспорт **В разделе «Загрузки»** готовятся файлы; в разделе **«Отчет о сборке»** выбирается формат отчетов. | Что | Используйте его для | Руководство | | --- | --- | --- | | Экспорт аккаунта | Актуальный снимок того, что аккаунт может читать в данный момент | [Экспорт аккаунта](https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/) | | Совместное использование текста | Свернутая версия готового экспорта аккаунта | [Раскрытие информации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/#prepare-a-disclosure-for-a-lawyer-or-another-recipient) | | Подписано ZIP | Журнал, отчет, вложения и инструменты проверки в рамках фиксированной границы журнала | [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) | | Отчет в форматах HTML, PDF, JSON | Запечатанный отчёт, доступный для чтения | [Отчёты по делам](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) | | JSONL, CSV | Исходные записи с подписями; таблица, безопасная для формул | [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) | | Выдержка из протокола передачи дел | Только те чаты, периоды и люди, которые нужны получателю | [Доказательства](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#investigation-handoff) | | Экспорт чата | Один чат с подписью `chat.json` и `chat.html` | [Экспорт одного чата](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Chat-Export.md) | - **Шифрование вышеуказанных загрузок с помощью пароля** (12 символов или более) приводит к сохранению файла AES-256 ZIP, который открывается программами 7-Zip или WinRAR. Находящийся внутри подписанный файл остаётся неизменённым. Пароль не сохраняется. - **В разделе «Подготовленные экспорты»** хранится до 20 файлов объёмом не более 2 ГБ, плюс самый последний, для повторных загрузок, каждый из которых содержит свой тег SHA-256. Подготовка файла не гарантирует его доставку. - Если браузер отклоняет диалоговое окно сохранения, панель переключается на обычную загрузку. - **Ваша идентичность для подписи** отображает отпечаток ключа. Функции **«Сохранить контрольную точку**» и «Скачать**подписанную квитанцию о запуске»** позволяют сохранять записи вне коллектора. Функция «Подготовить **запрос с временной меткой»** формирует запрос по стандарту RFC 3161 без обращения к каким-либо сервисам. ## Настройки, аккаунты и подключение - **Настройки**: цель, подключение, что записывать и интерфейс. См. раздел [«Первая настройка и параметры](https://phishdestroy.github.io/TgWitness/ru/docs/reference/settings/)». - **Аккаунты**: каждое рабочее пространство со своим состоянием, источниками, событиями и очередью вложений. Фильтрация по категориям **«Требует внимания**», **«В процессе сбора»**, **«Офлайн» или «Приостановлено»** либо **«Не подключено»**, приостановка или возобновление выделения, массовый импорт файлов аккаунтов и управление группами. См. [раздел «Аккаунты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/)». - **Аккаунт**: вход в систему и маршрут подключения для данного аккаунта. Прямое подключение, профиль WireGuard, ваш собственный прокси-сервер, общедоступный пул MTProto или WARP; подготовьте и проверьте маршрут, затем примените его к данному аккаунту, группе или ко всем аккаунтам. См. разделы [«Подключение» и «Прокси](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/)[-серверы](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Proxies.md)». ## Дополнительные возможности Необязательно: для начала сбора данных достаточно одного аккаунта и источников. Настройки открываются только для той опции, которую вы выберете, и ничего не подключается автоматически. Карточка **«Уровень защиты»** вверху показывает [режим защиты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#protection-modes). | Карточка | Что это добавляет | Руководство | | --- | --- | --- | | Хранение и дисковое пространство | Резервные копии, перемещение старых файлов в облако, копия доказательств, которую нельзя удалить | [Хранение данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/) | | Цель и уровень защиты | Рекомендуемые настройки для вашей цели и двух шкал | [ниже](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#goal-and-protection-level) | | Уведомления | Проблемы, отредактированные сообщения и ежедневный отчёт; ваш собственный бот-контроллер | [ниже](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#notifications) | | Доказательства и резервные копии | Временные метки, дополнительные свидетели и зашифрованная внешняя копия | [ниже](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#evidence-and-backups) | | Сервер работает круглосуточно | Облачный сервер без SSH, создаваемый и удаляемый из панели управления | [Высокая степень надежности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#from-the-panel) | | Независимый свидетель | Подписанные проверки, публикуемые в вашем канале Telegram или Discord | [Свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/) | | Проверка кода | Сравнивает запущенную программу с публичным коммитом на GitHub | [ниже](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#code-check) | ### Цель и уровень защиты Четыре вопроса: 1. **Для чего это нужно? Для** личного архива, расследования или в качестве доказательств по делу. 2. **Какой объём данных вы будете отслеживать?** Несколько чатов (до примерно 50), много чатов (до примерно 500) или целые аккаунты. Это устанавливает ограничение на количество чатов в списке — 1 000, 3 000 или 20 000. 3. **Фотографии и файлы?** Только текст, фотографии и короткие медиафайлы (фотографии до 20 МБ, видео до 100 МБ) или всё (видео и документы размером до 1 ГБ каждый). Режим «Всё» с полными аккаунтами также оставляет 4 ГиБ свободного места на диске. 4. **Где он будет работать?** На этом компьютере или на сервере, который всегда включён. В списке предложений перечислены независимые временные метки, drand и список устройств Telegram, причём для каждого указано, что именно он добавляет. Временные метки создаются каждые 60, 30 или 10 минут для личной записи, расследования или доказательств; drand и список устройств требуют временных меток. **Применяйте** изменения только к этим элементам, к политике вложений и к двум параметрам, указанным выше. Каждое изменение представляет собой запись в журнале, плюс `setup.applied`. Уведомления, внесайтовая копия, сервер, шлюз DNS, проверка кода и свидетель предлагаются в качестве следующих шагов со своими собственными формами. Две шкалы рассчитываются на основе заданных параметров, а не на основе цели: | Масштабируемость | Очки | | --- | --- | | Достоверность | Подписанный журнал 1, временные метки 3, drand 1, список устройств 1, проверка соответствия кода 1, опрос свидетелей 1, заверенный сервер 2, журнал DNS шлюза 1 | | Надёжность | Постоянно работающий сервер — 3, внешняя копия — 3, Object Lock — 1, уведомления о проблемах — 1 | **Максимальный уровень** чтения — 80% и выше, **высокий** — 50%, **умеренный —** 25%, ниже этого — **базовый**. Надежность в настоящее время определяется наличием постоянно работающего сервера, как указано в ответе на вопрос 4, до проверки какого-либо сервера. ### Уведомления Уведомления отправляются через Apprise в Telegram, Discord, Slack, ntfy, по электронной почте, в Matrix и более чем 100 других сервисов. Выберите сервис, заполните одно или два поля и отправьте тестовое уведомление, либо вставьте адреса Apprise напрямую. - **Проблемы**: диск почти заполнен, выход из аккаунта, ошибки при сборе, копировании или установке временной метки. На изолированном сервере открытый SSH-порт или вход в систему также являются проблемой. - **Изменения**: удалённые, отредактированные и отсутствующие сообщения в отслеживаемых чатах, сгруппированные в одно уведомление за каждую проверку (каждую минуту, если не изменено в настройках). - **Завершённые задачи**: история, экспорт и резервные копии. - **Ежедневная сводка** в выбранное время по серверному времени. Уведомления содержат названия чатов и количество сообщений. По умолчанию выдержки из сообщений отключены; если они включены, текст сообщений покидает этот компьютер. **Ваш операторский бот** — это ваш собственный бот, созданный с помощью @BotFather, который отвечает `/status` и `/stats`, а также, по желанию, `/pause`, `/resume` и `/copy`. Им могут пользоваться только указанные чаты и идентификаторы пользователей Telegram; текст разговора остаётся в рабочей области. Используйте отдельного бота, если другое приложение уже принимает его команды. См. разделы [«Уведомления»](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Notifications.md) и [«Операторский бот](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#operator-bot-and-completion-notices)». ### Доказательства и резервные копии - **Независимые временные метки** отправляют только SHA-256 каждой подписанной контрольной точки в авторитетные источники RFC 3161 и календари OpenTimestamps каждые 5–1 440 минут. **Anchor сейчас** выполняет цикл проверки. См. [временные метки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/). - **Дополнительные источники данных**, каждый из которых отключен до момента выбора: последний раунд drand, список подключённых устройств Telegram без указания IP-адресов и журнал DNS-запросов сервера Cloudflare Gateway. См. [дополнительные записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#optional-records-in-evidence-mode-drand-and-telegram-devices). - **Зашифрованная резервная** копия сохраняет журнал, файлы, контрольные точки и экспортированные данные чатов в хранилище, совместимое с S3 (Wasabi, Amazon S3, Backblaze B2, Cloudflare R2, MinIO). Всё сначала шифруется на этом компьютере. **Скачайте ключ шифрования** и храните его отдельно: без него копию прочитать невозможно. Функция Object Lock в режиме «Управление» или «Соответствие требованиям» защищает объекты от удаления в течение заданного количества дней. См. [раздел «Внесайтовая копия](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Off-site-Copy.md)». ### Проверка кода Проверяет, соответствует ли установленная программа опубликованной версии. 1. Укажите репозиторий GitHub (официальный уже указан) и тег, ветку или коммит. 2. **Функция «Check now»** запрашивает у API GitHub через маршрут этой рабочей области для внешних запросов список файлов данного коммита. Она сравнивает ID git-блоба каждого измеряемого программного файла с данными коммита. Результаты проверки в Windows с преобразованными символами конца строки по-прежнему совпадают. 3. В результате выводится список измененных, дополнительных и отсутствующих файлов (до 50 каждого типа), который сохраняется в виде записи `source.checked` записью журнала. Результат считается актуальным только до тех пор, пока файлы запущенной программы не изменятся: проверьте снова после обновления. Токен не требуется, и работают только публичные репозитории; чаты и учетные данные не загружаются. Совпадение идентифицирует код на диске. Это не аппаратная аттестация; для этого см. [Phala Cloud](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx). ## Режимы защиты Переключатель рядом с номером версии показывает выбранный режим и количество из 18 активных уровней защиты, например `🟠 Witnessed 9/18`. **Изменить режим можно** в **«Дополнительно» → «Уровень защиты» —** там открывается список вариантов. Каждый режим описывает конкретную цель и перечисляет, чего ещё не хватает; запись, подпись и сохранённые настройки одинаковы во всех режимах. | Режим | Для | Добавлено | | --- | --- | --- | | 🟢 Просто | Наблюдение за чатом и сохранение копии | Чаты, дневник и экспорт чатов; подписание происходит в фоновом режиме | | 🟡 Подписано | Отчеты направляются на платформу, хостинг-провайдеру или в службу по борьбе со злоупотреблениями | Подписанный архив, проверка журнала, контрольные точки, выдержка из протокола передачи дел | | 🟠 Заверен | Случаи, когда кто-то может заявить, что запись была изменена | Независимый свидетель, публикующий подписанные заголовки журнала | | 🔴 Готов к использованию в суде | Доказательства для адвоката, полиции или суда | Временные метки, зашифрованная внешняя копия, подробности дела в отчетах | | 🟣 Проверено GitHub | Записи, программное обеспечение которых должно быть доступно для проверки любым пользователем | Проверка кода и фиксация с помощью GitHub Actions | | ⚫ Моссад | Дела с высокими ставками против хорошо финансируемого противника | Защищённый сервер, работающий круглосуточно, скрытый IP-адрес, все 18 уровней защиты | Слои: каждая запись подписана и включена в цепочку; подписанная квитанция о запуске; вложения, сохраненные с помощью SHA-256; подписанные контрольные точки; повторные проверки; оповещения о проблемах; доступ свидетеля только для чтения; проверка свидетелем по расписанию; временные метки RFC 3161; доказательства OpenTimestamps; проверенная последняя временная метка; зашифрованная внесайтовая копия; детали дела в отчетах; проверка соответствия кода ; Telegram никогда не видит IP-адрес этого устройства; внешние запросы через прокси; Object Lock на копии; запечатанный сервер с записями провайдера. Уровень, который отключен, имеет **пункт «Настройка»**, который открывает соответствующую форму. Выбор более низкого режима требует подтверждения и ничего не удаляет. ## Другие инструменты **Extras → Independent capture**: connect a separate browser or AyuGram recorder, pin its signing key, select capture options, start/pause, take snapshots and download verified signed archives. Each recorder has its own manual login, route, journal and key. Both connections start disabled. See the English [Independent capture guide](https://github.com/phishdestroy/TgWitness/blob/main/docs/OPTIONAL-CAPTURE.md). - **Обратитесь к архиву**: выполните поиск по сохраненным наблюдениям, просмотрите источники, а затем решите, стоит ли отправлять их в модель искусственного интеллекта. См. раздел [«Анализ архива»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/) и [«Локальное распознавание текста и транскрипция](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/)». - **Параметры**: ограничения и скорость сбора данных, повторные проверки, загрузки, профили, уведомления и экспорт. Поиск по имени, отображение значений **Только измененные** и подготовка значений по умолчанию в виде черновика с помощью **Восстановить настройки по умолчанию…**. **Сохраните параметры** применяет эти значения при следующем использовании, и каждое изменение фиксируется в журнале. - **Доступ**: отдельные токены для рецензентов, аналитиков и операторов, ограниченные выбранными рабочими пространствами, чатами и правами. См. [раздел «Доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/)». - **Системный журнал** : действия, выполненные этим процессом с момента запуска (подключения, смены прокси, входы в систему, отказы, изменения настроек) с скрытыми IP-адресами. **Функция «Следить за новыми строками»** позволяет всегда видеть самую последнюю строку. Сообщения хранятся только в журнале. - **Интеграции**: поставщик ИИ, подключения [к MCP только для чтения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/) и [подписанные веб-хуки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/webhooks/). - **Case Board**: личные заметки команды, закладки и фрагменты рядом с доказательствами. См. [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/). - **GitHub Actions фиксирует данные** в разделе «Экспорт»: один чат, зафиксированный из вашего форка. См. [запечатанный снимок](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md). --- # Сбор Telegram: сообщения, правки и уведомления об удалении Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/ Объём наблюдения, обновления в режиме реального времени, повторные проверки, вложения, собственные действия и значение пробелов — запись за записью. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Объём наблюдения, обновления в режиме реального времени, повторные проверки, вложения, собственные действия и значение пробелов — запись за записью. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Коллекция](https://github.com/phishdestroy/TgWitness/blob/main/docs/COLLECTION-MODES.md) ![Сборник](https://phishdestroy.github.io/TgWitness/assets/chapter-collect.svg) TgWitness фиксирует то, что наблюдает подключённая учётная запись Telegram. Журнал сохраняет эти наблюдения, их последовательность и сопутствующий контекст. Он не делает выводов о невидимых действиях на основании отсутствующего сообщения или факта подключения учётной записи. **На этой странице** - [От входа в систему до журнала](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#from-login-to-a-journal) - [Область наблюдения: выбранные чаты, папка или весь аккаунт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#observation-scope-chosen-chats-a-folder-or-the-whole-account) - [Область применения и выбор событий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#scope-and-event-selection) - [Собственные действия](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#own-actions) - [Режим расследования: вступление в группы и общение с ботами](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#investigation-mode-joining-teams-and-talking-to-bots) - [Уровни повторной проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#recheck-tiers) - [История сообщений и их авторство](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#message-history-and-attribution) - [Снимки истории](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#history-snapshots) - [Обработка вложений](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#attachment-handling) - [Приостановить, заблокировать, отключить и перезапустить](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#pause-lock-disconnect-and-restart) - [Изоляция и верификация аккаунтов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#account-isolation-and-verification) ## От входа в систему до журнала Информацию о самоуничтожающихся фотографиях и файлах см. в разделе «[Самоуничтожающиеся медиафайлы](https://github.com/phishdestroy/TgWitness/blob/main/docs/EPHEMERAL-MEDIA.md)». В нём объясняются приоритетный рабочий процесс, сохраненные и недоступные результаты, а также ограничения блокировки подтверждений прочтения в API-коллекторе. Блок-схема · Авторизация учетной записи пользователя → Выберите доступные группы и каналы; Выберите доступные группы и каналы → Сохранить настройки событий и вложений; Сохранить настройки событий и вложений → Начать наблюдение; Начать наблюдение → Получайте обновления от активного клиента; Получайте обновления от активного клиента → Применяйте политику в отношении источников и событий; Применяйте политику в отношении источников и событий → Добавить подписанное наблюдение; Добавить подписанное наблюдение → Просмотр или экспорт журнала; Добавить подписанное наблюдение → Обработка любых вложений, находящихся в очереди; Обработка любых вложений, находящихся в очереди → Добавьте результат загрузки · Авторизация учетнойзаписи пользователя · Выберите доступныегруппы и каналы · Сохранить настройкисобытий и вложений · Начать наблюдение · Получайте обновленияот активного клиента · Применяйте политику вотношении источников исобытий · Добавить подписанноенаблюдение · Просмотр или экспортжурнала · Обработка любыхвложений, находящихсяв очереди · Добавьте результатзагрузки **Схема в текстовом формате** 1. Авторизация учетной записи пользователя → Выберите доступные группы и каналы 2. Выберите доступные группы и каналы → Сохранить настройки событий и вложений 3. Сохранить настройки событий и вложений → Начать наблюдение 4. Начать наблюдение → Получайте обновления от активного клиента 5. Получайте обновления от активного клиента → Применяйте политику в отношении источников и событий 6. Применяйте политику в отношении источников и событий → Добавить подписанное наблюдение 7. Добавить подписанное наблюдение → Просмотр или экспорт журнала 8. Добавить подписанное наблюдение → Обработка любых вложений, находящихся в очереди 9. Обработка любых вложений, находящихся в очереди → Добавьте результат загрузки Авторизация, доступ к источнику, работающий сборщик данных и полная доставка — это разные вопросы. Успешный вход в систему не гарантирует доступ ко всем группам. Наличие подключенного канала передачи данных не означает, что все соответствующие обновления были доставлены. ## Область наблюдения: выбранные чаты, папка или весь аккаунт Источники → **Область наблюдения** определяет, какие чаты фиксируются в рабочей среде. | Режим | Записи | Новые чаты | | --- | --- | --- | | Выбранные чаты (по умолчанию) | Только те чаты, которые вы добавляете вручную | Никогда не добавляется автоматически | | Папка Telegram | Чаты в одной из папок аккаунта: чаты, включённые по названию, плюс категории данной папки (контакты, неконтакты, группы, каналы, боты), за вычетом исключённых чатов и, если это указано в настройках папки, заархивированных чатов | Соответствующие чаты добавляются сразу же после их активации; чаты, которые вы добавляете в папку в Telegram, добавляются в течение часа | | Весь текст | Каждый чат, доступный данному аккаунту | Каждый новый чат, группа, личный чат или бот добавляется в момент поступления первого обновления | - **Типы источников** (каналы, группы, личные чаты, боты) ограничивают возможности режимов «папка» и «весь аккаунт». Выбранные чаты могут быть любого типа, включая личные чаты и ботов. - **Исключённые чаты** никогда не записываются, независимо от режима работы. В режимах «По папкам» и «Весь аккаунт» нажатие кнопок *«Исключить»* и *«Удалить»* в источнике добавляет чат в этот список, благодаря чему система не добавляет его повторно. Повторный выбор чата вручную (в разделе «Источники» или из списка «Чаты») удаляет его из списка. Список вмещает до 5 000 чатов; при превышении этого лимита *команда «Удалить»* не выполняется, и вместо этого чат можно приостановить. - **Собственные действия** (включены по умолчанию): сообщения, отправляемые этим аккаунтом, его правки и нажатия кнопок на клавиатуре при ответе. Если функция отключена, исходящие сообщения и правки пропускаются. - При переключении на папку или на весь аккаунт запрашивается подтверждение: эти режимы записывают личные чаты и сообщения третьих лиц и должны использоваться исключительно в специально выделенном аккаунте. Подтверждение и каждое изменение области действия фиксируются в подписанных записях `scope.changed`. - Чаты, добавленные в рамках настроек, отображаются как источники с пометкой *«auto»* и регистрируются как `scope.applied` (в начале и ежечасно) или `source.discovered` (при появлении нового чата во время наблюдения). При возвращении к выбранным чатам все автоматически добавленные источники приостанавливаются. Чего не могут сделать эти режимы: - **Секретные чаты** находятся за пределами этих режимов сбора данных из облака. Отдельная [реализация Secret Chat](https://phishdestroy.github.io/TgWitness/ru/docs/reference/secret-chats/) находится в стадии разработки; она не включена в опубликованный сборщик данных в версии, указанной в данной документации. - **Ничто не записывается, пока TgWitness не запущен.** После перезапуска он запрашивает у Telegram пропущенные обновления и повторно проверяет чаты, однако Telegram не возвращает всю информацию после длительных перебоев в работе. В отчётах и файлах `verify.py` такие периоды отображаются как пробелы (см. [раздел «Охват»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#coverage-continuity-gaps-and-unobserved-ids)). - Изначально отображаются только первые 1 000 диалогов (ограничение указано в **разделе «Параметры»**); более старые чаты добавляются при их следующей активации. Более ранняя история добавленного чата не загружается — создайте снимок истории или выполните полный экспорт чата, когда это понадобится. - Условия папок, которые постоянно меняются (заглушенные, прочитанные), не применяются: такие чаты остаются под наблюдением. - **Кнопки бота,** нажатые в другом приложении **(с обратным вызовом)**, невидимы для второго сеанса; ответ или редактирование бота фиксируются. Нажатия клавиш при вводе ответа поступают в виде исходящих сообщений и помечаются как `button_press`. - Чем больше чатов, тем больше запросов. Telegram ограничивает аккаунты за объем, который считает чрезмерным, что является ещё одной причиной использовать специальные аккаунты. ## Объём и выбор событий Каждая рабочая область имеет собственные источники. TgWitness не вступает в группы, не принимает приглашения и не выявляет всех участников автоматически. Источники должны быть уже доступны для данной учётной записи. При запуске сборщик сверяет выбранные источники с видимыми диалогами учетной записи; проверяются первые 1 000 диалогов, если в разделе **«Параметры → Чаты, считываемые из списка учетной записи**» не указано иное. Отсутствующий источник помечается как **«доступ не подтверждён**»; не предполагается, что вас удалили из него. | Настройки | Собирает | Последствия при отключении | | --- | --- | --- | | Новые сообщения | Обычные доставленные сообщения | В случае последующих правок или удалений может отсутствовать ранее зафиксированный текст для сравнения. | | Редактирование | Предоставляются отредактированные версии сообщений | Промежуточные изменения впоследствии не восстанавливаются. | | Удаления | Уведомления об удалении с указанием объёма данных и уведомления на уровне учётной записи без указания объёма данных | Уведомления об удалении не добавляются в журнал. | | Реакции | Предоставлены моментальные снимки реакций | Отдельные обновления с реакциями не добавляются. | | Членство | Рассылка сообщений о предоставлении услуг для членов сообщества и обновлений для участников | Указанные замечания членов сообщества не включены. | Настройки применяются ко всем выбранным источникам в рабочей области. Сохраните форму, чтобы применить изменения; изменения фиксируются с подписанными значениями «до» и «после». Отключение категории не приводит к удалению ранее записанных данных. Повторное включение категории не восстанавливает пропущенные обновления. Операционные записи и другие события, связанные с обслуживанием групп, остаются отдельными от этих настроек. Сообщения службы членства могут создавать записи сообщений, когда функция членства включена, даже если обычная фиксация новых сообщений отключена. Зафиксированные объекты Telegram сохраняют встроенные метаданные; настройка не является правилом редактирования. **Удаления в личных чатах и обычных группах** поступают в виде идентификаторов сообщений без указания чата. Эти чаты используют одну общую для всего аккаунта последовательность идентификаторов сообщений, поэтому, если сообщение с данным идентификатором было сохранено ранее, его чат известен: удаление фиксируется в этом чате, причём в `chat_resolution` объясняется, как именно. Идентификаторы, которые никогда не сохранялись, остаются **удалениями без определённого контекста** с явно указанным неизвестным источником; сборщик данных не делает предположений. Telegram никогда не указывает, кто удалил сообщение; если удалённое сообщение было отправлено с данной учётной записи, в записи это указывается (`deleted_message_was_outgoing`) без указания имени удаляющего пользователя. ## Собственные действия Сообщения, отправленные наблюдаемым аккаунтом, помечаются как `outgoing`. При редактировании исходящего сообщения отмечается, что в личных чатах и группах его может редактировать только автор, тогда как сообщения в каналах могут редактироваться другими администраторами. Когда исходящее сообщение повторяет текст кнопки из последней сохраненной клавиатуры ответов в данном чате, оно помечается как «`button_press`» со ссылкой на запись этой клавиатуры. Исключение собственных действий также распространяется на фоновые повторные проверки и автоматическую историю новых чатов. Пропущенные исходящие сообщения сдвигают позицию повторной проверки вперед, чтобы они не могли блокировать последующие входящие сообщения. Явные действия на панели управления и снимки истории, запрошенные вручную, по-прежнему фиксируются. ## Режим расследования: присоединение к группам и общение с ботами **Источники → Область наблюдения → Режим расследования** настраивает область наблюдения для специальной учётной записи, которая присоединяется к групповым чатам, запускает ботов и отправляет им сообщения: вся учётная запись, каждый тип источника, собственные действия, а также для каждого появляющегося чата или бота — его профиль и последние 200 видимых сообщений. Просмотрите форму и нажмите **«Сохранить сферу»**; при переходе к всему аккаунту потребуется обычное подтверждение. - **Кнопки.** Кнопки, расположенные под сообщением, сохраняются вместе с ним и отображаются в **чатах**: ссылки, веб- приложения, ссылки для входа, текст для копирования, данные обратного вызова, встроенные запросы, запросы на указание номера телефона или местоположения. Ссылки отображаются в виде текста и никогда не открываются панелью. Когда бот изменяет только кнопки (например, новая ссылка для оплаты), это считается новой версией сообщения как при оперативных обновлениях, так и при повторной проверке. - **Новые чаты и боты**. В режимах «по папкам» и «весь аккаунт» **при появлении нового чата или бота** сохранение происходит сразу же после его появления: - его профиль в виде записи `source.profile`: описание бота и команды, текст «О себе» пользователя, группы или канала, участники, связанный чат и ссылка для приглашения, если Telegram её предоставляет; - его последние видимые сообщения (до 1 000) в виде моментального снимка истории с меткой `new_chat`: более ранние сообщения в групповом чате, к которому вы только что присоединились, или то, что сказал бот до того, как система наблюдения зафиксировала этот чат. Сообщения, уже сохраненные в режиме реального времени, не дублируются. Чаты, уже присутствующие в списке при включении режима, добавляются без создания моментальных снимков. FloodWait приостанавливает эту работу, которая возобновляется после этого; сбои регистрируются, а запись чата в режиме реального времени продолжается. Сюда входят задержки при определении идентичности нового чата: задача по профилю/истории, находящаяся в ожидании, сохраняется для повторной попытки, а существующая более длительная задержка на уровне учётной записи не сокращается. - **Профили по запросу.** **Чаты → Профиль → Сохранить профиль сейчас** сохраняет текущий профиль любого источника; самый новый отображается над сообщениями. - **Снимки состояния чата (предварительная версия).** Состояние вне потока сообщений изменяется без сообщения: снятие закрепления любого сообщения не оставляет следа на уровне сообщения, администратор теряет права, подарок скрывается, конвертируется, повышается в классе или возвращается. Во время наблюдения каждый включённый источник периодически считывается и сохраняется в виде подписанной записи `chat.state`: название, имена пользователей, описание, количество участников и администраторов, связанный чат, медленный режим, ID закреплённых сообщений (до 100), администраторы с их правами и званиями, а также подарки, отображаемые в каналах и профилях пользователей (до 100). В каждой записи перечислены отличия от предыдущего моментального снимка: изменённые поля с указанием значений до и после, закреплённые сообщения, добавленные или удалённые, администраторы и подарки, добавленные, изменённые или больше не указанные в списке. Telegram не сообщает, кто что изменил и когда между моментальными снимками. - Часть, которую Telegram скрывает (например, список администраторов канала для участника, не являющегося администратором), обозначается в `errors`; её предыдущее значение сохраняется и указывается в `carried_forward`, но никогда не отмечается как удалённое. - Запись, в которой единственными изменениями являются подсчёты, а также проверка, не выявившая изменений, относится к последнему полному состоянию с помощью `state_seq` и кумулятивной записи `state_overrides`. Полное состояние записывается не реже одного раза в семь дней и всякий раз, когда изменяется что-либо, кроме подсчёта. - `parts_complete` отмечает списки с ограничением количества элементов. Для добавления требуется полный предыдущий список, для удаления — полный текущий список, а явные пустые значения фиксируют очистку записей. - **Параметры → Состояние чата** устанавливает интервал (12 часов по умолчанию, 0 отключает создание моментальных снимков ), паузу между источниками, какие части читаются, и записываются ли проверки, не обнаружившие изменений. `FLOOD_WAIT` и `FLOOD_PREMIUM_WAIT` останавливают оставшиеся запросы на моментальные снимки, сохраняют любой более длительный срок действия для всей учётной записи и оставляют прерванный чат доступным для повторной попытки после этого ожидания. - **Не отображается.** Встроенные (обратные вызовы) кнопки, нажатые в другом приложении Telegram, всплывающее окно или ссылка, которой бот отвечает на такое нажатие, а также ссылки-приглашения, используемые в другом приложении, не попадают в TgWitness. То, что бот отправляет или редактирует после этого, фиксируется. ### Действие с панели **В разделе «Чаты»** теперь доступен мини-клиент, использующий учётную запись Telegram выбранной рабочей среды: - Напишите сообщение простым текстом или выберите **«Ответить»** под сохраненным сообщением. Отправленное сообщение фиксируется даже в том случае, если в настройках исключены исходящие обновления. - Нажмите **кнопку «Пресс»** под текущей кнопкой обратного вызова или текстовой кнопкой. Сервер повторно загрузит сообщение и отклонит действие, если текст на клавиатуре отличается от сохраненной версии. В подтверждениях обратного вызова сохраняются всплывающий текст Telegram, флаг оповещения и URL-адрес; ответ также отображается под перепиской. URL-адреса остаются выделяемым текстом и не открываются автоматически. - Раскройте **ссылку «Открыть Telegram**», введите `@username`, публичную ссылку `https://t.me/name`, `https://t.me/+invite` / `joinchat/invite` или ссылку на бота с `?start=parameter` и нажмите **«Сохранить предварительный просмотр**». Исходная ссылка и предварительный просмотр Telegram подписываются до присоединения. **Присоединение / открытие и наблюдение**: после присоединения к группе/каналу или открытия профиля пользователя/бота добавьте чат в качестве активного источника и отправьте боту `/start`, указав его стартовый параметр. Запрос на присоединение, ожидающий одобрения администратора, регистрируется как «на рассмотрении», а не как членство. Включите функцию **«Начать наблюдение»**, чтобы фиксировать входящие ответы в режиме реального времени. Действия панели работают, когда наблюдение приостановлено, однако в этом случае гарантируется сохранение только их прямых ответов. Вновь добавленные источники используют настроенный профиль/историю приёма данных, когда наблюдение находится в активном состоянии. Если источник приостановлен, включите его в разделе **«Источники»** перед отправкой сообщения или нажатием соответствующих кнопок. `interaction.preview`, `interaction.requested` и `interaction.result` — это обычные подписанные события журнала, включаемые в экспорт доказательств. Запросы идентифицируют аккаунт, сообщение/кнопку или запись предварительного просмотра, а также указывают, работала ли система наблюдения. Подтверждения различают успешное выполнение, отказ, ожидание одобрения и неизвестный результат. Прерванный запрос мог достичь Telegram: проверьте чат перед началом нового действия. Повторное использование идентификатора запроса позволяет получить его сохраненное подтверждение без повторного выполнения действия, в том числе после перезапуска. Панель сохраняет идентификатор после получения неоднозначного ответа на одно и то же действие в течение текущей сессии страницы. Она также сохраняет этот идентификатор, если обновление окна не удаётся после успешного выполнения действия: подтверждение остаётся видимым, и повторное нажатие позволяет его получить. RPC-вызовы обратного вызова и присоединения имеют одну попытку выполнения; чтения с возможностью повторной попытки сохраняют настроенную политику повторных попыток. Немедленное переключение между чатами очищает черновик и адресата ответа и отключает отправку до тех пор, пока не загрузится новый разговор. Данный мини-клиент поддерживает текстовые сообщения и кнопки обратного вызова. Для работы с веб-приложениями, запросами на вход в систему, указание номера телефона или местоположения, осуществление платежей, встроенных запросов и вложений по-прежнему требуется клиент Telegram; сохраненные метаданные кнопок остаются видимыми. В новых элементах управления используется текст на английском языке. ## Уровни повторной проверки При повторной проверке Telegram запрашивается повторно на наличие пропущенных сообщений, изменений и сообщений, которые он больше не возвращает. Источники, помеченные звёздочкой, являются **приоритетными** и по умолчанию перепроверяются каждые 15 минут; все остальные источники — каждые 6 часов. Выбранные чаты изначально считаются приоритетными, а чаты, добавленные через папку или весь аккаунт, — обычными. За один проход перепроверяется не более 30 источников, а остальные ожидают следующей минуты; после повторного подключения приоритетные источники проверяются в первую очередь. Оба интервала настраиваются в разделе «Источники» → «Настройки записи» → «Перепроверка» (значение 0 отключает уровень) и регистрируются как «`recheck.changed`». Пропущенные сообщения извлекаются, начиная с того места, где остановился предыдущий проход, в количестве не более, указанном **в разделе «Параметры» → «Количество восстановленных пропущенных сообщений за чат и проход**» (по умолчанию — 1 000). Поэтому после длительной паузы повторная проверка заполняет весь пробел, даже если сообщения, поступившие позже этого пробела, были сохранены первыми. Чат, который всё ещё находится в процессе наверстывания, проверяется повторно через минуту, а не после истечения интервала его уровня; `recheck.completed` показывает `continues_after` до тех пор, пока это не будет завершено. Сравнения включают текст сообщений, объекты, клавиатурные вводы (в том числе удаления) и содержимое/идентификационные данные вложений. Само по себе изменение хэшей доступа к файлам или ссылок на файлы не считается редактированием, равно как и то, что Telegram заполняет самостоятельно: загрузка предварительного просмотра ссылки, просмотры историй, платные медиафайлы, разблокированные данной учётной записью, получение счёта-фактуры. Каждая сохранённая версия в «Чатах» содержит ссылку на полную запись в журнале, включая метаданные медиафайлов. ## История сообщений и их авторство Предположим, что система сбора данных фиксирует сообщение «Встреча в 10:00», затем обнаруживает сообщение «Встреча в 11:00», а после этого получает уведомление об удалении. В результате добавляются три отдельных записи: исходный текст сохраняется, отредактированная версия хранится отдельно, а уведомление фиксирует факт обнаружения удаления. Если сбор данных начался после исчезновения первой версии, этот текст недоступен. Если во время перерыва в работе произошло несколько изменений, сохраняются только версии, зафиксированные впоследствии. Уведомление об удалении не позволяет восстановить контент, который не был зафиксирован ранее. Отправитель сообщения не всегда является лицом, внесшим в него изменения. Telegram, как правило, не предоставляет информацию о том, кто удалил сообщение, или о точном времени удаления. Неизвестные участники остаются неизвестными. Снимки реакций и обновления участников содержат лишь данные о количестве и идентификационных данных, которые Telegram делает видимыми для данного аккаунта. Порядковые номера отражают последовательность наблюдений. Временная метка UTC сборщика соответствует его местному времени; временная метка источника Telegram хранится отдельно, если она предоставлена. Ни одна из них не является независимой достоверной временной меткой. ## Снимки истории Снимок запрашивает последние доступные сообщения из включённого источника — до 500 за запрос. Результаты отмечаются как наблюдения истории. Ручной снимок резервирует свободный аккаунт; сначала явно приостановите мониторинг. Повторные наблюдения сохраняются отдельными записями. Снимки соответствуют политике вложений, но сохраняют отдельность от переключений в режиме реального времени. Они не восстанавливают удалённые сообщения или пропущенные промежуточные версии. Вы можете запросить снимки во время паузы; любые вложения, находящиеся в очереди, ожидают начала наблюдения и запуска модуля загрузки. Загрузка **Истории** — отдельная исключительная задача: она последовательно читает выбранные источники и скачивает вложения из их очереди, не запуская мониторинг. Пауза освобождает аккаунт; возобновление продолжает сохранённый запуск. Фильтры по датам, языку и ответам с использованием нескольких свободных аккаунтов описаны в разделе [«Распределённая выгрузка чата»](https://github.com/phishdestroy/TgWitness/blob/main/docs/DISTRIBUTED-EXPORT.md). ## Обработка вложений Загрузка вложений включена по умолчанию и приостанавливается при наличии свободного места на диске менее 1 ГиБ. Коллектор фиксирует наблюдение за сообщениями и задание на загрузку одновременно. Задание сохраняет исходный дескриптор мультимедиа и политику размера, поэтому вложение, отредактированное позднее, не заменяется незаметно. Загрузка запускается после захвата сообщения. По завершении загрузки создаётся запись формата `media.saved` с указанием SHA-256 и количества байтов. Пропущенные, неудачные, повторные и прерванные операции имеют отдельные результаты. Нахождение задания в очереди не является доказательством того, что файл был сохранен. Завершённый файл также должен соответствовать количеству байтов, указанному в исходном дескрипторе вложения. Короткий или неожиданно длинный ответ не регистрируется как сохранённый медиафайл. Ограничения устанавливаются **для каждого типа**: фотографии, видео, GIF-файлы и анимации, круглые видеосообщения, голосовые сообщения, музыка и аудио, стикеры и файлы. Каждый тип можно отключить, и для него установлен собственный лимит размера от 1 до 2 000 MiB; в новых рабочих пространствах по умолчанию установлены лимиты: 20 MiB для фотографий, 100 MiB для видео, 50 MiB для файлов, аудио и круговых видео, 20 MiB для голосовых сообщений и GIF-файлов, а также 5 МИБ для стикеров. В новых рабочих пространствах GIF-файлы и стикеры по умолчанию отключены до момента их включения. В рабочих пространствах с политиками, сохраненными до введения ограничений по типам, все типы остаются включенными и сохраняют единое ограничение для каждого типа. *Максимальный размер файла* устанавливается для всех типов одновременно. Отключение того или иного типа приводит к созданию записи `media.skipped`; файлы неизвестного размера или превышающие ограничение не загружаются. Для загрузки больших файлов предоставляется дополнительное время в зависимости от их размера и базовой скорости 256 КиБ/с. Задания сохраняются после перезапуска, однако истекшие ссылки, утраченный доступ или удаленные файлы по-прежнему могут препятствовать восстановлению. Ожидающие задания сохраняют установленный для них лимит, поэтому увеличение лимита применяется только к новым файлам. Отключение типа или снижение его лимита также приводит к пропуску ожидающих файлов, которые он исключает, причём для каждого из них создаётся запись `media.skipped`; отключение загрузок приостанавливает работу очереди до тех пор, пока их не включат снова. ## Приостановка, блокировка, отключение и перезапуск | Действие или состояние | Эффект | | --- | --- | | Переключить рабочую область | Изменяет вид панели; состояние других сборщиков данных сохраняется. | | Заблокируйте панель или закройте вкладку | Сервер и процесс мониторинга продолжают работать. | | Наблюдение с паузой | Останавливает работу данного сборщика и сохраняет в очереди вложения. | | Отключить источник | Прекращает будущий захват в заданном диапазоне; задания по обработке мультимедиа, находящиеся в очереди, приостанавливаются на время отключения данного инструмента. | | Удалить источник | Он игнорирует его как источник и удаляет профили пользователей; уже сохраненные записи остаются в журнале, доступном только для добавления данных. Вложения, которые все ещё находятся в очереди на обработку, регистрируются как неудачные (`source_removed`). В режимах «папка» и «весь аккаунт» они также исключаются. | | Измените маршрут подключения | Требует паузы, закрывает старые клиенты и отменяет незавершённый вход в систему. | | Остановите процесс Python | Приостанавливает работу всех рабочих пространств; в режиме офлайн наблюдения не ведутся. | | Перезапуск после активного наблюдения | Попытка возобновить работу с сохраненным диапазоном с использованием сохраненной сессии. Ручная пауза отменяет эту попытку. | Коллектор фиксирует обнаруженные обрывы соединения, повторные попытки, ошибки, запуски/остановки и сигналы проверки работоспособности. Кратковременные перебои могут быть пропущены при периодической проверке подключения. После перезапуска запрашиваются пропущенные обновления, начиная с сохраненной позиции обновления, а наблюдаемые чаты периодически перепроверяются; см. [формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#durable-collection-and-process-receipts-02). Снимок экрана обеспечивает контекст; он не доказывает, что пробел был устранен. ## Изоляция и верификация учетных записей Каждая рабочая область имеет собственный журнал, авторизацию, ключ подписи, политику и очередь. Только активный клиент данной рабочей области может вносить наблюдения в режиме реального времени. Клиенты со статусом «Отклонено», «В ожидании», «Заменено» и «Тест соединения» не могут записывать обновления в режиме реального времени в журнал данной рабочей области. Различные учетные записи могут наблюдать за одной и той же группой, однако их журналы остаются отдельными. Каждое событие содержит предыдущий хеш и подпись Ed25519. Экспорт охватывает весь журнал рабочего пространства по фиксированному порядковому номеру. Панельные фильтры не влияют на содержание экспорта; сбор данных может продолжаться за пределами его границ во время подготовки экспорта. **Журнал проверки** проверяет цепочку событий и подписи в пределах отображаемого диапазона. Его результаты очищаются при смене рабочей области, и панель выделяет новые записи, добавленные после проверки. Экспорт в формат ZIP также обеспечивает проверку собранных медиафайлов. Сохраните отпечатки и контрольные точки отдельно. См. раздел « [Область верификации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope)» для проверок сбора данных в каждом режиме, а также раздел «[Ежедневные операции](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/)» для рутинного сбора данных. --- # Секретные чаты Telegram: состояние реализации Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/secret-chats/ Ознакомьтесь с отдельной реализацией Секретного чата, опробуйте вымышленный интерфейс и проанализируйте неисправленные дефекты. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Ознакомьтесь с отдельной реализацией Секретного чата, опробуйте вымышленный интерфейс и проанализируйте неисправленные дефекты. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) **Состояние на 6 ноября 2026 года:** отдельная реализация Секретного чата находится в разработке. Она не была включена в опубликованную ветку `main` на версии `3d23e52b647b`. Обычный сборщик и экспорт Takeout не собирают данные Секретных чатов. Интерактивный сценарий на веб-сайте демонстрирует интерфейс с вымышленными данными; он не поддерживает обмен сообщениями в Telegram. ## Где находится реализация Коммит `0e60f88e` добавил **Sources → Pseudo-secret** в локальную ветку разработки `fix/panel-routes-sessions`. Проверенный снимок — `bb8788fb685c`. Его реализация включает `tgwitness/secret_chats.py`, маршруты приложения, `tgwitness/static/views/secret-chats.js` и специальные тесты. Дополнительный компонент `secret-chats` в этой ветке использует [KiaroSama/Telethon-Secret-Chat](https://github.com/KiaroSama/Telethon-Secret-Chat), закреплённый на `d87bf037b90060383c7b704d8a06ebb98c621c6f`. Библиотека реализует протокол сквозного шифрования чатов Telegram на основе существующей авторизации Telethon для учётной записи. Установка только этой библиотеки не добавляет недостающую интеграцию в `main`. ## Что делает интерфейс разработчика | Действие | Зафиксированное поведение | | --- | --- | | Начать чат по имени пользователя или ID пользователя | Отправьте запрос; другой участник должен его принять. | | Принять входящий запрос | TgWitness становится конечной точкой приема для данного чата. Автоматическое принятие — это отдельная настройка, по умолчанию отключенная. | | Отправить или получить сообщение | Добавить исходящую или входящую запись `secret_chat.message` и отобразить её в цепочке сообщений. | | Получить вложение | Расшифруйте его, сохраните его байты по SHA-256 и запишите `secret_chat.file`. | | Получить уведомление с таймером или уведомление об удалении | Зафиксировать уведомление и сохранить ранее зафиксированное содержимое. | | Просмотрите переписку | Отобразить сообщения, файлы, уведомления и визуализацию ключей. Открытая вкладка обновляется каждые четыре секунды. | В тестовой сборке, содержащей данную интеграцию, оператор включает модуль для выбранного аккаунта и подключает его. Для запуска, принятия и отправки требуется разрешение на взаимодействие, а также отключение режима только для чтения для данного аккаунта. Другой участник должен принять новый исходящий чат. Эти элементы управления отсутствуют в опубликованном приложении в версии, указанной выше. Охватываются только чаты, созданные или принятые в рамках данной сессии TgWitness. Существующие секретные чаты на телефоне остаются на этом устройстве. Импорт сессии не предоставляет их отдельных ключей шифрования. Ключевые материалы и счетчики секретных чатов хранятся в хранилище рабочей области; сохраненные сообщения и расшифрованные файлы подчиняются стандартным мерам защиты хранилища рабочей области. ## Демонстрация на веб-сайте Сценарий «**Try Secret Chat**» на веб-сайте открывает вымышленный разговор. Он позволяет читателю инициировать запрос, смоделировать его принятие, отправить пример сообщения, получить запрограммированный ответ и файл, а также проверить таймер и уведомление об удалении. Входящий запрос также можно принять. Элементы управления явно обозначают смоделированные действия собеседника. Данный сценарий работает в памяти браузера. При сбросе или перезагрузке он очищается. Он не входит в систему, не связывается с Telegram, не создаёт реальных ключей шифрования и не изменяет загруженные подписанные образцы. Отображаемые им сообщения не являются подписанными доказательствами. Сценарий демонстрирует предполагаемое взаимодействие; он не подтверждает, что реализация разработки готова к использованию. ## Проверки и неисправленные дефекты Пять существующих тестов охватывают сохранность зашифрованного ключа, жизненный цикл и записи сообщений, политику принятия входящих сообщений, отправку в режиме только для чтения и экспорт вложений. Они прошли проверку на закреплённой библиотеке во время обзора 6 ноября. Три дополнительные синтетические проверки воспроизвели дефекты в том же снэпшоте: | Выводы | Последствия | | --- | --- | | Закрытие обходит `read_only` | Путь закрытия может выполнять удаленное действие, когда взаимодействия должны быть заблокированы. | | Поиск дубликатов осуществляется только среди недавних записей 500 | Старая запись воспроизведения может создать дубликат после перезапуска. | | Неудачная загрузка вложения приводит к удалению соответствующей записи в списке ожидающих | Временный сбой приводит к потере задания повторной попытки. | Это открытые дефекты, также зафиксированные в опубликованном отчете об аудите . Пять успешно пройденных тестов не охватывают эти сбои. В ходе проверки использовались синтетические рабочие пространства и имитированные операции Telegram; она не повторяла реальный процесс установления соединения и не подтверждала пригодность для развертывания в производственной среде. --- # Загрузка истории Telegram и подписанный отчёт о ходе Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/ Загрузка прошлых сообщений из включенных источников, приостановка и возобновление, а также проверка подписанного отчета о ходе работы. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Загрузка прошлых сообщений из включенных источников, приостановка и возобновление, а также проверка подписанного отчета о ходе работы. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Коллекция](https://github.com/phishdestroy/TgWitness/blob/main/docs/COLLECTION-MODES.md) ![Сборник](https://phishdestroy.github.io/TgWitness/assets/chapter-collect.svg) В **Sources** просмотрите включенные чаты, приостановите наблюдение, выберите Стандартный API или экспорт Takeout, затем выберите **Загрузить полную историю**. Запуск фиксирует этот список источников и считывает доступные прошлые сообщения в Чаты и подписанный журнал наблюдений. Медиафайлы используют существующие настройки вложений и постоянную очередь загрузки. Это отдельно от подписанного экспорта в формате JSON/HTML для каждого чата. Для сбора данных по всей учётной записи выберите **Вся учётная запись**, запустите наблюдение, чтобы загрузить её исходный список, и проверьте этот список перед запуском истории. Ограничение на количество диалогов в списке по-прежнему действует (по умолчанию 1,000, настраивается в Параметрах). Успешный запуск не гарантирует, что все диалоги учётной записи были включены в список. Для чатов, обнаруженных или включённых позже, требуется повторный запуск. Приостановите наблюдение перед запуском истории; одновременно сбором данных по одной учётной записи занимается только один процесс. Выберите от одного до пяти обработчиков вложений и укажите, следует ли сохранять доступные Недавние действия и сравнивать ранее сохраненные версии. Вынос данных может потребовать утверждения в Telegram и определённого сервером времени ожидания. Эти настройки остаются неизменными при возобновлении работы. См. раздел [Поведение Backfill и Контракт доказательств](https://github.com/phishdestroy/TgWitness/blob/main/docs/BACKFILL.md) для получения подробностей о транспортировке, повторных попытках и доверии. ## Приостановка, возобновление и частичные результаты - **Приостановить историю** останавливает чтение. **Продолжить историю** возобновляет с последнего зафиксированного сообщения в каждом источнике; при перезапуске приложения выполнение также остается приостановленным до возобновления. Для возобновления требуется тот же неактивный аккаунт Telegram. - Наблюдение за сообщением, обработка вложений и фиксация положения курсора выполняются в одной транзакции. При возобновлении выполнения уже зафиксированные наблюдения не повторяются. В режиме реального времени или в рамках отдельного, явно запущенного цикла могут независимо наблюдаться одни и те же сообщения. - Каждый источник (каждый разделённый диапазон Telegram в Takeout) фиксирует верхний ID сообщения при первом чтении. Более новые сообщения относятся к текущему наблюдению, а не к оставшимся историческим страницам этого источника. - Недоступные источники и источники, отключенные во время сбора данных, остаются видимыми как «неудачные» или «пропущенные». Работа с остальными источниками продолжается; общий результат является неполным. - Задержки FloodWait учитывают настроенный для аккаунта интервал повторных попыток. При временных сбоях повторные попытки выполняются до пяти раз; при исчерпании квоты или нехватке места на диске происходит пауза с сохранением положения курсора. - **Завершение данного цикла истории** сохраняет сохраненные наблюдения. Оно не удаляет их и не отменяет задания по прикреплению файлов через стандартный API. Завершение Takeout помечает оставшиеся файлы Takeout как пропущенные; приостановка позволяет возобновить их обработку. Новый цикл заново считывает включенные источники. Завершение истории описывает только чтение истории. Вложения могут оставаться в ожидании, завершиться сбоем или быть исключены в соответствии с настроенной политикой. Проверяйте подтверждения получения медиафайлов в журнале и в очереди вложений; только завершенное подтверждение с сохраненными байтами считается сохраненным вложением. Операция с историей представляет собой явный запрос на создание моментального снимка и не связана с параметрами, выбирающими категории будущих событий в режиме реального времени. ## Передача и проверка Сохраните **подписанный отчёт о ходе работы**, а затем воспользуйтесь **функцией «Экспорт доказательств»**, чтобы загрузить журнал и сохраненные вложения. Более поздний экспорт доказательств может включать дополнительные записи; отчёт привязывает свои счетчики к префиксу журнала на момент его создания. Запустите верификатор из надёжной копии этой версии: ``` python tgwitness/verify.py tgwitness-history-report.json --evidence evidence.zip --fingerprint TRUSTED_FINGERPRINT ``` Сохраните ожидаемый отпечаток ключа подписи отдельно. Верификатор проверяет подпись отчёта, архив доказательств, контрольную точку отчёта, исходный план, учётную запись и количество сохраненных/недоступных сообщений. Новые прогоны также привязывают ход выполнения исходного плана и параметры к подписанным событиям курсора. Без параметра `--evidence` проверяется только подписанный отчёт и его внутренняя согласованность. Устаревшие поля прогресса и сводки вложений остаются подписанными заявлениями сборщика. Верификатор доказательств проверяет байты заархивированных медиафайлов. Ни подписание, ни завершение доступной истории не доказывают происхождение из Telegram, наличие атомарного моментального снимка или историческую полноту. Сообщения могут изменяться во время чтения; удалённые сообщения и промежуточные правки, не входящие в доступные Недавние действия, а также секретные чаты, не восстанавливаются. Оператор, контролирующий ключ подписи, может сфабриковать журнал до появления внешних обязательств. Используйте отдельно сохраняемые контрольные точки или независимого свидетеля для подтверждения свойств обнаружения несанкционированного вмешательства. Курсор сбора данных отражает состояние локальной рабочей области. Восстановление только ZIP-архива с доказательствами не приводит к восстановлению ожидающего выполнения задания на сбор данных или сеанса Telegram. Сохраните резервную копию рабочей области, если требуется продолжение выполнения исходного задания. --- # Эксплуатация TgWitness: сбор, экспорт и восстановление Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/ Ежедневная эксплуатация панели управления: режимы работы, категории мониторинга, параметры, уведомления, экспорт данных, резервное копирование и емкость хранилища. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Ежедневная эксплуатация панели управления: режимы работы, категории мониторинга, параметры, уведомления, экспорт данных, резервное копирование и емкость хранилища. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) При первом подключении используйте [учетные записи и форматы сеансов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/). Объяснение понятий «сохраненные версии», «политики событий» и «пробелы» см. в разделе [«Как работает сбор данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/)». В данном руководстве рассматриваются вопросы повседневной эксплуатации и восстановления данных. Управляемая установка включает файлы **, START-HERE.html,** и **, а также файл START-HERE.txt и** наряду с её программой запуска, со ссылкой на репозиторий и командами, адаптированными к пути установки. Запустите `tgwitness guide --print` через SSH или `tgwitness paths`, чтобы определить фактический каталог данных. При установке с правами root через systemd частные данные хранятся в `/var/lib/tgwitness-…`; `/opt/tgwitness` содержит саму программу. Для управляемого временного туннеля Cloudflare код `tgwitness tunnel off` закрывает публичный доступ, при этом локальная панель и сбор данных продолжают работать. Код `tgwitness tunnel on` включает его; код `tgwitness tunnel restart` создает новое туннельное соединение. Используйте код `tgwitness open`, чтобы увидеть его текущий адрес. Явное отключение сохраняется после перезапуска службы. Код `tgwitness stop` останавливает как панель, так и сбор данных. **На этой странице** - [Рабочий процесс оператора](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#operator-workflow) - [Совместная работа без передачи главного ключа](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#share-work-without-sharing-the-main-key) - [Режимы работы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#runtime-modes) - [Категории мониторинга](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#monitoring-categories) - [Уведомления](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#notifications) - [Расположение панелей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#panel-layout) - [Среды развертывания](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#deployment-environments) - [Проверки при запуске и экспорт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#startup-checks-and-exports) - [Резервное копирование, восстановление и сбои](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#backup-restore-and-interruptions) - [Вместимость и срок хранения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/#capacity-and-retention) ## Рабочий процесс оператора Блок-схема · Выберите тип хранения и способ защиты ключей → Откройте панель с помощью токена; Откройте панель с помощью токена → Выберите рабочую область; Выберите рабочую область → Настройка прямого или прокси-маршрута; Настройка прямого или прокси-маршрута → Введите номер телефона или выберите файлы / QR-код; Введите номер телефона или выберите файлы / QR-код → Проверьте личность владельца аккаунта и выберите доступные группы; Проверьте личность владельца аккаунта и выберите доступные группы → Сохраните политики событий и вложений, после чего начните наблюдение; Сохраните политики событий и вложений, после чего начните наблюдение → Мониторинг ошибок, доступа, очередей и дискового пространства; Мониторинг ошибок, доступа, очередей и дискового пространства → Сохранение независимых контрольных точек; Сохранение независимых контрольных точек → Экспорт и проверка материалов · Выберите тип храненияи способ защиты ключей · Откройте панель спомощью токена · Выберите рабочуюобласть · Настройка прямого илипрокси-маршрута · Введите номер телефонаили выберите файлы /QR-код · Проверьте личностьвладельца аккаунта ивыберите доступныегруппы · Сохраните политикисобытий и вложений,после чего начнитенаблюдение · Мониторинг ошибок,доступа, очередей идискового пространства · Сохранение независимыхконтрольных точек · Экспорт и проверкаматериалов **Схема в текстовом формате** 1. Выберите тип хранения и способ защиты ключей → Откройте панель с помощью токена 2. Откройте панель с помощью токена → Выберите рабочую область 3. Выберите рабочую область → Настройка прямого или прокси-маршрута 4. Настройка прямого или прокси-маршрута → Введите номер телефона или выберите файлы / QR-код 5. Введите номер телефона или выберите файлы / QR-код → Проверьте личность владельца аккаунта и выберите доступные группы 6. Проверьте личность владельца аккаунта и выберите доступные группы → Сохраните политики событий и вложений, после чего начните наблюдение 7. Сохраните политики событий и вложений, после чего начните наблюдение → Мониторинг ошибок, доступа, очередей и дискового пространства 8. Мониторинг ошибок, доступа, очередей и дискового пространства → Сохранение независимых контрольных точек 9. Сохранение независимых контрольных точек → Экспорт и проверка материалов Авторизация, транспортная связь, доступ к группе и полнота доставки являются разными свойствами. Зелёный статус соединения не означает, что все события были зафиксированы. ## Делитесь результатами работы, не раскрывая главный ключ Открытый **доступ** позволяет предоставить рецензенту или аналитику собственный токен. Выберите учетные записи и чаты, к которым им будет разрешен доступ, а затем предоставьте право на просмотр, экспорт или выполнение операционных действий. Оператору, запускающему или останавливающему сбор данных, требуется полный доступ ко всему рабочему пространству; доступ рецензента может быть ограничен одним чатом. Ограничения по сеансам, сроки действия и правила IP-адресов не связаны с авторизацией учетной записи Telegram. См. раздел [«Доступ и разрешения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/)». Используйте **функцию «Открытые сессии»** для прекращения соединения или отзыва доступа, чтобы завершить все сессии. Консоль администратора объединяет данные о текущей активности процессов во всех рабочих пространствах. Закрытие сессии не прерывает работу системы сбора данных. ## Режимы работы | Режим | Действие | Поведение | | --- | --- | --- | | Демонстрационная версия | scripts\Demo.cmd или `--demo` | Синтетические данные; подключение к реальным аккаунтам отключено | | Замечание | Начать наблюдение | Регистрация обновлений по выбранным источникам | | Снимок истории | Источники → моментальный снимок истории | До 500 текущих сообщений; реконструкция всех прошлых изменений не производится | | Пауза | Наблюдение с паузой | Остановка сбора данных с сохранением имеющихся данных и заданий в очереди | | Проверка/передача | Экспорт | Форматы ZIP, JSONL/CSV/HTML, контрольные точки, подтверждение обработки и запрос временных меток | | Наличие нескольких учётных записей | Рабочие пространства или кнопка **«+»** вверху | Неограниченное количество отдельных рабочих пространств в рамках одного процесса | Доступ к локальной демо-версии открывается автоматически без ручного ввода токена. Используется возможность, действующая на протяжении всего срока жизни процесса и действительная только для прямого доступа по лупбэку к изолированной синтетической демо-версии; токен главной панели не раскрывается. Реальные рабочие пространства, а также удалённый или проксированный доступ к демо-версии сохраняют аутентификацию по токену. Вход в демо-версию не предоставляет авторизации в Telegram. ## Категории мониторинга ![Настройки мониторинга для каждого аккаунта с использованием синтетических исходных данных](https://phishdestroy.github.io/TgWitness/assets/sources.png) В разделе **«Источники» → «Запись» → «Выбрать, какие изменения сохранять»** можно отдельно выбрать новые сообщения, правки, уведомления об удалении, обновления реакций и события, связанные с членством. По умолчанию сохраняются все категории. Настройка **«Сообщения, правки и удаления»** сохраняет исходный контекст, отключая при этом отдельные обновления реакций и события, связанные с членством. **Настройка «Вся видимая активность»** восстанавливает все пять категорий. Предустановки изменяют форму; нажмите **«Сохранить настройки записи»,** чтобы применить изменения. Сохраненная политика применяется ко всем выбранным источникам в данном рабочем пространстве. Другие рабочие пространства сохраняют свои собственные настройки. Каждое фактическое изменение фиксируется с указанием подписанных значений «до» и «после» ; текущая политика также включается в подтверждения процессов и записи о начале наблюдения . Отключение категории не приводит к удалению ранее зафиксированных наблюдений. Повторное включение не позволяет восстановить пропущенные изменения. В данной версии отсутствует возможность переопределения категорий на уровне отдельных групп. Оставьте функцию «Новые сообщения» включённой, если важно сохранить предыдущее содержимое: уведомление об удалении не позволяет восстановить текст, который никогда не был зафиксирован. Оперативные записи, записи об охвате и другие события, связанные с работой групп, всегда сохраняются. Откровенные моментальные снимки истории отделены от выбора категорий в режиме реального времени и могут включать служебные сообщения. Эти настройки не удаляют метаданные о реакциях/участниках, встроенные в иначе зафиксированный объект Telegram. При приостановке создания моментального снимка истории в очереди могут оставаться вложения. Начните наблюдение, чтобы обработать их. Нахождение в очереди не означает, что файл загружен. Недоступный исходный файл не заменяется более новой отредактированной версией; результаты фиксируются отдельно. **Функция «Lock»** очищает доступ к браузеру и скрытые поля, но оставляет процесс сбора данных запущенным. Закрытие вкладки также оставляет процесс запущенным. Остановка процесса Python или службы прекращает сбор данных независимо от состояния браузера. Удаление дополнительного рабочего пространства останавливает работу его сборщика и удаляет локальные данные. Если удаление прерывается из-за заблокированного файла или ошибки файловой системы, панель сообщает об ошибке и сохраняет рабочее пространство в списке как недоступное (`DeletionPending`). Закройте программы, в которых открыты его файлы, и повторите попытку **удаления**. Перезапуск TgWitness оставляет данную рабочую область в остановленном состоянии и не восстанавливает её частично удалённый журнал или ключи. Успешное удаление фиксируется только после удаления каталога; отдельно экспортированные или резервные копии остаются в соответствии с собственной политикой хранения. ## Уведомления Откройте **«Дополнительно» → «Уведомления» → «Настройки**». TgWitness использует Apprise для отправки уведомлений в Matrix, Telegram, Discord, Slack, ntfy, по электронной почте и в другие поддерживаемые сервисы. К одной рабочей области можно добавить несколько пунктов назначения. 1. Введите по одному адресу Apprise в каждой строке. Формат адреса для своего сервиса найдите в [каталоге сервисов и форматов URL](https://appriseit.com/services/). 2. Включите **Отправлять уведомления** и выберите оповещения о проблемах, изменениях в наблюдаемых чатах и ежедневный отчёт. Время ежедневного отчёта задаётся по часовому поясу сервера. 3. Включите **Добавлять короткие выдержки**, если хотите получать в уведомлениях сохранённый текст удалённых и отредактированных сообщений. 4. Нажмите **Сохранить уведомления**, затем **Отправить тест**, чтобы проверить доставку. Для собственного сервера используйте [JSON-вебхук](https://appriseit.com/services/json/) Apprise. Например, `jsons://notify.example.org/tgwitness` отправляет JSON по HTTPS на указанный адрес. Это вымышленный пример — замените его адресом своего получателя. Получатели и настройки относятся к выбранному рабочему пространству. Уведомления об изменениях охватывают его наблюдаемые источники, включая новые чаты. Колокольчик на верхней панели также показывает недавние проблемы и изменения в чатах. В демо настройки уведомлений видны, но отправка отключена. Настройте доставку в рабочем пространстве вне демо. Уведомления используют его прямое соединение, SOCKS5 или HTTP; MTProxy для них не подходит. Получателям без HTTP, например SMTP, требуется прямое соединение. ## Структура панели ![Рабочая среда «Connection» с использованием синтетических данных](https://phishdestroy.github.io/TgWitness/assets/connection.png) **Журнал** отображает наблюдения, функции поиска и фильтры. При редактировании открываются сохраненные версии; при удалении — предыдущее содержание, если оно доступно. Неизвестные источники указываются явно. Статистика доступна в разделе **«Обзор»**; подробности о сборе данных приводятся в локальном руководстве. Откройте отредактированное сообщение, чтобы сравнить его версии в режиме **Изменения в тексте** или **Рядом**; вкладка **Исходные данные** показывает сохраненные поля. Изменения скрытых ссылок и кнопок ботов отображаются отдельно. Откройте предпросмотр вложения для просмотра сохраненных изображений, аудио или видео; кнопка скачивания позволяет получить сохраненный оригинал. Режим **Live** обновляет журнал и чаты по мере поступления записей. Приостановите его на время проверки или используйте кнопку новых событий, когда будете готовы; сбор данных при этом продолжает работать. Сочетание **Ctrl/Cmd+K** находит действия панели и выполняет поиск по журналу. **Раздел «Источники»** содержит информацию о сфере наблюдения (выбранные чаты, папка Telegram или весь аккаунт), доступные чаты всех типов, выбранные источники с отметками приоритета, настройки вложений и повторной проверки, а также снимки истории. Частные источники выбираются по диалогу/ID без публичной ссылки. Статус доступа отражает результаты последней проверки, а не постоянные разрешения. Отфильтруйте источники, отметьте их флажками, а затем одновременно включите, приостановите или отметьте их как приоритетные. В списке доступных чатов кнопка **Добавить выбранные** использует ваш выбор; **Добавить все найденные** использует текущий поисковый запрос и фильтр по типу. **В разделе «Чаты» → «Участники»** перечислены все пользователи, сообщения которых сохранены; если для данного чата включена функция отображения профилей участников, один клик открывает профиль данного пользователя со ссылками на записи в журнале. Раздел **Witness** позволяет создать токены свидетелей с доступом только для чтения, показывает время их последней проверки и содержит команды и параметры запуска ([независимый свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/)). **В разделе «Параметры»** указаны все ограничения и темпы работы рабочей среды, которые не представлены на других страницах: количество прочитанных диалогов, частота повторного считывания списка чатов, интервалы проверки работоспособности и контрольных точек, буфер запуска, способ распределения запросов при повторной проверке (начальная задержка, количество чатов за проход, пауза между чатами, восстановленные и повторно запрашиваемые сообщения), резерв дискового пространства, таймауты и повторные попытки загрузки, критерии поиска профилей пользователей (включая ваши собственные регулярные выражения), размер и частота уведомлений, ограничения на создание снимков, ZIP-архивы и загрузку через браузер, а также таймауты и повторные попытки клиента Telegram. В каждом поле отображается диапазон значений и значение по умолчанию; изменённые поля отмечаются и могут быть восстановлены по отдельности или все сразу. Каждое изменение фиксируется как «`parameters.changed`» с указанием значений до и после, а записи о начале наблюдения содержат названия действующих значений. Значения вступают в силу при следующем использовании; таймауты и повторные попытки клиента — при следующем подключении. Интервалы повторной проверки, типы и размеры вложений, а также интервалы хранения доказательств и резервных копий за пределами сайта остаются на отдельных страницах и могут принимать любые значения в пределах своего диапазона, а не только предустановленные настройки. Звоночек в верхней панели отображает список недавних проблем и изменений в отслеживаемых чатах; непрочитанные сообщения подсчитываются до тех пор, пока не будут помечены как прочитанные. Изменения сгруппированы по чатам и часам («12 удалено, 1 отредактировано, 0 не найдено»), а такие проблемы, как выход из системы или переполнение диска, остаются в списке независимо от интенсивности активности в чатах. **Регистрация** начинается с поля ввода номера телефона. **Нажатие кнопки «Продолжить»** ведёт непосредственно к вводу кода; запрос учетных данных API происходит только в случае их отсутствия. Вкладки «QR» и «Импорт файла» являются альтернативными вариантами. Сохраненные учетные данные API используются повторно только в пределах собственной рабочей области. На экране ввода отсутствуют боковая панель, статистика и разделы настроек. Значок **«Настройки**» открывает управление API, прокси, хранилищем и дополнительными учётными записями. Новая установка начинается здесь; для подключённых учётных записей без выбранных источников процесс начинается со страницы **«Выбрать чаты**». Изменение маршрута требует приостановки наблюдения и отменяет незавершённый вход в систему. Существующий журнал не может быть незаметно привязан к другой учётной записи Telegram. **Функция экспорта** проверяет целостность журнала и генерирует переносимые файлы. Идентификатор рабочей области можно передать в командную строку при загрузке. Каждый экспорт фиксирует префикс полного журнала; последующие события попадают в следующий экспорт. Фильтры поиска не изменяют область действия пакета. Подробная информация о подписании и охвате приведена в разделе **«Проверка и ограничения**». На панели отображается состояние коллектора, медиафайлы в очереди/с ошибками, самые старые медиафайлы в ожидании, свободное место на диске, паузы в запросах и источники, доступ к которым не подтверждён, в разделе **«Состояние коллектора»**. Изначально эти сведения свернуты и скрыты на вкладке «Учётная запись». На карточке настроек отображается следующий шаг: подключить учётную запись, выбрать источники или начать мониторинг. Список учётных записей представляет собой моментальный снимок на момент загрузки; выбранная рабочая область обновляется периодически. Это не многопроцессный монитор SLA. В пользовательском интерфейсе используются локальные ресурсы и рендеринг текста для исходного контента. Проведено тестирование макетов для настольных компьютеров и узких экранов на базе Chromium. Данная проверка не является полной сертификацией доступности; оценка удобства использования с помощью экранных считывателей и для пользователей остаётся отдельной задачей. ## Среды развертывания | Среда | Установка | Статус проверки | | --- | --- | --- | | ПК/сервер под управлением Windows | Python 3.11+, scripts\Setup.cmd/Start.cmd, каталог с конфиденциальными данными | Проверено локально на Windows/Python 3.12 | | Сервер Linux/VPS | Python venv, выделенный сервер, HTTPS/SSH | Приведены примеры кода, CI и systemd; на данном хосте не выполняются | | macOS | Python venv, процесс в фоновом режиме или пользовательский агент | Приведён пример с использованием launchd; требуется отдельная проверка установки | | Docker/Compose | Постоянный объём данных, один рабочий узел | Предоставляются определение и проверка работоспособности CI; Docker недоступен локально | | Мобильный браузер | Войдите в защищённую панель управления на работающем сервере | Проверена версия с узким макетом на базе Chromium; сборщик данных не работает на iOS/Android | Переносимость означает отсутствие обязательного использования облачного сервиса или сборки интерфейса. Каждому целевому компьютеру по-прежнему требуются совместимые зависимости Python/crypto, а также доступ к локальному диску и сети. См. [файл DEPLOYMENT.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) и [шаблоны сервисов](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md). Рабочие пространства совместно используют ЦП, память и цикл событий. Для изоляции процессов используйте отдельные экземпляры, порты, каталоги данных и авторизации учетных записей. Единой панели управления для отдельных экземпляров не существует. Ни в коем случае не направляйте несколько рабочих процессов на одну базу данных. ## Проверка и экспорт данных Перед запуском подготовленной среды выполните команду `python start.py --check`. Добавьте `--json` для машинно-читаемых проверок или передайте необходимые параметры `--data-dir`, `--host` и `--port`. Данная команда проверяет наличие необходимых условий без входа в Telegram и без создания журнала. Она не проверяет журнал и не подтверждает готовность к записи; проверка журнала выполняется во время запуска приложения. Занятый порт может просто означать наличие существующего экземпляра. Браузеры, поддерживающие API доступа к файловой системе, сохраняют экспортированные данные через поток с правом записи. Другие браузеры буферизуют не более 128 MiB. Для экспорта больших объемов данных или при использовании браузеров без поддержки потоковой передачи файлов воспользуйтесь командной строкой потоковой передачи: ``` python -m tgwitness.download --token-file data/live/panel-token.txt --out evidence.zip ``` Добавьте `--profile ID` из раздела «Экспорт» для дочернего рабочего пространства. Для удалённого доступа используйте `--url https://server` . Простой HTTP допускается только для адресатов с обратной связью. Токен считывается из файла и отправляется в заголовке, а не выводится на экран или включается в URL-адрес. Перенаправления не допускаются. Существующие адресаты не перезаписываются. При сбое передачи удаляется её временный фрагмент файла. Указанный SHA-256 представляет собой контрольную сумму передачи; проверьте подписанный архив ZIP отдельно с помощью надёжного отпечатка/контрольной точки. ## Резервное копирование, восстановление и сбои в работе 1. Приостановите наблюдение и аккуратно завершите процесс. 2. Скопируйте весь каталог данных: базы данных, файлы WAL/SHM (если имеются), мультимедиа, файлы `credentials.enc`, `signing.enc`, `network.enc`, ключи хранилища/метаданные, токен, контрольные точки и каждый каталог `profiles/`. 3. В режиме внешнего ключа следует отдельно хранить мастер-ключ и сохранять каждый ключ `vault.external.json`. Генерирование нового ключа не позволяет восстановить старые секретные данные. 4. Выполните восстановление при остановленном целевом устройстве; настройте исходный ключ, ограничьте доступ и проверьте целостность данных перед возобновлением работы. 5. Фиксируйте время простоя и результаты проверки. Снимок истории не может служить доказательством того, что во время перерыва в работе удаления не происходили. Архивы ZIP с доказательствами не содержат сеансов и закрытых ключей и не являются полными резервными копиями сервиса. Четыре вида данных защищаются по-разному: | Что | Защита | | --- | --- | | Файлы экспорта без пароля (по умолчанию) | Не зашифровано. Подписано, поэтому изменения можно обнаружить, но любой, у кого есть этот файл, может его прочитать. | | Файлы экспорта с паролем | Если вы установите пароль, готовый экспортный файл без изменений сохраняется в формате ZIP с шифрованием AES-256, который можно открыть с помощью программ 7-Zip и WinRAR; пароль не сохраняется ([в целях обеспечения сохранности доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/)) | | База данных журнала и сохраненные вложения на диске | TgWitness не обеспечивает шифрование; используйте зашифрованный диск или том | | Сессии Telegram и ключи подписи | Зашифровано в каталоге данных (`credentials.enc`, `signing.enc`, `network.enc`) | Полная резервная копия представляет собой описанный выше каталог остановленных данных, а не экспорт. Для обоих процессов следует использовать защищённое хранилище и специальный механизм передачи данных. Временные серверные экспорты хранятся в папке `temporary-exports/` каждого рабочего пространства; завершённые ответы очищаются, а прерванные файлы экспорта удаляются при следующем запуске, пока удерживается блокировка экземпляра данного рабочего пространства. Событие восстановления соединения не гарантирует восстановления промежуточных изменений. Постоянные задания обработки мультимедиа и состояние обновления Telegram сохраняются после перезапуска; см. [формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#durable-collection-and-process-receipts-02). ## Вместимость и срок хранения Значения по умолчанию, все из которых можно изменить в разделе **«Параметры**»: первые 1 000 диалогов, 500 сообщений в каждом снимке, 4 ГиБ несжатого подписанного ZIP-содержимого (для архивов большего размера требуется `verify.py --max-gib N`) и резервный вариант для браузера объёмом 128 МиБ. Вложения занимают от 1 до 2 000 MiB на тип в разделе **«Источники» → «Вложения**». По умолчанию для CLI-загрузки предусмотрен лимит в 5 GiB переданных данных. Доступное дисковое пространство может служить нижним пределом. Зарезервируйте место для журналов, мультимедиа, WAL, временных экспортов и резервных копий. При экспорте используется объем данных, а не ограничение Compose в 512 MiB (`/tmp`). Измеряйте количество событий в секунду, время нахождения в очереди, объём мультимедиа в байтах и задержку диска, а не ограничивайтесь подсчётом только групп. Результаты синтетических локальных тестов не гарантируют доставку сообщений в Telegram. Автоматического удаления сохраненных данных не предусмотрено. Удаление конечной части журнала приводит к утрате его связи с сохраненными контрольными точками. Уже реализована система приоритетной повторной проверки: источники, отмеченные звездочкой, по умолчанию перепроверяются каждые 15 минут, остальные — каждые 6 часов (см. [уровни повторной проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#recheck-tiers)). Имеются защищённые паролем экспорты данных, как описано выше. Приём данных из Telegram/прокси в режиме реального времени, надёжное воспроизведение, журнал администратора и опрос реакций, изолированные рабочие процессы, шифрование локального журнала и медиафайлов самим TgWitness, а также независимая экспертиза остаются отдельными направлениями работы. Ограниченный доступ описан в разделе [«Доступ и разрешения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/)». См. [READINESS.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/READINESS.md), [LIVE_ACCEPTANCE.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md) и [VERIFICATION.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/). --- # Режим расследования Telegram и область наблюдения Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/ Комплексные расследования по всем учетным записям, включая каналы, группы, личные чаты и ботов — от определения объёма расследования до формирования подтверждённого пакета материалов по делу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Комплексные расследования по всем учетным записям, включая каналы, группы, личные чаты и ботов — от определения объёма расследования до формирования подтверждённого пакета материалов по делу. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) Отслеживайте ход дела по каналам, группам, личным чатам и ботам — от первоначального сбора данных до составления хронологии с указанием источников и проверяемой передачи материалов. Интерактивная версия веб-сайта доступна по адресу `/docs/cases/`; [инструкции по предварительному просмотру](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/PUBLISHING.md#preview-the-website-locally). **На этой странице** - [Рабочий пример: адресат меняется в четырёх беседах](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#worked-case-a-destination-changes-across-four-conversations) - [1. Определить суть дела и собрать полную информацию](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#1-define-the-case-and-collect-the-whole-account) - [2. Составить перечень всех источников и собрать исторический контекст](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#2-inventory-every-source-and-acquire-historical-context) - [3. Сохранить динамику развития дела и целенаправленные взаимодействия](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#3-preserve-the-evolving-case-and-deliberate-interactions) - [4. Связывание наблюдений из разных чатов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#4-connect-observations-across-chats) - [5. Создание временной шкалы, охватывающей несколько чатов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#5-build-the-cross-chat-timeline) - [6. Добавлять точки зрения учетных записей без потери их происхождения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#6-add-account-perspectives-without-losing-their-origin) - [7. Сбор и проверка передачи дела](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#7-assemble-and-verify-the-case-handoff) - [Адаптировать исследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/#adapt-the-investigation) ## Пример из практики: изменение пункта назначения в четырёх беседах В объявлении указывается на бота. Группа операторов обсуждает новый адрес получения платежа, и он отображается на клавиатуре бота. Объявление редактируется, в частном сообщении повторяется адрес, а групповое сообщение исчезает. Вопросы заключаются в следующем: что наблюдалось до и после изменения, какие аккаунты в Telegram опубликовали каждый элемент, где появился адрес назначения, какие байты вложения сохранились и какие интервалы остаются неизвестными? Все имена, идентификаторы, временные отметки и ссылки на журнал в данном примере являются вымышленными. В рабочем процессе используются актуальные функции; схема дела представляет собой иллюстрацию, а не автоматический график, сгенерированный приложением. Блок-схема · Каналы → Журнал рабочей среды; Группы → Журнал рабочей среды; Частные чаты → Журнал рабочей среды; Боты → Журнал рабочей среды; Журнал рабочей среды → Поиск по всем источникам; Журнал рабочей среды → Профили лиц со ссылками на записи; Журнал рабочей среды → Сохраненные версии и подтверждения получения вложений; Поиск по всем источникам → Хронология аналитика и реестр источников; Профили лиц со ссылками на записи → Хронология аналитика и реестр источников; Сохраненные версии и подтверждения получения вложений → Хронология аналитика и реестр источников; Журнал рабочей среды → ZIP-архив с подписанными доказательствами; Хронология аналитика и реестр источников → Передача дела с отдельно проверенными доказательствами; ZIP-архив с подписанными доказательствами → Передача дела с отдельно проверенными доказательствами · Каналы · Группы · Частные чаты · Боты · Журнал рабочей среды · Поиск по всем источникам · Профили лиц со ссылками назаписи · Сохраненные версии иподтверждения получениявложений · ZIP-архив с подписаннымидоказательствами · Хронология аналитика иреестр источников · Передача дела с отдельнопровереннымидоказательствами **Схема в текстовом формате** 1. Каналы → Журнал рабочей среды 2. Группы → Журнал рабочей среды 3. Частные чаты → Журнал рабочей среды 4. Боты → Журнал рабочей среды 5. Журнал рабочей среды → Поиск по всем источникам 6. Журнал рабочей среды → Профили лиц со ссылками на записи 7. Журнал рабочей среды → Сохраненные версии и подтверждения получения вложений 8. Поиск по всем источникам → Хронология аналитика и реестр источников 9. Профили лиц со ссылками на записи → Хронология аналитика и реестр источников 10. Сохраненные версии и подтверждения получения вложений → Хронология аналитика и реестр источников 11. Журнал рабочей среды → ZIP-архив с подписанными доказательствами 12. Хронология аналитика и реестр источников → Передача дела с отдельно проверенными доказательствами 13. ZIP-архив с подписанными доказательствами → Передача дела с отдельно проверенными доказательствами ## 1. Определите суть дела и соберите полную информацию 1. Подключите учетную запись для сбора данных в отдельном рабочем пространстве. В [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/) или в вашем реестре дел зафиксируйте номер дела, ID учетной записи, рабочее пространство и время начала наблюдения. Отдельно сохраните отпечаток доверенного ключа подписи. 2. Для создания специальной учетной записи для сбора данных откройте **«Источники» → «Область наблюдения**» **→ «Режим расследования**». В настройках по умолчанию выбраны **«Весь аккаунт**», «каналы/группы/личные чаты/боты», «собственные действия», профили источников и последние 200 видимых сообщений для вновь обнаруженных источников. Проверьте настройки, нажмите **«Сохранить область**» и подтвердите выбор области. Основные аккаунты используют выбранные чаты или папку; сбор данных по всему аккаунту доступен для аккаунтов, помеченных для расследования. 3. **Загрузите чаты** и сравните источники со списком диалогов учетной записи. Проверьте исключения. **Параметр «Чаты, считываемые из списка учетной записи»** по умолчанию установлен на 1 000 и допускает до 20 000. Источники, выходящие за пределы этого лимита, добавляются, когда они становятся активными. Записывайте то, что было фактически перечислено. 4. В **настройках записи** выберите **«Вся видимая активность**» и сохраните настройки мониторинга. Проверьте типы вложений и ограничения, а также свободное место на диске. 5. Начните наблюдение. Проверьте новое контролируемое сообщение, его редактирование и удаление, а затем сохраните тестовые ссылки и информацию о любых сбоях. Режим «Весь аккаунт» фиксирует всю видимую пользователю активность в рамках сохраненных настроек. Он не получает доступ к секретным чатам и не присоединяется автоматически ко всем связанным группам. Кроме того, он не заполняет данные по всем существующим беседам. См. [раздел «Объем сбора данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#observation-scope-chosen-chats-a-folder-or-the-whole-account)». ## 2. Составьте перечень всех источников и изучите исторический контекст Ведите реестр источников, в котором каждая строка соответствует одному чату: | Область применения | Запись | | --- | --- | | Идентичность | Рабочая область, идентификатор учётной записи, числовой идентификатор чата, название и тип | | Видимость | Членство/роль, подтверждённый или неподтверждённый доступ, исключения | | Захват в режиме реального времени | Время начала работы, выбранные типы событий и последующие изменения политики | | История журнала | Запрошенные/выполненные снимки, ограничения, время и ссылки на записи | | Полная история | Имя файла экспорта по каждому чату с подписью, границы и статус завершения/сбоя | | Вложения | Завершённые подтверждения получения медиафайлов, хэши, размеры, а также результаты пропущенных или неудачных операций | | Область применения | Сбои в работе, неполный сбор данных, функция FloodWait, недоступные сообщения и другие пробелы | Используйте подходящий способ сбора данных для каждого источника: - **Функция «Загрузить полную историю** из **источников»** загружает доступные прошлые сообщения из включенных источников в журнал рабочей области. Она поддерживает приостановку/возобновление и подписанный отчет о ходе работы. См. раздел [«Получение истории](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/)». - **Снимок истории** сохраняет последние видимые сообщения в журнале наблюдений. По умолчанию максимальное количество составляет 500; в разделе **«Параметры» → «Максимальный объем снимка истории»** это значение можно увеличить до 10 000. Речь идет о текущих наблюдениях за историей, а не о реконструированных изменениях. - **«Экспорт всего чата» → «Экспорт всего чата**» или **«Чаты» → «Экспорт чата**» позволяет извлечь видимую на данный момент историю одного чата в отдельный подписанный пакет формата `chat.json` / `chat.html`. Повторите эту операцию для всех источников по данному делу и сохраните каждый результат. - **При появлении нового чата или бота** можно сохранить его профиль и до 1 000 последних сообщений; в режиме расследования выбирается 200. Существующие чаты не получают эти данные задним числом при включении данного режима. - **Загрузка видимых вложений** обеспечивает сохранение байтов в соответствии с настроенной политикой. Требуется заполненная квитанция `media.saved` с SHA-256 и указанием количества байтов. Задание в очереди, миниатюра или имя файла не являются сохраненным вложением. Полный экспорт чата **не** заполняет журнал или профили участников всеми сообщениями. Для анализа истории в TgWitness используйте функцию **«Загрузить полную историю»** или ограниченные снимки журнала. Перед запуском обработки истории проверьте список включенных источников. Ни один из этих способов не позволяет восстановить материалы, которые Telegram больше не возвращает. ## 3. Сохранение динамики дела и целенаправленного взаимодействия Отметьте активные чаты по текущим делам в качестве приоритетных источников. Проверяйте интервалы повторной проверки, продолжайте наверстывать упущенное и анализируйте результаты работы с медиафайлами. Обеспечьте постоянное наблюдение за сбором данных во время использования аккаунта. Воспользуйтесь **меню «Чаты» → «Профиль» → «Сохранить профиль сейчас»**, чтобы сохранить метаданные источника, такие как описания и команды бота. Эти данные отличаются от профилей пользователей, сгенерированных на основе сохраненных сообщений. В случаях, когда речь идет о слежении за источником или взаимодействии с ботом: 1. **«Открыть ссылку в Telegram» → «Сохранить предварительный просмотр»** записывает предоставленную ссылку и результат предварительного просмотра до выполнения действия. 2. **Команда «Join / open and observe»** выполняет присоединение/открытие и отправляет параметр запуска бота, если он указан. Запрос на присоединение, ожидающий одобрения, регистрируется как «pending». 3. Текстовые ответы, сгенерированные панелью, и нажатия поддерживаемых кнопок сохраняют значения `interaction.requested` и `interaction.result`. Квитанции обратного вызова могут сохранять возвращаемый текст всплывающего окна, состояние оповещения и URL-адрес. Это реальные действия учетных записей. Нажатия кнопки обратного вызова в другом приложении Telegram не видимы сборщику данных, хотя последующие сообщения или изменения могут быть зафиксированы. Мини-клиент не выполняет рабочие процессы, связанные с веб-приложениями, платежами, телефоном или местоположением. Точное поведение описано в разделе [«Взаимодействие с панелями](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/#act-from-the-panel)». ## 4. Установление связей между наблюдениями в разных чатах В разделе **«Журнал**» выберите **«Все источники**» и выполните поиск по записанному контенту. Откройте соответствующие записи и сохраните рабочую область, чат, идентификатор сообщения, порядковый номер и хеш записи. В соответствующем чате откройте меню **«Люди**»**→ «Включить профили»** и просмотрите информацию об одном из участников: - Имена/имена пользователей, зафиксированные в течение определенного периода, а также числовой идентификатор Telegram. - Связь между ответами с указанием ссылок на исходные записи. - **Также в…** других чатах данного рабочего пространства, где писал этот пользователь. - Активность, изменения/удаления, а также упомянутые кошельки, телефоны, имена пользователей и ссылки. - Сохраненные метаданные аватаров и аналогичные кэшированные аватары с указанием их отдельного источника. Перед использованием профиля, сформированного на основе данных, в выводах необходимо открыть указанные записи. Профили охватывают лиц, чьи сообщения сохранены, а не всех участников группы. **Параметры → Количество записей, указанных для каждого факта**, ограничивает список ссылок, но не влияет на количество базовых действий. Упоминания и сходство аватаров являются ориентирами; они не подтверждают принадлежность или личность. В приведённом примере: | Ссылка | Записи | Поддерживаемые наблюдения | | --- | --- | --- | | Один и тот же аккаунт отправителя | Группа № 146 и частная переписка № 205 | Оба источника указывают идентификатор отправителя в Telegram: 71001 | | Тот же адрес назначения | № 146, клавиатура бота № 173, редактирование канала № 188, личное сообщение № 205 | Все записи содержат код `pay.example.invalid/new`; владение/контроль не установлены | | Тот же сохраненный файл | Завершено оформление квитанций № 151 и № 209 | Полные значения SHA-256 совпадают для сохраненных байтов | | Указание источника канала | № 101 и № 188 | Не приписывайте сообщение в канале пользователю 71001 без указания отправителя | Сравнить хеши вложений и связанные с ними ссылки на сообщения, а также сохранить хронологию аккаунтов, сгруппированную по Telegram-идентификаторам, указанным в этих записях. Сохраняйте рабочие заметки команды в [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/): добавляйте в закладки записи, на которые вы опираетесь, например #146, #188 и #205, выделяйте точную целевую строку и сохраняйте фрагмент каждого зафиксированного действия между двумя записями или в определенном временном диапазоне. Заметки и статусы сохраняют результаты проверки команды в собственной подписанной истории, отдельно от наблюдений из источников. ## 5. Создание хронологии событий, охватывающей несколько чатов Используйте ссылки на сохраненные версии в **чатах** и их **записи в журнале №…** В **журнале** объедините **все источники** с **редактированиями**, **удалениями** и **охватом**. Сохраняйте как `source_at` (если указан), так и `observed_at`. | Примерный период наблюдения | Справочная информация | Замечание | | --- | --- | --- | | 09:00 | Канал № 101 | Зафиксирован исходный адрес назначения | | 09:12 | Группа № 146; СМИ № 151 | Опубликован новый адрес; загрузка файла завершена | | 09:16 | Бот № 173 | Клавиатура указывает на новый пункт назначения | | 09:20 | Канал № 188 | Объявление отредактировано; обе сохраненные версии остаются | | 09:24 | Частный #205; медиа #209 | Идентификатор отправителя, повторяющийся в поле получателя; байты файла сохранены без изменений | | 09:28 | Группа № 231 | Получено уведомление об удалении; лицо, удалившее сообщение, и точное время удаления неизвестны | Между приведёнными в примерах ссылками могут присутствовать и другие записи. Порядковые номера упорядочивают наблюдения; моментальные снимки истории могут содержать более ранние даты источников и поступать позже, чем текущие события. Разграничивайте моментальные снимки, восстановленные сообщения, уведомления об удалении и результаты, указывающие на отсутствие данных при повторной проверке. Обозначьте пробелы в охвате как неизвестные интервалы. Получение данных истории позднее не означает ретроактивного установления непрерывности наблюдения. ## 6. Добавление точек зрения учетных записей без потери информации об их происхождении Используйте отдельное рабочее пространство для каждой отдельной учетной записи и повторяйте процедуру инвентаризации. При каждом сравнении сохраняйте идентификатор учетной записи, роль, отпечаток ключа подписи и ссылки на источники. Номера сообщений не являются глобальными идентификаторами, общими для всех чатов и учетных записей. Case Board хранит примечания и коллекции, связанные с источниками, в пределах каждого рабочего пространства. На экране группы можно совместно просматривать статус учетных записей и объединять экспорты из отдельных рабочих пространств. Сопоставляйте эти источники в своих примечаниях по делу или в инструментах анализа; каждый журнал сохраняет свой собственный источник и ключ подписи. Глобальный поиск или объединенная временная шкала, охватывающая все рабочие пространства, не генерируются. Экспорт одного канала/супергруппы для нескольких учетных записей позволяет получить историю этого чата с использованием подходящих учетных записей. При работе с более объёмными материалами соблюдайте границы, прибегая к услугам [независимого свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/). Используйте контролируемые проверки доставки для подтверждения пути захвата и видимости каждого аккаунта. ## 7. Подготовка и проверка передачи дела Сохраните эти материалы в едином каталоге дела, сформированном аналитиком: | Материалы | Цель | | --- | --- | | Заметки по делам и реестр источников | Вопросы, политика сбора данных, доступ/роли, выводы, альтернативные объяснения и пробелы | | Хронология событий | Для каждой записи указываются как время, так и ссылки на рабочую область, чат, сообщение и последовательность сообщений | | Case Board экспорт и фрагменты, если они используются | Закладки со ссылками на источники, цитаты, заметки команды, коллекции, история изменений и выбранные записи, сверенные с ZIP-архивом доказательств | | ZIP-архив с подписанными доказательствами для каждого рабочего пространства | Полный журнал записей, манифест и включенные сохраненные медиафайлы; фильтры панели не ограничивают экспорт журнала | | Отдельно подписанные файлы с профилями пользователей | Проверка полученных ссылок на соответствие доказательствам в рабочей области | | Подписанные полные экспорты чатов | Сбор текущей видимой истории, отдельно от журнала наблюдений | | Достоверные отпечатки и предыдущие контрольные точки | Ключевые идентификационные данные и границы сохраняемого журнала | | Артефакты Witness, при наличии соответствующей настройки | Отдельный журнал, подписанные записи и «отпечаток» свидетеля | | Результаты проверки и хэши переданных файлов | Что было проверено, какие байты были переданы и кому | Из надёжной установки, с указанием имён файлов и фактических отпечатков каждого рабочего пространства: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json python -m tgwitness.verify profiles-operations.json --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --evidence evidence.zip python -m tgwitness.verify history-channel.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 python -m tgwitness.verify board-slice.json --evidence evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 ``` Сохраните фактические результаты проверки и исходные артефакты. Экспортируйте заметки из рабочей области Case Board вместе с цитируемым исходным материалом. Сгруппируйте результаты, полученные в разных рабочих областях, в каталоге дела верхнего уровня; каждый артефакт TgWitness имеет собственную подпись и процедуру проверки. ## Адаптация к условиям расследования | Пример | Трассировка | Доставить | | --- | --- | --- | | Рассмотрение споров по заказам и оплате с помощью бота | Уведомление о входе → предварительный просмотр сохраненной ссылки → параметр запуска бота → версии сообщений и клавиатурных вводов → подтверждения обратного вызова панели → последующие действия в личных переписках и группах | Учтена хронология предложений и ответов, а также проверены источники; наличие одной лишь ссылки на оплату само по себе не является доказательством совершения платежа | | Удалённые сообщения после инцидента | Все затронутые чаты → сохраненные оригиналы/изменения → результаты проверки на удаление или отсутствие при повторной проверке → сохраненные медиафайлы → охват и другие точки зрения участников | Сохраненные версии и явно обозначенные промежутки времени; отсутствие вымышленных субъектов, удаляющих сообщения | | Участник использует разные имена в разных чатах | Числовой идентификатор отправителя → история имен/имен пользователей → ответы → другие наблюдаемые чаты → упомянутые адресаты/файлы | Хронология активности аккаунта в Telegram со ссылками на исходные записи | [Ссылка на сборник](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) · [Проверка личности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#people-profiles) · [Передача доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#investigation-handoff) · [Проверка завершена](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) --- # Возможности TgWitness и ограничения сбора Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/ Текущая модель сбора данных, рабочие процессы с несколькими учетными записями, экспорт данных и операционные ограничения TgWitness. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Текущая модель сбора данных, рабочие процессы с несколькими учетными записями, экспорт данных и операционные ограничения TgWitness. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Ссылка на проект](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Ссылка на проект](https://phishdestroy.github.io/TgWitness/assets/chapter-project.svg) TgWitness сохраняет переписки в Telegram, доступные для подключенных учетных записей, фиксирует наблюдаемые изменения и готовит поддающиеся проверке экспортные файлы. В данном руководстве описаны модель сбора данных, текущие рабочие процессы и их ограничения. **На этой странице** - [Автономное приложение](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#standalone-application) - [Совместные расследования](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#shared-investigations) - [Инструменты архивирования](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#archive-tools) - [Дополнительные возможности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#optional-extras) - [Протокол и закрытые источники](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#protocol-and-private-sources) - [Несколько учетных записей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#multiple-accounts) - [Захват и указание авторства](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#capture-and-attribution) - [Пропускная способность и ограничения Telegram](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#capacity-and-telegram-limits) - [Надёжность и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#reliability-and-recovery) - [Модель доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#evidence-model) - [Экспорт, развертывание и передача](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#export-deployment-and-handoff) - [Критерии стабильного выпуска](https://phishdestroy.github.io/TgWitness/ru/docs/reference/features/#stable-release-criteria) ## Автономное приложение TgWitness имеет собственную процедуру установки, каталог данных и жизненный цикл выпусков. Входящий в комплект веб-интерфейс обеспечивает настройку и просмотр; экспортированные записи можно использовать независимо. Оператор подключает свои аккаунты, выбирает источники, доступные для просмотра каждому из них, и получает сохраненный журнал наблюдений. Панель отображает контент, сохраненные изменения, происхождение данных наблюдений и известные пробелы. Другой следователь может проверить экспортированные материалы. Панель различает авторизацию учетной записи, доступ к источнику, активность сборщика и охват записей. При оценке интервала с небольшим количеством сообщений или проблемы с подключением следует рассматривать эти состояния в совокупности. ## Совместные расследования Администратор может выдавать [токены доступа](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/), привязанные к рабочим пространствам и отдельным чатам, с разрешениями на отдельные действия, ограничениями по IP-адресам, сроком действия, ограничениями на вход и контролем сеансов. Рецензент с правами только на чтение может изучать дело, не получая авторизацию Telegram или ключ главной панели. Доступ, ограниченный чатом, остаётся отдельным от настроек на уровне учётной записи и экспорта полного журнала. Автоматический MTProxy поддерживает рабочие маршруты Telegram из четырёх общедоступных источников или каталога операторов. [Режимы IP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/#ip-modes) определяют, следует ли в случае сбоя дожидаться другого прокси-сервера или можно использовать явно разрешённый прямой маршрут. Внешние HTTP-запросы имеют отдельный маршрут и переключатель для отключения. ## Инструменты для архивирования [Функции сбора истории](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/), [поиска и анализа в архиве](https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/),[MCP только для чтения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/), [локального OCR/транскрипции](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/) и[исходящих веб-хуков](https://phishdestroy.github.io/TgWitness/ru/docs/reference/webhooks/) включены в 0.7.1. Аналитические отчеты и распознанный текст хранятся отдельно от зафиксированных событий. [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/) добавляет закладки с ссылками на источники, цитаты, заметки и коллекции в рабочей области. [Конструктор](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) [отчетов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) выбирает материалы, разделы и один из восьми шаблонов для экспорта в поддерживаемые форматы HTML/PDF. ## Дополнительные возможности Повседневная настройка: аккаунт → источники → наблюдение. **«Дополнительные функции»** — это отдельный раздел с ботом Telegram Witness и предварительным просмотром снимков экрана на GitHub. Перед отображением настроек для каждого из них указывается информация о доступности и требованиях. При нажатии на карточку открываются инструкции; это не приводит к регистрации или запуску службы. Настройка бота состоит из трёх этапов: создание доступа только для чтения, выбор настроек публикации и запуск на хосте Witness. Параметры сети и публикации, существующие подключения и команды проверки раскрываются по запросу. Загруженная конфигурация отличается от работающего «witness». При смене дополнительных настроек черновик сохраняется; изменения учетной записи и блокировка очищают временный токен и форму. Встроенное руководство содержит инструкции по запуску. [GitHub Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md)запускает закрепленный коллектор из вашего форка, фиксирует один чат и генерирует зашифрованный пакет данных с указанием происхождения рабочего процесса. ## Протокол и конфиденциальные источники **MTProto — это протокол Telegram; Telethon — библиотека на языке Python, которую TgWitness использует для работы с MTProto.** Это не альтернативные методы подключения. Функция «Сбор» использует MTProto; дополнительный модуль «Witness» публикует подписанные проверки через Bot API. Каждая рабочая область имеет собственного авторизованного клиента и поток обновлений учетной записи. TgWitness отбирает данные из настроенных источников и отправляет отдельные явные запросы на выполнение таких функций, как создание моментальных снимков истории и загрузка мультимедиа. Частному источнику не требуется публичное имя пользователя. Идентификаторами служат тип узла Telegram и числовой идентификатор; названия и имена пользователей могут изменяться. Доступ зависит от существующего членства и разрешений. TgWitness не присоединяется к источникам автоматически и не обходит процедуру утверждения присоединения. Хеш доступа из другой учетной записи не является универсальным токеном доступа. Модель сбора данных должна учитывать скрытую историю до присоединения, роли участников/администраторов, отзыв сеансов, удаление или изменение прав доступа, переход из группы в супергруппу, темы/форумы, связанные обсуждения, идентификаторы каналов и недоступные вложения. Не все комбинации были проверены в реальных условиях. Проверка доступности источника осуществляется при запуске сборщика. Отсутствие источника в ограниченном результате диалога означает, что **доступ не подтверждён**, а не то, что удаление доказано. Отсутствие одного источника не препятствует наблюдению за другими доступными источниками. Ни в коем случае не размещайте ссылки на приглашения или реальные сессии в общедоступных материалах. ## Наличие нескольких учётных записей Панель поддерживает любое количество **рабочих пространств**, каждое из которых имеет: - Авторизация, зашифрованное хранилище и маршрут соединения. - Журнал на базе SQLite и идентификатор подписи Ed25519. - Выбранные источники, очередь медиафайлов и настройки захвата. - Состояние наблюдения, ошибки, контрольные точки и экспорт данных. Смена отображаемого рабочего пространства не приводит к остановке работы другого сборщика данных. Повторная авторизация одной и той же учетной записи в разных рабочих пространствах не допускается. Журнал, уже привязанный к одной учетной записи Telegram, не может быть переназначен другой учетной записи; допускается повторное подключение той же учетной записи. Это позволяет сохранить идентичность учетной записи и соответствующий диапазон идентификаторов сообщений. Приложение не устанавливает фиксированного количества рабочих пространств. Каждое рабочее пространство запускает собственные задачи коллектора для мониторинга подключений, загрузки мультимедиа, повторных проверок и приема новых чатов в рамках общего процесса Python и цикла событий. Пропускная способность зависит от рабочей нагрузки. Для изоляции процессов используйте отдельные установки, порты и каталоги данных. Присвойте каждому аккаунту источники, к которым он имеет доступ. Разные аккаунты могут наблюдать за одной и той же группой, но их наблюдения остаются отдельными и сохраняют свое происхождение. Два аккаунта на одном компьютере, управляемом одним оператором, не являются двумя независимыми свидетелями. **Экспорт группы** объединяет отдельно подписанные ZIP-архивы рабочих пространств с подписанным списком файлов, содержащим их идентификаторы рабочих пространств, хэши и отпечатки ключей подписи. Каждый журнал сохраняет свои собственные границы. Создавайте объединенную временную шкалу, охватывающую несколько рабочих пространств, в заметках по делу или инструментах анализа, сохраняя при этом ссылки на источники. ## Сбор данных и установление авторства В разделе «Источники» предусмотрены переключатели для каждого аккаунта, позволяющие выбирать: новые сообщения, правки, удаления, реакции и членство в группах. Предустановленные настройки сохраняют либо все категории, либо только сообщения, правки и удаления. Данная политика применяется к выбранным группам рабочего пространства, сохраняется после перезапуска и подписывается с указанием состояния до и после изменений. По умолчанию сохраняются все категории. Отключение категории не приводит к удалению старых записей; повторное включение не восстанавливает пропущенные события. Операционные записи, другие события, связанные с обслуживанием групп, и явные моментальные снимки истории являются отдельными. Захваченные объекты Telegram могут сохранять встроенные метаданные независимо от параметров отдельного обновления. На данный момент отсутствует возможность переопределения категорий на уровне группы. | Материалы | Зафиксировано сейчас | Границы | | --- | --- | --- | | Сообщение | Текст, идентификаторы участников/сообщений, метаданные отправителя, ответы и исходный конверт обновления | Сохраняется в виде видимой для учетной записи заметки, подписанной сборщиком | | Редактировать | Новая обнаруженная версия и все ранее сохраненные версии | Промежуточные правки, внесённые во время простоя, могут быть утрачены; отправитель не обязательно является редактором | | Удаление | Уведомление и ранее зафиксированное содержимое (при наличии) | Как правило, не указывается лицо, удалившее сообщение, или точное время действия | | Уведомление об удалении на уровне аккаунта | Исходное уведомление; в разрешенных записях содержатся сохраненный чат и метод сопоставления | Требуется ровно одно ранее сохраненное совпадение из частного чата или обычной группы, входящее в область действия; остальные идентификаторы остаются в категории «`deletion.unscoped`». Идентификаторы каналов и супергрупп исключаются из этой корреляции. | | Реакция | Предоставлены счетчики и отображаются недавние идентификационные данные | Для получения полного списка доступных реакторов требуются отдельные запросы; каналы могут скрывать идентификационные данные | | Членство | Сервисные сообщения и обновления, отправленные участникам | Видимость зависит от роли и типа чата; отсутствие событий не означает их отсутствия | | Действия администратора | Соответствующие предоставленные обновления и моментальный снимок журнала администратора в экспортах чатов каналов/супергрупп | Функция экспорта считывает журнал, если он доступен для учетной записи администратора, осуществляющего экспорт; непрерывный опрос журнала администратора не входит в этот процесс. | | Вложение | Описание исходной версии, количество загруженных байтов/SHA-256 и результаты попыток | Удаленный файл может оказаться невозможным для восстановления; последняя версия не заменяется | | История | Явный снимок текущих видимых сообщений | Не восстанавливает все изменения или удалённый контент | | Процесс сбора данных | Запуск/остановка, пульс, ошибки, настройки, область действия и подписанное подтверждение запуска | Локальный реестр; GitHub и TDX добавляют [независимые проверки среды](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) | Интерфейс указывает аккаунт, указанный в исходном событии, и сохраняет наблюдаемые имена и имена пользователей. Если в событии не указан его участник, в отчете это поле оставляется незаполненным. ## Вместимость и ограничения Telegram Не существует универсального количества чатов, мониторинг которых можно обеспечить с гарантированным качеством. Пропускная способность зависит от пикового количества событий в секунду, объема и размера вложений, дополнительных RPC-запросов, количества активных учетных записей, задержки диска/свободного места, состояния сети, ограничений Telegram, допустимой задержки и глубины очереди. Telegram проводит различие между пассивной доставкой и активным коротким опросом. В документации по обновлению описываются дополнительные вызовы `updates.getChannelDifference` для открытых каналов и супергрупп, а также рекомендуется использовать не более **десяти источников, подвергающихся одновременному короткому опросу**. Это не является ограничением в десять выбранных групп или гарантией полноты данных. | Режим | Цель | Статус | | --- | --- | --- | | Стандартное замечание | Регистрация обновлений из выбранных источников | Реализовано | | Приоритетные повторные проверки | Источники, отмеченные звездочкой, используют собственный настраиваемый интервал и имеют приоритет при каждом ограниченном цикле повторной проверки. | Реализовано с помощью запросов по истории и сообщениям | Звездочка приоритета управляет этими повторными проверками. Дополнительный короткий опрос `updates.getChannelDifference` не предоставляется в качестве отдельного пользовательского режима. Произвольный высокочастотный опрос, игнорирующий параметр FloodWait или предполагающий линейную пропускную способность дополнительных учетных записей, не является допустимой моделью расчёта объёма данных. По умолчанию ограничения составляют первые 1 000 перечисленных диалогов, до 500 сообщений на один снимок истории, 1–2 000 MiB на каждый собранный файл по типу и 4 GiB несжатого подписанного ZIP-содержимого; каждое из этих значений можно изменить для конкретного рабочего пространства в разделе **«Параметры**». Экспорт не имеет фиксированного ограничения по количеству событий. Резервный режим браузера по умолчанию ограничен 128 МБ; для потоковой CLI предусмотрен настраиваемый лимит передачи данных, по умолчанию равный 5 ГБ. ## Надёжность и восстановление данных Реализованные функции включают: WAL SQLite и синхронные транзакции; атомарную запись сообщений и медиафайлов; сохранение заданий и задержки повторных попыток; дескрипторы исходной версии; ограниченные повторные попытки; сохранение медиафайлов с помощью FloodWait; загрузка медиафайлов вне сетевого ожидания текстового события; экспорт с фиксированным префиксом при продолжении последующей записи; атомарные настройки и аудиторские записи; сохранение действующей авторизации после неудачной попытки входа при замене учетных данных; изоляцию повреждённого дополнительного рабочего пространства; явные попытки повторного подключения; отдельную отчётность о потере авторизации; а также обнаружение сдвига реального времени с использованием монотонных часов. Параметры учетной записи и канала (pts/qts/seq) сохраняются и восстанавливаются после перезапуска, а отслеживаемые чаты периодически перепроверяются; см. [формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#durable-collection-and-process-receipts-02). Периодическое сохранение позиции не является атомарным подтверждением принятия журнала без потерь данных. При каждом запуске процесса фиксируются предыдущая начальная точка и граница автономного режима. Текущая история не рассматривается как восстановление пробелов. Объём сохраняемых данных в Telegram ограничен; `differenceTooLong` не может восстановить весь исчезнувший контент. Невосполнимые пробелы должны оставаться явно обозначенными, даже если последующий снэпшот истории будет успешным. ## Модель доказательств Каждое событие фиксирует последовательность, локальное время наблюдения в формате UTC, время источника (если указано), тип, источник, участника (если указан), исходное содержимое, предыдущий хеш и подпись. При наблюдении за сообщениями также сохраняются данные об учётной записи сборщика и контексте запуска. Подписанная квитанция о процессе содержит случайный идентификатор запуска; версии зависимостей TgWitness/Python/OS; значения SHA-256 исходных файлов и совокупный отпечаток; исходную учетную запись, область действия и настройки; показания UTC/монотонности; а также начальную запись предыдущего журнала. Изменения настроек, запуск/остановка и ошибки заносятся в тот же журнал. Контрольные точки сохраняются при запуске, каждые пять минут во время наблюдения (параметр настраивается) и при упорядоченной остановке. Сохраненная локальная контрольная точка позволяет обнаружить откат к более раннему префиксу журнала. | Механизм | Что он обеспечивает | | --- | --- | | SHA-256 файла | Количество байтов совпадает с известным дайджестом | | Цепочка хешей событий | Упорядочивание и сопоставление записей относительно известной границы | | Ed25519 | Подпись с использованием конкретного ключа | | Независимо сохраняемый контрольный пункт | Последующий текст соответствует установленным границам | | Анализ размера программного файла | Отчёт сборщика о проанализированных файлах | | Достоверный независимый ответ TSA | Наличие определённых байтов на момент времени TSA при явных допущениях о доверии | Реализованы подготовка запросов по стандарту RFC 3161 и проверка ответов с помощью OpenSSL. В режиме «Evidence» также отправляются хеши контрольных точек в настроенные службы временных меток. Сохраняйте и проверяйте ответ органа власти для установления независимой временной привязки. См. [файл TIMESTAMP.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/). Независимо сохраняйте контрольные точки, контролируйте доступ к ключам подписи, ведите учет передачи записей и проверяйте экспортированные данные с помощью надежного программного обеспечения. В разделе [«Объем](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) [проверки»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) объясняется, как эти проверки дополняют друг друга и какие допущения о доверии применяются. ## Экспорт, развертывание и передача Подписанный ZIP-архив содержит исходные файлы в форматах JSONL, CSV, HTML, сохраненные вложения, хэши, подписанный манифест и удобный инструмент для проверки. Он охватывает одно рабочее пространство и фиксированный полный префикс журнала. Фильтры поиска на панели не удаляют записи без уведомления. Секретные ключи, токены и сеансы Telegram исключаются; исходные записи по-прежнему могут содержать личную информацию и метаданные Telegram. Сохраняйте дайджест ZIP-архива, доверенный отпечаток, контрольную точку, подтверждение обработки и передачу отдельно. Используйте средство проверки из надёжной установки, а не доверяйте исполняемому коду исключительно на том основании, что он содержится в проверяемом ZIP-архиве. Интерфейс браузера поставляется локально без использования Node.js, CDN или внешних шрифтов. Управление установкой осуществляется с помощью одного токен оператора. Для удалённого доступа требуется HTTPS или SSH-туннель. Предоставляются исходные коды на языке Python и определения контейнеров, а примеры сервисов находятся в [каталоге deploy/](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md); результаты проверок платформы приведены отдельно. Рабочая область по умолчанию использует корневой каталог данных; дополнительные рабочие области используют `profiles//`. Для создания резервной копии необходимо остановить процесс и иметь полный набор данных и ключей. ZIP-архивы с доказательствами не являются резервными копиями приложения. Для секретных данных можно использовать внешний мастер-ключ для нового каталога данных; шифрование журнала и мультимедиа обеспечивается диском или томом оператора. См. файлы [CONNECTION-SECURITY.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) и [OPERATIONS.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/operations/). ## Критерии стабильного выпуска До выхода стабильной версии следует уточнить: 1. Реальные закрытые группы, супергруппы, форумы и каналы с ролями участников и администраторов, а также скрытой и видимой историей, включая данные о входе в систему, двухфакторной аутентификации, отзыве доступа и потере доступа. 2. Контролируемые изменения, удаления, реакции, членство и медиафайлы в сопоставлении с известными действиями. 3. Сбои процессов/хоста, сбои дисков/переполнение диска, ссылки на файлы с истекшим сроком действия, FloodWait, потеря сетевого соединения, повреждённые файлы и откат базы данных. 4. Длительное использование нескольких учетных записей с контролируемыми задержками, очередями, объёмом памяти и дисковым пространством, включая как «тихие», так и «шумные» источники одновременно. 5. Задержка между переходом в следующее состояние протокола MTProto и принятием записи в журнал. 6. Чистая установка на целевой матрице ОС/контейнеров и проверенное восстановление резервной копии. 7. Независимый обзор вопросов безопасности, подписей и утверждений об авторстве/доказательствах. Доступ к панели с ограниченным кругом пользователей описан в разделе [«Доступ и разрешения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/)». Версия 0.6 поддерживает ограниченный TData для одной учетной записи и импорт файлов учетных записей, описанные в [файле](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/) [ACCOUNTS.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/). Перед публикацией ознакомьтесь с условиями использования API Telegram. Ссылки на исследования и выводы по платформе находятся в [файле](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/RESEARCH.md) [RESEARCH.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/RESEARCH.md). --- # Аннотации Telegram со ссылками на исходные записи Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/ Закладки, точные выделения, фрагменты действий, обсуждения, ограниченный доступ и история подписанных аннотаций, используемые в Case Board. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Закладки, точные выделения, фрагменты действий, обсуждения, ограниченный доступ и история подписанных аннотаций, используемые в Case Board. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) Case Board предоставляет следственной группе общий рабочий обзор сохраненных материалов. Добавляйте в закладки наблюдения, выделяйте конкретные фрагменты, сохраняйте набор действий и обсуждайте их с коллегами. Карточки сохраняют ссылки на источники и подписанную историю изменений. Аннотации команды остаются в рабочей области и четко отделяются от исходных наблюдений в Telegram. [Модель доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) · [Доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) · [Отчёты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) ![Синтетическая лента расследования](https://phishdestroy.github.io/TgWitness/assets/case-board.png) **На этой странице** - [Работа с делом](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/#work-with-a-case) - [Права доступа](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/#permissions) - [Сохраненные контракты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/#stored-contracts) - [API и экспортные данные](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/#api-and-exports) - [Пределы эксплуатации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/#operating-limits) ## Работа с делом Откройте **«Расследование» → «Case Board»** в стандартном или экспертном режиме. Язык зависит от панели. Используйте **кнопку** **«Добавить в доску»** рядом с записью в журнале или сохраненным сообщением в чате, либо выделите его и нажмите **B**. Закладка добавляется в «Входящие» одним щелчком. Отредактируйте её название, метки и примечание или переместите её в коллекцию. К измененной карточке добавляется подписанная версия; при удалении сохраняется история изменений. Для первого дела выберите сбор данных и добавьте записи, отвечающие на один вопрос. Используйте комментарии для проверки интерпретации, а затем **раздел «Презентация»**, чтобы пройтись по карточкам и контексту источников. При подготовке итогового документа выбирайте материалы для «Case Board» отдельно в [«Report Studio](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/)». Сохранение фрагмента не приводит к автоматической настройке фильтров данных отчета. Выделите текст внутри сохраненного сообщения в чате, чтобы открыть **меню «Выделить» → «Доска**». Выберите цвет и добавьте заметку. Сервер проверяет точность цитаты и сохраненной версии, включая эмодзи, текст с направлением написания справа налево (RTL) и комбинирующие знаки. Интерфейс не отображает выделенный фрагмент в замаскированном или преобразованном тексте. Нажмите Shift и щелкните две записи в одном чате, чтобы **выделить** **фрагмент между ними**, воспользуйтесь **функцией «Выделить по времени**» или сохраните текущие фильтры журнала по чату, периоду и типу события. Сохраненный фрагмент имеет собственное авторитетное условие: при его открытии в журнале также применяются фильтры по нескольким чатам, ограничения по количеству сообщений и фильтры по участникам . **Функция «Показать записи, добавленные после закладки»** выделяет более поздние добавления. Изменение фильтров в Journal приводит к выходу из фрагмента. В **разделе** «Люди» **функция** **«Выделить действия этого человека»** использует записанный ID участника; она не предполагает, что автор сообщения редактировал, удалял или реагировал на сообщение. В диалоговом окне выбора фрагмента перед созданием отображается предварительный просмотр количества записей. Термин «`all`» (все) включает все типы записей, в том числе снимки экрана, правки, удаления, реакции, обновления членства/сервиса, собственные действия, кнопки, мультимедийные результаты, восстановленные сообщения и типы будущих событий. Выбор описывает сохраненные наблюдения. Уведомления об удалении неизвестных чатов представляют собой отдельный контекст, доступный только при полном доступе к рабочей области и никогда не привязанный к одному из выбранных чатов. Коллекции имеют заданную область охвата чатов. Пустая область охвата означает всю рабочую область. Коллекция не может содержать карточки, выходящие за пределы её области охвата; участник, доступ к которому ограничен конкретным чатом, не может просматривать более широкую коллекцию. «Входящие» — это виртуальная коллекция для неназначенных карточек. Поиск и фильтры охватывают только видимые карточки; ветки обсуждений и упоминания наследуют права доступа родительской карточки. Удалённые комментарии имеют метку «удалён» в обсуждении. История просмотров не записывается. **В режиме презентации** открываются все карточки в выбранной коллекции с видами «Карточка», «Контекст источника» и «Комментарии команды», а также с клавишами «Назад» и «Вперед». В этом режиме отсутствуют элементы управления для редактирования. Обычная лента имеет разбивку на страницы; в режиме презентации список загружается по страницам, и подробная информация по одной карточке отображается за раз. ## Разрешения Все операции требуют доступа к `view`, рабочей области/чату и `board.read`. `board.write` добавляет карточки, комментарии, перемещает и устанавливает статусы «открыто»/«на рассмотрении». `board.manage` позволяет управлять коллекцией, устанавливать статусы «подтверждено»/«отклонено», а также редактировать или удалять чужие карточки. Статус является решением команды, а не результатом криптографической проверки. Доступ к предустановкам форм: «Рецензент» = чтение; «Аналитик» = чтение/запись; «Оператор» = чтение/запись/управление, в дополнение к их существующим правам. Существующие права не приводят к автоматическому получению новых прав. Главный администратор обладает всеми правами и публикует сообщения как **«Главный администратор**». Используйте именованные права доступа для указания авторства. В списке упоминаний перечислены только те текущие пользователи, которые имеют доступ к просмотру полной родительской карточки. Пользователь чата A не может получить карту или фрагмент для A+B, даже угадав его ID или указав ложный `target.chat_id`. Метаданные целевого объекта определяются на сервере по подписанному хешу события. Перед отправкой ответа фильтруются коллекции, количество обсуждений, связанные карты и оперативные уведомления. Для экспорта требуется как `export`, так и `board.read`; существующий экспортер без доступа к доске получает обычный архив доказательств без заметок команды. SSE повторно проверяет текущие разрешения перед каждой партией. ## Сохраненные контракты Как и наблюдения, аннотации записываются транзакционно в таблицу SQLite с добавлением только данных в рабочей области. Файл `annotations.jsonl` представляет собой точный канонический экспорт из того же моментального снимка для чтения, что и `events.jsonl`. Не существует второго конкурирующего хранилища аннотаций, а также события журнала `board.activity`. Каждая строка должна содержать именно: ``` { "seq": 1, "at": "2026-11-02T14:00:00.000+00:00", "access_id": "admin", "access_label": "Main administrator", "kind": "board.bookmark", "payload": {"id": "32 lowercase hex digits", "target": {"event_hash": "64 lowercase hex digits"}}, "previous_hash": "64 zeroes for the first record", "hash": "SHA-256 described below", "signature": "base64 Ed25519 signature" } ``` Приведенный выше сокращенный пример иллюстрирует конверт; фактические полезные нагрузки включают свои значения по умолчанию и целевые поля, определяемые сервером. Схемы запросов API находятся в каталоге [`tgwitness/schemas`](https://github.com/phishdestroy/TgWitness/blob/main/tgwitness/schemas/board-bookmark.json) и генерируются из моделей Pydantic во время выполнения с помощью скрипта `python tools/build_board_schemas.py`. Дополнительные поля запроса отклоняются. Идентификаторы генерируются на стороне сервера, если они опущены. Авторство, время, моментальный снимок и подпись не могут быть указаны вызывающей стороной. Идентификаторы именованных разрешений соответствуют существующему 16-шестнадцатеричному формату Access; идентификаторы карт — 32-шестнадцатеричные. Канонический JSON — это UTF-8, отсортированные ключи объектов, отсутствие пробелов между токенами, неэкранированный Unicode, а также отсутствие значений NaN и бесконечности. Хеш аннотации — это SHA-256 канонического объекта, содержащего тег `format: "tgwitness-annotations-v1"`, а также все семь полей конверта вплоть до `previous_hash`. Этот тег формата отделяет домен хеша от наблюдений. Подпись формируется с помощью алгоритма Ed25519 над 32 байтами исходного хеша. Нумерация начинается с 1. Ревизии сохраняют идентификатор карты и указывают предыдущий хэш аннотации в поле «`supersedes`»; они не могут изменять область действия чата. Перемещения, статусы и удаления представляют собой отдельные записи. Таблица SQLite не допускает операций UPDATE и DELETE. Файл `case-board.json` содержит `{statement, signature}`. Каноническое заявление подписывается ключом рабочей области и содержит `format: "tgwitness-case-board-v1"`, `public_key`, `created_at`, `journal_head`, `meaning` и `state`. Состояние представляет собой детерминированное воспроизведение: `annotations_head`, упорядоченный массив `items` (коллекции, карточки, комментарии, включая «надгробные камни») и `status_history`. Элементы сохраняют хеш последней аннотации, последовательность, автора и время, а также исходного создателя и время создания при всех ревизиях. Воспроизведение проверяет ревизии, родители, ссылки на коллекции и дубликаты идентификаторов действий. Файлы ``manifest.json`` и новые контрольные точки также связывают ``annotations_head``. Сохраняйте контрольную точку независимо, чтобы обнаружить усечение или перезапись с использованием скопированного ключа подписи. ### Текстовые версии `range.start` — это смещение кодовой точки Unicode с нулевой базой, `length` — положительное число кодовых точек, а `quote` должно равняться точной подстроке из `payload.text` или `payload.caption` в целевом событии. Не применяются NFC/NFKC, преобразование регистра или нормализация графем. Срезки строк в Python и метод JavaScript ``Array.from(text)`` реализуют ту же индексацию. Сочетание знаков и эмодзи ZWJ может занимать несколько кодовых точек. ``range.version`` — это хеш целевого события, а не текущая версия сообщения или смещение UTF-16-сущности в Telegram. Последующие правки никогда не перемещают выделение автоматически. ### Выделение идентификаторов и времени `query` принимает ровно один `chat_id` или непустой набор `chat_ids`, опциональные диапазоны `from`/`to` с включением границ, диапазоны message-ID с включением границ (только для одного чата), `kinds: "all"` или точные/префиксные виды с подстановочными знаками, явно указанных `actors`, `search`, `hide_system` и `include_unscoped`. Группы видов журнала расширяются до их точных предикатов. Поиск использует поиск по полезной нагрузке журнала с учетом NFC и игнорированием регистра без изменения подписанного исходного текста. Даты требуют указания часового пояса и нормализуются до UTC. Даты фильтруют **поле `observed_at`**. Поле ``source_at`` из Telegram отображается отдельно. Удаление без метаданных источника не имеет вымышленного времени удаления. Поздняя запись, обнаруженная за пределами временного интервала, не попадает в него; фрагмент по идентификаторам сообщений может включать более позднее удаление для этих идентификаторов. «`snapshot`» фиксирует время создания, границу последовательности/хеша журнала, количество совпадений, первую/последнюю последовательность и `result_hash`. Последний представляет собой SHA-256 канонического массива JSON в кодировке UTF-8, содержащего хеши совпадающих событий, отсортированные в лексикографическом порядке, включая `[]` для пустого фрагмента. Он также содержит точное количество типов и миниатюру времени наблюдения с 24 бинами. Фрагмент хранит запрос, а не дубликаты исходных записей. При экспорте файл `board/slices/.json` перечисляет текущие хеши и добавленные/удалённые последовательности. Верификатор восстанавливает исходный результат на границе создания, а затем — текущий результат. Добавленные записи фиксируются как факт изменения. Удаление исходного события нарушает неизменяемую цепочку доказательств; оно не принимается без предупреждения как обычное удаление из среза. Снимки реакций содержат неполные списки недавних участников. Программа просмотра сравнивает соседние снимки одного и того же чата/сообщения, включая предшествующий снимок, находящийся за пределами фрагмента, и сообщает об агрегированных разностях **между наблюдениями**. Отсутствие недавних участников не означает, что реакция была удалена. Первый снимок не имеет выведенного более раннего состояния. Наблюдения за участниками остаются привязанными к тому снимку, в котором они были предоставлены, а не к вымышленному времени действия. ## API и экспорт данных `GET /api/board` принимает collection/chat/author/label/state/from/to/q/kind/comments, offset/limit и порядок newest/oldest. `GET /api/board/card/{id}` возвращает карту, предварительный просмотр источника, ветку, историю статусов и связанные карты. Подраут «участники» возвращает подходящие варианты упоминаний. `POST /api/board/{bookmark|highlight|slice|collection|comment|status|move|remove}` добавляет запись. `POST /api/board/slice-preview` вычисляет запрос. Записи фрагмента paginated при `GET /api/board/slice/{id}/records`; при повторном вычислении всегда используется текущий стабильный снэпшот чтения. Live `/api/stream` передаёт уведомления `board` без полезной нагрузки, отдельно от курсоров журнала. `GET /api/board/export` возвращает подписанный документ. Пользователи с ограниченным доступом к чату получают четко маркированное подписанное **раскрытие информации**, но никогда не получают аннотации из других чатов или полную цепочку сообщений. ZIP-архивы с полными доказательствами содержат файл `annotations.jsonl`, подписанный файл `case-board.json` и приложения в формате JSON с фрагментами данных. Настройки отчёта в формате HTML/PDF/JSON позволяют выбрать вариант без доски, закладки/фрагменты без обсуждения или карточки с комментариями. В разделе чётко отделены мнения команды от наблюдений. Фильтры данных отчёта также ограничивают доступные для чтения заметки; полные подписанные исходные файлы в ZIP-архиве с доказательствами остаются в полном объёме. `GET /api/board/slice/{id}/export` генерирует подписанный фрагмент JSON в формате `tgwitness-board-selection-v1`; `?format=csv` генерирует удобную таблицу без отдельной подписи. Сохраните JSON и ZIP: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_KEY_SHA256 --board python -m tgwitness.verify board-slice.json --evidence evidence.zip --fingerprint TRUSTED_KEY_SHA256 python -m tgwitness.verify case-board.json --evidence evidence.zip --fingerprint TRUSTED_KEY_SHA256 ``` Проверка выбора подтверждает подлинность подписанного заявления, точность исходных записей и полноту запроса в пределах указанного диапазона. ZIP-архив с доказательствами может быть более поздней версии, но должен содержать этот префикс. О отсутствующей цели сообщается явно. Несоответствие оригинального снимка фрагмента, изменение аннотации, несовпадение состояния воспроизведения или изменение источника приводят к сбою. Старые архивы без аннотаций сохраняют своё существующее поведение при проверке. По умолчанию для передачи установлено значение **«Не включать**». Явное включение отображает карточки проектов в уже сжатых записях, опускает недоступные/пропущенные объекты, утаивает выделенные фрагменты, исходный текст которых был сжат, очищает текст команды с применением тех же правил упоминаний/контактов и, по желанию, заменяет метки следователей на R01, R02… в метаданных и известных вхождениях в заметках. Исходный файл `annotations.jsonl` не раскрывается. Подписанный фай`tgwitness-case-board-handover-v1`-sidecar и отчет содержат один и тот же сжатый материал. Количество фрагментов описывает только раскрытые записи, при этом исходные детали участника моментального снимка/запроса не раскрываются. Имена в свободном тексте, неизвестные программе минимизации, по-прежнему требуют проверки, как и при обычной передаче материалов. Данный производный файл не претендует на сохранение исходных подписей аннотаций после редактирования. ## Ограничения использования Параметры включают мягкие ограничения: 10 000 карточек и 50 000 комментариев, страницу фрагмента до 5 000 записей и управление предварительным просмотром медиафайлов. При превышении мягких ограничений выдается предупреждение без удаления истории. Страницы ленты содержат не более 200 карточек. Размер автономных выдержек в формате JSON ограничен 64 MiB; для больших объемов данных сузьте запрос или используйте подписанный ZIP-архив. Автономный верификатор ограничивает воспроизведение аннотаций 256 MiB. Case Board не поддерживает и не реализует уведомления о внешних комментариях. Автоматизированный прием функции использует фиктивные данные и имитированную передачу данных через Telegram для проверки хранения, доступа, отображения и экспорта. См. [раздел «Объем проверки»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) для ознакомления с объемом проверки доказательств. --- # Анализ архива Telegram и ссылки на источники Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/ Выполняйте поиск по сохраненным сообщениям, просматривайте данные, обработанные искусственным интеллектом, и ведите аналитические отчеты с указанием источников. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Выполняйте поиск по сохраненным сообщениям, просматривайте данные, обработанные искусственным интеллектом, и ведите аналитические отчеты с указанием источников. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) [Руководство по рабочему процессу](https://phishdestroy.github.io/TgWitness/docs/archive/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) Используйте **«Журнал»** для локального поиска без ИИ; [полнотекстовый поиск](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/) (предварительный просмотр) находит совпадения по формам слов, фразам, доменам и @именам пользователей. Для **функции** **«Запросить архив**» сначала включите и настройте провайдера в разделе **«Интеграции**». Выбор рабочей области определяет аккаунт; форма позволяет выбрать чаты и период наблюдения. Поиск выполняется локально. Точная фраза или домен сужают результаты поиска; ID сообщения запрашивает сохраненные версии. Просмотрите выдержки и откройте их записи в журнале или контекст. Векторная база данных и автоматические действия в Telegram отсутствуют. ## Поставщики и согласие ИИ по умолчанию отключен во всех рабочих пространствах. Только главный администратор может настраивать модель, конечную точку, зашифрованный ключ API, ограничения контекста/вывода, таймаут и суточный лимит запросов. Ключ никогда не возвращается в браузер. Оставьте поле ключа пустым, чтобы сохранить текущий ключ, или явно удалите его. Ollama использует свой задокументированный [конечный пункт `/api/chat`](https://docs.ollama.com/api/chat) с непотоковым выводом в формате JSON. Его адрес по умолчанию — `http://127.0.0.1:11434` на сервере TgWitness. Оператор может изменить его с помощью `TGWITNESS_AI_LOCAL_ENDPOINT`; этот адрес не контролируется моделью. Установите выбранную модель самостоятельно. TgWitness не загружает её автоматически. Совместимый провайдер должен иметь базовый URL, заканчивающийся на `/v1`, и поддерживать [протокол Chat Completions](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create): `messages`, режим ответа JSON, `max_completion_tokens` и `choices[0].message.content`. Сервисы, не имеющие этих полей, не поддерживаются. При тестировании соединения отправляется синтетический текст, что учитывается в лимите запросов. Каждый запрос использует настроенный для рабочей среды внешний маршрут. Заблокированный маршрут или MTProxy, доступный только через Telegram, приводит к ошибке; повторная попытка напрямую невозможна. Намеренно настроенный локальный адрес Ollama позволяет использовать частный пункт назначения. Конечная точка AI с обратной связью требует использования внешнего маршрута «Direct» рабочей области; прокси-маршруты отклоняются до передачи данных. Для других частных сервисов применяется существующая опция подключения к частному пункту назначения на уровне сервера. В предварительном просмотре отображаются конечная точка и внешний маршрут, включая хост прокси, если применимо. Для изменения этого маршрута требуется новый предварительный просмотр. Перед генерацией **данные**, **отправляемые в модель,** отображают запрос: вопрос, проверенные выдержки, типы событий, время наблюдения и маркеры охвата. Сеансы Telegram, исходные поля, ключи провайдера, байты вложений и полный журнал не входят в этот контекст. Снимите отметку с ненужных источников, а затем явно одобрите обработку. Внешние провайдеры могут хранить отправленный контент в соответствии со своими политиками. Локальное выполнение означает, что конечная точка находится локально; это не является гарантией поведения независимо настроенного сервиса. Одновременно может быть не более двух запросов к провайдеру по всему миру и один запрос на каждое рабочее пространство. Срок действия предварительного просмотра истекает через десять минут, и он может сгенерировать один ответ. Отображаются отчётные данные провайдера по количеству токенов; оценка стоимости появляется только после настройки тарифов как на вход, так и на выход. Неудачные попытки также используют дневной бюджет запросов. Автоматические повторные попытки не расходуют дополнительный бюджет. ## Источники и ограничения Поиск использует [полнотекстовый индекс](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#ask-the-archive-and-mcp), когда он завершен: лучшие совпадения по выбранным чатам с учетом словоформ. Запросы о недавних изменениях или версиях одного сообщения, а также поиск во время создания индекса используют ограниченный лексический поиск по новейшим записям. В предварительном просмотре указано используемый метод. Поиск возвращает до 24 источников; длинные тексты обрезаются вокруг места совпадения. Усечённые выдержки и неполные наборы результатов помечаются. Указанный период относится к **времени наблюдения**, а не является утверждением о том, что история Telegram является полной. События, охватывающие всю рабочую область, не доступны в рамках доступа к чату. Отсутствующие данные описываются как «не найденные в доступном архиве». Модель не получает никаких инструментов. Её исходные идентификаторы сверяются с выбранными записями, хэши перепроверяются, а цитируемые строки должны встречаться в этих записях. Неизвестные идентификаторы, измененные цитаты и нецитируемые утверждения приводят к отклонению ответа. Приложение создает ссылки; URL-адреса, сгенерированные моделью, не используются в качестве ссылок. Эти проверки подтверждают наличие источника и точность цитаты, но не достоверность вывода. Перед тем как полагаться на выводы, сверьте их с записями. ## Отчёты Сохраните проверенный ответ в виде отдельного аналитического отчета. Он включает в себя резюме модели, хронологию событий, извлеченные ссылки и идентификаторы, записи о редактировании/удалении, ограничения охвата и хэши исходных событий. К нему прилагаются данные о поставщике, модели, конечной точке, времени и версии шаблона запроса. Идентификационные данные не объединяются автоматически. Изменения и примечания аналитиков хранятся отдельно от сводки модели. Отчеты хранятся в зашифрованных производных файлах, а индекс находится вне подписанного потока событий; исходные события и мультимедиа не изменяются. Только владелец или администратор может открыть отчет, при этом доступ к источнику проверяется повторно. Для скачивания также требуется разрешение на экспорт. Версия 1 не подписывает отчёты и не подразумевает, что выводы модели являются проверенными доказательствами. Ограничения: 100 отчётов на рабочую область и 100 правок аналитика на отчёт. Информацию о ручном распознавании текста (OCR) и транскрипциях см. в разделе [«Обработка медиафайлов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/)». Информацию о доступе клиентов см. в разделе [«MCP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/)». --- # Полнотекстовый поиск по архиву Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/ Поиск сохраненных сообщений по формам слов, точным фразам, доменам и @именам пользователей, с отображением наиболее подходящих результатов в первую очередь, при этом индекс привязан к подписанному журналу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Поиск сохраненных сообщений по формам слов, точным фразам, доменам и @именам пользователей, с отображением наиболее подходящих результатов в первую очередь, при этом индекс привязан к подписанному журналу. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) [Анализ архива](https://phishdestroy.github.io/TgWitness/ru/docs/reference/analysis/) · [Локальное распознавание текста (OCR) и транскрипция](https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) **Предварительный просмотр.** В разделе **«Журнал**» выберите **«Лучшее совпадение · формы слова»** рядом с полем поиска. Результаты ранжируются по алгоритму BM25 и включают другие формы того же слова: *«перевод»* находит *«переводом»* и *«переводы»*, *«transfer»* находит *«transfers»*, китайская фраза находит без пробелов. **«Сначала новые · точный текст»** сохраняет предыдущий поиск подстроки по всей записи. Индекс представляет собой производные данные. Он воссоздаётся на основе подписанного журнала, сам по себе никогда не подписывается и никогда не попадает в экспорт. Исходные записи не изменяются. **На этой странице** - [Синтаксис поиска](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#search-syntax) - [Языки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#languages) - [Где находится индекс](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#where-the-index-lives) - [Результаты и подписанный журнал](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#results-and-the-signed-journal) - [Распознанный текст](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#recognized-text) - [Доступ](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#access) - [Запросить архив и MCP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#ask-the-archive-and-mcp) - [Зависимости](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#dependencies) - [Бенчмарк](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#benchmark) ## Синтаксис поиска | Написать | Найти | | --- | --- | | `перевод карта` | Записи, содержащие оба слова в любой форме | | `"переводом на карту"` | Точная фраза, именно в таком порядке | | `бонус OR подарок` | Любое из этих слов | | `перевод -казино` | Записи без исключённого слова | | `example.com` | Домен и его субдомены, в том числе в скрытых ссылках и URL-адресах кнопок | | `@username`, `t.me/username` | Упоминания и ссылки на аккаунт, а также отправленные им сообщения | | `#tag` | Хэштег | | `+79991234567`, адрес кошелька, адрес электронной почты | Одно и то же значение в тексте или ссылках | | `from:@username`, `from:123456` | Сообщения от этого отправителя | | `chat:-1001234567890` | Один чат; он может ограничить только ваш собственный доступ | | `id:42` | Сохраненные версии сообщения № 42 | | `since:2026-01-01 until:2026-01-31` | Период наблюдения; дата без указания времени охватывает весь день | | `kind:edited` | Только правки (`new`, `snapshot`, `edited`, `recovered`) | | `source:ocr`, `source:transcription`, `source:all` | Распознанный текст вместо сообщений или вместе с ними | Предлоги и другие служебные слова игнорируются при наличии других слов. Похожие буквы, входящие в состав слова (например, латинская буква *«a»* в кириллическом слове), полноширинные и декоративные символы Unicode, а также невидимые символы нормализуются. ## Языки Язык определяется для каждой записи на основе используемого скрипта и букв: | Скрипт | Соответствие | | --- | --- | | Кириллица | Русские и украинские леммы с помощью [pymorphy3](https://github.com/no-plagiarism/pymorphy3). Без дополнительного украинского словаря используется упрощённый украинский стеммер. | | Латинский | Стеммер «Snowball» для английского языка; диакритические знаки игнорируются | | Китайский, японский, корейский, тайский, лаосский, кхмерский, бирманский | Перекрывающиеся пары символов: поиск любой фразы осуществляется без пробелов. Китайские запросы разбиваются на слова с помощью Jieba. | | Другие скрипты | Точные формулировки | Украинский словарь (`pymorphy3-dicts-uk`) распространяется по лицензии GPL-3.0, поэтому он по умолчанию не устанавливается. Установите его с помощью `pip install "tgwitness[uk-dictionary]"`; индекс распознает новый анализатор и перестраивается самостоятельно. ## Где находится индекс | Режим | Хранение данных | Использование | | --- | --- | --- | | На диске (по умолчанию) | `search/fulltext.sqlite3` в каталоге рабочей области | Большие архивы; сохраняются после перезапуска | | Только в памяти | Ничего не сохраняется на диске; перестраивается при каждом запуске | На диске не должно оставаться никаких копий текста сообщений | | Выключить | Без индекса; **сначала самые новые · точный текст** сохраняется | Минимальные требования к установке | Главный администратор выбирает режим в меню **«Журнал» → «Фильтры» → «Индекс поиска»** для каждого рабочего пространства. `TGWITNESS_FULLTEXT=disk|memory|off` Устанавливает значение по умолчанию для рабочих пространств, не имеющих собственного выбора. Переключение в режим «В памяти» или отключение приводит к удалению файла. Файл индекса имеет ту же защиту, что и журнал: он находится в каталоге с личными данными . Он не зашифрован и не входит в резервные копии или выносные копии. Новые записи индексируются в фоновом режиме в течение нескольких секунд; при поиске сначала индексируется небольшой накопленный объем данных, поэтому запись, сохраненная буквально минуту назад, будет найдена. Существующий журнал индексируется после обновления без блокировки панели; до этого момента результаты охватывают индексированные записи, а в журнале отображается ход индексирования. **Перестроение индекса** начинается заново с первой записи. ``` python -m tgwitness index status --data-dir data/live python -m tgwitness index rebuild --data-dir data/live --json ``` `rebuild` требуется остановка панели (в противном случае — код завершения 3). При `--json`, стандартный вывод передаёт только результат; информация о ходе выполнения выводится в стандартный поток ошибок. ## Результаты и подписанный журнал Индекс хранит порядковый номер и хеш последней записи журнала, которую он охватывает, и сверяет их с журналом при его открытии. Замена, восстановление или редактирование журнала приводит к его перестроению. Каждый ответ сообщает эту позицию, и каждое совпадение считывается из подписанного журнала по его порядковому номеру: индекс определяет, какие записи показывать и в каком порядке, но никогда не определяет их содержание. Доступ к чату применяется к собственному полю чата журнала, а не к содержимому индекса. ## Распознанный текст Результаты OCR и транскрипты остаются в своих зашифрованных артефактах. Их индекс существует только в памяти и восстанавливается по завершении задания распознавания. Попадание отображается в соответствующей `media.saved` записи с пометкой «автоматическое распознавание», с указанием движка, модели и фрагмента текста; он никогда не отображается как текст, отправленный в Telegram. Тот же индекс используется функцией **«Поиск распознанного текста**», которая по-прежнему также находит совпадения с простыми подстроками. ## Доступ Доступ в пределах чата находит только записи из соответствующих чатов, включая распознанный текст их вложений. `chat:` а другие фильтры могут лишь сузить этот набор. Статус индекса, отображаемый при доступе с ограничением по чату, не включает общие данные журнала. Только главный администратор может изменить режим или перестроить индекс. ## Обратитесь в архив и к MCP **Запрос в архив** извлекает источники из этого индекса, когда он будет готов: наилучшие совпадения по выбранным чатам, при этом сохраненный текст учитывается один раз. Отправляется до 24 источников; длинные тексты обрезаются вокруг места совпадения и помечаются как усеченные. Запросы о последних изменениях, сохраненных версиях одного сообщения и поиски, пока индекс ещё формируется, используют предыдущий хронологический поиск. В предварительном просмотре указывается, какой метод был использован. Клиенты MCP могут вызывать `search_messages` с `ranked=true` и переходить на страницу с помощью `next_offset`. Подключения с ограниченной областью действия получают только свои чаты. Пагинация по рейтингу охватывает не более первых 1,000 результатов, независимо от размера страницы. Сузьте запрос, чат или период, чтобы просмотреть дополнительные совпадения. Поиск Сначала самые новые сортирует сообщения, результаты OCR и транскрипции перед выбором каждой страницы. ## Зависимости | Пакет | Лицензия | Почему | | --- | --- | --- | | pymorphy3, pymorphy3-dicts-ru, DAWG2-Python | MIT | Русские и украинские леммы; словари загружаются локально | | snowballstemmer | Положение BSD-3 | Английские корни слов, чистый Python | | jieba | MIT | Сегментация китайских запросов, на чистом Python (только исходный код) | | pymorphy3-dicts-uk (необязательно) | GPL-3.0 | Полный украинский словарь | Требуется SQLite FTS5 с `unicode61` токеннизатором; он входит в состав SQLite в текущих сборках Python. Без него при поиске по наилучшему совпадению выдается сообщение о его недоступности. ## Тестирование производительности `python tools/bench_fulltext.py --messages 1000000 --work `создаёт детерминированный подписанный журнал, содержащий смешанные сообщения на русском, украинском, английском, китайском и японском языках со ссылками и хендлами из 200 чатов, формирует индекс и измеряет время выполнения типичных поисковых запросов (50 результатов, медиана по 7 запусков). Тестирование проводилось на Windows 11, Intel Core i9-13900K, 128 ГБ ОЗУ, Python 3.12.10, SQLite 3.49.1, данные на диске с файловой системой exFAT, анализатор `fulltext-v1+pymorphy3-ru+light-uk+snowball-en`: | Мера | Результат | | --- | --- | | Подписанный журнал | 1 000 000 сообщений, 1,50 ГиБ, записано за 19 минут | | Создание индекса на основе журнала | 71 с, около 14 141 сообщений в секунду | | Файл индекса | 58 МБ, 3,8 % журнала | | Поиск сразу после появления новой записи | Медиана — 8 мс, p95 — 9 мс | | Предыдущий поиск подстроки, тот же журнал | `перевод` 3,2 с, `银行转账` 2,6 с, `verify-account.example` 2,6 с | | Поиск | Сопоставление записей | Наилучшее соответствие, медиана | p95 | Сначала самые новые, по медиане | | --- | --- | --- | --- | --- | | Общие слова, формы слов: `перевод` | 134,403 | 82 мс | 85 мс | 7 мс | | Два слова: `оплата карта` | 28,996 | 43 мс | 43 мс | 14 мс | | Редкое слово: `розыгрыш подарок` | 28,881 | 42 мс | 47 мс | 13 мс | | Точная фраза: `"переказ коштів на картку"` | не учитывается | 35 мс | 36 мс | 6 мс | | Домен с поддоменами: `verify-account.example` | 12,435 | 17 мс | 17 мс | 3 мс | | @username: `@support_desk_bot` | 10,331 | 15 мс | 16 мс | 3 мс | | Китайский без пробелов: `银行转账` | 17,691 | 23 мс | 24 мс | 3 мс | | Японский: `リンク` | 16,603 | 23 мс | 25 мс | 3 мс | | Английская основа: `withdrawal` | 27,775 | 26 мс | 26 мс | 2 мс | | ИЛИ и исключения: `бонус OR подарок -казино` | 268,034 | 190 мс | 193 мс | 19 мс | | Фильтр чатов: `chat:-1000000000007 перевод` | 652 | 9 мс | 9 мс | 6 мс | | Фильтр по периоду: `since:2026-01-01 until:2026-01-31 выплата` | 115,732 | 155 мс | 156 мс | 81 мс | Точная фраза проверяется буквально по кандидатам в порядке ранжирования до тех пор, пока страница не заполнится, поэтому её итог не учитывается. Время выполнения растёт с увеличением количества совпадающих записей; сужение диапазона чатов или периода ускоряет широкий поиск. В синтетическом корпусе повторяется небольшой словарный запас, поэтому распространённые слова дают гораздо больше совпадений, чем в реальных чатах. --- # MCP-сервер архива Telegram: доступ только для чтения Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/ Подключите клиент MCP к выбранным рабочим пространствам и чатам с ограниченным по времени и отзывным доступом. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Подключите клиент MCP к выбранным рабочим пространствам и чатам с ограниченным по времени и отзывным доступом. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Интеграция с архивами](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/) ![Интеграция с архивами](https://phishdestroy.github.io/TgWitness/assets/chapter-integrations.svg) Подключите клиент аналитика к выбранным рабочим пространствам и чатам. TgWitness предоставляет доступ к **Streamable HTTP по адресу `/mcp` в процессе панели**. Каждое соединение имеет свой собственный токен, срок действия и разрешённые инструменты. MCP не может отправлять сообщения в Telegram, изменять настройки или модифицировать подписанный журнал. Те же соединения работают с [командной строкой](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/). [Руководство по рабочему процессу](https://phishdestroy.github.io/TgWitness/docs/archive/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) **На этой странице** - [Установка и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/#install-and-check) - [Установить соединение](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/#issue-a-connection) - [Подключите свой клиент](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/#connect-your-client) - [Cloudflare Tunnel](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/#cloudflare-tunnel) - [Инструменты и ограничения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/#tools-and-boundaries) ## Установка и проверка Используйте окружение Python, в котором запущена панель. Из каталога с исходным кодом выполните: ``` # Windows PowerShell & .\.venv\Scripts\python.exe -m pip install -c deploy/constraints-mcp.txt -e '.[mcp]' & .\.venv\Scripts\python.exe start.py --check ``` ``` # Linux / macOS .venv/bin/python -m pip install -c deploy/constraints-mcp.txt -e '.[mcp]' .venv/bin/python start.py --check ``` После установки перезапустите панель с ее обычным каталогом данных и аргументами запуска. Проверка готовности должна содержать строку `[PASS] mcp: streamable-http available`. Раздел **Интеграции → MCP** показывает статус выполнения и команду установки с использованием фактического исполняемого файла Python этого сервера. **Повторная проверка** обновляет этот статус без перезагрузки страницы; она не устанавливает пакеты и не перезапускает сервер. Дополнение MCP использует официальный [SDK MCP для Python](https://github.com/modelcontextprotocol/python-sdk). Файл`deploy/constraints-mcp.txt` фиксирует версию тестируемого SDK и зависимостей. ## Выпуск подключения 1. Введите метку и выберите рабочие пространства и чаты, которые клиент может читать. 2. Выберите инструменты по отдельности или используйте пресет. Предлагаются только реализованные инструменты. 3. Выберите 1, 7, 30 или 90 дней либо укажите собственный срок действия от одной минуты до 90 дней. 4. Нажмите **Создать подключение**. Токен отобразится один раз рядом с конфигурацией клиента. 5. Скопируйте токен и конфигурацию, затем запустите **Проверить подключение**. Это инициализирует MCP и выводит список разрешенных инструментов; **сообщения при этом не читаются**. В результате отображаются версия протокола, имена инструментов, их количество и затраченное время. 6. Нажмите **Готово**, когда учетные данные будут сохранены. Фоновый опрос не сбрасывает форму и карточку однократного показа. Блокировка панели очищает отображаемые секреты. В списке отображаются недавнее использование, последний инструмент, адрес и количество запросов за последнюю минуту. **Отозвать** прекращает доступ. **Ротация токена** отзывает старые учетные данные и выпускает замену с теми же областью доступа, инструментами и сроком действия; скопируйте новый токен при единственном показе. Токены входа в панель и учетные данные Telegram не работают как токены MCP. ## Подключение клиента Выберите клиент в панели и скопируйте сгенерированную для него конфигурацию. В конфигурациях используются ссылки на секреты или явные заполнители; сам токен копируется отдельно. | Клиент | Конфигурация | Связь | | --- | --- | --- | | Код Claude | `.mcp.json` | HTTP, `type: "http"`, заголовок Bearer | | Claude Desktop | `claude_desktop_config.json` | Локальный stdio-мост | | Cursor | `.cursor/mcp.json` | HTTP с заголовком из переменной окружения | | VS Code Local | `.vscode/mcp.json` | HTTP с вводом пароля через `promptString` | | Windsurf | `mcp_config.json` | HTTP с заполнителем для заголовка Bearer | | Другие клиенты | URL и заголовок Authorization | Потоковый HTTP | TgWitness использует Bearer-токены без обнаружения OAuth. Используйте локальный stdio-мост для клиентов, чей удаленный коннектор требует OAuth. В VS Code переменные ввода применяются к окружению **Local** и не передаются в сессии Copilot. Справочники по конфигурации: [Claude Code](https://code.claude.com/docs/en/mcp), [Cursor](https://prod.cursor.com/docs/mcp), [VS Code](https://code.visualstudio.com/docs/agents/reference/mcp-configuration). Каноническая точка входа для локального моста: ``` python -m tgwitness.mcp_server --url https://your-panel.example/mcp ``` Используйте локальный Python клиента с установленным дополнением MCP. Задайте переменную `TGWITNESS_MCP_TOKEN` в его защищенном окружении. Не передавайте учетные данные в аргументах командной строки и URL. `tgwitness-mcp` — это та же самая точка входа. Старый модуль `tgwitness.mcp_bridge` и имя `TGWITNESS_ARCHIVE_TOKEN` сохранены для обратной совместимости и выводят предупреждение; в новых конфигурациях используются `mcp_server` и `TGWITNESS_MCP_TOKEN`. ## Cloudflare Tunnel Пробросьте маршрут панели `/mcp` и сохраните заголовок Bearer. Открытие настроек MCP под учетной записью администратора регистрирует текущий источник (origin) панели для текущего запуска. Чтобы получить стабильный адрес, доступный сразу после перезапуска, укажите HTTPS-источник панели в `TGWITNESS_PUBLIC_URL` перед ее запуском. Произвольные заголовки Host и заголовки пересылки не регистрируют доверенный адрес. Проверки Host и Origin отклоняют сторонние браузерные источники. В ответах используется `Cache-Control: no-store`; значения авторизации никогда не записываются в журнал. Адрес вида `*.trycloudflare.com` является временным. Если при перезапуске туннеля меняется имя хоста, обновите настроенный публичный URL и URL MCP в каждом клиенте. Используйте стабильное имя хоста для сохраненных клиентских конфигураций. ## Инструменты и ограничения | Инструмент | Что читает | | --- | --- | | `list_workspaces` | Разрешенные рабочие пространства | | `list_chats` | Разрешенные чаты | | `search_messages` | Текст сохраненных сообщений за выбранный период; `ranked=true` поддерживает [полнотекстовый поиск](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/) (формы слов, сначала отображаются наиболее подходящие результаты, `next_offset` пагинация) | | `get_message_versions` | Зафиксированные версии и наблюдения об удалении | | `get_message_context` | Идентификаторы соседних зафиксированных сообщений | | `get_journal_event` | Одна очищенная запись со ссылкой на источник | | `get_capture_status` | Состояние сбора данных, разрешенные записи о охвате и `gap_summary`: номера сообщений, которые никогда не наблюдались, по каждому каналу или супергруппе, а также для всей последовательности аккаунта ([подробнее](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#missing-message-numbers-gap_summary)); выберите чат, чтобы увидеть перечень пробелов в нём | | `get_activity_stats` | Сообщения по часам UTC и дням недели, дни пиковой активности, доля отредактированных и удалённых сообщений, отправители, домены и `@handles`, с охватом ([подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/#activity-statistics)) | | `get_messages_by_date` | Сохраненные сообщения за один календарный день в указанном часовом поясе IANA (`Europe/Kyiv`, `UTC`), согласно времени, указанному Telegram; `from_utc` и `until_utc` укажите рассчитанный день с учётом перехода на летнее время | | `get_pinned_messages` | Сообщения, закреплённые в последнем снимке состояния чата, с их сохраненными версиями, а также уведомления о закреплении и снятии закрепления, отображаемые в режиме реального времени | | `get_chat_stats` | Укажите количество сохраненных записей для одного чата или всех чатов в области действия, первое и последнее наблюдение, а также `gap_summary`; используйте его перед операцией чтения большого объема данных | | `get_topics` | Темы форума из сообщений службы сохраненных тем: история названий, закрытые или скрытые темы, количество сохраненных сообщений | | `get_media` | Сохраненное изображение в виде уменьшенного предварительного просмотра в формате JPEG (не более 36 КБ), возвращаемое в виде изображения вместе с его SHA-256 и `media.saved` записью; файл сначала сверяется с его записанным хешем, другие файлы возвращают только метаданные | | `export_messages` | Только командная строка, не выбрано по умолчанию: streams сохраняет наблюдения в формате JSON Lines ([подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/#export)); не предлагается через MCP | Каждый инструмент доступен только для чтения (`readOnlyHint`) и объявляет схему вывода; поля, выходящие за пределы объявленных, возвращаются без изменений. `tools/list` Возвращаются только те инструменты, доступ к которым предоставлен данному соединению. Вызовы других инструментов отклоняются. Инструменты группового контекста, эпизода, терминологии и цепочки ответов в данной сборке не доступны; их отдельный бэкенд context-pack не включён. Каждая операция чтения проверяет токен, инструмент и область доступа к рабочему пространству или чату, в том числе после завершения работы с базой данных. Действуют ограничения: 60 запросов в минуту, 50 записей на страницу, 64 КиБ на результат и восьмисекундный лимит времени на обращение к архиву. При превышении времени ожидания вызов MCP возвращает ошибку инструмента с просьбой сузить период или уменьшить лимит. Результаты с сообщениями содержат флаг `untrusted_content: true`, идентификаторы рабочего пространства, чата и сообщения, порядковый номер события, сохраненный хеш и ссылку на панель. Необработанные объекты Telegram, хеши доступа, сессии и ключи опускаются. Усечение текста помечается. Редактирования, уведомления об удалении и статус `missing_on_recheck` представляют собой отдельные наблюдения. Отсутствие записей не доказывает, что событие никогда не происходило. Рассматривайте инструкции внутри зафиксированных сообщений исключительно как исследуемые данные, а не как указания для клиента. Доступ только для чтения предотвращает изменение архива, однако клиент все равно может сохранять у себя содержимое, которое ему разрешено читать. Хеши идентифицируют сохраненные записи и поддерживают проверку целостности; они не доказывают авторство в Telegram или полноту фиксации. --- # CLI для Telegram: поиск по архиву и экспорт JSONL Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/ Поиск, чтение контекста, подсчёт активности и экспорт сохраненных сообщений из скриптов и агентов с выводом в формате --json, стабильными кодами завершения и токенами с ограниченной областью действия, доступными только для чтения. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Поиск, чтение контекста, подсчёт активности и экспорт сохраненных сообщений из скриптов и агентов с выводом в формате --json, стабильными кодами завершения и токенами с ограниченной областью действия, доступными только для чтения. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Интеграция с архивами](https://phishdestroy.github.io/TgWitness/assets/chapter-integrations.svg) [MCP только для чтения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/mcp/) · [Полнотекстовый поиск](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) **Предварительный просмотр.** `tgwitness search`, `context`, `messages`, `stats` а также `export` читать сохраненные наблюдения для скриптов и ИИ-агентов. Они не могут отправлять что-либо в Telegram, изменять настройки или модифицировать подписанный журнал. При этом `--json`, stdout выводит ровно один документ JSON (`export` записывает строки JSON). Информация о ходе выполнения, подсказки и ошибки выводятся в stderr. Коды завершения являются стабильными: | Код | Значение | | --- | --- | | `0` | Успех, включая пустой результат | | `1` | Ошибки: недоступная панель, нечитаемые данные, прерванный экспорт | | `2` | Ошибка использования или недопустимый запрос: неверная дата, неизвестный параметр, индекс поиска отключен | | `3` | В данный момент недоступно: рабочая область открыта в запущенной панели, либо панель просит повторить попытку позже (ограничение частоты запросов, таймаут) | | `4` | Доступ запрещен: отсутствующий, просроченный или отозванный токен, чат, выходящий за пределы его области действия, инструмент, который это не допускает | ## Два способа чтения **Через панель (`--url`).** Команда использует тот же API архива с ограниченной областью действия, что и MCP. Создайте подключение в **разделе** **«Интеграции» → «MCP**»: выберите рабочие пространства и чаты, инструменты и срок действия, затем скопируйте токен один раз. Подключение доступно только для чтения, ограничено указанными чатами, имеет ограничение по скорости в 60 запросов в минуту и может быть отозвано или обновлено в любое время. Токены входа в панель и учетные данные Telegram здесь не работают. ``` export TGWITNESS_URL=https://panel.example.org # default http://127.0.0.1:8787 export TGWITNESS_MCP_TOKEN=tgw_mcp_... # or --token-file path tgwitness search 'перевод карта' --json ``` Для удалённой панели требуется HTTPS; простой HTTP допускается только для `127.0.0.1`, `localhost` и `::1`. Переменные среды прокси игнорируются, а перенаправления не допускаются, поэтому токен попадает только по указанному вами адресу. **Непосредственно из остановленного рабочего пространства (`--data-dir`).** Считывает каталог данных с полным локальным доступом, без токена. Используйте эту команду на копии каталога данных или когда сбор данных остановлен. Подписанные записи никогда не изменяются; как и в панели, открытие рабочего пространства может привести к обновлению производных индексов. Если панель имеет открытое рабочее пространство, команда завершается с кодом `3`; вместо этого читайте данные через панель. Если `--data-dir`, `TGWITNESS_DATA`, `./data/live` используется каталог данных той установки, в которой выполняется команда. `--workspace ID` выбирает рабочую область (по умолчанию `default`). `tgwitness messages --workspaces` выводит список тех, которые вы можете читать. ## Команды | Команда | Результат | | --- | --- | | `tgwitness search QUERY [--chat ID] [--since] [--until] [--any] [--limit N] [--offset N]` | Сначала отображаются наиболее подходящие варианты с учетом словоформ, точных фраз в кавычках, доменов и `@username` ([синтаксис](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#search-syntax)) | | `tgwitness search QUERY --exact [--before SEQ]` | Точный текст, сначала самые новые записи, без указателя | | `tgwitness context CHAT_ID MESSAGE_ID` | Сохраненные сообщения в пределах десяти идентификаторов сообщений в обе стороны | | `tgwitness messages` | Чаты, которые можно читать | | `tgwitness messages CHAT_ID [--since] [--until] [--before SEQ]` | Сохраненные сообщения чата, сначала самые новые | | `tgwitness messages CHAT_ID --message ID` | Каждая сохраненная версия и запись об удалении одного сообщения | | `tgwitness stats [--chat ID] [--sender ID] [--since] [--until] [--top N]` | Статистика активности приведена ниже | | `tgwitness export [--chat ID] [--since] [--until] [--output FILE]` | Сохраненные наблюдения в формате JSON Lines в порядке записей в журнале | Даты указаны `2026-10-01` (полночь по UTC) или время в формате ISO с указанием часового пояса, `2026-10-01T09:00+03:00`. Что касается `search`, `messages` и `export` они выбирают время наблюдения. Страницы вмещают до 50 записей: следуйте `next_offset` (`--offset`) для поиска по рейтингу и `next_before` (`--before`) в других разделах. Ранжированный поиск ограничивается 1,000 результатами. Последняя страница может быть короче, чем `--limit`; сузьте запрос, чат или период, если существует больше подходящих наблюдений. Каждый результат сообщения содержит `untrusted_content: true`идентификаторы рабочего пространства, чата и сообщения, порядковый номер в журнале, хеш сохраненной записи и ссылку на панель. Редактирования, уведомления об удалении и `missing_on_recheck` являются отдельными записями. Отсутствие записи не доказывает, что событие никогда не происходило. ### Статистика активности `stats` подсчитывает количество сохраненных наблюдений для одного чата, одного отправителя или всех чатов в пределах области действия: - сообщения по часам UTC и по дням недели (начиная с понедельника), часы и дни с наибольшей активностью; - отредактировано, удалено и `missing_on_recheck` поделился; - отправителей с указанием количества сообщений, а также времени отправки первого и последнего сообщения; - наиболее часто встречающиеся домены и `@handles`, учитываемые один раз на сообщение во всех его сохраненных версиях; - Объем: `coverage.gap` записи и, для доступа ко всему рабочему пространству, периоды без сигналов о работоспособности подключенного коллектора (`collector_liveness`). Период определяет **время сообщения, указанное Telegram**. Количество часов и дней недели может помочь оценить часовой пояс отправителя, но не позволяет его точно установить. Цифры рассчитываются по запросу из журнала и не сохраняются. Каждый результат указывает начало журнала, который он охватывает, если ваш доступ охватывает рабочую область. Чтение прекращается через пять секунд после прокрутки панели или `--timeout` секунд локально (по умолчанию 30); после этого `complete` имеет значение false, а `partial` указывает первую запись, которая не была прочитана. В этом случае учитываются только самые последние записи. ### Экспорт `export` Записывает один объект JSON на каждое сохраненное наблюдение (новые сообщения, снимки экрана, редактирования, восстановленные сообщения, уведомления об удалении, `missing_on_recheck` и сохраненные медиафайлы ) в порядке записей журнала. Каждая строка содержит те же поля, что и остальные результаты, включая полный текст. При `--output`файл записывается под `.partial` именем и переименовывается только после записи о завершении работы панели; прерванный экспорт не оставляет файла и завершается с кодом `1`. `--output` никогда не перезаписывает существующий файл. При использовании `--output` и `--json`в stdout выводится сводка: количество записей, последняя последовательность журнала и, при доступе ко всему рабочему пространству, начало журнала. Для экспорта через панель требуется подключение, поддерживающее **экспорт сообщений (только из командной строки)**; по умолчанию эта опция не выбрана. Данный файл является рабочей копией, а не доказательством: для проверяемой передачи данных используйте подписанный экспорт в **разделе** **«Экспорт»**, который `python -m tgwitness.verify`проходит проверку. Панэль повторно проверяет доступ перед выводом каждой записи, включая запись о завершении. Отзыв или истечение срока действия доступа приводит к неполному экспорту. Отложенное чтение страниц делит лимит архивного рабочего процесса с другими запросами и имеет ограниченное время ожидания. ## Навык агента [`.agents/skills/tgwitness-cli/SKILL.md`](https://github.com/phishdestroy/TgWitness/blob/main/.agents/skills/tgwitness-cli/SKILL.md) содержит инструкции для агента о том, как использовать эти команды, как цитировать записи и как обрабатывать захваченный текст. Агенты, которые читают `.agents/skills` загружают его из репозитория после выгрузки. Для Claude Code скопируйте `tgwitness-cli` папку в `.claude/skills/` в ваш проект или `~/.claude/skills/`. ## MCP и командная строка Оба используют одни и те же подключения, проверки области действия и ограничения. Результаты MCP ограничены одной страницей размером 64 КиБ, поэтому MCP не предоставляет возможности массового экспорта; командная строка передаёт данные потоком. `get_activity_stats` доступна для обоих. --- # OCR изображений и расшифровка аудио Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/ Распознавайте захваченные изображения и аудио с помощью локального рабочего процесса; сохраняйте полученный текст с привязкой к исходному файлу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Распознавайте захваченные изображения и аудио с помощью локального рабочего процесса; сохраняйте полученный текст с привязкой к исходному файлу. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) [Руководство по рабочему процессу](https://phishdestroy.github.io/TgWitness/docs/archive/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) Откройте запись журнала `media.saved`, выберите **«Распознать вложение**», затем выберите «OCR» или «транскрипция» в разделе **«Запросить у архива**». Обработка осуществляется вручную и локально. Режим облачного хранения медиафайлов или автоматическая загрузка отсутствуют. Исходные байты вложения и файл `media_sha256` остаются неизменными; распознанный текст явно помечается как результат машинного распознавания и хранится отдельно с указанием исходного хеша, версии движка/модели, языка, параметров и времени завершения. В транскрипциях сохраняются возвращённые временные метки. Выполняйте поиск по этим результатам с помощью **функции «Поиск по распознанному тексту**» и фильтра «OCR/транскрипт», или выберите распознанный текст в качестве источника для поиска «Лучшее совпадение **в** **журнале**». Оба метода сопоставляют формы слов с помощью [индекса](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#recognized-text) [в памяти](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#recognized-text). Это отдельный поиск по производным данным; он не преобразует автоматическое распознавание в исходный текст Telegram и не добавляет его к подписанным событиям. ## Настройте дополнительный рабочий процесс Версия 1 требует хоста под управлением Linux с локальным демоном Docker. При установке в Windows TgWitness можно запускать в виртуальной машине Linux или среде WSL с собственным локальным демоном. Панель никогда не декодирует недоверенные вложения самостоятельно. ``` docker build -f deploy/media-worker/Dockerfile -t tgwitness-media:local . export TGWITNESS_MEDIA_IMAGE=tgwitness-media:local ``` Установите эти переменные в среде службы TgWitness и перезапустите её. По умолчанию сокет демона — `/var/run/docker.sock`; при развёртывании без прав root можно установить `TGWITNESS_DOCKER_SOCKET`. Рабочий процесс явно использует этот сокет Unix, а не удалённый контекст Docker. Не предоставляйте доступ к API Docker пользователям панели управления и не монтируйте его сокет внутри контейнера распознавания. Для транскрипции необходимо отдельно установить модель Whisper, совместимую с CTranslate2, а затем указать `TGWITNESS_WHISPER_MODEL_DIR` в качестве её каталога. Рабочий процесс загружает её с помощью `local_files_only=True`; выбранная модель и входные данные монтируются в режиме «только для чтения». См. [документацию по загрузке моделей](https://github.com/SYSTRAN/faster-whisper) движка. Поставляемое OCR-образа содержит обучающие данные на английском и русском языках. При необходимости добавьте другой язык в ваше образа; коды языков соответствуют [CLI Tesseract](https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html). При обработке модели не загружаются. Процесс сборки/загрузки установочного пакета может использовать сеть; в каждом контейнере фактического распознавания сетевые функции отключены. Установите образ перед его включением; в процессе выполнения используется `--pull=never`. ## Ограничения и восстановление Контейнер запускается от имени пользователя без привилегий с корневым каталогом, доступным только для чтения, ограниченными возможностями, режимом `no-new-privileges` , одним процессором, 2 GiB памяти, ограничением PID и ограниченной временной файловой системой. Монтируются только проверенная копия выбранного файла и, по желанию, каталог модели. База данных, хранилище и сессия сборщика не монтируются. [Флаги среды выполнения Docker](https://docs.docker.com/reference/cli/docker/container/run/) обеспечивают соблюдение этих ограничений; это остается границей контейнера, а не аппаратным анклавом. Размер файлов ограничен 50 MiB, изображений — 20 миллионами пикселей, аудиозаписей — 30 минутами при известной продолжительности, а время обработки — пятью минутами. Одновременно работает один рабочий процесс, при этом в очереди или в процессе выполнения может находиться не более 20 заданий, а в рабочей области сохраняется не более 100 заданий. Команда «Cancel» останавливает контейнер; «Retry» создаёт новое задание, связанное с предыдущей попыткой. Прерванные задания помечаются после перезапуска. Обработка может завершиться сбоем, если модель не укладывается в заданные ограничения; без изоляции она не выполняется в фоновом режиме. --- # Вебхуки TgWitness: HMAC-подпись и доставка событий Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/webhooks/ Отправка событий в заданном диапазоне на HTTPS-приемники с HMAC-подписями, повторными попытками и статусом доставки. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Отправка событий в заданном диапазоне на HTTPS-приемники с HMAC-подписями, повторными попытками и статусом доставки. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Интеграция с архивами](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/) ![Интеграция с архивами](https://phishdestroy.github.io/TgWitness/assets/chapter-integrations.svg) [Руководство по рабочему процессу](https://phishdestroy.github.io/TgWitness/docs/archive/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md) Откройте раздел **«Интеграции» → «Исходящие веб-хуки»** в выбранном рабочем пространстве. Добавьте HTTPS- приемник, выберите события «коллектор», «медиа» и «экспорт», а также, по желанию, укажите чаты для отслеживания новых сообщений и изменений. По умолчанию текст сообщений не передается. Включение выдержек добавляет не более 1 000 символов к событиям об изменении сообщений; исходные поля Telegram и учетные данные никогда не отправляются. Один раз скопируйте секретный ключ HMAC в защищённую конфигурацию получателя. Он зашифрован в хранилище TgWitness и не может быть извлечён из панели управления. Удалите и заново создайте пункт назначения, чтобы произвести его ротацию. **Отправьте**в**синтетические тестовые** очереди тестовое сообщение без содержимого чата; обновите статус доставки, чтобы увидеть результат. Доставка расширяет существующий цикл уведомлений наряду с Apprise. Она использует внешний маршрут рабочей среды и существующие ограничения на частные адреса назначения. Прямого резервного варианта или последующего перенаправления нет. URL-адреса не должны содержать учетные данные, строки запроса или фрагменты; для частных адресов требуется сетевое согласие на уровне сервера, а не настройка, которую пользователь панели может обойти. ## Полезная нагрузка и подпись Схема: [`tgwitness.webhook/1`](https://github.com/phishdestroy/TgWitness/blob/main/integrations/webhook.schema.json). Каждый полезный груз содержит `event_id`, `timestamp`, `workspace`, `type`, `synthetic` и счетчики. События, записываемые в журнал, включают свою последовательность и хеш. Завершение полного экспорта и синтетические тесты являются событиями доставки, без вымышленной ссылки на подписанный журнал. Уведомления об удалении в Telegram и `missing_on_recheck` остаются отдельными типами. Заголовок `X-TgWitness-Signature` — `t=UNIX_SECONDS,v1=HEX_HMAC_SHA256`. Вычислите HMAC над точными байтами `timestamp + "." + raw_request_body`, используя отображаемый секрет в виде байтов UTF-8. Сравнивайте подписи за постоянное время до разбора или обработки тела сообщения. Отклоняйте временные метки, отличающиеся более чем на пять минут от вашего времени. Временная метка обновляется при каждой попытке доставки. Используйте `event_id` в качестве ключа идемпотентности в долговечном хранилище с атомарным уникальным ограничением до возникновения побочных эффектов. Один только действительный подпись не предотвращает повторное воспроизведение недавнего запроса. Храните обработанные идентификаторы как минимум в течение всего окна повторных попыток; храните их дольше, если получатель может повторно обработать сохраненные события. ## Повторные попытки Доставка событий надежно ставится в очередь перед отправкой HTTP-запросов. Используется семантика «по крайней мере один раз» : потеря подтверждения или перезапуск могут привести к повторной отправке события с тем же ID. Предусмотрено восемь попыток с экспоненциальным откатом, начиная с 15 секунд и заканчивая одним часом. Для успешной отправки требуется ответ с кодом 2xx. Исчерпавшие лимит задания оставляют видимую ошибку; доставка не гарантируется после завершения попыток повтора. Очередь вмещает 1 000 отправлений. Когда она заполняется, сканирование событий журнала приостанавливается и возобновляется после появления свободного места. Завершение полного экспорта, которое не может быть поставлено в очередь, вызывает отображение ошибки в очереди. За один проход уведомлений предпринимается до пяти попыток доставки, а последние 100 записей о попытках сохраняются. Удаление адресата также приводит к удалению его ожидающих доставок. ## Пример n8n Импортируйте [пример рабочего процесса](https://github.com/phishdestroy/TgWitness/blob/main/integrations/n8n-tgwitness.json). Он неактивен и не содержит секретных данных или последующих действий. Установите `TGWITNESS_WEBHOOK_SECRET` в среде рабочего процесса n8n, разрешите доступ к этой среде и разрешите использование встроенной функции `crypto` для узла «Code». В примере используется опция raw-body узла «Webhook», проводится проверка подписи и свежести данных, а также подтверждаются проверенные события. Это соответствует [документированной реализации](https://github.com/n8n-io/n8n/blob/master/packages/nodes-base/nodes/Webhook/Webhook.node.ts) узла. Перед добавлением записей или уведомлений в SIEM добавьте надежное хранилище с идемпотентностью, индексированное по ключу `event_id`. Ограничьте редактирование рабочих процессов n8n и хранение журналов выполнения в соответствии с данными, которые вы решили отправить. TgWitness не добавляет входящих команд. --- # Публикация сохранённых сообщений каналов Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/showcase/ Публикуйте сохраненные сообщения из выбранных публичных каналов и подписанные снимки состояния по ссылкам с ограниченным сроком действия и возможностью отзыва. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Публикуйте сохраненные сообщения из выбранных публичных каналов и подписанные снимки состояния по ссылкам с ограниченным сроком действия и возможностью отзыва. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) **«Доступ» → «Публичная витрина»** создаёт отдельную страницу, доступную только для чтения, с использованием существующей системы access-token. Она считывает сохранённые наблюдения установки. Она не запускает сборщик, не входит в Telegram и не получает доступ к каналу для посетителя. ## Опубликовать страницу 1. Сохраните исходный профиль для каждого общедоступного канала, который вы хотите показать. Канал должен иметь общедоступное имя пользователя в своём последнем сохранённом профиле; группы и приватные чаты не подходят. 2. Открытый **доступ → Публичная витрина** (или `/showcase-manage.html`) в качестве администратора. 3. Выберите каналы из не более чем 16 рабочих пространств, введите название общедоступной страницы и укажите срок действия ссылки: 1, 7 или 30 дней. Внутренние метки рабочих пространств не публикуются. Можно включить до 64 каналов. 4. Просмотрите текст выбранных каналов перед публикацией, затем нажмите **«Предварительный просмотр выбранных записей**». В предварительном просмотре используется та же серверная проекция, что и на странице посетителя. 5. Нажмите **«Создать ссылку на демонстрацию**». Скопируйте ссылку, пока она отображается. Откройте её в отдельном окне браузера, чтобы проверить страницу получателя перед рассылкой. Ссылка содержит токен доступа в фрагменте URL. Страница удаляет этот фрагмент перед отправкой запросов к API и заменяет его сессией браузера. Любой, у кого есть эта ссылка, может открыть выбранный материал до истечения срока действия или отзыва. Новые ссылки допускают 100 одновременных сеансов, каждый из которых длится не более одного часа. Существующие средства контроля доступа также могут налагать ограничения по адресам и количеству входов через API grant. Обычный доступ рецензента представляет собой другой режим и по-прежнему включает исходные разрешённые сообщения и файлы. ## Что видят посетители | Видимое | Остаётся приватным | | --- | --- | | Выбранные названия публичных каналов, имена пользователей и даты просмотра профилей | Идентификаторы аккаунтов, внутренние метки рабочих пространств и невыбранные источники | | Захваченный текст и каждое сохраненное изменение | Структурированные идентификаторы отправителей, имена, пользовательские имена, номера телефонов и значения профилей | | Записи об удалении с ранее сохраненным текстом, если таковой имеется | Вложения, аватары, миниатюры, имена файлов и исходные данные | | Маркеры, указывающие, что автор/профиль или вложение были зафиксированы | Метаданные о пересылке и ответах, сетевые маршруты, IP-адреса и учетные данные | | Количество событий по выбранным каналам, текущие переключатели коллекций, интервал проверки работоспособности и интервал контрольных точек | Элементы управления коллекциями и стандартные API для экспорта доказательств | | Подпись отпечатка, контрольная точка журнала и доказательство согласованности | Ключи подписи и сеансы Telegram | **Текст публичных сообщений не анонимизируется автоматически.** Имя, упоминание, номер телефона или ссылка, указанные в сообщении, остаются частью этого текста. `Redacted`применяется к структурированным полям автора/профиля. Проверяйте фактически выбранный контент перед его публикацией, включая сохраненные правки и удаления. Соответствие критериям определяется на основе **последнего сохраненного профиля источника**, а не на основе текущего запроса к Telegram. Если в последующем профиле больше нет имени пользователя публичного канала, новые запросы исключают этот канал. Обновляйте профили источников при изменении настроек общедоступности. У читателей уже могут быть сохранены материалы, которые они получали ранее. Исходные подписанные записи остаются неизменными. Отображаемая проекция подписывается отдельно и содержит хэши, ссылающиеся на исходные записи. Подпись проекции подтверждает подлинность отображаемого сообщения; это не подпись исходного события над отредактированными байтами. ## Проверка подписей и непрерывности Разверните **«Fingerprint & signed checkpoint»** и загрузите снимок. После обновления страницы загрузка включает предыдущий снимок браузера и доказательство согласованности по алгоритму Меркла между границами их журналов. Автоматическое обновление происходит раз в минуту, пока страница видна и отображает первую страницу наблюдений. После установки TgWitness проверьте загруженный файл в автономном режиме: ``` python -m tgwitness.showcase_verify showcase.json --fingerprint TRUSTED_COLLECTOR_SHA256 ``` Отпечаток должен поступать из отдельного доверенного источника. Чтобы сравнить с снимком, который вы сохранили самостоятельно, используйте `--previous earlier.json`; это переопределит предыдущий снимок, содержащийся в загруженном файле. Текущее доказательство должно начинаться с этой сохраненной границы. Аутентифицированные клиенты могут запросить это доказательство с помощью `GET /api/showcase/{workspace_id}?challenge=<32-hex-random>&from_count=`. Более короткий журнал возвращает HTTP 409 вместо того, чтобы незаметно сбросить границу. Подписанная контрольная точка фиксируется во **всём журнале коллектора**, включая количество записей и непрозрачный хеш начала. Отображаемое количество сообщений относится только к выбранным публичным каналам. На странице никогда не отображается содержимое других журналов. Это количество событий, а не количество уникальных сообщений. Настройки описывают текущую конфигурацию, а не каждый предыдущий интервал записи. Подпись и проверка целостности позволяют обнаруживать изменения относительно сохраненной границы. Они не обеспечивают независимый пересчёт подписанных счетчиков, не подтверждают происхождение из Telegram, не демонстрируют непрерывность записи и не заменяют независимого свидетеля. Для такой проверки используйте [верификатор доказательств](https://github.com/phishdestroy/TgWitness/blob/main/docs/TRUST.md), [независимого свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/) и [проверенную запись в масштабе](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/). Синтетические установки явно помечены как «синтетические». ## Отменить или разместить страницу Используйте **функцию «Отменить»** в менеджере витрин или в разделе **«Доступ**», чтобы закрыть ссылку и завершить все сеансы доступа. Посетитель очищает отображаемые записи, когда запрос обнаруживает, что доступ завершился. Срок действия и права доступа проверяются при каждом запросе. Права доступа к витринам нельзя преобразовать в обычный доступ к панели на месте; для смены режима необходимо создать новое право доступа. Страница предоставляется через существующий HTTPS-адрес установки. Публикация ссылки не приводит к открытию нового порта, созданию туннеля или изменению DNS. HTML-код и API остаются на установке пользователя. Посетитель демонстрационной версии не может использовать обычные API для сообщений, профилей, медиафайлов, экспорта или управления при таком доступе. --- # Проверка доказательств: SHA-256 и Ed25519 Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/ Объяснение принципов работы цепочки хешей, подписей, контрольных точек и свидетелей с указанием точных формул, используемых верификатором. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Объяснение принципов работы цепочки хешей, подписей, контрольных точек и свидетелей с указанием точных формул, используемых верификатором. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Доказательства и верификация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) TgWitness сохраняет данные, зафиксированные учетной записью-сборщиком, объединяет эти данные в подписанный журнал и позволяет другому лицу проверить экспортированные данные с помощью доверенного ключа и ранее сохраненной контрольной точки. На [локальном веб-сайте документации](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/PUBLISHING.md#preview-the-website-locally) добавлены интерактивные примеры в разделе `/docs/concepts/`, инструмент для анализа решений по контрольным точкам в разделе `/docs/witness/`, а также пошаговые инструкции по работе с [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/), [оформлению отчетов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) и [передаче выдержек](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#handover-extract). Все примеры сообщений, количественные показатели и задержки являются вымышленными. Хэши в тестовой среде цепочки рассчитываются с помощью алгоритма SHA-256 в браузере. Никакие данные не отправляются в Telegram. **На этой странице** - [Сообщение изменяется; наблюдения накапливаются](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#a-message-changes-observations-accumulate) - [Что охватывает хеш](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#what-a-hash-covers) - [Что добавляет более ранний контрольный пункт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#what-an-earlier-checkpoint-adds) - [Куда относится свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#where-a-witness-belongs) - [Проверка доставки по отношению к известным действиям](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#test-delivery-against-known-actions) - [Выберите рабочий процесс](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/#pick-a-workflow) ## Сообщение изменяется; наблюдения накапливаются Диаграмма последовательности · Telegram → Коллектор: Новое сообщение: Встречаемся в 10:00; Коллектор → Подписанный журнал: Добавить сообщение.new; Telegram → Коллектор: Изменение: Встреча в 11:00; Коллектор → Подписанный журнал: Добавить сообщение.отредактировано; Telegram → Коллектор: Уведомление об удалении; Коллектор → Подписанный журнал: Добавить сообщение.deleted; Примечание относительно Подписанный журнал: Сохраняются данные об оригинале, редактировании и удалении · Telegram · Коллектор · Подписанный журнал · Новое сообщение: Встречаемся в 10:00 · Добавить сообщение.new · Изменение: Встреча в 11:00 · Добавить сообщение.отредактировано · Уведомление об удалении · Добавить сообщение.deleted · Сохраняются данные об оригинале, редактировании иудалении **Схема в текстовом формате** 1. Telegram → Коллектор: Новое сообщение: Встречаемся в 10:00 2. Коллектор → Подписанный журнал: Добавить сообщение.new 3. Telegram → Коллектор: Изменение: Встреча в 11:00 4. Коллектор → Подписанный журнал: Добавить сообщение.отредактировано 5. Telegram → Коллектор: Уведомление об удалении 6. Коллектор → Подписанный журнал: Добавить сообщение.deleted 7. Примечание относительно Подписанный журнал: Сохраняются данные об оригинале, редактировании и удалении В данной упрощённой последовательности предполагается, что Telegram доставил каждое обновление и что выбранный аккаунт мог его увидеть. Операционные события также фиксируются в журнале. Уведомление об удалении не содержит информации об авторе удаления или точном времени удаления. Повторные доставки считаются отдельными наблюдениями; в журнале не происходит подавления дубликатов. ## Что включает в себя хеш ![Наблюдение, кодирование, хеширование и подписание: каждое новое событие содержит хеш предыдущего события.](https://phishdestroy.github.io/TgWitness/assets/evidence-chain-animated.svg) Прочитайте формулу «изнутри наружу»: **C** преобразует девять полей в точные байты; **SHA-256** вычисляет их дайджест; **hex** — это формат хранения данного дайджеста. Предыдущий хэш уже находится внутри события. **unhex** преобразует сохраненный хэш обратно в 32 байта, которые подписывает алгоритм Ed25519. [Схема статической цепочки](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-chain-static.svg) Пусть C(ei) — это канонический JSON-файл в кодировке UTF-8, содержащий девять полей событий. Первая запись `previous_hash` состоит из 64 нулей. Каждая последующая запись содержит шестнадцатеричный хеш предыдущей записи: hi = hex(SHA256(C(ei))) σi = Ed25519.Sign(sk,unhex(hi)) Подпись охватывает 32 исходных байта дайджеста. В хеш входят ровно следующие поля: `seq`, `observed_at`, `source_at`, `kind`, `chat_id`, `message_id`, `actor_id`, `payload` и `previous_hash`. Ключи объектов сортируются; пробельные разделители и ASCII-экранирование не используются; NaN и бесконечность отклоняются. См. [точные правила кодирования](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#event-canonicalization). Блок-схема · 64 нулевых символа → Запись 1 / хеш h1; Запись 1 / хеш h1 → Запись 2 содержит h1 / хэш h2; Запись 2 содержит h1 / хэш h2 → Запись 3 содержит теги h2 и h3; Запись 3 содержит теги h2 и h3 → Контрольная точка с подписью: счет 3, заголовок h3 (сохранить в другом месте) · 64 нулевых символа · Запись 1 / хеш h1 · Запись 2 содержит h1 /хэш h2 · Запись 3 содержит тегиh2 и h3 · Контрольная точка сподписью: счет 3,заголовок h3 · сохранить в другом месте **Схема в текстовом формате** 1. 64 нулевых символа → Запись 1 / хеш h1 2. Запись 1 / хеш h1 → Запись 2 содержит h1 / хэш h2 3. Запись 2 содержит h1 / хэш h2 → Запись 3 содержит теги h2 и h3 4. Запись 3 содержит теги h2 и h3 → Контрольная точка с подписью: счет 3, заголовок h3 (сохранить в другом месте) | Перейти к предоставленному журналу | Что позволяет его распознать | | --- | --- | | Измените запись № 2, сохранив при этом её хэш | Пересчитанный хеш события отличается; его подпись больше не охватывает измененное событие | | Восстановление измененной записи и всех последующих хэшей | Исходные подписи не проходят проверку; сохраненная контрольная точка на затронутой границе также не совпадает | | Удалите конец фразы, но сохраните оставшийся префикс без изменений | Ранее сохраненная контрольная точка, расположенная за пределами указанного префикса, указывает на то, что экспортный файл имеет недостаточный объем | | Повторная подпись замещающего журнала с использованием другого ключа | Отпечаток ключа, прошедшего отдельную проверку на доверие, отклоняет попытку подмены идентификационных данных | ![Изменение значения сохраненного поля приводит к изменению его дайджеста; повторное вычисление хэшей не восстанавливает исходные подписи.](https://phishdestroy.github.io/TgWitness/assets/evidence-tamper-animated.svg) **Попробуйте применить эту логику к записи № 2:** замените `Meet at 11:00` на `Meet at 12:00` в сохраненном событии. Пересчитанный хеш больше не совпадает. Пересчет последующей цепочки позволяет восстановить её звенья, но не может заставить исходные подписи покрывать новые дайджесты. Напротив, зафиксированное редактирование в Telegram становится новой записью в журнале. [Схема статических изменений](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-tamper-static.svg) Наличие одних лишь хеш-ссылок не препятствует пересчёту цепочки замен. Доверие основывается на проверке подписей с помощью независимого доверенного ключа и сравнении с эталонными данными, хранящимися за пределами коллектора. ## Что добавляет предыдущий контрольный пункт ![Сохраните счетчик 3 и заголовок h3; последующий экспорт 4 записей проверяется в позиции 3.](https://phishdestroy.github.io/TgWitness/assets/evidence-checkpoint-animated.svg) **Контрольная точка остаётся неизменной, в то время как журнал пополняется.** Если в контрольной точке указано: «3 записи, заголовок h3», экспорт из четырёх записей может пройти проверку благодаря совпадению с h3 на третьей позиции. Его новейший заголовок — h4, который, как и ожидается, будет отличаться. Экспорт, содержащий только две записи, не пройдёт проверку. [Схема статических контрольных точек](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-checkpoint-static.svg) После проверки подписи контрольной точки необходимо: Nexport ≥ Ncheckpoint and hexport[Ncheckpoint] = Hcheckpoint Экспорт данных может выходить за пределы контрольной точки. Он должен совпадать на сохраненной границе. Настоящий верификатор также проверяет последовательность каждого события, предыдущую ссылку, хеш и подпись. Сравнение только конечной сохраненной заголовки приведёт к пропуску измененной внутренней записи, хеш которой не был обновлён. ## Где находится «Witness» Блок-схема · Сборщик / сессия учетной записи / ключ A → Конечная точка контрольной точки, доступная только для чтения; Witness / закреплённый ключ сборщика / собственный ключ B → Отдельный подписанный журнал свидетельств; Witness / закреплённый ключ сборщика / собственный ключ B → Конечная точка контрольной точки, доступная только для чтения (Запросить проверку); Конечная точка контрольной точки, доступная только для чтения → Witness / закреплённый ключ сборщика / собственный ключ B (Подписанный ответ); Witness / закреплённый ключ сборщика / собственный ключ B → Канал с подписанными сообщениями TGW1 (API бота / собственный токен) · Хост A · Хост B · Сборщик / сессия учетнойзаписи / ключ A · Конечная точка контрольнойточки, доступная толькодля чтения · Witness / закреплённыйключ сборщика /собственный ключ B · Отдельный подписанныйжурнал свидетельств · Канал с подписаннымисообщениями TGW1 · Запросить проверку · Подписанный ответ · API бота / собственный токен **Схема в текстовом формате** 1. Сборщик / сессия учетной записи / ключ A → Конечная точка контрольной точки, доступная только для чтения 2. Witness / закреплённый ключ сборщика / собственный ключ B → Отдельный подписанный журнал свидетельств 3. Witness / закреплённый ключ сборщика / собственный ключ B → Конечная точка контрольной точки, доступная только для чтения (Запросить проверку) 4. Конечная точка контрольной точки, доступная только для чтения → Witness / закреплённый ключ сборщика / собственный ключ B (Подписанный ответ) 5. Witness / закреплённый ключ сборщика / собственный ключ B → Канал с подписанными сообщениями TGW1 (API бота / собственный токен) Свидетель фиксирует откат записей, наличие другого заголовка при том же счётчике, смену ключей, недопустимые ответы и отсутствующие ответы. Увеличение значения счётчика само по себе не доказывает, что все более ранние записи остались неизменными; сравните экспорт с сохраненными контрольными точками. Размещение свидетеля на другом хосте позволяет избежать последствий сбоев на хосте сборщика данных; наличие отдельного оператора обеспечивает дополнительную независимость. Свидетель подтверждает состояние журнала, указанное сборщиком. Используйте тест контролируемой доставки, чтобы определить, какие действия в Telegram поступили на аккаунт сборщика. См. [настройку свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/). ## Проверка доставки с учётом известных действий Используйте контрольную группу, отдельные учетные записи для сбора данных и новый маркер. Направляйте, редактируйте и удаляйте сообщения целенаправленно, проверяя запись на каждом этапе. Определите ожидаемые действия и предельный срок перед проверкой результатов. R = |observed∩expected| / |expected| Δ t = treceipt - taction Учитываются только ожидаемые действия; дубликаты подтверждений не увеличивают числитель. Знаменатель должен быть не равен нулю. Отсутствующее подтверждение не имеет измеренной задержки. Укажите погрешность времени; используйте собственное контролируемое время действия удаления, поскольку Telegram не предоставляет точное время удаления. Результат, например, 5/6 (83,3 %), описывает тестовые действия, а не полноту всего трафика Telegram. ## Выберите рабочий процесс [Полный пример расследования](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) прослеживает инцидент в канале, группе, боте и личном чате: 1. На выделенном аккаунте для сбора данных включите режим расследования всего аккаунта и составьте перечень доступных чатов. Для основного аккаунта используйте выбранные чаты или папку. 2. Получайте моментальные снимки журнала, полную историю каждого чата и сохраненные вложения. 3. Отражайте оперативные изменения и любые целенаправленные действия с панелями вместе с соответствующими подтверждениями. 4. Отслеживайте цифровые идентификаторы отправителей, связи между ответами, повторяющиеся адресаты и хэши файлов посредством ссылок на записи и профилей пользователей. 5. Добавляйте примечания со ссылками на источники и коллекции в Case Board. Восстанавливайте хронологию переписки между чатами с указанием как временных меток, так и явных пробелов. 6. Сравнивайте рабочие пространства других учетных записей, сохраняя при этом их происхождение и ключи отдельно. 7. Соберите и проверьте подписанные журналы, профили и экспортированные данные истории вместе с примечаниями по делу. Руководство на сайте в разделе `/docs/cases/` содержит интерактивную карту дела и варианты решений для споров с ботами, удаленных сообщений и участников, сменивших имена. Case Board хранит заметки и коллекции в рамках рабочего пространства. Групповой экспорт собирает отдельные пакеты рабочих пространств; сопоставление данных между рабочими пространствами и составление объединенной временной шкалы остаются задачей аналитиков. [Завершённая валидация и оставшиеся задачи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) · [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#investigation-handoff) · [Начните с одной учетной записи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/quickstart/) --- # Форматы отчётов Telegram и проверка подписанного PDF Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/ Фильтры отчетов, восемь шаблонов дизайна, предустановленные настройки содержания, сохраненная история изменений и оценка, включённая в подписанные экспортные файлы. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Фильтры отчетов, восемь шаблонов дизайна, предустановленные настройки содержания, сохраненная история изменений и оценка, включённая в подписанные экспортные файлы. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ![Расследование](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) Превратите выбранные наблюдения в удобочитаемый отчёт по делу: его постановку, объём, сохраненные изменения, диаграммы, выводы и ссылки на источники. Каждый отчёт предоставляет получателю возможность проверить предоставленный материал и оценить полноту сбора данных. Раздел **«Основа доверия и ограничения»** появляется в отчетах журнала, передачи, чата, учетной записи и обмена данными. PDF-файлы журнала и передачи используют ту же оценку, что и их подписанный файл `report.json`. ZIP-манифесты содержат `case_assessment` в подписанном манифесте. Эта оценка передается вместе с экспортированными материалами. Исходные наблюдения сохраняют свои существующие подписи. ## Форматы документов и порядок чтения ### Студия отчетов Откройте **«Экспорт» → «Настройка и предварительный просмотр**». Пройдите по пути **«Данные» → «Дизайн и содержание» → «Предварительный просмотр**»: 1. Используйте всю рабочую область или выберите чаты, авторов, включая даты наблюдения в формате UTC и типы событий. Загрузите каталог для поиска чатов и авторов или введите их Telegram-идентификаторы. Фильтры авторов сопоставляются с записанными идентификаторами отправителей; уведомление об удалении без указания отправителя не соответствует фильтру авторов. 2. Выберите макет страницы, затем выберите диаграммы, метки участников, стенограмму и ваши письменные выводы. При смене макета эти настройки сохраняются. 3. Создайте предварительный просмотр. В нём отображаются фактические показатели, активность, участники, примеры записей, сохраненные изменения и диапазоны номеров отсутствующих сообщений. Изменение выбора приводит к тому, что предварительный просмотр становится устаревшим. Сохраните перед загрузкой HTML, подписанного PDF, подписанного JSON или ZIP-архива с доказательствами. В предварительном просмотре данных учитывается полный стабильный префикс журнала, а не начальная выборка. Ограничиваются только отображаемые образцы строк и длинные списки; количество пропущенных элементов указывается. При последующем экспорте создаётся новый стабильный снимок, поэтому продолжающийся сбор данных может привести к увеличению этих цифр. Объём, количество и идентификаторы источников включаются в подписанный отчёт. Открытие или предварительный просмотр формы не приводит к её сохранению. **Руководство по юрисдикции.** В разделе Сведения о документе откройте **Руководство по юрисдикции · опционально** , чтобы выбрать юрисдикцию и гражданско-коммерческую или уголовную процедуру. В приложении приведены правовые основания, ссылки на источники, примечания по подготовке и статус исследования. Резюме на местном языке и пояснения по мерам защиты данных при сборе являются необязательными. По умолчанию юрисдикция не выбрана. Эти настройки относятся к рабочей области и исключаются из сохраненных конфигураций макета и неявных настроек по умолчанию для совместного доступа и копирования. См. [Настройки по умолчанию, Поддерживаемые отчеты и Ограничения исследования](https://github.com/phishdestroy/TgWitness/blob/main/docs/JURISDICTION_GUIDANCE.md) . **Выберите версию для получателя.** В диаграммах и стенограмме используются выбранные записи. Целостность, сохранность и полнота описывают полный журнал источников. Архив с доказательствами в формате ZIP содержит исходные записи и вложения. Используйте [упрощенную процедуру передачи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#handover-extract) , если получателю необходимо предоставить только выбранные, разрешенные данные. ### Прочитайте изменения, удаления и отсутствующие идентификаторы При редактировании отображается сохраненный текст **«До»** и **«После»**, а измененные слова выделяются. При удалении отображается последняя версия, сохраненная до появления уведомления. Если более раннее содержимое не было сохранено, в отчете об этом указывается. При выборе только редактирований или удалений предыдущие версии остаются доступными в виде явно обозначенного контекста вне фильтров. Несвязанные сообщения не добавляются в эти истории. **Неотслеженные идентификаторы сообщений** — это пробелы между известными номерами в выбранных чатах и диапазоном идентификаторов, полученных на основе даты. Каждая известная исходная запись проверяется перед тем, как объявить номер неотслеженным: отфильтровывание другого автора, типа события или даты не может привести к появлению ложного пробела. Смежные сохраненные сообщения помечаются как контекст. Отсутствующий номер не доказывает, что сообщение существовало или было удалено; уведомления об удалении и неудачные повторные проверки остаются отдельными типами событий. ### Выберите дизайн Доступно восемь макетов страниц для отчетов в формате HTML (для журналов и отдельных чатов) и подписанных PDF-файлов. Они используют одни и те же записи и расчеты, но отличаются обложками, типографикой, заголовками разделов, таблицами и интервалами. | Дизайн | Стиль изложения | | --- | --- | | Классический | Традиционное досье с тёмной обложкой и пронумерованными разделами. | | Редакционные рекомендации | Титульный лист в рамке с засечками, широкие поля и узкая боковая полоса с указанием глав. | | Брифинг | Компактная обложка с темно-синим корешком, краткими заголовками и плотно расположенными таблицами. | | Аналитика | Обложка в стиле анкеты, модульные таблицы и рисунки с моноширинным шрифтом. | | Технические аспекты | Регистр с линовкой, пронумерованная справочная шкала и точные таблицы сравнения. | | Обзор | Панорамная обложка, просторное оформление и выделенные наглядные диаграммы. | | Серия статей | Навигационная панель разделов и сгруппированные главы для результатов, объёма работ, изменений и журнала наблюдений. | | Реестр и маржа | Пронумерованные главы с широкими полями, точные таблицы и отдельная стенограмма сообщений. | Дизайн сохраняется для каждой рабочей области и фиксируется в подписанном манифесте экспорта. HTML работает в автономном режиме, поддерживает светлую и тёмную темы и адаптируется к узким экранам и языкам с направлением письма справа налево. Встроенные PDF-файлы используют входящие в комплект шрифты; дизайн «Editorial» включает шрифт Noto Serif, распространяемый по лицензии SIL Open Font License. Серии чтения, а также «Ledger» и поля применяются также к обзорам аккаунтов, чатам аккаунтов и копиям для обмена. Для PDF-файлов на китайском, японском и корейском языках дополнительно требуется подходящий шрифт на сервере, например, Noto Sans CJK, установленный в системе или размещённый в папке `TGWITNESS_FONT_DIR`. Если он недоступен, в ZIP-архиве сохраняются отчёты в форматах HTML и JSON. Эти два макета включают удобный для чтения журнал, не требующий JavaScript. Для больших экспортов этот вид содержит до 500 полных записей в пределах лимита ввода 8 MiB; в отчете указан лимит и приведены ссылки на полную версию просмотрщика и исходные записи. Каталог учетных записей и индекс взаимосвязей описывают именно этот образец для чтения, а не всех участников. Диаграммы полного журнала сохраняют свой отдельно указанный объем. ### Выберите содержание | Предварительно заданное содержание | Включено по умолчанию | | --- | --- | | Досье дела | Действия, время наблюдения, участники, чаты и стенограмма записи. | | Брифинг | Обзор активности без рейтинга участников и стенограммы. | | Обзор деятельности | Действия, время наблюдения, участники, чаты и их состав с указанием ссылок на источники и точных цифр. | | Индивидуальный отчет | Ваша собственная комбинация диаграмм, стенограмм и предварительных просмотров. | При изменении предустановки сохраняются ваш макет, детали дела и письменный анализ. Проверки целостности, охват, ограничения и инструкции по верификации остаются в каждом макете. Исходные записи в ZIP-файле остаются неизменными, когда диаграмма или стенограмма скрыты. Дополнительные **«Примечания по экспертизе**» содержат вопрос, метод, результаты и вывод, составленные автором отчета. В результатах следует указывать номера исходных файлов и записей. Подпись сохраняет эти авторские заявления вместе с отчетом; исходные наблюдения и интерпретация автора остаются идентифицируемыми. При упрощённой передаче дела эти конфиденциальные заметки и полные диаграммы из журнала исключаются. Выбор диаграмм и методов обследования применяется к отчётам из журнала. Выберите активность за определенный период, тепловую карту по дням недели и часам по UTC, рейтинги участников, рейтинги чатов и состав записей. Выберите от 5 до 30 групп по рейтингу и нейтральные псевдонимы участников или идентификаторы учетных записей. Неизвестные отправители и остальные участники отображаются в отдельных строках. Псевдонимы влияют только на диаграммы; исходные записи по-прежнему содержат их идентификационные данные. Предварительный просмотр дизайна обновляется на основе несохраненного черновика с использованием обложки, результатов экспертизы и компонентов диаграмм, ограниченных результатами, соответствующими первым 50 000 записям источника. Предварительный просмотр данных ниже рассчитывает полный набор данных. Он явно не подписан и не сохраняет изменения. Кнопки «Обложка» и «Диаграммы» переключают его разделы. Это не полный предварительный просмотр PDF. **Сохранение настроек отчёта** применяет выбранные параметры к будущим экспортам; существующие подписанные файлы неизменяемы. PDF использует выбранную обложку, типографику, макет глав и те же выбранные агрегаты, что и HTML и подписанный JSON. Оценка достоверности, ограничения охвата и инструкции по проверке остаются в силе. Скрытие графиков или читаемой стенограммы не удаляет строки авторитетных источников из ZIP-архива. Отключенные серии графиков опускаются из аналитического JSON-файла; используйте минимизированный экспорт, чтобы ограничить раскрытие исходных записей. Фильтры выбора данных применяются к отчетам журнала; экспорт данных учетной записи и обмена сохраняет свой собственный объем сбора и раскрытия информации. Общие настройки дизайна и диаграмм фиксируются в новых экспортах чатов и учетных записей, а также в предварительных просмотрах обмена данными. Языковые настройки и настройки конфиденциальности учетной записи и обмена данными остаются независимыми; личные заметки по делу и заметки по экспертизе не копируются в эти экспорты. Отчеты по учетной записи и обмену данными остаются в формате HTML, защищенном подписанным манифестом архива. Журнал, сведенная к минимуму передача журнала и наборы для одного чата также предоставляют подписанные PDF-файлы. ### Что отражают диаграммы Журнал активности и тепловые карты учитывают новые, исторические, восстановленные, отредактированные, удаленные и отсутствующие при повторной проверке **наблюдения**, по времени наблюдения коллектора в формате UTC. Сигналы и подтверждения получения вложений исключаются. В рейтингах участников учитываются только новые, исторические и восстановленные наблюдения за сообщениями: отправитель не считается редактором или лицом, удалившим сообщение. Повторные наблюдения могут описывать одно и то же сообщение в Telegram. Аналитика журналов сохраняет подсчёты по типам, ссылки на первую/последнюю запись и SHA-256 исходного файла `events.jsonl`. Цифры включают точные значения в форматах HTML и PDF. Ежедневные интервалы переключаются на месяцы после 366 записанных дней; графики объединяют их в не более чем 36 интервалов одинаковой ширины. Более 100 000 уникальных идентификаторов или 1 200 месяцев приводят к недоступности соответствующего графика, в то время как точные общие подсчёты остаются доступными. Диаграммы моментальных снимков и совместного использования учетных записей учитывают только включенные строки сообщений, не относящихся к сервису, с использованием времени отправки этих сообщений. Агрегированные данные по совместному использованию рассчитываются после редактирования и фильтрации. В этих диаграммах используется не более 90 интервалов даты в формате UTC одинаковой ширины и сохраняется до 10 000 значений группировки; превышение этого количества явно указывается и согласовывается. Последний интервал может быть короче. Неизвестные или приблизительные даты не включаются в временные диаграммы. Пустой интервал означает отсутствие включённых наблюдений; для выявления пробелов обратитесь к информации об охвате. Эти диаграммы описывают сохранённую активность. Неизвестные отправители остаются отдельной категорией, и о каждой проверке составляется отдельный отчёт. Если файл `analytics.json` включен, он защищен подписанными хешами файлов архива. Журнал `report.json` содержит те же выбранные агрегаты. Проверка подписи обнаруживает измененные байты. Чтобы проверить цифры, пересчитайте агрегаты журнала с помощью `report_analytics.Analytics` и `selected`, либо агрегаты моментальных снимков с помощью `snapshot_analytics.collect` и `project`. ### Индикаторы аномалий **Предварительный просмотр.** В отчёты о доказательствах добавляется раздел **Индикаторы аномалий**, рассчитанный зарегистрированными процессорами (`tgwitness/metrics/`, по одному файлу на каждый показатель). В отчёте указывается каждый процессор, на котором выполнялся расчёт, с указанием его версии, а под таблицей приводится описание используемого метода, чтобы расчёт можно было повторить из `events.jsonl` с помощью `tgwitness.metrics.run`. | Процессор | Что здесь показано | | --- | --- | | `first_time_posters_over_time`, версия 1 | Количество новых пользователей и сообщений за день по UTC. Для установки флага требуется не менее пяти новых пользователей и количество сообщений, в три раза превышающее их медиану, при этом объем сообщений не должен превышать 1.5-кратную медиану. Базовые данные включают не менее семи дней наблюдений в течение предыдущих 14 календарных дней после семидневного периода разогрева. | | `service_vs_message_ratio`, версия 1 | Отдельные номера сохраненных сообщений для каждого чата и доля, используемая служебными сообщениями. Здесь описывается система нумерации; не дается объяснение конкретного отсутствующего номера. | | `join_leave_per_month`, версия 1 | Присоединения, уходы и удаления или баны в месяц, по одному на человека, чат, изменение и день. | | `pinned_per_month`, версия 1 | Закрепленные служебные сообщения, открепленные уведомления, а также закрепленные сообщения, добавленные или удаленные между моментальными снимками состояния чата, в расчете на месяц. | **Параметры → Показатели отчёта** выбирает процессоры и количество отображаемых строк, в том числе в отфильтрованных отчётах. Ежедневные и ежемесячные таблицы показывают последние строки, таблицы доли сервиса ранжируют чаты по количеству сохраненных сообщений. Итоговые значения охватывают каждую строку. На основе выгруженного исходного кода создайте все восемь макетов, перечисленных выше, на примере одного и того же вымышленного журнала: ``` python tools/build_report_styles.py --output test-results/report-styles ``` Откройте полученный файл `index.html`, чтобы сравнить полные HTML-отчеты, подписанные PDF-файлы и архивы ZIP. Каждый макет использует один и тот же исходный журнал. Используйте новый каталог вывода для каждого запуска, чтобы сохранить ранее подписанные примеры. ![Вымышленное HTML-досье](https://phishdestroy.github.io/TgWitness/assets/dossier-en.png) HTML-страница открывается обложкой дела и ключевыми показателями. Пронумерованная карта доказательств содержит ссылки на каждый вывод, подтверждающие факты, ограничения и результаты независимой экспертизы. Возможность поиска по записям и стабильные ссылки на записи остаются доступными в автономном просмотрщике. Дизайн адаптируется к узким экранам, различным темам и браузерам без поддержки JavaScript. Подписанный PDF-файл имеет специальную обложку формата A4, ссылку на отчет и QR-код, краткое содержание, карту доказательств, пронумерованные выводы и закладки в документе. Заголовки и нижние колонтитулы страниц идентифицируют отчет. QR-код идентифицирует материал; он не является независимым результатом проверки. Распечатки из браузера не входят в этот криптографически подписанный PDF-файл. На временной шкале наблюдений записанные периоды наблюдения и перерывы расположены на одной оси UTC. Пустое пространство не означает, что данные отсутствуют; в подробных таблицах сохранены точные интервалы. Архив ZIP содержит отчеты в читаемом виде, подписанные файлы JSON, исходные записи и инструкции по проверке. Создайте новое, вымышленное досье на английском, русском и немецком языках с установленной средой разработки: ``` python tools/build_dossier_example.py --output test-results/my-new-dossier ``` Каждый языковой каталог содержит файлы `report.html`, `report.pdf`, `report.json` и `dossier.zip`. Существующие каталоги с образцами никогда не перезаписываются. Для создания отчета не используются ни учетная запись Telegram, ни внешний сервис временных меток, ни сетевое соединение. ![Первые три страницы вымышленного подписанного PDF-файла](https://phishdestroy.github.io/TgWitness/assets/dossier-pdf.png) ## Изучение конкретного дела Для журнала, содержащего 1 200 записей с проверенной временной меткой в записи № 1 000, отчет выявляет 200 более поздних записей, выходящих за пределы диапазона этой временной метки. Это является верхней границей существования контрольной точки, а не доказательством времени отправки каждого сообщения . Если три других файла с временными метками не проходят проверку или не могут быть проверены, они учитываются отдельно и не могут служить основанием для положительного заключения. Пригодная для использования временная метка должна удовлетворять всем следующим проверкам: её отпечаток совпадает с контрольной точкой, её подпись ведёт к доверенному корню TSA на момент простановки метки, а подпись, ключ, счётчик и заголовок контрольной точки точно соответствуют префиксу журнала. Простого анализа временной метки или наличия квитанции OTS недостаточно. Читатель должен самостоятельно выбрать доверенный корневой сертификат TSA и повторить проверку. OTS требует собственной проверки подтверждения Bitcoin. | Статус отчета | Значение | | --- | --- | | Проверено при экспорте | Экспортер выполнил указанную проверку; по-прежнему требуется независимое повторение. | | Записано; требуется проверка | Записывается исходное наблюдение или заявление оператора; это не является независимым подтверждением. | | Не включено в данный текст | В тексте нет подтверждающих доказательств данного утверждения. В нём не говорится, что таких доказательств нет в других источниках. | | Не проверено независимо | Отчет не содержит результатов независимой проверки. | | Неполная или недоступная информация | Материал или необходимая проверка отсутствуют, являются неполными или завершились неудачно. | Проверяйте каждую проверку отдельно, сопоставляя её с зафиксированным охватом сбора данных. ## Что необходимо сохранить в конфигурации с высоким уровнем безопасности 1. Прежде чем доверять сбору данных, сохраните отпечаток ключа сборщика через отдельный доверенный канал. Сравните этот эталон с ключом подписи экспорта. 2. Сохраните контрольные точки с независимыми временными метками и, если таковой используется, журнал свидетелей, находящийся вне административного контроля сборщика. Сравните их с экспортированным журналом, чтобы проверить его пределы в более ранний период. 3. Укажите объем сбора записей, пробелы, фильтры, ограничения и изменения в процессе сбора. Объясните отсутствующие периоды, имеющие отношение к фактическому заявлению, четко разграничивая неотслеженные идентификаторы сообщений, уведомления об удалении и неудачные повторные проверки. 4. Сохраните исходные ZIP-архивы и их хэши. Зафиксируйте каждого владельца, передачу, дату и цель. Сохраните при этом приписываемые оператору заявления и примечания по делу. 5. В случае конфиденциальных виртуальных машин необходимо сохранить и независимо проверить цитату, запрос, цепочку сертификатов Intel, измерения, точный источник и условия обращения с ключами. Результат проверки аттестации следует хранить вместе с проверенными артефактами. См. раздел «[Область верификации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope)» для ознакомления с проверками получения данных, целостности архива, времени и охвата сбора данных в каждом режиме. ## Проверка получателем Используйте проверенную установку TgWitness и независимо полученный отпечаток: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --tsa-ca tsa-root.pem python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --witness witness.zip --witness-fingerprint WITNESS_SHA256 --require-witness python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --check-drand ``` ZIP-архив с данными свидетеля должен поступать из независимого доверенного источника; сохраните также его ключ и информацию о происхождении. Сохраните команды, версию инструмента, результаты, проверенные хэши входных данных и нерешенные вопросы. Проверка маяка — это отдельная онлайн-проверка; программа для формирования отчетов никогда не связывается со службой исключительно для отображения отчета. В случае спора по конкретному сообщению укажите ссылку на архив, авторитетный файл и ссылку на запись, а затем опишите соответствующий временной диапазон, пробелы в охвате, выборку и подтверждающие материалы. В случае копии для обмена также проверьте зафиксированное преобразование и его ссылки на исходный архив. Фильтры конфиденциальности и сопоставления идентификаторов не подлежат публичной оценке. Проверка подписанного PDF-файла выявляет изменения в охватываемых байтах. Сохраняйте исходный цифровой файл и результат проверки вместе со скриншотами или распечатанными копиями для ознакомления. --- # Экспорт аккаунта Telegram в подписанный архив Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/ Экспорт того, что аккаунт может прочитать в данный момент: область действия, возобновляемые задания, подписанный архив и сжатые копии для обмена. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Экспорт того, что аккаунт может прочитать в данный момент: область действия, возобновляемые задания, подписанный архив и сжатые копии для обмена. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Доказательства и верификация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) Экспорт аккаунта резервирует его исключительно для своей задачи. Перед запуском или возобновлением явно приостановите мониторинг или другой сбор данных: приложение никогда не останавливает их автоматически. Как администратор установки выберите **«Начать здесь» → «Экспортировать мою учётную запись**» или **«Экспорт» → «Учётная запись Telegram» → «Настроить экспорт учётной записи**». При необходимости войдите в систему, проверьте объем данных и явно запустите экспорт. Непрерывное наблюдение не требуется. **«Сохраненные наблюдения»** — это отдельный экспорт существующего журнала; его ZIP включает все источники, независимо от фильтров журнала. Каждая рабочая область имеет свои собственные задания, идентификатор подписи и хранилище. Предоставленный доступ к панели, включая неограниченное право на обычный экспорт, не позволяет открывать эти маршруты, относящиеся ко всей учетной записи. Фильтры по отправителю и тексту раскрываются в разделе **«Фильтр по отправителю или тексту сообщения**». **Раздел «Данные аккаунта и способ подключения**» содержит дополнительные категории аккаунтов и выбор между Takeout и обычной сессией; в его сводке отображаются активные настройки даже в закрытом состоянии. При закрытии этих разделов их настройки сохраняются. Черновики экспорта и отчетов остаются в текущей сессии панели при смене представлений; они не сохраняются при перезагрузке браузера. Доступ к существующим заданиям сохраняется при выборе любого из вариантов экспорта. Этот рабочий процесс экспортирует данные, доступные в данный момент для подключённой учётной записи. По умолчанию используется [Telegram Takeout](https://core.telegram.org/api/takeout); это не является резервной копией недоступных или удалённых данных Telegram. Секретные чаты, недоступная история и более ранние правки не восстанавливаются. Telegram может установить период ожидания перед запуском Takeout. Панель отображает это ожидание; она не переключает транспортный протокол незаметно. Явная опция regular-API имеет другой охват и записывает неподдерживаемые категории. Takeout — это официальный API экспорта, который также используется Telegram Desktop. TgWitness может записывать JSON, совместимый с Desktop, напрямую из собственного набора данных; импорт чужого архива не требуется. Идентификаторы чатов и сообщений доступны через оба канала передачи данных. Публичный чат или разрешение на пересылку не гарантируют более быстрый экспорт и не устраняют задержку одобрения со стороны Takeout. Перед сравнением скорости убедитесь, что объем данных и настройки мультимедиа одинаковы. Для до 20 явно выбранных идентификаторов чатов экспорт через стандартный API определяет этих участников непосредственно перед рассмотрением полного списка диалогов учетной записи. Таким образом, читаемый открытый канал можно экспортировать, не присоединяясь к нему, даже если он отсутствует в списке диалогов. Для некешированных участников используется обычный список диалогов. Фильтр архива по-прежнему применяется: если Telegram не возвращает диалог, а заархивированные чаты исключены, неизвестный статус архива фиксируется как пропуск. Takeout сохраняет свою процедуру разделения диалогов по диапазонам. Ни один из способов не присоединяет пользователя к чатам и не изменяет разрешения на пересылку. В формате JSON, совместимом с Desktop, каналы, которые Telegram помечает как `left`, отображаются под `left_chats`, включая общедоступные каналы с правом чтения, к которым аккаунт не присоединился. Как запросы `FLOOD_WAIT`, так и `FLOOD_PREMIUM_WAIT` приостанавливают работу на весь период, запрошенный сервером. Срок действия учетной записи сохраняется при повторных подключениях и перезапусках; более короткое последующее ожидание не может сократить его. Количество повторных попыток ограничено, отмена сохраняет запечатанные страницы, а учетные данные API не меняются для обхода ограничения по частоте запросов. Покупка Premium не производится. ## Выберите, что собирать | Настройки | Значение | | --- | --- | | Цель | Опишите, почему необходимо данное приобретение. Не указывайте здесь ненужные имена или конфиденциальные детали дела. | | Язык отчёта | Выберите язык меток в отчёте для чтения. Текст исходного сообщения остаётся неизменным; непереведённые метки шаблона используют английский язык. Язык фиксируется с помощью параметров подписанного задания. | | Типы чатов / идентификаторы чатов | Все выбранные типы или только перечисленные чаты; «Сохраненные сообщения» относятся к личным чатам. Архивированные чаты можно выбирать отдельно. | | Даты | UTC. В панели указаны даты «С» и «По» по календарю, включая оба дня. API использует включительные `from_utc` и исключительные `to_utc`; панель отправляет начало дня, следующего за датой «До». Пустой предел оставляет эту сторону неограниченной. | | Идентификаторы отправителей | Только сообщения от указанных отправителей; пустой список включает всех отправителей. | | Текст содержит | Литеральные фразы, нечувствительные к регистру, сопоставляются с помощью оператора OR. Условия «отправитель/дата/собственное сообщение» комбинируются с помощью оператора AND. | | Собственные сообщения | Сохраняйте только исходящие сообщения. | | Типы медиафайлов | Выберите категории вложений или сбросьте все, чтобы избежать загрузки файлов из сообщений. | | Ограничения на файлы / общее количество медиафайлов | Объём в MiB для каждого файла и общий объём загруженных медиафайлов в GiB. Текст, квитанции, читаемые отчёты и накладные расходы, связанные с ZIP, требуют дополнительного дискового пространства. | | Категории аккаунтов | Для профиля, контактов, фотографий профиля, историй, метаданных сеансов и других данных Takeout предусмотрены отдельные элементы управления. | Предустановка **«Minimize»** отключает файлы и метаданные аккаунтов. Фильтры отправителей и контента применяются до сохранения страниц сообщений и загрузки медиафайлов. Telegram по-прежнему передаёт страницы истории API, содержащие сообщения, необходимые для оценки этих фильтров: фильтрация не гарантирует, что неотборные сообщения никогда не поступят в оперативную память. Другие текущие наблюдения в рабочей области имеют собственные настройки области действия и срока хранения. История фотографий профиля и истории по умолчанию не выбираются. Отключите также профиль и контакты, если для дела требуются только сообщения. Если вложения или метаданные не нужны, их исключение при сборе данных позволит избежать сохранения ещё одной частной копии в этом экспорте. Полевые данные фотографий используют вариант неподвижного изображения, указанный в их метаданных и хеш-манифестах, включая фотографии с анимированным вариантом аватара. Эта анимация не заменяет выбранное неподвижное изображение. Поле данных, размер которого меньше или больше наблюдаемого, регистрируется как неудачное вложение, а измененное представление при обновлении ссылки на файл отклоняется. Эти сбои приводят к тому, что архив остается неполным, хотя записи сообщений сохраняются. Независимая верификация также отклоняет сохраненные вложения, длина которых с учётом подписи не соответствует их наблюдаемому размеру или представлению, в том числе в старых архивах. ## Отчёт, охват и проверка Каждое задание фиксирует свои настройки и идентификатор аккаунта. Инвентарь и захваченные страницы подписываются; в квитанциях страниц фиксируются хеши, курсоры, время, результаты работы с вложениями и предшествующие квитанции. Только зафиксированные страницы учитываются при подсчете прогресса. При перезапуске или возобновлении задания эти записи проверяются перед продолжением работы. Измененный аккаунт, измененная подписанная страница или несогласованная цепочка квитанций отклоняются. Настройки нельзя редактировать в середине процесса сбора данных: для другого объема данных запустите новое задание. Команда «Pause» приостанавливает текущую операцию с аккаунтом. При перезапуске приложения незавершённая работа остаётся доступной для явного возобновления. Сессия Takeout, срок действия которой истек, требует явного возобновления; изменение диапазонов фрагментов Telegram может потребовать нового сбора данных. При возобновлении сохраняются предыдущие наблюдения, поэтому длительный экспорт не представляет собой единый атомарный снимок. Другие операции по смене аккаунта и конфликтующие экспорты блокируются во время сбора данных. Перед удалением рабочего пространства дождитесь завершения упаковки. Функция «Возобновить» проверяет уже записанный контент перед продолжением. Объемные архивы на медленном хранилище могут превысить настроенное **в разделе «Параметры» → «Таймаут действия панели»** значение (по умолчанию — 120 секунд). Увеличьте это значение перед повторной попыткой; отмена или прерывание работы хранилища приводит к приостановке задания, а неудачные проверки целостности — к сбою задания с пояснением причины. Проверка должна завершиться или безопасно остановиться, прежде чем файлы можно будет закрыть. Заявления о пропускной способности для крупных аккаунтов не подтверждены синтетическими тестами. Панель позволяет отличить завершённый выбранный диапазон от частичного архива, а также фиксирует пропуски и неудачные попытки чтения. Намеренно исключённые файлы отличаются от файлов, чтение которых завершилось сбоем или которые недоступны. Проверяйте охват даже в случае успешной проверки целостности. Ни один локальный считыватель не может доказать, что Telegram вернул все сообщения, которые когда-либо существовали. Готовые ZIP остаются доступными для повторной загрузки и загрузки по HTTP-диапазону. Архив аккаунта содержит `manifest.json`, `manifest.sig`, подписанные `job.json`, `inventory.json`, `receipts/`, авторитетные `data/*.jsonl`, выделенным `media/`, читаемый HTML и верификатор. Закрепите отпечаток коллектора через независимый канал, а затем проверьте с помощью доверенной установки: ``` python -m tgwitness.verify account-export.zip --fingerprint TRUSTED_SHA256 ``` Для архивов, расширенный объём которых превышает 4 ГиБ, необходимо явно задать соответствующий `--max-gib`. Панель проверяет свои аутентифицированные, завершенные локальные архивы, используя их заявленный размер в развернутом виде и опубликованный дайджест ZIP; внешний CLI сохраняет свой независимый лимит размера. Проверьте перед открытием читаемого HTML. Встроенный в архив верификатор удобен, но верификатор, полученный независимо, позволяет избежать доверия к исполняемому коду, поставляемому вместе с доказательством. Подпись Ed25519 и хэши SHA-256 позволяют обнаруживать изменения после того, как сборщик зафиксировал соответствующие байты. Они **не** доказывают, что Telegram подписал эти сообщения, что оператор сборщика действовал добросовестно, что история аккаунта полна или что суд примет эти материалы. Время записи определяется по часам сборщика. Независимые временные метки и независимое происхождение данных должны оцениваться отдельно. ## Подготовьте раскрытие информации для юриста или другого получателя После загрузки готового экспорта сохраните исходный файл ZIP и откройте `index.html` из извлечённой копии. В отчёте объясняются его объем, доступный охват и ограничения. Ссылки на записи в отчёте объединяют ссылку на архив, путь к документу и номер записи, чтобы получатель мог найти ту же запись в HTML-файле или на распечатке. Пример с решением см. по ссылке [открыть вымышленный отчёт](https://phishdestroy.github.io/TgWitness/demo/report/). После завершения экспорта аккаунта выберите **«Подготовить копию для обмена**». Это создаст отдельный подписанный производный файл. Исходный файл ZIP остаётся неизменённым и конфиденциальным; не отправляйте его вместе с минимизированным производным файлом, если получатель не уполномочен получать его полное содержимое. Выберите язык отчёта отдельно. Изменение языка или любых настроек выбора требует повторного предварительного просмотра перед созданием. 1. Укажите цель раскрытия информации и выберите даты, идентификаторы отправителей и критерии по тексту. 2. Выберите, сохранять ли идентификационные данные, раскрывать только указанных участников или использовать псевдонимы для всех. В любом режиме с использованием псевдонимов также заменяются идентификаторы/названия чатов и идентификаторы сообщений. Псевдонимы остаются неизменными в пределах одного раскрытия информации и меняются между независимо подготовленными раскрытиями. 3. Можно сохранить текст сообщения, полностью его опустить или добавить конкретные имена/фразы для маскировки. В приватных режимах инструмент также маскирует известные скрытые имена отправителей и альтернативные имена пользователей, идентификаторы отправителей в виде целых токенов, имена в прямых чатах, ссылки, адреса электронной почты и строки, похожие на номера телефонов. Сопоставление по известным именам учитывает преобразование регистра символов в Unicode, включая `Straße`/`STRASSE`. Общие названия групп/каналов не удаляются автоматически из текста сообщения. Если превышен лимит маскировки известных идентификаторов, сузьте исходный экспорт или опустите текст; инструмент не будет молча пропускать последующие имена. Это правила, действующие в рамках разумных возможностей, а не общая анонимизация. 4. Не включайте файлы, если они не нужны получателю. Включенные исходные файлы сохраняют свои пиксели, аудио, текст и метаданные. Инструмент **не** анонимизирует их. 5. Просмотрите предварительный просмотр с подсчётом, предупреждениями и образцами преобразованных сообщений, а затем явно подтвердите создание. Образцы ограничены 12 сообщениями и 2 000 текстовых символов в каждом. Это пример, а не полный обзор результата. Изменение настроек требует повторного предварительного просмотра. Срок действия предварительного просмотра истекает через 15 минут и привязан к данной сессии администратора и точному исходному ZIP; его нельзя повторно использовать после создания. Новый предварительный просмотр аннулирует предыдущий для той же задачи и сессии. 6. Ознакомьтесь с полным результатом `index.html` и `messages.jsonl` локально перед передачей. Если в нём обнаружится ненужная информация, создайте новое раскрытие с более строгими исключениями. Не редактируйте подписанный ZIP на месте. ### Сообщения, не включённые в выборку **Предварительный просмотр.** Раскрытие информации не выглядит полным, если оно таковым не является. Внутри каждого чата, в котором сохранено хотя бы одно раскрытое сообщение, сообщения, не вошедшие в выделенный фрагмент, отображаются в виде маркеров, `[withheld by selection — rule: sender]` (или `text`, `period`). Выберите **«Сообщения, не включённые в выделение**»: по одному маркеру для каждой серии последовательных нераскрытых сообщений (по умолчанию) или по одному для каждого сообщения. Маркеры содержат только правило и счётчик, но никогда не содержат текст, отправителя, дату или файлы. Чаты, в которых нет раскрытых сообщений, полностью исключаются, поэтому пакет не показывает их существование. Раскрытые ответы указывают, на что они отвечают: на сообщение, включённое в эту копию, на сообщение, исключённое при отборе, или на сообщение, которого нет в исходном экспорте (удалённое до экспорта или никогда не экспортированное; экспорт не может определить, что именно). Удержанное сообщение, на которое отвечает раскрытый ответ, всегда получает собственный маркер, поэтому ответ указывает на запись, объясняющую, почему оно пустое. Эти три состояния отличаются от удалений и пробелов в наборе данных, которые относятся к исходному экспорту. В `messages.jsonl` (формат `tgwitness-account-disclosure-v2`) каждое сообщение имеет `state`: `disclosed`, либо `withheld` с `rules` и `count`. Открытый ответ содержит `reply_to` с целью `id` и `state` (`disclosed`, `withheld`, `not_in_source`). Манифест учитывает раскрытые сообщения, чаты, мультимедиа и `withheld` сообщения. `verify.py` Отклоняет маркер, несущий содержимое, и ответ, указывающий на запись, отсутствующую в пакете; пакеты версии 1 проверяются как и ранее. В сокращённом формате не отображаются структурированные профили аккаунтов, контакты, аватары, сеансы, истории, исходные объекты Telegram, заголовки пересылок, цитаты из ответов, карточки контактов и метаданные о местоположении. Из него исключены исходные файлы JSONL, настройки частных фильтров, ключ псевдонима и карта идентичностей. Выделенный текст, явно сохраненные идентичности и включённые файлы могут по-прежнему содержать те же имена, идентификаторы или фразы, что и в этих фильтрах; они требуют отдельной проверки. Политика конфиденциальности и ключ псевдонима хранятся в зашифрованном виде в локальном хранилище для данного задания; удаление задания приводит к очистке связанных с ним записей о раскрытии конфиденциальной информации. Записи публичной политики фильтруют количество, а не значения фильтров. Заявленная цель указывается публично в манифесте и HTML: явные критерии конфиденциальности, а в режимах псевдонимизации — известные скрытые идентичности также маскируются там, в том числе когда текст сообщения опущен. Не включайте в цель ненужные личные данные; неизвестный идентифицирующий контекст может оставаться. Его манифест связывает производные файлы, публичную политику и хэш исходного ZIP. Проверка позволяет установить целостность и, если исходный файл предоставлен локально, подтвердить соответствие исходной ссылки: ``` python -m tgwitness.verify minimized-disclosure.zip --fingerprint TRUSTED_SHA256 python -m tgwitness.verify minimized-disclosure.zip --fingerprint TRUSTED_SHA256 --evidence account-export.zip ``` Ссылки на исходные материалы сами по себе не доказывают, что при преобразовании были выбраны все необходимые элементы или удалены все идентифицирующие детали. Исходный открытый текст не встроен в качестве доказательства. Для вынесения такого заключения требуется новая экспертиза. ## Передача копии и облачный сбор Выберите сообщения и файлы, необходимые получателю, просмотрите полную копию для передачи и сохраните исходник отдельно. Запишите хеш доставленного ZIP-файла, чтобы получатель мог идентифицировать и проверить именно эту копию. Выбранные идентификаторы заменяются псевдонимизацией; включенный текст и исходные файлы остаются частью проверки. GitHub Actions поддерживает экспорт данных всей учётной записи и выбранных чатов через Takeout или стандартный API, а также журнал событий одного чата. Руководство по хостируемому сбору данных объясняет проверку настроек и ограничение по длительности 120 минут. Чтобы проверить копию для обмена, полученную из хостируемого сбора данных, сравните хэш источника с исходным архивом и проверьте аттестацию этого архива с помощью проверок [, специфичных для режима](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope). [Формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) · [Отчёты по делам](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-reports/) --- # Формат архива доказательств Telegram и проверка Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/ Содержимое подписанного ZIP-архива, типы записей, подтверждения обработки, профили пользователей, внешние копии и офлайн-проверка. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Translation coverage: this edition includes material from the English original. Содержимое подписанного ZIP-архива, типы записей, подтверждения обработки, профили пользователей, внешние копии и офлайн-проверка. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) TgWitness сохраняет видимые в учетной записи данные Telegram в подписанном журнале. Получатели могут проверить сохраненные записи, вложения и отчеты с помощью доверенного ключа сборщика, а затем сравнить журнал с независимо сохраненной контрольной точкой. На этой странице описаны форматы, проверки и материалы, которые необходимо сохранить для передачи. Пользователи могут начать с запуска **VERIFY.cmd** в Windows: программа запросит исходный архив ZIP и независимо полученный отпечаток ключа, отобразит результат с пояснениями и сохранит отдельный отчёт о проверке. См. программы запуска [verification и портативную среду выполнения](https://github.com/phishdestroy/TgWitness/blob/main/docs/VERIFICATION_LAUNCHER.md) для настройки и ограничений доверия. **На этой странице** - [Что подписано](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#what-is-signed) - [Сравнение экспортов чатов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#comparing-chat-exports) - [Передача дела на расследование](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#investigation-handoff) - [Выдержка из передачи](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#handover-extract) - [Удобные для чтения отчёты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#readable-reports) - [Канонизация событий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#event-canonicalization) - [Семантика акторов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#actor-semantics) - [Охват: непрерывность, пробелы и ненаблюдаемые идентификаторы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#coverage-continuity-gaps-and-unobserved-ids) - [Производитель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#producer) - [Профили людей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#people-profiles) - [Независимый свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#independent-witness) - [Манифест и контрольные точки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#manifest-and-checkpoints) - [Область применения верификации](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) - [Вложения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#attachments) - [Надежный сбор и обработка квитанций (0.2)](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#durable-collection-and-process-receipts-02) - [Подготовка RFC 3161 и проверка ответов (0.2)](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#rfc-3161-preparation-and-response-verification-02) - [Дополнительные записи в режиме сбора доказательств: drand и устройства Telegram](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#optional-records-in-evidence-mode-drand-and-telegram-devices) ## Что подлежит подписанию | Материалы | Защита | Что следует сохранять | | --- | --- | --- | | Каждая запись в журнале, включая оперативные события | Цепочка SHA-256 и подпись Ed25519 для каждого события | Исходный `events.jsonl` — отпечаток доверенного ключа — и сохраненная контрольная точка | | Содержимое ZIP-архива с доказательствами | `manifest.sig` подписывает канонический манифест, в котором перечислены хэши файлов с содержимым | Полный ZIP-архив, включая манифест и подпись | | Сохраненные вложения | SHA-256 и количество байтов в подписанном событии `media.saved`; хеш файла в подписанном манифесте ZIP | Исходные байты внутри проверенного ZIP-архива | | Контрольная точка | Подпись Ed25519, охватывающая длину журнала, хеш заголовка, открытый ключ и время создания | Независимая копия, сохраненная до внесения спорного изменения | | Квитанция об отправке | Подписанная запись о версии сборщика, хешах исходных файлов и начальных настройках, также включенная в `process.started` | Квитанция, соответствующая журнальная запись и доказательства состояния среды для выбранного режима проверки | | Удобные для чтения отчеты: `report.html` и его части: `report.json`, `report.pdf`, `chat.pdf` | Печать Ed25519 на каждом файле, подтверждающая его содержание; файл PDF также содержит стандартную подпись PDF (см. [Readable reports](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#readable-reports)) | Полученный файл и отпечаток доверенного ключа; ZIP-архив, описанный в документе | | Автономный CSV | Отсутствие автономной криптографической подписи; одних только хешей событий недостаточно | Для проверки целостности используйте точную копию, содержащуюся в проверенном ZIP-файле | | Скриншоты, распечатки или PDF-файлы, сгенерированные браузером | В производном материале не должно быть упоминания о TgWitness | Сохраните исходный проверенный пакет и задокументируйте процесс создания производного файла | Коллектор проверяет подписи журнала перед генерацией каждого формата экспорта. Удобные для чтения отчеты в форматах HTML и PDF имеют собственные печати; автономный файл CSV проверяется как часть подписанного ZIP-архива. Сохраните ZIP-архив, чтобы сохранить байты вложений и манифест, а также отдельную контрольную точку для сверки журнала с более ранней границей. ## Сравнение экспортов чатов Проверить и сравнить два подписанных ZIP-файла с экспортом чата с независимо сохраненными отпечатками подписывающих: ``` python -m tgwitness.verify first.zip --compare second.zip \ --fingerprint FIRST_TRUSTED_KEY_SHA256 --compare-fingerprint SECOND_TRUSTED_KEY_SHA256 ``` Если в обоих архивах зафиксированы одинаковые числовые идентификаторы аккаунта и чата, записи сопоставляются по идентификатору сообщения. **Unchanged** означает совпадение полной сохраненной записи JSON: полный текст, автор, даты, адресат ответа, вложенные метаданные и неизвестные поля — всё это включено. Порядок ключей в объекте JSON не имеет значения; значение имеют отсутствующие поля, нулевые значения, типы значений и порядок массивов. Предварительный просмотр из 300 символов предназначен только для отображения. Изменённые записи указывают отличающиеся элементы верхнего уровня `changed_fields`, включая изменения, невидимые в этом предварительном просмотре. Дубликаты идентификаторов сообщений отбрасываются, а не перезаписывают друг друга при сопоставлении. Разница может заключаться в изменении отображаемого имени, количества просмотров, аннотации коллекции или других метаданных наблюдения. Сама по себе она не подтверждает факт редактирования в Telegram, не позволяет установить, кто внес изменение, и не доказывает, какой из противоречащих друг другу архивов является точным. Непроанализированные записи остаются в сравнении; совпадение их сохраненного представления не означает, что их полезные данные в Telegram были декодированы. В случае несовпадения или отсутствия идентификаторов аккаунта/чата инструмент находит только возможные соответствия, используя отправителя, полный текст, хеш файла, тип медиафайла и пятисекундный допуск по времени. Он сообщает о **Matched**, а не о **Unchanged**. Эти кандидаты не устанавливают идентичность сообщения или равенство всех метаданных. Непроанализированные записи остаются несопоставленными. Различия в сопоставленных записях по-прежнему перечисляются в `changed`, в том числе в режиме содержимого; эти различия не доказывают редактирования одного и того же сообщения. С помощью `--json` и `matched` подсчитываются пары, а с помощью `unchanged` — пары, полные сохраненные записи которых совпадают. Ни один из этих подсчетов не доказывает идентичность сообщений в режиме содержимого. Существующий вывод `changed_fields` и целочисленный вывод `unchanged` остаются совместимыми с более ранними результатами сравнения. Формат архива и проверка подписи остаются без изменений. ## Передача расследования 1. Запишите номер дела, имя оператора, цифровой идентификатор аккаунта Telegram, выбранные источники, политику сбора данных и период сбора в заметках по делу. TgWitness сохраняет наблюдения и поддерживает привязанные к источникам заметки и сбор данных в [Case Board](https://phishdestroy.github.io/TgWitness/ru/docs/reference/case-board/). Храните записи о передаче и хранении вместе с материалами по делу . Проверьте настройки сбора данных с помощью [процедуры приёма в режиме реального времени](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md). 2. Перед тем как полагаться на экспортированные данные, самостоятельно сохраните отпечаток открытого ключа рабочей среды. Во время сбора данных сохраняйте подписанные контрольные точки вне коллектора. Фиксируйте прерывания процесса и ограничения видимости учетной записи. 3. Экспортируйте **подписанный ZIP**-файл и сохраните подписанную квитанцию о запуске. Используйте контрольную точку, расположенную на границе экспортируемого журнала или перед ней. Более поздняя контрольная точка может правильно отклонить более ранний экспорт как слишком короткий. Экспорт включает полный журнал рабочей области, независимо от фильтров панели; ознакомьтесь с материалом перед его передачей. 4. Попросите получателя проверить ZIP-архив с помощью надёжной копии программы проверки и независимо предоставленного отпечатка/контрольной точки. Из надёжного репозитория с активной средой Python: ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json ``` При успешном выполнении выводятся отчеты `key_pinned: true` и `checkpoint_checked: true` , если оба входных значения предоставлены и приняты. Сохраните результат проверки. ``` For a handover requiring the final exported record to be witnessed, use `--witness witness.zip --witness-fingerprint TRUSTED_WITNESS_SHA256 --require-witness`. This refuses an export with an unwitnessed tail. See the [witness handover procedure](WITNESS.md#require-a-witnessed-export-boundary). ``` 1. Record the archive's SHA-256, export boundary, transfer date, sender, and recipient in your custody record. Keep the original package intact and work from copies. Share evidence files rather than the application's private data directory, which also contains account sessions and signing secrets. For transfer, choose a password-protected AES-256 ZIP or the stronger `.tgwpw` container. ZIP uses WinZip's low-cost password derivation; use a long random passphrase. `.tgwpw` uses scrypt and AES-256-GCM and opens with the standalone verifier's `unseal-password` command. The password is not stored and only protects confidentiality; the recipient decrypts the archive and verifies the signed export inside, which is unchanged. 2. Если требуется независимая привязка ко времени, следуйте [процедуре, изложенной в RFC 3161,](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/) и сохраните запрос, контрольную точку, информацию о доверенном центре сертификации, а также проверенный ответ центра сертификации. Сам по себе запрос не обеспечивает получение временной метки. For `.tgwpw`, use an independently obtained verifier and choose a new output file with the original extension: `python verify.py unseal-password export.tgwpw --out evidence.zip`. The command prompts for the password; `--password-stdin` reads one line for automation. It never overwrites an existing file and publishes plaintext only after all records authenticate. Run normal signature verification on the decrypted file afterwards. The container uses scrypt (`N=131072`, `r=8`, `p=1`, 16-byte salt; about 128 MiB RAM) and AES-256-GCM with 1 MiB records and an authenticated final record. An encrypted metadata record stores the inner filename, so downloaded containers can be renamed. Успешная верификация подтверждает целостность относительно доверенного ключа сборщика и сохраненных границ. См. [раздел «Объем верификации»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope) для ознакомления с допущениями о доверии и [результатами проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/) выполненных тестов. ## Выдержка из протокола передачи дел Подписанный ZIP-файл содержит полный журнал рабочей области. Если суду, адвокату или службе по борьбе со злоупотреблениями требуются только отдельные чаты, определенный период или конкретные участники, **функция «Экспорт → Выдача выдержки»** подготавливает сокращенную копию (`tgwitness-handover-v1`) в соответствии с выбранными правилами раскрытия информации. Оператор указывает цель и выбирает чаты, опциональный период (UTC), участников, к которым относится выдержка, а также определяет, что происходит с остальными участниками (отображаются, заменяются псевдонимами P01, P02… или исключены из отчета), какие тексты сообщений сохраняются, какие вложения и фотографии профилей включаются, а также маскируются ли номера телефонов и адреса электронной почты в текстах. Цель и эти правила указаны в подписанном манифесте и в отчёте; в журнале регистрируется запись «`handover.exported`» с указанием доступа, который её подготовил, и SHA-256 файла, а не его содержимого. Скрипт `verify.py` проверяет выдержку двумя способами. Запись, отображаемая как неизменённая, проверяется полностью: её содержимое сверяется с хешем, подписью Ed25519 и ссылкой на включённую предыдущую запись. В сокращённой записи сохраняются исходный хеш и подпись, поэтому подпись по-прежнему проходит проверку, но утаенные поля не могут быть пересчитаны на её основе; в записи указывается, что именно было утаено, а в отчёте это отмечается. В манифесте указывается длина журнала и его начало с подписью сборщика над этим началом, а также подсчитывается количество пропущенных записей; файл `coverage.json` описывает выбранные чаты. Имена, содержащиеся в именах файлов, не обнаруживаются. Перед публикацией проверьте окончательные файлы: свободный текст, имена файлов и выбранные вложения по-прежнему могут идентифицировать людей. Сохраните полный подписанный ZIP-архив: извлеченная часть является раскрытием информации, а не заменой. ## Удобные для чтения отчеты Подписанные доказательства, передаваемые материалы и ZIP-архивы чатов содержат читаемые отчеты в форматах HTML и JSON, а также PDF (при наличии необходимых шрифтов) на выбранном языке отчета. Каждый отчет запечатан ключом Ed25519 рабочей среды и может быть проверен отдельно: ` `python -m tgwitness.verify FILE --fingerprint KEY [--evidence ZIP]``. - `report.html` / `chat.html`: оператор запечатывания (`tgwitness-report-seal-v1`) закрывает файл и подписывает SHA-256 каждого предыдущего байта. Длинные журналы и чаты разбиваются на части настраиваемого размера (настройки отчёта, от 500 до 100 000 записей; по умолчанию — 5 000): `records/records-0001.html` или `messages/messages-0001.html`, каждая из которых запечатана своим номером, диапазоном и общим количеством, и указана вместе со своим файлом SHA-256 в подписанном манифесте. Серии сигналов о работоспособности коллектора отображаются одной строкой, если в настройках отчёта не указано их поочерёдное отображение. - `report.json` (`tgwitness-report-json-v1`, ключи `format`, `report`, `seal`): печать подписывает SHA-256 канонического JSON из `report`, благодаря чему факты могут быть прочитаны системами обработки дел и скриптами, а также на их основе может быть сделан выбор для защиты данных, при этом подписанный файл остаётся целым. - `report.pdf` / `chat.pdf`: официальный документ для печати и архивирования, подписанный дважды на одних и тех же байтах, весь файл за исключением значения подписи (`/ByteRange`). Стандартная подпись PDF (`adbe.pkcs7.detached`, CMS с SHA-256 и ECDSA P-256) использует самоподписанный сертификат для подписи документов , хранящийся в хранилище рабочей области; его серийный номер субъекта является отпечатком ключа Ed25519 . Печать Ed25519 передаётся внутри CMS в качестве неподписанного атрибута `2.25.240684792623320047764573196045913242332` и указывает на сертификат SHA-256 с помощью `"content": "pdf-byte-range"`, таким образом ключ Ed25519 подтверждает подлинность сертификата. Считыватель PDF показывает, изменился ли файл после подписания, и считает подписавшего неизвестным, пока сертификат не будет признан доверенным; вместо этого сравните отпечаток Ed25519. Для PDF-файлов на китайском, японском и корейском языках требуется шрифт на сервере (или в `TGWITNESS_FONT_DIR`); в отсутствие такового ZIP-архив содержит только отчёты HTML и JSON . В канале или супергруппе Telegram нумерует сообщения 1, 2, 3… по порядку. Экспорт чата содержит список первого и последнего номера, количество присутствующих сообщений и каждый диапазон отсутствующих номеров в `message-ids.json` , манифесте и заголовке `chat.json` , а также отмечает каждый пробел там, где он встречается в транскрипте. `verify.py` перечисляет их, начиная с `chat.json` . Отсутствующий номер — это сообщение, которое Telegram не вернул (удалено до экспорта или невидимо для аккаунта); в личных чатах и обычных группах номера используются во всех чатах аккаунта, и пропуски не учитываются. После прочтения истории экспорт заново запрашивает у Telegram каждый отсутствующий номер по порядку (`channels.getMessages`, до 10,000 номеров). Результат находится в `message-ids.json` и отчете. Пустой ответ фиксирует, что номер недоступен для данной учетной записи на момент повторной проверки; причина не указывается. Сообщение, возвращённое при повторной проверке, добавляется в экспорт и помечается как `found_on_recheck`. Каждый отчёт начинается с **. Кратко**: один абзац, затем — что показывает материал и чего он не показывает (кто стоит за аккаунтом, полнота передачи данных, удаления перед наблюдением, время без временной метки). Собственная печать страницы становится янтарной, когда браузер проверил подпись печати, а не саму страницу: браузер не присваивает странице свои собственные байты. Он становится зелёным только тогда, когда читатель перетаскивает файл в поле проверки в конце страницы и все байты совпадают, и только если отображаемая страница является именно этим файлом; в противном случае он становится красным. В каждом отчёте точно указывается название программы: коммит в Git, когда сборщик запускается из чек-аута или установщик устанавливает `TGWITNESS_COMMIT`, а также SHA-256 исходных файлов (`source_tree_sha256`, канонический JSON пути → SHA-256 каждого файла `.py`, `.js`, `.css`, `.html` и `.svg` в пакете), которые воспроизводятся при чек-ауте этого коммита, если файлы не были изменены. Клиент Telegram называется по имени своей библиотеки, уровня API и центра обработки данных. Когда начинается наблюдение, а также когда начинается и заканчивается экспорт чата, коллектор запрашивает у Telegram его время (`updates.getState`, целые секунды) и записывает время Telegram за вычетом времени по часам коллектора с погрешностью, обусловленной временем прохождения сигнала в обоих направлениях; эти измерения отображаются в отчетах в разделе «Цепочка контроля». При экспорте чата также фиксируется момент считывания истории, помимо дат сообщений. ### Руководство по автономному просмотру отчетов и архивированию Перед открытием файлов `chat.html` или `report.html` необходимо полностью распаковать ZIP-архив. Программа просмотра предоставляет функции поиска, фильтров, просмотра участников, индикаторов, сведений о записях, а также выборку файлов JSON и CSV без подключения к серверу. Сохраните файлы `viewer/` и `media/` рядом с отчётом. Выбранные элементы являются производными: используйте файл `verify.py SELECTION.json --evidence ARCHIVE.zip` для их сравнения с подписанным архивом. Программа проверки проверяет идентификатор отчёта, ключ подписи, границы архива и каждый выбранный элемент; отредактированные, отсутствующие и дублирующиеся элементы не проходят проверку. Примечания к выбору и время создания остаются неподписанными метаданными. Пробелы в номерах сообщений отображаются только для полной, нефильтрованной ленты чата в порядке возрастания. Скрытие категории или сбой при загрузке блока данных не должны превращать пропущенную строку в доказательство отсутствия сообщения. Подсветка результатов поиска осуществляется в виде простого текста до экранирования HTML, с сохранением буквальной разметки. Браузер проверяет подписи манифеста, идентификатор отчёта и ключ, а также все указанные хэши файлов. Он отклоняет неоднозначные или некорректно сформированные ZIP-структуры, дубликаты имён и небезопасные пути, а также ограничивает размер файлов 256 MiB и объявлённый общий объём содержимого 4 GiB. Для архивов большего размера используйте автономный верификатор. Эта проверка браузером дополняет проверки верификатора, касающиеся цепочек журналов и семантики данных. Файл `README.txt` содержит руководство по началу работы, согласованный перечень файлов, инструкции по проверке и примечания по формату данных на языке отчёта, за которыми следует полное руководство на английском языке. `SHA256SUMS` охватывает перечисленные в нём файлы, за исключением самого этого файла, `manifest.json` и `manifest.sig`; подписанный манифест также охватывает `SHA256SUMS`. Оставьте исходный ZIP-архив без изменений и сохраняйте рабочие файлы вне распакованной папки. Отчёты PDF содержат закладки разделов и идентификаторы дел/отчётов на последующих страницах. ### Чат на момент экспорта Экспорт чата фиксирует информацию, указанную Telegram о чате на момент начала экспорта: собственные метки Telegram (`scam`, `fake`, `restricted` с обоснованиями, `verified`), имена пользователей, описание, количество участников и администраторов, связанное обсуждение, защиту контента, информацию о том, видят ли новые участники предыдущие сообщения и с какого сообщения этот аккаунт видит историю (`available_min_id`), дату сообщения № 1, если это дата создания чата, и SHA-256 — фотографию чата (сохраненную в `media/`). Здесь фиксируется место аккаунта, осуществляющего экспорт, в чате: роль, дата присоединения, кто его пригласил, а для администратора — его права. Вместо этого указывается запрос, отклоненный Telegram. Если аккаунт, осуществляющий экспорт, является администратором, при экспорте в файл `admin-log.json` записывается журнал администратора чата (Telegram хранится около 48 часов): удаления и правки с указанием содержания и аккаунта, который их совершил. Именно в этой записи об удалении указывается, кто его совершил. ### Показатели Список отчетов и архив содержат такие записи, как `indicators.csv` , `indicators.stix.json` (STIX 2.1 ) и `indicators.misp.json` (событие MISP ), на основании которых служба по борьбе со злоупотреблениями может принимать меры в отношении записанных сообщений: ссылки и домены (в том числе скрытые за текстом, в кнопках и в предварительном просмотре ссылок), адреса криптовалют, имена пользователей и ссылки для приглашения (Telegram ), номера телефонов, адреса электронной почты и сохраненные изображения. Адреса Bitcoin, Litecoin, Dogecoin и TRON указываются только в том случае, если их контрольная сумма base58 верна, адреса segwit — если верна их контрольная сумма bech32 или bech32m, а адреса TON — если верна их CRC; адреса EVM и Solana помечаются как непроверенные. Изображения содержат SHA-256 и перцептивный хэш (dHash, 64 бита), который при повторном сжатии или изменении размера копий остаётся практически неизменным. Отчёты записывают индикаторы таким образом, чтобы они не открывались случайно (`hxxps[://]example[.]com` ); файлы сохраняют значения в том виде, в каком они были. Каждый индикатор помечается как неизвестный и не подлежащий автоматическому обнаружению (STIX , `indicator_types: unknown` , MISP , `to_ids: false` , рассылка собственной организации): наличие в списке означает, что он содержался в сообщении, а не то, что он является вредоносным. Ссылка, текст которой указывает на адрес, отличный от того, на который она ведет, помечается в отчете. Отчёты формата PDF заканчиваются заявлением эксперта, которое необходимо подписать от руки, контрольным списком для нотариуса или судебного эксперта, а также QR-кодом (также расположенным на первой странице) с идентификатором отчёта, отпечатком ключа и SHA-256 авторитетных данных, чтобы распечатка позволяла отследить их происхождение из архива. ## Канонизация событий Входные данные хеша состоят именно из следующих полей: ``` seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload, previous_hash ``` Сериализация должна осуществляться с использованием JSON, совместимого с Python, в кодировке UTF-8, с отсортированными ключами объектов, без ASCII-эскейпинга, без незначительных пробелов и без значений NaN/бесконечности: ``` json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"), allow_nan=False).encode("utf-8") ``` Хеш события формируется на основе SHA-256 этих байтов. Подпись создается с помощью алгоритма Ed25519 над 32 исходными байтами хеша, а затем кодируется в Base64. Первый предыдущий хеш (previous_hash) состоит из 64 нулей. Порядковые номера начинаются с 1 и увеличиваются на 1. Все события, включая операционные, составляют одну цепочку. Подавление дубликатов доставки отсутствует: повторные наблюдения представляют собой отдельные подтверждения получения, а не утверждение о различных действиях в Telegram. Исходные даты Telegram представляют собой строки в формате ISO; двоичные поля преобразуются в объекты, содержащие bytes_base64. Текст сообщения, сущности, дескрипторы мультимедиа, метаданные ответов, реакции и действия сервиса сохраняются в исходных метаданных сообщения, если они были предоставлены. observed_at — это системное время сбора данных в формате UTC. source_at — это указанная дата из Telegram, если она доступна. Уведомления об удалении не содержат точного времени удаления, поэтому source_at остается нулевым. Порядок получения данных не обязательно соответствует порядку событий в источнике. В моментальных снимках истории используются более старые даты источника, но текущее время наблюдения. ## Семантика участников message.new actor_id — это отправитель сообщения. В поле message.edited отсутствует предполагаемый редактор; поле payload.sender_id фиксирует отправителя наблюдаемого сообщения. Удаление actor_id остаётся нулевым. Сообщения службы членства сохраняют отправителя и тип действия, не преобразуя каждое удаление в добровольный выход из группы. Необработанные обновления участников сохраняют actor_id в том виде, в котором он был предоставлен. Снимки реакций не придумывают участника, внесшего изменения. Уведомления об удалении для личных чатов и обычных групп содержат только идентификаторы сообщений. Эти чаты используют единую последовательность идентификаторов для всей учётной записи, поэтому каждый идентификатор идентифицирует одно конкретное сообщение данной учётной записи. Если сообщение с данным идентификатором ранее было сохранено в данном журнале, его удаление фиксируется в данном чате как message.deleted с именем метода payload.chat_resolution. Идентификаторы, которые никогда не сохранялись, хранятся как deletion.unscoped без chat_id; никаких предположений не делается. Каналы и супергруппы нумеруют сообщения по чатам и никогда не сопоставляются таким образом. Если удалённое сообщение было отправлено наблюдаемой учётной записью, payload.deleted_message_was_outgoing принимает значение true; информация об удаляющем пользователе по-прежнему не предоставляется. Уведомление без указания области действия не подтверждает, что сообщение никогда не сохранялось: соответствующий чат может находиться за пределами текущей области наблюдения, либо уникальное совпадение может быть недоступно. Повторная проверка отсутствия остаётся отдельным наблюдением, отличным от уведомления об удалении в подсчётах отчётов, фильтрах и метках. Позднее восстановление сбрасывает текущее состояние отсутствия, сохраняя при этом более раннюю неудачную проверку в подписанной истории; ни одно из этих наблюдений не подтверждает уведомление об удалении. Несколько идентификаторов, относящихся к одному и тому же чату из одного уведомления, группируются как `deletion.batch`, независимо от их количества. Уведомление не устанавливает, была ли удалена вся история, кто выполнил удаление или распространялось ли оно на всех участников. Сохраненные исходящие сообщения не влияют на эти ограничения. Старые журналы могут содержать события `history.cleared`, выведенные на основе пакетов из десяти или более идентификаторов, с пояснительным текстом, приписывающим удаление другому участнику. Эти выводы не поддерживаются обновлением. Сохраните эти исходные подписанные записи, но рассматривайте их как сгруппированные уведомления об удалении; текущий интерфейс маркирует их соответствующим образом. ## Объём охвата: непрерывность, пробелы и незафиксированные идентификаторы Каждый подписанный ZIP-файл содержит файл `coverage.json`, HTML-отчёт открывается с той же сводкой, а файл `verify.py` пересчитывает её на основе файла `events.jsonl`, а не доверяет исходному файлу: - **Непрерывное наблюдение с момента X до момента Y.** Период начинается с кода `observation.started` и заканчивается при паузе, остановке, потере соединения с Telegram, выходе из системы, запуске процесса без упорядоченной остановки или при отсутствии записей в течение более трёх минут во время наблюдения (сигналы о работоспособности записываются каждую минуту, поэтому отсутствие записей означает, что процесс остановился, завис или компьютер перешел в спящий режим). При изменении интервала сигналов о работоспособности в **разделе «Параметры»** каждый сигнал фиксирует это изменение, и допустимое время отсутствия записей становится равным трём интервалам, но никогда не менее трёх минут. - **В списке пробелов** указывается временной интервал между периодами с указанием причины. Пробел, остающийся незаполненным на момент последней записи, обозначается как `not_resumed_by_last_record`. - **Идентификаторы сообщений не фиксируются.** Для каналов и супергрупп, в которых сообщения нумеруются по чату, пропущенные идентификаторы между зафиксированными указываются в виде диапазонов. Они отмечаются как «не*зафиксированы*» — удаленные, никогда не доставленные или выходящие за пределы сохраненной истории — но никогда как «удаленные». Личные чаты и обычные группы используют общую для всей учетной записи нумерацию, поэтому пробелы внутри одного такого чата ничего не значат и там не указываются. - Уведомления о пропусках на уровне чата (например, запрос Telegram о восстановлении разницы в одном канале) учитываются как заметки; они не прерывают общее охват. ### Отсутствующие номера сообщений (`gap_summary`) **Предварительный просмотр.** `coverage.json` → `gap_summary` Измеряет номера, присвоенные Telegram, которые этот коллектор никогда не видел. Telegram нумерует сообщения один раз на канал или супергруппу и один раз на аккаунт во всех приватных чатах, ботах и обычных группах. Номер, находящийся между двумя наблюдаемыми сообщениями, либо наблюдается, либо отсутствует; непрерывный диапазон является утверждением о том, что каждое сообщение, пронумерованное в нём, было наблюдаемо. Пробел не указывает ни на какого участника, ни на причину. | Область применения | Значение | | --- | --- | | `status` | `on`, или `off` если отключено в **разделе «Параметры» → «Анализ пробелов»** | | `parameters` | Параметры, которые привели к получению результата, чтобы его можно было повторить | | `chats[]` | По одной записи на канал или супергруппу, каждая из которых пронумерована отдельно | | `account` | Последовательность личных чатов, ботов и обычных групп для всего аккаунта | | `status` (для каждой последовательности) | `applicable`, или `not_applicable` с `reason` | | `observed_from`, `observed_to`, `span` | Первый и последний наблюдаемый номер, а также размер диапазона | | `observed`, `observed_without_content` | Наблюдаемые номера; те, которые известны только по записям об удалении или повторной проверке | | `missing`, `density`, `gap_ranges`, `largest_gap` | Число, которое никогда не наблюдалось, его доля в диапазоне, количество прогонов, самый длинный прогон | | `clusters[]` | Перечисленные пробелы: `low`, `high`, `missing`, а также соседние наблюдаемые числа `after` / `before` с указанием времени наблюдения | | `service_estimate` | Только при включенной функции: количество отсутствующих номеров, которые были бы служебными сообщениями с учетом их доли в общем количестве наблюдений. Никогда не вычитается из `missing` | Достоверность определяется на основе журнала, она никогда не принимается как данность: - **Каналы и супергруппы** учитываются по каждому чату, в том числе при экспорте выбранных чатов. В расчёт включаются записи, выбранные по отправителю `not_applicable`. - **Последовательность по всему аккаунту** измеряется только от первого до последнего сообщения, поступившего в период, когда был включен сбор данных по всему аккаунту, и включает приватные чаты, ботов, обычные группы и собственные сообщения аккаунта, при этом ни один из таких чатов не исключается (`scope.changed`). Числа, обозначенные `deletion.unscoped` считаются наблюдаемыми без учета содержания. Экспорт или передача выбранных чатов не позволяют измерить эту последовательность. Если сбор данных по всему аккаунту был выключен, а затем включен, в примечании указывается, что номера, использованные в промежуточный период, отображаются как пробелы. - Сервисные сообщения представляют собой записи журнала с собственными номерами, поэтому они сами заполняют пробелы; необязательная оценка служит лишь для контекста. `verify.py` пересчитывает `gap_summary` по `events.jsonl` с настройками из подписанного `coverage.json`,для старых архивов используются значения по умолчанию.В сводке выводится результат по аккаунту.Команда `get_capture_status` в MCP и командной строке возвращает расчёт для разрешённых чатов;общая нумерация аккаунта доступна только при доступе ко всему рабочему пространству. Повторные наблюдения одного служебного сообщения учитываются один раз, а оценка работы аккаунта использует только числа, находящиеся в измеряемом диапазоне. Применяемый диапазон должен явно сохранять собственные сообщения аккаунта до включения измерения по всему аккаунту; более старые записи без этой информации не могут подтвердить это условие. Прекращение наблюдения не расширяет диапазон измерения, а его возобновление фиксируется. Запрос к архиву в режиме реального времени имеет временной лимит, включая сканирование базы данных, и помечает незавершённое измерение как частичное. Telegram документирует [отдельные последовательности идентификаторов сообщений](https://core.telegram.org/api/updates#message-id-sequences). Эти номера описывают наблюдения; они не идентифицируют субъекта удаления и не устанавливают, почему какой-либо номер отсутствует. Когда Telegram перестает принимать учётную запись, запись `coverage.gap`, завершающая наблюдение, содержит `cause` (`account_banned`, `account_frozen`, `account_deleted`, `session_duplicated`, `session_revoked`, `session_expired`, `session_ended` или `not_authorized`) и ошибку Telegram; `verify.py` указывает причину, по которой период заканчивается. Охват включает в себя зафиксированные периоды наблюдения, перерывы и результаты обработки сообщений. Оценивайте его с учётом выбранных чатов, периода и политики в отношении вложений; непрерывная работа сама по себе не гарантирует полной доставки обновлений Telegram. ## Продюсер Подписанный манифест ZIP-архивов с доказательствами, экспортов чатов, журналов свидетелей и файлов с профилями лиц содержит `producer` : название программного обеспечения, версию, проект (PhishDestroy), домашнюю страницу и репозиторий исходного кода. В отчёте в формате HTML отображается та же строка, а `verify.py` выводит её в качестве части проверенных данных. Архивы, созданные до появления этого поля, проверяются так же, как и ранее, и в отчёте указываются как не содержащие сведения о создателе. Каждая запись `observation.started` также указывает клиент Telegram, который осуществлял наблюдение: его `api_id` (ни в коем случае не хеш), независимо от того, является ли это встроенной публичной парой или собственным приложением оператора, описание клиента, отправленное в запросе на соединение Telegram, а также тип маршрута соединения с режимом IP (без адреса прокси или секрета). В отчете и записи `custody.json` перечислены все уникальные клиенты и маршруты с указанием времени их регистрации, а также случаи, когда ни один из перечисленных прокси не ответил, и запись Telegram зафиксировала адрес сервера. Об этом свидетельствуют журналы, записанные до этого. ## Профили пользователей Файл профиля (`tgwitness-dossier-v1`, JSON) формируется по запросу на основе записей, уже имеющихся в журнале для одного чата; никакие данные из Telegram не извлекаются, а содержимое профиля никогда не записывается в журнал (включение и выключение профилей фиксируется как `dossier.changed`). Для каждого пользователя, у которого сохранено сообщение, указываются имя и история имений, флаги Telegram (бот, мошенничество, фейк, премиум, подтверждённый, ограниченный доступ, удалённый) на момент сохранения, идентификаторы фотографий, SHA-256 и перцептивный хеш (pHash, совместимый с `imagehash.phash`) аватара из локального кэша аватаров с похожими аватарами, активность (первое и последнее сообщение, количество сообщений, отредактированные и удалённые публикации, сообщения по часам UTC), кто кому отвечает, другие чаты в этом журнале, в которых данный пользователь писал, а также упомянутые кошельки (BTC, EVM, TRON, TON, LTC, DOGE, XMR, SOL; адреса в формате Base58Check проходят проверку контрольной суммы), номера телефонов, имена пользователей и ссылки, включая ссылки, скрытые за текстом. Каждый факт сопровождается указанием записей журнала (`seq`), из которых он взят, а `record_hashes` содержит хэш каждой упомянутой записи. Заявление подписано ключом рабочей области: ``` python verify.py tgwitness-dossier-CHAT.json --fingerprint TRUSTED_SHA256 --evidence tgwitness-evidence.zip ``` Проверяет подпись, верифицирует сам экспорт доказательств (подпись, цепочку хешей и файлы) а также наличие каждой упомянутой записи в неизменённом виде в данном экспорте того же рабочего пространства. Хеши аватаров помечаются как полученные из локального кэша (а не из записей журнала). Упоминания представляют собой совпадения по шаблону — это подсказки для проверки, а не подтверждённые факты. Профили включаются для каждого чата, могут экспортироваться в виде ZIP-архива с шифрованием AES-256 и паролем, а также удаляются при отключении или при удалении чата из источников. ## Независимый свидетель Журнал «Witness» (`tgwitness-witness-v1`) и сообщения в его канале сверяются с экспортом доказательств с помощью `verify.py --witness … --channel …`; см. раздел [«Независимый свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/)». ## Манифест и контрольные точки Файл manifest.json содержит информацию о формате, времени экспорта, открытом ключе, отпечатке, длине журнала, хеше начала, области действия, создателе, ограничениях, а также SHA-256 каждого элемента содержимого, кроме самих `manifest.json` и `manifest.sig`. Файл manifest.sig представляет собой подпись Ed25519 в кодировке base64, наложенную на канонический JSON-манифест. Проверяющее устройство отклоняет неожиданные или отсутствующие элементы, дубликаты имен, повреждённые файлы, нарушенную последовательность или цепочку, недействительные подписи, а также несоответствие предоставленной контрольной точке. Оно никогда не извлекает пути к архивам. Общий объём некомпрессированных данных ограничен 4 ГиБ; архивы `--max-gib N`, созданные с увеличенным пределом **параметров,** могут иметь больший размер. Запустите проверку из установленной версии TgWitness или из проверенной версии репозитория. Копия, включённая в архив, поддерживает переносимое использование; сверьте эту копию с вашей надежной установкой перед её запуском. Контрольная точка подписывает заявление, содержащее открытый ключ, длину журнала, хеш-код начальной части и время создания. Верификатор может проверить, содержит ли более поздний архив тот же префикс. Храните контрольную точку вне коллектора, чтобы при последующей верификации сравнивался архив с эталоном, хранящимся отдельно от него. ## Объем проверки Верификация проверяет архив и режим сбора, использованный для его создания. Выберите режим, граница доверия которого соответствует данному случаю, а затем сохраните его входные данные для верификации. | Режим сбора | Что проверяется | Материалы и условия проверки | | --- | --- | --- | | Локальное рабочее пространство | Запишите подписи, цепочку хешей, манифест и байты вложений | Независимо сохраняемый отпечаток коллектора; администратор хоста контролирует локальный ключ подписи | | Локальное рабочее пространство с независимым свидетелем | Проверка архива и совпадения его начального участка с ранее сохранённой записью свидетеля | Отдельно доверенный ключ свидетеля и записи; контрольная точка связывает уже наблюдаемый префикс | | [Сбор через GitHub Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md) | Подтверждение на GitHub дайджеста архива, утвержденного рабочего процесса и коммитов сборщика, размещенного запуска, нового источника сессии/ключа и целостности внутреннего архива | Политика доверенного верификатора, репозиторий вызывающих сторон и пакет аттестации GitHub; сбор данных выполняется в рамках закреплённого рабочего процесса | | [Облачное развёртывание](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/) | Записи о жизненном цикле провайдера и доступе, состоянии брандмауэра и Cloudflare, а также подписанная запись о работе сборщика данных | Запросы к провайдеру и Cloudflare только для чтения; доступность отдельных проверок зависит от провайдера | | [Конфиденциальная ВМ Intel TDX](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx) | Укажите подпись и статус платформы, привязку к заявлению сборщика, состав и измерения ОС | Цепочка доверия Intel и ожидаемые показатели развертывания; сохранить результаты каждой обязательной проверки TDX | При запечатанном сборе данных утвержденный сборщик получает данные через аутентифицированное соединение Telegram внутри проверенной среды. Аттестация привязывает архив к данному запуску, поэтому проверка охватывает как сам процесс сбора, так и последующую целостность файлов. Это основано на утвержденном коде и цепочке доверия платформы, перечисленной выше. Верификация сбора данных на GitHub требует сеанса, созданного в рамках данного запуска, и отклоняет сбор данных с использованием импортированных сеансов. В квитанции запуска фиксируются версия сборщика, хеши файлов и настройки запуска. Происхождение из GitHub и измерения TDX обеспечивают проверку среды; запись валидации идентифицирует протестированные конфигурации. TgWitness подписывает собираемые им наблюдения; Telegram и авторы сообщений не выдают эти подписи. В локальной рабочей области материалы, созданные до первой независимой контрольной точки, по-прежнему зависят от сборщика и владельца его ключа. Записи об охвате описывают выбранную область и результаты сбора, в то время как проверенные внешние временные метки фиксируют границы зафиксированного архива или журнала во времени. ## Вложения Файлы идентифицируются по хешу SHA-256 в каталоге media/. Событие media.saved связывает хеш и длину в байтах с конкретным событием сообщения. Исходные имена файлов являются метаданными, а не локальными путями. Байты мультимедиа загружаются асинхронно, поэтому немедленное удаление может помешать их фиксации. В качестве результатов отображаются: отключенный сбор данных, файлы чрезмерного или неизвестного размера, сбои при загрузке и прерванные загрузки. Сбой процесса может привести к появлению неимеющих ссылок неполных файлов; они не включаются в экспортируемые данные. Экспортер в формате ZIP сверяет сохраненные медиафайлы с их именами. Экспорт в форматы JSONL, CSV и HTML проверяет сигнатуры событий, но не передаёт байты медиафайлов. Производные отчёты предназначены для удобства; файл events.jsonl является авторитетным представлением событий. При полном экспорте чата вложения сохраняются в соответствии с настройками вложений рабочего пространства в папке media/ с именами в формате SHA-256. Каждая запись сообщения в файле chat.json указывает название файла (`file`, `file_sha256`) или причину его отсутствия (`file_status`), а также то, что видел читатель вокруг текста: ссылки за текстом, источник пересылки, кнопки ботов, подпись, просмотры и таймер автоматического удаления. Файл `verify.py` проверяет, что каждый указанный файл находится в подписанном манифесте под этим хешем. ## Надежный сбор и обработка подтверждений (0.2) Обработка медиафайла и фиксация события сообщения осуществляются в рамках одной транзакции. Задание сохраняет исходный дескриптор сообщения Telegram; подписанное наблюдение связывает его SHA-256, учётную запись и политику размера. При восстановлении эта привязка проверяется перед загрузкой. Система никогда не извлекает текущее сообщение и незаметно заменяет его более новым вложением. Прерванные задания повторяются, в то время как постоянный сбой остаётся явным результатом. Каждая рабочая область имеет собственный журнал и идентификатор подписи. Событие process.started включает идентификатор запуска, время по локальным часам, версии зависимостей, хеши исходных файлов, исходную учетную запись/область действия, а также настройки сбора данных. Сигналы пульсации включают идентификатор запуска, монотонное время и состояние очереди. Квитанцию о запуске также можно загрузить в виде отдельно подписанного заявления. Для проверки среды выполнения сопоставьте её с аттестатом GitHub или проверками TDX, описанными в [Область проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope). Автоматические контрольные точки сохраняются локально при запуске, каждые пять минут во время наблюдения (**Параметры → Подписанная контрольная точка каждые**) и при упорядоченной остановке. Проверка при запуске и экспорт сравнивают журнал с последней сохраненной локальной контрольной точкой. Это позволяет обнаружить откат базы данных, если контрольная точка сохранилась. Независимое хранение обеспечивает доступность этой ссылки за пределами рабочей области; проверенная внешняя временная метка дополнительно закрепляет её во времени. После перезапуска возобновляется сохраненная позиция обновления Telegram (`catch_up_from` в `observation.started`), и запрашиваются пропущенные обновления. Периодическая повторная проверка фиксирует `message.recovered` для пропущенных сообщений и `message.missing_on_recheck`, когда Telegram больше не возвращает сохраненное сообщение; последнее не является уведомлением об удалении и не указывает ни лицо, удалившее сообщение, ни время. ### Внесайтовое копирование и восстановление (S3) Внесайтовая копия (функция «Экспорт», по умолчанию отключена) загружает фрагменты журнала, сохраненные файлы, контрольные точки с их временными метками, а также готовые экспорты чатов в хранилище, совместимое с S3, зашифрованные с помощью AES-256-GCM перед загрузкой с использованием ключа, хранящегося в хранилище рабочей области; применяется функция удержания Object Lock, если это поддерживается хранилищем. Без загруженного ключа копия не подлежит чтению. Восстановление и проверка осуществляются с помощью `python -m tgwitness.replica restore --key-file KEY.json --out DIR`. Для восстановления требуется пустой обычный каталог. Загруженные и расшифрованные объекты остаются в частном временном хранилище до тех пор, пока не будет проверен весь журнал и каждая сохраненная контрольная точка. Небезопасные пути к объектам, несогласованные диапазоны сегментов и журналы, длина которых меньше контрольной точки, отклоняются; в случае неудачной проверки восстановленные файлы не публикуются. Проверки срока хранения сравнивают возвращённый режим Object Lock и дату с крайним сроком, отправленным при загрузке (допуск на округление составляет одну секунду). Истекший, недействительный или сокращённый крайний срок не считается проверенным. Статус указывает на выбранный объект, срок хранения которого был считан обратно для данного цикла загрузки. Отсутствие или повреждение локальных медиафайлов фиксируется как ошибка текущего прохода, при этом курсор медиафайлов остаётся перед этим местом, чтобы файл был повторно обработан в следующем проходе; файлы, контрольные точки и экспортированные данные, следующие за ним, по-прежнему копируются. При восстановлении все ссылки на сохраненные медиафайлы сверяются с расшифрованными хешами и зафиксированными размерами. Идентичные перекрывающиеся сегменты журнала от прерванных загрузок дедуплицируются; конфликтующие перекрытия отбрасываются. Контрольные точки, созданные во время загрузки, откладываются до тех пор, пока охватываемые ими записи журнала не будут скопированы, поэтому завершённый проход не публикует контрольную точку раньше, чем соответствующая запись в журнале. ### Потоковый экспорт моментальных снимков При потоковом экспорте используется стабильный снимковый файл чтения SQLite. Его начало может оказаться более старым, чем текущий активный журнал к моменту завершения загрузки. Контрольная точка, созданная после этого снимка, может правильно показывать, что архив короче; сравнивайте с контрольной точкой, расположенной на уровне экспортируемого префикса или перед ним, а не с произвольной более поздней контрольной точкой. ## Подготовка RFC 3161 и проверка ответов (0.2) В режиме «Доказательства» (по умолчанию отключен) отправляется только хеш SHA-256 каждой подписанной контрольной точки в указанные авторитетные источники по стандарту RFC 3161 и календари OpenTimestamps через маршрут рабочей области, но ни в коем случае не через MTProxy. Ответы хранятся в формате `checkpoints/anchors/`, экспортируются и проверяются с помощью `verify.py` (`--tsa-ca` проверяет подпись TSA; подтверждение доказательств OpenTimestamps осуществляется с помощью `ots upgrade` и `ots verify`). Панель подготавливает архив запросов, содержащий канонические байты файла checkpoint.json, отпечаток сообщения с хэшем SHA-256 и случайный нонс в файле timestamp.tsq, а также контрольные суммы и инструкции. Сетевые запросы не осуществляются. Подготовленный архив не является доверенной временной меткой. `python -m tgwitness.anchor verify` дважды вызывает OpenSSL: один раз для проверки байтов контрольной точки и один раз для проверки исходного запроса. Требуется явно указать файл доверенного центра сертификации; включённые сертификаты автоматически не считаются доверенными. Проверка запроса является опциональной в командной строке, поэтому сохраните и укажите параметр `--request` для проверки нонса. Результат указывает, была ли проведена проверка. Подпись контрольной точки сборщика и журнал по-прежнему необходимо проверять отдельно с помощью доверенного отпечатка сборщика. Проверка включает в себя проверку подписи ответа, байтов контрольной точки и, при наличии, исходного запроса в рамках указанного доверия к центру сертификации. Проверка отзыва сертификатов и проверка достоверности долгосрочного архивирования после истечения срока действия сертификата выходят за рамки данного средства проверки. См. [процедуру](https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/) и [результаты проверки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/). ## Дополнительные записи в режиме сбора доказательств: устройства drand и Telegram Ещё две записи могут выполняться с теми же проходами, что и временные метки. Обе по умолчанию отключены и вступают в силу только при включённом режиме доказательств: «Дополнительно» → «Доказательства и резервные копии» → **«Дополнительные свидетели» · опционально**, или `"drand": true` и `"devices": true` в `POST /api/evidence`. Сбой одного из них не останавливает работу другого или временных меток; панель отображает последний результат каждого из них под формой. **drand** (`beacon.drand` ). При каждом проходе в журнал записывается новейший раунд drand quicknet — общедоступная случайная величина от League of Entropy (один раунд каждые 3 секунды): `chain` , `round` , `randomness` , `signature` , `round_time` и `relay` , ответивший на запрос. Проверенный непредсказуемый раунд служит нижней временной отметкой для последующих материалов, связанных хэш-ссылками. Проверенная временная метка на более поздней контрольной точке служит верхней временной отметкой. Эти проверки ограничивают связанный материал; охват сбора оценивается отдельно. Сборщик сначала обращается к `drand.cloudflare.com` , затем к ретрансляторам Protocol Labs через маршрут рабочей области, по одному запросу за каждый проход. `verify.py` проверяет, что каждый случайный номер является SHA-256 своей подписи и что время раунда верно, а также сообщает о раундах, самом длинном отрезке без раунда и о том, насколько часы сборщика отставали от drand. Он не проверяет подпись BLS. `--check-drand` сравнивает раунды с ретранслятором Cloudflare и ретранслятором Protocol Labs — либо со всеми из них, либо со случайной выборкой из 100 записей в длинном журнале; раунд, который отличается, не проходит проверку. Устройства **, Telegram,**, `account.devices`. При каждом проходе считываются сессии аккаунта с `account.getAuthorizations`, список Telegram отображается в «Настройки» → «Устройства», и записывается: полностью, если он изменился с момента предыдущего прохода, с хешами сеансов `added` и `removed`, в противном случае — только его количество и SHA-256. Сохраняются модель устройства, платформа, приложение и версия, дата создания и последней активности, страна и регион; IP-адреса не сохраняются, поскольку экспорт доказательств выходит из-под вашего контроля. Собственная сессия сборщика активна постоянно, поэтому только активность других сессий считается изменением. `verify.py` сообщает, как часто список записывался, а также о каждой новой и завершённой сессии. Он считывает список только во время работы наблюдения. Чего они не показывают: drand подтверждает лишь порядок записей относительно общедоступного времени, а список устройств представляет собой заявление Telegram, прошедшее через сборщик и подписанное им, как и любая другая запись. **Журнал Cloudflare Gateway** (`cloudflare.gateway_dns`). Для сервера, который осуществляет разрешение через Cloudflare Gateway ([Gateway DNS](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#cloudflare-as-an-outside-witness)), каждый цикл копирует то, что Gateway зарегистрировал с момента предыдущего копирования: по одной записи за интервал не более трёх часов с указанием `from`, `until`, `location_id`, `address` сервера (если он задан) и `queries` в качестве `[at, name, type, rcode, decision, colo]`, в том числе в случае их отсутствия. Установите это в **«Журнал шлюза Cloudflare»**: учётная запись, местоположение, опциональный адрес и токен только для чтения (Account Analytics Read; Zero Trust PII Read для сохранения одного адреса общего местоположения). Панель проверяет их с помощью одного запроса перед сохранением; токен остается зашифрованным и никогда не попадает в журнал. В `verify.py` перечислены окна, наиболее часто искомые имена и время, не охваченное копией; запись, количество запросов которой не совпадает с количеством запросов, считается неудачной. Окно, содержащее более одной страницы запросов за одну секунду, сохраняет эту страницу и указывает, что остальная часть отсутствует. Копия представляет собой ответ Cloudflare, полученный через коллектор и подписанный им; в течение 24 часов любой, у кого есть токен только для чтения, может сравнить её с данными Cloudflare. --- # Независимый свидетель и непрерывность журнала Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/ Запустите Witness с собственным ключом и ботом, публикуйте подписанные контрольные точки в канале и сверяйте экспортированные данные с ними. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Запустите Witness с собственным ключом и ботом, публикуйте подписанные контрольные точки в канале и сверяйте экспортированные данные с ними. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Доказательства и верификация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) [Экспорт и проверка](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) · [Высокая степень надежности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/) · [Руководство по панелям](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/#extras) Свидетель хранит подписанные контрольные точки отдельно от коллектора. Он проверяет подпись коллектора и непрерывность журнала, подписывает результат своим собственным ключом и публикует его в канале Telegram. Запускайте его на отдельном сервере с доступом только для чтения к конечной точке свидетеля коллектора. Блок-схема · Коллектор → Свидетель (подписанный контрольный пункт: количество записей + хеш заголовка); Свидетель → Журнал Witness, собственный ключ; Свидетель → Канал в Telegram (подписанное сообщение, отправленное через собственного бота); Архив доказательств в формате ZIP → verify.py; Журнал Witness, собственный ключ → verify.py; Канал в Telegram → verify.py (Экспорт из Telegram Desktop или страница «t.me/s») · Коллектор · Свидетель · Журнал Witness,собственный ключ · Канал в Telegram · Архив доказательств вформате ZIP · verify.py · подписанный контрольный · пункт: количество записей + · хеш заголовка · подписанное сообщение, · отправленное через · собственного бота · Экспорт из Telegram Desktop · или страница «t.me/s» **Схема в текстовом формате** 1. Коллектор → Свидетель (подписанный контрольный пункт: количество записей + хеш заголовка) 2. Свидетель → Журнал Witness, собственный ключ 3. Свидетель → Канал в Telegram (подписанное сообщение, отправленное через собственного бота) 4. Архив доказательств в формате ZIP → verify.py 5. Журнал Witness, собственный ключ → verify.py 6. Канал в Telegram → verify.py (Экспорт из Telegram Desktop или страница «t.me/s») **На этой странице** - [Что получает свидетель, а чего не получает](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#what-the-witness-gets-and-what-it-does-not) - [Что проверяется и регистрируется](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#what-it-checks-and-records) - [Запустить свидетеля](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#run-a-witness) - [Публичная страница с доказательствами для нескольких рабочих пространств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#public-proof-page-for-several-workspaces) - [Проверить](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/#verify) ## Что предоставляет TgWitness, а чего не предоставляет | У TgWitness есть | Свидетель никогда не имеет | | --- | --- | | **Токен-свидетель** только для чтения для одного рабочего пространства | Сессия Telegram сборщика данных или учетные данные для доступа к API | | Собственный ключ Ed25519 и журнал | Хранилище сборщика, ключ подписи или токен панели | | Собственный токен бота в Telegram | Содержание сообщения: в заголовке указано количество записей и хеш | Токен создаётся в **разделе «Дополнительно» → «Независимый свидетель»**, отображается один раз и сохраняется только в виде SHA-256. Он открывает ровно одну конечную точку, `GET /api/witness/head`, которая возвращает свежую подписанную контрольную точку, а также подписанные счетчики коллекций без содержимого и информацию о работоспособности. Он не может открывать панель, читать содержимое сообщений или изменять настройки, и токен панели там не принимается. Отменить токен можно на той же странице. Коллектор фиксирует момент начала проверки новым ключом свидетеля (`witness.seen`) и отображает последнюю проверку для каждого токена; свидетель, не прошедший проверку в течение 2,5 интервалов, помечается как просроченный. Новые свидетели отправляют случайный контрольный запрос при каждом опросе; оператор фиксации повторяет его под подписью сборщика. Счётчики привязаны к конкретной контрольной точке и включаются в подписанные сообщения свидетелей. Старые заголовки по-прежнему принимаются автономным свидетелем. Сам по себе рост объёма журнала никогда не учитывается как новое сообщение. ## Что проверяется и фиксируется Каждый интервал (по умолчанию — 10 минут) TgWitness: 1. самостоятельно извлекает заголовок (коллектор не может его добавлять или пропускать); 2. проверяет подпись сборщика, закреплённый ключ сборщика (`--collector-fingerprint`, или первый обнаруженный ключ), неубывающий счётчик и неизменную головку при неизменном счётчике. Доказательства включения и согласованности по Меркле подтверждают, что растущий журнал расширяет сохраненную контрольную точку. После использования доказательств непрерывности их удаление отклоняется; 3. добавляет подписанную запись в свой собственный журнал: `witness.anchor` со статусом `ok`, `key_changed`, `rollback` (меньше записей, чем ранее), `fork` (та же длина, другой заголовок) или `invalid` (ответ не прошел проверку), либо `witness.no_response`, если коллектор не ответил; 4. Результат публикуется в канале с подписью, включая ответ «no answer», пока TgWitness работает и имеет доступ к Bot API. Идентификатор публикации фиксируется (`witness.posted`), также фиксируется неудачная публикация (`witness.post_failed`). Запись выглядит следующим образом; в последней строке приводится подписанное заявление: ``` TgWitness witness #42 · journal head Collector 3fa9c2d1e0b4a7f6: 18234 records Head 9b1f…c07e 2026-10-28T19:40:00.123+00:00 TGW1.eyJhdCI6…. ``` ## Запустить Witness Вам потребуется бот Telegram (создайте его с помощью @BotFather), канал, в котором этот бот является администратором, а также адрес сборщика, доступный для свидетеля — через HTTPS за пределами частной сети (см. раздел «HTTPS» в разделе [«Развертывание»](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/)). Откройте **«Дополнительно» → «Независимый свидетель» → «Настроить»** на панели. Три шага охватывают доступ только для чтения, ваш канал и интервал, а затем запуск свидетеля. Политика публикации, опциональный прокси HTTP/SOCKS5 и пользовательский адрес Bot API находятся в разделе **«Расширенные настройки**». Форма загружает `witness.json` с закреплённым ключом сборщика данной рабочей области. Скачайте вновь созданный токен «только для чтения», выбрав **«Сохранить файл доступа** как» `witness-token.txt`»; поместите его и `bot-token.txt`созданный на хосте свидетеля рядом с этим JSON-файлом. Коллектор никогда не получает токен бота. Загрузка не запускает службу и не публикует сообщение. Ни один свидетель размещённого проекта не регистрируется неявно. ``` python -m tgwitness.witness run --config witness.json --check-config python -m tgwitness.witness run --config witness.json python -m tgwitness.witness fingerprint --config witness.json ``` Первая команда проверяет файлы конфигурации и секретные файлы без сетевых запросов и создания ключей. Пути в JSON являются относительными по отношению к данному файлу; пути CLI/окружения являются относительными по отношению к рабочему каталогу. Сохраняйте отпечаток свидетеля за пределами его хоста. Индикатор последнего опроса коллектора подтверждает лишь наличие запроса; о публикации сообщается через Proof или проверяется в журнале свидетеля и на канале. Если панель находится за SSH-туннелем, открывайте доступ только к конечной точке Witness с ограниченным доступом на отдельном HTTPS-хосте, как показано в [этом примере использования Caddy](https://github.com/phishdestroy/TgWitness/blob/main/deploy/Caddyfile.witness.example). Рабочая область по умолчанию использует `https://witness.example.org`, остальные рабочие области — `https://witness.example.org/profiles/ID`. Токены по-прежнему требуются; панель и её другие маршруты API не перенаправляются этим виртуальным хостом. Выберите `all` для регулярно публикуемых контрольных точек. Пятиминутный интервал означает около 288 записей на рабочую область в день. `changes`/`problems` намеренно оставляют некоторые проверки неопубликованными. MTProxy предназначен для клиента Telegram сборщика данных. HTTP-опрос Witness и HTTPS-интерфейс Bot API Telegram используют собственные маршруты: прямой, HTTP и SOCKS5 ([Bot API](https://core.telegram.org/bots/api)). **Рядом с коллектором, с использованием Docker** (на том же хосте — независимый процесс и ключ, но тот же оператор): введите значения в поле «`.env`» и запустите профиль. ``` TGWITNESS_WITNESS_TOKEN=tgww_... TGWITNESS_WITNESS_BOT_TOKEN=123456:ABC... TGWITNESS_WITNESS_CHANNEL=@your_witness_channel # another workspace: TGWITNESS_WITNESS_COLLECTOR=http://tgwitness:8787/profiles/ docker compose --profile witness up -d docker compose logs witness # prints the witness key fingerprint ``` При использовании опубликованного изображения указывайте код `docker compose --project-directory . -f deploy/compose/compose.image.yaml --profile witness up -d`. **На чужом сервере** (настоящем независимом «свидетеле»): скопируйте туда репозиторий, установите `TGWITNESS_WITNESS_COLLECTOR=https://your-collector.example.org` плюс три указанных выше значения в `.env`, затем ``` docker compose --project-directory . -f deploy/compose/compose.witness.yaml up -d ``` или без использования Docker: ``` python -m tgwitness.witness run --collector https://your-collector.example.org \ --token-file witness-token.txt --bot-token-file bot-token.txt --channel @your_witness_channel ``` ### Опубликовать в Discord Свидетель может публиковать сообщения в канале Discord вместо Telegram. В Discord откройте **«Редактировать канал» → «Интеграции» → «Веб-хуки»**, создайте веб-хук и скопируйте его URL. В панели на шаге 2 выберите **«Веб-хук Discord» · ваш канал**. На хосте свидетеля сохраните URL как `discord-webhook.txt` рядом с `witness.json`; он никогда не попадает в коллектор. ``` python -m tgwitness.witness run --collector https://your-collector.example.org \ --token-file witness-token.txt --discord-webhook-file discord-webhook.txt ``` У каждого свидетеля есть один источник публикации: канал Telegram или веб-хук Discord, но не оба одновременно. Сообщения содержат одно и то же подписанное заявление и не могут отправлять уведомления никому. Сообщение, превышающее ограничение Discord в 2 000 символов, заменяется короткой строкой с прикреплённым полным чеком в виде `witness-check.txt`. Каждый ID поста записывается как `witness.posted`. `verify.py --channel`считывает только экспорты каналов Telegram, поэтому для Discord ведите журнал свидетеля: в нём хранятся все чеки. ### Параметры | Вариант | Среда | По умолчанию | Значение | | --- | --- | --- | --- | | `--interval` | `TGWITNESS_WITNESS_INTERVAL` | 10 | Интервал между проверками: от 1 до 1440 минут | | `--timeout` | `_TIMEOUT` | 30 | Время ожидания запуска сборщика данных и API-интерфейса бота: от нескольких секунд до 5–600 | | `--post` | `_POST` | `all` | `all`: все в порядке; `changes`: новая проблема; `problems`: одни проблемы и отсутствующие ответы | | `--title` | `_TITLE` | `TgWitness witness` | Первые слова каждого сообщения в канале | | `--collector-fingerprint` | `_COLLECTOR_FINGERPRINT` | – | Зафиксируйте ключ сборщика, а не полагайтесь на первый ответ | | `--proxy` | `_PROXY` | прямой | `socks5://host:port` или `http://host:port` | | `--bot-api` | `_BOT_API` | `https://api.telegram.org` | Адрес API бота, например, локальный сервер API бота | | `--data-dir` | `_DATA` | `witness-data` | Ключ Witness и журнал | | `--config` | `_CONFIG` | – | Файл JSON с любым из перечисленных выше вариантов | Адрес коллектора, токены и канал берутся из `--collector`, `--token` или `--token-file`, `--bot-token` или `--bot-token-file`, `--discord-webhook-file` и `--channel`, или `_COLLECTOR`, `_TOKEN`, `_TOKEN_FILE`, `_BOT_TOKEN`, `_BOT_TOKEN_FILE`, `_DISCORD_WEBHOOK_FILE` и `_CHANNEL`, что позволяет скрыть секретные процессы из списка процессов. В файле конфигурации используются названия параметров с подчеркиваниями, а также `texts`, который заменяет слова в сообщениях канала: ``` {"collector": "https://your-collector.example.org", "token_file": "witness-token.txt", "bot_token_file": "bot-token.txt", "channel": "@your_witness_channel", "interval": 5, "timeout": 30, "post": "changes", "title": "Partner witness", "texts": {"ok": "journal head", "no_response": "no answer from the collector", "records": "records"}} ``` Ключи `texts`: `ok`, `key_changed`, `rollback`, `fork`, `invalid`, `no_response`, `collector`, `records`, `head`. Командная строка имеет приоритет над средой, а среда — над файлом. Неизвестные опции или текстовые ключи приводят к остановке работы Witness с выводом сообщения, а не игнорируются. Формулировка никогда не влияет на проверку: verify.py проверяет подписанный токен в конце каждого сообщения. В случае `--post changes` или `problems` проверки, которые не были опубликованы, по-прежнему находятся в журнале свидетелей, а `verify.py` указывает их как никогда не опубликованные; в начальной записи указывается политика. Каждая проверка по-прежнему отображается в журнале, поэтому меньшее количество публикаций означает меньшее количество независимых моментов отправки сообщений в Telegram, а не меньшее количество проверок. Даже без канала «Witness» продолжает вести свой журнал. Храните отпечаток ключа «Witness» (`python -m tgwitness.witness fingerprint`) в другом месте. ## Публичная страница с доказательствами для нескольких рабочих пространств `python -m tgwitness.proof` TgWitness одновременно поддерживает до 32 рабочих пространств и предоставляет страницу только для чтения с последней подписанной проверкой каждого из них. Каждое рабочее пространство получает собственный ключ свидетеля и журнал в папке data, а также закреплённый ключ сборщика; публикация в канале Telegram является опциональной для каждого рабочего пространства. Начните с файла [proof.config.example](https://github.com/phishdestroy/TgWitness/blob/main/deploy/proof.config.example): | Область применения | Значение | | --- | --- | | `title` | Заголовок страницы, 1–100 символов | | `data_dir` | Ключи и журналы Witness, относящиеся к файлу; по умолчанию `proof-data` | | `interval`, `timeout` | Интервал между проверками в минутах (1–1440, по умолчанию 5); время ожидания в секундах (5–600, по умолчанию 20) | | `workspaces[].id`, `label` | Краткий псевдоним в нижнем регистре и отображаемое имя | | `workspaces[].collector` | Адрес коллектора; адреса других рабочих пространств заканчиваются на `/profiles/` | | `workspaces[].collector_fingerprint` | Обязательно, отличается для каждой рабочей области | | `workspaces[].token_file` | Файл с токеном-свидетелем данного рабочего пространства, доступным только для чтения | | `workspaces[].channel`, `bot_token_file` | Дополнительно, в совокупности: публиковать каждую проверку в канале | | `workspaces[].proxy`, `bot_api` | Дополнительный маршрут и адрес API бота | ``` python -m tgwitness.proof --config proof.json --check-config python -m tgwitness.proof --config proof.json --host 127.0.0.1 --port 8790 ``` Первая команда проверяет файл и файлы токенов, не устанавливая соединение. Страница отвечает только на запросы GET и HEAD: - `/` Отображает все рабочие пространства; рабочее пространство, в котором в течение 2,5 интервалов не было отмечено ни одного элемента, помечается как устаревшее. - `/api/proof` Возвращает то же самое, что и JSON. - `/api/proof/` загружает последнюю подписанную отчётную запись (`tgwitness-public-proof-v1`): номер и хэш записи свидетеля, статус, закрепленный ключ сборщика, контрольная точка, счетчики сбора и информация об успешности публикации в канале, подписанная ключом свидетеля данной рабочей области. - `/healthz` Выдает ошибку 503, если монитор рабочего пространства перестал работать. Присвойте странице собственное имя хоста, например [Caddyfile.proof.example](https://github.com/phishdestroy/TgWitness/blob/main/deploy/Caddyfile.proof.example). Для проверки экспортируйте журнал свидетельств рабочей области с помощью `python -m tgwitness.witness export --data-dir proof-data/ --out witness.zip` и используйте его , как описано ниже. ## Проверить Со стороны свидетеля экспортируйте его журнал: ``` python -m tgwitness.witness export --out witness.zip # Docker (add -f deploy/compose/compose.witness.yaml on a witness server): docker compose exec witness python -m tgwitness.witness export --out /witness/witness.zip docker compose cp witness:/witness/witness.zip . ``` Затем в любом месте, используя подписанный ZIP-файл сбора данных и канал, экспортированный из Telegram Desktop (*Экспорт истории чата* → JSON даёт `result.json` ) или его общедоступную страницу `https://t.me/s/…` : ``` python verify.py tgwitness-evidence.zip --fingerprint COLLECTOR_SHA256 \ --witness witness.zip --witness-fingerprint WITNESS_SHA256 --channel result.json ``` `verify.py` проверяет журнал «Witness» (цепочку и подписи), а затем удостоверяется, что **каждый заголовок, который увидел «Witness», входит в экспортированный журнал**: запись с данным номером должна иметь именно этот хеш. Заголовок, не совпадающий с хэшем, не проходит проверку — журнал был изменен после того, как «Witness» его увидел. Он также сообщает о заголовках, увиденных после экспорта, аномалиях, которые зафиксировал свидетель, ответах, не прошедших проверку, периодах, соответствующие контрольные точки которых присутствуют в данном экспорте («Заверен с X по Y»), а также о пробелах. Более поздние контрольные точки не продлевают эти периоды. Результат включает номер последней совпавшей записи и количество последующих записей, не имеющих соответствующей контрольной точки. Учитываются только ответы, подписанные собственным ключом экспорта: экспорт, подписанный ключом, который свидетель никогда не видел, указывается как не подтверждённый, и без `--fingerprint` его подписант остаётся не закреплённым. При использовании `--channel` каждая подписанная запись должна совпадать с журналом свидетеля запись за записью: измененные записи не проходят проверку, отсутствующие записи указываются в списке. Дата в предоставленном экспорте Telegram в формате JSON является редактируемыми метаданными, не входящими в состав подписанного токена свидетеля. Совпадение токена не подтверждает подлинность даты публикации; в результате явно указывается, что проверка времени публикации не проводилась. ### Требуется граница экспорта с подтверждением Для передачи, которая должна включать заверенную окончательную запись, добавьте `--require-witness`: ``` python verify.py tgwitness-evidence.zip --fingerprint COLLECTOR_SHA256 \ --witness witness.zip --witness-fingerprint WITNESS_SHA256 --require-witness ``` Для этого требуется независимо сохраненный отпечаток свидетеля и соответствующая контрольная точка, расположенная точно в конце данного экспорта. Контрольная точка, охватывающая только более ранний префикс, является недостаточной. Приостановите сбор данных, позвольте свидетелю наблюдать за конечным состоянием и выполните экспорт до дальнейших записей в журнал; если журнал изменится, сохраните ещё одну контрольную точку и осуществите экспорт этого состояния. Один только более поздний контрольный точка не может подтвердить окончательный хеш более короткого экспорта. Если также указан флаг `--channel`, отсутствие заявленных сообщений или пустой набор совпадений приводят к сбою этой строгой проверки. Без этого флага обычные проверки целостности по-прежнему сообщают о записях, не подтверждённых свидетелем, не отклоняя при этом архив, который в остальном является целостным. Храните журнал свидетеля и его закреплённый ключ отдельно. Онлайн-проверки подтверждают непрерывность между контрольными точками; офлайн-проверка сравнивает каждую сохраненную контрольную точку с экспортом. Устаревшие головы без доказательств непрерывности сохраняют результаты офлайн-сравнения и указываются в отчёте без онлайн-проверки непрерывности. В отчёте перечислены время простоя свидетеля и неудачные публикации с разбивкой по интервалам. ### Ежедневные печати и недоступные календари временных меток Свидетель запечатывает границу журнала предыдущего дня по UTC и отправляет хеш этой подписанной печати в OpenTimestamps. Отправка в календарь является ожидающим подтверждения доказательством; только независимо проверенные обязательства Bitcoin получают подтверждение в верификаторе. Если все календари дают сбой, подписанная печать и неудачная попытка остаются в журнале. Ежечасный цикл обслуживания повторно обрабатывает эту исходную запись, в том числе после перезапуска или смены даты. Он сканирует не более 32 печатей, отправляет не более двух пропущенных отправлений и тратит не более 60 секунд на повторные попытки за один проход. Постоянный курсор циклически проходит по старым печатям. Сохраненные отправления следуют по существующему пути обновления доказательств. Повторная попытка не перезаписывает печать, не изменяет её исходную дату и не утверждает, что календарь получил её раньше. Более позднее обязательство Bitcoin остаётся более поздним внешним подтверждением. Отсутствующие доказательства остаются `none`; ожидающие доказательства остаются `pending` до тех пор, пока верификатор не проверит их независимо. --- # Метки времени RFC 3161 для доказательств Telegram Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/timestamp/ Временные метки RFC 3161 для подписанных контрольных точек: что отправляется в центр авторизации и как проверяется ответ. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Временные метки RFC 3161 для подписанных контрольных точек: что отправляется в центр авторизации и как проверяется ответ. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Доказательства и верификация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) TgWitness формирует запросы в соответствии со стандартом RFC 3161 и проверяет ответы от органа временных меток (TSA). Данная ручная процедура не предусматривает ни выбора TSA, ни отправки данных; режим сбора доказательств выполняет обе эти операции в соответствии с графиком ([формат доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#rfc-3161-preparation-and-response-verification-02)). Подготовленный запрос **ещё не** является **доказательством с временной меткой**. ## Что подтверждают эти доказательства Блок-схема · Наблюдения за аккаунтами → Цепочка SHA-256 и подписи Ed25519; Цепочка SHA-256 и подписи Ed25519 → Подписанный контрольный пункт; Подписанный контрольный пункт → Хеш с точностью до байта и случайный нонс; Хеш с точностью до байта и случайный нонс → Запрос по стандарту RFC 3161; Запрос по стандарту RFC 3161 → Независимая TSA; Независимая TSA → Подписанный ответ TSA; Подписанный контрольный пункт → Проверка данных, одноразового ключа (nonce) и явного доверия к центру сертификации (CA); Подписанный ответ TSA → Проверка данных, одноразового ключа (nonce) и явного доверия к центру сертификации (CA) · Наблюдения зааккаунтами · Цепочка SHA-256 иподписи Ed25519 · Подписанныйконтрольный пункт · Хеш с точностью добайта и случайный нонс · Запрос по стандартуRFC 3161 · Независимая TSA · Подписанный ответ TSA · Проверка данных,одноразового ключа(nonce) и явногодоверия к центрусертификации (CA) **Схема в текстовом формате** 1. Наблюдения за аккаунтами → Цепочка SHA-256 и подписи Ed25519 2. Цепочка SHA-256 и подписи Ed25519 → Подписанный контрольный пункт 3. Подписанный контрольный пункт → Хеш с точностью до байта и случайный нонс 4. Хеш с точностью до байта и случайный нонс → Запрос по стандарту RFC 3161 5. Запрос по стандарту RFC 3161 → Независимая TSA 6. Независимая TSA → Подписанный ответ TSA 7. Подписанный контрольный пункт → Проверка данных, одноразового ключа (nonce) и явного доверия к центру сертификации (CA) 8. Подписанный ответ TSA → Проверка данных, одноразового ключа (nonce) и явного доверия к центру сертификации (CA) Подпись сборщика привязывает записи к своему ключу. Доверенный ответ TSA позволяет установить, что конкретный контрольный пункт существовал в указанное TSA время. Затем контрольный пункт может привязать префикс журнала. Это не устанавливает время каждого действия в Telegram или достоверность зафиксированного содержания. ## Порядок действий 1. Храните отпечаток ключа сборщика через отдельный доверенный канал. Ключа, предоставленного исключительно из проверяемого ZIP-файла, недостаточно для идентификации сборщика. 2. В разделе **«Экспорт» → «Подготовить запрос с временными метками**» загрузите ZIP-файл запроса для выбранной рабочей области. Распакуйте файлы `checkpoint.json`, `timestamp.tsq`, `SHA256SUMS` и `README.txt`. Не изменяйте байты контрольной точки. 3. Выберите TSA, подходящий для данного расследования. Отправьте запрос `timestamp.tsq`, используя описанный в документации метод, а также запрос `application/timestamp-query` для HTTP-сервиса. Сохраните исходный двоичный ответ как `timestamp.tsr`, указав конечную точку, время получения и результат запроса. Запрос содержит хеш и нонс, а не сами сообщения; сетевые метаданные по-прежнему позволяют идентифицировать запрос. 4. Получите доверенный корневой сертификат независимо от ответа, а также любые необходимые промежуточные сертификаты. Сертификат, содержащийся в ответе, не становится доверенным лишь по той причине, что он там включен. 5. С помощью надёжной установки TgWitness проверьте следующее: ``` python -m tgwitness.anchor verify --checkpoint checkpoint.json --request timestamp.tsq --response timestamp.tsr --ca trusted-tsa-root.pem ``` При необходимости добавьте `--intermediates tsa-intermediates.pem` или `--openssl /path/to/openssl`. OpenSSL должен поддерживать `ts`. В Windows программа проверки также ищет стандартную установку Git. OpenSSL 3.5.9 был протестирован локально с использованием синтетического CA/TSA. 1. Экспортируйте ZIP-архив с подписанным журналом после контрольной точки, чтобы он содержал этот префикс. Проверьте с помощью независимо известного отпечатка: ``` python tgwitness/verify.py evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.json ``` 1. Сохраняйте ZIP-архив, контрольную точку, запрос, ответ, цепочку сертификатов, результаты проверки и запись о передаче данных вне коллектора. Повторите проверку при получении. Чтобы подготовить запрос на основе сохраненной контрольной точки: ``` python -m tgwitness.anchor prepare checkpoint.json --out timestamp-request.zip ``` Процедура подготовки канонизирует JSON и включает соответствующий контрольный точку в архив. Используйте **байты контрольной** точки **из этого архива** для проверки TSA, даже если входной файл содержал иные пробелы. ## Пределы проверки | Проверить | Текущее поведение | | --- | --- | | Данные | Сумма SHA-256 точных байтов контрольной точки должна совпадать с ответом | | Запрос | С помощью алгоритма `--request` проверяются исходный запрос и нонс | | Подпись TSA | OpenSSL проверяет подпись и цепочку до указанного центра сертификации (CA) | | Подпись сборщика | Отдельно проверено верификатором журнала с помощью закреплённого ключа | | Отзыв | Отсутствует автоматический запрос OCSP/CRL | | Долгосрочная достоверность | Отсутствие проверки архива после истечения срока действия сертификата | | Запланированная подача | Режим «Доказательства» по умолчанию отключен | `--request` технически не является обязательным, однако его пропуск препятствует проверке исходного нонса. Для выполнения данной полной процедуры значение `request_checked` в результате должно быть истинным. Проверка сертификатов осуществляется в соответствии с правилами и временем проверки, заданными в установленной версии OpenSSL. Для долгосрочного хранения требуется отдельная политика в отношении сертификатов и доказательств их отзыва. Наличие действительной криптографической подписи не означает автоматически наличие квалифицированной временной метки или определения юридической допустимости. Если оператор сфабриковал данные перед проставлением временной метки, TSA фиксирует эти байты; однако это не подтверждает их достоверность. ## Протокол передачи дел Зафиксируйте идентификатор дела, отправителя и получателя, время передачи по UTC и её источник, цель, имена файлов/значения SHA-256, отпечаток сборщика, диапазон последовательности, известные пробелы, версию средства проверки и результат проверки. Подпишите и независимо храните данную запись в соответствии с процедурами вашей организации. Система хранения записей с участием нескольких пользователей в TgWitness не реализована. В ходе разработки не осуществлялось взаимодействия с каким-либо независимым действующим центром сертификации (TSA). В ходе локального тестирования создаётся синтетический центр сертификации (CA/TSA) для проверки совместимости и отклонения изменённых данных, нонса или центра сертификации (CA). --- # Резервные копии Telegram: S3, Object Lock и восстановление Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/ Резервное копирование, перемещение старых файлов в облако, копии с защитой Object Lock и восстановление на новом компьютере. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Резервное копирование, перемещение старых файлов в облако, копии с защитой Object Lock и восстановление на новом компьютере. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) Панель разделяет три задачи: | Задача | Что он делает | | --- | --- | | Сохраняйте резервную копию | Скопируйте подписанный журнал, контрольные точки, сохраненные файлы и экспортные задания в очереди в настроенное хранилище S3. | | Бесплатное локальное хранилище | Скопируйте выбранные старые вложения в S3 или на удалённый облачный сервер rclone, полностью загрузите их обратно, проверьте зашифрованные байты, а затем удалите проверенную локальную копию. | | Сохраняйте копию доказательств | Настройте S3 Object Lock и проверьте возвращаемый статус хранения. Сервис должен подтвердить запрошенный режим и дату. | Освобождение места никогда не приводит к удалению или перезаписи подписанного журнала. Каждое вложение сохраняет свой исходный SHA-256 и квитанцию восстановления. Опциональное сжатие gzip происходит до шифрования с аутентификацией. Имена файлов в облаке не содержат имен Telegram, идентификаторов чатов или исходных имен вложений. Размер одного вложения может достигать 32 GiB. Сам по себе ответ на загрузку не является разрешением на удаление файла. TgWitness загружает полный зашифрованный объект, проверяет его размер и SHA-256, сохраняет квитанцию, а затем непосредственно перед удалением ещё раз проверяет локальные байты. Сбой загрузки, несоответствие при обратном считывании или отмена передачи оставляют локальный файл на месте. Если включённая резервная копия доказательств ещё не скопировала этот файл, удаление также откладывается до её завершения. **На этой странице** - [Когда диск заполняется](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#when-the-disk-is-filling-up) - [Подключить пункт назначения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#connect-a-destination) - [Сохранить файл восстановления](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#keep-the-recovery-file) - [Восстановление после потери установки](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#recover-after-losing-the-installation) - [Бот-оператор и уведомления о завершении](https://phishdestroy.github.io/TgWitness/ru/docs/reference/storage/#operator-bot-and-completion-notices) ## Когда заканчивается место на диске Загрузка вложений приостанавливается, когда свободного места становится меньше значения в **Параметры → Вложения → свободное место на диске** (по умолчанию 1 GiB); очередь сохраняется. Наблюдение за текстовыми сообщениями продолжается. Это не зависит от настроек уведомлений: их отключение не отменяет резерв для загрузок и защитные проверки хранилища. Для более раннего вмешательства включите **Запускать автоматически**, выберите **Удалять локальный файл для освобождения места** и включите **Запускать дополнительную выгрузку при нехватке места**. По умолчанию правило запускается при свободном месте ниже 5120 MiB и обрабатывает файлы партиями, пока не освободится 10240 MiB. Оба порога настраиваются. Используются те же назначение, минимальный возраст файлов, размер партии, полная проверка обратным чтением и требования к резервной копии доказательств, что и при ручном запуске. Назначение само не включается. Проверка выполняется каждые 30 секунд; ошибка или отсутствие прогресса откладывает следующую попытку на пять минут. Состояние правила и время повтора переживают перезапуск. Когда правило неактивно, плановые проходы сохраняют обычный интервал. Панель показывает свободное место, резерв для упаковки, готовность правила нехватки места и файлы, пропущенные из-за недостатка временного пространства. Перед упаковкой и восстановлением проверяется пиковая потребность во временном месте, а во время записи — доступный объём. Резерв соответствует настройке загрузок, но для операций хранилища составляет не менее 64 MiB. Это не квота файловой системы: другой процесс может занять место между проверками. Gzip сжимает удалённые объекты без потерь; активный журнал не уменьшается, локальные архивы не создаются. JPEG, видео и ZIP могут почти не сжиматься или немного увеличиваться. При включённом сжатии упаковке временно может потребоваться примерно двойной размер вложения плюс резерв. Задавайте порог запуска с учётом самых крупных файлов. Слишком большой файл сохраняется и отмечается в отчёте; меньшие файлы и ранее проверенные удалённые копии всё ещё могут освободить место. При наличии проверенной копии локальный файл можно удалить без создания ещё одного файла упаковки. Для восстановления также нужно временное место; при его нехватке операция может быть отклонена. Если подходящих для переноса файлов нет или назначение не настроено, TgWitness не сможет автоматически освободить место. Управление хранилищем никогда не сокращает и не переписывает подписанный журнал. Для новых текстовых наблюдений ему по-прежнему требуется место. ## Подключить пункт назначения В меню **«Дополнительно» → «Хранение и место на диске» → «Управление хранением**» выберите задачу и место назначения, сохраните её, а затем выберите **«Тестовая загрузка и скачивание**». В ходе теста загружается небольшой случайный тестовый файл, который затем считывается обратно. При этом не используется контент Telegram. Для S3 используйте фактический конечный пункт, регион и корзину провайдера. Wasabi, Backblaze, Cloudflare R2 и другие совместимые сервисы используют те же настройки S3. Наличие совместимого API само по себе не означает поддержку Object Lock. Режим «Управление» может позволять авторизованному администратору обходить сроки хранения; режим «Соответствие» имеет другие ограничения. Перед тем как полагаться на сроки хранения, ознакомьтесь с возвращаемым статусом Object Lock. Для назначения rclone создайте один удалённый сервер с помощью настройки провайдера rclone и вставьте раздел этого удалённого сервера `[name]` в панель. Установленный помощник поддерживает MEGA, Google Drive, OneDrive, Dropbox, Box, pCloud и других провайдеров, отображаемых в выборке. Учетные данные сохраняются в зашифрованном хранилище этого рабочего пространства. Данные обновления OAuth сохраняются обратно в хранилище. Учетные данные не добавляются в события журнала и не включаются в загрузки для восстановления. Вспомогательная программа устанавливается внутри рабочего пространства с закреплённой версией и SHA-256. Он не добавляется в системный PATH. Конфигурационные файлы и рабочие файлы являются временными файлами внутри данного рабочего пространства. Удалённые подключения на основе команд и локальных файлов не допускаются. В настоящее время rclone требует явно выбранного маршрута **Direct** для внешних запросов. Используйте собственное хранилище S3 для маршрута SOCKS5 или HTTP рабочего пространства; rclone не обходит недоступный маршрут без предупреждения. ## Сохраните файл восстановления Выберите **«Сохранить файл восстановления** после копирования файлов» и сохраните его в месте, отдельном от установки. Он содержит ключ дешифрования и подписанные квитанции объектов, поэтому относитесь к нему как к резервной копии секретного ключа. Храните исходную удалённую конфигурацию и учетные данные назначения также отдельно. Файл восстановления, созданный до последующего копирования, не содержит квитанцию этого более позднего файла. Отпечаток ключа подписи должен быть заранее зафиксирован отдельно. Подпись, проверенная только по ключу, приведённому в том же файле, не позволяет установить, чей это файл восстановления. Чтобы восстановить отсутствующие квитанции хранения в существующей рабочей области, откройте **«Восстановить файлы из сохраненного файла восстановления**» и выберите файл. Панель проверяет подпись и требует того же ключа подписи рабочей области. Она отказывается заменять другой ключ хранения. Затем выберите **«Восстановить все файлы**». Восстановление приостанавливает действие правила автоматического хранения, чтобы следующий запланированный цикл не смог сразу же снова удалить восстановленные файлы. Снова включите правило, когда закончите работу с локальными копиями. Функция «Restoration» проверяет шифротекст, аутентифицирует дешифрование, распаковывает, если необходимо, и проверяет исходный открытый текст SHA-256, прежде чем поместить файл в `media/`. Повреждённый удалённый объект никогда не заменяет локальный файл. Существующий локальный файл с отличающимися байтами сохраняется для проверки, а не перезаписывается. ## Восстановление после потери установки Установите TgWitness на другом компьютере. Используйте личный файл восстановления, отдельно записанный отпечаток и исходные учетные данные для входа: ``` python -m tgwitness.storage recover \ --recovery storage-recovery.json \ --fingerprint TRUSTED_WORKSPACE_SHA256 \ --credentials original-rclone.conf \ --output recovered-attachments ``` Для S3 `--credentials` указывает на частный JSON-файл с `access_key` и `secret_key`; подписанный файл восстановления предоставляет настройки места назначения. Команда использует прямое внешнее соединение и загружает закреплённый вспомогательный модуль , когда это требуется удалённому серверу rclone. Она отказывается использовать существующий каталог вывода. Восстановленные исходные байты записываются в `recovered-attachments/media/`, именованные по их идентификатору SHA-256. `recovery-log.jsonl` — это неподписанная запись операций восстановления. Команда не восстанавливает утраченный подписанный журнал или его ключ подписи. Для этого следует хранить полную резервную копию рабочего пространства. Файл восстановления хранилища не является полной резервной копией рабочего пространства . ## Бот-оператор и уведомления о завершении Бот Telegram принадлежит оператору. Создайте его через BotFather и настройте в панели его токен, целевой чат и явные разрешённые ID пользователей Telegram. И отправитель, и чат должны совпадать. Пересланные сообщения и команды от других ботов игнорируются. `/status` и `/stats` доступны в стандартном режиме «только статус». Дополнительный режим управления добавляет `/pause`, `/resume` и `/copy`. `/copy` запрашивает настроенную задачу хранения; это не означает, что удалённая загрузка уже завершилась. Команды не могут передавать произвольные URL-адреса, файлы или программы оболочки. Используйте отдельные настройки уведомлений для оповещений и завершения задач. Уведомления о завершении позволяют отличить экспорт аккаунта с пробелами от полного экспорта, а также показывают историю и количество записей в хранилище. Выдержки из сообщений не включаются, если это не включено отдельно в настройках уведомлений. Список сервисов формируется на основе фактического установленного каталога Apprise, а не фиксированного набора примеров провайдеров. --- # Модель безопасности TgWitness и хранение сессий Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/ Модель угроз, модель доступа, защита конфиденциальных данных в состоянии покоя, сетевая уязвимость, импорт сеансов и порядок сообщения об уязвимостях. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Модель угроз, модель доступа, защита конфиденциальных данных в состоянии покоя, сетевая уязвимость, импорт сеансов и порядок сообщения об уязвимостях. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/ru/docs/reference/deployment/) ![Развертывание и восстановление](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) На этой странице описываются доступ, хранение и сетевая защита в локальной рабочей среде или на сервере. Для сбора данных на GitHub Runner или в конфиденциальной виртуальной машине Intel TDX см. режимы [verification](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#verification-scope), которые добавляют проверки среды сбора данных. Подключения учетных записей, уведомления, временные метки, внесайтовые копии и свидетели имеют собственные настройки маршрутизации. | Область | Вкратце | | --- | --- | | Доступ | Ключ администратора, а также ограниченный доступ к аккаунтам и чатам, семь уровней прав доступа и сеансы с возможностью отзыва; по умолчанию используется localhost | | Секреты в состоянии покоя | Настройки сеанса, пары API, ключа подписи и прокси шифруются с помощью алгоритма Fernet | | Сообщения и мультимедиа | Данные хранятся в незашифрованном виде: рекомендуется использовать шифрование диска и строгие настройки прав доступа | | Целостность | Цепочка хешей SHA-256 и подпись Ed25519 на каждой записи | | Условия локального режима | Администратор хоста управляет рабочей областью и её ключом подписи; независимые контрольные точки сохраняют прежние границы журнала. | Информацию об отчетах об уязвимостях см. в [политике безопасности](https://github.com/phishdestroy/TgWitness/blob/main/.github/SECURITY.md). **На этой странице** - [Модель доступа](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#access-model) - [Содержимое панели и экспорт данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#panel-content-and-exports) - [Секретные данные в состоянии покоя](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#secrets-at-rest) - [Прокси-серверы и сетевые маршруты](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#proxies-and-network-routes) - [Вход в систему и импорт сеансов](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#sign-in-and-session-imports) - [Журналы и транспорт](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#logs-and-transport) - [Пределы целостности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#integrity-limits) - [Если вы подозреваете наличие проблемы](https://phishdestroy.github.io/TgWitness/ru/docs/reference/security/#if-you-suspect-a-problem) ## Модель доступа Токен главной панели предоставляет полный контроль. Другие пользователи могут получить [доступ с ограниченным объемом](https://phishdestroy.github.io/TgWitness/ru/docs/reference/access/) полномочий: выбранные рабочие пространства и чаты, разрешения, срок действия, ограничения по IP-адресам, ограничения на вход в систему и отзывные сессии. Пользователь с доступом, ограниченным чатом, не может выполнять операции в масштабе всего рабочего пространства, даже если соответствующее разрешение отмечено. Рабочие пространства используют общий процесс и не изолируют данные от администратора хоста. По умолчанию панель прослушивает соединения на localhost. При входе через браузер токен доступа обменивается на сессионные учетные данные; браузер отправляет их в виде токена «bearer». Он хранится в sessionStorage, а не в файле cookie аутентификации. Блокировка или выход из системы очищает сессию браузера. Закрытие браузера или завершение сессии не останавливает сбор данных. Выданные токены и учетные данные сеанса хранятся в виде хэшей в зашифрованном хранилище. Отзыв токена приводит к завершению связанных с ним сеансов; изменения прав доступа влияют на последующие запросы. Загруженные файлы невозможно отозвать. Администратор может ограничить также свои собственные сеансы браузера, однако скрипты, использующие токен главной панели напрямую, сохраняют полный доступ и обходят эти ограничения сеансов браузера. Число неудачных попыток аутентификации ограничивается по адресу клиента. При ограничении по IP-адресу используется адрес, видимый приложению; прежде чем полагаться на это ограничение, проверьте поведение обратного прокси-сервера. Учетные данные Witness остаются отдельными учетными данными для проверки работоспособности и контроля состояния, доступными только для чтения. ### Доступ к демо-версии `/api/demo-access` представляет собой намеренно неаутентифицированный начальный код для явно запущенной, изолированной синтетической демонстрационной версии. Он предоставляет отдельную возможность, действующую в течение срока жизни процесса, но никогда не предоставляет реальный токен панели или переопределение TGWITNESS_TOKEN. Для выдачи и использования требуются узел loopback и хост, отсутствие перенаправленных заголовков и отсутствие междоменных запросов. Дополнительные рабочие пространства или авторизованная сессия блокируют этот путь. Активные рабочие пространства никогда не выдают данную возможность. Демонстрационная версия не может связывать учетные записи или изменять настройки сбора данных. ## Содержание панелей и экспорт данных На данном сайте не используются внешние шрифты, аналитические инструменты, ресурсы CDN или встроенные удалённые мультимедийные файлы. Текст из Telegram вставляется в виде текста, а не HTML. Загруженные вложения предоставляются в виде двоичных вложений. При экспорте в формат JSONL сохраняются исходные строки; в HTML они кодируются; ячейки CSV, которые могут содержать формулы, снабжаются префиксом в виде апострофа. При экспорте исключаются секретные данные аутентификации и подписи, однако намеренно сохраняются собранные исходные метаданные, идентификаторы, а также, возможно, личный или конфиденциальный контент. В исходных метаданных могут присутствовать хэши доступа к Telegram и ссылки на файлы. ## Секреты в состоянии покоя Учетные данные API Telegram, сессия и ключ подписи зашифрованы с помощью Fernet. Для локальных сообщений и мультимедиа шифрование обеспечивается диском или томом хоста; в рабочей области хранятся обычные файлы. При экспорте может использоваться ZIP-архив с защитой паролем по стандарту AES-256, а для внесайтовых копий — AES-256-GCM. По умолчанию ключ хранилища находится в каталоге защищённых данных. Используйте внешний файл мастер-ключа, указанный ниже, для его отдельного хранения. В Unix новые файлы закрытых ключей используют режим 0600, а новые каталоги данных — 0700; в Windows установите ACL каталога для учётной записи службы и авторизованных администраторов. Существующие права доступа к каталогу сохраняются. ### Внешний мастер-ключ Для нового каталога данных TGWITNESS_VAULT_KEY_FILE может предоставлять внешний случайный главный ключ. HKDF-SHA256 и отдельный случайный соль вычисляют отдельный ключ Fernet для каждой рабочей области. Файл vault.external.json необходимо сохранить для восстановления. Отсутствие или неверность мастер-ключей приводит к сбою с закрытием. Существующие локальные хранилища не мигрируются автоматически. На панели отображается выбранный режим хранения ключей. Шифрование диска защищает локальные сообщения и мультимедийные файлы в любом режиме; подробности настройки см. в разделах « [подключение» и «](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/) защита данных». ## Прокси-серверы и сетевые маршруты Настройки прокси зашифрованы в хранилище. Пароли и секретные ключи MTProxy не возвращаются API и не записываются в записи доказательств. Каждая рабочая область выбирает свой маршрут Telegram и [режим IP](https://phishdestroy.github.io/TgWitness/ru/docs/reference/connection/#ip-modes). **Функция «Скрыть адрес»** отключает прямой резервный доступ к Telegram и требует использования прокси для внешних HTTP-запросов. Явно выбранный режим резервного доступа разрешает прямой доступ к Telegram после задержки; режим «туннель/VPN» разрешает прямые маршруты. Выбор режима «туннель» не влечёт за собой установку или проверку VPN. Эти настройки не контролируют весь трафик компьютера, браузеры, менеджеры пакетов или разрешение DNS локального прокси-хоста. MTProxy передаёт исключительно трафик Telegram. Для внешних запросов можно использовать отдельный прокси SOCKS5/HTTP, маршрут SOCKS5/HTTP рабочей среды или разрешённый прямой маршрут; их также можно отключить. Независимый свидетель имеет собственные настройки транспорта. Обычная аутентификация SOCKS5/HTTP CONNECT не шифруется самими этими протоколами прокси. Поддельные секретные ключи TLS для MTProxy по-прежнему не поддерживаются. ## Вход в систему и импорт сеансов Преобразованные файлы .tgwitness-session содержат секретный ключ авторизации в виде открытого текста до тех пор, пока они не будут загружены и сохранены в хранилище. Автономный интерфейс командной строки (CLI) поддерживает проверенные схемы Telethon. Функция импорта через панель управления дополнительно поддерживает форматы Pyrogram SQLite, современный ZIP-файл TData для одной учетной записи, а также задокументированные входы в формате JSON. Она проходит аутентификацию, ограничена четырьмя файлами / 8 MiB, и обрабатывает загрузки в памяти без извлечения архивов или сохранения исходных файлов. Нормализованные учетные данные возвращаются исключительно запрашивающему авторизованному браузеру; они сохраняются в зашифрованном хранилище после успешной авторизации в Telegram. Обеспечьте защиту исходных и преобразованных файлов и предотвратите клонирование авторизационных данных параллельными клиентами. В процессе обработки данных проверяются контрольные суммы контейнеров, хэши локального дешифрования и длины структур. Предоставленный локальный пароль для Desktop используется временно и не сохраняется. Данный ограниченный парсер не гарантирует совместимость со всеми версиями Desktop. Изображения QR-кодов генерируются локально, содержат краткосрочные токены входа в Telegram и никогда не отправляются во внешний сервис рендеринга. Блокировка, переключение рабочего пространства, новый вход в систему и изменение маршрута отменяют ожидающие попытки сканирования QR-кода. Перезагрузка или закрытие вкладки может привести к тому, что попытка останется в ожидании до истечения срока действия. Успешный вход с помощью QR-кода по-прежнему обеспечивает привязку учетной записи. Размер обычных тел запросов API по-прежнему ограничен 16 КиБ; маршрут импорта с аутентификацией принимает до 12 МиБ закодированного JSON, при этом отдельно применяется ограничение на размер декодированного файла. Коды входа и пароли двухэтапной аутентификации Telegram не сохраняются. Состояние номера телефона/хеша кода хранится в памяти во время авторизации. Сеансы Telegram предоставляют доступ к учётной записи; ни в коем случае не загружайте каталог данных, сеанс, токен, ключ хранилища или закрытый ключ подписи на GitHub. ## Журналы и передача данных Стандартный ответ API при проверке достоверности заменяется таким образом, чтобы он не повторял значения учетных данных. Регистрация доступа к приложению отключена. Не настраивайте обратный прокси-сервер так, чтобы он регистрировал заголовки авторизации или тела запросов. Протокол HTTP передаёт токены и секретные данные для входа в виде открытого текста: всегда используйте HTTPS или SSH-туннель при выходе за пределы localhost. ## Ограничения целостности Локальная верификация проверяет подписи записей, цепочку хешей, вложения и манифест экспорта. Администратор владеет локальным ключом подписи и может создать другой подписанный журнал; независимо хранящаяся контрольная точка обнаруживает замену префикса, который она охватывает. Храните отпечаток ключа и контрольные точки у получателя или у независимого свидетеля. Для независимо проверенного сбора данных выберите [Сбор данных с помощью GitHub Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md) или [Развертывание Intel TDX](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx). Их верификаторы проверяют происхождение рабочего процесса или аппаратные измерения в дополнение к целостности архива. Дополнительные временные метки и зашифрованные удалённые копии обеспечивают временные привязки и восстанавливаемые копии; формат доказательств описывает проверки для каждого режима. ## Если у вас возникли подозрения о наличии проблемы Сохраните исходный каталог данных и используйте отдельную копию для анализа. Сообщите о затронутой версии, операции и шагах, позволяющих воспроизвести проблему, через [политику безопасности](https://github.com/phishdestroy/TgWitness/blob/main/.github/SECURITY.md), сохраняя конфиденциальность данных учетной записи и учетных данных. --- # Архитектура TgWitness: сборщик, журнал и API Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/architecture/ Компоненты системы: сборщик, панель управления, журнал, рабочие процессы и модуль «witness», а также схема передачи данных между ними. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Компоненты системы: сборщик, панель управления, журнал, рабочие процессы и модуль «witness», а также схема передачи данных между ними. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Разработка](https://phishdestroy.github.io/TgWitness/assets/chapter-develop.svg) Один процесс на языке Python обеспечивает работу панели FastAPI и любого количества изолированных рабочих пространств, каждое из которых содержит клиент с учетной записью пользователя Telegram. В базе данных SQLite хранится подписанный журнал событий, доступный только для добавления, а также изменяемые операционные настройки. В зашифрованном хранилище находятся учетные данные API, объект StringSession и ключ подписи. Фронтенд представляет собой простой пакет HTML/CSS/JavaScript: не требуется сборка Node, использование CDN или загрузка фронтенда во время выполнения. Optional browser and AyuGram recorders run in **separate processes or containers**. The `tgwitness_capture` package owns their event format, keys, artifacts, checkpoint API, independent witness and standalone verifier. It is bundled in the main wheel and can also be installed alone from `addons/capture`, without importing the collector. The main panel's `capture_api.py` and `capture_connections.py` provide administrator-only, workspace-scoped controls under `/api/capture`; connection tokens live in the encrypted vault. No recorder or outbound request starts with the main process. Each explicit command verifies a fresh challenge against the pinned recorder key. Exports are verified before download and keep their original signature; they do not become Telegram message events. Collection sessions and proxy routes stay with each client. See the English [Independent capture guide](https://github.com/phishdestroy/TgWitness/blob/main/docs/OPTIONAL-CAPTURE.md) for deployment and trust boundaries. | Модуль | Ответственность | | --- | --- | | collector.py | Авторизация, выбор диалога, обновления, моментальные снимки, очередь мультимедиа, мониторинг соединения | | interactions.py / telegram_client.py | Четко описанные действия панели управления, подписанные подтверждения, постоянные идентификаторы запросов и политика повторных попыток обратного вызова/присоединения на уровне конкретной задачи | | message_content.py | Наглядное сравнение сообщений без учета метаданных транспортного уровня | | workers.py | Дождитесь завершения работы процессов экспорта файлов перед очисткой при отмене | | distributed_export.py / distributed_pages.py | Параллельные задания в чатах, резервирование по учетным записям, подписанные контрольные точки и очистка после проверки архива | | distributed_takeout.py / export_timing.py | Возможность возобновления сеансов Takeout и время запуска или возобновления каждого сеанса | | store.py | Транзакции WAL, упорядоченная цепочка событий, фильтры запросов, операционные настройки | | fulltext.py | Производный полнотекстовый индекс (формы слов, BM25), привязанный к заголовку подписанного журнала; никогда не экспортируется | | security.py | Создание частных файлов, зашифрованное хранилище, подпись с использованием алгоритма Ed25519, блокировка одного процесса | | evidence.py | Экспорт полного журнала, производные файлы, контрольные точки, проверка вложений | | verify.py | Автономный верификатор, доступный только для чтения (stdlib + криптография): архивы, охват, журналы свидетелей и сообщения в каналах, файлы профилей | | app.py | Аутентифицированный API, жизненный цикл, проверка запросов, статическая панель | | profiles.py | Средства сбора данных из нескольких учетных записей, механизм управления общим доступом, жизненный цикл на уровне рабочей среды | | access.py | Гранты с ограниченным охватом, проверка разрешений, ограничения по IP-адресам, ограничения на количество сеансов и консоль администратора | | proxy_catalog.py | Снимки общедоступных каналов, проверки транспортных протоколов, общий пул прокси-серверов и отбор на основе работоспособности | | provenance.py | Подписанные измерения идентичности, кода и зависимостей, выполняемые в режиме сбора данных | | network.py | Проверенные маршруты для каждой рабочей среды; отредактированные данные о статусе и доказательствах; варианты передачи данных через Telethon | | sessions.py | Офлайн-конвертация проверенных схем баз данных Telethon в формате SQLite в режим «только для чтения» | | account_import.py | Обнаружение и нормализация поддерживаемых файлов учетных записей и JSON-файлов в памяти | | tdata.py | Ограниченный современный считыватель ZIP-файлов TData, проверка контрольных сумм и дешифрования, без извлечения данных | | doctor.py | Проверка готовности на локальном устройстве без сбора данных, входа в систему или установки пакетов | | download.py | Загрузка аутентифицированных потоковых данных с ограниченным объёмом чтения и без перезаписи | | monitoring.py | Проверенные политики событий для каждого рабочего пространства и правила для вложений по типам, общие для обработчиков, статусов и подписанных подтверждений получения | | scope.py | Область мониторинга (выбранные чаты, папка Telegram, весь аккаунт), типы источников, исключения, уровни повторной проверки | | dossier.py | Профили участников по каждому чату, сформированные на основе сохраненных записей: факты со ссылками на записи, SHA-256/pHash аватаров, извлечение упоминаний | | witness_api.py | Токены свидетелей, доступные только для чтения, и подписанная заголовочная часть журнала, которую они могут получить | | witness.py | Процесс независимого фиксирования: собственный ключ и журнал, проверка подлинности, подписанные сообщения в каналах, экспорт | | alerts.py | Уведомления Apprise и список уведомлений на панели | | logging_config.py | Ведение журнала консоли и ротация диагностических данных сервера при запуске без оконного интерфейса | | static/ | Адаптивный интерфейс, локальный шлюз доступа, фильтры, подробная информация, экспорт данных, настройка учетной записи | | demo.py | Чётко обозначенный синтетический журнал, изолированный от реального массива данных | Обработчики наблюдения регистрируются до установления соединения. Сбор данных в режиме реального времени ограничивается идентификацией активного клиента, явным состоянием работы, включенными источниками или областью наблюдения (режимы «папка» или «весь аккаунт» добавляют новый чат в качестве источника при его первом обновлении), а также политикой обработки событий. Отклоненные и замененные клиенты не могут передавать обновления в режиме реального времени. Необработанные реакции и обновления членства сохраняют ограничения видимости. Содержимое входящего сообщения и его задание на сохранение в постоянном носителе фиксируются одновременно. Задания сохраняют исходный дескриптор TL и привязывают его хеш к подписанному наблюдению за сообщением. Семантика отправителя, редактора и удаляющего лица разделена. Каждая рабочая область поддерживает одну учетную запись и имеет собственный каталог и идентификатор для подписи. Главная рабочая область по-прежнему находится в корневом каталоге в целях обеспечения совместимости; дополнительные рабочие области размещаются в profiles//. Один токен-носитель управляет всей установкой; рабочие области не являются отдельными субъектами авторизации. Блокировки процессов защищают каталоги; блокировки базы данных обеспечивают последовательную вставку событий. Каждое добавление синхронно фиксируется в журнале WAL базы данных SQLite в режиме FULL. Триггеры обновления/удаления событий предотвращают обычные изменения со стороны приложения; администраторы файловой системы остаются в пределах зоны доверия. Авторизация API осуществляется с помощью токена bearer. Операции входа в систему сериализуются и ограничены по времени. При загрузке данных в аккаунт используются специальные ограничения: 12 MiB для кодированного тела и 8 MiB для декодированного файла; для обычных запросов API сохраняется ограничение 16 KiB. Преобразование выполняется в рабочем потоке, сохраняет загрузки в памяти и возвращает нормализованные входные данные в авторизованный браузер. Вход по QR-коду имеет кандидат на каждое рабочее пространство, кратковременный идентификатор, задачу ожидания и явную отмену. Только принятая авторизация становится активным клиентом. Telegram FloodWait возвращается со значением Retry-After; учетные данные и исходные сообщения об ошибках RPC не раскрываются в ошибках API. Экспорт журналов выполняется вне асинхронного цикла событий и сериализуется для каждого рабочего пространства. Они передают стабильный снимк чтения наряду с продолжающейся записью в WAL. Задания по сбору данных из чатов могут выполняться одновременно на разных учётных записях; каждая учётная запись остаётся зарезервированной до тех пор, пока её задание не завершится. Приостановленное или завершившееся с ошибкой задание сохраняет свои контрольные точки. Успешная проверка архива позволяет очистить его рабочие файлы, оставив ZIP-архив, подписанный план и статус. Коллекторы рабочих пространств используют общий процесс/цикл событий. Текущие моментальные снимки истории и обновления в режиме реального времени могут пересекаться. Оба представляют собой отдельные наблюдения, помеченные с указанием источника; дубликаты не сворачиваются автоматически. Не реализовано никаких выводов на основании отсутствующих идентификаторов, сфабрикованного удалённого текста, принудительного перечисления участников или автоматического вступления в группу . Практическое описание для оператора: [как работает сбор данных](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) и [аккаунты и форматы сессий](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/). Настройки сети хранятся в зашифрованном хранилище. Применение маршрута приводит к закрытию старых клиентов и отмене незавершённых попыток входа; последующие подключения используют этот маршрут без прямого резервного перехода. При новой установке с использованием внешнего ключа для каждого рабочего пространства генерируется ключ Fernet с помощью алгоритма HKDF-SHA256 на основе файла мастер-ключа и сохраненного случайного солевого значения. Это обеспечивает защиту конфиденциальных данных отдельно от каталога данных, а не содержимого журнала или мультимедиа в виде открытого текста. Местный демо-доступ использует отдельно сгенерированные процессуальные возможности, но ни в коем случае не настроенный токен панели. Для выдачи и принятия требуется явный демо-режим, синтетический корневой домен без дополнительных рабочих пространств или авторизованной сессии, пир/хост с обратной связью, отсутствие прокси- заголовков переадресации и отсутствие междоменных запросов браузера. Активные API сохраняют аутентификацию по носителю и отклоняют изменения в сборе данных в демонстрационном режиме. --- # Проверки TgWitness: результаты и ограничения Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/ Тестирование Telegram в режиме реального времени, автоматические проверки, проверки в браузере и то, что пока остаётся непроверенным. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Translation coverage: this edition includes material from the English original. Тестирование Telegram в режиме реального времени, автоматические проверки, проверки в браузере и то, что пока остаётся непроверенным. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Доказательства и верификация](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ![Доказательства и верификация](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) **Обновлено 6 ноября 2026 года.** Результаты привязаны к ревизии, среде и рабочей нагрузке, зафиксированным для каждого запуска. В разделе [Текущие возможности](https://github.com/phishdestroy/TgWitness/blob/main/docs/STATUS.md) описаны доступные рабочие процессы; на этой странице зафиксировано то, что было фактически проверено. [Графики производительности](https://phishdestroy.github.io/TgWitness/docs/validation/) · [Аудит на английском языке с подписью](https://github.com/phishdestroy/TgWitness/blob/main/website/validation/audit/REPORT.md) · [Измерительные данные для скачивания](https://github.com/phishdestroy/TgWitness/blob/main/website/validation/audit/MEASUREMENTS.csv) | Последние доказательства | Результат | Объём работ | | --- | --- | --- | | Аудит выпуска · 6, ноябрь | Тесты ядра 1,461 пройдено; тесты платформы 37 пропущены | Источник `92e539af40d8`; открытые выводы сохранены | | Свежие экспорты · 6 ноября | 127.713 и 141.781 записей/с, полный цикл | Два аккаунта на каждый сервер; текст и метаданные передаются через WARP | | Сохраненные архивы · 6, ноябрь | Архивы 48; записи 3,598,381 проверены | Существующие архивы проверены по закреплённым ключам рабочей области | | Trusted Live · 5 ноября | Защищенная запись данных процессора и проверки WARP | Официальный вход в систему с настольного компьютера и нативный экспорт остаются без оговорок. | | Phala / Intel TDX · 4 ноября | Все проверки верификатора 16, прошедшие в последующих запусках | Историческое развертывание; учетной записи Telegram на CVM нет | **На этой странице** - [Аудит выпуска и новые экспорты · 6 ноября 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#release-audit-and-fresh-exports--6-november-2026) - [Trusted Live CPU Ubuntu и WARP · 5 ноября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#trusted-live-cpu-ubuntu-and-warp--5-november-2026) - [Развертывание Phala Cloud в режиме реального времени · 4 ноября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#live-phala-cloud-deployment--4-november-2026) - [Актуальный перечень журналов сервера · 1 ноября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#live-server-journal-inventory--1-november-2026) - [Последние проверки в автономном режиме и с имитацией сбоев · 1 ноября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#recent-offline-and-fault-injection-checks--1-november-2026) - [Тестирование Telegram в режиме реального времени, полная учётная запись · 29 октября 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#live-telegram-test-whole-account--29-october-2026) - [Экспорт, защищённый паролем, открывается с помощью libarchive · 29 октября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#password-protected-export-opened-with-libarchive--29-october-2026) - [Тестирование Telegram в режиме реального времени · с 27 по 29 октября 2026 года](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#live-telegram-test--27-to-29-october-2026) - [Синтетическое измерение локальной пропускной способности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#synthetic-local-capacity-measurement) - [Полнотекстовый поиск по миллиону сообщений · 5 ноября 2026 г.](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#full-text-search-on-one-million-messages--5-november-2026) - [Остальные уточнения](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/#remaining-qualification) ## Аудит выпуска и новые экспорты · 6 ноября 2026 г. В ходе аудита использовалась версия v0.9.1 на этапе исходного кода `92e539af40d8368d198ff5e040f1d876f2c1310e`, релиз `92e539af40d8-83e41104669e`. Проверки работоспособности установленных пакетов прошли успешно на трёх серверах. Подписанный отчёт отражает состояние, наблюдавшееся на тот момент. [![Показатели сбора данных и полного экспорта для двух новых рабочих нагрузок](https://phishdestroy.github.io/TgWitness/assets/performance.svg)](https://phishdestroy.github.io/TgWitness/docs/validation/) | Нагрузка | Записи | Приобретение | Полный цикл | Производительность полного цикла | | --- | --- | --- | --- | --- | | Сервер A · две учетные записи | 27,030 | 189.043 s | 211.647 s | 127.713 записей/с | | Сервер B · две учетные записи | 29,299 | 182.513 s | 206.650 s | 141.781 записей/с | Оба экспорта начались без возобновления, исключили вложения и аватары и завершились без дубликатов или повторно использованных записей. Полный цикл включает подготовку, сбор данных, отбор, упаковку и проверку архива. На сервере A также была выполнена проверка чтения защищённых чатов. Были учтены четыре события FloodWait на сервере A и три — на сервере B. Эти наблюдения не дают оснований для общей гарантии пропускной способности. | Проверить | Результат | Квалификация | | --- | --- | --- | | Ядро pytest | 1,461: пройдено | Пропуски платформы 37 | | Браузер / пользовательский интерфейс браузера / доказательства / сайт | 102 / 66 / 15 / 9 пройдены | Эти программы частично дублируют другие тесты; результаты не суммируются | | Дополнение Capture | 124: пройден | Три официальных веб-проверки заблокированы требуемой песочницей Chromium | | Авторизация API | Маршруты 269; запросы 538 прошли | Отсутствующие учетные данные и отозванный доступ | | Сохраненные архивы | 48 из 48 проверено | Записи 3,598,381; закреплённые ключи рабочей области | | Проверка считывания сообщений в режиме реального времени | Профили 24 из 40 прошли проверку | Маршруты WARP 16 не прошли квалификацию; эти профили не были подключены | Отчет [signed report](https://github.com/phishdestroy/TgWitness/blob/main/website/validation/audit/REPORT.md) фиксирует все открытые находки, включая три дефекта в неопубликованном снимке секретного чата, отсутствующем в проаудированной основной сборке. В более ранней [оценке публичной истории](https://github.com/phishdestroy/TgWitness/blob/main/docs/EXPORT-BENCHMARK-2026-11-06.md) использовались иная версия и иная нагрузка; её показатели не должны суммироваться с данными этого сравнения. Проверьте исходный отчёт с помощью закреплённого ключа [и верификатора](https://github.com/phishdestroy/TgWitness/blob/main/website/validation/audit/README.md#verify-the-original-files). Его подпись защищает отчёт оператора от изменения. Это не является независимым подтверждением, доказательством авторства в Telegram или сертификацией по GDPR. ## Trusted Live CPU Ubuntu и WARP · 5 ноября 2026 г. В сохраненном цикле интеграции использовалась гостевая система Ubuntu 24.04.5, работающая только на ЦП (4 vCPU, 8 GiB) под управлением QEMU внутри хоста RunPod CPU. Коллектор использовал `14e642a5`; для верификации — `02072461`. Окончательные исправления были объединены в [PR #114](https://github.com/phishdestroy/TgWitness/pull/114) как `755f78f6`, дерево которого соответствовало тестируемой вершине PR. Это не была TEE. - Реальный WARP-коннектор сообщил о нормальном состоянии; проксированный HTTPS сообщил, что WARP и шлюз включены. Три зонда зафиксировали один и тот же исходящий адрес, что не гарантирует фиксированный IP-адрес. - Отключение WARP привело к сбою проксированного запроса. Прямой HTTPS-запрос к шлюзовому сервису был отклонен. В пространстве имён регистратора были заблокированы прямые IPv4/IPv6-адреса, внешний DNS и встроенный UDP-резолвер Docker. - Токен провайдера с ограниченным доступом только для чтения мог считывать данные о работоспособности/подключениях, но не мог считывать токен регистрации коннектора. Подписанные наблюдения провайдера включали явно недоступные образцы. Свидетель работал на хосте оператора, поэтому это демонстрирует запись и хранение данных, а не независимое хранение третьей стороной. - Official Desktop перешёл к экрану приветствия без авторизации. Защищённый ввод с клавиатуры был отклонен во время захвата. Декодированы три сегмента дисплея H.264, и проверена их накладка с часами. Архив предварительной проверки события 18 был сверен с закреплённым ключом регистратора и сохраненной контрольной точкой. - Заключительные тесты на захват прошли случаи 114 на CI-средах Windows и Linux с использованием реальных версий Chromium/FFmpeg. Пять базовых тестов и проверки рекомендаций по зависимостям прошли успешно. Первоначальный запуск 2 vCPU/4 GiB завершился таймаутом при одновременной нагрузке на сборку образа и был остановлен системой защиты; он не считается успешным. Ручной вход в тестовую учетную запись, экспорт исходного чата, реальное гибридное сравнение и выход из Telegram остаются незавершёнными. Ни одна из предоставленных сессий Telethon не была импортирована. Вложения, автоматическое распознавание текста (OCR), локальная проверка drand BLS и аттестация Trusted Live TDX не прошли квалификацию. ## Развёртывание на реальном Phala Cloud · 4 ноября 2026 года **Исторический результат: последующие версии** прошли все проверки верификатора 16, включая Intel TDX и быстрый туннель. Перезапуск доказательств, обнаружение подписанных адресов и временные метки отчетов проверялись отдельно. Каждый тестовый CVM удалялся после завершения работы. | Настройка | Записанное значение | | --- | --- | | Провайдер | Phala Cloud · `tdx.small` · US-WEST-1 | | Развертывание | `--provider phala --quick-tunnel`; рабочая область изначально пуста | | Начальный сборщик данных | `df7d860c` · v0.8.1 | | Коллектор со всеми исправлениями | `53a0f7e9` | | Гость производственной среды | `dstack-0.5.12`; доступ по SSH отключен | | Внешние сервисы | ntfy.sh, GitHub и Intel PCS | | Наблюдаемая стоимость | Семь CVM, общая стоимость около 1.9 цента США; исторические цены тестирования | В приведённой ниже последовательности отдельно указаны первоначальные сбои, исправления и завершённые проверки. К этим CVM не было подключено ни одной учётной записи Telegram. **Развертывания 1–2 · различия между провайдерами и регрессионные проверки** The first two deployments found five differences from the simulated Phala Cloud. Private Phala regressions reproduce each difference and fail without its fix: | В Phala Cloud | До исправления | Исправление | | --- | --- | --- | | Требуется `compose_file.name` | HTTP 422, ничего не создано | В конфигурацию compose добавлено имя CVM | | Если не указан пустой скрипт, Phala добавляет свой собственный скрипт предварительной подготовки к тестируемому app-compose (v0.0.20: вход в Docker, `docker compose pull`, пароль root, ключи SSH из `user_config`) | Ошибка `tdx_compose`: код находится за пределами опубликованной конфигурации Docker Compose | app-compose устанавливает значение `pre_launch_script` равным `""`; затем Phala исключает его из процесса | | В отсутствие `image` Phala выбирает `dstack-dev-0.5.12` — версию для разработчиков с включённым доступом по SSH | `server_state` не проходит проверку. Сама аттестация на этом образе прошла; проблему выявляют только запись провайдера и `tdx_os` | Система развёртки запрашивает производственную сборку текущего выпуска Phala — `dstack-0.5.12` | | При отключенном шлюзе dstack данные CVM никогда не получают `instance_id` | Развёртывание ожидает 30 минут и завершается с ошибкой | Идентификатор экземпляра считывается из состояния CVM | | Перезапуски, остановки и запуски являются операциями CVM, а не ревизиями приложения | В `provider_actions` не были указаны перезапуски | Операции также считываются | **Развертывание 3 · аттестация, проверка доступа и доказательства перезапуска** - Виртуальная машина CVM запустила `dstack-0.5.12` с отключенным доступом по SSH. Коллектор опубликовал свой подписанный адрес примерно через 1,5 минуты после создания. Затем развертывание прошло успешно для `tdx_binding`, `tdx_quote` (Intel TCB UpToDate, запись аттестации аппаратного обеспечения v4, FMSPC `20a06f000000`, не в режиме отладки, не подлежит миграции, с поддержкой данных криптографической проверки, полученных от Intel), `tdx_compose_hash`, `tdx_compose` (байт за байтом) и `tdx_identity` (ключи KMS). - Панель по адресу trycloudflare.com отвечала кодом 401 без токена или с неверным токеном, а также кодом 200 при наличии токена панели. - `verify` с `--source`, установленным на архив GitHub для данного коммита, а отпечаток передан отдельно: сервер, `server_state`, брандмауэр (без шлюза, без публичной конечной точки), журнал провайдера, отчет, отпечаток, хеш источника, загрузка и пять проверок `tdx_*` прошли успешно. Cloudflare и `tdx_os` были недоступны, поэтому результат был «НЕЗАВЕРШЕННЫЙ». - Два перезапуска через API Phala: каждый раз CVM восстанавливалась менее чем за две минуты с тем же ключом коллектора, новым подписанным адресом и старым адресом, отвечающим кодом 530. `verify` сообщил о новой загрузке и обоих перезапусках как о REVIEW. С помощью `--evidence` были подтверждены подписи журнала и три запуска, каждый из которых сопровождался собственной записью аппаратной аттестации Intel TDX из той же CVM. - `destroy` удалил только этот CVM. После этого рабочая область оказалась пустой, и адрес панели перестал отвечать. - При проверке цены в мастере панели было указано значение `tdx.small` по цене 0,058 доллара в час. При использовании неверного ключа выводилось простое сообщение «API-ключ не принят». **Последующие исправления · обнаружение подписанных адресов и измерения ОС** - Without the address key, `verify` followed the newest well-formed post on the address topic, which is printed in the published compose. One forged post sent it to a host that does not exist, and `statement` failed: a forger could not pass as the collector, but could block third-party verification, for up to 12 hours with a forged future timestamp. The collector now also posts its address signed with its own key, `verify` accepts only such posts when the collector makes them, and posts are ordered by ntfy.sh's receive time. A private cloud-wizard regression replays the forged posts. A CVM runs this only from a commit that contains it, so this run's collector did not sign its address yet and `verify` said so. - `tdx_os` не мог работать без `dstack-mr`, текущая версия которого имеет `measure-os` вместо `measure --json`, указанного в документации. Теперь верификатор самостоятельно вычисляет MRTD и RTMR0-2 на основе опубликованного образа и конфигурации виртуальной машины, включая таблицы ACPI. **Развертывание 4 · все проверки 16, печати отчетов и проверка перезапуска** - Система развертывания один раз загрузила опубликованный файл `dstack-0.5.12`, сопоставила его с хешем образа ОС, сообщённым виртуальной машиной CVM, и файл `tdx_os` прошел проверку: значения MRTD, RTMR0, RTMR1 и RTMR2 совпали со значениями, рассчитанными для QEMU 8.2.2, 1 vCPU и 2 GiB. Те же вычисления дали иное значение RTMR0 для заявленных 4 GiB, 2 vCPU, QEMU 9.2.1 или второй сетевой карты, а также завершились сбоем при изменении ядра, прошивки или командной строки и для образа для разработчиков. - `verify` прошел все 16 проверок, включая проверку коннектора быстрого туннеля, поэтому результат составил «PASS». Он сформировал сертификат в форматах HTML и PDF, заверенный цифровыми подписями и временными метками, включая квалифицированную временную метку eIDAS от подразделения по присвоению временных меток правительства Бельгии TSU 202301 (статус присвоен в рамках бельгийского списка доверенных организаций), временную метку FreeTSA и подпись верификатора; `check-report` подтвердил все вышеперечисленное, а также подпись PDF-файла. - После перезапуска `verify --evidence` подтвердил два запуска: каждый с аттестацией, сформированной внутри CVM, и каждый с загрузкой опубликованного `dstack-0.5.12`. Перезапуск и новая загрузка получили статус REVIEW. - `destroy` оставил рабочую область пустой. **Развертывание 5 · обнаружение сообщений, подписанных сборщиком, и отклонение поддельных сообщений** Сборщик работал на основе коммита `53a0f7e9`, в который включены вышеуказанные исправления. - Коллектор опубликовал свой адрес, подписанный собственным ключом, рядом с сообщением оператора с HMAC. Затем в эту тему были добавлены два поддельных сообщения: одно с обнулённым HMAC, а другое — подписанное другим ключом Ed25519; в обоих случаях указывалось время в 2096 году. `verify` взял адрес, подписанный ключом сборщика, и прошел все 16 проверок; печать вновь содержала квалифицированную бельгийскую временную метку, временную метку FreeTSA и подпись верификатора, а `check-report` подтвердил их. - После перезапуска сборщик опубликовал новый подписанный адрес: `verify` нашёл его сразу, а функция оператора **Найти текущий адрес** — через 27 секунд по сообщению с HMAC. Оба способа проигнорировали поддельные сообщения. `verify --evidence` подтвердил два запуска с загрузкой `dstack-0.5.12`. - Система развертывания отобразила сумму, которую Phala выставляет в счёт за CVM, включая диск: 0,06078 доллара в час. ### Мастер панелей и оставшийся объем работ Мастер панели проверили на Phala Cloud дважды: через API заданий и через настоящий браузер Chromium. Проверили цену, создание с выбором коммита в разделе **Дополнительно**, успешное прохождение всех шести проверок аттестации, отображение выставляемой цены в списке серверов (44,37 USD в месяц), функцию **Найти текущий адрес**, скачивание конфигурации compose, учтённой в измерениях, и удаление. Ошибок страницы в браузере не было. После каждого прогона рабочая область оставалась пустой. Не охвачено: домен Cloudflare на Phala, аккаунт Telegram на CVM и образ `dstack-0.6.1`. Стоимость мастера до создания соответствует только стоимости вычислительных ресурсов Phala, поскольку его API указывает стоимость дискового пространства только для существующего CVM; в списке серверов показана стоимость, выставленная к оплате после создания. Все цены в этом разделе были зафиксированы 4 ноября 2026 года. ## Актуальный перечень журналов сервера · 1 ноября 2026 г. Примерно в 19:15 UTC последовательные запросы SQLite `query_only`, доступные только для чтения, подсчитали события в десяти базах данных рабочих пространств на работающем сервере. Сбор данных продолжался во время выполнения запросов, поэтому это не является атомарным моментальным снимком по всем рабочим пространствам. | Наблюдалось в десяти базах данных рабочих пространств | Количество | | --- | --- | | Рабочие пространства, содержащие хотя бы одно событие `message.new` | 8 | | Записи журнала, включая оперативные события | 1,610,818 | | События `message.new` | 900,232 | | События `message.edited` | 80,683 | | События `message.deleted` | 400,536 | | События `message.recovered` | 53,403 | | События `message.snapshot` | 2,183 | | События `media.saved` | 50,418 | | События `media.failed` | 5,575 | | События `coverage.gap` | 11 | | Объем базы данных в байтах, без учета файлов WAL и мультимедиа | 7,909,003,264 | Речь идет о **количестве событий**, а не об уникальных сообщениях, пользователях или медиафайлах. Одно и то же сообщение может появляться в нескольких рабочих пространствах, а редактирование или удаление может привести к появлению другого события в журнале. `media.failed` учитывает исторические события сбоев, а не текущую очередь медиафайлов. В ходе запросов **не** проводилась повторная проверка подписей и полной хеш-цепочки всех 1,610,818 записей, не измерялись показатели доставки или пропускной способности, а также не устанавливалось, что каждое событие Telegram было зафиксировано. Здесь не публикуются ни содержание сообщений, ни идентификаторы аккаунтов или чатов, ни метки рабочих пространств, ни учетные данные, ни личные файлы. На момент данного обзора отдельно настроенный публичный монитор охватывал три источника: один ответ на запрос был в порядке, а два сообщили `no_response`. Этот монитор не является сводкой работоспособности десяти рабочих пространств. `no_response` означает, что наблюдатель не смог получить ответ при данной проверке; это не подтверждает потерю сообщения. Более мелкий тест от 29 октября, приведенный ниже, имеет собственную явную проверку подписи и хеш-цепочки. ## Последние проверки в автономном режиме и с имитацией сбоев · 1 ноября 2026 г. В этих проверках используются вымышленные данные и локальные файлы; они добавляют регрессионные данные для текущего источника, а не для другого реального измерения доставки в Telegram: | Проверить | Что было протестировано | | --- | --- | | Source archive | Две сборки с идентичными байтами исходного кода, но с измененными временами создания файлов дали одинаковый ZIP-архив и контрольную сумму. Точные байты архива и хеши файлов совпали; частные тестовые файлы остались вне архива. Симулированный сбой записи не повлиял на предыдущий архив и контрольную сумму. | | Account export recovery | Имитированная ошибка диска на втором элементе ZIP-архива не привела к появлению ни полного, ни частичного ZIP-архива. Процесс возобновления сохранил каждый байт подписанных квитанций в неизменном виде, создал независимо проверяемый архив с использованием ожидаемого отпечатка подписи и сохранил синтетический пробел в охвате в качестве частичного результата. Утверждения о масштабируемости предотвращают повторное сканирование задач и квитанций по мере роста истории. | | Minimized disclosure privacy | Синтетические имена и псевдонимы Unicode, вложенные метаданные, неизвестные отправители и поля мультимедиа проверялись во всех трёх режимах идентификации, а также с пропусками в тексте. Сбой предела маскирования не привёл к незаметному ослаблению редактирования; исходный подписанный экспорт учётной записи остался без изменений. | | Linux media decoder and OCR | [Проверка CI в Linux Docker](https://github.com/phishdestroy/TgWitness/actions/runs/41341200341/job/124951395192) при фиксации `5a9e0814` прошла успешно: сгенерированы входные данные в форматах Ogg/Opus, MP3, M4A, MP4 с видео, WAV и FLAC; выполнены проверки на поддельную продолжительность и ссылки на вторичные файлы; а также 48 измененных фикстур парсера (34 отклонены, 14 декодированы в пределах допустимого). Реальное распознавание текста Tesseract OCR работало с исходными байтами без изменений. Декодер и OCR работали в изолированных от сети контейнерах без модели Whisper. | Проверки выполняются в рабочих процессах [pull-request](https://github.com/phishdestroy/TgWitness/blob/main/.github/workflows/pr-check.yml) и [full Checks](https://github.com/phishdestroy/TgWitness/blob/main/.github/workflows/checks.yml). Они проверяют эти пределы сбоев, а не все возможные сбои хранения или то, безопасно ли автоматически публиковать раскрытую информацию. Проверка мультимедиа не измеряет точность распознавания речи или доставку в Telegram. Проверяйте каждый производный файл перед публикацией. ## Тестовый аккаунт Telegram в режиме реального времени · 29 октября 2026 года Данная учетная запись продолжала функционировать и после приведённого ниже теста. 29 октября в 12:10 по UTC её область действия была расширена на всю учетную запись (каналы, группы, личные чаты и боты); панель запросила подтверждение, и подписанный журнал зафиксировал это действие. К 17:59 по UTC в журнале содержалась следующая информация: | Запись произведена с 27 октября 21:36 по 29 октября 17:59 по UTC | Количество | | --- | --- | | Записи в журнале | 9,968 | | Новые сообщения | 5,308 | | из них после перехода на полный аккаунт | 3,878 | | Удаления | 784 | | из них были удалены после того, как TgWitness сохранил сообщение | 596 | | Редактирование | 41 | | Сообщения, добавленные в ходе повторной проверки | 2,273 | | Сообщения, которые не удалось обнаружить при повторной проверке | 18 | | Сообщения, сохраненные с помощью моментальных снимков истории | 242 | | Сохраненные вложения | 247 | | Запуск программы сбора данных | 19 | | Telegram FloodWait приостанавливает работу | 26 | - Проверка **Verify,** проведённая экспертной группой, подтвердила подписи и цепочку хэшей всех 9 968 записей. - Сообщения поступили из 2 групп или каналов, а также из 3 личных чатов и от ботов. Была нажата одна кнопка отправки сообщения в разделе **«Чаты»**; запрос и ответ Telegram зафиксированы в журнале. - Новые чаты добавлялись при повторном сканировании учетной записи сборщиком данных после перезапуска. Функция сохранения ранее отправленных сообщений в новых чатах была отключена (`history = 0`), поэтому данный вопрос здесь не рассматривается. Не охватываются: реакции, изменения в составе участников, профили пользователей, отправка сообщений, присоединение по приглашению, прокси-серверы, уведомления, бот «witness» и одновременное использование нескольких учетных записей. Публичные файлы содержат только статистические данные. ## Экспорт, защищённый паролем, открывается с помощью libarchive · 29 октября 2026 года Архив, созданный с использованием кода шифрования экспорта (WinZip AES-256, формат, поддерживаемый 7-Zip и WinRAR ), был открыт с помощью Windows `tar` (bsdtar 3.6.2, libarchive). При вводе правильного пароля извлечённый файл совпал с исходным по SHA-256; при вводе неправильного пароля выдавалось сообщение «Неверная парольная фраза». Сами программы 7-Zip и WinRAR запускаться не стали. ## Тестирование Telegram в режиме реального времени · 27–29 октября 2026 года Один реальный аккаунт Telegram, авторизованный через встроенный пул пар API, осуществлял запись данных одной супергруппы с **27 октября 21:36 UTC по 29 октября 05:15 UTC**. Сборщик данных запускался 12 раз в течение этого периода. | Зарегистрировано | Количество | | --- | --- | | Записи журнала, включая сигналы о работоспособности и сервисные записи | 2,385 | | Новые сообщения | 1,291 | | Удаления | 472 | | из них были удалены после того, как TgWitness сохранил текст | 347 | | Редактирование | 12 | | Сообщения, пропущенные во время остановки, добавлены в ходе повторной проверки | 12 | | Сохраненные вложения | 17 | | Вложения не загружены (функция загрузки отключена или файл для загрузки отсутствует) | 14 | | Telegram FloodWait делает паузы продолжительностью по 3 секунды при повторных проверках | 8 | - Подписи и цепочка хэшей всех 2 385 записей проверяются с помощью открытого ключа журнала. - После перезапуска сборщик возобновляет работу с сохраненного состояния обновления (`pts`), и Telethon догоняет отставание; затем в ходе повторной проверки добавляются сообщения, которые все ещё отсутствуют. - При каждом вызове FloodWait сборщик выжидал заданное время и продолжал работу. - Учётная запись оставалась авторизованной, и 29 октября произошло повторное подключение к той же сессии. В рамках данного теста не рассматривались следующие аспекты: одновременное использование нескольких учетных записей, права администратора, прокси-серверы, перебои в работе продолжительностью более нескольких часов, а также полная [процедура приёма данных в режиме реального времени](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md). Публичные файлы содержат исключительно следующие данные: никаких идентификаторов учетных записей или чатов, сообщений или учетных данных. ## Оценка синтетических локальных возможностей Private synthetic capacity run: 10,000 events across 100 chats. | Показатели | Наблюдаемое | | --- | --- | | Входные данные | 10 000 событий, связанных с синтетическими сообщениями, из 100 выбранных синтетических источников | | Текст сообщения | 400 символов; без мультимедиа и ссылок на сети | | Импорт данных | 53,273 секунды; 187,7 событий в секунду | | Задержка обработки | p50 4,162 мс; p95 7,784 мс; максимальное значение 129,118 мс | | Экспорт в формат ZIP | 19,868 секунд при включенной функции tracemalloc | | Пиковые значения распределения ресурсов при экспорте в Python | 0,51 МБ; RSS не обрабатывается | | Размер ZIP-архива | 4 610 962 байт | | Независимая проверка | Все 10 000 событий прошли проверку | Данное измерение определяет локальный последовательный путь записи/экспорта на данном хосте под управлением Windows. Оно не учитывает доставку по протоколу MTProto, одновременное использование нескольких учетных записей, ограничения со стороны Telegram, мультимедийные файлы, длительную нагрузку или гарантированное количество реальных чатов. Измерение было проведено до внедрения окончательной версии инструментария для офлайн-проставки временных меток, который не изменяет измеренный путь сообщений. ## Полнотекстовый поиск по миллиону сообщений · 5 ноября 2026 года Команда: `python tools/bench_fulltext.py --messages 1000000 --work ` A deterministic signed journal of 1,000,000 synthetic messages in 200 chats (Russian word forms, Ukrainian, English, Chinese, Japanese, links and handles) was indexed in 71 seconds; the index took 58 MiB beside a 1.50 GiB journal. Best-match searches took 9 to 190 ms (median), against 2.4 to 3.2 seconds for the previous substring search. Full results, hardware and limits: [Full-text search](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/#benchmark). Private compatibility tests also verify a frozen signed archive made before full-text search with the current verifier, and a current archive with the frozen archive's own `verify.py`. ## Остальные требования Сохраняемый журнал в режиме реального времени фиксирует фактические события сбора данных, редактирования, уведомлений об удалении, вложений, повторных проверок и обработки ограничений скорости. Он не фиксирует исчерпывающие данные о доставке или контролируемую матрицу видимости ролей, субъектов реагирования, длительного ожидания FloodWait, блокировок учетных записей и восстановления после сбоев в работе сети или процессов. Выдача QR-токенов остается отдельным процессом от завершённого подтверждения с помощью мобильного QR-кода. Проверки Docker/Compose и установки регистрируются в CI; реальное развертывание Phala и проверка внешних временных меток описаны выше. Они не обеспечивают устойчивую высокую нагрузку, полную матрицу платформ/ролей в режиме реального времени, независимую экспертизу безопасности, проверку долгосрочного архивирования или криминалистическую сертификацию. Реализованы сохранение состояния MTProto и синхронизация; атомарное воспроизведение в режиме реального времени без потерь пока не реализовано. Новая версия атомарно заполняет сообщения и курсоры и сохраняет доступные недавние действия, но её синтетическое покрытие отличается от квалификации в режиме реального времени. См. [live acceptance](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md) для матрицы контролируемой квалификации. Каталог публичного аудита содержит только подписанный отчёт и сводные результаты измерений. Подробные операционные отчёты, исходные снимки экрана и материалы учётных записей остаются конфиденциальными. На скриншотах приложения в `docs/assets/` используются вымышленные демонстрационные данные. --- # Уведомление о несовместимости лицензий и архитектуры Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/license/ TgWitness распространяется по лицензии MIT для всех, и почему он архитектурно несовместим с рабочим процессом Taylor Wessing. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) TgWitness распространяется по лицензии MIT для всех, и почему он архитектурно несовместим с рабочим процессом Taylor Wessing. TgWitness распространяется по [лицензии MIT](https://phishdestroy.github.io/TgWitness/LICENSE). Наша позиция не вносит никаких дополнительных условий в лицензию. > Подпись не превращает ложь в факт. > > > > TgWitness не подходит для корпораций, юридических фирм или частных лиц, которые считают, что добавление титула «Dr.» перед именем делает всё, что следует за ним, правдой. Титулы, бланки с логотипом и подписи не имеют преимущества перед доказательствами. > > > > Если ваш рабочий процесс начинается с вывода, за который заплатил клиент, и требует, чтобы запись соответствовала этому выводу, вам нужен другой инструмент. TgWitness создан для сохранения записи и обеспечения возможности её проверки. > > > > Пусть эти «доктора» заботятся о балансах своих корпоративных клиентов. Титул не лечит ложь. > > > > Математика не подлежит обсуждению. [Исходная запись](https://phishdestroy.io/steam_dossier/taylor_wessing) · [Этическое уведомление и историческая преемственность](https://phishdestroy.github.io/TgWitness/ru/docs/reference/notice/) [Полный текст лицензии MIT](https://phishdestroy.github.io/TgWitness/LICENSE) · [Проект](https://github.com/phishdestroy/TgWitness/blob/main/README.md) · [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Home.md) --- # Уведомление о несовместимости с операторами Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/notice/ Наше уведомление оператора о компании Taylor Wessing и её исходных данных. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Наше уведомление оператора о компании Taylor Wessing и её исходных данных. **PhishDestroy · Уведомление проекта TgWitness** [Исходная запись](https://phishdestroy.io/steam_dossier/taylor_wessing) · [Оригинальное УВЕДОМЛЕНИЕ](https://phishdestroy.github.io/TgWitness/NOTICE) ## ⚖️ Этическое уведомление и историческая преемственность Недавно нам стало известно, что для некоторых юридических фирм — и, в частности, для д-ра Тобиаса Шелински и д-ра Патрика Винсента Цурхайде — математика и объективные факты не имеют значения. Продавать корпорациям несоблюдение GDPR как коммерческую услугу, самим проваливаясь в элементарной работе с данными, — не юридическая компетентность. Иллюзия того, что вы — это закон, или что подпись представителя элиты на сфальсифицированном заявлении волшебным образом превращает ложь в правду, не скрывает технической некомпетентности. Этот инструмент несовместим с юрисдикциями, где господствуют: - Корпоратократия - Приватизированное или коммерческое правосудие - Плутократия - Клептократия и институциональная коррупция Особое упоминание заслуживают д-р Патрик Цурхайде, д-р Тобиас Шелински и те, кто пытается использовать «право на забвение» в качестве оружия, чтобы скрыть собственные провалы в обработке данных, «очистить» историю своего учреждения и стереть исторические записи: > Taylor Wessing (д-р Тобиас Шелински и д-р Патрик Винсент Цурхайде) → Wessing & Berenberg-Gossler → Stonewall Top 100 → д-р Граф фон дер Гольц, д-р Вессинг и партнеры (с 1957 года) → Рюдигер граф фон дер Гольц → Статья 175 в редакции 1935 года В целях строгого соблюдения лицензии MIT мы не ограничиваем использование данного программного обеспечения. Однако давайте проясним: корпоративные гонорары, юридическое давление и требования об удалении цифровых данных не могут переписать историю, изменить происхождение или скрыть правду. [Лицензия MIT](https://phishdestroy.github.io/TgWitness/LICENSE) · [Наша позиция в отношении Taylor Wessing](https://phishdestroy.github.io/TgWitness/ru/docs/reference/license/) · [Модель доказательств](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/) [Проект](https://github.com/phishdestroy/TgWitness/blob/main/README.md) · [Документация](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Home.md) --- # TgWitness Changelog & Release Notes Canonical page: https://phishdestroy.github.io/TgWitness/docs/reference/changelog/ Read TgWitness changes by version, including unreleased work. Check release notes before assuming a source feature is included in an installed package. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/llms.txt) Translation coverage: this edition includes material from the English original. Все изменения по версиям, включая те, которые ещё не выпущены. [TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [Documentation](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [Project reference](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) ![Project reference](https://phishdestroy.github.io/TgWitness/assets/chapter-project.svg) **On this page** - [Unreleased](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#unreleased) - [0.9.1 preview · 5 November 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#091-preview--5-november-2026) - [0.9.0 preview · 4 November 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#090-preview--4-november-2026) - [0.8.1 preview · 2 November 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#081-preview--2-november-2026) - [0.8.0 preview · 2 November 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#080-preview--2-november-2026) - [0.7.1 preview · 1 November 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#071-preview--1-november-2026) - [0.7.0 preview · 31 October 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#070-preview--31-october-2026) - [0.6.1 · 27 October 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#061--27-october-2026) - [0.6.0 · 27 October 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#060--27-october-2026) - [0.5.1 · 27 October 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#051--27-october-2026) - [0.5.0 · 26 October 2026](https://phishdestroy.github.io/TgWitness/ru/docs/reference/changelog/#050--26-october-2026) ## Unreleased - Isolate request-body capacity and token-family lockouts, set Secure download cookies behind trusted HTTPS proxies, limit pending tickets per access, and expose journal write failures. - Add an English Secret Chat demo with fictional requests, replies, attachments and retained deletion notices. Document the separate development implementation and its open defects; the demo does not enable Telegram connections. - Remove the unused one-shot exporter and check recovery against the current exporter. Reject unexpected or repeated message IDs in recheck responses. - Combine concurrent exports with resumable Standard API and Takeout acquisition. Each job retains its own progress, timings and signed checkpoints; accounts remain reserved until that job stops. Include the account controls, batch import and report-verification updates in the same build. - Add offline `VERIFY.cmd` / `VERIFY.sh` launchers, plain-language verification explanations and saved UTF-8 transcripts to signed exports in all 25 panel languages. Build a separate Windows verifier with an embedded runtime and a language menu. Unpinned signers remain unconfirmed; successful integrity verification does not establish admissibility. - Add optional jurisdiction guidance for 25 countries to Report Studio and exported assessments, with separate civil/criminal sources, local-language summaries and next steps derived from the actual package. Guidance remains a research draft, does not raise assurance, and is excluded from reusable layout profiles and inherited sharing-copy settings. - Allow the pinned Russian morphology dictionary resources in Windows portable builds while continuing to reject unrecognized files in dependency data directories. - Keep missing-on-recheck observations separate from deletion notices in HTML, JSON and PDF counts and viewer labels. Do not claim unscoped deletion IDs were never saved when their chat is outside the current observation scope. - Record multiple deleted IDs as a deletion batch without inferring a whole-history clear, the deleting participant, or deletion for everyone. Relabel legacy history-clear events without changing their signed records. - Publish the one-command installer only after application and security checks pass for the exact main commit and the signed package passes Ubuntu local/HTTPS service and Windows PowerShell acceptance. Keep the previous download when checks fail or time out. Add authenticated tests of the actual public installer URLs. - Preserve `previous_hash` in the signed-record preview even when its hexadecimal digits resemble a payment card number. Secret masking still applies to message content; the stored record is unchanged. - Reconstruct compact chat snapshots consistently in MCP, retain unknown fields, and distinguish capped lists from removals. Resume date scans, preserve topic names across history reads, and bound image previews. Apply metric choices to filtered reports and count historical service messages separately. - Plan sealed exports against the remaining session time, offer smaller selections, update progress estimates and reserve time for packaging. - Compare every message field, validate record counts and structure, enforce CLI verification options, and display OpenTimestamps states separately. - Close coverage on worker failure, bind heartbeats to the capture run, and verify TDX signing-key binding and supported component statuses. - Add read-only MCP tools (preview): `get_messages_by_date` (one calendar day in a named time zone, computed server-side), `get_pinned_messages`, `get_chat_stats` with `gap_summary`, `get_topics`, and `get_media`, which returns a verified, downscaled image preview anchored to its SHA-256 and `media.saved` record. Every MCP tool now declares an output schema. New connections include these tools; existing connections keep the tools they were issued with. - Show each account's selected route and checked exit address, group session controls, and retain interface preferences when adding an account. Record connection changes without repeating identical background checks. Validate withheld-marker contents and reply states in minimized exports, including rejection of a missing-source label for an included record. - Update collection-mode instructions and Russian guidance. Allow a bounded publication-settling interval while requiring exact installer bytes. - Mark messages left out of a minimized disclosure (preview): inside each disclosed chat, withheld messages appear as content-free markers naming the selection rule, one per run or one per message, and disclosed replies state whether they answer a disclosed message, a withheld one or one that is not in the source export. The package format becomes `tgwitness-account-disclosure-v2`; `verify.py` rejects markers with content and replies pointing at missing records, and still verifies version 1 packages. - Repeat gap analysis with the settings carried by the signed export, count each service-message number once, and bound account estimates to the measured interval. Require explicit whole-account scope, retain pause/resume boundaries, and interrupt expensive archive scans at their time budget. - Add missing message numbers (preview): `coverage.json`, the HTML and PDF reports, `verify.py` and the archive's `get_capture_status` measure numbers Telegram assigned and this collector never saw, per channel or supergroup and for the account-wide sequence of private chats, bots and ordinary groups during whole-account collection. Each result states whether it applies and why, lists its parameters, and anchors listed gaps to the neighbouring observations. **Parameters → Gap analysis** sets the listed gaps, the account-wide sequence and an optional service-message estimate that is never subtracted. A gap names no actor and no reason. - Record in the signed message when self-destructing media is fetched despite a type or duration rule (`media_capture.rule_override`), with the limits that still applied. - Add chat-state snapshots (preview): while observing, every enabled source is read periodically and saved as a signed `chat.state` record with title, description, counts, pinned messages, administrators with rights, and gifts on channels and profiles, plus the differences from the previous snapshot. Unpinning, rights changes and gift conversions or upgrades without a service message become visible. Parts Telegram refuses are named and carried forward, never reported as removed. **Parameters → Chat state** sets the interval, pause and parts. - Add anomaly indicators to evidence reports (preview) as registered, versioned processors in `tgwitness/metrics/`: first-time posters per day with flagged injection-like days, service messages among message numbers, joins and departures per month, and pins and unpins per month. Reports list every processor that ran with its version and print its method; **Parameters → Report metrics** chooses them. - Keep ranked-search pages within the first 1,000 results regardless of page size, order OCR/transcription results before pagination, and retain exact match positions when Unicode expansions and invisible-character removal cancel each other's length changes. - Keep photo downloads on the still variant named by their metadata and hash manifests, including after file-reference renewal. Reject truncated photo/chat attachments and corrupt reused files instead of counting them as saved. Check recovered multi-account message IDs against missing intervals without expanding large gaps. - Release a session's local connection lock after transport shutdown, including when a disconnected client was already removed from the workspace. Cancelling the waiting operation cannot release the lock early, and closing an older session cannot unlock a different current key. - Apply a chat export's skip/hash-only choice to recovered messages and profile photos, and record that choice in the acquisition metadata. Reject changed messages before fetching attachments in the separate files stage. Count missing message numbers as intervals so sparse histories do not exhaust memory, including during a cancellable full recheck. - Preserve available self-destructing photos, videos and files in the API journal with a dedicated immediate queue, explicit TTL/view-once labels and signed saved/unavailable/not-saved outcomes. Block read receipts in the API client, including batches and wrapped requests. Keep byte limits, disk reserves and Telegram backoff; saved bytes do not establish human viewing. - Preserve image-rendered Unicode emoji in official Web message text, reply previews, reactions and derived page text without changing the client DOM. A live account test exposed the omission; video and saved pages already retained the image. - Improve chat-export Takeout, unreadable-message recovery, shared absent-number rechecks and bounded range retries. Preserve observed deletions in export scope, compare verified archives, and distinguish archive integrity from an independently confirmed signer. - Protect imported sessions from remote logout, close idle connections and prevent simultaneous reuse of a session key. Add explicit session management and masked two-step password entry; cancellation or switching workspaces prevents submission. Read single-account export messages before their separate attachment stage. - Keep source export and AI actions disabled while local source search is pending, empty or has failed; clear stale previews before the next search. Exercise delayed replies explicitly in browser checks. - Use unambiguous synthetic privacy identifiers and report the exact marker/context on handover-test failures, avoiding accidental matches inside report metadata. - Add an in-panel comparison of collection methods and explain account task ownership beside full-history controls. Refresh source-version badges, qualification records and Trusted Live network results; check version labels before publication. - Add [full-text search](https://phishdestroy.github.io/TgWitness/ru/docs/reference/search/) (preview): Russian and Ukrainian word forms, English stems, Chinese and Japanese phrases without spaces, exact phrases, domains in hidden links and buttons, @usernames, wallets and phones, filters for chat, sender, message ID and observation period, ranked with BM25. The index is derived from the signed journal, bound to its latest record hash, never exported, and can be kept on disk, in memory only or turned off. Recognized text is indexed in memory only and labelled as machine recognition. - Ask the archive retrieves the best matches from the full-text index when it is complete, keeps the 24-source limit, and cuts long texts around their match. MCP `search_messages` accepts `ranked=true`. - Add `tgwitness index status|rebuild` with JSON output on stdout and stable exit codes. - Fix ranked search paging: `next_offset` is now returned when more matches exist, through `/api/search`, MCP `search_messages` and Ask the archive's partial marker. Paging stops at the first 1,000 results. - Fix Ask the archive failing on questions longer than 24 words or 200 characters. The full-text query keeps the question's first distinct words; a query the index cannot read falls back to exact-text retrieval. - Centre excerpts on the match in long texts that hide zero-width characters between letters. - Build the website when a language lacks new translations: untranslated blocks stay in English with the page notice and are listed by the build. - Add the [command line](https://phishdestroy.github.io/TgWitness/ru/docs/reference/cli/) (preview): `tgwitness search`, `context`, `messages`, `stats` and `export` with `--json` and stable exit codes, reading a stopped workspace directly or a running panel through a scoped, revocable archive connection. Add `.agents/skills/tgwitness-cli/SKILL.md` for agents. - Add the `get_activity_stats` archive tool, also offered over MCP: messages by UTC hour and weekday, peak days, edit and deletion shares, senders, domains and @handles, with coverage gaps. Computed on request, not stored. - Add the `export_messages` archive tool for the command line: saved observations streamed as JSON Lines in journal order, with full text and a completion record. It is granted only when selected; existing connections keep the tools they were issued with. - Recheck archive access before every streamed record, including completion. Revoked or expired connections end without a completion record; lazy export reads share the archive worker limit and timeout. - `tgwitness index` and the new commands find the data directory of the installation that runs them. ## 0.9.1 preview · 5 November 2026 - Keep message and attachment outcomes visible after single-chat sealed capture, including missing data, failed files and unfinished downloads. Translate final status when changing language after shutdown, and clear connection or export errors once they recover while retaining rejected-action and unconfirmed-revocation warnings. - Update the pinned OAuthLib dependency to 4.0.1 for CVE-2026-49272 and regenerate the runtime, browser and MCP hash locks. - Show in-flight attachment bytes without counting them as preserved evidence, reset progress on retries and clear it on pause. Keep official-client chat controls disabled during QR/2FA login and until a chat is available. Explain that Takeout approval requires another previously signed-in device. Bound CI dependency installation and avoid the stalled Azure package mirror. - Add explicitly selected direct networking for official Web capture through GitHub Actions. Proxy remains the default and never falls back to direct. The panel and signed verification report disclose direct IP exposure, and verification rejects a mismatch between the selected route and the hosted network. - Add an optional official Telegram Web observation mode with passive or sequential paced viewing, a fresh profile, restricted UI actions, login-excluded video and signed rendered observations. A required proxy bridge prevents direct fallback; exit changes stop recording. The GitHub Actions mode uses the approved sealed workflow and recipient encryption. - Bind official recordings to independently saved source/settings, check video segment order and clean endings, record fresh drand rounds and support independent public-relay comparison. Report unfinished procedures, unconfirmed logout and the limits of local or Cloudflare assurance explicitly. See [Official client witness](https://github.com/phishdestroy/TgWitness/blob/main/docs/OFFICIAL-WITNESS.md) for scope and validation. - Add opt-in Trusted Live preview: isolated official Desktop/Web sessions, native JSON preservation, guarded visual recording, per-chat continuity annotations, and verifier-recomputed reports. Supply a Linux network guard with no direct fallback, periodic proxy-routed drand observations, and optional independent read-only Cloudflare samples. Account/WARP/TDX qualification remains pending; see `docs/TRUSTED-LIVE.md`. - Make sealed export modes explicit: Telegram Takeout by default, regular API account export, or a single-chat event journal, with differences and limits shown before collection. Select multiple chats, save agreed settings, verify them with `--expected-selection`, and reject incomplete account exports with `--require-complete`. Correct the outdated one-chat-only hosted documentation. - Preserve signed message pages before requesting files or hashes. Resume from frozen history, retain completed attachments, and finish an interrupted export with explicit gaps when time or disk is limited. - Add Telegram Desktop compatible JSON/HTML views alongside authoritative signed data. GitHub capture supports full-account and selected-chat exports through regular API or Takeout, with chat types, dates and media settings. - Deliver large GitHub archives in encrypted parts with a signed, attested manifest and verified local assembly. Remove the fixed 4 GiB delivery failure without omitting preserved evidence. - Retry transient pinned OCR source downloads without relaxing checksum checks. Retry brief Windows file-sharing failures when saving private state. - Configure account exports before collection: select chats and media types, exclude avatars by default, and choose downloads, Telegram range hashes or metadata only. Keep a shared attachment budget and record incomplete files explicitly. - Show Takeout approval requirements and retry deadlines before collecting; check approval again without replacing the waiting session. Phone, QR and existing-session login retain their own authorization flow. - Save Telegram-provided SHA-256 ranges with file representation and data-center metadata. Compare them against locally supplied files; Telegram identifiers and access hashes are not treated as content hashes. - Collect message history across selected chats before processing attachments when messages-first mode is enabled. Preserve the journal in a compact export when full HTML or attachment packaging exceeds the remaining capacity. - Stream sealed delivery encryption without a second full plaintext archive. Remove interrupted ciphertext, preserve the original evidence for retry, and keep capture deadlines across runner steps with time reserved for delivery. - Require sealed-container validation in the release workflow. Phala deployment status now distinguishes verified, incomplete and review-required attestation instead of inferring trust from the provider name. - Validate every sealed-container build input against its pinned source. Retry transient package downloads up to three times while retaining signature, SHA-256 and exact-package checks before offline installation. - Include the hash-export configuration examples in source archives and preserve the translated documentation and required site assets from the latest main revision. - Keep the current tunnel address when an older signed address post is replayed. Signed posts are ordered by their signed time; unsigned posts use the relay's receive time. - Trust only the Caddy proxy on the private Docker HTTPS network and normalize client addresses for authentication limits. - Keep operator IP addresses out of new signed access events, hide administrative payloads from shared views, and enforce workspace and export ownership boundaries. - Reject duplicate JSON keys, prepended ZIP content and HTML injected into report seals; distinguish pinned witness keys from pinned collector keys. ## 0.9.0 preview · 4 November 2026 - Reserve each account exclusively for monitoring, history or an export. Serialize Telegram RPCs and persist full FloodWait deadlines. - Add durable distributed chat exports with date/language/reply filters, bounded labelled context, signed chunks and explicit pause/resume. See [Distributed chat export](https://github.com/phishdestroy/TgWitness/blob/main/docs/DISTRIBUTED-EXPORT.md). - Keep account reservations until every export worker has stopped, including repeated pause requests and sibling worker failures. History loading in sealed sessions also reserves the account exclusively. - Add participant timelines from saved observations: names, membership, explicit deletion flags and message activity. Profile refreshes are bounded; optional presence recording preserves unavailable or expired status as unknown and does not attribute online activity to a chat. - Save, import and reuse report layout profiles without copying case details or report filters. Profiles are validated and isolated by workspace. - Automatically offload eligible attachments to configured external storage under disk pressure, with reserve-space checks, compression, optional encryption and full readback verification before local eviction. Journals remain local. - Make the recording settings and chat tabs fit narrow screens, including wider system fonts, and fix profile controls and localized labels. - Include reviewed website assets in source archives and verify conditional dependency versions in SBOM inventories. - Phala Cloud deployments work on Phala Cloud itself (first real run, 4 November 2026): the compose carries its name, Phala's own pre-launch script is kept out of the measured app-compose, the production OS image is chosen instead of Phala's development default, the instance ID is read from the CVM state, and restarts from the CVM's operations count in `provider_actions`. Private Phala regressions simulate each of these. - `tdx_os` without outside tools: the verifier downloads the published dstack OS image once, matches it to the hash the CVM reports and computes MRTD and RTMR0-2 itself, the ACPI tables QEMU builds for the VM's shape included. A development image, other firmware, kernel, command line, memory, vCPUs or devices fail. Each journal start is checked the same way. - Attestation certificate for Phala deployments: `verify --report` also writes HTML and a signed PDF, sealed by a qualified eIDAS time stamp from the Belgian government's time-stamping authority, a FreeTSA time stamp and the verifier's own key; `check-report` checks the seal. - Quick tunnel addresses are also posted signed with the collector key, so a verifier is not misled by forged posts on the address topic; on Phala Cloud the tunnel check passes, since its connector runs inside the measured compose. ## 0.8.1 preview · 2 November 2026 - Runtime, sealed and media containers moved to pinned Wolfi/glibc with Python 3.12 and hash-locked system packages (AMD64 + ARM64). Image scans are clean of HIGH/CRITICAL. - Tesseract 5.5.4 built from verified source, English and Russian data pinned. - Release checks now cover real OCR, offline transcription, signed multilingual PDFs and container restrictions. The source archive includes all container build inputs. - **Extras → Independent capture** in the English panel: browser/AyuGram recorders with encrypted tokens, pinned keys, tab selection, start/pause, snapshots, checkpoints and verified ZIP downloads. Everything is off by default. - New optional `tgwitness-capture` package: Chromium PNG/MHTML snapshots, AyuGram SQLite copies, optional silent video, Ed25519 event chains, signed ZIP/HTML reports and a standalone verifier. Each recorder has its own key and storage. - Fixed Phala installs: source bundles were missing the capture package. ## 0.8.0 preview · 2 November 2026 **Reports** - Report studio: eight designs (Classic, Editorial, Briefing, Analytics, Technical, Overview, Reading series, Ledger & margin), live preview, HTML and native signed PDF. Switching designs keeps filters, charts and notes. - Pick report data by chat, author, date and event type and preview it before saving. Edits show before/after, deletions show what was saved earlier. - Reports look like proper dossiers now: cover, key figures, evidence map, numbered findings, timeline. PDFs get an A4 cover with QR, bookmarks and page refs. - Each report explains what its conclusions rest on: export-time checks, observations, missing material, how to check it independently (EN/RU/DE wording). - Send, edit and observed times are shown separately, plus replies, threads and metadata. **Case Board and groups** - Private Case Board: signed bookmarks, exact-version highlights, action slices, collections, threaded comments and statuses. Team notes stay apart from observations; the verifier checks board exports too. Export permission alone doesn't reveal team notes. - Account groups share settings. Members follow the group, an account's own value wins until reset. Changes show which accounts they hit and ask before overwriting. Access can be granted to a whole group. - Group screen at `/groups/`: accounts, problems, shared chats, group export. **Setup and connection** - Six-step first setup and one Settings page with simple/standard/expert levels, in all 25 languages. Each step has its own URL, Back works. - The setup asks whether the account is a separate one; a main account only records chosen chats. After Start it shows that connection, events, sources and files work. - Guided Connection screen: pick accounts, prepare and check a route, then apply. Direct, own proxies, public MTProto pool, WireGuard profiles and portable WARP. - Automatic connection tries public MTProxy, then WARP, then direct (if allowed) and shows a status indicator instead of failing silently. - Video duration limits in file policies. **Panel and safety** - No more one-click accidents: pausing, excluding and removing sources are confirmed, sending from a chat needs "Write as @account" first, route changes while observing offer to pause. - One set of counters everywhere (deleted with text, deleted before saving, missing on recheck). - Account files are inspected before connecting. URL, workspace and account always agree, a mismatch blocks actions. Chats open read-only and mask detected secrets. - Downloads fall back to normal browser downloads, big archives stream through one-time cookies. Prepared exports keep size, SHA-256 and "Download again". - Panel token rotation keeps the new session alive. Temporary network failures offer Retry. - Panel dialogs instead of `window.confirm`, journal paging fixed, lots of small UI fixes. - Public-channel showcase: expiring read-only links with redacted authors and signed snapshots. **Servers and evidence** - Extras → Server 24/7: a Hetzner server from the panel with a quick tunnel or your own domain. `python -m tgwitness.cloud destroy` cleans everything up. - Phala Cloud option: the collector runs in an Intel TDX confidential VM, `verify` checks the attestation up to Intel's root. - Gateway DNS (`--gateway-dns`): the server only resolves through Cloudflare Gateway. - Optional drand rounds and Telegram device lists in evidence mode. - Setup by goal: four questions, suggested settings, credibility and reliability scales. **Other** - Notification service catalog with icons, optional operator control bot, Discord witness posts. - Storage separates backups, verified file offloading and evidence retention. - AI previews show the endpoint and outside route. - Pull requests run both panel suites, including Firefox and WebKit downloads. Release packages wait for dependency, CodeQL and container audits. - Docs: a [panel guide](https://phishdestroy.github.io/TgWitness/ru/docs/reference/panel/) for every screen. ## 0.7.1 preview · 1 November 2026 - **Start here** with two paths: export my account, or follow an investigation. - Account export through Telegram Takeout or the regular API, resumable, with signed progress and coverage records ([account export](https://phishdestroy.github.io/TgWitness/ru/docs/reference/account-export/)). - Separate signed sharing copies with filters, pseudonyms and optional text/file removal. Signatures establish integrity; they do not establish Telegram authorship, completeness or legal admissibility. - Readable offline reports for account exports and sharing copies, printable, with record links and instructions for the recipient. - Clear handoff after download: original vs sharing copy, report preview, instructions to copy. - Rejected Telegram logins are told apart from paused accounts and network errors. **Sign in again** keeps the workspace. - Load the history of enabled sources with pause/resume, plus a signed progress report ([history](https://phishdestroy.github.io/TgWitness/ru/docs/reference/history/)). - Read-only MCP at `/mcp`, local archive search with optional AI, local OCR/transcription, signed webhooks with retries. - GitHub Actions capture preview: one chat on a temporary runner, encrypted result, pinned provenance ([sealed capture](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md)). - Self-contained signed reports in 25 languages with chain of custody; archives add `custody.json` and `SHA256SUMS`. - Panel rework: workspace URLs, Back/Forward, drafts survive updates, Ctrl/Cmd+S, Sources split into tabs, Parameters search, journal filters and inspector, live updates. - Batch session import, account groups, MTProxy dashboard with ping, countries and own lists. - MTProxy decryption through OpenSSL (it used to eat a whole CPU core). - Stronger masking in sharing copies, bounded media decoding, repeatable source ZIPs. - Notification services refuse redirects. Weekly Dependabot, nightly CodeQL and container scans. - Lots of fixes: stuck chat profiles, quick search, DST in search dates, 502s behind Caddy, GIF/sticker downloads, slow proxy list parsing, duplicate sessions on import. ## 0.7.0 preview · 31 October 2026 - OpenTimestamps proofs are parsed strictly; Bitcoin attestations show as `bitcoin-unverified` until you run `ots verify`. - Verification reports which part of the journal witness checkpoints cover; `--require-witness` demands a pinned witness and matching final record. - Access and permissions guides, updated proxy and IP mode guides. - Panel and docs site in 25 languages. Site publishing fails on missing translations. - Added the [roadmap](https://github.com/phishdestroy/TgWitness/blob/main/docs/ROADMAP.md). ### Initial preview contents · 30 October 2026 - First GitHub release: Windows portable, wheel, source archive. - The setup guide has an "Open to everyone" section: no country or sanctions blocks, and Taylor Wessing as the only incompatibility we name. It is our position, not a licence condition. - The README and Wiki now present the authors' Ethical Notice & Historical Continuity statement, with document references, historical context and an explicit explanation that MIT permission applies to everyone. - The operator notice and the Taylor Wessing page speak in our own voice. - Returned to the MIT License. A tool whose output third parties must be able to check should not stumble over its licence. `LICENSE` is the standard MIT text again, the package declares MIT with the OSI classifier, and the container, portable package, website, Wiki and translated README labels say so. Our statement stays in NOTICE and on the Taylor Wessing page as our position; it adds no licence condition. The presentation artwork reads "open source" again. - Added our Operator Incompatibility NOTICE to README, SECURITY, the documentation, Wiki and website. A single source keeps the complete statement consistent across those pages; source, Python and portable distributions include NOTICE alongside the licence. - High-assurance deployment (`python -m tgwitness.cloud`, [guide](https://phishdestroy.github.io/TgWitness/ru/docs/reference/high-assurance/)) on Hetzner, DigitalOcean, Linode, Vultr or EC2: no SSH key, no inbound ports, panel only through a Cloudflare Tunnel, and a `verify` command for third parties. - Local launchers open the panel in the browser once it's up. - Read-only online demo of the real panel with fictional data. - Wiki with 13 guides, docs website with a reference section, search, diagrams and 13 languages. - **Sign out of Telegram** on the Account page. - About 940 Russian panel strings fixed by hand. - Observation scope: chosen chats, a folder or the whole account, by type. New chats are picked up immediately. - Investigation mode for accounts that join groups and talk to bots. - People profiles (opt-in per chat), independent witness bot, notification excerpts, Parameters page, light/dark theme. - Panel mini-client: send messages, press bot buttons, preview and join invites. - Fixed message loss after a long stop (rechecks used to stop after 1,000 messages). - Many fixes from a full review: attachment byte counts, restore checks, scope edge cases, verify.py witness handling, off-site copy retries. - Pillow 13 (39 advisories against 12.3). ## 0.6.1 · 27 October 2026 - Renamed TgWatch to TgWitness, old archives still verify. - Evidence mode timestamps checkpoints with RFC 3161 and OpenTimestamps. - Password-protected AES-256 ZIP exports. - Notifications through Apprise. - 13 interface languages; README, Quick start and Deployment in 12 languages. - Encrypted off-site copy to S3-compatible storage with Object Lock. - Catch-up after restart and rechecks every 15 minutes. - Built-in pool of public API pairs, no own API ID needed. - New Chats view, Accounts view, multi-account chat export, signed full chat export. - Windows portable package, public website, GitHub Pages workflow. - Better launchers on all platforms, redesigned panel, new logo. ## 0.6.0 · 27 October 2026 - New account form with Phone, QR code, Files and Auth key tabs. - Auth Key + DC ID sign-in, Telethon/Pyrogram sessions, TData ZIPs, StringSession, account JSON. - QR login with 2FA, Desktop local passcodes. - Demo opens on its sample journal; refreshed panel look. ## 0.5.1 · 27 October 2026 - Only the active account client is accepted; rejected logins are disconnected. - Windowless Windows launches with logs in `logs/server.log`. - Case-insensitive Unicode search, full UTC dates on phones. - Linux/macOS launch scripts, Docker helpers, optional HTTPS with Caddy, GHCR images. - Docs on export signatures and investigation handoff. ## 0.5.0 · 26 October 2026 - Per-account monitoring categories, presets and signed policy changes. - Direct local entry to synthetic demos. Older history: [release status](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/RELEASE.md) and [verification](https://phishdestroy.github.io/TgWitness/ru/docs/reference/verification/). --- # Один журнал. Четыре режима сбора. Восемь уровней проверки. Canonical page: https://phishdestroy.github.io/TgWitness/ru/guides/modes.html Области сбора данных, границы событий, восемь механизмов проверки и шесть вымышленных сценариев расследования. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/ru/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/ru/llms.txt) Режимы, сценарии и уровни доказательства TgWitness записывает то, что видит подключённый аккаунт. Третья сторона проверяет целостность записи по заранее доверенному ключу. [Режимы сбора](https://phishdestroy.github.io/TgWitness/ru/guides/modes.html#scope)[Сценарии](https://phishdestroy.github.io/TgWitness/ru/guides/modes.html#scenarios)[Уровни доказательства](https://phishdestroy.github.io/TgWitness/ru/guides/modes.html#levels) Обзор за 3–5 минут · вымышленные примеры · текущая реализация 1. **Telegram** Обновления, видимые для учетной записи 2. **Коллектор** Связанные записи, каждая из которых подписана 3. **Верификатор** Доверенный ключ + сохраненная граница `h₁ → h₂ → h₃ · Ed25519`Целостность проверяется. Происхождение из Telegram и достоверность сообщения остаются отдельными вопросами. ## Выберите режим сбора Три области наблюдения и пресет расследования. Исключения и выбранные типы источников действуют во всех соответствующих режимах. По умолчанию**Chosen chats** Что записывает Только чаты, выбранные вручную. Новые чаты Не добавляются автоматически. Когда выбирать Известный набор каналов или групп. Проверенного предела по числу чатов нет. **Чего не делает** Не обнаруживает другие чаты и не загружает прежнюю историю автоматически. Папка аккаунта**Telegram folder** Что записывает Чаты и категории папки, за вычетом исключений и архивных чатов, если это задано папкой. Новые чаты Подходящие активные чаты; изменения состава папки — в течение часа. Когда выбирать Аналитик уже ведёт папку по делу. Сбор требует подтверждения и выделенного аккаунта. **Чего не делает** Не применяет меняющиеся условия папки «без звука» и «прочитано». Требует подтверждения**Whole account** Что записывает Доступные аккаунту чаты, включая личные и ботов, в пределах выбранных типов источников. Новые чаты Добавляется с первым обновлением. Когда выбирать Выделенный аккаунт наблюдения, в том числе для участия в расследуемых чатах. **Чего не делает** Не вступает в чаты сам и не обходит ограничения доступа. Пресет поверх Whole account**Investigation mode** Что записывает Все типы источников, собственные действия, профили источников и последние 200 видимых сообщений каждого нового источника. Новые чаты Для нового чата или бота сохраняются профиль и снимок истории. Когда выбирать Вступление в команду или диалог с ботом из панели. Просмотрите настройки и сохраните пресет. **Чего не делает** Не делает снимки всех уже известных чатов и не видит callback-нажатия в другом клиенте. Карточки служат для сравнения. Выбор здесь не меняет настройки подключённого аккаунта. **Чего не делает** Ни один режим не читает секретные чаты, не записывает события при остановленном процессе, не вступает в чаты сам и не загружает историю сверх запрошенного снимка или экспорта. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) ## Выгрузка через GitHub Actions (предварительная версия) Новый вход в Telegram, один чат, зашифрованный архив и аттестация GitHub. [Открыть помощник выгрузки](https://phishdestroy.github.io/TgWitness/ru/docs/capture/) ## Что фиксируется В журнал попадают доставленные или явно запрошенные наблюдения. Неизвестный участник действия остаётся неизвестным. Переключатели записи · локальный примерНовые сообщенияИзмененияУдаленияРеакцииЧленство В панели переключатели действуют на весь workspace. Отключение сохраняет прежние записи; повторное включение не восстанавливает пропущенные события. **Матрица событий: сохранённое и неизвестное** | Категория | Что сохраняется | Что остаётся неизвестным | | --- | --- | --- | | Сообщение | Текст, идентификаторы, метаданные отправителя, контекст ответа и исходный конверт обновления. | Отсутствует подпись Telegram, поддающаяся проверке третьими сторонами. | | Правка | Все наблюдённые версии без подмены предыдущих. | Промежуточные правки могут быть пропущены; редактор не обязательно совпадает с отправителем. | | Удаление | Уведомление плюс ранее сохраненный текст, если таковой имеется. | Удаливший и точное время действия не приходят. | | Unscoped deletion | Уведомление уровня аккаунта; неизвестный чат отмечен явно. | Чат не угадывается. Если возможно, используется связь с ранее сохранёнными ID в области аккаунта. | | Реакция | Полученные счётчики и доступные недавние участники реакций. | Не все участники видны; доступный список требует отдельных запросов. | | Членство | Доставленные служебные сообщения и обновления участников. | Роль и тип чата ограничивают видимость; отсутствие сообщений не означает отсутствия. | | Вложение | Дескриптор исходной версии, сохранённые байты, SHA-256 и результаты попыток загрузки. | Исчезнувший файл может оказаться недоступным; более новая версия не заменяет его. | | Снимок истории | Снимок сообщений, видимых в момент запроса, с отметкой о происхождении из истории. | Предыдущие правки и удалённый контент не восстанавливаются. | | Собственные действия | Исходящие сообщения и правки; button_press при совпадении с сохранённой клавиатурой ответа. | Callback-нажатия в другом клиенте Telegram не видны. | | Кнопки бота | Метаданные callback, URL, web app и запросов вместе с сообщением. | URL, запрос номера и геолокации сохраняются как текст, не открываются и не выполняются автоматически. | ### Лимиты вложений по умолчанию Фотографии 20 MiB Видео 100 MiB Файлы 50 MiB Анимации 20 MiB Видеосообщения 50 MiB Голосовые 20 MiB Аудио 50 MiB Стикеры 5 MiB **Чего не делает** Переключатель не удаляет встроенные метаданные и не отключает служебные записи. Сбор не устанавливает участника действия, которого Telegram не сообщил. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) ## Подключение и гибкость На каждый аккаунт — свой workspace, журнал, ключ подписи, маршрут и очередь. ### Номер телефона + код Пароль 2FA, если он включён. ### QR код Сканирование с авторизованного устройства; может потребоваться 2FA. ### Telethon .session Импортируйте файл сеанса учетной записи. ### Pyrogram .session Импорт поддерживаемого формата сессии Pyrogram. ### TData ZIP Один поддерживаемый аккаунт Desktop; локальный passcode, если установлен. ### StringSession текст Текст Telethon StringSession. ### .session + .json Выберите сессию и соответствующие сопутствующие метаданные. ### Auth key HEX + DC ID Ключ авторизации аккаунта и идентификатор его дата-центра. **API-пара** Своя API-пара необязательна. Без неё используется пул публичных пар, включая пары официального Telegram Desktop. `Direct · SOCKS5 · HTTP CONNECT · MTProxy`MTProxy — экспериментальный маршрут; доступны встроенные публичные списки MTProxy. При ошибке прокси отката на прямое соединение нет. Два workspace на одной машине — не два независимых свидетеля. **Чего не делает** Импорт не обходит авторизацию Telegram, 2FA и ограничения форматов сессий. Аккаунты продолжают работать в общем процессе приложения. [Форматы учётных записей](https://phishdestroy.github.io/TgWitness/ru/docs/reference/accounts/) ## Активные действия из панели Написать или ответить, нажать кнопку бота, сохранить превью ссылки, затем явно вступить в чат или открыть бота со start-параметром. `interaction.preview``interaction.requested``interaction.result` Превью, запрос и результат сохраняются как подписанные записи. Перед нажатием сервер повторно получает сообщение и отказывает, если клавиатура изменилась. Текст callback-ответа и URL остаются в журнале. **Чего не делает** Не запускает web apps, платежи, передачу номера или геолокации и инлайн-запросы. Показ URL не открывает ссылку. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/collection/) ## Восстановление и непрерывность Разрывы показываются, а не скрываются. ### Продолжение с сохранённой позиции После рестарта коллектор запрашивает у Telegram пропущенные обновления. Срок хранения ограничен: устаревшая разница может оставить разрыв. ### Повторная проверка сообщений По умолчанию: приоритетные источники — каждые 15 минут, остальные — каждые 6 часов. Результаты: message.recovered и message.missing_on_recheck. ### Отчёт coverage.json В подписанном экспорте — периоды наблюдения, разрывы с причиной и ненаблюдённые ID. Отсутствие при recheck не равно уведомлению об удалении. **Чего не делает** Поздний снимок истории не отменяет простой и не восстанавливает все исчезнувшие версии. Сохранённая позиция не означает приём журнала без потерь. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ## Семь уровней. Разные вопросы. Каждый механизм отвечает на ограниченный вопрос. Внешние сервисы настраиваются отдельно; доверенные ключи и контрольные точки храните вне коллектора. 1. ### Запись SHA-256-цепочка и Ed25519 на каждое событие; первый previous_hash состоит из 64 нулей. **Что проверяет третья сторона** Порядок записей и подписи под заранее доверенным ключом коллектора. **Чего не делает** Не доказывает происхождение от Telegram и полноту доставки. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 ``` 2. ### Контейнер manifest.json перечисляет хеши файлов; manifest.sig подписывает его. media.saved связывает байты вложения с событием. **Что проверяет третья сторона** Файлы согласуются с подписанным манифестом и записями сохранения вложений. **Чего не делает** Не подписывает отдельно скачанные CSV, HTML или скриншоты. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 ``` 3. ### Граница Checkpoint при старте, по умолчанию каждые 5 минут и при штатной остановке. Сохраните копию вне коллектора. **Что проверяет третья сторона** Поздний экспорт совпадает с ранее сохранённой длиной и головным хешем; откат можно обнаружить. **Чего не делает** Не обнаруживает совместную замену журнала и всех сохранённых контрольных точек. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.json ``` 4. ### Время Evidence mode отправляет SHA-256 checkpoint в RFC 3161 TSA (FreeTSA, DigiCert) и календари OpenTimestamps. **Что проверяет третья сторона** Проверенный ответ TSA датирует эти байты; подтверждённое доказательство OpenTimestamps связывает их с Bitcoin. **Чего не делает** Не считает подготовленный запрос или ожидающую подтверждения квитанцию календаря подтверждённой меткой времени. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --tsa-ca trusted-ca.pem ots upgrade checkpoint.ots ots verify checkpoint.ots ``` 5. ### Свидетель Отдельный хост, один read-only endpoint, случайный challenge, собственные ключ и журнал, посты TGW1 в канал. **Что проверяет третья сторона** Ранее принятые головные хеши; статусы ok, key_changed, rollback, fork, invalid и no_response. **Чего не делает** Не превращает два workspace на одном хосте коллектора в независимых свидетелей. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --witness witness.zip --witness-fingerprint WITNESS_SHA256 --channel result.json ``` 6. ### Реплика Копия в S3-совместимом хранилище с AES-256-GCM; Object Lock, если его поддерживает bucket. **Что проверяет третья сторона** Файлы появляются в каталоге восстановления только после проверки журнала, checkpoint и сохранённых вложений. **Чего не делает** Не восстанавливает без экспортированного ключа и не подтверждает срок хранения без проверки ответа хранилища. **Команда проверки** ``` python -m tgwitness.replica restore --key-file KEY.json --out EMPTY_DIR ``` 7. ### Происхождение Подписанный run receipt: хеши исходников, версии зависимостей и контекст процесса. Self-reported. **Что проверяет третья сторона** То, что сам подписывающий коллектор сообщил о своём запуске. **Чего не делает** Не даёт независимой аттестации процесса и не исключает компрометацию до записи. **Команда проверки** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 ``` ### Что не доказывается никаким уровнем Доставка каждого обновления Telegram; правдивость текста; что sender ID — реальный человек; отсутствие компрометации коллектора до записи; допустимость в суде. [Свидетель](https://phishdestroy.github.io/TgWitness/ru/docs/reference/witness/) Локальный эксперимент с SHA-256 ### Попробуйте изменить запись №2 Следующая запись хранит прежнюю ссылку. При изменении текста пересчитывается хеш записи №2. Текст записи № 2 Запись 1`h1`Начинается с 64 нулей Запись 2`h2`Содержит сохранённый h1 Запись 3`h3`Содержит сохранённый h2 Статический пример: h2 включает «Meet at 11:00». Изменение текста меняет h2; запись №3 по-прежнему ссылается на прежний h2. **Посмотреть полные хеши** Хеш сохраненной записи № 2 `SHA-256(e₂)` Пересчитанный хеш записи № 2 `SHA-256(e₂)` Здесь вычисляются хеши, а не подписи. Настоящий верификатор проверяет каждую подпись и связь по доверенному ключу. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/how-it-works/) ## Сценарии применения Вымышленные ситуации. Начинайте сбор до интересующего события; сохраняйте границы и разрывы вместе с содержимым. ### Канал изменяет платежные реквизиты Режим → события Выбранные чаты → сообщения, правки, удаления. Что получаем Наблюдаемые версии сообщений и вложения по хешу. Проверка Подписанный ZIP + сохранённый checkpoint + проверенный ответ TSA. **Чего не делает** Он не восстанавливает оригинал, который никогда не был зафиксирован. ### Сообщения исчезают после инцидента Режим → события Папка или весь аккаунт → все категории событий. Что получаем Сохранённые оригиналы, уведомления об удалении и coverage с разрывами. Проверка Подписанный ZIP + независимый журнал свидетеля. **Чего не делает** Он не позволяет идентифицировать лицо, удалившее сообщение, на основании уведомления, в котором не указан субъект действия. ### Расследование бота-магазина Режим → события Investigation mode → кнопки, превью ссылок и явный запуск бота. Что получаем Подписанные interaction-записи, callback-квитанции и сохранённые профили. Проверка Подписанный ZIP; досье проверяется по этому ZIP. **Чего не делает** Он не открывает веб-приложение бота, не осуществляет платежи и не регистрирует обратные вызовы других клиентов. ### Участник меняет имена в разных чатах Режим → события Любой режим → наблюдённые метаданные отправителя и профиля. Что получаем История имён и username по численному ID, ссылки «также в…» и извлечённые зацепки. Проверка Dossier JSON с проверкой против подписанного ZIP. **Чего не делает** Он не превращает кошелек, строку, похожую на номер телефона, или имя пользователя в подтверждённую личность. ### Долгое наблюдение с внешней копией Режим → события Любой режим → Evidence mode и S3-реплика с поддержкой Object Lock. Что получаем Зашифрованная копия, сохраненные контрольные точки и ответы с временными метками. Проверка Восстановите данные с помощью экспортированного ключа, а затем проверите их без использования исходного сервера. **Чего не делает** Он не заменяет независимого свидетеля или отдельно хранящийся ключ дешифрования. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/) ## Экспорт и передача Передайте подписанный оригинал, заранее сохранённый отпечаток ключа, подходящий checkpoint и результат проверки. - ZIP с подписью - JSONL - CSV - HTML - Контрольная точка - Run receipt - Экспорт чатов: chat.json / chat.html - Досье JSON - Защищено паролем AES-256 ZIP - Отдельные экспорты нескольких аккаунтов - Потоковый CLI: лимит по умолчанию 5 GiB ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.json ``` Верификатор берите из доверенной копии, а не из проверяемого архива. **Чего не делает** Отдельные CSV и HTML не являются подписанными контейнерами. Пароль защищает передачу, но не подтверждает подлинность. Экспорты разных аккаунтов не объединяют журналы. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ## Честное сравнение подходов Базовые артефакты без добавленных подписей, меток времени и свидетелей. Возможности скриптов и логгеров зависят от реализации; «частично» означает только наблюдённый или видимый материал. | Подход | Изменения / удаления | Подпись записи | Внешняя метка времени | Независимый свидетель | Покрытие / разрывы | Проверка без автора | | --- | --- | --- | --- | --- | --- | --- | | Экспорт из Telegram Desktop | Частично | Нет | Нет | Нет | Нет | Нет | | Telethon-скрипт выгрузки | Частично | Нет | Нет | Нет | Нет | Нет | | Логгер удалений: текстовый журнал | Частично | Нет | Нет | Нет | Нет | Нет | | Скриншоты / веб-фиксация | Частично | Нет | Нет | Нет | Нет | Нет | | TgWitness с настроенными дополнениями | Частично | Да | Да | Да | Частично | Да | **Чего не делает** Не оценивает каждый скрипт или логгер. Метки времени и свидетель требуют отдельных сервисов и доверенных ключей; они не устанавливают истинность источника. [Подробности](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/) ## Границы и честные оговорки Проверка полезна, когда ясно, что именно она проверяет. - Секретные чаты недоступны. - Пока процесс остановлен, ничего не записывается; возможности восстановления ограничены. - Проверенная запись не является доказательством достоверности её содержания. - Оператор, обладающий ключом, может подписывать произвольный контент. Независимые свидетели и временные метки ограничивают возможность последующей подмены, но не предотвращают недобросовестный первоначальный захват данных. - Используйте выделенный аккаунт, а не основной. - Telegram может ограничивать доступ к аккаунтам из-за большого объёма запросов. **Чего не делает** Ни один режим или уровень не устанавливает допустимость в суде, доставку каждого обновления Telegram или личность реального человека. [Setup guide](https://phishdestroy.github.io/TgWitness/demo/guide.html?lang=ru)[Dedicated account](https://phishdestroy.github.io/TgWitness/ru/docs/dedicated-account/)[EVIDENCE.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/)[INVESTIGATION.md](https://phishdestroy.github.io/TgWitness/ru/docs/reference/investigation/)