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

Документація / 08

Дізнайтеся, як працює система збереження доказів

Повідомлення може змінюватися. Запис того, що ви спостерігали, має залишатися перевіреним.

Ознайомтеся з двома невеликими експериментами нижче. Вони використовують вигадані повідомлення, працюють у вашому браузері та ніколи не підключаються до Telegram.

Одне повідомлення, три спостереження

Коли Telegram надсилає нове повідомлення, повідомлення про редагування або видалення, програма-збирач додає три окремі записи. Редагування не замінює перший запис. Повідомлення про видалення не стирає його.

01 / ШЛЯХ ПОВІДОМЛЕННЯІлюстративна послідовність
Telegram delivers an update to the collector, which appends a journal record. TelegramCollectorЖурнал оновлення →додати →
ПЕРЕГЛЯД ПОТОЧНОГО ЧАТУ Повідомлення № 42
Повідомлення видалено

Повідомлення зникло з вікна чату.

ЖУРНАЛ СПОСТЕРЕЖЕНЬ 3 записи
  1. 01
    message.new

    Зустріч о 10:00

    ✓
  2. 02
    message.edited

    Зустріч о 11:00

    ✓
  3. 03
    message.deleted

    Повідомлення про видалення № 42

    ✓

Усі три отримані спостереження залишаються в журналі.

Спрощений шлях для одного вже обраного джерела. Оперативні записи також містять інформацію з реального журналу. Збір даних залежить від того, що може бачити користувач, та від того, що надає Telegram.

Повідомлення про видалення не містить ані достовірного часу видалення, ані імені особи, яка видалила повідомлення. Нерозкриття цих даних дозволяє зберегти різницю між спостереженням та припущенням.

Змінити запис. Простежте хеш.

Кожен запис містить хеш попереднього запису. Його власний хеш охоплює поля події, включаючи це посилання. Зовнішній контрольний пункт фіксує конкретну довжину журналу та хеш його початку.

02 / HASH-CHAIN SANDBOXСправжній SHA-256 · зразки записів
ЗАПИС 01Повідомлення отриманоh₁ = SHA-256(e₁)Посилання на 64 нулі
ЗАПИС 02Зустріч о 11:00h₂ = SHA-256(e₂)Містить h₁
ЗАПИС 03Виявлено видаленняh₃ = SHA-256(e₃)Включає h₂
ЗБЕРЕЖЕНО В ІНШИХ ДЖЕРЕЛАХ3 записи · заголовок h₃Порівняйте цю фіксовану межу з наданим журналом.

Зміна події призводить до зміни її хешу. Відновлення ланцюжка змінює його початок. Видалення кінця робить його коротшим за збережену контрольну точку.

Ця тестова середа обчислює хеші, а не підписи. Справжній верифікатор також перевіряє підпис 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. Це задокументоване JSON-кодування TgWitness; сам хеш та підпис не є полями для введення хешу.

ЗБЕРЕЖЕНА КОНТРОЛЬНА ТОЧКА
Nexport ≥ Ncheckpoint
hexport[Ncheckpoint] = Hcheckpoint

Перевірте підпис контрольної точки за закріпленим ключем колектора, а потім порівняйте її межі з перевіреним журналом. Пізніший експорт може містити більше записів; він все одно повинен збігатися з даними на попередній контрольній точці.

Три запитання, три різні перевірки

Відповідний ланцюжок хеш-кодів дає відповідь на питання щодо цілісності. Він не підтверджує повну доставку повідомлення в Telegram, правдивість повідомлення або незалежно підтверджений час спостереження.

Слідкуйте за розслідуванням усього облікового запису — від його отримання до формування матеріалів справи.