Dokumentacja / 08
Zobacz, jak działa system gromadzenia dowodów
Treść wiadomości może ulec zmianie. Zapis tego, co Pan/Pani zaobserwował(a), powinien pozostać możliwy do zweryfikowania.
Zapoznaj się z dwoma niewielkimi eksperymentami poniżej. Wykorzystują one fikcyjne wiadomości, działają w Państwa przeglądarce i nigdy nie łączą się z serwisem Telegram.
Jedna wiadomość, trzy spostrzeżenia
Gdy Telegram dostarcza nową wiadomość, powiadomienie o edycji lub usunięciu, aplikacja gromadząca dane dodaje trzy odrębne zapisy. Edycja nie zastępuje pierwszego zapisu. Powiadomienie o usunięciu nie powoduje jego skasowania.
Wiadomość zniknęła z widoku czatu.
- 01✓
message.newSpotkanie o godz. 10:00
- 02✓
message.editedSpotkanie o godz. 11:00
- 03✓
message.deletedPowiadomienie o usunięciu nr 42
Wszystkie trzy odnotowane zdarzenia pozostają w dzienniku.
Powiadomienie o usunięciu nie podaje ani wiarygodnego czasu usunięcia, ani osoby, która usunęła wiadomość. Nieujawnianie tych informacji pozwala zachować rozróżnienie między obserwacją a domysłem.
Zmień wpis. Śledź skrót.
Każdy wpis zawiera skrót poprzedniego wpisu. Jego własny skrót obejmuje pola zdarzenia, w tym ten link. Zewnętrzny punkt kontrolny określa konkretną długość dziennika oraz skrót początkowy.
h₁ = SHA-256(e₁)Linki do 64 zerh₂ = SHA-256(e₂)Zawiera nagłówek h₁h₃ = SHA-256(e₃)Zawiera h₂h₃Proszę porównać tę ustaloną granicę z dostarczonym dziennikiem.Zmiana zdarzenia powoduje zmianę jego skrótu. Odtworzenie łańcucha powoduje zmianę jego początku. Usunięcie końca sprawia, że staje się on krótszy niż zachowany punkt kontrolny.
Proszę sprawdzić wpis nr 2 oraz pełne skróty
Oto dokładny kod JSON w formacie UTF-8 z hashowaniem, przedstawiony w tym przykładzie. Wartości są fikcyjne; dziewięć pól oraz sposób serializacji odpowiadają formatowi dziennika.
- Skrót zapisanego rekordu nr 2
- Przeliczony skrót rekordu nr 2
Rzeczywiste zasady w kilku zdaniach
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C serializuje dziewięć pól zdarzenia w formacie JSON UTF-8: posortowane klucze, bez dodatkowych spacji, bez sekwencji escape dla znaków ASCII oraz bez wartości NaN/nieskończoności. Wartość previous_hash zdarzenia wynosi hi−1. Wyświetlana wartość h0 oznacza 64 znaki zerowe; podpisy obejmują 32 bajty surowego skrótu.
Dziewięć pól to: seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload oraz previous_hash. Jest to udokumentowany format kodowania JSON stosowany przez TgWitness; same skróty i podpisy nie stanowią pól przeznaczonych na dane wejściowe do funkcji skrótu.
hexport[Ncheckpoint] = Hcheckpoint
Proszę zweryfikować podpis punktu kontrolnego pod przypiętym kluczem kolektora, a następnie porównać jego granice z zweryfikowanym dziennikiem. Późniejszy eksport może zawierać więcej rekordów; musi on jednak nadal być zgodny z wcześniejszym punktem kontrolnym.
Trzy pytania, trzy różne weryfikacje
Należy zweryfikować skróty i podpisy przy użyciu oddzielnego, zaufanego klucza.
02 / CIĄGŁOŚĆCo zostało zachowane wcześniej?Proszę porównać podpisany eksport z punktami kontrolnymi przechowywanymi przez odrębnego świadka.
03 / REALIZACJACzy te zdarzenia testowe dotarły?Należy porównać kontrolowane działania związane z wysyłaniem, edycją i usuwaniem wiadomości z dziennikiem każdego konta.
Zgodny łańcuch skrótów stanowi odpowiedź na pytanie dotyczące integralności. Nie potwierdza on jednak pełnego dostarczenia wiadomości w Telegramie, prawdziwości treści ani niezależnie potwierdzonego czasu obserwacji.
Proszę śledzić przebieg całego postępowania wyjaśniającego, od momentu pozyskania danych aż po przygotowanie akt sprawy.