# 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/docs/reference/overview/index.md) - [English project summary](https://phishdestroy.github.io/TgWitness/llms.txt) - [Complete handbook · Українська](https://phishdestroy.github.io/TgWitness/uk/llms-full.txt) - [Complete handbook as Markdown · Українська](https://phishdestroy.github.io/TgWitness/uk/llms-full.md) - [Source code and release history](https://github.com/phishdestroy/TgWitness) - [Collection modes and evidence levels](https://phishdestroy.github.io/TgWitness/uk/guides/modes.md) - [Published checks and measurements](https://phishdestroy.github.io/TgWitness/docs/validation/index.md) ## Complete documentation map ### Guides - [Робота з архівом](https://phishdestroy.github.io/TgWitness/uk/docs/archive/index.md): Завантажуйте історію, шукайте збережені записи, переглядайте джерела штучного інтелекту та підключайте свої інструменти. - [Запис дій на GitHub Actions](https://phishdestroy.github.io/TgWitness/uk/docs/capture/index.md): Виберіть Takeout,експорт через звичайний API або журнал чату на тимчасовому раннері GitHub. - [Спеціальний обліковий запис](https://phishdestroy.github.io/TgWitness/uk/docs/dedicated-account/index.md): Створіть окремий акаунт у Telegram для збору даних. - [Почніть за лічені хвилини](https://phishdestroy.github.io/TgWitness/uk/docs/start/index.md): Встановіть однією командою, підключіть обліковий запис Telegram та експортуйте архів, який можна перевірити, на Windows, Linux або macOS. - [Підключити обліковий запис](https://phishdestroy.github.io/TgWitness/uk/docs/accounts/index.md): Підключіть Telegram за допомогою QR-коду, номера телефону або імпорту сеансу. Оберіть джерела та переконайтеся, що нові повідомлення надходять до вашого журналу. - [Виберіть проксі-сервер](https://phishdestroy.github.io/TgWitness/uk/docs/proxies/index.md): Підтримуйте автоматичні маршрути MTProxy або використовуйте власний проксі-сервер. Обирайте режими IP, правила резервного переходу та маршрут для зовнішніх запитів. - [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/exports/index.md): Експортуйте збережену історію Telegram, перевіряйте підписи та порівнюйте журнал із контрольною точкою, збереженою незалежним свідком. - [Дізнайтеся, як працює система збереження доказів](https://phishdestroy.github.io/TgWitness/uk/docs/concepts/index.md): Простежте шлях повідомлення від моменту фіксації до контрольної точки. Змініть зразок запису, перерахуйте його ланцюжок SHA-256 і подивіться, що виявить збережена контрольна точка. - [Проведіть розслідування у всіх чатах](https://phishdestroy.github.io/TgWitness/uk/docs/cases/index.md): Проведіть комплексне розслідування в Telegram, охопивши канали, групи, приватні чати та боти: повне копіювання облікового запису, історію, користувачів, посилання, файли, хронологію та перевірені докази. - [Створити «Case Board»](https://phishdestroy.github.io/TgWitness/uk/docs/case-board/index.md): Збирайте збережені спостереження, точні виділення та фрагменти дій на приватній дошці, обговорюйте їх зі своєю командою та презентуйте збірку. - [Створіть звіт](https://phishdestroy.github.io/TgWitness/uk/docs/reports/index.md): Виберіть дані звіту, один із восьми макетів та зміст, а потім перегляньте попередній варіант і експортуйте HTML, підписаний PDF або повний пакет доказів. - [Підготуйте копію для поширення](https://phishdestroy.github.io/TgWitness/uk/docs/handover/index.md): Виберіть записи та поля, які може отримати одержувач, перевірте готову копію та переконайтеся у правильності підписаного маніфесту та меж журналу джерел. - [Управління групою облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/groups/index.md): Порівнюйте групові робочі простори, знаходьте джерела, переглядайте періоди спостереження та застосовуйте спільні налаштування з винятками для окремих облікових записів. - [Забезпечте безпеку](https://phishdestroy.github.io/TgWitness/uk/docs/security/index.md): Дізнайтеся, де зберігаються сесії, ключі та докази, що виходить за межі вашого комп’ютера, що охоплює система захисту та як посилити безпеку інсталяції. - [Поділитися справою](https://phishdestroy.github.io/TgWitness/uk/docs/access/index.md): Надайте рецензентам та аналітикам доступ до вибраних акаунтів і чатів із окремими правами доступу, обмеженнями сеансів та токенами, які можна скасувати. - [Налаштування бота-свідка](https://phishdestroy.github.io/TgWitness/uk/docs/witness/index.md): Публікуйте підписані контрольні точки журналу у своєму каналі Telegram із окремим свідком, власним ключем та доступом до колектора лише для читання. - [Забезпечте його безперебійну роботу](https://phishdestroy.github.io/TgWitness/uk/docs/server/index.md): Запустіть TgWitness на сервері з постійним сховищем даних, приватним доступом до панелі управління, резервним копіюванням та перевірками після перезапуску. - [З’ясуйте, що пішло не так](https://phishdestroy.github.io/TgWitness/uk/docs/troubleshooting/index.md): Перевіряйте доступ до панелі, з’єднання з Telegram, відсутні повідомлення, FloodWait та статус свідка, використовуючи відповідні сигнали для кожної проблеми. ### Reference - [Таємні чати: реалізація та демонстрація](https://phishdestroy.github.io/TgWitness/uk/docs/reference/secret-chats/index.md): Ознайомтеся з окремою реалізацією Секретного чату, випробуйте вигаданий інтерфейс та перегляньте невирішені недоліки. - [TgWitness: початок, масштаб та докази](https://phishdestroy.github.io/TgWitness/uk/docs/reference/overview/index.md): Встановіть за допомогою однієї команди або запустіть на GitHub Actions. Ознайомтеся з варіантами розслідування, опублікованим масштабом та тим, що перевіряє архів. - [Завантажити історію джерел](https://phishdestroy.github.io/TgWitness/uk/docs/reference/history/index.md): Завантажуйте минулі повідомлення з увімкнених джерел, призупиняйте та відновлюйте процес, а також перевіряйте підписаний звіт про хід роботи. - [Аналіз архіву](https://phishdestroy.github.io/TgWitness/uk/docs/reference/analysis/index.md): Здійснюйте пошук серед збережених повідомлень, переглядайте результати роботи штучного інтелекту та зберігайте аналітичні звіти з посиланнями на джерела. - [Командний рядок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/cli/index.md): Здійснюйте пошук, читайте контекст, підраховуйте активність та експортуйте збережені повідомлення зі скриптів та агентів із виведенням у форматі --json, стабільними кодами завершення та токенами з обмеженим доступом, призначеними лише для читання. - [Повнотекстовий пошук](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/index.md): Знайдіть збережені повідомлення за формами слів, точними фразами, доменами та @іменами користувачів, з найкращими збігами на початку, з індексом, прив’язаним до підписаного журналу. - [MCP тільки для читання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/index.md): Підключіть клієнт MCP до вибраних робочих просторів та чатів із тимчасовим, відкличним доступом. - [Локальне розпізнавання тексту (OCR) та транскрипція](https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/index.md): Розпізнавайте захоплені зображення та аудіо за допомогою локального робочого процесу; зберігайте отриманий текст із посиланням на вихідний файл. - [Вихідні веб-хуки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/webhooks/index.md): Надсилайте визначені події на HTTPS-приймачі з HMAC-підписами, повторними спробами та статусом доставки. - [Повідомлення про несумісність з певними операторами](https://phishdestroy.github.io/TgWitness/uk/docs/reference/notice/index.md): Наше повідомлення оператора щодо компанії Taylor Wessing та її джерела інформації. - [Повідомлення про несумісність ліцензій та архітектури](https://phishdestroy.github.io/TgWitness/uk/docs/reference/license/index.md): TgWitness надається під ліцензією MIT для загального користування, і чому він архітектурно несумісний із робочим процесом Taylor Wessing. - [Швидкий старт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/quickstart/index.md): Усі способи встановлення та запуску TgWitness: пакет для Windows, Python, Docker та синтетична демонстраційна версія з першими перевірками. - [Формати облікових записів та сеансів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/index.md): Увійдіть за допомогою телефону, QR-коду або ключа автентифікації, імпортуйте сесії з Telethon, Pyrogram або Telegram Desktop та керуйте кількома обліковими записами. - [Доступ та дозволи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/index.md): Надавайте доступ до облікових записів та чатів з обмеженим обсягом повноважень, обирайте права доступу, обмежуйте сеанси та IP-адреси, а також скасовуйте доступ. - [Підключення, проксі-сервери та захист даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/index.md): Аутентифікація, автоматичні пули проксі-серверів, режими IP, політика резервного переходу, зовнішні запити та зберігання секретних даних. - [Впровадження](https://phishdestroy.github.io/TgWitness/uk/docs/reference/deployment/index.md): Запускайте TgWitness як службу на Windows, Linux, macOS або в Docker, через HTTPS, із резервним копіюванням та оновленнями. - [Як відбувається збір даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/index.md): Обсяг спостереження, оновлення в режимі реального часу, повторні перевірки, вкладення, власні дії та значення пропусків — запис за записом. - [Робочі процеси та операції](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/index.md): Щоденна робота панелі: режими, категорії моніторингу, параметри, сповіщення, експорт даних, резервне копіювання та ємність. - [Режим розслідування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/index.md): Повні розслідування акаунтів у каналах, групах, приватних чатах та ботах — від визначення обсягу до формування перевіреного пакету матеріалів справи. - [Довідка щодо Case Board](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/index.md): Закладки, точні виділення, фрагменти дій, обговорення, обмежений доступ та історія підписаних анотацій, що використовуються Case Board. - [Налаштування та перевірка звітів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/index.md): Фільтри звітів, вісім макетів, пресети змісту, збережені історії змін та оцінка, що містяться у підписаних експортованих файлах. - [Можливості та обмеження](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/index.md): Поточна модель збору даних, робочі процеси з кількома обліковими записами, експорт даних та операційні обмеження TgWitness. - [Як працює система збереження доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/index.md): Пояснення щодо хеш-ланцюга, підписів, контрольних точок та свідків із зазначенням точних формул, які використовує верифікатор. - [Формат доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/index.md): Вміст підписаного ZIP-архіву, типи записів, підтвердження обробки, профілі користувачів, зовнішні копії та офлайн-перевірка. - [Незалежний свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/index.md): Запустіть «witness» із власним ключем та ботом, опублікуйте підписані контрольні точки в каналі та звіряйте експортовані дані з ними. - [Часові мітки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/timestamp/index.md): Часові мітки RFC 3161 для підписаних контрольних точок: що надсилається до центру авторизації та як перевіряється відповідь. - [Безпека та обробка даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/index.md): Модель загроз, модель доступу, збереження конфіденційних даних, мережева вразливість, імпорт сеансів та порядок повідомлення про вразливість. - [Архітектура](https://phishdestroy.github.io/TgWitness/uk/docs/reference/architecture/index.md): Компоненти колектора, панелі, журналу, робочих процесів та свідка, а також схема передачі даних між ними. - [Що було протестовано](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/index.md): Тестування Telegram у режимі реального часу, автоматизовані перевірки, перевірки в браузері та те, що залишається неперевіреним. - [Журнал змін](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/index.md): Усі зміни за версіями, включаючи ті, що ще не опубліковані. - [Посібник з панелей](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/index.md): Кожен екран панелі: чати, щоденник, джерела, експорт, додаткові функції, режими захисту та перевірка коду. - [Перше налаштування та параметри](https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/index.md): Майстер налаштування, цілі, рівні інтерфейсу, маршрути підключення та налаштування, спільні для групи облікових записів. - [Встановлення, перевірка та оновлення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/index.md): Встановіть за допомогою однієї команди, перевіряйте підписи та хеші, оновлюйте та видаляйте інсталяцію. - [Зберігання та відновлення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/index.md): Резервне копіювання, переміщення старих файлів у хмарне сховище, копії під захистом Object Lock та відновлення на новому комп’ютері. - [Експорт облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/account-export/index.md): Експортуйте те, що обліковий запис може переглянути зараз: обсяг даних, завдання, які можна відновити, підписаний архів та мінімізовані копії для спільного доступу. - [Публічна вітрина](https://phishdestroy.github.io/TgWitness/uk/docs/reference/showcase/index.md): Публікуйте збережені повідомлення з обраних публічних каналів та підписані знімки за допомогою посилань з обмеженим терміном дії, які можна скасувати. - [Розгортання з високим рівнем безпеки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/index.md): Захищений сервер, що працює цілодобово без вихідних, на Hetzner або Phala Cloud, шлюз DNS та перевірки, які може повторити третя сторона. --- # Telegram · Почніть за лічені хвилини Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/start/ Встановіть однією командою, підключіть обліковий запис Telegram та експортуйте архів, який можна перевірити, на Windows, Linux або macOS. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/accounts/) за допомогою телефону, QR-коду або імпорту сеансу, що підтримується. 2. Виберіть чати, папку або обліковий запис як область дії. 3. [Експортувати вибрану історію](https://phishdestroy.github.io/TgWitness/docs/reference/account-export/) або розпочати спостереження, щоб зберегти майбутні зміни. 4. [Перевірити архів](https://phishdestroy.github.io/TgWitness/uk/docs/exports/) за допомогою окремого довіреного відбитка ключа. ## Використовуйте тимчасовий GitHub-раннер [Посібник «GitHub Actions capture](https://phishdestroy.github.io/TgWitness/docs/capture/)» допоможе вам із створенням форку, авторизацією, налаштуванням обсягу та паролем архіву. Завантажте зашифрований результат та інформацію про походження робочого процесу після його виконання. Для цього робочого процесу не потрібен постійний сервер-збирач. ## Ознайомтеся з сайтом без реєстрації [Відкрийте демо-версію в браузері](https://phishdestroy.github.io/TgWitness/demo/?lang=uk), щоб ознайомитися з вигаданими повідомленнями, порівняти редагування та перевірити експортні дані, перш ніж встановлювати будь-що. ![Вигляд діалогу в TgWitness із прикладами повідомлень](https://phishdestroy.github.io/TgWitness/assets/chats-dark.png) Приклад робочого простору. Ваш власний журнал створюється окремо. ## Продовжити розслідування Для поточної роботи додайте джерела, правила роботи з файлами, пошук, звіти та дозволи на обмін даними, необхідні для вашої справи. [Запуск, масштабування та докази](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) пояснює варіанти вибору та опубліковані вимірювання. Для встановлення на сервер дотримуйтесь інструкцій у розділі [«Keep it running](https://phishdestroy.github.io/TgWitness/uk/docs/server/)». --- # Використовуйте окремий обліковий запис. Ніколи не використовуйте основний. Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/dedicated-account/ Створіть окремий акаунт у Telegram для збору даних. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Ознайомтеся з цією інформацією перед підключенням облікового запису Наша порада не використовувати ваш основний акаунт — це не жарт. Це реальність. Основний обліковий запис - За допомогою власного хешу додатка 99% облікових записів виходять із системи - Часто трапляються блокування акаунтів лише через низький рівень довіри - Використовувати свій основний акаунт — справді дурна ідея Додатковий акаунт на основі пар ідентифікаторів публічного API та хешів API - За допомогою цих пар API-ідентифікаторів та API-хешів було зареєстровано понад мільйон облікових записів - Ці пари API-ідентифікаторів та API-хешів існують вже понад 5 років - Ніхто не може побачити жодних ваших даних через ці пари API 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=uk#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 років. ### Ваша власна нова пара API-ідентифікатора та API-хешу Створено на my.telegram.org з цього облікового запису. - Приблизно 99% цих облікових записів виходять із системи - Один новий додаток, один обліковий запис ### Пари публічних ідентифікаторів API/хешів API з пулу Ті самі пари API-ідентифікатора та API-хешу, які використовують багато програм. - Зареєстровано понад мільйон облікових записів - Багато різних програм - Ці пари API працюють вже понад 5 років ### Чому ніхто не може побачити ваші дані через ці пари API - #### Пара API — це ім’я, а не ключ Telegram запитує ідентифікатор API та хеш API, коли програма підключається та коли вона запитує код входу. Вони ідентифікують додаток і не надають доступу до жодного облікового запису; у документації Telethon зазначено, що одна пара працює з будь-яким номером телефону. - #### Ваш сесійний ключ ніколи не залишає ваш сервер Під час входу створюється ключ авторизації за допомогою обміну за алгоритмом Діффі–Хеллмана між вашим TgWitness та Telegram; сам ключ ніколи не надсилається. Згідно з документацією Telegram: після авторизації ключ прив’язується до користувача, і кожен виклик із цим ключем виконується від імені цього користувача. Інші програми з тією самою парою мають власні ключі й не можуть використовувати ваш. - #### Трафік шифрується за допомогою вашого ключа Кожен запит і відповідь шифруються за допомогою ключа авторизації сеансу, а не за допомогою хешу API. Знання хешу API не дозволяє розшифрувати жодних даних. - #### Власник пари API-ідентифікатора та API-хешу нічого не бачить У Telegram немає способу перелічити акаунти, сесії або повідомлення за ідентифікатором API. Власник пари бачить лише налаштування свого додатка на сайті my.telegram.org. - #### Лише ваш обліковий запис бачить, про який додаток йдеться У розділі «Налаштування» → «Пристрої» вашого облікового запису міститься перелік назв додатків та ідентифікаторів 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) - [Створення ключа авторизації MTProto](https://core.telegram.org/mtproto/auth_key) - [Шифрування MTProto](https://core.telegram.org/mtproto/description) - [account.getAuthorizations](https://core.telegram.org/method/account.getAuthorizations) - [Що містить запис про авторизацію (сесію) у Telegram](https://core.telegram.org/constructor/authorization) - [Отримання api_id](https://core.telegram.org/api/obtaining_api_id) - [Відкритий вихідний код додатків Telegram](https://telegram.org/apps#source-code) Бібліотеки та теми для обговорення - [Телетон: вхід у Telegram](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) ### Ті самі пари API-ідентифікатора/API-хешу в інших програмах 7 Пари API-ідентифікатора та API-хешу офіційних додатків 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 Повідомлення на форумі зі списком пар API-ID/API-хеш офіційних додатків Telegram, опубліковане для реєстрації облікових записів 03 ## Способи створення додаткового облікового запису Для облікового запису Telegram потрібен номер телефону, на який надходить код для входу. Оберіть варіант залежно від того, як довго має існувати цей обліковий запис. - Найкращий вибір ### Предоплачена SIM-картка або eSIM ******** Як довго це триває Поки ви поповнюєте рахунок Майте на увазі Найбільш надійний варіант: Telegram найкраще сприймає справжні номери мобільних телефонів. Номер, який оператор відкликає, передається комусь іншому. - ### Додаток із віртуальними телефонними номерами ******** Як довго це триває Доки додаток зберігає номер телефону Майте на увазі Telegram може відмовити у видачі віртуального номера, не надіслати код або одразу обмежити можливості нового облікового запису; деякі додатки відкликають номери, які не використовуються. - ### Оренда телефонного номера ******** Як довго це триває На період оренди Майте на увазі Коли термін дії закінчується, номер переходить до наступного клієнта. - ### Одноразова активація ******** Як довго це триває Лише один код входу Майте на увазі Номер одразу повертається до пулу, часто разом з історією попередніх власників. Перш за все встановіть пароль до хмарного сховища. Той, хто згодом стане власником цього номера, зможе запросити код для входу. Хмарний пароль (двофакторна аутентифікація) не дозволить йому увійти в систему; без нього обліковий запис перейде до наступного власника цього номера. Документація Telegram - [Часті запитання щодо спаму: віртуальні номери та попередні власники](https://telegram.org/faq_spam) - [Двоступенева верифікація](https://core.telegram.org/api/srp) ### Орендовані номери з префіксом +888 (Fragment) Деякі торгові майданчики та сервіси пропонують тимчасову оренду офіційних номерів 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 акаунти від різних провайдерів або акаунти, які ви зареєстрували самостійно. **«Преміум», видалення та семиденна затримка** Якщо акаунт має підписку «Premium», особа, яка має доступ до номера телефону, не зможе видалити акаунт одразу. Ви отримаєте сповіщення та матимете сім днів до видалення. Це важливо, оскільки ваше розслідування залежить від цього акаунта: у вас є час підготувати замінник. **Нові акаунти та облікові дані 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 · Підключити обліковий запис Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/accounts/ Підключіть Telegram за допомогою QR-коду, номера телефону або імпорту сеансу. Оберіть джерела та переконайтеся, що нові повідомлення надходять до вашого журналу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Один простір = один акаунт, його журнал і його ключ. ## Виберіть спосіб входу **Акаунти** → додати простір → налаштування підключення. Використовуйте для цього окремий акаунт. - **QR-код:** відскануйте його на екрані «Пристрої» в Telegram і підтвердьте. - **Номер телефону:** номер, код, потім пароль 2FA, якщо він є. - **Імпорт сесії:** ваш власний файл сесії або дані Telegram Desktop. Використовуйте вбудований профіль API або власні API ID і hash. Він лише називає застосунок — не входить в акаунт і нічого не приховує. **Спочатку потрібен проксі-сервер?** Ви можете [вибрати та перевірити маршрут з’єднання](https://phishdestroy.github.io/TgWitness/uk/docs/proxies/) перед входом у систему. Кожен обліковий запис має свій власний маршрут. ## Виберіть, що спостерігати 1. Оберіть потрібні чати, групи чи канали. 2. Перевірте налаштування збору, зокрема медіа. 3. Запустіть і перевірте підключення та нещодавню активність. Акаунт повинен мати доступ. Адміни й учасники бачать різне, журнал показує те, що отримав цей акаунт. Весь акаунт? **Джерела → Охоплення спостереження → Режим розслідування**, перевірте й натисніть **Зберегти охоплення**. Повний розбір: [розслідування по всьому акаунту](https://phishdestroy.github.io/TgWitness/uk/docs/cases/). ## Перегляньте весь шлях У тестовій групі надішліть повідомлення з іншого акаунта, відредагуйте й видаліть його. У журналі мають з'явитися всі три події. Потім [експортуйте й перевірте](https://phishdestroy.github.io/TgWitness/uk/docs/exports/). «Підключено» означає, що зв'язок працює. Спіймане тестове повідомлення означає, що події справді доходять. ## Додати ще один обліковий запис Новий простір в **Акаунтах**, ті самі кроки. Запишіть відбиток ключа кожного акаунта, щоб потім розрізняти експорти. --- # Telegram · Виберіть проксі-сервер Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/proxies/ Підтримуйте автоматичні маршрути MTProxy або використовуйте власний проксі-сервер. Обирайте режими IP, правила резервного переходу та маршрут для зовнішніх запитів. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/witness/) має власні налаштування. Ніщо з цього не торкається вашого браузера й системної мережі. Ще: [режими й типові значення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/#ip-modes), [хто може змінювати маршрути](https://phishdestroy.github.io/TgWitness/uk/docs/access/). --- # Telegram · Експорт та перевірка Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/exports/ Експортуйте збережену історію Telegram, перевіряйте підписи та порівнюйте журнал із контрольною точкою, збереженою незалежним свідком. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Передайте файли, які отримувач сам звірить із вашим простором. Зберегти посиланняЕкспорт підписаного ZIP-файлуОдержувач перевіряє Уперше чуєте про підписи й контрольні точки? [Змініть приклад запису](https://phishdestroy.github.io/TgWitness/uk/docs/concepts/#chain) й подивіться, які перевірки це помітять. Хочете зберігати копію окремо від сервера-збирача? Перейдіть до [налаштувань S3](https://phishdestroy.github.io/TgWitness/uk/docs/exports/#s3), функції [Object Lock](https://phishdestroy.github.io/TgWitness/uk/docs/exports/#s3-retention) або [верифікованого відновлення](https://phishdestroy.github.io/TgWitness/uk/docs/exports/#s3-restore). ## Збережіть надійне джерело інформації Запишіть відбиток ключа простору десь поза збирачем. Під час збору теж зберігайте підписані контрольні точки деінде або запустіть [незалежного свідка](https://phishdestroy.github.io/TgWitness/uk/docs/witness/). Саме з цим отримувач звіряє ключ і попередній стан журналу. ## Завантажити підписаний ZIP-файл **Експорт** → підписаний ZIP з доказами. У ньому весь журнал і підписаний маніфест файлів. Читабельний звіт налаштовується в [Report studio](https://phishdestroy.github.io/TgWitness/uk/docs/reports/), а якщо треба віддати лише вибране — зробіть [виписку для передачі](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/#verification-scope). ## Налаштування позасайтової копії в S3 **Експорт → Зовнішня копія** у вашому просторі. Працює з AWS S3 і будь-яким S3-сумісним сховищем. Копіює сегменти журналу, збережені файли, контрольні точки з мітками часу та готові експорти чатів, кожен шифрується `AES-256-GCM` ще на збирачі. В онлайн-демо ці налаштування показано з вимкненим завантаженням. Справжні облікові дані вводьте лише у своєму встановленні. [![Повна панель налаштувань поза сайтом: кінцева точка, регіон, сховище, ключі доступу, розклад, блокування об’єктів та управління ключами відновлення](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/uk/docs/capture/ Виберіть Takeout, експорт через звичайний API або журнал чату на тимчасовому раннері GitHub. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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) · [Independent capture](https://github.com/phishdestroy/TgWitness/blob/main/docs/OPTIONAL-CAPTURE.md) ![Independent capture](https://phishdestroy.github.io/TgWitness/assets/chapter-capture.svg) **Preview available from `main`.** A fork launches a pinned reusable workflow from `phishdestroy/TgWitness`. The workflow exports an account, selected chats or one chat's event journal using a newly created Telegram session, attests the evidence ZIP or multipart manifest, and uploads only recipient-encrypted handoffs. The normal administration panel is not exposed. Choose `client=official_web` to run the [official-client witness](https://github.com/phishdestroy/TgWitness/blob/main/docs/OFFICIAL-WITNESS.md) with guarded Telegram Web controls and video. It requires your own upstream proxy and observes one rendered chat. The default `client=api` retains the full-account export modes described below. The verifier checks the archive against its GitHub attestation, the approved workflow and collector commits, and the signed journal and attachment hashes. The collection process uses pinned upstream code and fresh storage. A reviewer can inspect that code and verify the delivered archive against its recorded run. **On this page** - [User flow](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#user-flow) - [Session time budget](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#session-time-budget) - [Choose this mode or a persistent workspace](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#choose-this-mode-or-a-persistent-workspace) - [What is public, and what must stay private](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#what-is-public-and-what-must-stay-private) - [Troubleshooting](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#troubleshooting) - [Local decryption and verification](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#local-decryption-and-verification) - [How the fork is kept outside the capture process](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#how-the-fork-is-kept-outside-the-capture-process) - [Cryptographic handoff](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#cryptographic-handoff) - [Limits and validation](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#limits-and-validation) - [Maintainer release sequence](https://phishdestroy.github.io/TgWitness/uk/docs/capture/#maintainer-release-sequence) ## User flow The helper explains the five stages and lets you try message or collector substitution on sample data. **Start my capture** opens the wizard. 1. Choose **GitHub Actions capture (preview)** on the project homepage, the workspace login screen, or **Exports → Open capture helper**. You can also open the [official helper](https://phishdestroy.github.io/TgWitness/sealed.html?lang=en) or `tgwitness/static/capture.html` from a trusted checkout in a modern browser. The helper makes no network requests for key or file processing. The helper supports the site's interface languages; the temporary collection panel supports English and Russian. 2. Generate a key and save **sealed-key.json**. This is the only private decryption key. Copy the separate public **recipient** value. Losing the private key loses access to both the connection and the archive. Confirm that you saved it to unlock the next step. If you already have a delivery file, load the saved key and choose **I already have an archive**. 3. Fork TgWitness, enable Actions in the fork, and run **Sealed chat capture**. Paste the public recipient and choose 30, 60, or 120 minutes. Never put a phone number, login code, Telegram password, private key, or session in workflow inputs, commits, issues, or logs. 4. During the run, download **sealed-connection** from Artifacts and unzip it. Load `connection.tgwsealed` in the helper, using the saved private key. The resulting link contains a random access secret in its URL fragment. Keep this link private. The panel removes the fragment and keeps the secret in this tab's session storage; it is not placed in HTTP access logs. 5. Open the connection link. Sign in with a QR code, or with your phone number and the login code. Enter your two-step verification password if Telegram asks for it. The built-in API credential pool is used by default, just like the normal workspace. You may expand the optional custom credentials section and enter both `api_id` and `api_hash` from [my.telegram.org/apps](https://my.telegram.org/apps). Leave both fields empty to use the built-in pool; a partial or malformed pair is rejected. Session imports are not allowed. Choose the export mode and scope. The connection link contains an access secret: keep it private. 6. Choose **Telegram Takeout**, **Regular Telegram API** or **Chat event journal**. For account export, choose all accessible chats or load and select one or more chats, then set dates, chat types, account categories and attachment rules. Check settings and size, optionally save the settings JSON for an independent reviewer, then press **Start capture**. Settings are fixed after starting. Resume works only while this runner exists; finishing early preserves acquired data and records gaps. Deadline expiry after starting produces an explicitly partial archive; expiry before starting or cancellation produces no archive. 7. Wait for **sealed-result**, download and unzip it, and decrypt `delivery.tgwsealed` in the helper. You receive `delivery.zip`, containing `evidence.zip`, `attestation.jsonl`, and instructions. Browser decryption is limited to 256 MiB; larger packages use the streaming local command below. Large results also include `delivery-NNNNNN.tgwsealed` parts; the main `delivery.tgwsealed` then contains `evidence.parts.json` and the attestation. Download every part and assemble locally as described below. 8. End the temporary session in Telegram Settings → Devices if revocation was not confirmed or the runner was killed. Normal completion attempts logout; network failures and forced runner termination prevent an absolute guarantee. The repository must contain the published pinned source and reusable-workflow commits. A local branch alone cannot be invoked by another GitHub repository. ## Session time budget Before collection, **Calculate time and size** estimates the selected history and files from message counts and a bounded sample. The display includes time already spent signing in, estimated collection time and a reserve for packaging. For files, the initial estimate uses 1 MiB/s and a twofold time margin; progress replaces that assumption with the measured rate. Use **Messages only** or select fewer chats when the estimate exceeds the remaining time. Telegram's reported Takeout wait is added to the budget. The collector stops acquisition when the remaining time is needed for packaging, retains acquired data and marks a partial result. A 120-minute session therefore uses its remaining collection window rather than waiting for the deadline before preparing the archive. The display identifies selections whose full size could not be sampled. ## Choose this mode or a persistent workspace | Capture mode | Configurable scope | Difference | | --- | --- | --- | | Telegram Takeout, the default | All accessible cloud chats or selected chats, dates, account categories, media policies and JSON/HTML views | Uses Telegram's official export mechanism; approval or waiting may be required. Takeout can enumerate left channels/groups where Telegram permits it and request additional personal data. | | Regular Telegram API | The same account scope and output choices, subject to methods available through the regular API | Does not initialize Takeout; cannot enumerate left channels/supergroups or fetch Takeout-only personal data. Contacts cover Telegram users rather than the complete saved phone contact list. Rate limits still apply. | | Chat event journal | One selected chat, attachment policies and optional avatars | Captures history and changes observed during this run. Account categories, date filters and Desktop-compatible views do not apply. | All three modes have the same GitHub attestation and encrypted delivery. Takeout is an acquisition method, not a stronger signature. It is never silently replaced by regular API access. JSON/HTML views are generated by TgWitness; they are not Telegram-signed files or guaranteed byte-identical Desktop exports. See the [official Takeout API](https://core.telegram.org/api/takeout). Defaults use Takeout, all accessible chat types including archived chats, all dates, account profile and contacts, compatible JSON and HTML, and file downloads. The initial media budget is 4 GiB, with visible per-type file limits; larger files or exhausted download budgets use server hashes where available. Review these limits before collecting. Hashes cannot reconstruct a file. Optional photos, stories, session metadata and extra personal data remain separate choices. Takeout may require approval in an established Telegram session. Telegram sets the delay; a new login or runner does not bypass it. The maximum capture window is 120 minutes including login and approval, so a large account or long approval wait may not finish. A persistent local export can resume the same session, but does not inherit GitHub attestation. ### Agree and verify the settings After **Check settings and size**, use **Save settings for verification**. Agree the resulting `sealed-export-settings.json` with the reviewer before collection. Changes invalidate the saved assessment. The collector signs the effective settings and their SHA-256, and account-export receipts bind the same options. The verifier reports the actual mode, selection and completeness, and rejects a disagreement between the journal and nested account export. ``` python -m tgwitness.sealed_verify evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness --expected-selection sealed-export-settings.json --require-complete ``` `--expected-selection` rejects a different transport, chat scope, filter or attachment policy. `--require-complete` rejects partial account exports and chat journals, whose overall completeness is not established. Without these flags, verification still checks provenance and integrity while reporting the recorded settings and gaps. A file supplied only with the finished archive cannot establish what was agreed beforehand. A valid signature never turns omitted data into data that was collected, or proves the owner did not edit/delete messages before capture. | Need | Mode | | --- | --- | | Export accessible account data or selected chats during a limited session and give a reviewer an externally attested archive | GitHub Actions capture (preview) | | Observe several chats continuously, manage accounts, search and read a growing archive | Local or Docker workspace | This starts a separate capture with a new login. It does not upload your existing local journal, export the currently open workspace, or reuse its Telegram session. An unfinished cloud capture cannot resume after its runner is destroyed; a new workflow starts a new capture. The workspace's **Exports → Open capture helper** opens the complete wizard inside the panel. The standalone page uses the same wizard, controls and themes. Both keep keys and decryption in your browser. GitHub workflow startup and the temporary Telegram panel open in separate tabs; the wizard tells you when to return. Locking the workspace clears the wizard's in-memory key. Your saved key file remains on your device. ## What is public, and what must stay private Collection runs on a standard GitHub-hosted runner. GitHub, the approved collector and dependencies, the helper page, the browser and the HTTPS tunnel are trusted parts of this setup. The temporary host processes the Telegram session and plaintext messages; the delivered artifacts are encrypted for the recipient. Forking copies project code into your repository. It does **not** export your Telegram account. The recipient workflow input is a public encryption key. Keep `sealed-key.json`, Telegram credentials, login codes, 2FA passwords and the decrypted connection URL out of commits, workflow inputs and public logs. The workflow publishes encrypted connection/result artifacts for one day. Download both in time; GitHub Actions availability, account limits and billing apply. A public fork is not a promise of unlimited free compute. No payment or GitHub access token is entered into the helper. The private decryption key stays in your browser/file. Telegram session material and plaintext observations necessarily exist inside the temporary collector. GitHub and the HTTPS tunnel remain trusted infrastructure. Attestation may make the archive digest and workflow identity public; the archive contents are not placed in the attestation. The attestation timestamp is not a message timestamp. ## Troubleshooting | Symptom | Next step | | --- | --- | | No **Run workflow** button | Open your own fork, enable Actions, and sync it with upstream `main`. Do not edit the approved upstream pins to bypass a failure. | | No `sealed-connection` artifact | Check whether the job started and completed its startup/upload step. Queue, runner, image download, tunnel or repository policy failures can prevent startup. | | Cannot open the connection | Load the saved key for this run, unzip the downloaded artifact and select `connection.tgwsealed`. The runner must still be active. | | History is paused | Check the panel's status and use Resume while the session remains active, or finish with the data already collected. Telegram limits and inaccessible content can leave gaps. | | No `sealed-result` | Cancellation or expiry before starting collection produces no archive. A failed collection, attestation or packaging step also prevents delivery. Inspect the failed step without posting credentials. | | Browser cannot decrypt a large archive | Use the streaming CLI below for packages larger than 256 MiB. A wrong or lost private key cannot decrypt the result. | | Verification rejects the signer | Use a trusted current TgWitness installation and the exact caller `OWNER/REPOSITORY`. Do not accept a replacement policy supplied with the archive. | | Telegram still lists the temporary session | End it in Settings → Devices. Logout can fail and a forcibly terminated workflow may not run cleanup. | Before relying on this preview, try a small chat you control: create a message and attachment, collect them, decrypt the result, run the verifier, check the coverage/media outcomes and confirm Telegram session revocation. Automated checks use a synthetic Telegram client plus a separate real GitHub certificate test; they do not establish live account acceptance. ## Local decryption and verification Use tools from an independently trusted installation, not executable files supplied by an unknown evidence archive: ``` python -m tgwitness.sealed_crypto decrypt delivery.tgwsealed --key sealed-key.json --out delivery.zip # Unzip delivery.zip using your archive manager, then: python -m tgwitness.sealed_verify evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness ``` For multipart delivery, decrypt the main package first and keep its extracted manifest beside every encrypted part, then run: ``` 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 ``` The manifest is the attested subject and binds every part and the assembled ZIP. Use `--max-gib` to set an appropriate uncompressed verification ceiling for a large archive; the default is 4 GiB. Expected-selection and complete-scope checks also work with multipart delivery. Python 3.11+, the project's dependencies, and a recent GitHub CLI supporting `--signer-digest` and `--deny-self-hosted-runners` are required. A CLI key generator is also available: `python -m tgwitness.sealed_crypto keygen sealed-key.json`. The verifier uses `tgwitness/sealed_policy.json` from the trusted installation. It checks the caller repository, upstream signer workflow, approved signer commit, hosted runner requirement, complete ZIP digest, internal journal and attachment integrity, fresh account-key origin, and expected collector commit. It displays history and media outcomes instead of implying all data was saved. An empty approved-release list fails closed. Updating the policy is an explicit trust decision; never accept an archive's own proposed policy automatically. For offline use, obtain trusted roots ahead of time from a trusted environment: ``` gh attestation trusted-root > trusted_root.jsonl python -m tgwitness.sealed_verify evidence.zip --bundle attestation.jsonl --repo OWNER/TgWitness --trusted-root trusted_root.jsonl ``` The timestamp of the attestation concerns the archive's commitment. It does not authenticate message timestamps or the collector's wall clock. See [GitHub's verification options](https://cli.github.com/manual/gh_attestation_verify). ## How the fork is kept outside the capture process The caller contains a job-level reference to the upstream reusable workflow at a full commit SHA. That workflow explicitly checks out **the upstream repository at a fixed collector SHA**. A default `actions/checkout` in a reusable workflow would check out the caller and is intentionally not used. The workflow does not restore caller caches, consume caller artifacts, execute caller files, or accept source/image URLs, shell commands, prepared ZIP files, or hashes to sign. It accepts a bounded public recipient and session duration. Actions, the Python base image, and cloudflared are pinned by immutable digests; Python dependencies use the existing hash-locked requirements. The image is built from the trusted source without a cache. The collector runs as a non-root user with a read-only image, dropped Linux capabilities, resource limits, and no Docker socket or GitHub-token environment. Its only mounts are fresh configuration, workspace, and output directories. The restricted FastAPI application exposes login, dialogs, configurable account or chat collection, status, resume, finish, and cancellation. There is no plaintext download route, general administration route, import route, or signing endpoint. The supervisor stops the network-facing containers before the attest action reads the final fixed `evidence.zip` or `evidence.parts.json`. The packaging container has no network. The upload steps name only `connection.tgwsealed` and `delivery*.tgwsealed`; neither plaintext evidence nor Telegram credentials are uploaded as artifacts. Cleanup removes the private directories and containers, with no claim of physical disk erasure. Artifact retention is one day; download before expiry. A fork owner can replace the caller or create a different signed file. The strict verifier must reject the resulting **different signer workflow/digest**. This construction still depends on the absence of exploitable bugs in approved code and on the integrity of GitHub's runner and signing infrastructure. ## Cryptographic handoff Each recipient key is RSA-3072 (RSA-4096 imports also accepted), exponent 65537. Each envelope has a fresh random AES-256 key and 96-bit nonce. RSA-OAEP with SHA-256/MGF1-SHA256 wraps the AES key. AES-GCM with a 128-bit tag authenticates the complete prefix and payload. The public recipient is DER SPKI in base64; the private key file contains DER PKCS8 in base64. Envelope bytes are `TGWSEAL1\n`, a big-endian uint32 JSON-header length, the header, ciphertext, and a 16-byte GCM tag. The header has exactly `algorithm`, `key`, and `nonce`; algorithm is `RSA-OAEP-256+A256GCM`. The complete prefix through the header is GCM additional authenticated data. Header size is bounded at 8192 bytes. The CLI streams payloads up to 8 GiB and authenticates before installing the requested output; it refuses overwriting an existing destination. This is a project-specific envelope around standard cryptographic primitives, not an independently audited encryption format. The original evidence bytes are attested **before** placing the evidence and attestation in the encrypted outer package. This avoids a circular dependency between the archive's hash and a certificate included inside that same archive. For public repositories, attestation metadata (repository, workflow, commit, artifact name and digest) is public. Never put chat names in public metadata. ## Limits and validation This mode uses the signed journal and account-export engine. Secret Chats, deleted history from before collection and data inaccessible to the account are excluded. Private cloud chats are eligible when selected. The chat picker is capped at 20,000 dialogs; account export discovers its own inventory. Missing data, failed files and unfinished tasks are recorded. Attachment limits and runner disk/time limits still apply. Large delivery uses encrypted parts instead of a fixed 4 GiB delivery cutoff. Completion means the frozen selected tasks finished, not that every historical Telegram record exists in the archive. The chat journal can also observe live updates; neither mode is an atomic snapshot. Generated screenshots and screen recordings are not part of this mode. Tests cover synthetic fresh login, scope isolation, media, cancellation, partial deadline completion, failed logout, forbidden API paths and fields, preloaded workspace rejection, wrong-key and tamper rejection, required verifier flags, and browser/Python encryption interoperability. The browser acceptance test uses a plainly labelled mock attestation; it is not a real Sigstore test. Real hosted-runner, Docker, GitHub attestation, and live Telegram acceptance must be reported separately from local synthetic checks. [GitHub Actions terms](https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features#actions) restrict use of hosted runners to the software project's lifecycle. A fork does not remove these restrictions; this preview must not be marketed as unrestricted free production hosting. [Cloudflare Quick Tunnels](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) are also intended for testing and development. The helper/workflows are suitable for evaluating this feature; production service eligibility remains a separate deployment requirement. ## Maintainer release sequence 1. Commit and review the collector, supervisor, container definition and tests. 2. Pin that collector commit in `sealed-collector.yml`, then commit/review the reusable workflow. Never silently derive the checkout from the caller SHA. 3. Pin the reusable workflow commit in `sealed-witness.yml` and add its workflow/collector SHA pair to `sealed_policy.json` in a trusted release. 4. Publish all referenced commits and the helper, then test an independent fork and the real GitHub certificate. Do not squash away commits referenced by these pins unless the references are regenerated and published again. See [reusable workflows and attestations](https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/increase-security-rating) for the distinction between the caller repository and the upstream signer. --- # Telegram · Проведіть розслідування у всіх чатах Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/cases/ Проведіть комплексне розслідування в Telegram, охопивши канали, групи, приватні чати та боти: повне копіювання облікового запису, історію, користувачів, посилання, файли, хронологію та перевірені докази. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Ціла справа по каналах, групах, особистих чатах і ботах: зібрати, пов'язати, відновити хронологію, передати. Один вигаданий інцидент від початку до кінця. Збір, пошук і профілі людей знаходять записи, [Case Board](https://phishdestroy.github.io/TgWitness/uk/docs/case-board/) їх упорядковує, [Report studio](https://phishdestroy.github.io/TgWitness/uk/docs/reports/) оформлює. РЕАЛЬНИЙ ВИПАДОК / ЗМІНА АДРЕСАТА ПЛАТЕЖУ ### Один інцидент. Чотири розмови. Слід, який потрібно відтворити. Пост у каналі веде на бота. У групі обговорюють нове платіжне посилання, бот його показує. Пост редагують, в особистому чаті посилання повторюють, повідомлення в групі зникає. Хто опублікував кожну версію?Де з’явилося це посилання?Який файл було збережено?Що змінилося і коли? Завантаження історії, ШІ, MCP, OCR і вебхуки: [Робота з архівом](https://phishdestroy.github.io/TgWitness/uk/docs/archive/). ## 1. Забезпечити охоплення всього облікового запису Охоплення всього акаунта — лише на окремому акаунті. Основному — вибрані чати або папка. 1. [Підключіть акаунт](https://phishdestroy.github.io/TgWitness/uk/docs/accounts/) в окремому просторі. Запишіть номер справи, ID акаунта, простір і відбиток ключа. 2. **Джерела → Охоплення спостереження → Режим розслідування**: **Весь акаунт**, усі чотири типи джерел, **Власні дії**. Для кожного нового чату зберігаються профіль і останні **200 видимих повідомлень**. **Зберегти охоплення** й підтвердьте. 3. **Завантажити чати** й порівняйте зі списком чатів акаунта. Ліміт — 1000 діалогів (до 20 000 у **Параметри → Чати зі списку акаунта**); чати понад ліміт з'являться, коли стануть активними. 4. **Налаштування запису** → **Уся видима активність**, перевірте ліміти вкладень і місце на диску. Запустіть і перевірте на повідомленні, правці й видаленні. КаналиГрупиПриватні чатиБоти ОДИН ОБЛІКОВИЙ ЗАПИС / ОДИН КЛЮЧ ПІДПИСАННЯ**Уся вибрана активність, видима для облікового запису, → один журнал** Повідомлення · редагування · повідомлення про видалення · видимі реакції · події, пов’язані з членством · власні дії «Весь акаунт» — це всі чати, які цей акаунт може відкрити, за винятком виключень. Секретних чатів немає. Нові чати додаються в міру появи, стара історія сама не завантажується. ## 2. Збирання історії та збереження файлів Створіть колекцію в Case Board і позначте важливе. Ведіть реєстр джерел: ID чату, назва, акаунт, роль, початок живого збору, результат історії, результат медіа, прогалини. | Потрібно | Дії на панелі | Що він пропонує | | --- | --- | --- | | Історія у всіх увімкнених чатах | Джерела → Завантажити повну історію | Доступні попередні повідомлення потрапляють до журналу робочого простору з можливістю призупинення/відновлення та підписаним звітом про хід роботи. [Посібник з історії](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/groups/) показує статус, ділиться налаштуваннями й експортує всіх разом — у кожного свій журнал і ключ. Спільну хронологію по акаунтах збирайте у своїх нотатках. Довга справа? Додайте [незалежного свідка](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/handover/). --- # Telegram · Створити «Case Board» Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/case-board/ Збирайте збережені спостереження, точні виділення та фрагменти дій на приватній дошці, обговорюйте їх зі своєю командою та презентуйте збірку. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reports/). Для отримувача з обмеженим доступом використовуйте [передачу](https://phishdestroy.github.io/TgWitness/uk/docs/handover/). Докладніше: [довідник з Case Board](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/). --- # Telegram · Створіть звіт Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reports/ Виберіть дані звіту, один із восьми макетів та зміст, а потім перегляньте попередній варіант і експортуйте HTML, підписаний PDF або повний пакет доказів. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/handover/). Ще: [вміст звітів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/), [перевірка експорту](https://phishdestroy.github.io/TgWitness/uk/docs/exports/). --- # Telegram · Підготуйте копію для поширення Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/handover/ Виберіть записи та поля, які може отримати одержувач, перевірте готову копію та переконайтеся у правильності підписаного маніфесту та меж журналу джерел. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reports/). Довірені посилання: [перевірка експорту](https://phishdestroy.github.io/TgWitness/uk/docs/exports/). --- # Telegram · Управління групою облікових записів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/groups/ Порівнюйте групові робочі простори, знаходьте джерела, переглядайте періоди спостереження та застосовуйте спільні налаштування з винятками для окремих облікових записів. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reports/), [Case Board](https://phishdestroy.github.io/TgWitness/uk/docs/case-board/), [перевірка експорту](https://phishdestroy.github.io/TgWitness/uk/docs/exports/). --- # Telegram · Дізнайтеся, як працює система збереження доказів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/concepts/ Простежте шлях повідомлення від моменту фіксації до контрольної точки. Змініть зразок запису, перерахуйте його ланцюжок SHA-256 і подивіться, що виявить збережена контрольна точка. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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 SANDBOXСправжній 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, послідовність та посилання кожної події. Відновлення лише хешів не дозволяє створити дійсні підписи за допомогою довіреного ключа. ## Фактичні правила, у кількох рядках HASH + ПІДПИС 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/uk/docs/reference/evidence/#event-canonicalization). ЗБЕРЕЖЕНА КОНТРОЛЬНА ТОЧКА Nexport ≥ Ncheckpoint hexport[Ncheckpoint] = Hcheckpoint Перевірте підпис контрольної точки за закріпленим ключем, потім порівняйте її з журналом. Пізніший експорт може бути довшим, але в точці має збігатися. ## Три запитання, три різні перевірки [01 / ЦІЛІСНІСТЬ**Чи змінився цей запис?** Хеші й підписи за ключем, якому ви довіряєте.](https://phishdestroy.github.io/TgWitness/uk/docs/exports/)[02 / БЕЗПЕРЕРВНІСТЬ**Що було збережено раніше?** Порівняйте експорт з контрольними точками, які зберіг свідок.](https://phishdestroy.github.io/TgWitness/uk/docs/witness/)[03 / РЕАЛІЗАЦІЯ**Чи надійшли ці тестові події?** Надішліть, змініть і видаліть тестові повідомлення й подивіться, що впіймав кожен акаунт.](https://phishdestroy.github.io/TgWitness/uk/docs/cases/) Підписи відповідають на питання «чи змінювали», контрольні точки — «чи збігається з тим, що було раніше», тестові повідомлення — «чи впіймали ми все». [Що перевірка доводить, а що ні.](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) Далі: [розслідування по всьому акаунту](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/security/ Дізнайтеся, де зберігаються сесії, ключі та докази, що виходить за межі вашого комп’ютера, що охоплює система захисту та як посилити безпеку інсталяції. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Що йде з вашої машини, що відкриває кожен секрет і що захищено, а що лишається на вас. **127.0.0.1**адреса панелі за замовчуванням **256-бітний**випадковий токен панелі **0**CDN, аналітика або віддалені шрифти **Ed25519**підпис на кожному записі ## Де все зберігається Збирач, панель і всі записи лишаються на вашій машині. Типово зв'язок є лише з Telegram, усе інше вмикається окремо. 06 / ЩО ВИХОДИТЬ З МАШИНИВаша інсталяція ВАШ КОМП’ЮТЕР АБО СЕРВЕР **Панель**127.0.0.1:8787 · токен-носій **Колектор**Один клієнт 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/uk/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/uk/docs/witness/ Публікуйте підписані контрольні точки журналу у своєму каналі Telegram із окремим свідком, власним ключем та доступом до колектора лише для читання. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/witness/#verify) з експортом збирача. --- # Telegram · Робота з архівом Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/archive/ Завантажуйте історію, шукайте збережені записи, переглядайте джерела штучного інтелекту та підключайте свої інструменти. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Знайдіть повідомлення. Перевірте джерело. Складіть справу. 01**Додайте історію** Завантажте минулі повідомлення ввімкнених джерел у простір. 02**Слідкуйте за джерелами** Шукайте, а потім відкривайте збережене повідомлення за кожним результатом. 03**Забезпечте чіткість передачі інформації** Ваш аналіз — в одному файлі, підписані докази — поруч. Зафіксовані записи, розпізнаний текст та висновки аналітиків чітко розмежовуються. ## Завантажити попередні повідомлення 1. **Джерела → Чати в охопленні**: перевірте ввімкнені чати й запустіть спостереження. 2. **Завантажити всю історію**. Береться список джерел у його поточному вигляді. 3. **Призупинити історію** / **Продовжити історію** — будь-коли. Після перезапуску продовжуйте вручну. 4. Перевірте результат за кожним джерелом і чергу завантажень, збережіть підписаний звіт про перебіг разом з експортом. Так заповнюється простір. Експорт одного чату в HTML/JSON — окрема операція. [Докладніше](https://phishdestroy.github.io/TgWitness/uk/docs/reference/history/). ## Спочатку здійсніть пошук, а потім вирішуйте щодо використання ШІ 1. **Журнал** шукає локально, з фільтрами за джерелом і часом. 2. Знайдіть фразу чи домен, відкрийте запис і його версії. 3. Для ШІ адміністратор налаштовує провайдера в **Інтеграціях**. Потім **Запитати архів**: оберіть чати й період, перегляньте **Дані для моделі** та зніміть позначки з того, що не має піти. 4. Перевірте цитати, збережіть відповідь як звіт і додайте свої нотатки. Пошуку ШІ не потрібен. Звіти зберігають джерела й правки окремо від підписаного журналу. [Налаштування провайдера](https://phishdestroy.github.io/TgWitness/uk/docs/reference/analysis/). ## Оберіть потрібний варіант підключення | Завдання | Відкрити | Налаштування | | --- | --- | --- | | Дати ШІ-клієнту читати вибрані чати | **Інтеграції → MCP** | [Встановити MCP, створити обмежений токен, підключити](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/) | | Розпізнавання тексту у збережених медіафайлах | Запис `media.saved` → **Розпізнати вкладення** | [Налаштувати локальний Docker-воркер](https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/) | | Надсилайте події до n8n або SIEM | **Інтеграції → Вихідні веб-хуки** | [Додати отримувача, перевіряти HMAC, відсіювати дублі ID](https://phishdestroy.github.io/TgWitness/uk/docs/reference/webhooks/) | **Який токен доступу куди вводити?** Доступ до панелі — для людей. MCP має власні токени лише для читання, вебхуки — власний секрет HMAC. Сесія Telegram нікому з них не потрібна. [Надайте доступ до панелі](https://phishdestroy.github.io/TgWitness/uk/docs/access/) або [налаштуйте клієнт MCP](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/). ## Надайте джерела та висновки Покладіть звіт поруч із підписаним ZIP. Звіт — це ваше прочитання джерел, ZIP — те, що перевіряє отримувач. [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/exports/) · [Проведення повного розслідування](https://phishdestroy.github.io/TgWitness/uk/docs/cases/) --- # Telegram · Поділитися справою Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/access/ Надайте рецензентам та аналітикам доступ до вибраних акаунтів і чатів із окремими правами доступу, обмеженнями сеансів та токенами, які можна скасувати. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Поділіться тим, що комусь потрібно. Решту тримайте під контролем. 01**Виберіть докази** Цілі простори або окремі чати. 02**Виберіть дії** Перегляд, експорт або лише потрібні операції. 03**Встановити обмеження** Особистий токен з терміном дії, лімітом сесій і правилами IP, якщо треба. Обсяг збору даних визначає, що саме записується. Обсяг доступу визначає, що саме користувач може бачити та робити. ## Надати комусь доступ 1. Як адміністратор відкрийте **Доступ**. 2. Назвіть доступ, оберіть простори й чати. 3. Рецензенту досить **Перегляду**. Для завантаження додайте **Експорт**. 4. Встановіть обмеження, а потім натисніть **«Створити доступ**». 5. Скопіюйте токен (показується один раз) і надішліть його особисто разом з адресою панелі. 6. Спершу перевірте, що він побачить, в окремій сесії браузера. ## Почніть з того, яку роботу їм потрібно виконати | Особа | Доступ | Результат | | --- | --- | --- | | Рецензент | Вибрані чати; тільки для перегляду | Читає чат, нічого не може змінити. | | Аналітик | Вибрані чати; перегляд та експорт | Читає й завантажує те, що потрібно для справи. | | Оператор | Вибрані цілі робочі простори; джерела та колекція | Вирішує, що спостерігати, запускає й зупиняє збирачі. | Це лише приклади, а не фіксовані ролі. Доступ, обмежений чатами, ніколи не отримує налаштувань акаунта й повних експортів журналу. Доступ до всіх просторів включає акаунти, додані пізніше. ## Ви можете змінити своє рішення в будь-який момент Змінюйте доступ будь-коли, зміни діють з наступного запиту. Завершіть одну сесію або відкличте все. Уже завантажені файли не повернути. Збір продовжує працювати. **Обмеження щодо сеансів та IP-адрес** Обмежте паралельні сесії та входи, задайте дату завершення, дозвольте IP чи підмережі або прив'яжіть до IP першого входу. Термін рахується за бездіяльністю, відкрита панель вважається активною. За проксі перевірте, яку IP клієнта бачить застосунок. **Головний ключ та журнал активності** Головний токен лишається в адміністратора. Виданий доступ не може керувати чужим доступом чи відкрити консоль адміністратора. Зміни доступу й сесії підписуються в журнал, без токенів. Адміністратор сервера, як і раніше, бачить усе. Усі сім прав і правила сесій: [довідник з доступу](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/). --- # Telegram · Забезпечте його безперебійну роботу Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/server/ Запустіть TgWitness на сервері з постійним сховищем даних, приватним доступом до панелі управління, резервним копіюванням та перевірками після перезапуску. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Тримайте збирач у роботі, а дані — в безпеці під час перезапусків. ## Оберіть спосіб запуску Нативно: [лаунчер](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/verification/). --- # Telegram · З’ясуйте, що пішло не так Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/troubleshooting/ Перевіряйте доступ до панелі, з’єднання з Telegram, відсутні повідомлення, FloodWait та статус свідка, використовуючи відповідні сигнали для кожної проблеми. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/features/). Повідомляєте про помилку? Версія, ОС, кроки й помилка без особистих даних. Ніколи не кладіть сесії, токени, особисті повідомлення чи папку даних у публічний issue. --- # TgWitness: Telegram Export, OSINT & Verification Canonical page: https://phishdestroy.github.io/TgWitness/docs/reference/overview/ Explore TgWitness installation, Telegram capture, investigation tools and evidence verification. Read measured workloads alongside their methods and limits. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/llms.txt) Встановіть за допомогою однієї команди або запустіть на GitHub Actions. Ознайомтеся з варіантами розслідування, опублікованим масштабом та тим, що перевіряє архів. TgWitness — це експортер Telegram з відкритим кодом та робоче середовище для розслідувань. Встановіть його однією командою, підключіть обліковий запис, виберіть чати та експортуйте підписаний архів. Він також підтримує тимчасове збирання даних у GitHub Actions та продовження розслідувань із збереженими редагуваннями, спостереженнями за видаленням, пошуком та звітами. ## Почніть із завдання, яке у вас є | Ваше завдання | Найкоротший шлях | Що ви отримаєте | | --- | --- | --- | | Зберегти чат або обліковий запис | Встановити, підключити обліковий запис, вибрати обсяг експорту | Підписаний архів із вибраною історією, результатами збору даних та матеріалами верифікації | | Збирати у тимчасовому запуску | Скористайтеся функцією GitHub Actions для збору даних, авторизуйте нову сесію та виберіть область дії | Зашифрований архів із інформацією про походження робочого процесу на GitHub | | Відстежуйте зміни з плином часу | Забезпечити безперервну роботу спостереження за вибраними чатами | Збережені версії, повідомлення про видалення, вкладення та зафіксований обсяг охоплення | | Досліджуйте та діліться результатами | Здійсніть пошук в архіві, скористайтеся Case Board та налаштуйте звіт або копію для поширення | Висновки з посиланнями на джерела та перевірена передача даних, пристосована до потреб одержувача | ### Встановлення однією командою Інсталятор містить 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 та виберіть обсяг збору даних. Встановлення само по собі не запускає збір даних. У посібнику з встановлення пояснюються питання локального доступу, серверів, оновлень та перевірки завантаженої збірки. Для тимчасового запуску дотримуйтесь інструкцій [GitHub Actions capture](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md). Цей робочий процес вимагає створення форку на GitHub, авторизації та пароля до архіву. На сторінці capture пояснено ці кроки та зазначено час сеансу перед запуском. Завантажте та збережіть отриманий архів та матеріали для його верифікації. ## Додаткові налаштування, якщо це потрібно для виконання завдання Для експорту даних з одного чату необхідний обліковий запис та обрана область спостереження. Постійне спостереження, використання декількох облікових записів, проксі-сервери, правила щодо вкладень, оформлення звітів, доступ для рецензентів, зовнішні мітки часу та зовнішнє зберігання даних відповідають різним вимогам щодо розслідування та передачі даних. Налаштуйте ці функції, коли вони є актуальними. Сфера застосування, дозволи та мінімізовані копії для обміну даними допомагають операторам обирати, що збирати та розкривати. Рекомендації щодо юрисдикції та налаштування звітів підтримують це рішення; сам по собі вибір профілю не гарантує дотримання законодавчих вимог або допустимості. Див. [експорт облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/account-export/), [доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/) та [конфігурація звіту](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/). Додаток працює на обраному комп’ютері або сервері. Для базового збору даних не потрібні графічний процесор (GPU) чи велика мовна модель (LLM). Додаткові функції OCR, транскрипції та аналізу на основі штучного інтелекту мають свої власні вимоги до ресурсів. Розраховуйте розмір розгортання з урахуванням інтенсивності обміну повідомленнями, вкладень, історії, що зберігається, та кількості одночасних облікових записів; проста інсталяція не гарантує фіксованого обсягу пам’яті для кожного навантаження. ## Зберегти запис, кому б він не допоміг Мета полягає у збереженні спостережуваного матеріалу, контексту та змін незалежно від того, чию позицію вони підтримують. Докази можуть суперечити власній версії подій, викладеній колектором. Збережіть вихідні спостереження, пропущені дані та аналітичні висновки у вигляді, що дозволяє їх ідентифікувати, щоб інша особа могла оцінити той самий матеріал. Логіка така: спостереження, видиме для облікового запису → підписаний журнал → експорт → верифікація отримувача. Збережені редагування додають версії. Видалені спостереження зберігають раніше зафіксований вміст. Записи про охоплення виявляють відомі переривання. Звіти та аналіз на основі штучного інтелекту посилаються на збережені джерела; інтерпретація не стає джерелом спостереження лише тому, що вона з’являється у підписаному звіті. | Перевірка достовірності | Що може встановити одержувач | | --- | --- | | Хеші файлів, підписи та ланцюжок журналів | Надані записи та файли відповідають очікуваному ключу та межам журналу | | Окремо збережений контрольний пункт або свідок | Архів відповідає раніше збереженому стану журналу | | Перевірена зовнішня мітка часу | Вказані байти існували на момент, позначений часовим штампом, за зазначених припущень щодо надійності | | Засвідчення збору даних з GitHub | Архів відповідає затвердженому робочому процесу, версії колектора та записаному дайджесту. | Ці перевірки забезпечують контроль цілісності та походження. Вони не перетворюють вміст повідомлення на істинне твердження та не відтворюють невидимі видалені повідомлення. Використовуйте незалежно отриманий відбиток ключа та етапи верифікації, описані в [посібнику з довіри](https://github.com/phishdestroy/TgWitness/blob/main/docs/TRUST.md) та [форматі доказів](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/verification/) містить перелік серверів, результати перевірок збору даних у реальному часі та показники пошуку. [Ефективність експорту](https://phishdestroy.github.io/TgWitness/docs/validation/) публікує дані про два реальні запуски, апаратне забезпечення, тривалість, хеші архівів та підписані файли вимірювань. Вони фіксують результати для зафіксованих версій та умов, а не універсальну швидкість чи граничну пропускну здатність. ### Історія та тривалість тестування Станом на 6 листопада 2026 року розробник повідомляє про понад шість місяців тестування. Тут описано історію тестування проєкту. Датовані публічні вимірювання, наведені вище, документують окремі цикли роботи; вони не свідчать про незалежно перевірений, безперервний шестимісячний цикл збору даних. Вік експортованих повідомлень також відрізняється від часу роботи колектора. ## Точно зчитуйте стан можливостей Оцініть кожен робочий процес з огляду на його реалізацію, опубліковану збірку та записані тести. Наразі вихідний код позначений як попередній перегляд. Ця позначка версії співіснує з робочою колекцією, експортом даних, незалежною верифікацією та опублікованими вимірами масштабу. Функція попереднього перегляду та перевірений робочий процес можуть існувати в одній програмі; опишіть конкретну функцію та докази, що лежать в основі оцінки. Використовуйте [поточні можливості](https://github.com/phishdestroy/TgWitness/blob/main/docs/STATUS.md), [функції та обмеження](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/), [перевірку](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/) та [журнал змін](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/) разом. При цитуванні результату вказуйте перевірену версію. Знімок вимірювання від 6 листопада також зберігає невдалі та пропущені тести; вони не вважаються успішними. ## Зрозумілі для людей та інструментів штучного інтелекту Веб-сайт містить стислий опис (`llms.txt`), повний посібник англійською мовою ( `llms-full.txt` та `llms-full.md`), а також версії сторінок у форматі Markdown. Це формати документації, а не вимоги до штучного інтелекту для запуску TgWitness. Опціональний доступ через командний рядок [MCP](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/) та дозволяє авторизованим інструментам зчитувати вибрані збережені записи. Вміст повідомлень залишається ненадійним вхідним даними. У підсумках слід посилатися на джерела, розрізняти спостережувані факти та висновки, а також зберігати невизначеність. Повнотекстовий пошук, OCR та результати роботи штучного інтелекту не змінюють оригінальні підписані спостереження. --- # Telegram · Швидкий старт Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/quickstart/ Усі способи встановлення та запуску TgWitness: пакет для Windows, Python, Docker та синтетична демонстраційна версія з першими перевірками. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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 Releases, двічі клацніть на `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/uk/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. User ID є необов’язковим і перевіряється, якщо його введено. 5. Завершіть обраний спосіб входу: телефон/код/2FA, підтвердження з зареєстрованого додатка Telegram для QR-коду або імпорт підтримуваної авторизованої сесії. 6. Перевірте відображений ідентифікатор облікового запису. Відкриті **джерела**: ваші чати завантажуються автоматично; додайте свої групи. 7. У розділі **«Виберіть**, **які зміни зберегти»** оберіть категорії подій або пресет **«Повідомлення, редагування та видалення**», а потім збережіть налаштування моніторингу. 8. Окремо виберіть налаштування вкладень, а потім натисніть **«Почати спостереження**». Повноваження API ідентифікують ваш додаток; вони самі по собі не надають авторизацію облікового запису. Приватні групи не потребують публічного імені користувача, але ваш обліковий запис повинен мати доступ. Для наявних облікових записів див. [облікові записи та формати сесій](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/): панель приймає Telethon StringSession, SQLite від Telethon/Pyrogram, ZIP-архіви TData для одного облікового запису та підтримувані JSON-файли облікових записів. Виберіть сесію разом із супровідним JSON-файлом, натисніть **Підключити обліковий запис**. Вхід за QR-кодом також доступний із тими самими необов'язковими налаштуваннями API. Сесії TDLib, ботів і реєстри облікових записів у форматах CSV/JSON не підтримуються. Для кількох облікових записів використовуйте **Облікові записи → Імпорт облікових записів** і виберіть підтримувані файли сесій. Супровідні JSON-файли зіставляються за базовим ім'ям файлу; кожен імпортований обліковий запис отримує власний робочий простір. Див. [масовий імпорт і групи облікових записів](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/timestamp/) для отримання та перевірки відповіді. - **Перевірка журналу:** перевірка підписів подій та ланцюжків. Експорт у форматі ZIP також перевіряє мультимедійні файли. Підтримувані браузери зберігають великі експортні файли безпосередньо у вибраний файл. Інші браузери буферизують не більше 128 МіБ. Поки сервер працює, 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 ГіБ у розпакованому вигляді за замовчуванням (**Parameters** збільшує його; перевіряйте такі архіви за допомогою `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/uk/docs/reference/connection/) щодо форматів входу, SOCKS5, HTTP CONNECT, MTProxy та зовнішніх головних ключів. **Призупинення спостереження** зупиняє збір даних. **Блокування** лише закриває доступ через браузер. Закриття вкладки не зупиняє процес збору даних. Зупинка процесу перериває збір; знімок історії не дозволяє відтворити всі пропущені редагування чи видалення. Дізнайтеся, [як працює збір даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/) у контексті політик подій, черг вкладень, ізоляції облікових записів та поведінки при перезапуску. Сесії та секретні дані шифруються. Для зберігання вмісту повідомлень, мультимедіа та експортованих даних необхідний зашифрований диск або том. Підписи підтверджують цілісність відносно довіреного ключа; вони не підтверджують походження з Telegram і не запобігають фальсифікації з боку оператора, який контролює збирач даних та його ключ. Ознайомтеся з [файлом OPERATIONS.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/) щодо резервного копіювання/відновлення, [DEPLOYMENT.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/deployment/) щодо розміщення, а також з [розділом deploy/](https://github.com/phishdestroy/TgWitness/blob/main/deploy/README.md) для прикладів використання. Встановлена панель також містить посібник з налаштування в автономному режимі за адресою `/guide.html`. Фактичні результати перевірки та існуючі обмеження зафіксовані у [файлах VERIFICATION.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/) та [READINESS.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/READINESS.md). --- # Встановлення, перевірка та оновлення Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/ Встановіть за допомогою однієї команди, перевіряйте підписи та хеші, оновлюйте та видаляйте інсталяцію. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/docs/reference/quickstart/) · [Розгортання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/deployment/) **На цій сторінці** - [Встановити однією командою](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#install-with-one-command) - [Де все працює](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#where-everything-runs) - [Налаштування повнотекстового пошуку](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#full-text-search-settings) - [Доступ через командний рядок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#command-line-access) - [Перевірити перед запуском](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#verify-before-running) - [Оновлення існуючої інсталяції](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#update-an-existing-installation) - [Повсякденні команди в Ubuntu](https://phishdestroy.github.io/TgWitness/uk/docs/reference/installation/#everyday-commands-on-ubuntu) - [Видалити TgWitness](https://phishdestroy.github.io/TgWitness/uk/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 з правами суперкористувача | `/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/uk/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/uk/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`). ## Оновлення існуючої інсталяції **Нова публікація оновлює сайт завантаження; встановлені програми оновлюються, коли ви запускаєте інсталятор знову.** Не існує автоматичного оновлення або автоматичного перезапуску колекції, що працює. Поточний канал інсталятора — це **попередній перегляд**; він слідує за опублікованими, перевіреними збірками з `main`, коміт яких може бути новішим за останній пронумерований реліз на GitHub. Версія сторінки походить з `pyproject.toml`; її коміт та ідентифікатор збірки дозволяють розрізняти оновлення в межах однієї попередньої версії. Публікація відбувається автоматично після того, як саме це коміт пройде перевірку додатка та безпеки, а підписаний пакет — тести на роботу в службі Ubuntu та на інсталяцію в Windows PowerShell. Під час виконання перевірок або у разі їхнього збою ті самі команди продовжують інсталювати попередню перевірену збірку. Маніфест збірки показує, яке коміт наразі доступне; сам номер версії може залишатися незмінним між оновленнями попереднього перегляду. Використовуйте ту саму папку інсталяції та того самого користувача ОС, що й раніше. Створіть резервну копію всього каталогу даних після зупинки збору даних; `tgwitness paths` що дозволяє його ідентифікувати. Підписаний експорт не є повною резервною копією інсталяції. **Встановлення з правами суперкористувача в 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/uk/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. **Встановлення з правами суперкористувача в 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 · Перше налаштування та параметри Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/ Майстер налаштування, цілі, рівні інтерфейсу, маршрути підключення та налаштування, спільні для групи облікових записів. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/quickstart/) ![Початок роботи](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) [Акаунти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) · [Зв’язок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/) · [Доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/) Нова робоча область відкривається `/first-run`: мова та час, рівень інтерфейсу, мета, підключення, Telegram та чати. Кожна відповідь зберігається на сервері одразу після зміни, тому перезавантаження продовжує той самий крок. На останньому екрані перелічено відповіді та надано можливість повернутися до будь-якої з них. Мова, часовий пояс IANA, тема та рівень зберігаються окремо для кожного оператора та робочого простору. За замовчуванням використовуються мова браузера, часовий пояс пристрою, системна тема та простий інтерфейс. Зміна мови не впливає на сесію панелі. Час у підписаному журналі ніколи не змінюється. `/settings` Редагує ті самі записи, що й майстер. Пошук охоплює основні поля, параметри та розширені форми; приховане поле можна відкрити без зміни рівня. Рівні змінюють лише те, що відображається: сервер самостійно перевіряє права доступу. Налаштування колекції та перше підключення належать адміністратору робочого простору. | Рівень | Поля | Бічна панель | | --- | --- | --- | | Просто | Тільки найнеобхідніше | Головна, Чати, Зміни, Архіви, Налаштування | | Стандарт | Загальні налаштування з поясненнями | Додано Case Board, «Акаунти» та «Доступ» | | Експерт | Усі поля, обмеження та технічні деталі | Додано розділи «Джерела», «Додаткові функції», «Запитати архів», «Параметри», «Акаунт», «Системний журнал» та «Інтеграції» | У [посібнику з панелі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/) описано кожен розділ. ## Цілі | Мета | Колекція | Файли | Зовнішні сервіси | Адреса сервера | | --- | --- | --- | --- | --- | | Архівна копія | Вимкнено; **«Start»** запускає експорт | Фотографії розміром до 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/uk/docs/reference/accounts/#bulk-import-and-account-groups). ## Існуючі робочі простори У робочій області, де вже відкрито сеанс або раніше було завершено налаштування, майстер не відображається. Його значення не замінюються ціллю під час завантаження сторінки. Приховування поля не відключає цю функцію та не видаляє його значення. Оцінка розміру та часу охоплює до трьох вибраних чатів і до 20 повідомлень з кожного. Це лише приблизні дані: вони не враховують обмеження Telegram, швидкість конкретного сервера або файли в кожному чаті. --- # Telegram · Формати облікових записів та сеансів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/ Увійдіть за допомогою телефону, QR-коду або ключа автентифікації, імпортуйте сесії з Telethon, Pyrogram або Telegram Desktop та керуйте кількома обліковими записами. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/quickstart/) ![Початок роботи](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) TgWitness входить у систему як облі**ковий запис користувача Telegram** (а не як бот) через MTProto, використовуючи Telethon. Кожен обліковий запис розміщується у власному робочому **просторі** (який у API та інструментах командного рядка називається *«workspace*») із власною сесією, джерелами, журналом та ключем підпису. Файли сеансів, рядки сеансів та ключі автентифікації є **засобами авторизації облікового запису**: той, хто володіє ними, може діяти від імені цього облікового запису. Вони не містять історії повідомлень. > [!ПОПЕРЕДЖЕННЯ] **Не використовуйте те, що не можете собі дозволити втратити.** Ми настійно не рекомендуємо підключати особисті або інші цінні акаунти, а також створювати API-ідентифікатор / API-хеш на акаунті, який для вас цінний. Справа не в тому, що TgWitness не пройшов тестування: Telegram обмежує та постійно блокує акаунти непередбачувано — за обсяги запитів, які він вважає надмірними, незалежно від клієнта чи мети, без належної документації. Багато блокувань є незворотними. Використовуйте спеціальні акаунти. Безперебійне тестування залежить від Telegram, а не від програмного забезпечення, і не гарантує нічого на майбутнє. - [Короткий огляд](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#at-a-glance) - [Перш ніж почати: ідентифікатор API та хеш API](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#before-you-start-api-id-and-api-hash) - [Номер телефону](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#phone-number) · [QR-код](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#qr-code) · [Ключ автентифікації + ідентифікатор DC](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#auth-key--dc-id) - [Файли облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#account-files): [Telethon .session](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#telethon-session) · [Pyrogram .session](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#pyrogram-session) · [Пара «сесія + JSON»](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#session--json-pair) · [TData](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#telegram-desktop-tdata) · [StringSession](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#telethon-stringsession) · [JSON-файл облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#account-json) - [Визначте, що у вас є](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#identify-what-you-have) · [Непідтримувані формати](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#unsupported-formats) - [Кілька облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#multiple-accounts) · [Забезпечення безпеки файлів облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#keeping-account-files-safe) · [Усунення несправностей](https://phishdestroy.github.io/TgWitness/uk/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 вибирає пару зі свого вбудованого пулу публічних пар API 50 (`tgwitness/api_pool.py`), надаючи перевагу Telegram Desktop для нового входу та зберігаючи збережену пару першою; решта кандидатів перемішуються. Якщо Telegram відхиляє пару (`API_ID_INVALID`, `API_ID_PUBLISHED_FLOOD`, `UPDATE_APP_TO_LOGIN`), випробовується наступна, до восьми на один вхід; відхилені пари пропускаються до перезапуску. Пара, яка здійснила вхід, зберігається разом з обліковим записом і повторно використовується для нього. **API ID** та **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. Імпортовані поля завжди мають пріоритет, включаючи старішу версію додатка та порожній мовний пакет. Каталог ніколи не змінює ідентифікатор API/хеш. Його знімок версії перевіряється явно, а не отримується під час входу. Збережений профіль залишається стабільним після оновлень. `account.getAuthorizations` повідомляє про збережені метадані авторизації Telegram; це не є повторенням кожного нового `initConnection`. Порівняйте його з фактично надісланим профілем. Підключення існуючої авторизації не перевіряє відповідний хеш API: `initConnection` надсилає ідентифікатор 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 використовують протокол Telethon `ConnectionTcpObfuscated` (зашифрований скорочений MTProto). HTTPS CONNECT зберігає TLS до проксі та використовує той самий зашифрований транспорт усередині тунелю. MTProxy зберігає необхідний випадковий проміжний транспорт та обробку секретних даних. Перемикання маршрутів застосовує ті самі параметри. Зашифрування змінює структуру пакетів; воно не приховує обліковий запис або метадані клієнта від Telegram і не означає імунітету до обмежень. Після підключення авторизованого клієнта TgWitness перевіряє конфігурацію, найближчий дата-центр, поточну авторизацію, базові параметри перевіреного рівня, мови, оновлення додатка та оновлення умов надання послуг. Ці діагностичні перевірки виконуються один раз для кожного екземпляра клієнта, перед початком збору даних, і відображаються у деталях з’єднання разом із часом їх виконання. `account.connection_checked` записує результат без хеш-значень сеансів, IP-адрес, токенів або хеш-значень API. Він ніколи не приймає умови використання та не встановлює оновлення. Збій запиту або стан FloodWait зупиняє наступні запити; відсутній результат залишається невідомим. Локальні перевірки можуть і надалі повідомляти про свої результати, тоді як мережеві перевірки пропускаються. Діагностика FloodWait зберігає метод TL, що завершився невдачею, будь-які обгортки Takeout/range, запит сервера на очікування та ефективний кінцевий термін у `telegram.backoff`. Деталі з’єднання показують метод та кінцевий термін, коли запити призупинені. Діагностика включає лічильники викликів клієнта за кожним методом з моменту створення цього клієнта; вони окремо підраховують вкладене визначення однорангових вузлів, але не враховують пакети або внутрішні спроби повторного виклику Telethon. Поточні лічильники також доступні як `collector.rpc_activity` у API стану. Аргументи запиту, імена користувачів, хеші доступу або текст винятків не включаються. Остання діагностика та повний термін зберігаються після перезапуску. Раніше очікування без запису методу не можна приписати ретроспективно. Див. [export limits](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 ID + Hash**». Ви можете ввести одну пару `api_id:api_hash` у **поле «API ID**», і обидва поля заповняться автоматично. Одну пару можна використовувати для всіх ваших облікових записів. Після успішного входу дані зберігаються у зашифрованому вигляді виключно в цьому робочому просторі й ніколи не надсилаються назад до браузера. Задіяно три різні типи облікових даних: | Секрет | Відкрити | Де це знаходиться | | --- | --- | --- | | Токен панелі | Веб-панель 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 Ключ авторизації (Auth Key) — це необроблений 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/uk/docs/reference/accounts/#account-json). ## Файли облікових записів Відкрийте **«Додати обліковий запис» → «Файли»** та виберіть до **чотирьох файлів**, **що належать до одного облікового запису**, загальним розміром до **8 МіБ**, а потім натисніть **«Підключити обліковий запис**». Форми **Files**, **Auth key** та масового імпорту показують попередження про паралельні сесії перед підключенням. За замовчуванням імпортовані авторизації використовуються повторно. Залишайте оригінальний клієнт закритим, поки його ключ використовується тут. **Files** та **Auth key** також пропонують **Створити незалежну авторизацію**, описану нижче. Масовий імпорт все ще використовує прямий режим. Вхід за допомогою телефону та інтерактивного QR-коду створює окремі авторизації. Заголовок попередження залишається видимим у формі імпорту; його повне пояснення відкривається автоматично після введення файлів або рядка ключа/сесії. Його можна згорнути після прочитання, щоб на телефоні залишалися доступними елементи керування вибором файлів та підключенням. - Файли конвертуються **в оперативній пам’яті** на вашому сервері TgWitness. Завантажені дані не зберігаються, архіви ZIP не розпаковуються на диск, і не відбувається звернення до жодних зовнішніх сервісів. - Отримані дані потім перевіряються за допомогою Telegram. Якщо у файлі вказано ідентифікатор користувача, він повинен збігатися з даними облікового запису, які надає Telegram. - Файли, що описують різні облікові записи або різні облікові дані API, відхиляються, замість того, щоб вибрати один із них. - Поле **«Пароль або текст сеансу»** містить поле локального пароля TData — поле для вставлення StringSession та **Read-файлів без входу в систему** (заповнює форму без звернення до Telegram). ### Створити незалежну авторизацію Виберіть **Створити незалежну авторизацію** перед підключенням імпортованих файлів або авторизаційного ключа. TgWitness короткочасно підключає імпортованого донора, використовує його для затвердження QR-токену входу нового клієнта та відключає донора одразу після затвердження. Новий клієнт має власний ключ авторизації та окремо обраний профіль для настільного комп’ютера . Надані донором облікові дані API та профіль пристрою використовуються лише для підключення донора. Жодна існуюча авторизація не виходить із системи та не скасовується. **Під час виконання цього кроку оригінальний клієнт донора має залишатися повністю закритим.** Початкове з’єднання все ще використовує скопійований ключ, тому цей режим не може усунути цей початковий ризик паралельного використання. Після підключення нової авторизації власник може знову відкрити оригінальний клієнт і використовувати обидва незалежно один від одного. Інтерактивний **вхід за QR-кодом** дозволяє оригінальному клієнту затвердити вхід без копіювання або підключення свого ключа тут. Якщо Telegram запитує 2FA, цей режим використовує `twoFA` із вибраного JSON-файлу, якщо такий є, або запитує пароль. Відхилений імпортований пароль повертає користувача до форми введення пароля. Паролі не зберігаються. Ключ-кандидат зберігається у зашифрованому вигляді в файлі `independent_login.enc`, включаючи зміни, що відбулися під час міграції між центрами обробки даних. Після перерви виберіть того самого донора та цю опцію, щоб відновити збережений ключ-кандидат. Робоча область залишається зарезервованою для цього облікового запису; невдале завершення не призводить до видалення нової робочої області. Збережіть її каталог даних та ключ сховища. Остаточні облікові дані та запис у журналі `account.authorized` містять метод імпорту, формати введення та ідентифікатор API донора, без ключа донора чи пароля. 5 листопада 2026 року спеціальний обліковий запис пройшов перевірки в режимі реального часу з донорами Telethon, Pyrogram та TData: завершення 2-факторної автентифікації (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` | | | | --- | --- | | Що це таке | База даних SQLite, яку створюють інструменти на основі Pyrogram | | Визнано | Таблиця `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/uk/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 та HEX-код ключа авторизації. Інші клієнти з власними, незалежно створеними авторизаціями, можуть залишатися у системі. Дивіться [документацію 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 МіБ у розпакованому вигляді). 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`) | Текст Telethon StringSession, а не ім’я файлу | | `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` має бути дійсним Telethon StringSession. Приклади: ``` { "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-кодом в окремих робочих просторах | | Test-DC або сесії ботів | Використовуйте робочий обліковий запис користувача | ## Кілька облікових записів Натисніть **+** поруч із перемикачем облікових записів або відкрийте **Обліковий запис → Налаштування → Налаштування з’єднання → Робочі простори**, введіть назву та увійдіть. - Необмежена кількість робочих просторів, включаючи основний. Кожен має власну сесію, проксі- маршрут, джерела, політику збору даних, журнал, ключ підпису, контрольні точки та експортні файли. - Перемикання між робочими просторами не призупиняє роботу інших. - Журнал залишається прив’язаним до облікового запису, з якого його було створено. Для входу з іншого облікового запису потрібно створити інший робочий простір, а один обліковий запис не можна прив’язати до двох робочих просторів. - Токен головної панелі керує всіма робочими просторами. [Наданий доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/) дозволяє обмежити доступ інших користувачів до вибраних акаунтів та чатів із окремими правами доступу та обмеженнями сеансів. - **Функція «Акаунти»** перейменовує робочу область та видаляє додану робочу область разом із її сесією, журналом, джерелами та ключем підпису. Головну робочу область неможливо видалити з панелі. ### Масовий імпорт і групи акаунтів Скористайтеся **меню «Акаунти» → «Імпортувати акаунти»**, щоб додати кілька акаунтів, зіставити файли за базовим іменем та переглянути результати входу для кожного з них. Кожен акаунт отримує власний робочий простір. Група об’єднує пов’язані акаунти, не об’єднуючи їхні сесії, ключі чи докази. Натиснувши **«Відкрити групу»** у розділі **«Акаунти»,** ви перейдете на її сторінку за адресою `/groups/`: - **Облікові записи:** маршрут підключення кожного учасника, спостереження та останнє повідомлення, з функціями «Запустити**все»** та **«Призупинити все**». - **Потребує уваги:** акаунти, з яких вийшли, які недоступні або мають проблеми з підключенням, введенням даних, джерелом чи медіафайлами; кожне ім’я веде до відповідної картки. - **У чатах, які переглядають кілька облікових записів, відображаються:** спільні джерела, облікові записи, що їх переглядають, та перерви в періоді спостереження за робочим простором (до семи днів). **Експорт із N обліковими записами** розподіляє експорт каналу або супергрупи між ними та підписує один архів. - **Експорт групи:** один елемент ZIP, у якому міститься підписаний експорт кожного облікового запису під `accounts/` та `manifest.json` переліком їхніх SHA-256 та відбитків ключів, підписаних головним робочим простором у `manifest.signature.json`. Перевіряйте архів кожного облікового запису окремо за допомогою `python -m tgwitness.verify` та перевіряйте його за допомогою надійного відбитка цього облікового запису. Учасники використовують спільні налаштування групи; кожен обліковий запис може зберігати власні значення. Дивіться [розділ «Спільні налаштування»](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/accounts/#unsupported-formats)». | | *Вибрані файли містять опис різних облікових записів або облікових даних API* | Вибирайте файли лише з одного облікового запису. | | *JSON не містить жодних облікових даних або авторизаційних даних для підтримуваних API* | Перевірте назви полів у [JSON-файлі облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/#account-json). | | *Лише метадані API* | У JSON немає сесії. Додайте файл `.session` або скористайтеся номером телефону/QR-кодом. | | *HEX-код авторизаційного ключа повинен містити всі 512 шістнадцяткових символів* | Ключ є урізаним або містить `…`. | | Ідентифікатор облікового запису не збігається з імпортованим обліковим записом | Ідентифікатор користувача у файлі відрізняється від того, що вказує Telegram; файл належить іншому обліковому запису. | | Цей обліковий запис уже належить іншому робочому простору | Відкрийте цю робочу область замість того, щоб додавати обліковий запис двічі. | | Посилання є, але у списку чатів у **розділі «Джерела»** відсутня приватна група | Перевірте членство. Програма перевіряє перші 1 000 діалогів; збільште цей ліміт у розділі **«Параметри**». | | Помилка підключення через проксі | Перевірте режим маршрутизації та IP. Автоматичний MTProxy пробує інший робочий запис. «Hide the address» очікує; «Direct» як крайній захід може встановити з’єднання безпосередньо після налаштованої затримки. Див. [режими маршрутизації](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/#ip-modes). | Див. також: [підключення та безпека](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/) проксі-серверів і шифрування, а також [як відбувається збір](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/) даних після входу в систему. --- # Telegram · Доступ та дозволи Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/ Надавайте доступ до облікових записів та чатів з обмеженим обсягом повноважень, обирайте права доступу, обмежуйте сеанси та IP-адреси, а також скасовуйте доступ. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/quickstart/) ![Початок роботи](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) Надайте рецензенту доступ до одного чату, аналітику — дозвіл на експорт справи, а оператору — контроль над обраними акаунтами. Кожна особа отримує власний токен. Головний токен панелі залишається у адміністратора. [Налаштування облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) · [Маршрути підключення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/) · [Модель безпеки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/) ## Дві сфери застосування, дві різні посади **Обсяг збору даних** визначає, що саме записує обліковий запис: вибрані чати, папку Telegram або весь обліковий запис. **Обсяг доступу** визначає, які з цих записаних облікових записів та чатів може переглядати та використовувати інша особа. Надання доступу не означає приєднання до чату Telegram, початок збору даних або надання дозволів на доступ до облікового запису Telegram. Доступ може відкривати вибрані робочі простори, вибрані чати в них, усі робочі простори або кожен обліковий запис у [групі облікових записів](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/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/uk/docs/reference/connection/ Аутентифікація, автоматичні пули проксі-серверів, режими IP, політика резервного переходу, зовнішні запити та зберігання секретних даних. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/deployment/) ![Розгортання та відновлення](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) Цей документ описує поведінку TgWitness 0.8.0 та її обмеження. Аутентифікація, доступ до джерел, мережеве з’єднання та повнота збору даних — це окремі стани. Щоб дізнатися про етапи входу, формати файлів та роботу з кількома обліковими записами, почніть з розділу [«Облікові записи та формати сеансів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/)». Щодо політик подій та поведінки при перезапуску див. розділ [«Як працює збір даних](https://phishdestroy.github.io/TgWitness/uk/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, а не 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/` робочої області та у зашифрованих записах сховища. Для прослуховувача з петлевим підключенням SOCKS5 потрібні незалежно згенеровані облікові дані. Приватні профілі та облікові дані облікового запису WARP шифруються за допомогою існуючого сховища робочого простору. Під час роботи допоміжній програмі потрібен конфігураційний файл у вигляді відкритого тексту, доступний лише власнику; він видаляється при звичайному завершенні роботи. Збій хоста може залишити цей файл у папці даних, доступній лише власнику. Це не шифрує диск і не захищає від його адміністратора. Супервізор закриває тунель, якщо батьківський канал панелі зникає. Тунель, що зазнав збою, ніколи не вмикає прямий резервний варіант. Перезапуск панелі відновлює вибраний тунель; невдалі запуски повторюються з обмеженою затримкою. **Зупинити тунель** також призупиняє спостереження та зберігає стан зупинки. **Запустити тунель** запускає тунель; відновити спостереження окремо, коли будете готові. Завантажені профілі 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 не може відновити скасовану сесію або замінити забутий пароль 2FA. TgWitness не зберігає коди входу або пароль 2FA Telegram на диску. Для приватного джерела обліковий запис повинен уже мати доступ. Ім’я користувача групи не потрібне. Проксі або імпорт сеансу не надають ані членства, ані прав адміністратора. Поточне членство не гарантує доступу до історії до приєднання. ## Імпортувати файл сеансу Telethon Telethon SQLite, Pyrogram SQLite та Telegram Desktop TData використовують різні формати. Панель виявляє та конвертує підтримувані структури; перейменування файлу не є конвертацією. Виберіть одну сесію та відповідний файл JSON у розділі **«Файли**», а потім натисніть **«Підключити обліковий запис**». Приймається до чотирьох відповідних файлів загальним обсягом до 8 МіБ. Детальніше див. [обмеження форматів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) для TData/JSON. Функція відновлення пароля відсутня. Вхід за допомогою телефону/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 облікового запису; в іншому випадку допускається використання Direct. | | Сервер, розташований за тунелем або 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` перед запитом до публічного резолвера; сервіси Tor onion вимагають явного налаштування приватних адрес призначення та відповідного проксі. Ця поведінка DNS застосовується до зовнішніх HTTP-операцій, а не до транспортного протоколу Telegram. Cloudflare надає документацію щодо [кінцевої точки DNS у](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/) [форматі](https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/) [JSON](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; Функція приховування адреси все ще відмовляється працювати | | Оновлення стрічки / перевірки передачі даних | Протоколи 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/uk/docs/reference/witness/) використовує власний маршрут HTTP/SOCKS5, а не MTProxy. Прямий резервний варіант регулюється режимом IP, описаним вище. Призупиніть спостереження перед зміною маршруту. Збереження розриває з’єднання зі старими клієнтами та скасовує незавершений вхід; новий клієнт використовує збережений маршрут. Прив’язка журналу/сесії до облікового запису зберігається. Налаштування замінюють попередній маршрут: під час редагування введіть облікові дані проксі-сервера заново. Реквізити облікових даних шифруються за алгоритмом `network.enc`. API не повертає ім’я користувача, пароль або секретний ключ. Підписані записи містять тип маршруту та інформацію про наявність реквізитів облікових даних, виключаючи кінцеву точку та секретні ключі. Оператор може бачити кінцеву точку на панелі. Поля з секретними даними очищаються після збереження, блокування або перемикання робочих просторів. **Функція «Перевірити з’єднання з Telegram»**, доступна також до входу в систему, відкриває та закриває тимчасове неавторизоване з’єднання з Telegram через маршрут. Вона не звертається до веб-сайту для перевірки IP-адреси. Успішне виконання функції підтверджує наявність транспортного з’єднання, але не означає доступ до груп, повну доставку повідомлень або анонімність. Проксі застосовується до з’єднань клієнта Telegram, включаючи завантаження медіафайлів із серверів Telegram DC. Браузер, pip, SSH та інструменти TSA, що запускаються вручну, мають окремі маршрути. Ім’я хосту проксі може вирішуватися локально. `rdns` впливає на імена хостів призначення; Telegram часто надає числові IP-адреси DC. SOCKS5 та звичайний HTTP CONNECT самі по собі не шифрують облікові дані проксі-сервера або тунель «клієнт-проксі». MTProto окремо захищає трафік Telegram. У ненадійній мережі використовуйте відповідний захищений канал для підключення до проксі. Приватні групи є хмарними чатами; MTProto не перетворює їх на секретні чати з наскрізним шифруванням. ## Шифрування та підписи | Рівень | Реалізовано | Відповідальність оператора | | --- | --- | --- | | Трафік Telegram | Telethon MTProto | Довіра до платформи, маршрут та доступність | | Веб-панель | Токен-носій, петлеве підключення за замовчуванням, обмеження на кількість запитів | HTTPS або SSH-тунель для віддаленого доступу | | Секрети | Fernet для облікових даних API, сеансів, облікових даних проксі-серверів та приватного ключа для підпису | Захистіть ключ дешифрування та хост, на якому працює програма | | Ключ сховища | Локальний ключ або зовнішній головний ключ для нової інсталяції | Окреме захищене сховище та резервне копіювання ключів | | Повідомлення та вкладення | Зберігання даних додатка у вигляді відкритого тексту | Зашифрований диск/том | | ZIP/JSONL/CSV/HTML | Перевірка цілісності, відсутність шифрування вмісту | Захист експортованих копій та передач | | Походження та час | Підписаний журнал, підтвердження обробки, інструменти RFC 3161 | Довірений ключ, незалежні контрольні точки/TSA та процедура зберігання | **Захист сховища** в обліковому записі відображає ці стани. Токен панелі є секретом доступу, а не паролем шифрування. Він надає адміністраторський доступ; [видані токени](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/) можуть бути обмежені обліковими записами та чатами. Робочі простори використовують спільний хост-процес і не є ізольованими орендарями. BitLocker, LUKS, FileVault або керований зашифрований том можуть захистити сховище в рамках відповідних моделей загроз. Адміністратор розблокованої машини, що працює, все одно може читати дані. У плануванні сховища слід враховувати файли SQLite WAL/SHM, мультимедіа, тимчасові експортовані дані, обмінну пам’ять, резервні копії та завантажені з браузера файли. Том 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 служби повинен мати права на читання цього файлу. Передавайте шлях, а не байти ключа, через файли середовища/конфігурації. Кожен робочий простір отримує випадковий публічний солт та власний ключ Fernet, отриманий за допомогою HKDF-SHA256. `vault.external.json` зберігає метадані виведення, а не головний ключ. Відсутність або неправильність ключа призводить до збою запуску без його автоматичної заміни. Зберігайте як метадані солта, так і головний ключ для відновлення. Усі робочі середовища походять від одного головного ключа; його компрометація впливає на всю інсталяцію. Процес, що виконується, може розшифровувати секретні дані. Це не HSM і не KDF на основі пароля. Довільні паролі, створені людиною, не приймаються замість випадкового ключа. Зберігайте існуючий ключ для існуючих інсталяцій доти, доки не буде здійснено та перевірено цілеспрямовану міграцію. Видалення `vault.key` або заміна головного ключа може призвести до втрати доступу до сесій/ключів підпису. Зберігайте зашифровані резервні копії та ключі окремо та перевіряйте можливість відновлення в ізольованому екземплярі. --- # Telegram · Впровадження Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/deployment/ Запускайте TgWitness як службу на Windows, Linux, macOS або в Docker, через HTTPS, із резервним копіюванням та оновленнями. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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 v2.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` запускає [незалежний «witness»](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/) у власному контейнері, з власним ключем та журналом у томі `witness-data` і лише токеном «witness» лише для читання для колектора. Створіть токен на сторінці **«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 для налаштованого домену. Не допускайте появи токена носія в 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/uk/docs/reference/access/); незалежні контрольні точки висвітлено у [посібнику для свідків](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/). Детальні інструкції: [підключення/безпека](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/) та [режими роботи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/). --- # Phala / Intel TDX · Розгортання з високим рівнем безпеки Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/ Захищений сервер, що працює цілодобово без вихідних, на Hetzner або Phala Cloud, шлюз DNS та перевірки, які може повторити третя сторона. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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, токени тільки для читання → ЗIP-архів доказів · Оператор · Verifier, токени тількидля читання · Сервер, брандмауер безправил вхідного трафіку · Журнал провайдера табрандмауер · Адреса тунельногоконнектора та вхіднийтрафік · Підписана заява/api/assurance · ЗIP-архів доказів · Тунель і DNS · Ключ підпису, створений насервері · API-інтерфейс провайдера · API Cloudflare · тільки вихідні повідомлення **Діаграма у вигляді тексту** 1. Оператор → Сервер, брандмауер без правил вхідного трафіку (API-інтерфейс провайдера) 2. Оператор → Тунель і DNS (API Cloudflare) 3. Сервер, брандмауер без правил вхідного трафіку → Тунель і DNS (тільки вихідні повідомлення) 4. Сервер, брандмауер без правил вхідного трафіку → Ключ підпису, створений на сервері 5. Verifier, токени тільки для читання → Журнал провайдера та брандмауер 6. Verifier, токени тільки для читання → Адреса тунельного коннектора та вхідний трафік 7. Verifier, токени тільки для читання → Підписана заява /api/assurance 8. Verifier, токени тільки для читання → ЗIP-архів доказів **На цій сторінці** - [Що може перевірити верифікатор](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#what-a-verifier-can-check) - [Провайдери](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#providers) - [Конфіденційна віртуальна машина на Phala Cloud (Intel TDX)](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx) - [Перед початком роботи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#before-you-start) - [З панелі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#from-the-panel) - [Швидкий тунель без домену](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#quick-tunnel-without-a-domain) - [Розгортання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#deploy) - [Налагодження розгортання та блокування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#debug-deployment-and-lock) - [Видалити розгортання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#remove-a-deployment) - [Будь-який сервер (самосертифікований)](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#any-server-self-attested) - [Перевірити](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#verify) - [Звіт про передачу доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#report-for-evidence-handover) - [Cloudflare як зовнішній свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#cloudflare-as-an-outside-witness) - [Зчитування результату розгортання](https://phishdestroy.github.io/TgWitness/uk/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` | немає | немає | none: **самозасвідчений** | – | Для кожної справи використовуйте окремий проєкт, команду, обліковий запис або підобліковий запис: тоді доступ верифікатора «тільки для читання» показуватиме лише це розгортання. Повноваження зчитуються з `--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 Root CA, порівнюючи його зі списками відкликаних сертифікатів 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). Ця організація вказана як кваліфікована служба маркування часом зі статусом «надано» у бельгійському списку довірених суб’єктів ЄС; кореневий сертифікат (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/uk/docs/reference/verification/#live-phala-cloud-deployment--4-november-2026). ## Перш ніж почати 1. Зона Cloudflare, її ідентифікатор облікового запису та токен 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/uk/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/uk/docs/reference/high-assurance/#quick-tunnel-without-a-domain) ; **у розділі «Ваші сервери» → «Знайти поточну адресу»** його можна перевірити знову після перезапуску. Щоб отримати фіксовану адресу під власним доменом, відкрийте **«Додатково» · «Ваш власний домен»** і додайте токен Cloudflare (підготовлене посилання вибирає «Зона читання», «Редагування DNS» та «Редагування тунелю Cloudflare»). Токени передаються з кожною запитом із вкладки браузера до TgWitness на тому самому комп’ютері і ніде не записуються; запис розгортання, відредагований файл cloud-init, токен панелі та, для швидкого тунелю, ключ адреси зберігаються в `deployments/NAME` всередині каталогу даних. Панель надає доступ до цього лише головному адміністратору через пряме з’єднання з петлею зворотного зв’язку (`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` та **«Знайти поточну адресу»** приймають лише підписані публікації, тому підроблена публікація не може перенаправити вас та ваш токен панелі на чужу адресу. Тема міститься у записі та опублікованому 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/uk/docs/reference/accounts/). Дії панелі записуються у підписаному журналі; це не сесії SSH. [Свідок](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/)». Дії провайдера класифікуються: створення та запуск протягом 30 хвилин після створення проходять перевірку; консоль, відновлення, скидання пароля, перебудова, ISO, образи, знімки, резервні копії, Systems Manager, EC2 Instance Connect та відкриття брандмауера — не проходять перевірку; дії з живленням та все непередбачуване позначаються для перевірки. Невідома дія ніколи не проходить непоміченою. ## Звіт про передачу доказів `--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/uk/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 One на сервері — вихідний брандмауер, що пропускає лише трафік через Cloudflare | кожен з’єднання, встановлене сервером, а не лише DNS | ще не створено | | Доступ перед панеллю | хто та коли увійшов до панелі | не реалізовано: потрібно мати власний домен | | Реєстрація SSH-команд | кожна команда в сеансі налагодження | ще не створено | Logpush, який зберігає власну копію Cloudflare в R2, є функцією для корпоративних клієнтів: у рамках безкоштовного тарифного плану Cloudflare відповідає `logpush is not enabled for this account`. Журнал шлюзу зберігається там 24 години, тому режим доказів копіює його в підписаний журнал (**журнал Cloudflare Gateway із DNS-запитами цього сервера** — токен лише для читання з доступом «Account Analytics Read»). Без плану «Zero Trust» обліковий запис має одне DNS-розташування. Коли Cloudflare відхиляє інше, сервер використовує існуюче, а його запити розрізняються за адресою; цей фільтр також потребує доступу до персональних даних за принципом «Zero Trust», і `destroy` залишає спільне розташування. Один запит до журналу охоплює не більше трьох годин, тому копіювання та `verify` читання даних за день у тригодинних вікнах. DNS-шлюз охоплює системний резолвер. DNS через HTTPS на порту 443 до іншого резолвера, а також з’єднання з адресами, які ніде не шукаються (наприклад, у дата-центрах Telegram), не фіксуються у його журналі. Cloudflare не має доступу до шифрованих даних Telegram, інших пристроїв, пов’язаних з обліковим записом Telegram (список пристроїв у режимі «evidence mode» фіксує їх з боку Telegram) або гіпервізора провайдера. ## Перегляд результатів розгортання Для звичайної віртуальної машини провайдер контролює інфраструктуру хоста, а локальний інвентар перевіряється разом із записами провайдера. Для Intel TDX верифікатор додатково перевіряє характеристики апаратного забезпечення, прив’язку колектора, компоновку та вимірювання ОС. Ознайомтеся з окремими результатами, щоб дізнатися, які перевірки пройшли успішно або були недоступні. Історія налаштувань брандмауера залежить від провайдера; Linode зберігає версії правил. Запис [Validation](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/) містить перелік протестованих розгортань та решти активних перевірок, а [Verification scope](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) пов’язує ці перевірки середовища з отриманням архівів та їхньою цілісністю. --- # Telegram · Посібник з панелей Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/ Кожен екран панелі: чати, щоденник, джерела, експорт, додаткові функції, режими захисту та перевірка коду. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/quickstart/) ![Початок роботи](https://phishdestroy.github.io/TgWitness/assets/chapter-start.svg) [Перше налаштування та параметри](https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/) · [Акаунти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) · [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) · [Звіти про справи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) Що робить кожен екран, що записується в підписаний журнал і де знаходиться детальний посібник. Панель відображає по одному робочому простору за раз: один обліковий запис Telegram із власними джерелами, журналом та ключем підпису. Селектор у верхній частині бічної панелі дозволяє перемикатися між робочими просторами. Адреса містить робочий простір (`?ws=…`); доки адреса, селектор та завантажений обліковий запис не збігаються, дії залишаються заблокованими. Використовуйте методи порівняння колекцій , щоб вибрати між спостереженням у реальному часі, повним історією, експортом даних з нових облікових записів/чатів та передачею збережених записів. На сторінці Експорт над елементами керування завантаженням розміщено те саме порівняння. **На цій сторінці** - [Знайдіть свій шлях](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#find-your-way) - [Почніть звідси](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#start-here) - [Чати](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#chats) - [Журнал](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#journal) - [Джерела](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#sources) - [Експорт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#exports) - [Налаштування, облікові записи та підключення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#settings-accounts-and-connection) - [Додатки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#extras) - [Режими захисту](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#protection-modes) - [Інші інструменти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#more-tools) ## Орієнтуйтеся Розділи «Щоденні» розташовані у верхній частині бічної панелі, **«Акаунти»** — під розділом **«Робоча область»** , а все інше — у розділі **«Інші інструменти та налаштування** ». Перемикач **рівня інтерфейсу** у верхній панелі визначає, скільки розділів відображається: | Рівень | Розділи на бічній панелі | | --- | --- | | Просто | Головна, Чати, Зміни, Архів та Налаштування | | Стандарт | Також Case Board, Акаунти та доступ | | Експерт | Також «Джерела», «Додатки», «Запитати архів», «Параметри», «Акаунт», «Системний журнал» та «Інтеграції» | Прості виклики «Почати тут», «Журнал» та «Експорт», **«Головна**», **«Зміни»** та **«Архіви**». Рівень лише приховує розділи. Прихована функція продовжує працювати, а сервер самостійно перевіряє кожен дозвіл. Рівень, мова, тема та часовий пояс зберігаються окремо для кожного оператора та робочого простору; див. [налаштування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/). У верхній панелі також є: - **Перейти до розділу** (Ctrl+K або ⌘K на Mac): знайти чат, параметр або запис у журналі за допомогою `#number`. Клавіші зі стрілками переміщують, Enter відкриває, Esc закриває. - **Сповіщення**: проблеми та зміни в чатах, виявлені з журналу. Функція **«Позначити все як прочитане»** обнуляє лічильник, а **«Правила сповіщень»** відкриває налаштування правил. Надсилання сповіщень у Telegram, Discord або на електронну пошту налаштовується в меню [«Додатково» → «Сповіщення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#notifications)». - Індикатор підключення для цього робочого простору. **Стан роботи Collector** під верхньою панеллю поділяється на підключення до Telegram, прийом подій, джерела та чергу вкладень. - **«Lock**»: закриває панель у цьому браузері. Колекція продовжує працювати на сервері. - Режим захисту поруч із номером версії; див. [режими захисту](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#protection-modes). Демо-робоча область містить вигадані повідомлення і ніколи не підключається до Telegram. Дії, які могли б змінити реальну робочу область, там не допускаються. ## Почніть звідси Виберіть завдання. **Функція «Експортувати мій акаунт»** завантажує те, що акаунт може прочитати зараз. **Функція «Стежити за розслідуванням»** фіксує нові повідомлення, виявлені редагування та повідомлення про видалення у вибраних вами чатах. Картка налаштувань показує три кроки: підключити акаунт, вибрати джерела, розпочати спостереження. Питання про мету залишається на цій сторінці, доки ви не відповісте на нього або не пропустите його. У робочій області відкривається перше вікно [налаштувань](https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/). ## Чати Збережені розмови, за замовчуванням доступні лише для перегляду. - Шукайте у списку за іменем або ID. **Команда «Вибрати»** додає або видаляє чати, за якими ви стежите. Команда «Відкрити **посилання Telegram»** приймає ім’я користувача або посилання-запрошення та зберігає попередній перегляд у щоденнику. Команда **«Приєднатися / відкрити та спостерігати»** приєднує вас до чату та додає його до ваших джерел; відкриття бота надсилає його `/start`. - У заголовку чату підраховуються повідомлення **видалено, текст збережено**, **видалено перед збереженням** та **не знайдено при повторній перевірці**. Список чатів та сповіщення використовують ті самі визначення. Видалене повідомлення має червоний колір і зберігає свій текст; відредаговане повідомлення зберігає кожну збережену версію. Кожне видалення вказує те, що відомо: коли його переглянули, що Telegram не повідомляє, хто його видалив, або що надійшло лише сповіщення. - **«Історія завантаження»** відображає останні 100, 250 або 500 повідомлень у цьому вікні та в журналі. Щоб завантажити всі увімкнені джерела, скористайтеся меню [«Джерела» → «Повна історія](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/#people-profiles). - **Функція «Зберегти профіль» тепер** створює знімок чату або профілю бота: опис, учасників, посилання для запрошення, команди бота. ### Тільки для читання, надсилання та секрети Два перемикачі над повідомленнями захищають обліковий запис і користувача: - **Режим «Тільки для читання»** увімкнено під час відкриття чату. Вимкніть його, щоб надсилати повідомлення або натискати кнопки бота . Кожна дія супроводжується запитом **«Надіслати як @account?**» або **«Натиснути цю кнопку бота як @account?»**, що повідомляє вас про те, що учасники чату бачать це і що це потрапляє до підписаного журналу. **Опція «Не запитувати знову протягом 10 хвилин у цьому чаті»** тимчасово пропускає це запитання. Функція надсилання вимкнена для цілі **«Докази у справі**» — як у панелі, так і в API. - **Функція «Mask secrets»** приховує дані, що виглядають як пароль, код входу, ключ API або хеш, токен бота, рядок сеансу, приватний ключ, JWT або номер платіжної картки (номери карток перевіряються за допомогою суми Луна). **Функція «Show»** розкриває одне значення; це розкриття фіксується в журналі. Вимкнення маскування для цього браузера також фіксується. Змінюється лише відображення: оригінальні записи та всі експортовані дані зберігають повний текст. ## Журнал Усі записи, підписані робочим простором, розташовані в порядку від найновішого до найстарішого. - **У розділі «Огляд»** підраховуються переглянуті повідомлення, зафіксовані редагування, повідомлення про видалення та вибрані джерела. - **Хронологія подій** — фільтрує за типом події (усі, редагування, видалення, реакції, членство, охоплення), за текстом та за джерелом. **Завантажити попередні події** — повернення на попередню сторінку. - Відкрийте запис, щоб переглянути його деталі, хеш та корисне навантаження. **Посилання на цей запис** — це адреса, яка відкриває саме цей запис. Можливі секретні дані маскуються в цьому попередньому перегляді; експортовані файли зберігають оригінальні дані. - Журнал є лише для додавання: у панелі немає функцій редагування чи видалення записів. Перевірте це за допомогою **«Експорт» → «Перевірити журнал»** або `python -m tgwitness.verify`; див. [експорт та перевірку](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/). ## Джерела Які розмови записує ця робоча область і що з них зберігається. Зміни стосуються майбутньої активності; збережені записи залишаються. **Функція «Оновити список чатів»** зчитує чати та папки облікового запису. Вона не завантажує повідомлення. ### Сфера застосування - **Що фіксує цей обліковий запис** : **Вибрані чати** (лише ті чати, які ви додаєте), **Папка Telegram** (одна з папок облікового запису, включаючи чати, додані до неї пізніше) або **Весь обліковий запис** (усі чати, а також кожен новий чат, групу, приватний чат або бота, щойно вони з’являються). **Режим розслідування** призначений для виділеного облікового запису: він фіксує усе, що бачить цей обліковий запис, його власні повідомлення та натискання кнопок, а також одразу зберігає профіль кожного нового чату та попередні видимі повідомлення. На зображенні [спеціальний посібник з облікових записів](https://phishdestroy.github.io/TgWitness/docs/dedicated-account/) пояснюється, чому ніколи не слід використовувати свій основний обліковий запис. - **Типи джерел** обмежують режими «папка» та «весь обліковий запис» каналами, групами, приватними чатами та ботами. **«Власні дії»** додають власні повідомлення облікового запису, редагування та натискання клавіш під час відповіді. - **Коли з’являється новий чат або бот**: збережіть його профіль та до обраної кількості його останніх видимих повідомлень. Обмеження: опублікований хмарний колектор не отримує секретних чатів. Окремий інтерфейс [Pseudo-secret та його демо-версія](https://phishdestroy.github.io/TgWitness/uk/docs/reference/secret-chats/) задокументовані з зазначенням їхнього статусу розробки та невирішених дефектів. Нічого не записується, поки TgWitness не працює; після перезапуску він фіксує лише те, що Telegram ще повертає, і у звіті відображається прогалина. Чати, що виходять за межі списку чатів (діалоги 1,000, якщо це не змінено в параметрах), додаються, коли вони наступного разу стають активними. Кнопки бота, натиснуті в іншому додатку, невидимі; відповідь бота записується. ### Чати, що входять до сфери застосування Фільтруйте за статусом (**Увімкнено**, **Призупинено**, **Пріоритет**, **Виключено**, **Непідтверджений доступ**, **Ігнорується**) та типом, а потім виконуйте дії з вибраного: увімкнути, призупинити, позначити або зняти пріоритет, виключити з області дії або видалити. Іконка статусу показує лише стан; дії знаходяться в меню кожного рядка з описом їхнього призначення. Призупинення та виключення вимагають підтвердження, у тому числі й у масовому режимі. При видаленні джерела потрібно вказати його назву, після чого видаляються профілі його учасників ; збережені записи залишаються у журналі. Джерело, яке не відображається у списку чатів облікового запису, — це **отримання оновлень, що не входять до списку чатів**, коли записи продовжують надходити; в іншому випадку — **доступ не підтверджено**. **Доступні чати** додає чати з **Додати вибрані** або **Додати всі знайдені**. ### Повна історія Завантажує доступну історію кожного увімкненого джерела в розділи «Чати» та «Журнал». Хід роботи зберігається після перезапуску; вкладення відповідають вашим налаштуванням мультимедіа. Дивіться [історію джерела](https://phishdestroy.github.io/TgWitness/uk/docs/reference/history/). ### Запис - **Виберіть, які зміни зберегти**: нові повідомлення, редагування, повідомлення про видалення, видимі реакції, приєднання та виходи. Пресет змінює форму; **«Зберегти налаштування запису»** застосовує його. Повторне ввімкнення категорії не відновлює пропущені події. - **Зберігати медіафайли, якщо вони доступні**: завантажуйте вкладення розміром до певного значення на файл, встановлюйте для кожного типу від 1 до 2 000 МіБ та обмежуйте тривалість відео в секундах (0 означає відсутність обмеження). Результат кожної спроби завантаження фіксується. - **Перевірка**: пріоритетні чати перевіряються кожні кілька хвилин, інші — рідко, завдяки чому обліковий запис не перевищує обмеження Telegram щодо FloodWait. Значення 0 вимикає групу. Позначте пріоритетні чати зірочкою у списку; кількість чатів за один прохід та пауза між ними вказані в параметрах. Див. [колекцію](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/). ## Експорт **«Завантаження»** готує файли; **«Звіт про збірку»** визначає вигляд звітів. | Що | Використовуйте його для | Посібник | | --- | --- | --- | | Експорт облікового запису | Актуальний знімок того, що обліковий запис може переглядати зараз | [Експорт облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/account-export/) | | Поділитися копією | Скорочена версія готового експорту облікового запису | [Розкриття інформації](https://phishdestroy.github.io/TgWitness/uk/docs/reference/account-export/#prepare-a-disclosure-for-a-lawyer-or-another-recipient) | | Підписано ZIP | Журнал, звіти, вкладення та інструменти верифікації у межах фіксованої межі журналу | [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) | | Звіти у форматах HTML, PDF, JSON | Запечатаний звіт, доступний для читання | [Звіти про справи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) | | JSONL, CSV | Оригінальні записи з підписами; електронна таблиця, безпечна для формул | [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) | | Витяг із протоколу передачі | Тільки ті чати, періоди та люди, які потрібні одержувачу | [Докази](https://phishdestroy.github.io/TgWitness/uk/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. Підписаний файл усередині залишається незмінним. Пароль не зберігається. - **У розділі «Prepared exports»** зберігається до 20 файлів загальним розміром до 2 ГіБ, а також найновіший файл, для повторного завантаження, кожен із яких містить тег SHA-256. Підготовка файлу не гарантує його доставку. - Якщо браузер відхиляє діалогове вікно збереження, панель переходить до звичайного завантаження. - **Ваша ідентифікація для підписання** показує відбиток ключа. **Функції «Зберегти контрольну точку**» та «Завантажити**підписане підтвердження виконання»** дають вам записи, які можна зберігати поза межами колектора. Функція «Підготувати **запит на часовий штамп»** формує запит за стандартом RFC 3161 без звернення до будь-якої служби. ## Налаштування, акаунти та підключення - **Налаштування**: мета, підключення, що записувати та інтерфейс. Дивіться розділ [«Перше налаштування та параметри](https://phishdestroy.github.io/TgWitness/uk/docs/reference/settings/)». - **Акаунти**: кожна робоча область із своїм станом, джерелами, подіями та чергою вкладень. Фільтруйте за категоріями **«Потребує уваги**», **«Збирання»**, **«Офлайн» або «Призупинено»** чи **«Не підключено»**, призупиняйте або відновлюйте вибірку, імпортуйте файли акаунтів масово та керуйте групами. Див. розділ [«Акаунти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/)». - **Акаунт**: вхід та маршрут підключення цього акаунта. Direct, профіль WireGuard, ваш власний проксі-сервер, публічний пул MTProto або WARP; підготуйте та перевірте маршрут, а потім застосуйте його до цього акаунта, групи або всіх акаунтів. Див. розділи [«Підключення» та «Проксі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/)[-сервери](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Proxies.md)». ## Додаткові функції Необов’язково: для початку збору даних достатньо одного облікового запису та джерел. Налаштування відкриваються лише для тієї опції, яку ви вибрали, і нічого не підключається автоматично. Картка **«Рівень захисту»** у верхній частині екрана показує [режим захисту](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#protection-modes). | Картка | Що це додає | Посібник | | --- | --- | --- | | Зберігання та дисковий простір | Резервні копії, переміщення старих файлів у хмару, копія доказів, яку неможливо видалити | [Зберігання даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/) | | Мета та рівень захисту | Рекомендовані налаштування для вашої мети та двох шкал | [нижче](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#goal-and-protection-level) | | Сповіщення | Проблеми, змінені повідомлення та щоденний звіт; ваш власний бот-контролер | [нижче](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#notifications) | | Докази та резервні копії | Часові мітки, додаткові свідки та зашифрована зовнішня копія | [нижче](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#evidence-and-backups) | | Сервер працює цілодобово без перерв | Хмарний сервер без SSH, який створюється та видаляється з панелі управління | [Високий рівень безпеки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#from-the-panel) | | Незалежний свідок | Підписані перевірки, опубліковані у вашому каналі Telegram або на Discord | [Свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/) | | Перевірка коду | Порівнює запущену програму з публічним комітом на GitHub | [нижче](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/storage/#operator-bot-and-completion-notices)». ### Докази та резервні копії - **Незалежні мітки часу** надсилають лише елемент SHA-256 кожного підписаного контрольного пункту до авторитетів RFC 3161 та календарів OpenTimestamps кожні 5–1 440 хвилин. **Anchor зараз** виконує цикл. Див. [мітки часу](https://phishdestroy.github.io/TgWitness/uk/docs/reference/timestamp/). - **Інші свідчення**, кожне з яких неактивне, доки його не виберуть: найновіший раунд drand, список Telegram зареєстрованих пристроїв без IP-адрес та журнал Cloudflare Gateway із DNS-запитами сервера. Див. [додаткові записи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#optional-records-in-evidence-mode-drand-and-telegram-devices). - **Зашифрована резервна** копія журналу, файлів, контрольних точок та експортованих чатів зберігається у сховищі, сумісному з S3 (Wasabi, Amazon S3, Backblaze B2, Cloudflare R2, MinIO). Усе спочатку шифрується на цій машині. **Завантажте ключ шифрування** та зберігайте його окремо: без нього копію неможливо прочитати. Функція «Блокування об’єктів» у режимі «Управління» або «Відповідність вимогам» запобігає видаленню об’єктів протягом заданої кількості днів. Див. [«Зовнішня копія](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Off-site-Copy.md)». ### Перевірка коду Перевіряє, чи встановлена програма відповідає опублікованій версії. 1. Введіть репозиторій GitHub (офіційний вже вказано) та тег, гілку або коміт. 2. **Функція «Check now»** запитує API GitHub через маршрут цього робочого простору для зовнішніх запитів список файлів цього коміту. Вона порівнює ідентифікатор git-блобу кожного виміряного програмного файлу з комітом. Результат перевірки в Windows із перетвореними кінцівками рядків все одно збігається. 3. У результаті відображається список змінених, додаткових та відсутніх файлів (до 50 кожного типу), який зберігається як запис `source.checked` запис у журналі. Результат вважається актуальним лише доти, доки файли запущеної програми не зміняться: перевірте ще раз після оновлення. Токен не потрібен, і працюють лише публічні репозиторії; чати та облікові дані не завантажуються. Збіг ідентифікує код на диску. Це не є апаратним підтвердженням; для цього див. [Phala Cloud](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx). ## Режими захисту Перемикач поруч із номером версії показує обраний режим та скільки з 18 рівнів захисту активні, наприклад `🟠 Witnessed 9/18`. **Змінити режим можна** в **«Додаткові налаштування» → «Рівень захисту» —** там відкривається меню вибору. Режим визначає ціль та перелічує те, чого ще бракує; запис, підписання та збережені налаштування однакові в усіх режимах. | Режим | Для | Додано | | --- | --- | --- | | 🟢 Просто | Спостереження за чатом та збереження його копії | Чати, щоденник та експорт чатів; підписання відбувається у фоновому режимі | | 🟡 Підписано | Звіти надсилаються на платформу, хостинг-провайдера або службу з питань зловживань | Підписаний архів, перевірка журналу, контрольні точки, витяг з передачі справ | | 🟠 Засвідчено | Випадки, коли хтось може стверджувати, що запис було змінено | Незалежний свідок, що публікує підписані заголовки журналу | | 🔴 Готовий до використання в суді | Докази для адвоката, поліції або суду | Часові мітки, зашифрована зовнішня копія, деталі справи у звітах | | 🟣 Перевірено GitHub | Записи, програмне забезпечення яких має бути доступним для перевірки будь-ким | Перевірка коду та фіксація дій GitHub Actions | | ⚫ Моссад | Справи з високими ставками проти фінансово потужного супротивника | Захищений сервер, що працює 24/7, прихована 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/uk/docs/reference/analysis/) та [локальне розпізнавання тексту й транскрипцію](https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/). - **Параметри**: обмеження та темп збору даних, повторні перевірки, завантаження, профілі, сповіщення та експорт. Пошук за назвою, відображення **«Тільки змінених** значень» та підготовка значень за замовчуванням у вигляді чернетки за допомогою **функ**ції **«Відновити значення за замовчуванням…». Функція «Зберегти параметри»** застосовує ці значення з наступного використання, а кожна зміна фіксується у журналі. - **Доступ**: окремі токени для рецензентів, аналітиків та операторів, обмежені обраними робочими просторами, чатами та правами. Див. розділ [«Доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/)». - **Системний журнал** : що робив цей процес з моменту запуску (підключення, зміни проксі, входи, відмови, зміни налаштувань) із прихованими IP-адресами. **Функція «Слідкувати за новими рядками»** залишає найновіший рядок у полі зору. Повідомлення зберігаються лише в журналі. - **Інтеграції**: постачальник штучного інтелекту, з’єднання [MCP лише для читання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/) та [підписані вебхуки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/webhooks/). - **Case Board** — приватні нотатки команди, закладки та фрагменти поруч із доказами. Див. [Case Board](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/collection/ Обсяг спостереження, оновлення в режимі реального часу, повторні перевірки, вкладення, власні дії та значення пропусків — запис за записом. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/collection/#from-login-to-a-journal) - [Обсяг спостереження: вибрані чати, папка або весь акаунт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#observation-scope-chosen-chats-a-folder-or-the-whole-account) - [Сфера застосування та вибір подій](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#scope-and-event-selection) - [Власні дії](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#own-actions) - [Режим розслідування: приєднання до команд та спілкування з ботами](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#investigation-mode-joining-teams-and-talking-to-bots) - [Рівні повторної перевірки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#recheck-tiers) - [Історія повідомлень та атрибуція](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#message-history-and-attribution) - [Знімки історії](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#history-snapshots) - [Обробка вкладень](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#attachment-handling) - [Призупинити, заблокувати, відключити та перезапустити](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#pause-lock-disconnect-and-restart) - [Ізоляція та верифікація облікових записів](https://phishdestroy.github.io/TgWitness/uk/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` (новий чат під час спостереження). Повернення до обраних чатів призупиняє всі автоматично додані джерела. Чого ці режими не можуть зробити: - **Секретні чати** не підпадають під ці режими збору даних у хмарі. Окрема [реалізація секретних чатів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/secret-chats/) перебуває на стадії розробки; вона не включена до опублікованого колектора у версії, задокументованій у цьому документі. - **Нічого не записується, коли TgWitness не працює.** Після перезапуску програма запитує у Telegram про пропущені оновлення та повторно перевіряє чати, але Telegram не повертає всі дані після тривалих перебоїв у роботі. У звітах та `verify.py` такі періоди відображаються як прогалини (див. [охоплення](https://phishdestroy.github.io/TgWitness/uk/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`: заголовок, імена користувачів, опис, кількість учасників та адміністраторів, пов’язаний чат, уповільнений режим, ідентифікатори закріплених повідомлень (до 100), адміністратори з їхніми правами та званнями, а також подарунки, що відображаються на каналах та у профілях користувачів (до 100). У кожному записі перелічено відмінності від попереднього знімка: змінені поля з значеннями до та після, закріплені повідомлення, додані або видалені, адміністратори та подарунки, додані, змінені або більше не вказані у списку. Telegram не вказує, хто щось змінив або коли між знімками. - Частина, яку Telegram відхиляє (наприклад, список адміністраторів каналу для учасника, який не є адміністратором), позначається в `errors`; її попереднє значення зберігається та вказується в `carried_forward`, і ніколи не позначається як видалене. - Запис, єдиними змінами в якому є кількості, а також перевірка, що не виявила змін, посилається на останній повний стан за допомогою `state_seq` та кумулятивного `state_overrides`. Повний стан записується щонайменше кожні сім днів та щоразу, коли змінюється щось інше, окрім кількості. - `parts_complete` позначає списки з обмеженою кількістю елементів. Для додавання потрібен повний попередній список, для видалення — повний поточний список, а явні порожні значення фіксують очищення запису. - **Параметри → Стан чату** встановлює інтервал (за замовчуванням 12 годин, 0 вимикає створення знімків ), паузу між джерелами, які частини читаються, та чи фіксуються перевірки, що не виявили змін. `FLOOD_WAIT` та `FLOOD_PREMIUM_WAIT` зупиняють решту запитів на знімки, зберігають будь-який триваліший термін дії для всього облікового запису та залишають перерваний чат придатним для повторної спроби після цього очікування. - **Не відображається.** Вбудовані (зворотні) кнопки, натиснуті в іншому додатку Telegram, спливаюче вікно або посилання, яким бот відповідає на таке натискання, а також посилання-запрошення, використані в іншому додатку, не надходять до TgWitness. Те, що бот надсилає або редагує згодом, фіксується. ### Дія з панелі **У розділі «Чати»** тепер доступний міні-клієнт, що використовує обліковий запис Telegram обраного робочого простору: - Напишіть повідомлення простим текстом або виберіть **«Відповісти»** під збереженим повідомленням. Повернуте вихідне повідомлення записується навіть тоді, коли сфера дії не охоплює вихідні оновлення. - Натисніть **кнопку «Press»** під поточним кнопкою зворотного виклику або текстовою кнопкою. Сервер знову отримує повідомлення та відхиляє дію, якщо текст на клавіатурі відрізняється від збереженої версії. Квитанції зворотного виклику зберігають спливаючий текст 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 МіБ; нові робочі простори починаються з 20 МіБ для фотографій, 100 МіБ для відео, 50 МіБ для файлів, аудіо та круглих відео, 20 МіБ для голосових повідомлень та GIF-файлів і 5 Мб для стікерів. У нових робочих просторах GIF-файли та стікери залишаються вимкненими, доки їх не увімкнуть. У робочих просторах із політиками, збереженими до введення обмежень за типами, усі типи залишаються увімкненими та зберігають єдине обмеження для кожного типу. *Максимальний розмір файлу* встановлюється для всіх типів одночасно. Вимкнений тип створює запис `media.skipped`; файли невідомого розміру або файли, що перевищують обмеження, не завантажуються. Великі файли отримують додатковий час завантаження, що залежить від їхнього розміру та базової швидкості 256 КіБ/с. Задачі зберігаються після перезапуску, але посилання, термін дії яких закінчився, втрачений доступ або видалені файли все одно можуть перешкоджати відновленню. Завдання, що перебувають у стані очікування, зберігають встановлений для них ліміт, тому підвищення ліміту застосовується лише до нових файлів. Вимкнення типу або зниження його ліміту також пропускає файли, що перебувають у стані очікування та виключені з цього типу, для кожного з яких створюється запис `media.skipped`; вимкнення завантажень призупиняє чергу доти, доки їх знову не увімкнуть. ## Призупинення, блокування, відключення та перезапуск | Дія або стан | Ефект | | --- | --- | | Перейти до робочого простору | Змінює вигляд панелі; інші колектори зберігають свій стан. | | Заблокувати панель або закрити вкладку | Сервер та спостереження продовжують працювати. | | Призупинити спостереження | Припиняє роботу цього збирача та зберігає в черзі вкладені файли. | | Вимкнути джерело | Припиняє подальший запис у заданому діапазоні; завдання з обробки мультимедіа, що знаходяться в черзі, очікують, поки функція вимкнена. | | Видалити джерело | Він ігнорує це джерело та видаляє профілі його користувачів; вже збережені записи залишаються у журналі, до якого можна лише додавати дані. Вкладення, що все ще очікують на обробку, фіксуються як невдалі (`source_removed`). У режимах «папка» та «весь обліковий запис» вони також виключаються. | | Змінити маршрут з’єднання | Вимагає паузи, закриває старі клієнти та скасовує незавершений вхід. | | Зупинити процес Python | Призупиняє роботу всіх робочих просторів; під час перебування в режимі офлайн спостереження не здійснюються. | | Перезапуск після активного спостереження | Спроба відновити збережений діапазон за допомогою збереженої сесії. Ручна пауза скасовує цю спробу. | Колектор фіксує виявлені розриви з’єднання, повторні спроби, помилки, запуски/зупинки та сигнали активності. Короткі переривання можуть бути пропущені під час періодичних перевірок з’єднання. Після перезапуску пропущені оновлення запитуються, починаючи з збереженої позиції оновлення, а спостережувані чати періодично перевіряються повторно; див. [формат доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#durable-collection-and-process-receipts-02). Знімок екрана надає контекст; він не доводить, що прогалина була усунена. ## Ізоляція та верифікація облікових записів Кожна робоча область має власний журнал, авторизацію, ключ підпису, політику та чергу. Лише активний клієнт може вносити спостереження в режимі реального часу. Відхилені, очікувані, замінені та клієнти, що перевіряють з’єднання, не можуть записувати оновлення в режимі реального часу до цього журналу. Різні облікові записи можуть спостерігати за однією й тією ж групою, але їхні журнали залишаються окремими. Кожна подія містить попередній хеш та підпис Ed25519. Експорт охоплює весь журнал робочого простору за допомогою фіксованого порядкового номера. Фільтри панелі не фільтрують експорт; збір даних може тривати за межами його меж під час підготовки. **Журнал перевірки** перевіряє ланцюжок подій та підписи в межах відображеної межі. Його результат очищується при зміні робочого простору, а панель ідентифікує нові записи, додані після перевірки. Експорт у форматі ZIP також перевіряє зібрані мультимедійні файли. Зберегти відбитки та контрольні точки окремо. Див. розділ « [Обсяг верифікації](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope)» для перевірок збору даних у кожному режимі, а також розділ «[щоденні операції](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/)» для рутинного збору даних. --- # Telegram · Таємні чати: реалізація та демонстрація Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/secret-chats/ Ознайомтеся з окремою реалізацією Секретного чату, випробуйте вигаданий інтерфейс та перегляньте невирішені недоліки. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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`. ## Що робить інтерфейс розробки | Дія | Зафіксована поведінка | | --- | --- | | Почати чат за іменем користувача або ідентифікатором користувача | Надішліть запит; інший учасник повинен його прийняти. | | Прийняти вхідний запит | TgWitness стає кінцевою точкою прийому для цього чату. Автоматичне прийняття — це окреме налаштування, яке за замовчуванням вимкнене. | | Надіслати або отримати повідомлення | Додати вихідний або вхідний запис `secret_chat.message` та відобразити його у ланцюжку повідомлень. | | Отримати вкладення | Розшифруйте їх, збережіть байти за SHA-256 та запишіть `secret_chat.file`. | | Отримати повідомлення про таймер або видалення | Зафіксувати повідомлення та зберегти раніше записаний вміст. | | Переглянути розмову | Відобразити повідомлення, файли, сповіщення та візуалізацію ключів. Відкрита вкладка оновлюється кожні чотири секунди. | У розробницькій збірці, що містить інтеграцію, оператор увімкне модуль для вибраного облікового запису та підключить його. Для запуску, прийняття та надсилання повідомлень необхідний дозвіл на взаємодію, а також вимкнення захисту облікового запису від читання. Інший учасник повинен прийняти новий вихідний чат. Ці елементи керування відсутні в опублікованій версії додатка на момент випуску вищезазначеної редакції. Під підтримку потрапляють лише чати, створені або прийняті під час цієї сесії TgWitness. Існуючі секретні чати на телефоні залишаються на цьому пристрої. Імпорт сесії не надає їхніх окремих ключів шифрування. Ключові матеріали та лічильники секретних чатів зберігаються у сховищі робочого простору; збережені повідомлення та розшифровані файли підлягають звичайним заходам захисту сховища робочого простору. ## Демонстрація на веб-сайті Сценарій «**Спробувати секретний чат**» на веб-сайті відкриває вигадану розмову. Він дозволяє читачеві ініціювати запит, імітувати його прийняття, надіслати зразок повідомлення, отримати заздалегідь підготовлену відповідь та файл, а також перевірити таймер і повідомлення про видалення. Вхідний запит також можна прийняти. Елементи керування чітко позначають імітовані дії співрозмовника. Цей сценарій працює в пам’яті браузера. Скидання або перезавантаження очищає його. Він не входить у систему, не зв’язується з Telegram, не створює реальних ключів шифрування та не змінює підписані зразки для завантаження. Повідомлення, що відображаються, не є підписаними доказами. Сценарій демонструє передбачену взаємодію; він не підтверджує, що реалізація розробки є готовою. ## Перевірки та невиправлені недоліки П’ять існуючих тестів охоплюють збереження зашифрованого ключа, життєвий цикл та записи повідомлень, політику прийняття вхідних даних, надсилання лише для читання та експорт вкладень. Вони пройшли перевірку щодо закріпленої бібліотеки під час огляду 6 листопада. Три додаткові синтетичні перевірки відтворили дефекти в тому самому знімку: | Висновок | Наслідок | | --- | --- | | Закриття обходить `read_only` | Шлях закриття може виконувати віддалену дію, коли взаємодії слід заблокувати. | | Пошук дублікатів здійснюється лише серед останніх записів 500 | Старіший запис може створити дублікат після перезапуску. | | Невдале завантаження вкладення призводить до видалення відповідного запису в черзі | Тимчасова помилка призводить до втрати завдання повторної спроби. | Це відкриті дефекти, які також зафіксовані в опублікованому аудиті . П’ять успішно пройдених тестів не охоплюють ці збої. Під час перевірки використовувалися синтетичні робочі середовища та імітовані операції Telegram; вона не повторювала реального встановлення з’єднання та не оцінювала розгортання в виробничому середовищі. --- # Telegram · Завантажити історію джерел Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/history/ Завантажуйте минулі повідомлення з увімкнених джерел, призупиняйте та відновлюйте процес, а також перевіряйте підписаний звіт про хід роботи. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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) У розділі «**Джерела**» перегляньте активні чати, призупиніть спостереження, виберіть Стандартний API або експорт Takeout, а потім виберіть «**Завантажити повну історію**». Цей запуск фіксує цей список джерел і зчитує доступні минулі повідомлення у чати та підписаний журнал спостережень. Медіафайли використовують існуючі налаштування вкладень та стійку чергу завантаження. Це окремо від підписаного експорту у форматі JSON/HTML для кожного чату. Для збору даних по всьому**обліковому запису виберіть Весь обліковий запис**, розпочніть спостереження, щоб завантажити його список джерел, і перегляньте цей список перед початком історії. Обмеження на кількість діалогів у списку все ще діє (за замовчуванням — 1,000, можна налаштувати в розділі Параметри). Успішне виконання не означає, що всі діалоги облікового запису були включені до списку. Для чатів, виявлених або увімкнених пізніше, потрібно виконати ще одне запущення. Призупиніть спостереження перед початком історії; одночасно можна збирати дані лише з одного облікового запису. Виберіть від одного до п’яти обробників вкладень та вкажіть, чи зберігати доступні Останні дії та порівнювати раніше збережені версії. Вилучення даних може вимагати затвердження в Telegram та зазначеного сервером часу очікування. Ці параметри залишаються незмінними після відновлення роботи. Див. [поведінку заповнення прогалин та договір про докази](https://github.com/phishdestroy/TgWitness/blob/main/docs/BACKFILL.md) для детальної інформації щодо передачі, повторних спроб та довіри. ## Призупинення, поновлення та часткові результати - **Історія паузи** зупиняє читання. **Історія продовження** відновлює з останнього збереженого повідомлення в кожному джерелі; перезапуск програми також залишає процес у стані паузи до його відновлення. Для відновлення потрібен той самий неактивний обліковий запис Telegram. - Спостереження за повідомленням, обробка вкладень та фіксація позиції курсора відбуваються в одній транзакції. При відновленні виконання вже зафіксовані спостереження не повторюються. У режимі реального часу або під час окремого, явно запущеного циклу виконання може відбуватися незалежне спостереження за тим самим повідомленням. - Кожне джерело (кожен розділений діапазон Telegram у Takeout) фіксує верхній ідентифікатор повідомлення під час першого зчитування. Новіші повідомлення належать до поточного спостереження, а не до решти історичних сторінок цього джерела. - Джерела, до яких неможливо отримати доступ, та джерела, вимкнені під час збору даних, залишаються видимими як «неуспішні» або «пропущені». Інші джерела продовжують працювати; загальний результат є неповним. - Затримки FloodWait дотримуються збереженого інтервалу очікування для облікового запису. У разі тимчасових збоїв повторюється спроба до п’яти разів; у разі вичерпання квоти та недостатнього місця на диску відбувається пауза з збереженням позиції курсора. - **Завершення цього циклу історії** зберігає збережені спостереження. Воно не видаляє їх і не скасовує завдання з додаванням файлів через стандартний API. Завершення Takeout позначає решту файлів Takeout як пропущені; призупинення дозволяє їх відновити. Новий цикл заново зчитує увімкнені джерела. Поняття «завершення історії» стосується лише зчитування історії. Вкладення можуть залишатися в стані очікування, завершуватися невдало або виключатися згідно з налаштованою політикою. Перевіряйте підтвердження отримання медіафайлів у журналі та черзі вкладень; лише завершене підтвердження з збереженими байтами вважається збереженим вкладенням. Операція з історією є явним запитом на створення знімка і відрізняється від параметрів, що вибирають категорії майбутніх подій у реальному часі. ## Передача та перевірка Збережіть **підписаний звіт про хід роботи**, а потім скористайтеся **функцією «Експорт доказів»**, щоб завантажити журнал та збережені вкладення. Пізніший експорт доказів може містити додаткові записи; звіт прив’язує свої лічильники до префікса журналу на момент його створення. Запустіть верифікатор із надійної версії цієї версії: ``` python tgwitness/verify.py tgwitness-history-report.json --evidence evidence.zip --fingerprint TRUSTED_FINGERPRINT ``` Збережіть очікуваний відбиток ключа підпису окремо. Верифікатор перевіряє підпис звіту, архів доказів, контрольну точку звіту, вихідний план, обліковий запис та кількість збережених/недоступних повідомлень. Нові запуски також прив’язують хід виконання вихідного коду та параметри до підписаних подій курсору. Без `--evidence` перевіряється лише підписаний звіт та його внутрішня узгодженість. Старі поля прогресу та зведення вкладень залишаються підписаними заявами збирача. Верифікатор доказів перевіряє байти архівних медіафайлів. Ані підписання, ані завершення доступної історії не підтверджують походження з Telegram, атомарний знімок або історичну повноту. Повідомлення можуть змінюватися під час читання; видалені повідомлення та проміжні редагування, що не входять до доступних Останніх дій та Секретних чатів, не відновлюються. Оператор, який контролює ключ підписання, може сфабрикувати журнал до того, як з’являться зовнішні зобов’язання. Використовуйте окремо збережені контрольні точки або незалежного свідка для задокументованих властивостей виявлення несанкціонованого втручання. Курсор збору даних відображає стан локального робочого простору. Відновлення лише ZIP-файлу з доказами не відновлює завдання збору даних, що перебуває в процесі виконання, або сеансу Telegram. Зберігайте резервну копію робочого простору, якщо потрібно продовжити виконання початкового завдання. --- # Telegram · Робочі процеси та операції Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/ Щоденна робота панелі: режими, категорії моніторингу, параметри, сповіщення, експорт даних, резервне копіювання та ємність. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/deployment/) ![Розгортання та відновлення](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) Для першого підключення використовуйте [облікові записи та формати сеансів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/). Пояснення щодо збережених версій, політик подій та пропусків див. у розділі [«Як працює збір даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/)». Цей посібник охоплює щоденну експлуатацію та відновлення. Управлінська інсталяція включає файли **, START-HERE.html,** та **, а також файл START-HERE.txt**, окрім програми запуску, з посиланням на репозиторій та командами, адаптованими до шляху інсталяції. Запустіть файл `tgwitness guide --print` через SSH або `tgwitness paths`, щоб визначити фактичний каталог даних. Системна інсталяція з правами root зберігає приватні дані у файлі `/var/lib/tgwitness-…`; файл `/opt/tgwitness` містить саму програму. Для керованого тимчасового тунелю Cloudflare код `tgwitness tunnel off` закриває публічний доступ, тоді як локальна панель та збір даних продовжують працювати. Код `tgwitness tunnel on` увімкне його; код `tgwitness tunnel restart` створює нове тунельне з’єднання. Використовуйте код `tgwitness open`, щоб переглянути його поточну адресу. Явне вимкнення зберігається після перезапуску служби. Код `tgwitness stop` зупиняє як панель, так і збір даних. **На цій сторінці** - [Робочий процес оператора](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#operator-workflow) - [Поділитися результатами роботи без передачі головного ключа](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#share-work-without-sharing-the-main-key) - [Режими виконання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#runtime-modes) - [Категорії моніторингу](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#monitoring-categories) - [Повідомлення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#notifications) - [Розташування панелі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#panel-layout) - [Середовища розгортання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#deployment-environments) - [Перевірки під час запуску та експорт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#startup-checks-and-exports) - [Резервне копіювання, відновлення та переривання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/#backup-restore-and-interruptions) - [Ємність та термін зберігання](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/access/)». Використовуйте **«Відкриті сесії»,** щоб завершити з’єднання, або скасуйте доступ, щоб закрити всі його сесії. Консоль адміністратора об’єднує інформацію про активність поточних процесів у всіх робочих просторах. Закриття сесії не зупиняє збір даних. ## Режими роботи | Режим | Дія | Поведінка | | --- | --- | --- | | Демо | scripts\Demo.cmd або `--demo` | Синтетичні дані; підключення до реальних акаунтів вимкнено | | Спостереження | Почати спостереження | Запис оновлень для вибраних джерел | | Знімок історії | Джерела → знімок історії | До 500 поточних повідомлень; реконструкція всіх минулих змін не здійснюється | | Пауза | Призупинити спостереження | Припинення збору даних із збереженням даних та завдань у черзі | | Перегляд/передача | Експорт | ZIP, JSONL/CSV/HTML, контрольна точка, підтвердження обробки та запит на часовий штамп | | Кілька облікових записів | Робочі простори або верхня кнопка «**+**» | Необмежена кількість окремих робочих просторів у рамках одного процесу | Доступ до локальної демо-версії відкривається автоматично без ручного введення токена. Використовується можливість, обмежена терміном дії процесу, яка діє лише для прямого доступу через лупбек до ізольованої синтетичної демо-версії; токен головної панелі не розкривається. Реальні робочі простори та віддалений або проксі-доступ до демо-версії зберігають аутентифікацію за допомогою токена. Вхід у демо-версію не надає жодних повноважень у Telegram. ## Категорії моніторингу ![Налаштування моніторингу для кожного облікового запису з використанням синтезованих вихідних даних](https://phishdestroy.github.io/TgWitness/assets/sources.png) У розділі **«Джерела» → «Запис» → «Вибрати, які зміни зберегти»** можна окремо вибрати нові повідомлення, редагування, повідомлення про видалення, оновлення реакцій та події, пов’язані з членством. За замовчуванням зберігаються всі категорії. Параметр **«Повідомлення, редагування та видалення»** зберігає оригінальний контекст, водночас вимикаючи окремі оновлення реакцій та членства. **Параметр «Уся видима активність»** відновлює всі п’ять категорій. Пресети змінюють форму; натисніть **«Зберегти налаштування запису»,** щоб застосувати зміни. Збережена політика застосовується до всіх вибраних джерел у цій робочій області. Інші робочі області зберігають власні налаштування. Кожна фактична зміна фіксує підписані значення «до» та «після» ; поточна політика також включається до квитанцій про обробку та записів про початок спостереження . Вимкнення категорії не призводить до видалення попередніх спостережень. Повторне ввімкнення не відновлює пропущені зміни. У цій версії немає можливості перевизначення категорій на рівні груп. Залишайте функцію запису нових повідомлень увімкненою, якщо попередній вміст має значення: повідомлення про видалення не дозволяє відновити текст, який ніколи не було зафіксовано. Оперативні записи, записи про охоплення та інші події, пов’язані з роботою групи, завжди зберігаються. Знімки історії з явною інформацією відокремлені від вибору категорій у режимі реального часу та можуть містити службові повідомлення. Ці параметри не видаляють метадані реакцій/учасників, вбудовані в об’єкт Telegram, який було зафіксовано іншим чином. Знімок історії може ставити вкладення в чергу під час паузи. Почніть спостереження, щоб обробити їх. Наявність у черзі не означає, що файл завантажено. Недоступний оригінальний файл не замінюється на новішу відредаговану версію; результати фіксуються окремо. **Натискання кнопки «Заблокувати»** очищає доступ браузера та секретні поля, але залишає збір даних у дії. Закриття вкладки також залишає процес у дії. Зупинка процесу Python або служби припиняє збір даних незалежно від стану браузера. Видалення додаткового робочого простору зупиняє його колектор та видаляє його локальні дані. Якщо блокований файл або помилка файлової системи перериває видалення, панель повідомляє про збій і залишає робочий простір у списку як недоступний (`DeletionPending`). Закрийте програми, що утримують його файли, та спробуйте виконати **видалення** ще раз. Перезапуск TgWitness залишає цей робочий простір зупиненим і не відновлює його частково видалений журнал або ключі. Успішне видалення фіксується лише після видалення каталогу; окремо експортовані або збережені резервні копії залишаються під дією власної політики зберігання. ## Сповіщення Відкрийте **«Додаткові налаштування» → «Сповіщення» → «Налаштувати**». TgWitness використовує Apprise для надсилання сповіщень у Matrix, Telegram, Discord, Slack, ntfy, електронну пошту та інші підтримувані сервіси. До одного робочого простору можна додати кілька пунктів призначення. 1. Введіть одну URL-адресу призначення Apprise у кожному рядку. Використовуйте [каталог служб та формати URL-адрес](https://appriseit.com/services/) для вашої служби. 2. Увімкніть **«Надсилати сповіщення**», а потім виберіть сповіщення про проблеми, зміни в спостережуваних чатах та щоденний звіт. Час у звіті визначається за серверним часом. 3. Увімкніть опцію **«Включати короткі уривки»,** якщо ви хочете, щоб у сповіщеннях з’являвся збережений текст із видалених та відредагованих повідомлень. 4. Натисніть **«Зберегти сповіщення»**, а потім **«Надіслати тест»,** щоб перевірити доставку. Для власного одержувача використовуйте [JSON-вебхук](https://appriseit.com/services/json/) Apprise. Наприклад, `jsons://notify.example.org/tgwitness` надсилає JSON через HTTPS на цю кінцеву точку. Це вигаданий приклад; замініть його на власний пункт призначення. Пункти призначення та налаштування належать до обраного робочого простору. Повідомлення про зміни охоплюють джерела, що відстежуються, включаючи нещодавно додані чати. Дзвіночок у верхній панелі також відображає список останніх проблем та змін у чатах. У демо-версії елементи керування сповіщеннями відображаються, але надсилання вимкнено. Налаштуйте доставку в реальному робочому просторі. Сповіщення використовують маршрут «Direct», SOCKS5 або HTTP цього робочого простору; MTProxy не може їх передавати. Не-HTTP-призначення, такі як SMTP, вимагають прямого маршруту. ## Розташування панелей ![Робоча область підключення з використанням синтетичних даних](https://phishdestroy.github.io/TgWitness/assets/connection.png) **Журнал** відображає спостереження, пошук та фільтри. Редагування відкриває збережені версії; видалення відкриває попередній вміст, якщо він доступний. Невідомі джерела залишаються явно вказаними. Статистика доступна в **розділі «Огляд»**; деталі збору даних зберігаються в локальному посібнику. Відкрийте відредаговане повідомлення, щоб порівняти його версії за допомогою **Зміни в тексті** або **Поруч**; **Вихідні дані** показує збережені поля. Зміни прихованих посилань і кнопок ботів відображаються окремо. Відкрийте попередній перегляд вкладення, щоб переглянути збережені зображення, аудіо чи відео; кнопка завантаження забезпечує доступ до збереженого оригіналу. Режим **Live** оновлює журнал і чати в міру надходження записів. Призупиніть його під час перегляду або скористайтеся кнопкою нових подій, коли будете готові; збір даних при цьому продовжує працювати. Комбінація **Ctrl/Cmd+K** знаходить дії панелі та виконує пошук у журналі. **Розділ «Джерела»** містить сферу спостереження (обрані чати, папку Telegram або весь акаунт), доступні чати будь-якого типу, вибрані джерела з позначками пріоритету, налаштування вкладень та повторної перевірки, а також знімки історії. Приватні джерела обираються за діалогом/ID без публічного посилання. Статус доступу описує результати останньої перевірки, а не постійні дозволи. Відфільтруйте джерела, позначте їх прапорцями, а потім одночасно увімкніть, призупиніть або позначте їх як пріоритетні. У списку доступних чатів кнопка **Додати вибрані** використовує ваш вибір; **Додати всі знайдені** використовує поточний пошуковий запит і фільтр за типом. **У розділі «Чати → Користувачі»** перелічено всіх, чиї повідомлення збережено; якщо для чату ввімкнено профілі користувачів, один клік відкриває профіль цієї особи з посиланнями на записи в журналі. **Witness** створює токени свідків, доступні лише для читання, показує, коли кожен свідок востаннє перевіряв дані, та надає команди й опції для запуску одного ([незалежного свідка](https://phishdestroy.github.io/TgWitness/uk/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, процес у фоновому режимі або агент користувача | Наведено приклад запуску; необхідна окрема перевірка встановлення | | Docker/Compose | Постійний обсяг роботи, один виконавець | Надано визначення та перевірку працездатності CI; Docker недоступний локально | | Мобільний браузер | Підключіться до захищеної панелі на працюючому сервері | Перевірено на вузькому макеті Chromium; колектор не працює на iOS/Android | Портативність означає відсутність обов’язкового хмарного сервісу чи фронтенд-збірки. Кожна цільова система все одно потребує сумісних залежностей Python/криптографії, локального диска та доступу до мережі. Див. [файл DEPLOYMENT.md](https://phishdestroy.github.io/TgWitness/uk/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 МіБ. Для експорту великих обсягів даних або у разі використання браузерів без підтримки потокового запису файлів скористайтеся командним рядком для потокового запису: ``` 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 за допомогою WinZip, який можна відкрити за допомогою 7-Zip та WinRAR; пароль не зберігається ([обробка доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/)) | | База даних журналу та збережені на диску вкладення | TgWitness не шифрує дані; використовуйте зашифрований диск або том | | Сесії Telegram та ключі підпису | Зашифровано в каталозі даних (`credentials.enc`, `signing.enc`, `network.enc`) | Повне резервне копіювання — це описаний вище каталог зупинених даних, а не експорт. Для обох випадків використовуйте захищене сховище та механізм контрольованої передачі. Тимчасові експортовані дані зберігаються у папці `temporary-exports/` кожного робочого простору; завершені відповіді очищуються, а перервані файли експорту видаляються під час наступного запуску, поки триває блокування екземпляра цього робочого простору. Відновлення з’єднання не гарантує відновлення проміжних змін. Постійні завдання з обробки медіафайлів та стан оновлення Telegram зберігаються після перезапуску; див. [формат доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#durable-collection-and-process-receipts-02). ## Ємність та термін зберігання Стандартні обмеження, які можна змінити в **розділі «Параметри**»: перші 1 000 діалогів, 500 повідомлень на знімок, 4 ГіБ нестисненого підписаного вмісту ZIP (для більших архівів потрібен `verify.py --max-gib N`) та резервний варіант для браузера розміром 128 МіБ. Вкладення займають від 1 до 2 000 МіБ на тип у розділі **«Джерела» → «Вкладення**». За замовчуванням CLI для завантаження передбачає передачу 5 ГіБ. Доступний простір на диску може бути нижчою межею. Зарезервуйте місце для журналів, мультимедіа, WAL, тимчасових експортів та резервних копій. Експорти використовують обсяг даних, а не значення 512 МіБ «`/tmp`» у Compose. Вимірюйте події за секунду, вік черги, обсяг мультимедіа в байтах та затримку диска, а не лише кількість груп. Синтетичні локальні тести не гарантують доставку повідомлень у Telegram. Автоматичного видалення збережених даних не відбувається. Видалення кінця журналу порушує його зв’язок із збереженими контрольними точками. Пріоритетні повторні перевірки вже існують: джерела, позначені зірочкою, за замовчуванням перевіряються кожні 15 хвилин, інші — кожні 6 годин (див. [рівні повторної перевірки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#recheck-tiers)). Існують захищені паролем експорти, як описано вище. Прийом даних із Telegram/проксі в режимі реального часу, надійне відтворення, журнал адміністратора та опитування реакцій, ізольовані робочі процеси, шифрування локального журналу та медіафайлів самим TgWitness, а також незалежна перевірка залишаються окремими напрямками роботи. Обмежений доступ документований у розділі [«Доступ та дозволи](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/verification/). --- # Telegram · Режим розслідування Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/ Повні розслідування акаунтів у каналах, групах, приватних чатах та ботах — від визначення обсягу до формування перевіреного пакету матеріалів справи. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/investigation/#worked-case-a-destination-changes-across-four-conversations) - [1. Визначте суть справи та зберіть повну інформацію](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#1-define-the-case-and-collect-the-whole-account) - [2. Скласти перелік усіх джерел та зібрати історичний контекст](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#2-inventory-every-source-and-acquire-historical-context) - [3. Зберегти динаміку розвитку справи та цілеспрямовані взаємодії](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#3-preserve-the-evolving-case-and-deliberate-interactions) - [4. Пов’язування спостережень у різних чатах](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#4-connect-observations-across-chats) - [5. Створити хронологію по всіх чатах](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#5-build-the-cross-chat-timeline) - [6. Додати перспективи облікових записів без втрати їхнього походження](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#6-add-account-perspectives-without-losing-their-origin) - [7. Скласти та перевірити передачу справи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/#7-assemble-and-verify-the-case-handoff) - [Адаптувати розслідування](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/case-board/) або у вашому реєстрі справ зафіксуйте номер справи, ідентифікатор облікового запису, робочий простір та час початку спостереження. Зберігайте відбиток ключа підпису незалежно. 2. Для створення спеціального облікового запису для збору даних відкрийте **«Джерела» → «Область спостереження**» **→ «Режим розслідування**». У налаштуваннях за замовчуванням вибрано **«Весь обліковий запис**», канали/групи/приватні чати/боти, власні дії, профілі джерел та останні 200 видимих повідомлень для щойно виявлених джерел. Перегляньте налаштування, натисніть **«Зберегти сферу**» та завершіть підтвердження сфери. Основні облікові записи використовують вибрані чати або папку; збір даних з усього облікового запису доступний для облікових записів, позначених для розслідування. 3. **Завантажте чати** та порівняйте джерела зі списком діалогів облікового запису. Перевірте виключення. **Параметри → Кількість чатів, що зчитуються зі списку облікового запису,** за замовчуванням становить 1 000 і може досягати 20 000. Джерела, що виходять за межі списку, додаються, коли вони стають активними. Запишіть те, що було фактично перелічено. 4. У **налаштуваннях запису** виберіть **«Усі видимі дії**» та збережіть налаштування моніторингу. Перевірте типи та обмеження вкладень, а також вільний простір на диску. 5. Почати спостереження. Перевірити контрольоване нове повідомлення, редагування та видалення, а потім зберегти тестові посилання та будь-які помилки. Режим «Весь обліковий запис» фіксує всю видиму для облікового запису активність у межах збережених налаштувань. Він не отримує доступ до секретних чатів і не приєднується автоматично до всіх пов’язаних груп. Він також не заповнює дані за всіма існуючими розмовами. Див. [«Обсяг збору даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/#observation-scope-chosen-chats-a-folder-or-the-whole-account)». ## 2. Скласти перелік усіх джерел та з’ясувати історичний контекст Ведіть реєстр джерел, де кожен рядок відповідає одному чату: | Галузь | Запис | | --- | --- | | Ідентичність | Робоча область, ідентифікатор облікового запису, числовий ідентифікатор чату, назва та тип | | Видимість | Членство/роль, підтверджений або непідтверджений доступ, виключення | | Запис у реальному часі | Час початку, вибрані типи подій та подальші зміни в політиці | | Історія журналу | Запит на створення/створення знімка, обмеження, час та посилання на записи | | Повна історія | Підписане ім’я файлу експорту для кожного чату, межі та завершення/невдачі | | Вкладення | Завершені записи про отримання медіафайлів, хеші, розміри та результати пропущених/невдалих операцій | | Сфера охоплення | Перебої в роботі, неповне зчитування даних, FloodWait, недоступні повідомлення та інші прогалини | Використовуйте правильний спосіб збору даних для кожного джерела: - **Функція «Завантажити повну історію** в **джерелах»** завантажує доступні минулі повідомлення з увімкнених джерел у журнал робочої області. Вона підтримує паузу/відновлення та підписаний звіт про хід роботи. Див. розділ [«Отримання історії](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/collection/#act-from-the-panel). ## 4. Пов’язування спостережень у різних чатах У розділі **«Журнал**» виберіть **«Усі джерела**» та здійсніть пошук серед записаного вмісту. Відкрийте відповідні записи та збережіть робочу область, чат, ідентифікатор повідомлення, послідовність та хеш запису. У відповідному чаті відкрийте **«Люди**»**→ «Увімкнути профілі**» та перегляньте інформацію про особу: - Імена/імена користувачів, зафіксовані протягом певного періоду, та числовий ідентифікатор Telegram. - Відповіді з посиланнями на вихідні записи. - **Також у…** інших чатах цього робочого простору, де писав користувач із цим ID. - Активність, редагування/видалення, а також згадані гаманці, телефони, імена користувачів та посилання. - Збережені метадані аватарів та подібні кешовані аватари з зазначенням їхнього окремого походження. Перед використанням похідного профілю у висновку відкрийте цитовані записи. Профілі охоплюють осіб, повідомлення яких збережено, а не всіх учасників групи. **Параметри → Кількість записів, цитованих за кожним фактом**, обмежує список посилань, а не кількість відповідних дій. Згадки та схожість аватарів є підказками; вони не підтверджують авторство чи особу. У наведеному прикладі: | Посилання | Записи | Підтверджені спостереження | | --- | --- | --- | | Один і той самий обліковий запис відправника | Група № 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/uk/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/uk/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/uk/docs/reference/collection/) · [Перевірка профілів користувачів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#people-profiles) · [Передача доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#investigation-handoff) · [Перевірка завершена](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/) --- # Telegram · Можливості та обмеження Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/ Поточна модель збору даних, робочі процеси з кількома обліковими записами, експорт даних та операційні обмеження TgWitness. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/features/#standalone-application) - [Спільні розслідування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#shared-investigations) - [Інструменти архівування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#archive-tools) - [Додаткові опції](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#optional-extras) - [Протокол та приватні джерела](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#protocol-and-private-sources) - [Кілька облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#multiple-accounts) - [Збір даних та вказівка джерел](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#capture-and-attribution) - [Пропускна здатність та обмеження Telegram](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#capacity-and-telegram-limits) - [Надійність та відновлення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#reliability-and-recovery) - [Модель доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#evidence-model) - [Експорт, розгортання та передача](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#export-deployment-and-handoff) - [Критерії стабільного випуску](https://phishdestroy.github.io/TgWitness/uk/docs/reference/features/#stable-release-criteria) ## Автономний додаток TgWitness має власну процедуру встановлення, каталог даних та цикл випуску версій. Вбудований веб-інтерфейс забезпечує налаштування та перегляд; експортовані записи можна використовувати самостійно. Користувач підключає свої акаунти, обирає джерела, доступні для кожного з них, та отримує збережений журнал спостережень. Панель відображає вміст, збережені зміни, походження спостережень та відомі прогалини. Інший слідчий може перевірити експортовані матеріали. Панель розрізняє авторизацію облікового запису, доступ до джерела, активність колектора та охоплення записів. Переглядайте ці стани разом під час оцінки інтервалу з невеликою кількістю повідомлень або проблеми з підключенням. ## Спільні розслідування Адміністратор може видавати [токени доступу](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/), обмежені робочими просторами та окремими чатами, з правами доступу для кожної дії, обмеженнями за IP-адресою, терміном дії, обмеженнями входу та контролем сеансів. Рецензент із правом лише на читання може перевіряти справу без отримання авторизації Telegram або ключа головної панелі. Доступ, обмежений чатом, залишається окремим від налаштувань на рівні облікового запису та повного експорту журналу. Автоматичний MTProxy підтримує робочі маршрути Telegram із чотирьох публічних джерел або каталогу операторів. [Режими IP](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/#ip-modes) визначають, чи у разі збою потрібно чекати на інший проксі-сервер, чи можна використовувати явно дозволений прямий маршрут. Зовнішні HTTP-запити мають окремий маршрут та перемикач для вимкнення. ## Інструменти архівування [Збір історії](https://phishdestroy.github.io/TgWitness/uk/docs/reference/history/), [пошук та аналіз архівів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/analysis/),[MCP у режимі «тільки для читання»](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/), [локальне OCR/транскрипція](https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/) та[вихідні вебхуки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/webhooks/) включені в 0.7.1. Аналітичні звіти та розпізнаний текст зберігаються окремо від зафіксованих подій. [Case Board](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/) додає пов’язані з джерелами закладки, цитати, нотатки та колекції в межах робочого простору. [Конструктор](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) [звітів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) дозволяє вибрати матеріал, розділи та один із восьми макетів для експорту у форматах HTML/PDF, що підтримуються. ## Додаткові опції Повсякденна настройка: обліковий запис → джерела → спостереження. **Додаткові функції** — це окремий розділ із ботом-свідком Telegram та попереднім переглядом знімків на GitHub. Кожна з них вказує свою доступність та вимоги перед показом налаштувань. Вибір картки відкриває інструкції; це не призводить до реєстрації чи запуску служби. Налаштування бота складається з трьох кроків: створення доступу тільки для читання, вибір налаштувань публікації та запуск на хості Witness. Параметри мережі та публікації, існуючі з’єднання та команди перевірки надаються за запитом. Завантажена конфігурація відрізняється від запущеного «witness». Перемикання додаткових опцій зберігає чернетку; зміни облікового запису та блокування очищають тимчасовий токен і форму. Вбудований посібник містить інструкції щодо запуску. [GitHub Actions](https://github.com/phishdestroy/TgWitness/blob/main/docs/SEALED-ACTIONS.md)запускає закріплений колектор із вашого форку, фіксує один чат і створює зашифрований пакет даних із інформацією про походження робочого процесу. ## Протокол та приватні джерела **MTProto — це протокол Telegram; Telethon — це бібліотека Python, яку TgWitness використовує для роботи з MTProto.** Це не альтернативні методи підключення. Функція «Збір» використовує MTProto; опціональний «свідок» публікує підписані перевірки через Bot API. Кожна робоча область має власного авторизованого клієнта та потік оновлень облікового запису. TgWitness відбирає спостереження з налаштованих джерел і надсилає окремі явні запити для таких функцій, як створення знімків історії та завантаження медіафайлів. Приватному джерелу не потрібне публічне ім’я користувача. Ідентифікаторами є тип вузла Telegram та числовий ідентифікатор; назви та імена користувачів можуть змінюватися. Доступ залежить від існуючого членства та дозволів. TgWitness не приєднується до джерел автоматично та не обходить процедуру затвердження приєднання. Хеш доступу з іншого облікового запису не є універсальним токеном доступу. Модель збору даних повинна враховувати приховану історію до приєднання, ролі учасників/адміністраторів, скасування сеансів, видалення або зміну дозволів, міграцію з групи до супергрупи, теми/форуми, пов’язані обговорення, ідентифікатори каналів та недоступні вкладення. Не кожна комбінація була перевірена в реальному часі. Видимість джерела перевіряється під час запуску колектора. Відсутність джерела у результаті обмеженого діалогу означає, що **доступ не підтверджено**, а не те, що видалення доведено. Одне недоступне джерело не заважає спостереженню за іншими доступними джерелами. Ніколи не розміщуйте посилання на запрошення або реальні сесії у публічних фіксаціях. ## Кілька облікових записів Панель підтримує будь-яку кількість **робочих просторів**, кожен із яких має: - Авторизація, зашифроване сховище та маршрут з’єднання. - Журнал на базі SQLite та ідентифікатор підпису Ed25519. - Вибрані джерела, черга медіафайлів та налаштування збору даних. - Стан спостереження, помилки, контрольні точки та експорт даних. Перемикання відображуваного робочого простору не зупиняє роботу іншого колектора. Дублювання авторизації облікового запису у різних робочих просторах не допускається. Журнал, який уже прив’язаний до одного облікового запису Telegram, не можна перепризначити іншому; дозволено повторне підключення того самого облікового запису. Це зберігає ідентичність облікового запису та відповідну область ідентифікаторів повідомлень. Додаток не встановлює фіксованої кількості робочих просторів. Кожен робочий простір виконує власні завдання колектора щодо моніторингу з’єднань, завантаження медіафайлів, повторних перевірок та прийому нових чатів у рамках спільного процесу Python та циклу подій. Пропускна здатність залежить від навантаження. Для ізоляції процесів використовуйте окремі інсталяції, порти та каталоги даних. Призначте кожному обліковому запису джерела, до яких він має доступ. Різні облікові записи можуть спостерігати за однією й тією ж групою, але їхні спостереження залишаються окремими та зберігають своє походження. Два облікові записи на одному комп’ютері, що керується оператором, не є двома незалежними свідками. **Експорт групи** об’єднує окремо підписані ZIP-архіви робочих просторів із підписаним списком файлів, що містить їхні ідентифікатори робочих просторів, хеші та відбитки ключів підпису. Кожен журнал зберігає власні межі. Створіть об’єднану хронологію для всіх робочих просторів у примітках до справи або в інструментах аналізу, зберігаючи ці посилання на джерела. ## Збір даних та вказівка джерел У розділі «Джерела» передбачені налаштування для кожного облікового запису щодо нових повідомлень, редагувань, видалень, реакцій та членства у групах. У пресетах зберігаються або всі категорії, або лише повідомлення/редагування/видалення. Ця політика застосовується до вибраних груп робочого простору, зберігається після перезапуску та підписується з зазначенням стану до та після змін. За замовчуванням зберігаються всі категорії. Вимкнення категорії не видаляє старі записи; повторне ввімкнення не відновлює пропущені події. Операційні записи, інші події групового сервісу та явні знімки історії є окремими. Зафіксовані об’єкти Telegram можуть зберігати вбудовані метадані незалежно від параметрів окремого оновлення. Наразі немає можливості заміни категорій для окремих груп. | Матеріал | Зафіксовано зараз | Межі | | --- | --- | --- | | Повідомлення | Текст, ідентифікатори учасників/повідомлень, метадані відправника, відповіді та оригінальний конверт оновлення | Збережено як спостереження, видиме для облікового запису, підписане збирачем даних | | Редагувати | Нова виявлена версія та будь-які раніше збережені версії | Зміни, внесені під час простою, можуть бути втрачені; відправник не обов’язково є редактором | | Видалення | Повідомлення та раніше збережений вміст, якщо такий є | Зазвичай не вказується, хто видалив повідомлення, або точний час дії | | Повідомлення про видалення на рівні облікового запису | Оригінальне повідомлення; вирішені записи містять збережений чат та метод кореляції | Потрібно, щоб у межах обсягу було точно одне раніше збережене співпадіння приватного чату або звичайної групи; інші ідентифікатори залишаються в категорії «`deletion.unscoped`». Ідентифікатори каналів та супергруп виключаються з цієї кореляції. | | Реакція | Надані лічильники та видимі останні ідентифікатори | Для отримання повного списку доступних реакторів потрібні окремі запити; канали можуть приховувати ідентифікаційні дані | | Членство | Сервісні повідомлення та оновлення для учасників, яким було надіслано повідомлення | Видимість залежить від ролі та типу чату; відсутність подій не свідчить про їхню відсутність | | Дії адміністратора | Відповідні надані оновлення та знімок журналу адміністратора в експортованих даних чатів каналів/супергруп | Функція експорту зчитує журнал, якщо він доступний для облікового запису адміністратора, що здійснює експорт; постійне опитування журналу адміністратора не входить до цього процесу | | Вкладення | Опис оригінальної версії, завантажені байти/SHA-256 та результати спроб | Зниклий файл може виявитися неможливим для відновлення; остання версія не замінюється | | Історія | Чіткий знімок поточних видимих повідомлень | Не відтворює всі редагування або видалений вміст | | Процес збору даних | Запуск/зупинка, сигнал активності, помилки, налаштування, область дії та підписане підтвердження виконання | Локальний інвентар; GitHub та TDX додають [незалежні перевірки середовища](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) | Інтерфейс вказує обліковий запис, наданий у вихідній події, та зберігає спостережувані імена та імена користувачів. Якщо в події не вказано її учасника, у звіті це поле залишається незаповненим. ## Ємність та обмеження Telegram Не існує універсальної кількості чатів, які можна моніторити з гарантованою якістю. Пропускна здатність залежить від пікової кількості подій за секунду, обсягу та розміру вкладень, додаткових RPC, активних облікових записів, затримки/вільного місця на диску, стану мережі, обмежень Telegram, прийнятної затримки та глибини черги. Telegram розрізняє пасивну доставку та активне коротке опитування. У документації до оновлення описано додаткові виклики `updates.getChannelDifference` для відкритих каналів/супергруп та рекомендовано не більше **десяти джерел**, **що одночасно підлягають короткому опитуванню**. Це не обмеження у десять обраних груп і не гарантія повноти. | Режим | Мета | Статус | | --- | --- | --- | | Стандартне зауваження | Запис оновлень, отриманих із вибраних джерел | Реалізовано | | Пріоритетні перевірки | Джерела, позначені зірочкою, використовують власний настроюваний інтервал і мають пріоритет у кожному обмеженому циклі повторної перевірки | Реалізовано за допомогою запитів щодо історії та повідомлень | Зірочка пріоритету керує цими повторними перевірками. Додаткове коротке опитування `updates.getChannelDifference` не виводиться як окремий режим користувача. Довільне високочастотне опитування, ігнорування FloodWait або припущення про лінійну пропускну здатність додаткових облікових записів не є обґрунтованою моделлю визначення розміру. За замовчуванням обмеження становлять перші 1 000 діалогів у списку, до 500 повідомлень на знімок історії, 1–2 000 МіБ на зібраний файл за типом та 4 ГіБ нестисненого підписаного вмісту ZIP; кожне значення змінюється для кожного робочого простору в розділі **«Параметри**». Експорт не має фіксованого обмеження кількості подій. За замовчуванням резервний режим браузера обмежений 128 Мб; для CLI-інтерфейсу потокової передачі встановлюється обмеження на передачу, яке за замовчуванням становить 5 Гб. ## Надійність та відновлення Реалізовані функції включають: транзакції SQLite WAL/синхронні; атомарні записи повідомлень та мультимедійних завдань; постійні завдання та затримки повторних спроб; дескриптори оригінальної версії; обмежені повторні спроби; збереження медіа-задачі FloodWait; завантаження медіа поза межами мережевого очікування текстової події; експорт зі стабільним префіксом під час продовження подальшого запису; атомарні налаштування та записи аудиту; збереження робочої авторизації після невдалого входу для заміни; ізоляцію пошкодженого додаткового робочого простору; явні спроби повторного підключення; чітке повідомлення про втрату авторизації; та виявлення змін за реальним часом за допомогою монотонного годинника. Параметри pts/qts/seq облікових записів та каналів зберігаються та відновлюються після перезапуску, а відстежувані чати періодично перевіряються повторно; див. [формат доказів](https://phishdestroy.github.io/TgWitness/uk/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. У режимі «Докази» також надсилаються хеші контрольних точок до налаштованих служб часових міток. Зберігайте та перевіряйте відповідь уповноваженого органу для встановлення незалежної часової прив’язки. Див. [TIMESTAMP.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/timestamp/). Зберігайте контрольні точки окремо, контролюйте доступ до ключів підпису, ведіть облік передачі даних та перевіряйте експортовані дані за допомогою надійного програмного забезпечення. У розділі [«Обсяг](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) [перевірки»](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/connection/) та [OPERATIONS.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/operations/). ## Критерії стабільного випуску До випуску стабільної версії слід зазначити: 1. Реальні приватні групи, супергрупи, форуми та канали з ролями учасників/адміністраторів та прихованою/видимою історією, включаючи дані про вхід/двофакторну автентифікацію, скасування доступу та втрату доступу. 2. Контрольовані редагування, видалення, реакції, членство та медіа-матеріали у порівнянні з відомими діями. 3. Збої процесів/хостингу, несправності диска/переповнення диска, посилання на файли, термін дії яких закінчився, FloodWait, втрата мережевого з’єднання, пошкоджені файли та відкат бази даних. 4. Тривале використання декількох облікових записів із контрольованими затримками, чергами, пам’яттю та дисковим простором, включаючи як «тихі», так і «гучні» джерела разом. 5. Перерва між переходом у наступний стан MTProto та прийняттям запису до журналу. 6. Чиста інсталяція на передбаченій матриці ОС/контейнерів та перевірене відновлення резервної копії. 7. Незалежний огляд питань безпеки, підписів та тверджень щодо авторства/доказів. Доступ до панелі з обмеженим колом користувачів описано в розділі [«Доступ та дозволи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/)». Версія 0.6 підтримує обмежений TData для одного облікового запису та імпорт файлів облікових записів, описані в [файлі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) [ACCOUNTS.md](https://phishdestroy.github.io/TgWitness/uk/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 · Довідка щодо Case Board Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/ Закладки, точні виділення, фрагменти дій, обговорення, обмежений доступ та історія підписаних анотацій, що використовуються Case Board. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/investigation/) ![Розслідування](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) Case Board надає слідчій групі спільний робочий огляд збережених матеріалів. Додавайте спостереження до закладок, виділяйте конкретні фрагменти, зберігайте послідовність дій та обговорюйте їх із колегами. Картки зберігають посилання на джерела та підписану історію редагувань. Коментарі команди залишаються в робочому просторі, де їх можна легко відрізнити від оригінальних спостережень у Telegram. [Модель доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) · [Доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/) · [Звіти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) ![Синтетичний канал розслідування](https://phishdestroy.github.io/TgWitness/assets/case-board.png) **На цій сторінці** - [Робота з випадком](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/#work-with-a-case) - [Дозволи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/#permissions) - [Збережені контракти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/#stored-contracts) - [API та експортні дані](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/#api-and-exports) - [Експлуатаційні обмеження](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-board/#operating-limits) ## Робота зі справою Відкрийте **«Розслідування» → «Case Board»** у стандартному або експертному режимі. Мова відповідає панелі. Використовуйте **кнопку** **«Додати до дошки»** поруч із записом у журналі або збереженим повідомленням у чаті, або виділіть його та натисніть **клавішу** **B**. Закладка додається до «Вхідних» одним клацанням. Редагуйте її назву, мітки та примітку або перемістіть її до колекції. Змінена картка доповнюється підписаною версією; її видалення зберігає історію. Для першого випадку виберіть колекцію та додайте записи, які дають відповідь на одне питання. Використовуйте коментарі для перевірки інтерпретації, а потім — **функцію «Презентація»**, щоб переглянути картки та контекст джерел. Окремо вибирайте матеріали для «Case Board» у [«Report Studio»](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) під час підготовки кінцевого результату. Збереження фрагмента не призводить до автоматичного налаштування фільтрів даних звіту. Виділіть текст у збереженому повідомленні чату, щоб відкрити меню **«Виділити → дошка**». Виберіть колір і додайте примітку. Сервер перевіряє точну цитату та збережену версію, включаючи емодзі, текст у напрямку справа наліво (RTL) та знаки об’єднання. Інтерфейс не відображає виділений фрагмент у маскованому або перетвореному тексті. Натисніть Shift і клацніть на двох записах в одному чаті, щоб вибрати **«Виділити проміжок між ними**», скористайтеся **функцією** **«Виділити за часом**» або збережіть поточні фільтри журналу за чатом, періодом та типом події. Збережений проміжок має власний авторитетний предикат: його відкриття в «Журналі» також застосовує фільтри за кількома чатами, обмеженнями кількості повідомлень та учасниками . **Функція «Показати записи, додані після створення закладки»** виділяє пізніші доповнення. Зміна фільтрів у Journal призводить до виходу зі зрізу. У розділі «Люди» **функція** **«Розділити дії цієї особи»** використовує записаний ідентифікатор учасника; вона не припускає, що автор повідомлення редагував, видалив або відреагував на повідомлення. У діалоговому вікні «Слайс» перед створенням відображається попередній перегляд кількості записів. Термін «`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 та `Array.from(text)` у JavaScript реалізують таке саме індексування. Поєднання знаків та емодзі ZWJ може займати кілька кодових точок. `range.version` — це хеш цільової події, а не поточна версія повідомлення чи зміщення сутності UTF-16 у Telegram. Пізніші редагування ніколи не переміщують виділення автоматично. ### Розділ «Ідентифікація та час» `query` приймає рівно один `chat_id` або непорожні `chat_ids`, опціональні діапазони `from`/`to`, діапазони ідентифікаторів повідомлень (лише один чат), `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}` повертає картку, попередній перегляд джерела, ланцюжок повідомлень, історію статусів та пов’язані картки. Підмаршрут participants повертає відповідні варіанти згадок. `POST /api/board/{bookmark|highlight|slice|collection|comment|status|move|remove}` додає запис. `POST /api/board/slice-preview` обчислює запит. Записи фрагментів розбиваються на сторінки за допомогою `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` та звіт містять той самий мінімізований матеріал. Кількість фрагментів описує лише розкриті записи, при цьому оригінальні деталі про учасників знімків/запитів не розкриваються. Імена у вільному тексті, невідомі мінімізатору, як і у звичайних передачах, все ще потребують перевірки. Цей похідний файл не претендує на збереження оригінальних підписів анотацій після редагування. ## Обмеження щодо використання Параметри включають м’які обмеження у 10 000 карток та 50 000 коментарів, сторінку фрагмента, що містить до 5 000 записів, та контроль попереднього перегляду медіафайлів. М’які обмеження видають попередження, не видаляючи історію. Сторінки стрічки містять не більше 200 карток. Розмір автономних уривків у форматі JSON обмежено 64 МіБ; для більших обсягів матеріалів звузьте запит або скористайтеся підписаним ZIP-файлом. Автономний верифікатор обмежує відтворення анотацій до 256 МіБ. Case Board не підтримує та не реалізує зовнішні сповіщення про коментарі. Автоматизоване приймання функції використовує вигадані дані та імітований канал передачі Telegram для перевірки зберігання, доступу, візуалізації та експорту. Див. [розділ «Обсяг перевірки»](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) для ознайомлення з обсягом перевірки доказів. --- # Telegram · Аналіз архіву Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/analysis/ Здійснюйте пошук серед збережених повідомлень, переглядайте результати роботи штучного інтелекту та зберігайте аналітичні звіти з посиланнями на джерела. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/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/uk/docs/reference/search/#ask-the-archive-and-mcp), коли той готовий: найкращі збіги у вибраних чатах, з урахуванням словоформ. Запити щодо останніх змін або версій одного повідомлення, а також пошук під час створення індексу, використовують обмежений лексичний пошук серед найновіших записів. У попередньому перегляді вказано метод. Пошук повертає до 24 джерел; довгі тексти обрізаються навколо збігу. Усі урізані уривки та неповні набори результатів позначаються. Цей період стосується **часу спостереження**, а не твердження про те, що історія Telegram є повною. Події, що охоплюють весь робочий простір, не доступні в межах чату. Відсутні дані описуються як такі, що не знайдені в доступному архіві. Модель не отримує жодних інструментів. Її ідентифікатори джерел звіряються з обраними записами, хеші перевіряються повторно, а цитовані рядки повинні зустрічатися в цих записах. Невідомі ідентифікатори, змінені цитати та непідтверджені твердження призводять до відхилення відповіді. Додаток створює посилання; URL-адреси, згенеровані моделлю, не використовуються як джерела. Ці перевірки підтверджують наявність джерела та точність цитати, а не правдивість висновку. Перевіряйте висновки на відповідність записам, перш ніж покладатися на них. ## Звіти Збережіть перевірену відповідь як окремий аналітичний звіт. Він містить резюме моделі, хронологію подій, витягнуті посилання та ідентифікатори, записи про редагування/видалення, обмеження охоплення та хеші вихідних подій. До нього додаються дані про постачальника, модель, кінцеву точку, час та версію шаблону запиту. Ідентифікаційні дані автоматично не об’єднуються. Зміни та примітки аналітиків зберігаються окремо від зведеного звіту моделі. Звіти зберігаються у зашифрованих похідних файлах, а їхній індекс знаходиться поза підписаним потоком подій; оригінальні події та мультимедійні дані не змінюються. Лише власник або адміністратор може відкрити звіт, при цьому доступ до джерела перевіряється ще раз. Для завантаження також потрібен дозвіл на експорт. Версія 1 не підписує звіти та не передбачає, що висновки моделі є перевіреними доказами. Обмеження: 100 звітів на робочу область та 100 редагувань аналітика на звіт. Щодо ручного розпізнавання тексту (OCR) та транскриптів див. розділ [«Обробка медіафайлів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/)». Щодо доступу клієнтів див. розділ [«MCP](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/)». --- # Telegram · Повнотекстовий пошук Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/ Знайдіть збережені повідомлення за формами слів, точними фразами, доменами та @іменами користувачів, з найкращими збігами на початку, з індексом, прив’язаним до підписаного журналу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/investigation/) ![Розслідування](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg) [Аналіз архіву](https://phishdestroy.github.io/TgWitness/uk/docs/reference/analysis/) · [Локальне розпізнавання тексту та транскрипція](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/search/#search-syntax) - [Мови](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#languages) - [Де знаходиться індекс](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#where-the-index-lives) - [Результати та підписаний журнал](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#results-and-the-signed-journal) - [Розпізнаний текст](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#recognized-text) - [Доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#access) - [Запитайте в архіві та MCP](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#ask-the-archive-and-mcp) - [Залежності](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#dependencies) - [Бенчмарк](https://phishdestroy.github.io/TgWitness/uk/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` | Розпізнаний текст замість повідомлень або разом із ними | Прийменники та інші службові слова ігноруються, якщо поруч є інші слова. Схожі літери, що потрапили в слово (наприклад, латинська *«а»* у слові кирилицею), літери 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 мс | Точна фраза перевіряється буквально серед варіантів у порядку рейтингу, доки сторінка не заповниться, тому її загальна кількість не враховується. Час виконання зростає із кількістю записів, що відповідають запиту; звуження чату або періоду прискорює широкий пошук. У синтетичному корпусі повторюється невеликий словниковий запас, тому загальні слова відповідають набагато більшій кількості записів, ніж у реальних чатах. --- # Telegram · MCP тільки для читання Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/ Підключіть клієнт MCP до вибраних робочих просторів та чатів із тимчасовим, відкличним доступом. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/cli/) ![Інтеграції з архівами](https://phishdestroy.github.io/TgWitness/assets/chapter-integrations.svg) Підключіть клієнт-аналітик до вибраних робочих просторів та чатів. TgWitness надає доступ до **Streamable HTTP за адресою `/mcp` у процесі панелі**. Кожне з’єднання має власний токен, термін дії та дозволені інструменти. MCP не може надсилати повідомлення Telegram, змінювати налаштування або модифікувати підписаний журнал. Ці ж з’єднання працюють із [командним рядком](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/mcp/#install-and-check) - [Встановити з’єднання](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/#issue-a-connection) - [Підключіть свій клієнт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/#connect-your-client) - [Тунель Cloudflare](https://phishdestroy.github.io/TgWitness/uk/docs/reference/mcp/#cloudflare-tunnel) - [Інструменти та обмеження](https://phishdestroy.github.io/TgWitness/uk/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`. Розділ **Integrations → MCP** показує стан середовища виконання та команду встановлення з використанням фактичного виконуваного файлу Python цього сервера. Кнопка **Re-check** оновлює цей статус без перезавантаження сторінки; вона не встановлює пакунки та не перезапускає сервер. Додаток MCP використовує офіційний [SDK MCP для Python](https://github.com/modelcontextprotocol/python-sdk). Файл`deploy/constraints-mcp.txt` фіксує версію тестованого SDK та його залежностей. ## Створення підключення 1. Введіть мітку та виберіть робочі простори й чати, які клієнт може читати. 2. Виберіть інструменти окремо або скористайтеся шаблоном. Пропонуються лише реалізовані інструменти. 3. Виберіть термін дії 1, 7, 30 або 90 днів чи вкажіть власний термін від однієї хвилини до 90 днів. 4. Натисніть **Create connection**. Токен з’явиться один раз поруч із конфігурацією клієнта. 5. Скопіюйте токен і конфігурацію, а потім натисніть **Check connection**. Це ініціалізує MCP і виведе список дозволених інструментів; **жодні повідомлення не читаються**. Результат показує версію протоколу, назви інструментів, їхню кількість і витрачений час. 6. Натисніть **Done**, коли облікові дані буде збережено. Фонове опитування зберігає форму та картку одноразового показу. Блокування панелі очищає відображені секретні дані. У списку відображаються нещодавнє використання, останній інструмент, адреса та запити за останню хвилину. **Revoke** припиняє доступ. **Rotate token** відкликає старі облікові дані та видає заміну з тією самою областю дії, інструментами та терміном дії; скопіюйте новий токен (він показується один раз). Токени входу в панель та облікові дані 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) панелі для цього запуску. Щоб стабільна адреса була доступна одразу після перезапуску, налаштуйте `TGWITNESS_PUBLIC_URL` із HTTPS-джерелом панелі перед її запуском. Довільні заголовки 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/uk/docs/reference/search/) (форми слів, найкращі збіги першими, `next_offset` пагінація) | | `get_message_versions` | Зафіксовані версії та спостереження щодо видалення | | `get_message_context` | Сусідні ідентифікатори зафіксованих повідомлень | | `get_journal_event` | Один очищений запис із посиланням на його джерело | | `get_capture_status` | Стан збору даних, дозволені записи охоплення та `gap_summary`: номери повідомлень, які ніколи не спостерігалися, за кожним каналом або супергрупою, а також для послідовності в межах усього облікового запису ([деталі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#missing-message-numbers-gap_summary)); виберіть чат, щоб переглянути перелік пропусків у ньому | | `get_activity_stats` | Повідомлення за годинами за UTC та днями тижня, дні пікового навантаження, частка редагувань та видалень, відправники, домени та `@handles`, із охопленням ([деталі](https://phishdestroy.github.io/TgWitness/uk/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` | Тільки командний рядок, не вибрано за замовчуванням: потоки зберігають спостереження у форматі JSON Lines ([деталі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/cli/#export)); не доступно через MCP | Кожен інструмент працює лише в режимі читання (`readOnlyHint`) і оголошує схему виводу; поля, що виходять за межі оголошених, повертаються без змін. `tools/list` Повертає лише ті інструменти, доступ до яких надано для цього з’єднання. Виклики інших інструментів відхиляються. Інструменти групового контексту, епізоду, термінології та ланцюга відповідей у цій збірці не доступні; їхній окремий бекенд context-pack не включено. Кожне читання перевіряє токен, інструмент та область дії робочого простору/чату, зокрема після завершення роботи з базою даних. Обмеження становлять 60 запитів на хвилину, 50 записів на сторінку, 64 КіБ на результат і восьмисекундний граничний час очікування архіву. Виклик MCP, час очікування якого минув, повертає помилку інструмента з проханням звузити період або зменшити ліміт. Результати повідомлень містять `untrusted_content: true`, ідентифікатори робочого простору/чату/повідомлення, послідовність подій, збережений хеш і посилання на панель. Необроблені об’єкти Telegram, хеші доступу, сеанси та ключі опускаються. Обрізання тексту позначається. Редагування, сповіщення про видалення та `missing_on_recheck` є окремими спостереженнями. Відсутність записів не доводить, що подія ніколи не відбувалася. Сприймайте інструкції всередині зафіксованих повідомлень як докази, а не як інструкції для клієнта. Доступ лише для читання унеможливлює зміни в архіві; проте клієнт все одно може зберігати вміст, який йому дозволено читати. Хеші ідентифікують збережені записи та підтримують перевірку цілісності; вони не доводять авторство в Telegram чи повноту захоплення. --- # Telegram · Командний рядок Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/cli/ Здійснюйте пошук, читайте контекст, підраховуйте активність та експортуйте збережені повідомлення зі скриптів та агентів із виведенням у форматі --json, стабільними кодами завершення та токенами з обмеженим доступом, призначеними лише для читання. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/mcp/) · [Повнотекстовий пошук](https://phishdestroy.github.io/TgWitness/uk/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/uk/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` доступна для обох. --- # Telegram · Локальне розпізнавання тексту (OCR) та транскрипція Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/media-analysis/ Розпізнавайте захоплені зображення та аудіо за допомогою локального робочого процесу; зберігайте отриманий текст із посиланням на вихідний файл. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/docs/reference/search/#recognized-text) [в](https://phishdestroy.github.io/TgWitness/uk/docs/reference/search/#recognized-text) [оперативній пам’яті](https://phishdestroy.github.io/TgWitness/uk/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 ГіБ пам’яті, обмеженням PID та обмеженою тимчасовою файловою системою. Монтуються лише перевірена копія вибраного файлу та опціональний каталог моделі. База даних, сховище та сесія колектора не монтуються. Ці обмеження забезпечуються [прапорами середовища виконання Docker](https://docs.docker.com/reference/cli/docker/container/run/) ; це залишається межею контейнера, а не апаратним анклавом. Розмір файлів обмежено до 50 МіБ, зображень — до 20 мільйонів пікселів, аудіозаписів — до 30 хвилин із відомою тривалістю, а час обробки — до п’яти хвилин. Одночасно працює лише один робочий процес, з максимум 20 завданнями в черзі/у виконанні та 100 збереженими завданнями на робочу область. Команда «Cancel» зупиняє контейнер; «Retry» створює нове завдання, пов’язане з попередньою спробою. Перервані завдання позначаються після перезапуску. Обробка може завершитися невдачею, якщо модель не відповідає налаштованим обмеженням; без ізоляції вона не працює в тихому режимі. --- # Telegram · Вихідні веб-хуки Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/webhooks/ Надсилайте визначені події на HTTPS-приймачі з HMAC-підписами, повторними спробами та статусом доставки. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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-запитами. Використовується семантика «принаймні один раз» : втрачене підтвердження або перезапуск можуть призвести до повторної доставки події з тим самим ідентифікатором. Передбачено вісім спроб з експоненційним відстроченням, починаючи з 15 секунд і закінчуючи однією годиною. Для успіху необхідна відповідь 2xx. Вичерпані завдання залишають видиму помилку; доставка не гарантується після закінчення повторних спроб. Черга вміщує 1 000 відправлень. Коли вона заповнена, сканування подій журналу призупиняється і відновлюється після звільнення місця. Завершення повного експорту, яке не можна поставити в чергу, спричиняє появу видимої помилки черги. За один прохід обробки повідомлень здійснюється до п’яти спроб доставки, а останні 100 записів про спроби зберігаються. Видалення адресата також призводить до видалення його очікуючих на доставку повідомлень. ## Приклад n8n Імпортуйте [приклад робочого процесу](https://github.com/phishdestroy/TgWitness/blob/main/integrations/n8n-tgwitness.json). Він неактивний і не містить жодних секретних даних чи подальших дій. Встановіть `TGWITNESS_WEBHOOK_SECRET` у середовищі n8n worker, надайте цьому середовищу доступ та дозвольте використання вбудованої функції `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/uk/docs/reference/showcase/ Публікуйте збережені повідомлення з обраних публічних каналів та підписані знімки за допомогою посилань з обмеженим терміном дії, які можна скасувати. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/docs/reference/witness/) та [перевірений запис у масштабі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/). Синтетичні інсталяції помітно позначені як синтетичні. ## Скасувати або розмістити сторінку Скористайтеся **функцією «Скасувати»** у менеджері вітрин або в існуючому розділі **«Доступ»**, щоб закрити посилання та завершити всі сесії за ним. Відвідувач очищає відображені записи, коли запит виявляє, що доступ завершився. Термін дії та дозволи перевіряються під час кожного запиту. Дозволи на вітрини не можна перетворити на звичайний доступ до панелі на місці; створіть новий дозвіл, щоб змінити режим. Сторінка надається через існуючу HTTPS-адресу інсталяції. Публікація посилання не відкриває новий порт, не створює тунель і не змінює DNS. HTML та API залишаються на інсталяції користувача. Відвідувач демонстраційної версії не може використовувати звичайні API для повідомлень, профілів, медіа, експорту чи управління з таким доступом. --- # Telegram · Як працює система збереження доказів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/ Пояснення щодо хеш-ланцюга, підписів, контрольних точок та свідків із зазначенням точних формул, які використовує верифікатор. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/docs/reference/case-board/), [оформлення звітів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) та [витягів із передачі матеріалів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#handover-extract). Усі приклади повідомлень, кількість та затримки є вигаданими. Хеші в пісочниці ланцюга обчислюються за допомогою алгоритму SHA-256 у браузері. Ніщо не надсилається до Telegram. **На цій сторінці** - [Зміни в повідомленні; накопичення спостережень](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#a-message-changes-observations-accumulate) - [Що охоплює хеш](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#what-a-hash-covers) - [Що додає попередній контрольний пункт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#what-an-earlier-checkpoint-adds) - [До чого належить свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#where-a-witness-belongs) - [Перевірка доставки щодо відомих дій](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#test-delivery-against-known-actions) - [Оберіть робочий процес](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/#pick-a-workflow) ## Повідомлення змінюється; спостереження накопичуються Діаграма послідовності · Telegram → Колектор: Нове повідомлення: Зустріч о 10:00; Колектор → Підписаний журнал: Додати повідомлення.new; Telegram → Колектор: Редагування: Зустріч о 11:00; Колектор → Підписаний журнал: Додати повідомлення.edited; Telegram → Колектор: Повідомлення про видалення; Колектор → Підписаний журнал: Додати повідомлення.deleted; Примітка щодо Підписаний журнал: Зберігаються спостереження за оригінальними повідомленнями, редагуваннями та видаленнями · Telegram · Колектор · Підписаний журнал · Нове повідомлення: Зустріч о 10:00 · Додати повідомлення.new · Редагування: Зустріч о 11:00 · Додати повідомлення.edited · Повідомлення про видалення · Додати повідомлення.deleted · Зберігаються спостереження за оригінальнимиповідомленнями, редагуваннями та видаленнями **Діаграма у вигляді тексту** 1. Telegram → Колектор: Нове повідомлення: Зустріч о 10:00 2. Колектор → Підписаний журнал: Додати повідомлення.new 3. Telegram → Колектор: Редагування: Зустріч о 11:00 4. Колектор → Підписаний журнал: Додати повідомлення.edited 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/uk/docs/reference/evidence/#event-canonicalization). Блок-схема · 64 нульових символів → Запис 1 / хеш h1; Запис 1 / хеш h1 → Запис 2 містить h1 / хеш h2; Запис 2 містить h1 / хеш h2 → Запис 3 містить h2 / хеш h3; Запис 3 містить h2 / хеш h3 → Підписаний контрольний пункт: count 3, head h3 (зберігати в іншому місці) · 64 нульових символів · Запис 1 / хеш h1 · Запис 2 містить h1 /хеш h2 · Запис 3 містить h2 /хеш h3 · Підписаний контрольнийпункт: count 3, headh3 · зберігати в іншому місці **Діаграма у вигляді тексту** 1. 64 нульових символів → Запис 1 / хеш h1 2. Запис 1 / хеш h1 → Запис 2 містить h1 / хеш h2 3. Запис 2 містить h1 / хеш h2 → Запис 3 містить h2 / хеш h3 4. Запис 3 містить h2 / хеш h3 → Підписаний контрольний пункт: count 3, head 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 збігається на позиції 3. Його найновіший заголовок — h4, який, як очікується, має відрізнятися. Експорт із лише двома записами не пройде. [Схема статичних контрольних точок](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-checkpoint-static.svg) Після перевірки підпису контрольної точки необхідно: Nexport ≥ Ncheckpoint and hexport[Ncheckpoint] = Hcheckpoint Експорт може виходити за межі контрольної точки. Він повинен збігатися на збереженій межі. Реальний верифікатор також перевіряє послідовність кожної події, попереднє посилання, хеш та підпис. Порівнюючи лише кінцевий збережений заголовок, можна пропустити змінений внутрішній запис, хеш якого не було оновлено. ## Де знаходиться свідок Блок-схема · Колектор / сесія облікового запису / ключ 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/uk/docs/reference/witness/). ## Перевірка доставки на основі відомих дій Використовуйте контрольну групу, окремі облікові записи для збору даних та новий маркер. Надсилайте, редагуйте та видаляйте повідомлення навмисно, перевіряючи збереження даних між етапами. Визначте очікувані дії та межу, перш ніж перевіряти результати. R = |observed∩expected| / |expected| Δ t = treceipt - taction Враховуються лише очікувані дії; дублікати квитанцій не збільшують чисельник. Знаменник повинен бути відмінним від нуля. Відсутня квитанція не має виміряної затримки. Вкажіть похибку часу; використовуйте власний контрольований час дії видалення, оскільки Telegram не надає точного часу видалення. Результат, наприклад, 5/6 (83,3 %), описує тестові дії, а не повноту всього трафіку Telegram. ## Оберіть робочий процес [Повний покроковий опис розслідування,](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/) що відбувається після інциденту у каналі, групі, боті та приватному чаті: 1. На спеціальному обліковому записі для збору даних увімкніть режим розслідування для всього облікового запису та складіть перелік доступних чатів. Для основного облікового запису використовуйте вибрані чати або папку. 2. Отримуйте знімки журналу, повну історію кожного чату та збережені вкладення. 3. Зберігайте зміни в режимі реального часу та будь-які навмисні взаємодії з панелями разом із відповідними підтвердженнями. 4. Відстежуйте числові ідентифікатори відправників, зв’язки у відповідях, повторювані адресати та хеш-коди файлів через цитовані записи та профілі користувачів. 5. Додавайте примітки та колекції з посиланнями на джерела в Case Board. Відтворіть хронологію переписки між чатами з позначенням часу та явними пропусками. 6. Порівнюйте робочі простори інших облікових записів, зберігаючи їхнє походження та ключі окремо. 7. Збирайте та перевіряйте підписані журнали, профілі та експортовані дані історії разом із примітками до справ. Посібник на веб-сайті `/docs/cases/` містить інтерактивну карту справи та варіанти розв’язання суперечок щодо ботів, видалених повідомлень та учасників, які змінюють імена. Case Board зберігає нотатки та колекції в межах робочого простору. Груповий експорт збирає окремі пакети робочих просторів; кореляція між робочими просторами та об’єднана часова шкала залишаються завданням аналітиків. [Завершена валідація та робота, що залишилася](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/) · [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#investigation-handoff) · [Почніть з одного облікового запису](https://phishdestroy.github.io/TgWitness/uk/docs/reference/quickstart/) --- # Telegram · Налаштування та перевірка звітів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/ Фільтри звітів, вісім макетів, пресети змісту, збережені історії змін та оцінка, що містяться у підписаних експортованих файлах. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/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 Мбайт; у звіті вказано цей ліміт та наведено посилання на повний переглядач і вихідні записи. Каталог облікових записів та індекс взаємозв’язків описують саме цей зразок для читання, а не всіх учасників. Діаграми повного журналу зберігають свій окремо зазначений обсяг. ### Виберіть вміст | Зміст (заздалегідь визначений) | Включено за замовчуванням | | --- | --- | | Досьє справи | Активність, час спостереження, учасники, чати та стенограма запису. | | Інструктаж | Огляд активності без рейтингу учасників та стенограми. | | Огляд діяльності | Активність, час спостереження, учасники, чати та їхній склад із посиланнями на джерела та точними цифрами. | | Індивідуальний звіт | Ваша власна комбінація діаграм, стенограм та попередніх переглядів. | Зміна попереднього налаштування зберігає ваш макет, деталі справи та письмовий аналіз. Перевірки цілісності, покриття, обмеження та інструкції з верифікації залишаються в кожному макеті. Вихідні записи у файлі 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-файл має спеціальну обкладинку формату А4, посилання на звіт та 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/uk/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/uk/docs/reference/account-export/ Експортуйте те, що обліковий запис може переглянути зараз: обсяг даних, завдання, які можна відновити, підписаний архів та мінімізовані копії для спільного доступу. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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. Панель відображає цей час очікування; вона не перемикає транспортний протокол без попередження. Опція явного використання стандартного 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 не оновлюються для обходу обмеження частоти запитів. Придбання преміум-доступу не здійснюється. ## Виберіть, що збирати | Налаштування | Значення | | --- | --- | | Мета | Зафіксуйте, чому це придбання є необхідним. Не вказуйте тут зайвих імен або конфіденційних деталей справи. | | Мова звіту | Оберіть мову міток у звіті для читання. Текст оригінального повідомлення залишається незмінним; неперекладені мітки шаблону використовують англійську мову. Мова фіксується за допомогою параметрів підписаного завдання. | | Типи чатів / ідентифікатори чатів | Усі вибрані типи або лише перелічені чати; «Збережені повідомлення» належать до приватних чатів. Архівні чати можна вибирати окремо. | | Дати | UTC. У календарі панелі вказано як дату початку, так і дату закінчення. API використовує дати з включенням `from_utc` та виключні `to_utc`; панель надсилає початок дня, що настає після дати «До». Порожня межа залишає цю сторону необмеженою. | | Ідентифікатори відправників | Тільки повідомлення від зазначених відправників; порожній список включає всіх відправників. | | Текст містить | Літеральні фрази, що не враховують регістр, поєднуються за допомогою оператора «АБО». Умови «відправник», «дата» та «власне повідомлення» поєднуються за допомогою оператора «І». | | Власні повідомлення | Зберігайте лише вихідні повідомлення. | | Типи медіа | Виберіть категорії вкладень або очистіть усі, щоб уникнути завантаження файлів повідомлень. | | Обмеження на файли / загальний обсяг медіафайлів | Обсяг завантажених медіафайлів у GiB та обсяг кожного файлу в MiB. Текст, квитанції, звіти для читання та накладні витрати ZIP вимагають додаткового дискового простору. | | Категорії облікових записів | Профіль, контакти, фото профілю, історії, метадані сеансів та інші дані Takeout мають окремі елементи керування. | Пресет **колекції «Minimize»** вимикає файли та метадані облікових записів. Фільтри відправників та вмісту застосовуються до збережених сторінок повідомлень та завантажених медіафайлів. Telegram все ще передає сторінки історії API, що містять повідомлення, необхідні для оцінки цих фільтрів: фільтрування не гарантує, що відфільтровані повідомлення ніколи не потраплять до оперативної пам’яті. Інші поточні спостереження у робочому просторі мають власні параметри обсягу та зберігання. Історія фотографій профілю та історії за замовчуванням не відбираються. Якщо для справи потрібні лише повідомлення, також вимкніть профіль та контакти. Якщо вкладення чи метадані не потрібні, їх виключення під час збору даних дозволить уникнути збереження ще однієї приватної копії в цьому експорті. Корисні дані фотографій використовують варіант нерухомого зображення, визначений у їхніх метаданих та хеш-маніфестах, включаючи фотографії з анімованим варіантом аватара. Ця анімація не замінює вибране нерухоме зображення. Дані, розмір яких менший або більший за спостережуваний, реєструються як невдале вкладення, а змінене представлення під час оновлення посилання на файл відхиляється. Ці помилки залишають архів неповним, зберігаючи при цьому записи повідомлень. Незалежна верифікація також відхиляє збережені вкладення, довжина яких із підписом суперечить їхньому спостережуваному розміру або представленню, у тому числі в старих архівах. ## Підсумок, охоплення та перевірка Кожне завдання фіксує свої параметри та ідентифікацію облікового запису. Інвентар та збережені сторінки підписуються; у квитанціях сторінок фіксуються хеші, курсори, час, результати обробки вкладень та попередні квитанції. Лише зафіксовані сторінки враховуються у прогресі. При перезапуску/відновленні ці записи перевіряються перед продовженням роботи. Змінений обліковий запис, змінена підписана сторінка або невідповідний ланцюжок квитанцій відхиляються. Параметри не можна редагувати в процесі збору даних: для іншого обсягу даних слід запустити нове завдання. Функція «Pause» призупиняє поточну операцію з обліковим записом. Перезапуск програми залишає незавершену роботу доступною для явного відновлення. Сесія Takeout, термін дії якої закінчився, вимагає явного відновлення; зміна діапазонів фрагментів Telegram може вимагати нового збору даних. Функція «Resume» зберігає попередні спостереження, тому тривалий експорт не є одним атомарним знімком. Інші операції зі зміною облікових записів та конфліктуючі експорти блокуються під час збору даних. Перед видаленням робочого простору дочекайтеся завершення пакування. Функція «Resume» перевіряє вже збережений вміст перед продовженням роботи. Великі архіви на повільних носіях можуть перевищувати налаштований **у меню «Параметри» → «Тайм-аут дії панелі»** час очікування (за замовчуванням — 120 секунд). Збільште це значення перед повторною спробою; скасування або переривання збереження призводить до призупинення завдання, а невдалі перевірки цілісності — до збою завдання з поясненням причини. Перевірка має завершитися або безпечно зупинитися, перш ніж файли можна буде закрити. Жодні заяви щодо пропускної здатності великих облікових записів не були підтверджені синтетичними перевірками. Панель розрізняє завершену вибрану область від часткового архіву та фіксує пропуски й невдалі спроби зчитування. Навмисно виключені файли відрізняються від файлів, зчитування яких не вдалося або які недоступні. Перевіряйте охоплення навіть у разі успішної перевірки цілісності. Жоден локальний зчитувач не може довести, що Telegram повернув усі повідомлення, які коли-небудь існували. Готові ZIP залишаються доступними для повторного завантаження та завантаження за допомогою HTTP-range. Архів облікового запису містить `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/uk/docs/reference/evidence/#verification-scope). [Формат доказів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) · [Звіти про справи](https://phishdestroy.github.io/TgWitness/uk/docs/reference/case-reports/) --- # Telegram · Формат доказів Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/ Вміст підписаного ZIP-архіву, типи записів, підтвердження обробки, профілі користувачів, зовнішні копії та офлайн-перевірка. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/#what-is-signed) - [Порівняння експортованих даних чатів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#comparing-chat-exports) - [Передача розслідування](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#investigation-handoff) - [Витяг із передачі](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#handover-extract) - [Зрозумілі звіти](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#readable-reports) - [Канонізація подій](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#event-canonicalization) - [Семантика актора](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#actor-semantics) - [Покриття: безперервність, прогалини та неспостережувані ідентифікатори](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#coverage-continuity-gaps-and-unobserved-ids) - [Виробник](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#producer) - [Профілі користувачів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#people-profiles) - [Незалежний свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#independent-witness) - [Маніфест та контрольні точки](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#manifest-and-checkpoints) - [Обсяг верифікації](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#verification-scope) - [Вкладення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#attachments) - [Надійне збирання та обробка квитанцій (0.2)](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#durable-collection-and-process-receipts-02) - [Підготовка RFC 3161 та перевірка відповідей (0.2)](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#rfc-3161-preparation-and-response-verification-02) - [Додаткові записи в режимі збору доказів: drand та пристрої Telegram](https://phishdestroy.github.io/TgWitness/uk/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 (див. [Читабельні звіти](https://phishdestroy.github.io/TgWitness/uk/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 ``` Коли обидва архіви фіксують однакові числові ідентифікатори облікового запису та чату, записи поєднуються за ідентифікатором повідомлення. **Незмінно** означає рівність повного збереженого запису 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/uk/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/uk/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/uk/docs/reference/evidence/#verification-scope) для ознайомлення з припущеннями щодо довіри та [результатами перевірки](https://phishdestroy.github.io/TgWitness/uk/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 мінус час за годинником колектора, з похибкою, пов’язаною з часом проходження сигналу в обидва боки; у звітах ці вимірювання наводяться у розділі «Ланцюг відповідальності». Експорт чату також фіксує час зчитування історії, окрім дат повідомлень. ### Посібник з офлайн-перегляду звітів та архівування Розпакуйте повний ZIP-архів перед тим, як відкривати `chat.html` або `report.html`. Переглядач надає функції пошуку, фільтрів, учасників, індикаторів, деталей записів та вибірки JSON/CSV без використання сервера. Зберігайте `viewer/` та `media/` поруч із звітом. Вибірки є похідними: використовуйте `verify.py SELECTION.json --evidence ARCHIVE.zip`, щоб порівняти їх із підписаним архівом. Верифікатор перевіряє ідентифікатор звіту, ключ підпису, межі архіву та кожен вибраний елемент; відредаговані, відсутні та дубльовані елементи не проходять перевірку. Примітки до вибору та час створення залишаються непідписаними метаданими. Пропуски в номерах повідомлень відображаються лише для повного, нефільтрованого чату в порядку зростання номерів. Приховування категорії або неможливість завантаження блоку даних не повинні перетворювати пропущений рядок на доказ відсутності повідомлення. Підсвічування результатів пошуку здійснюється на основі простого тексту до ескейпу HTML, зберігаючи літеральну розмітку. Браузер перевіряє підписи маніфесту, ідентифікатор звіту та ключ, а також усі вказані хеші файлів. Він відхиляє неоднозначні або неправильно сформовані ZIP-структури, дублікати імен та небезпечні шляхи, а також обмежує розмір файлів до 256 МіБ, а загальний обсяг вмісту — до 4 ГіБ. Для архівів більшого розміру використовуйте автономний верифікатор. Ця перевірка браузером доповнює перевірки верифікатора щодо ланцюгів журналів та семантики даних. Файл `README.txt` містить посібник для початківців, вирівняний перелік файлів, інструкції з верифікації та примітки щодо формату даних мовою звіту, а також повний посібник англійською мовою. `SHA256SUMS` охоплює перелічені в ньому файли, за винятком самого цього файлу, `manifest.json` та `manifest.sig`; підписаний маніфест також охоплює `SHA256SUMS`. Залиште оригінальний ZIP-архів без змін і зберігайте робочі файли поза розпакованою папкою. Звіти PDF містять закладки розділів та ідентифікацію справи/звіту на наступних сторінках. ### Чат на момент експорту Експорт чату фіксує те, що Telegram вказав про чат на момент початку експорту: власні мітки Telegram (`scam`, `fake`, `restricted` з відповідними причинами, `verified`), імена користувачів, опис, кількість учасників та адміністраторів, пов’язану дискусію, захист вмісту, чи бачать нові учасники попередні повідомлення та з якого повідомлення цей обліковий запис має доступ до історії (`available_min_id`), дату першого повідомлення, якщо це момент створення чату, та SHA-256 — фото чату (збережене в `media/`). Він фіксує місце облікового запису, що експортує дані, у чаті: роль, дату приєднання, хто його запросив, а для адміністратора — його права. Натомість вказується запит Telegram, який було відхилено. Якщо обліковий запис, що здійснює експорт, є адміністратором, під час експорту зчитується журнал адміністратора чату (Telegram зберігається приблизно 48 годин) у файл `admin-log.json`: видалення та редагування із зазначенням вмісту та облікового запису, який здійснив дію. Саме у цьому записі про видалення вказано, хто здійснив видалення. ### Індикатори У списку звітів та архіві містяться такі записи: `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/infinity: ``` 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 та паролем, і видаляються при вимкненні або коли чат видаляється з джерел. ## Незалежний свідок Журнал свідчень (`tgwitness-witness-v1`) та публікації в його каналі перевіряються на відповідність експорту доказів за допомогою `verify.py --witness … --channel …`; див. [незалежний свідок](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/high-assurance/) | Записи про життєвий цикл та доступ провайдера, стан брандмауера та Cloudflare, а також підписаний запис про роботу колектора | Запити до провайдера та Cloudflare лише для читання; доступність окремих перевірок залежить від провайдера | | [Конфіденційна віртуальна машина Intel TDX](https://phishdestroy.github.io/TgWitness/uk/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) Медіа-завдання та фіксація події повідомлення відбуваються в одній транзакції. Завдання зберігає оригінальний дескриптор повідомлення TL; підписане спостереження пов’язує його SHA-256, обліковий запис та політику розміру. Функція відновлення перевіряє цю прив’язку перед завантаженням. Вона ніколи не завантажує поточне повідомлення і непомітно замінює його на новіше вкладення. Перервані завдання повторюються, тоді як постійна помилка залишається явним результатом. Кожна робоча область має власний журнал та ідентифікатор підпису. Подія process.started містить ідентифікатор запуску, час за локальним годинником, версії залежностей, хеші вихідних файлів, початковий обліковий запис/область дії, а також налаштування збору даних. Імпульси містять ідентифікатор запуску, монотонний час та стан черги. Квитанцію про виконання також можна завантажити як окремо підписану заяву. Для перевірки середовища виконання поєднайте її з атестацією GitHub або перевірками TDX, описаними у розділі «[Перевірка сфери дії](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/timestamp/) та [результати валідації](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/). ## Необов’язкові записи в режимі доказів: пристрої drand та Telegram Ще два записи можуть виконуватися з тими самими проходами, що й мітки часу. Обидва вони за замовчуванням вимкнені й діють лише тоді, коли увімкнено режим доказів: «Додаткові налаштування» → «Докази та резервні копії» → **«Більше свідків» · опціонально**, або `"drand": true` та `"devices": true` в `POST /api/evidence`. Один збій не зупиняє роботу іншого або міток часу; панель показує останній результат кожного з них під формою. **drand** (`beacon.drand` ). Кожен прохід записує найновіший раунд drand quicknet, публічну випадковість «Ліги ентропії» (один раунд кожні 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/uk/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. --- # Telegram · Незалежний свідок Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/ Запустіть «witness» із власним ключем та ботом, опублікуйте підписані контрольні точки в каналі та звіряйте експортовані дані з ними. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/) ![Докази та верифікація](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) [Експорт та перевірка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) · [Високий рівень надійності](https://phishdestroy.github.io/TgWitness/uk/docs/reference/high-assurance/) · [Посібник з панелей](https://phishdestroy.github.io/TgWitness/uk/docs/reference/panel/#extras) Свідок зберігає підписані контрольні точки окремо від колектора. Він перевіряє підпис колектора та безперервність журналу, підписує результат своїм власним ключем і публікує його в каналі Telegram. Запускайте його на окремому сервері з доступом тільки для читання до кінцевої точки свідка колектора. Блок-схема · Колектор → Свідок (підписаний контрольний пункт: кількість записів + хеш заголовка); Свідок → Журнал Witness, власний ключ; Свідок → Канал у Telegram (підписаний допис через власного бота); ЗIP-архів доказів → verify.py; Журнал Witness, власний ключ → verify.py; Канал у Telegram → verify.py (Експорт з Telegram Desktop або сторінка «t.me/s») · Колектор · Свідок · Журнал Witness, власнийключ · Канал у Telegram · ЗIP-архів доказів · verify.py · підписаний контрольний · пункт: кількість записів + · хеш заголовка · підписаний допис через · власного бота · Експорт з Telegram Desktop · або сторінка «t.me/s» **Діаграма у вигляді тексту** 1. Колектор → Свідок (підписаний контрольний пункт: кількість записів + хеш заголовка) 2. Свідок → Журнал Witness, власний ключ 3. Свідок → Канал у Telegram (підписаний допис через власного бота) 4. ЗIP-архів доказів → verify.py 5. Журнал Witness, власний ключ → verify.py 6. Канал у Telegram → verify.py (Експорт з Telegram Desktop або сторінка «t.me/s») **На цій сторінці** - [Що отримує свідок, а чого не отримує](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/#what-the-witness-gets-and-what-it-does-not) - [Що перевіряється та фіксується](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/#what-it-checks-and-records) - [Запустити свідка](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/#run-a-witness) - [Публічна сторінка доказів для декількох робочих просторів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/#public-proof-page-for-several-workspaces) - [Перевірити](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/#verify) ## Що отримує TgWitness і чого він не робить | Свідок має | Свідок ніколи не має | | --- | --- | | **Токен-свідок,** доступний лише для читання, для одного робочого простору | Сесія Telegram користувача-збирача або облікові дані API | | Власний ключ Ed25519 та журнал | Сховище колектора, ключ підпису або токен панелі | | Власний токен бота Telegram | Зміст повідомлення: у заголовку вказано кількість записів та хеш | Токен створюється в **меню «Extras» → «Independent witness»**, відображається один раз і зберігається лише у вигляді 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. публікує результат у каналі, підписаний, включаючи «немає відповіді», поки 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/uk/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-інтерфейс Telegram Bot API використовують власні маршрути: прямий/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 ``` Кожен «witness» має одного видавця: канал Telegram або веб-хук Discord, але не обидва одночасно. Пости містять однакове підписане твердження і не можуть відправляти сповіщення нікому. Пост, довжина якого перевищує обмеження Discord у 2 000 символів, замінюється коротким рядком із повним чеком, доданим у вигляді `witness-check.txt`. Кожен ідентифікатор публікації записується як `witness.posted`. `verify.py --channel`зчитує лише експорти з каналів Telegram, тому для Discord ведіть журнал свідка: він містить усі чеки. ### Параметри | Варіант | Середовище | За замовчуванням | Значення | | --- | --- | --- | --- | | `--interval` | `TGWITNESS_WITNESS_INTERVAL` | 10 | Інтервал між перевірками: 1–1440 | | `--timeout` | `_TIMEOUT` | 30 | Час очікування на роботу колектора та Bot 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, а не меншу кількість перевірок. Навіть без каналу TgWitness все одно зберігає свій журнал. Зберігайте відбиток ключа TgWitness (`python -m tgwitness.witness fingerprint`) в іншому місці. ## Публічна сторінка з доказами для декількох робочих просторів `python -m tgwitness.proof` witnesses підтримує до 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` | Адреса 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` та використовуйте його як описано нижче. ## Перевірити З боку користувача TgWitness експортуйте цей журнал: ``` 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` перевіряє журнал свідка (ланцюжок і підписи), а потім те, чи **кожен заголовок, який бачив свідок, є частиною експортованого журналу**: запис за цим номером повинен мати саме цей хеш. Заголовок, що не збігається, не проходить перевірку — журнал було змінено після того, як свідок його побачив. Він також повідомляє про заголовки, побачені після експорту, аномалії, які зафіксував свідок, відповіді, що не пройшли перевірку, періоди, відповідні контрольні точки яких присутні в цьому експорті («Засвідчено від X до Y») та пропуски. Пізніші контрольні точки не подовжують ці періоди. Результат містить номер останнього збіжного запису та кількість наступних записів, для яких немає відповідного контрольного пункту. Враховуються лише відповіді, підписані власним ключем експорту: експорт, підписаний ключем, якого свідок ніколи не бачив, повідомляється як не засвідчений, і без `--fingerprint` його підписувач залишається не закріпленим. З `--channel` кожен підписаний допис повинен збігатися з журналом свідка запис за записом: змінені дописи не проходять перевірку, відсутні дописи вказуються у списку. Дата у наданому JSON-експорті Telegram є редагованими метаданими, що не входять до підписаного токена свідка. Збіг токена не підтверджує дату публікації; у результаті явно зазначається, що перевірка часу публікації не проводилася. ### Необхідна межа експорту з підтвердженням Для передачі, яка має містити остаточний запис у присутності свідків, додайте `--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 секунд на повторні спроби за один цикл. Постійний курсор по черзі переглядає старіші печатки. Збережені подачі слідують існуючому шляху оновлення доказів. Повторна спроба не перезаписує печатку, не змінює її початкову дату та не стверджує, що календар отримав її раніше. Пізніша зобов’язальна операція з біткойнами залишається пізнішим зовнішнім підтвердженням. Відсутні докази залишаються на рівні `none`; докази, що очікують на перевірку, залишаються на рівні `pending`, доки верифікатор не перевірить їх самостійно. --- # Telegram · Часові мітки Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/timestamp/ Часові мітки RFC 3161 для підписаних контрольних точок: що надсилається до центру авторизації та як перевіряється відповідь. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/evidence/) ![Докази та верифікація](https://phishdestroy.github.io/TgWitness/assets/chapter-evidence.svg) TgWitness формує запити за стандартом RFC 3161 та перевіряє відповіді від органу авторизації часових міток (TSA). Ця ручна процедура не передбачає ні вибору TSA, ні надсилання даних; режим доказового збору виконує обидві ці дії за графіком ([формат доказового збору](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/#rfc-3161-preparation-and-response-verification-02)). Підготовлений запит **ще не** є **доказом часової мітки**. ## Що фіксує цей журнал доказів Блок-схема · Спостереження за акаунтами → Ланцюжок SHA-256 та підписи Ed25519; Ланцюжок SHA-256 та підписи Ed25519 → Підписаний контрольний пункт; Підписаний контрольний пункт → Хеш з точністю до байта та випадковий нонс; Хеш з точністю до байта та випадковий нонс → Запит RFC 3161; Запит RFC 3161 → Незалежна TSA; Незалежна TSA → Підписана відповідь TSA; Підписаний контрольний пункт → Перевірка даних, одноразового коду та явного довірчого сертифіката; Підписана відповідь TSA → Перевірка даних, одноразового коду та явного довірчого сертифіката · Спостереження заакаунтами · Ланцюжок SHA-256 тапідписи Ed25519 · Підписаний контрольнийпункт · Хеш з точністю добайта та випадковийнонс · Запит RFC 3161 · Незалежна TSA · Підписана відповідьTSA · Перевірка даних,одноразового коду таявного довірчогосертифіката **Діаграма у вигляді тексту** 1. Спостереження за акаунтами → Ланцюжок SHA-256 та підписи Ed25519 2. Ланцюжок SHA-256 та підписи Ed25519 → Підписаний контрольний пункт 3. Підписаний контрольний пункт → Хеш з точністю до байта та випадковий нонс 4. Хеш з точністю до байта та випадковий нонс → Запит RFC 3161 5. Запит RFC 3161 → Незалежна TSA 6. Незалежна TSA → Підписана відповідь TSA 7. Підписаний контрольний пункт → Перевірка даних, одноразового коду та явного довірчого сертифіката 8. Підписана відповідь TSA → Перевірка даних, одноразового коду та явного довірчого сертифіката Підпис збирача пов’язує записи з його ключем. Довірений відповідь 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` повинен дорівнювати «true». Перевірка сертифікатів здійснюється згідно з правилами та термінами, встановленими для встановленого OpenSSL. Для довгострокового зберігання необхідна окрема політика щодо сертифікатів та доказів їх скасування. Дійсний криптографічний підпис не є автоматично кваліфікованим часовим штампом або визначенням юридичної допустимості. Якщо оператор сфабрикував спостереження до нанесення часового штампу, TSA фіксує ці байти; це не підтверджує їхню правдивість. ## Запис про передачу Зафіксуйте ідентифікатор справи, відправника та одержувача, час передачі за UTC та її джерело, мету, імена файлів/значення SHA-256, відбиток колектора, діапазон послідовностей, відомі пропуски, версію верифікатора та результат верифікації. Підпишіть та зберігайте цей запис незалежно у рамках процедур вашої організації. Система зберігання записів для декількох користувачів у TgWitness не реалізована. Під час розробки не було здійснено зв’язку з жодною незалежною TSA в режимі реального часу. У ході локальних тестів створюється синтетична CA/TSA для перевірки сумісності та відхилення змінених даних, нонсу або CA. --- # Telegram · Зберігання та відновлення Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/ Резервне копіювання, переміщення старих файлів у хмарне сховище, копії під захистом Object Lock та відновлення на новому комп’ютері. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/deployment/) ![Розгортання та відновлення](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) Панель розділяє три завдання: | Завдання | Що це робить | | --- | --- | | Створюйте резервні копії | Скопіюйте підписаний журнал, контрольні точки, збережені файли та експорти в черзі до налаштованого місця призначення S3. | | Безкоштовний локальний простір | Скопіюйте вибрані старі вкладення до S3 або віддаленого хмарного сховища rclone, повністю завантажте їх назад, перевірте зашифровані байти, а потім видаліть перевірену локальну копію. | | Зберігайте копію доказів | Налаштуйте S3 Object Lock і перевірте повернутий статус зберігання. Сервіс повинен підтвердити запитуваний режим та дату. | Звільнення місця ніколи не призводить до видалення чи перезапису підписаного журналу. Кожне вкладення зберігає свій оригінальний тег SHA-256 та квитанцію відновлення. Опціональне стиснення gzip відбувається перед шифруванням з автентифікацією. Імена файлів у хмарі не містять імен Telegram, ідентифікаторів чатів або оригінальних імен вкладень. Розмір одного вкладення може становити до 32 ГіБ. Сама по собі відповідь на завантаження не є дозволом на видалення файлу. TgWitness завантажує повний зашифрований об’єкт, перевіряє його розмір та SHA-256, зберігає квитанцію, а потім ще раз перевіряє локальні байти безпосередньо перед видаленням. У разі невдалого завантаження, відмінного результату зчитування або скасованого перенесення локальний файл залишається на місці. Якщо увімкнена резервна копія доказів ще не скопіювала цей файл, видалення також чекає на це. **На цій сторінці** - [Коли диск заповнюється](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/#when-the-disk-is-filling-up) - [Підключити пункт призначення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/#connect-a-destination) - [Зберегти файл відновлення](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/#keep-the-recovery-file) - [Відновлення після втрати інсталяції](https://phishdestroy.github.io/TgWitness/uk/docs/reference/storage/#recover-after-losing-the-installation) - [Бот-оператор та повідомлення про завершення](https://phishdestroy.github.io/TgWitness/uk/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 і встановіть у панелі його токен, чат-призначення та явно вказані дозволені ідентифікатори користувачів Telegram. І відправник, і чат повинні збігатися. Переслані повідомлення та команди від інших ботів ігноруються. `/status` і `/stats` доступні у стандартному режимі «тільки статус». Додатковий режим керування додає `/pause`, `/resume` та `/copy`. `/copy` запитує налаштовану задачу зберігання; це не означає, що віддалене завантаження вже завершилося. Команди не можуть передавати довільні URL-адреси, файли або програми оболонки. Використовуйте окремі налаштування сповіщень для попереджень та завершення завдань. Повідомлення про завершення розрізняють експорт облікового запису з пропусками та повний експорт, а також показують історію та кількість збережених даних. Витяги з повідомлень не включаються, якщо це не ввімкнено окремо в налаштуваннях сповіщень. Вибір сервісу формується на основі фактичного встановленого каталогу Apprise, а не фіксованого набору прикладів постачальників. --- # Telegram · Безпека та обробка даних Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/ Модель загроз, модель доступу, збереження конфіденційних даних, мережева вразливість, імпорт сеансів та порядок повідомлення про вразливість. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/deployment/) ![Розгортання та відновлення](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg) На цій сторінці описано доступ, зберігання та захист мережі в локальному робочому просторі або на сервері. Щодо збору даних на GitHub Runner або в конфіденційній віртуальній машині Intel TDX див. режими [перевірки](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/security/#access-model) - [Вміст панелі та експортні дані](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#panel-content-and-exports) - [Секрети в стані спокою](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#secrets-at-rest) - [Проксі-сервери та мережеві маршрути](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#proxies-and-network-routes) - [Вхід та імпорт сеансів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#sign-in-and-session-imports) - [Журнали та транспорт](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#logs-and-transport) - [Межі цілісності](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#integrity-limits) - [Якщо ви підозрюєте наявність проблеми](https://phishdestroy.github.io/TgWitness/uk/docs/reference/security/#if-you-suspect-a-problem) ## Модель доступу Токен головної панелі надає повний контроль. Інші користувачі можуть отримати власний [обмежений доступ](https://phishdestroy.github.io/TgWitness/uk/docs/reference/access/): обрані робочі простори та чати, дозволи, термін дії, обмеження за IP-адресами, обмеження на вхід та сесії, що можуть бути скасовані. Користувач з обмеженим доступом до чату не може виконувати операції в межах усього робочого простору, навіть якщо його дозвіл відмічено. Робочі простори використовують спільний процес і не ізолюють дані від адміністратора хосту. За замовчуванням панель слухає на localhost. При вході через браузер токен доступу обмінюється на сесійні облікові дані; браузер надсилає їх як токен-носій. Він зберігається у sessionStorage, а не у файлі cookie автентифікації. Блокування/вихід з системи очищає сесію браузера. Закриття браузера або завершення сесії не зупиняє збір даних. Видані токени та облікові дані сеансів зберігаються у вигляді хеш-значень у зашифрованому сховищі. Анулювання призводить до завершення відповідних сеансів; зміни дозволів впливають на наступні запити. Завантажені файли неможливо відкликати. Адміністратор може обмежувати також власні сеанси браузера, але скрипти, що безпосередньо використовують токен головної панелі, зберігають повний доступ і обходять ці обмеження сеансів браузера. Кількість невдалих спроб автентифікації обмежується за адресою клієнта. Обмеження за IP-адресою застосовуються до адреси, яку бачить додаток; перед тим, як покладатися на це, перевірте поведінку зворотного проксі-сервера. Повноваження Witness залишаються окремими повноваженнями для перевірки стану та контрольних точок, доступними лише для читання. ### Доступ до демо-версії `/api/demo-access` — це навмисно неавтентифікований бутстрап для явно запущеної, ізольованої синтетичної демонстрації. Він видає окрему можливість, що діє протягом терміну існування процесу, але ніколи не видає справжній токен панелі або перезапис TGWITNESS_TOKEN. Для видачі та використання потрібні локальний вузол та хост, без переадресованих заголовків і без міждоменних запитів. Додаткові робочі простори або авторизована сесія блокують цей шлях. Активні робочі простори ніколи не видають цю можливість. Демо-версія не може пов’язувати акаунти або змінювати налаштування збору даних. ## Вміст панелі та експорт даних Панель не використовує зовнішніх шрифтів, аналітики, ресурсів 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 та окремий випадковий солт генерують різний ключ Ферне для кожної робочої області. Файл vault.external.json необхідно зберегти для відновлення. Відсутність або неправильні головні ключі призводять до збою. Існуючі локальні сховища не мігруються автоматично. На панелі відображається вибраний режим зберігання ключів. Шифрування диска захищає локальні повідомлення та мультимедійні файли в обох режимах; деталі налаштування див. у розділах « [з’єднання» та «](https://phishdestroy.github.io/TgWitness/uk/docs/reference/connection/) захист даних». ## Проксі-сервери та маршрути мережі Налаштування проксі-сервера шифруються у сховищі. Паролі та секретні дані MTProxy не повертаються API та не записуються у записи доказів. Кожна робоча область обирає свій маршрут Telegram та [режим IP](https://phishdestroy.github.io/TgWitness/uk/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 МіБ, і обробляє завантажені дані в пам’яті без розпакування архіву чи збереження оригінальних файлів. Нормалізовані облікові дані повертаються лише браузеру, що надіслав запит та пройшов автентифікацію; вони зберігаються у зашифрованому сховищі після успішної авторизації в 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/uk/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx). Їхні верифікатори перевіряють походження робочого процесу або апаратні вимірювання на додаток до цілісності архіву. Опціональні часові мітки та зашифровані зовнішні копії забезпечують часові прив’язки та копії для відновлення; формат доказів описує перевірки для кожного режиму. ## Якщо ви підозрюєте наявність проблеми Збережіть оригінальний каталог даних і використовуйте окрему копію для аналізу. Повідомте про версію, операцію та кроки, що дозволяють відтворити проблему, через [політику безпеки](https://github.com/phishdestroy/TgWitness/blob/main/.github/SECURITY.md), зберігаючи конфіденційність даних облікового запису та облікових даних. --- # Архітектура Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/architecture/ Компоненти колектора, панелі, журналу, робочих процесів та свідка, а також схема передачі даних між ними. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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-develop.svg) Один процес Python обслуговує панель FastAPI та будь-яку кількість ізольованих робочих просторів, кожен із яких має клієнт облікового запису користувача Telethon. 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 у повному синхронному режимі. Тригери оновлення/видалення подій запобігають звичайним редагуванням з боку додатків; адміністратори файлової системи залишаються в межах зони довіри. Авторизація API здійснюється за допомогою токена bearer. Операції входу серіалізуються та обмежені за часом. Завантаження даних облікового запису використовують спеціальне обмеження розміру закодованого тіла 12 MiB та обмеження розміру декодованого файлу 8 MiB; звичайні запити до API зберігають обмеження 16 KiB. Конвертація виконується у робочому потоці, зберігає завантажені дані в пам’яті та повертає нормалізовані вхідні дані до автентифікованого браузера. Вхід за QR-кодом має кандидат для кожного робочого простору, короткочасний ідентифікатор, завдання очікування та явне скасування. Лише прийнята авторизація стає активним клієнтом. Telegram FloodWait повертається із значенням Retry-After; облікові дані та необроблені повідомлення про помилки RPC не розкриваються в помилках API. Експорт журналів виконується поза асинхронним циклом подій і серіалізується для кожного робочого простору. Вони передають стабільний знімок для читання паралельно з триваючим записом у WAL. Завдання збору даних чату можуть виконуватися одночасно на окремих облікових записах; кожен обліковий запис залишається зарезервованим, доки його завдання не зупиниться. Призупинене або невдале завдання зберігає свої контрольні точки. Успішна перевірка архіву дозволяє очистити його робочі файли, залишаючи ZIP-архів, підписаний план та статус. Колектори робочих просторів спільного використовують цикл процесів/подій. Поточні знімки історії та оновлення в режимі реального часу можуть перекриватися. Обидва є окремими спостереженнями, позначеними за джерелом; дублікати не приховуються автоматично. Не здійснюється жодних висновків на основі відсутніх ідентифікаторів, сфабрикованого видаленого тексту, примусового переліку учасників або автоматичного приєднання до групи . Пояснення для операторів див. у розділах [«Як працює збір даних](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/)» та [«Формати облікових записів і сеансів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/)». Конфігурація мережі зберігається у зашифрованому сховищі. Застосування маршруту закриває старі клієнти та скасовує незавершені входи; подальші з’єднання використовують цей маршрут без прямого резервного варіанту. Під час нової інсталяції з зовнішнім ключем ключ Fernet для кожного робочого простору генерується за допомогою алгоритму HKDF-SHA256 на основі файлу головного ключа та збереженого випадкового солі. Це забезпечує захист секретних даних окремо від каталогу даних, а не вмісту журналу чи медіафайлів у вигляді відкритого тексту. Місцевий демо-доступ використовує окремо згенеровану здатність процесу, ніколи не використовуючи налаштований токен панелі. Для видачі та прийняття необхідний явний демо-режим, синтетичний кореневий домен без додаткових робочих просторів або авторизованої сесії, пеер/хост із зворотним зв’язком, відсутність проксі- заголовків переадресації та відсутність міждоменних запитів браузера. Активні API зберігають аутентифікацію за носієм та відхиляють зміни у зборі даних у демо-режимі. --- # Що було протестовано Canonical page: https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/ Тестування Telegram у режимі реального часу, автоматизовані перевірки, перевірки в браузері та те, що залишається неперевіреним. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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, які були успішно пройдені під час пізніших запусків | Історія розгортання; на CVM немає облікового запису Telegram | **На цій сторінці** - [Аудит випуску та нові експорти · 6 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#release-audit-and-fresh-exports--6-november-2026) - [Trusted Live CPU Ubuntu та WARP · 5 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#trusted-live-cpu-ubuntu-and-warp--5-november-2026) - [Розгортання Phala Cloud у режимі реального часу · 4 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#live-phala-cloud-deployment--4-november-2026) - [Інвентаризація журналу сервера в режимі реального часу · 1 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#live-server-journal-inventory--1-november-2026) - [Останні офлайн-перевірки та перевірки з введенням помилок · 1 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#recent-offline-and-fault-injection-checks--1-november-2026) - [Тестування Telegram у реальному часі, весь обліковий запис · 29 жовтня 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#live-telegram-test-whole-account--29-october-2026) - [Експорт, захищений паролем, відкривається за допомогою libarchive · 29 жовтня 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#password-protected-export-opened-with-libarchive--29-october-2026) - [Тестування Telegram у реальному часі · з 27 по 29 жовтня 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#live-telegram-test--27-to-29-october-2026) - [Синтетичне вимірювання локальної пропускної здатності](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#synthetic-local-capacity-measurement) - [Повнотекстовий пошук серед мільйона повідомлень · 5 листопада 2026 року](https://phishdestroy.github.io/TgWitness/uk/docs/reference/verification/#full-text-search-on-one-million-messages--5-november-2026) - [Залишкові кваліфікаційні вимоги](https://phishdestroy.github.io/TgWitness/uk/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 — пройшли | Ці програми перекриваються з іншими тестами; результати не сумуються | | Додаток для збору даних | 124: пройшов | Три офіційні веб-перевірки, заблоковані необхідною пісочницею Chromium | | Авторизація API | Маршрути 269; запити 538 пройшли | Відсутні облікові дані та скасований доступ | | Збережені архіви | 48 з 48 перевірено | Записи 3,598,381; закріплені ключі робочої області | | Перевірка читання флоту в режимі реального часу | Пройшов 24 із 40 профілів | Маршрути WARP 16 не пройшли кваліфікацію; ці профілі не були підключені | Звіт [з підписом](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, що працює виключно на CPU (4 vCPU, 8 GiB) під QEMU всередині хоста RunPod CPU. Колектор використовував `14e642a5`; для верифікації — `02072461`. Остаточні виправлення були об’єднані в [PR #114](https://github.com/phishdestroy/TgWitness/pull/114) як `755f78f6`, дерево якого відповідало тестованій версії PR. Це не було TEE. - Справжній WARP Connector повідомив про нормальний стан; проксі-HTTPS повідомив, що WARP та Gateway увімкнені. Три зонди зафіксували одну й ту саму вихідну адресу, що не гарантує фіксовану IP-адресу. - Відключення WARP призвело до збою запиту через проксі. Прямий HTTPS-запит до шлюзової служби був відхилений. У просторі імен записувача були заблоковані прямі IPv4/IPv6-адреси, зовнішній DNS та вбудований UDP-резолвер Docker. - Токен провайдера з обмеженим доступом тільки для читання міг зчитувати стан/з’єднання, але не міг зчитувати токен реєстрації коннектора. Підписані спостереження провайдера містили явно недоступні зразки. Свідок працював на хості оператора, тому це демонструє запис та зберігання даних, а не незалежне зберігання третьою стороною. - Офіційна версія 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 американських центів; історичні ціни тестування | Наведена нижче послідовність розділяє початкові збої, виправлення та завершені перевірки. Жоден обліковий запис Telegram не був підключений до цих CVM. **Впровадження 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, нічого не створено | Конфігурація Docker 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` були недоступні, тому результат — INCOMPLETE. - Два перезапуски через 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, печатки звітів та перевірка перезапуску** - Deploy один раз завантажив опублікований `dstack-0.5.12`, зіставив його з хешем образу ОС, який повідомив CVM, і `tdx_os` пройшов перевірку: MRTD, RTMR0, RTMR1 та RTMR2 дорівнюють значенням, обчисленим для QEMU 8.2.2, 1 vCPU та 2 ГіБ. Той самий розрахунок дав інше значення RTMR0 для заявлених 4 ГіБ, 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`. - Deploy відобразив суму, яку Phala виставляє за CVM, включаючи диск: 0,06078 долара за годину. ### Майстер панелі та решта обсягу робіт Майстер панелі двічі запускався у Phala Cloud: один раз через API завдань, а інший — через браузер на базі справжнього Chromium: перевірка ціни, створення з комітом під **Advanced**, усі шість перевірок атестації пройдені, список серверів із зазначенням ціни, що підлягає оплаті (44,37 доларів США на місяць), **Find поточну адресу**, завантаження виміряної конфігурації Docker 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 була зафіксована. Тут не публікуються вміст повідомлень, ідентифікатори облікових записів чи чатів, мітки робочих просторів, облікові дані чи приватні файли. На момент цього огляду окремо налаштований публічний монітор охоплював три джерела: одна відповідь на запит була OK, а дві — `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 в Docker під Linux](https://github.com/phishdestroy/TgWitness/actions/runs/41341200341/job/124951395192) під час коміту `5a9e0814` пройшла успішно: згенеровані вхідні дані у форматах Ogg/Opus, MP3, M4A, MP4 з відео, WAV та FLAC; перевірки на підроблену тривалість та посилання на вторинні файли; а також 48 мутованих фікстур парсера (34 відхилено, 14 декодовано в межах). Справжнє OCR Tesseract працювало з оригінальними байтами без змін. Декодер та 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`), тому вона тут не розглядається. Не охоплюються: реакції, зміни у складі учасників, профілі користувачів, надсилання повідомлень, приєднання за запрошенням, проксі-сервери, сповіщення, бот-свідок та одночасне використання кількох облікових записів. Публічні файли містять лише статистичні дані. ## Експорт, захищений паролем, відкривається за допомогою 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/uk/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/uk/docs/reference/license/ TgWitness надається під ліцензією MIT для загального користування, і чому він архітектурно несумісний із робочим процесом Taylor Wessing. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/docs/reference/notice/ Наше повідомлення оператора щодо компанії Taylor Wessing та її джерела інформації. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/license/) · [Модель доказів](https://phishdestroy.github.io/TgWitness/uk/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/uk/docs/reference/changelog/#unreleased) - [0.9.1 preview · 5 November 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#091-preview--5-november-2026) - [0.9.0 preview · 4 November 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#090-preview--4-november-2026) - [0.8.1 preview · 2 November 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#081-preview--2-november-2026) - [0.8.0 preview · 2 November 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#080-preview--2-november-2026) - [0.7.1 preview · 1 November 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#071-preview--1-november-2026) - [0.7.0 preview · 31 October 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#070-preview--31-october-2026) - [0.6.1 · 27 October 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#061--27-october-2026) - [0.6.0 · 27 October 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#060--27-october-2026) - [0.5.1 · 27 October 2026](https://phishdestroy.github.io/TgWitness/uk/docs/reference/changelog/#051--27-october-2026) - [0.5.0 · 26 October 2026](https://phishdestroy.github.io/TgWitness/uk/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/uk/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/uk/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/uk/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/uk/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/uk/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/uk/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/uk/docs/reference/verification/). --- # Один журнал. Чотири режими збору даних. Вісім рівнів верифікації. Canonical page: https://phishdestroy.github.io/TgWitness/uk/guides/modes.html Області збору даних, межі подій, вісім механізмів верифікації та шість вигаданих сценаріїв розслідування. [Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/) [Documentation index](https://phishdestroy.github.io/TgWitness/uk/llms.txt) Режими, сценарії та рівні доказовості TgWitness записує те, що спостерігає підключений обліковий запис. Третя сторона може перевірити цілісність запису за допомогою незалежно довіреного ключа. [Режими збору даних](https://phishdestroy.github.io/TgWitness/uk/guides/modes.html#scope)[Сценарії](https://phishdestroy.github.io/TgWitness/uk/guides/modes.html#scenarios)[Рівні доказовості](https://phishdestroy.github.io/TgWitness/uk/guides/modes.html#levels) 3–5-хвилинний огляд · вигадані приклади · поточна реалізація 1. **Telegram** Оновлення, видимі для облікового запису 2. **Колектор** Пов’язані записи, кожен із яких підписаний 3. **Верифікатор** Довірений ключ + збережена межа `h₁ → h₂ → h₃ · Ed25519`Цілісність перевіряється. Походження Telegram та правдивість повідомлення залишаються окремими питаннями. ## Виберіть сферу спостереження Три області дії та попереднє налаштування для розслідування. Виключення та увімкнені типи джерел залишаються чинними. За замовчуванням**Вибрані чати** Записи Тільки джерела, відібрані вручну. Нові чати Не додається автоматично. Вибирайте Відомий набір каналів або груп. Фіксована місткість чату не була визначена. **Чого не робить** Він не виявляє інших чатів і не заповнює попередню історію. Папка облікового запису**Папка Telegram** Записи Включення папок та категорій, за винятком виключень та архівних чатів, якщо це налаштовано. Нові чати Збіг активних чатів; зміни у папках протягом години. Вибирайте Аналітик уже веде папку справи. Підтверджуйте збір даних на спеціальному обліковому записі. **Чого не робить** Це не враховує мінливі muted/read . Підтвердіть сферу застосування**Весь обліковий запис** Записи Чати, видимі для облікового запису, включаючи приватні розмови та ботів, у межах вибраних типів. Нові чати Буде додано після виходу першого оновлення. Вибирайте Спеціальний обліковий запис для спостереження, включаючи обліковий запис, що бере участь у справі. **Чого не робить** Він не приєднується до чатів автоматично та не обходить доступ до джерела. Попереднє налаштування для всього облікового запису**Режим розслідування** Записи Усі типи джерел, власні дії, профілі джерел та останні 200 видимих повідомлень від нещодавно виявлених джерел. Нові чати Новий чат або бот отримує профіль та знімок історії. Вибирайте Приєднайтеся до команди або взаємодійте з ботом через панель. Перегляньте та збережіть пресет. **Чого не робить** Він не створює знімків усіх існуючих чатів і не відстежує натискання клікбеків в іншому клієнті. Ці картки призначені для локального порівняння, а не для управління колектором у режимі реального часу. Вони не змінюють обліковий запис. **Чого не робить** Жоден режим не зчитує секретні чати, не веде запис під час зупинки процесу, не приєднується до джерел самостійно та не отримує попередню історію, що виходить за межі запиту snapshot/export. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/) ## Вивантаження через GitHub Actions (попередня версія) Новий вхід у Telegram, один чат, зашифрований архів і атестація GitHub. [Відкрити помічник вивантаження](https://phishdestroy.github.io/TgWitness/uk/docs/capture/) ## Що фіксується До запису потрапляють лише доставлені або явно запитані спостереження. Невідоме походження залишається невідомим. Перемикачі фіксації · локальна ілюстраціяНові повідомленняРедагуванняВидаленняРеакціїЧленство Панель застосовує ці перемикачі для кожного робочого простору. Вимкнення одного з них зберігає існуючі записи; повторне ввімкнення не відновлює пропущені події. **Матриця подій: збережений матеріал та залишені невідомі** | Категорія | Збережено | Залишається невідомим | | --- | --- | --- | | Повідомлення | Текст, ідентифікатори, метадані відправника, контекст відповіді та оригінальний конверт оновлення. | Відсутність підпису Telegram, який можна перевірити сторонніми засобами. | | Редагувати | Кожна спостережувана версія, без перезапису попередніх. | Проміжні редагування можуть бути пропущені; відправник не обов’язково є редактором. | | Видалення | Повідомлення та раніше збережений текст, якщо такий є. | Інформація про видалювача та точний час дії не надається. | | Видалення без обмеження сфери дії | Повідомлення на рівні облікового запису; невідомий вузол залишається явно зазначеним. | Не використовуйте припущення щодо чатів. Кореляція, за можливості, використовує раніше збережені ідентифікатори на рівні облікового запису. | | Реакція | Надані лічильники та видимі останні ідентифікатори. | Не всі реактори є видимими; для отримання повного списку доступних реакторів потрібні окремі запити. | | Членство | Доставлені службові повідомлення та оновлення учасників. | Роль та тип чату обмежують видимість; мовчання не означає відсутності. | | Вкладення | Дескриптор оригінальної версії, збережені байти, SHA-256 та результати спроб. | Файл, що зник, може бути недоступним; новіша версія його не замінює. | | Знімок історії | Повідомлення, що наразі відображаються, позначені як спостереження в історії. | Попередні редагування та вміст, що зник, не відновлюються. | | Власні дії | Вихідні messages/edits та відповідні метадані button_press метадані. | Зворотні виклики, запущені в іншому клієнті Telegram, не відображаються. | | Кнопки бота | Метадані зворотного виклику, URL-адреси, веб-додатку та запиту зберігаються разом із повідомленням. | URL-адреси та phone/location запити — це текст, який не відкривається та не виконується автоматично. | ### Стандартні обмеження на вкладення Фотографії 20 MiB Відео 100 MiB Файли 50 MiB Анімації 20 MiB Відеонотатки 50 MiB Голос 20 MiB Аудіо 50 MiB Стікери 5 MiB **Чого не робить** Перемикач не редагує вбудовані метадані та не вимикає записи про операції. Запис не ідентифікує учасника, якого Telegram не вказав. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/) ## Використовуйте ті повноваження, які у вас є Кожен обліковий запис має власний робочий простір, журнал, ключ підпису, маршрут та чергу. ### Номер телефону + код Введіть 2FA , якщо ця опція увімкнена. ### QR код Скануйте з авторизованого пристрою; 2FA це все ще може бути необхідним. ### Telethon .session Імпортуйте файл сеансу облікового запису. ### Pyrogram .session Імпортуйте підтримуваний Pyrogram формат сесії. ### TData ZIP Підтримується один обліковий запис Desktop; локальний пароль, якщо він встановлений. ### StringSession текст Вставте Telethon StringSession. ### .session + .json Виберіть сесію та відповідні супутні метадані. ### Ключ автентифікації HEX + DC ID Імпортуйте авторизацію облікового запису разом з ідентифікатором центру обробки даних. **API pair** Ваша власна API пара є необов’язковою. Без неї TgWitness використовується пул публічних пар, включаючи пари з офіційного Telegram Desktop. `Direct · SOCKS5 · HTTP CONNECT · MTProxy`MTProxy є експериментальним; доступні вбудовані публічні MTProxy списки. У разі збою проксі-маршруту не відбувається перехід на пряме з’єднання. Дві робочі області на одній машині не є двома незалежними свідками. **Чого не робить** Імпорт не обходить авторизацію Telegram, 2FA ані непідтримувані формати сеансів. Акаунти, як і раніше, використовують спільний процес запуску додатка. [Формати облікових записів](https://phishdestroy.github.io/TgWitness/uk/docs/reference/accounts/) ## Дійте з панелі Надішліть повідомлення або дайте відповідь, натисніть кнопку поточного бота, збережіть попередній перегляд посилання, а потім явно приєднайтеся до чату або запустіть бота з його параметром запуску. `interaction.preview``interaction.requested``interaction.result` Квитанції попереднього перегляду, запиту та результату підписуються. Перед натисканням кнопки сервер знову отримує повідомлення та відхиляє змінену клавіатуру. Повернутий текст зворотного виклику та URL-адреси залишаються записаним контекстом. **Чого не робить** Жодних веб-додатків, платежів, phone/location обміну або вбудованих запитів. Відображення URL-адреси не призводить до її відкриття. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/collection/) ## Відновлення та безперебійність роботи Прогалини показуються, а не приховуються. ### Повернутися до збереженого місця Після перезапуску Telegram запитує про пропущені оновлення. Обмежений термін зберігання та відмінності, термін дії яких закінчився, можуть залишати прогалини. ### Перевіряйте видимі повідомлення ще раз Значення за замовчуванням: пріоритетні джерела — кожні 15 хвилин, інші — кожні 6 годин. Результати включають message.recovered та message.missing_on_recheck. ### Читати coverage.json Підписаний експорт супроводжується періодами спостереження, пропусками з обґрунтуванням та неспостереженими ідентифікаторами. Запис про відсутність при повторній перевірці не є повідомленням про видалення. **Чого не робить** Пізніший знімок історії не стирає перебоїв у роботі та не відновлює кожну зниклу версію. Збережений курсор не є підтвердженням прийняття журналу без втрат. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/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. ### Збережена межа Контрольна точка під час запуску, за замовчуванням кожні 5 хвилин, та упорядковане завершення роботи. Зберігайте копію в іншому місці. **Перевірки сторонніми організаціями** Пізніший експорт узгоджується з раніше збереженою довжиною та заголовком; відкат можна виявити. **Чого не робить** Він не виявляє заміну як журналу, так і всіх збережених контрольних точок. **Команда верифікації** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.json ``` 4. ### Зовнішній час Режим доказів надсилає контрольну точку SHA-256 до RFC 3161 органи влади (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. ### Незалежний свідок Відокремте хост, кінцеву точку з обмеженим доступом тільки для читання, новий челендж та власний key/journal та TGW1 публікації в каналі. **Перевірки сторонніми організаціями** Раніше прийняті версії; статуси: ok, key_changed, «rollback», «fork», «invalid» та no_response. **Чого не робить** Це не перетворює дві робочі області на одному хості-збірнику на незалежних свідків. **Команда верифікації** ``` 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 якщо сховище це підтримує. **Перевірки сторонніми організаціями** Restore публікує файли лише після успішної перевірки журналу, контрольної точки та збережених медіафайлів. **Чого не робить** Він не відновлює дані без експортованого ключа та не припускає збереження даних без перевірки відповіді сховища. **Команда верифікації** ``` python -m tgwitness.replica restore --key-file KEY.json --out EMPTY_DIR ``` 7. ### Перевірте походження Підписане підтвердження виконання: хеші вихідного коду, версії залежностей та контекст процесу. Надано самостійно. **Перевірки сторонніми організаціями** Що повідомив колектор підписів про власне виконання. **Чого не робить** Він не забезпечує незалежного підтвердження процесу та не виключає компрометації до початку запису. **Команда верифікації** ``` python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 ``` ### Що не доводить жоден рівень Доставка кожного оновлення Telegram; достовірність тексту; те, що ідентифікатор відправника ідентифікує реальну особу; відсутність компрометації колектора перед записом; допустимість у суді. [Незалежний свідок](https://phishdestroy.github.io/TgWitness/uk/docs/reference/witness/) Місцевий SHA-256 експеримент ### Спробуйте змінити запис 2 Наступний запис зберігає попередньо збережене посилання. Зміна тексту змінює обчислений хеш запису № 2. Текст запису 2 Запис 1`h1`Починається з 64 нулів Запис 2`h2`Включає збережені h1 Запис 3`h3`Включає збережені h2 Статичний приклад: h2 містить «Зустріч о 11:00». Зміна цього тексту змінює h2; запис 3 все ще посилається на збережене h2. **Перевіряйте повні дайджести** Хеш збереженого запису 2 `SHA-256(e₂)` Перерахований хеш запису 2 `SHA-256(e₂)` Цей приклад обчислює хеші, а не підписи. Справжній верифікатор перевіряє кожен підпис і посилання щодо довіреного ключа. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/how-it-works/) ## Оберіть шлях через докази Вигадані ситуації. Починайте збір даних до відповідної події; зберігайте межі та пропуски разом із вмістом. ### Канал змінює платіжні реквізити Режим → події Вибрані чати → повідомлення, редагування, видалення. Вихідні дані Спостережувані версії публікацій та вкладень за хешем. Верифікація Підписано ZIP + збережений контрольний пункт + перевірена відповідь TSA. **Чого не робить** Він не відновлює оригінал, який ніколи не було зафіксовано. ### Повідомлення зникають після інциденту Режим → події Папка або весь обліковий запис → усі категорії подій. Вихідні дані Збережені оригінали, повідомлення про видалення та висвітлення з пропусками. Верифікація Підписано ZIP + незалежний журнал свідків. **Чого не робить** Він не дозволяє ідентифікувати особу, яка видалила повідомлення, якщо у повідомленні не вказано виконавця дії. ### Дослідіть бота-магазин Режим → події Попередні налаштування розслідування → кнопки, попередній перегляд посилань та явний запуск бота. Вихідні дані Підписані квитанції про взаємодію, повернені зворотні виклики та збережені профілі. Верифікація Підписано ZIP; перевіряйте будь-яке досьє щодо ZIP. **Чого не робить** Він не відкриває веб-додаток-бота, не здійснює платежів і не реєструє зворотні виклики інших клієнтів. ### Учасник змінює імена в різних чатах Режим → події Будь-яка область дії → спостережувані sender/profile метадані. Вихідні дані Історія імен/імен користувачів за числовим ідентифікатором, посилання «також у» та витягнуті зачіпки. Верифікація Досьє JSON перевірено на відповідність підписаному ZIP. **Чого не робить** Це не перетворює гаманець, телефонний номер або ім’я користувача на підтверджену особу. ### Тривале спостереження з копією, що зберігається поза сервером Режим → події Будь-яка область дії → режим «Докази» та S3 репліка з підтримкою Object Lock. Вихідні дані Зашифрована копія, збережені контрольні точки та відповіді з часовими мітками. Верифікація Відновіть дані за допомогою експортованого ключа, а потім перевірте їх без оригінального сервера. **Чого не робить** Це не замінює незалежного свідка або окремо збереженого ключа дешифрування. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/) ## Передайте пакет, який можна перевірити Надайте підписаний оригінал, незалежно збережений відбиток ключа, відповідну контрольну точку та результат перевірки. - Підписано ZIP - JSONL - CSV - HTML - Контрольна точка - Квитанція про виконання - Експорт чату: 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/uk/docs/reference/evidence/) ## Порівняйте наданий артефакт Основні артефакти без додаткового підписання, міток часу або систем свідків. Скрипти та логери різняться залежно від реалізації; «частковий» означає обмежений зафіксованим або видимим матеріалом. | Підхід | Редагування / видалення | Запис підпису | Зовнішній час | Незалежний свідок | Покриття / прогалини | Верифікація без автора | | --- | --- | --- | --- | --- | --- | --- | | Експорт з Telegram Desktop | Частково | Ні | Ні | Ні | Ні | Ні | | Telethon скрипт знімка | Частково | Ні | Ні | Ні | Ні | Ні | | Реєстратор видалень: текстовий журнал | Частково | Ні | Ні | Ні | Ні | Ні | | Скріншоти / знімки веб-сторінок | Частково | Ні | Ні | Ні | Ні | Ні | | TgWitness з налаштованими додатковими параметрами | Частково | Так | Так | Так | Частково | Так | **Чого не робить** У таблиці не оцінюються всі скрипти чи продукти для ведення журналів. Необов’язкові перевірки часу та свідків вимагають власних служб та опорних точок довіри; жодна з них не встановлює достовірність джерела. [Ознайомтеся з деталями](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/) ## Дотримуйтесь обмежень, що випливають із доказів Верифікація є корисною, коли її сфера застосування залишається чітко визначеною. - Секретні чати недоступні. - Під час зупинки процесу нічого не записується; можливості відновлення обмежені. - Перевірений запис не є доказом того, що його зміст є правдивим. - Оператор, що володіє ключем, може підписувати довільний вміст. Незалежні свідки та часові мітки обмежують можливість подальшої заміни, а не нечесне початкове захоплення даних. - Використовуйте спеціальний обліковий запис, а не свій основний. - Telegram може обмежувати облікові записи через обсяг запитів. **Чого не робить** Жоден режим чи рівень доказовості не встановлює юридичної допустимості, повної доставки повідомлень у Telegram чи реальної особи. [Інструкція з налаштування](https://phishdestroy.github.io/TgWitness/demo/guide.html?lang=uk)[Спеціальний обліковий запис](https://phishdestroy.github.io/TgWitness/uk/docs/dedicated-account/)[EVIDENCE.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/evidence/)[INVESTIGATION.md](https://phishdestroy.github.io/TgWitness/uk/docs/reference/investigation/)