Документація / 08
Дізнайтеся, як працює система збереження доказів
Повідомлення може змінюватися. Запис того, що ви спостерігали, має залишатися перевіреним.
Ознайомтеся з двома невеликими експериментами нижче. Вони використовують вигадані повідомлення, працюють у вашому браузері та ніколи не підключаються до Telegram.
Одне повідомлення, три спостереження
Коли Telegram надсилає нове повідомлення, повідомлення про редагування або видалення, програма-збирач додає три окремі записи. Редагування не замінює перший запис. Повідомлення про видалення не стирає його.
Повідомлення зникло з вікна чату.
- 01✓
message.newЗустріч о 10:00
- 02✓
message.editedЗустріч о 11:00
- 03✓
message.deletedПовідомлення про видалення № 42
Усі три отримані спостереження залишаються в журналі.
Повідомлення про видалення не містить ані достовірного часу видалення, ані імені особи, яка видалила повідомлення. Нерозкриття цих даних дозволяє зберегти різницю між спостереженням та припущенням.
Змінити запис. Простежте хеш.
Кожен запис містить хеш попереднього запису. Його власний хеш охоплює поля події, включаючи це посилання. Зовнішній контрольний пункт фіксує конкретну довжину журналу та хеш його початку.
h₁ = SHA-256(e₁)Посилання на 64 нуліh₂ = SHA-256(e₂)Містить h₁h₃ = SHA-256(e₃)Включає h₂h₃Порівняйте цю фіксовану межу з наданим журналом.Зміна події призводить до зміни її хешу. Відновлення ланцюжка змінює його початок. Видалення кінця робить його коротшим за збережену контрольну точку.
Переглянути запис № 2 та повні хеші
Це точний JSON-файл у кодуванні UTF-8, хешований у цьому прикладі. Значення є вигаданими; дев’ять полів та серіалізація відповідають формату журналу.
- Хеш збереженого запису 2
- Перерахований хеш запису 2
Фактичні правила, у кількох рядках
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; сам хеш та підпис не є полями для введення хешу.
hexport[Ncheckpoint] = Hcheckpoint
Перевірте підпис контрольної точки за закріпленим ключем колектора, а потім порівняйте її межі з перевіреним журналом. Пізніший експорт може містити більше записів; він все одно повинен збігатися з даними на попередній контрольній точці.
Три запитання, три різні перевірки
Перевірка хеш-сум та підписів за допомогою окремого надійного ключа.
02 / БЕЗПЕРЕРВНІСТЬЩо було збережено раніше?Порівняйте підписаний експорт із контрольними точками, що зберігаються окремим свідком.
03 / РЕАЛІЗАЦІЯЧи надійшли ці тестові події?Зіставлення контрольованих дій надсилання, редагування та видалення з журналом кожного облікового запису.
Відповідний ланцюжок хеш-кодів дає відповідь на питання щодо цілісності. Він не підтверджує повну доставку повідомлення в Telegram, правдивість повідомлення або незалежно підтверджений час спостереження.
Слідкуйте за розслідуванням усього облікового запису — від його отримання до формування матеріалів справи.