文件說明 / 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 及完整雜湊值
此為本範例中經過雜湊運算的原始 UTF-8 JSON 內容。數值均為虛構;九個欄位及其序列化格式均符合日誌格式規範。
- 已儲存記錄 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。此為 TgWitness 文件中記載的 JSON 編碼格式;雜湊值與簽名本身並非雜湊輸入欄位。
hexport[Ncheckpoint] = Hcheckpoint
請驗證固定收集器金鑰下的檢查點簽名,然後將其邊界與已驗證的日誌進行比對。後續的匯出檔可能包含更多記錄;但其內容仍須與較早的檢查點相符。
三個問題,三種不同的檢查方式
請使用獨立的可信密鑰來驗證雜湊值與數位簽名。
02 / 連續性先前保留了哪些內容?將簽名過的匯出檔與由獨立見證者保存的檢查點進行比對。
03 / 交付這些測試事件是否已送達?將各帳戶的發送、編輯及刪除操作與其對應的日誌進行比對。
相符的雜湊鏈可解答完整性相關問題。它並不能證明 Telegram 訊息已完整送達、訊息內容屬實,亦無法確立獨立可信的觀察時間。
追蹤從帳戶取得到案件檔案編製的完整調查過程。