TgWitness / Документация

Документация / 02

Выгрузка через GitHub Actions

Выгрузите чат на временной машине GitHub и получите зашифрованный архив с проверяемым происхождением.

Полный справочник

Предварительная версия в ветке main. Пользователь делает форк, запускает задачу, входит в Telegram во временной панели и выбирает один чат. Сборщик сохраняет доступные сообщения и вложения, GitHub создаёт аттестацию готового ZIP, затем результат шифруется открытым ключом пользователя.

Запуск по шагам#

Схема показывает пять этапов и подмену сообщения или сборщика на примере. Кнопка «Перейти к выгрузке» открывает мастер.

  1. Нажмите «Выгрузка через GitHub Actions» на главной странице проекта, экране входа в панель или откройте «Экспорт → Открыть помощник выгрузки». Прямая ссылка на помощник. Можно также открыть 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. Откройте полученную ссылку. Введите собственные api_id и api_hash, войдите по QR либо телефону/коду и паролю 2FA. Готовые Telegram-сессии импортировать нельзя. Загрузите список чатов и выберите один источник. API-пару получают на my.telegram.org/apps. Ссылка открывает временную панель и содержит секрет доступа: не публикуйте её.
  6. Дождитесь сбора или завершите его с уже доступными данными. Пропуски, ошибки вложений и остановка по времени остаются в подписанном журнале.
  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 передавать не нужно: он используется только для расшифровки доставленного пакета. Расшифровка без последующей проверки аттестации не подтверждает, каким кодом получен архив.

Какой режим выбрать#

В разделе «Экспорт → Открыть помощник выгрузки» мастер работает прямо внутри панели. Отдельная страница использует тот же мастер, оформление и темы. Четыре шага показывают, где вы находитесь: ключ → 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.