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

Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/capture/

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

Включите JavaScript, чтобы сгенерировать ключ и расшифровать ваш архив.

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

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

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

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

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. Откройте полученную ссылку. Введите собственные `api_id` и `api_hash`, войдите по QR либо телефону/коду и паролю 2FA. Готовые Telegram-сессии импортировать нельзя. Загрузите список чатов и выберите один источник. API-пару получают на [my.telegram.org/apps](https://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](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md).
