TgWitness / เอกสาร

เอกสาร / 08

ดูวิธีการทำงานของหลักฐาน

ข้อความอาจเปลี่ยนแปลงได้ แต่บันทึกของสิ่งที่คุณสังเกตเห็นควรยังคงสามารถตรวจสอบได้

ลองดูสองการทดลองเล็กๆ ด้านล่างนี้ ซึ่งใช้ข้อความสมมติ ทำงานภายในเบราว์เซอร์ของคุณ และไม่เชื่อมต่อกับ Telegram เลย

ข้อความหนึ่ง ข้อสังเกตสามข้อ

เมื่อ Telegram ส่งข้อความใหม่ หรือการแจ้งเตือนการแก้ไขและการลบ แอปผู้รวบรวมข้อมูลจะเพิ่มบันทึกการสังเกตสามรายการที่แยกกัน การแก้ไขจะไม่แทนที่บันทึกแรก การแจ้งเตือนการลบจะไม่ลบมันออกไป

01 / เส้นทางของข้อความลำดับภาพประกอบ
Telegram delivers an update to the collector, which appends a journal record. TelegramCollectorบันทึก อัปเดต →เพิ่ม →
มุมมองการสนทนาปัจจุบัน ข้อความ #42
ข้อความถูกลบ

ข้อความดังกล่าวได้หายไปแล้วจากหน้าจอสนทนา

บันทึกการสังเกต 3 รายการ
  1. 01
    message.new

    พบกันเวลา 10:00

    ✓
  2. 02
    message.edited

    พบกันเวลา 11:00

    ✓
  3. 03
    message.deleted

    ประกาศการลบสำหรับ #42

    ✓

ทั้งสามข้อสังเกตที่ได้รับยังคงอยู่ในบันทึก

ขั้นตอนที่เรียบง่ายสำหรับแหล่งข้อมูลที่เลือกไว้แล้วหนึ่งแห่ง บันทึกการดำเนินงานยังแบ่งปันกับบันทึกจริงด้วย การบันทึกข้อมูลขึ้นอยู่กับสิ่งที่บัญชีนั้นสามารถเห็นได้และสิ่งที่ Telegram ส่งมา

การแจ้งการลบข้อความไม่ระบุทั้งเวลาการลบที่เชื่อถือได้และบุคคลที่ลบข้อความ การไม่เปิดเผยข้อมูลดังกล่าวช่วยรักษาความแตกต่างระหว่างการสังเกตและการคาดเดา

แก้ไขบันทึก ติดตามแฮช

แต่ละบันทึกจะประกอบด้วยค่าแฮชของบันทึกก่อนหน้า ส่วนค่าแฮชของบันทึกนั้นเองจะครอบคลุมสนามข้อมูลของเหตุการณ์ รวมถึงลิงก์ดังกล่าวด้วย จุดตรวจสอบ (checkpoint) ที่เก็บไว้ภายนอกจะกำหนดความยาวของบันทึกและค่าแฮชส่วนหัว (head hash) ที่เฉพาะเจาะจง

02 / HASH-CHAIN SANDBOXSHA-256 ที่แท้จริง · ตัวอย่างบันทึก
บันทึก 01รับข้อความแล้วh₁ = SHA-256(e₁)ลิงก์ไปยัง 64 zeroes
RECORD 02พบกันเวลา 11:00h₂ = SHA-256(e₂)รวมถึง h₁
RECORD 03สังเกตเห็นการลบh₃ = SHA-256(e₃)รวมถึง h₂
เก็บไว้ที่อื่น3 รายการ · หัวข้อh₃เปรียบเทียบขอบเขตที่กำหนดนี้กับบันทึกที่ให้มา

การแก้ไขเหตุการณ์จะเปลี่ยนค่าแฮชของมัน การสร้างใหม่ของโซ่จะเปลี่ยนหัวของมัน การลบส่วนท้ายจะทำให้มันสั้นกว่าจุดตรวจสอบที่เก็บไว้

แซนด์บ็อกซ์นี้คำนวณค่าแฮชเท่านั้น ไม่ใช่ลายเซ็น ผู้ตรวจสอบจริงยังตรวจสอบลายเซ็น Ed25519 ลำดับ และลิงก์ของทุกเหตุการณ์ด้วย การสร้างค่าแฮชใหม่เพียงอย่างเดียวไม่สามารถสร้างลายเซ็นที่ถูกต้องภายใต้กุญแจที่เชื่อถือได้

กฎระเบียบจริง ๆ ในไม่กี่บรรทัด

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

C จัดเรียงฟิลด์เหตุการณ์ทั้งเก้าเป็น JSON แบบ UTF-8: คีย์เรียงลำดับ ไม่มีช่องว่างเพิ่มเติม ไม่มีการหลบหลีก ASCII และไม่มี NaN/infinity ค่า previous_hash ของเหตุการณ์คือ hi−1 ค่า h0 ที่แสดงหมายถึงตัวอักษรศูนย์ 64 ตัว; ลายเซ็นครอบคลุม 32 ไบต์ของดิบของ digest

สนามทั้งเก้าคือ seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload และ previous_hash นี่คือรูปแบบการเข้ารหัส JSON ที่ TgWitness กำหนดไว้; ส่วนค่าแฮชและลายเซ็นเองไม่ใช่สนามสำหรับป้อนค่าแฮช

จุดตรวจสอบที่เก็บไว้
Nexport ≥ Ncheckpoint
hexport[Ncheckpoint] = Hcheckpoint

ตรวจสอบลายเซ็นของจุดตรวจสอบภายใต้กุญแจผู้เก็บข้อมูลที่ถูกตรึงไว้ แล้วเปรียบเทียบขอบเขตของมันกับบันทึกที่ได้รับการตรวจสอบแล้ว การส่งออกข้อมูลในภายหลังอาจมีบันทึกเพิ่มเติม แต่ต้องสอดคล้องกับจุดตรวจสอบก่อนหน้านี้

สามคำถาม สามขั้นตอนการตรวจสอบที่แตกต่างกัน

โซ่แฮชที่ตรงกันจะตอบคำถามเกี่ยวกับความสมบูรณ์ของข้อมูล แต่ไม่ยืนยันการส่งข้อความ Telegram อย่างสมบูรณ์ ความจริงของข้อความ หรือเวลาการสังเกตที่เชื่อถือได้อย่างอิสระ

ติดตามกระบวนการสืบสวนบัญชีทั้งหมด ตั้งแต่ขั้นตอนการรวบรวมข้อมูลจนถึงการจัดทำชุดเอกสารคดี