# Как устроены доказательства

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

Сообщение может измениться. Запись того, что вы наблюдали, должна оставаться поддающейся проверке.

Ознакомьтесь с двумя небольшими экспериментами, приведёнными ниже. В них используются вымышленные сообщения, они работают непосредственно в вашем браузере и никогда не подключаются к Telegram.

## Одно сообщение, три замечания

Когда Telegram доставляет новое сообщение, уведомление об изменении или об удалении, сборщик добавляет три отдельных записи. Изменение не заменяет первую запись. Уведомление об удалении не стирает её.

01 / ПУТЬ СООБЩЕНИЯИллюстративная последовательность

Telegram delivers an update to the collector, which appends a journal record. · Telegram · Collector · Журнал · обновление → · добавить →

ПРОСМОТР ТЕКУЩЕГО ЧАТА Сообщение № 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:00**`h₂ = SHA-256(e₂)`Включает h₁

ЗАПИСЬ 03**Зафиксировано удаление**`h₃ = SHA-256(e₃)`Включает h₂

ХРАНИТСЯ В ДРУГИХ ИСТОЧНИКАХ**3 записи · заголовок `h₃`**Сравните эту фиксированную границу с предоставленным журналом.

Изменение события приводит к изменению его хеша. Восстановление цепочки приводит к изменению её начала. Удаление конца делает цепочку короче, чем сохраненная контрольная точка.

**Ознакомьтесь с записью № 2 и полными хешами**

В данном примере представлен точный JSON-файл в кодировке UTF-8 с хешированием. Значения являются вымышленными; девять полей и формат сериализации соответствуют формату журнала.

```

```

Хеш сохраненной записи № 2

``

Пересчитанный хеш записи № 2

``

Данная тестовая среда вычисляет хэши, а не подписи. Реальный верификатор также проверяет подпись Ed25519, последовательность и ссылку каждого события. Простое восстановление хэшей не позволяет создать действительные подписи с использованием доверенного ключа.

## Фактические правила в нескольких строках

ХЭШ + ПОДПИСЬ

h0 = 064
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))

**C** сериализует девять полей события в формате JSON с кодировкой UTF-8: отсортированные ключи, без лишних пробелов, без 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](https://phishdestroy.github.io/TgWitness/ru/docs/reference/evidence/#event-canonicalization) в TgWitness; сам хеш и сама подпись не являются полями для ввода хеша.

СОХРАНЕННАЯ КОНТРОЛЬНАЯ ТОЧКА

Nexport ≥ Ncheckpoint
hexport[Ncheckpoint] = Hcheckpoint

Проверьте подпись контрольной точки с помощью закреплённого ключа сборщика, а затем сравните её границы с проверенным журналом. Более поздний экспорт может содержать больше записей; при этом он должен по-прежнему совпадать с данными на более ранней контрольной точке.

## Три вопроса, три различных проверки

[01 / ЦЕЛОСТНОСТЬ**Изменилась ли эта запись?** Проверяйте хэши и подписи с помощью отдельного доверенного ключа.](https://phishdestroy.github.io/TgWitness/ru/docs/exports/)[02 / НЕПРЕРЫВНОСТЬ**Что было сохранено ранее?** Сравните подписанный экспорт с контрольными точками, хранящимися у отдельного свидетеля.](https://phishdestroy.github.io/TgWitness/ru/docs/witness/)[03 / ПРЕДОСТАВЛЕНИЕ**Поступили ли эти тестовые события?** Сопоставьте контролируемые действия по отправке, редактированию и удалению с журналом каждого аккаунта.](https://phishdestroy.github.io/TgWitness/ru/docs/cases/)

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

Следите за ходом [расследования по всему аккаунту —](https://phishdestroy.github.io/TgWitness/ru/docs/cases/) от сбора данных до формирования материалов дела.
