Dokumentation / 08
Erfahren Sie, wie die Beweissicherung funktioniert
Eine Nachricht kann sich ändern. Die Aufzeichnung dessen, was Sie beobachtet haben, sollte überprüfbar bleiben.
Entdecken Sie unten zwei kleine Experimente. Diese verwenden fiktive Nachrichten, laufen direkt in Ihrem Browser und stellen zu keinem Zeitpunkt eine Verbindung zu Telegram her.
Eine Nachricht, drei Beobachtungen
Wenn Telegram eine neue Nachricht, eine Bearbeitungs- oder eine Löschbenachrichtigung übermittelt, fügt der Collector drei separate Einträge hinzu. Die Bearbeitung ersetzt den ersten Eintrag nicht. Eine Löschbenachrichtigung löscht ihn nicht.
Die Nachricht ist aus der Chat-Ansicht verschwunden.
- 01✓
message.newTreffpunkt um 10:00 Uhr
- 02✓
message.editedTreffpunkt um 11:00 Uhr
- 03✓
message.deletedLöschhinweis zu Nr. 42
Alle drei erfassten Beobachtungen verbleiben im Protokoll.
Eine Löschmeldung liefert weder einen verlässlichen Zeitpunkt der Löschung noch den Namen der Person, die die Nachricht gelöscht hat. Indem diese Werte unbekannt bleiben, wird die Unterscheidung zwischen einer Beobachtung und einer Vermutung gewahrt.
Ändern Sie einen Datensatz. Folgen Sie dem Hash.
Jeder Datensatz enthält den Hash des vorherigen Datensatzes. Sein eigener Hash umfasst die Ereignisfelder, einschließlich dieses Links. Ein extern gespeicherter Checkpoint fixiert eine bestimmte Protokollänge und den Kopf-Hash.
h₁ = SHA-256(e₁)Links zu 64 Nullenh₂ = SHA-256(e₂)Enthält h₁h₃ = SHA-256(e₃)Enthält h₂h₃Vergleichen Sie diese festgelegte Abgrenzung mit dem bereitgestellten Protokoll.Das Ändern eines Ereignisses verändert dessen Hash-Wert. Das Neuerstellen der Kette verändert deren Kopf. Das Entfernen des Endes führt dazu, dass die Kette kürzer ist als der beibehaltene Kontrollpunkt.
Sehen Sie sich Datensatz 2 und die vollständigen Hashes an
Dies ist der exakte UTF-8-JSON-Text, der in diesem Beispiel gehasht wurde. Die Werte sind fiktiv; die neun Felder und die Serialisierung entsprechen dem Protokollformat.
- Hash des gespeicherten Datensatzes 2
- Neu berechneter Hash von Datensatz 2
Die eigentlichen Regeln in wenigen Zeilen
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C serialisiert die neun Ereignisfelder als UTF-8-JSON: sortierte Schlüssel, keine zusätzlichen Leerzeichen, keine ASCII-Escape-Zeichen und keine NaN-/Unendlich-Werte. Der Wert previous_hash des Ereignisses beträgt hi−1. Der angezeigte Wert h0 steht für 64 Nullzeichen; die Signaturen decken die 32 Rohdaten-Byte des Digests ab.
Die neun Felder lauten seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload und previous_hash. Dies ist die dokumentierte JSON-Kodierung von TgWitness; der Hash und die Signatur selbst sind keine Hash-Eingabefelder.
hexport[Ncheckpoint] = Hcheckpoint
Überprüfen Sie die Signatur des Checkpoints unter dem angehefteten Collector-Schlüssel und vergleichen Sie anschließend dessen Grenzen mit dem verifizierten Protokoll. Ein späterer Export kann weitere Datensätze enthalten; er muss jedoch weiterhin mit dem früheren Checkpoint übereinstimmen.
Drei Fragen, drei verschiedene Überprüfungen
Überprüfen Sie Hashes und Signaturen anhand eines separat vertrauenswürdigen Schlüssels.
02 / KONTINUITÄTWas wurde zuvor beibehalten?Vergleichen Sie einen signierten Export mit Kontrollpunkten, die von einem separaten Zeugen geführt werden.
03 / LIEFERUNGSind diese Testereignisse eingegangen?Abgleichen von kontrollierten Sende-, Bearbeitungs- und Löschvorgängen mit dem Protokoll des jeweiligen Kontos.
Eine übereinstimmende Hash-Kette beantwortet eine Integritätsfrage. Sie belegt weder die vollständige Zustellung einer Telegram-Nachricht noch die Richtigkeit einer Nachricht oder einen unabhängig verifizierten Beobachtungszeitpunkt.
Verfolgen Sie die gesamte Untersuchung eines Kontos von der Erfassung bis zur Fallakte.