เอกสาร / 08
ดูวิธีการทำงานของหลักฐาน
ข้อความอาจเปลี่ยนแปลงได้ แต่บันทึกของสิ่งที่คุณสังเกตเห็นควรยังคงสามารถตรวจสอบได้
ลองดูสองการทดลองเล็กๆ ด้านล่างนี้ ซึ่งใช้ข้อความสมมติ ทำงานภายในเบราว์เซอร์ของคุณ และไม่เชื่อมต่อกับ Telegram เลย
ข้อความหนึ่ง ข้อสังเกตสามข้อ
เมื่อ Telegram ส่งข้อความใหม่ หรือการแจ้งเตือนการแก้ไขและการลบ แอปผู้รวบรวมข้อมูลจะเพิ่มบันทึกการสังเกตสามรายการที่แยกกัน การแก้ไขจะไม่แทนที่บันทึกแรก การแจ้งเตือนการลบจะไม่ลบมันออกไป
ข้อความดังกล่าวได้หายไปแล้วจากหน้าจอสนทนา
- 01✓
message.newพบกันเวลา 10:00
- 02✓
message.editedพบกันเวลา 11:00
- 03✓
message.deletedประกาศการลบสำหรับ #42
ทั้งสามข้อสังเกตที่ได้รับยังคงอยู่ในบันทึก
การแจ้งการลบข้อความไม่ระบุทั้งเวลาการลบที่เชื่อถือได้และบุคคลที่ลบข้อความ การไม่เปิดเผยข้อมูลดังกล่าวช่วยรักษาความแตกต่างระหว่างการสังเกตและการคาดเดา
แก้ไขบันทึก ติดตามแฮช
แต่ละบันทึกจะประกอบด้วยค่าแฮชของบันทึกก่อนหน้า ส่วนค่าแฮชของบันทึกนั้นเองจะครอบคลุมสนามข้อมูลของเหตุการณ์ รวมถึงลิงก์ดังกล่าวด้วย จุดตรวจสอบ (checkpoint) ที่เก็บไว้ภายนอกจะกำหนดความยาวของบันทึกและค่าแฮชส่วนหัว (head hash) ที่เฉพาะเจาะจง
h₁ = SHA-256(e₁)ลิงก์ไปยัง 64 zeroesh₂ = SHA-256(e₂)รวมถึง h₁h₃ = SHA-256(e₃)รวมถึง h₂h₃เปรียบเทียบขอบเขตที่กำหนดนี้กับบันทึกที่ให้มาการแก้ไขเหตุการณ์จะเปลี่ยนค่าแฮชของมัน การสร้างใหม่ของโซ่จะเปลี่ยนหัวของมัน การลบส่วนท้ายจะทำให้มันสั้นกว่าจุดตรวจสอบที่เก็บไว้
ตรวจสอบบันทึกที่ 2 และค่าแฮชทั้งหมด
นี่คือ JSON UTF-8 ที่ถูกแฮชในตัวอย่างนี้อย่างแม่นยำ ค่าต่างๆ เป็นค่าสมมติ; สนามทั้งเก้าและกระบวนการซีเรียลไลเซชันสอดคล้องกับรูปแบบของบันทึก
- บันทึกที่เก็บไว้ 2 hash
- คำนวณใหม่ค่าแฮชของบันทึกที่ 2
กฎระเบียบจริง ๆ ในไม่กี่บรรทัด
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 กำหนดไว้; ส่วนค่าแฮชและลายเซ็นเองไม่ใช่สนามสำหรับป้อนค่าแฮช
hexport[Ncheckpoint] = Hcheckpoint
ตรวจสอบลายเซ็นของจุดตรวจสอบภายใต้กุญแจผู้เก็บข้อมูลที่ถูกตรึงไว้ แล้วเปรียบเทียบขอบเขตของมันกับบันทึกที่ได้รับการตรวจสอบแล้ว การส่งออกข้อมูลในภายหลังอาจมีบันทึกเพิ่มเติม แต่ต้องสอดคล้องกับจุดตรวจสอบก่อนหน้านี้
สามคำถาม สามขั้นตอนการตรวจสอบที่แตกต่างกัน
ตรวจสอบค่าแฮชและลายเซ็นโดยใช้กุญแจที่เชื่อถือได้แยกต่างหาก
02 / ความต่อเนื่องเนื้อหาที่เก็บไว้ก่อนหน้านี้คืออะไร?เปรียบเทียบไฟล์ส่งออกที่ลงนามกับจุดตรวจสอบที่เก็บไว้โดยพยานอิสระ
03 / การส่งมอบเหตุการณ์ทดสอบเหล่านี้ได้รับแล้วหรือไม่?เปรียบเทียบการส่ง แก้ไข และลบที่ควบคุมไว้กับบันทึกของบัญชีแต่ละบัญชี
โซ่แฮชที่ตรงกันจะตอบคำถามเกี่ยวกับความสมบูรณ์ของข้อมูล แต่ไม่ยืนยันการส่งข้อความ Telegram อย่างสมบูรณ์ ความจริงของข้อความ หรือเวลาการสังเกตที่เชื่อถือได้อย่างอิสระ
ติดตามกระบวนการสืบสวนบัญชีทั้งหมด ตั้งแต่ขั้นตอนการรวบรวมข้อมูลจนถึงการจัดทำชุดเอกสารคดี