TgWitness / เอกสาร

อ้างอิง / ความปลอดภัยและโครงการ

สถาปัตยกรรม

ส่วนประกอบของระบบ ได้แก่ collector, panel, journal, workers และ witness รวมถึงวิธีการที่ข้อมูลถูกส่งผ่านระหว่างส่วนต่าง ๆ

กระบวนการ Python หนึ่งกระบวนการจะโฮสต์แผงควบคุม FastAPI และพื้นที่ทำงานที่แยกกันจำนวนเท่าใดก็ได้ แต่ละพื้นที่ทำงานมีไคลเอนต์บัญชีผู้ใช้ Telethon SQLite เก็บรักษาบันทึกเหตุการณ์ที่ลงนามและสามารถเพิ่มข้อมูลได้เท่านั้น รวมถึงการตั้งค่าการทำงานที่สามารถปรับเปลี่ยนได้ Vault ที่เข้ารหัสเก็บรักษาข้อมูลรับรอง API, StringSession และกุญแจลงนาม ส่วนหน้า (frontend) เป็น HTML/CSS/JavaScript ที่รวมเป็นไฟล์เดียว: ไม่จำเป็นต้องสร้างด้วย Node, CDNs หรือดาวน์โหลดส่วนหน้า ในระหว่างการทำงาน

โมดูล ความรับผิดชอบ
collector.py การอนุญาต, การเลือกบทสนทนา, การอัปเดต, ภาพถ่ายหน้าจอ, แถวรอสื่อ, การตรวจสอบการเชื่อมต่อ
interactions.py / telegram_client.py การดำเนินการของแผงควบคุมที่ชัดเจน ใบยืนยันที่ลงนาม ID คำขอที่คงอยู่ และนโยบายการเรียกกลับ/เข้าร่วมใหม่ตามงานเฉพาะ
message_content.py การเปรียบเทียบข้อความที่สามารถสังเกตได้ โดยไม่รวมข้อมูลเมตาดาต้าการเข้าถึงระบบขนส่ง
workers.py รอให้กระบวนการส่งออกไฟล์เสร็จสิ้นก่อนดำเนินการล้างข้อมูลหลังการยกเลิก
store.py ธุรกรรม WAL, ลำดับเหตุการณ์, ตัวกรองการค้นหา, การตั้งค่าการทำงาน
security.py การสร้างไฟล์ส่วนตัว, ห้องเก็บข้อมูลที่เข้ารหัส, การลงนามด้วย Ed25519, การล็อกด้วยกระบวนการเดียว
evidence.py การส่งออกบันทึกแบบครบถ้วน, ไฟล์ที่สร้างจากบันทึกต้นฉบับ, จุดตรวจสอบ, การตรวจสอบไฟล์แนบ
verify.py เครื่องมือตรวจสอบแบบสแตนด์อโลนและอ่านอย่างเดียว (stdlib + cryptography): ไฟล์เก็บถาวร, ขอบเขตการบันทึก, บันทึกพยาน และโพสต์ในช่อง, ไฟล์โปรไฟล์
app.py API ที่ได้รับการยืนยัน, วงจรชีวิต, การตรวจสอบความถูกต้องของคำขอ, แผงควบคุมแบบคงที่
profiles.py เครื่องมือรวบรวมบัญชีหลายบัญชี, ระบบควบคุมการเข้าถึงร่วมกัน, วงจรชีวิตตามพื้นที่ทำงาน
access.py การกำหนดขอบเขตการให้สิทธิ์, การตรวจสอบสิทธิ์, การจำกัด IP, การจำกัดจำนวนเซสชัน และคอนโซลผู้ดูแลระบบ
proxy_catalog.py ภาพถ่ายหน้าจอฟีดสาธารณะ การตรวจสอบการส่งข้อมูล กลุ่มพร็อกซีที่ใช้ร่วมกัน และการคัดเลือกตามสถานะความพร้อม
provenance.py การวัดผลที่ลงนามแล้วเกี่ยวกับตัวตนของกระบวนการรับข้อมูล, รหัส และส่วนที่พึ่งพา
network.py เส้นทางที่ได้รับการยืนยันสำหรับแต่ละพื้นที่ทำงาน; สถานะและหลักฐานที่ได้รับการปกปิด; ตัวเลือกการส่งข้อมูล Telethon
sessions.py การแปลงแบบอ่านอย่างเดียวแบบออฟไลน์ของสคีมา SQLite Telethon ที่ได้รับการตรวจสอบแล้ว
account_import.py การตรวจจับและปรับให้เป็นมาตรฐานในหน่วยความจำของไฟล์บัญชีที่รองรับและไฟล์ JSON
tdata.py โปรแกรมอ่านไฟล์ ZIP TData แบบทันสมัยที่มีขอบเขตจำกัด, การตรวจสอบความถูกต้องของค่าเช็กซัม/การถอดรหัส, ไม่มีการสกัดข้อมูล
doctor.py การตรวจสอบความพร้อมในท้องถิ่นโดยไม่ต้องเก็บข้อมูล ลงชื่อเข้าใช้ หรือติดตั้งแพ็กเกจ
download.py การส่งออกข้อมูลแบบสตรีมมิ่งที่ได้รับการยืนยัน พร้อมการอ่านที่จำกัดและไม่มีการเขียนทับ
monitoring.py นโยบายเหตุการณ์ที่ได้รับการตรวจสอบความถูกต้องสำหรับแต่ละพื้นที่ทำงาน และกฎสำหรับไฟล์แนบตามประเภท ซึ่งถูกแชร์โดยผู้จัดการ สถานะ และใบยืนยันที่ลงนาม
scope.py ขอบเขตการสังเกต (การสนทนาที่เลือกไว้, โฟลเดอร์ Telegram, บัญชีทั้งหมด), ประเภทแหล่งข้อมูล, การยกเว้น, ระดับการตรวจสอบซ้ำ
dossier.py โปรไฟล์ผู้ใช้ตามการสนทนาที่สร้างขึ้นจากบันทึกที่เก็บไว้: ข้อมูลพร้อมอ้างอิงบันทึก, SHA-256/pHash ของรูปโปรไฟล์, การสกัดข้อความที่กล่าวถึง
witness_api.py โทเค็นพยานแบบอ่านอย่างเดียว และส่วนหัวของบันทึกที่ลงนามแล้ว ซึ่งโทเค็นดังกล่าวสามารถดึงมาได้
witness.py กระบวนการพยานอิสระ: กุญแจและบันทึกเป็นของตนเอง, การตรวจสอบหัวข้อความ, โพสต์ช่องที่ลงนาม, การส่งออก
alerts.py การแจ้งเตือนของ Apprise และรายการแจ้งเตือนของแผงควบคุม
logging_config.py การบันทึกในคอนโซลและการหมุนเวียนข้อมูลวินิจฉัยเซิร์ฟเวอร์สำหรับการเรียกใช้แบบไม่มีหน้าต่าง
static/ อินเทอร์เฟซที่ตอบสนองได้ดี, ประตูเข้าถึงในเครื่อง, ตัวกรอง, รายละเอียด, การส่งออกข้อมูล, การตั้งค่าบัญชี
demo.py บันทึกที่ระบุอย่างชัดเจนว่าเป็นบันทึกสังเคราะห์ และแยกออกจากข้อมูลที่เก็บรวบรวมจริง

ตัวจัดการการสังเกตการณ์จะถูกลงทะเบียนก่อนการเชื่อมต่อ การเก็บข้อมูลแบบเรียลไทม์จะถูกควบคุมโดย ตัวตนของลูกค้าที่ใช้งานอยู่ สถานะการทำงานที่ชัดเจน แหล่งข้อมูลที่เปิดใช้งาน หรือขอบเขตการสังเกตการณ์ (โหมดโฟลเดอร์หรือโหมดบัญชีทั้งหมดจะเพิ่มการสนทนาใหม่เป็นแหล่งข้อมูลในการอัปเดตครั้งแรก) และนโยบาย เหตุการณ์ ลูกค้าที่ถูกปฏิเสธหรือถูกแทนที่ ไม่สามารถส่งการอัปเดตแบบเรียลไทม์ได้ ปฏิกิริยาดิบและการอัปเดตสมาชิก รักษาขีดจำกัดการมองเห็นไว้ เนื้อหาข้อความที่เข้ามาและงานสื่อที่คงอยู่ของมัน ถูกบันทึกไว้พร้อมกัน งานเหล่านี้รักษาตัวระบุ TL ดั้งเดิมและผูกแฮชของมันกับ การสังเกตข้อความที่ลงนามแล้ว ความหมายของผู้ส่ง/ผู้แก้ไข/ผู้ลบถูกแยกออกจากกัน

แต่ละพื้นที่ทำงาน (workspace) รับบัญชีได้หนึ่งบัญชี และมีไดเรกทอรีและตัวตนสำหรับการลงนามเป็นของตัวเอง พื้นที่ทำงานหลักยังคงอยู่ที่ราก (root) เพื่อความเข้ากันได้; พื้นที่ทำงานเพิ่มเติมจะอยู่ใน profiles/<id>/. โทเค็นแบบ bearer เดียวควบคุมการติดตั้งทั้งหมด; พื้นที่ทำงานไม่ใช่ ผู้เช่าการอนุญาตที่แยกต่างหาก กลไกล็อกกระบวนการปกป้องไดเรกทอรี; กลไกล็อกฐานข้อมูล จัดลำดับการแทรกเหตุการณ์แบบซีเรียล แต่ละการเพิ่มข้อมูลจะบันทึกแบบซิงโครนัส ไปยัง SQLite WAL ในโหมดซิงโครนัสแบบเต็ม (FULL synchronous mode) ตัวทริกเกอร์การอัปเดต/ลบเหตุการณ์ป้องกัน การแก้ไขข้อมูลโดยแอปพลิเคชันทั่วไป; ผู้ดูแลระบบไฟล์ยังคงอยู่ภายในขอบเขตความเชื่อถือ

การอนุญาต API ใช้โทเค็นแบบ bearer token การดำเนินการเข้าสู่ระบบถูกจัดเรียงเป็นลำดับและจำกัดเวลา การอัปโหลดบัญชีใช้ขีดจำกัดตัวเนื้อหาที่เข้ารหัส (encoded-body) เฉพาะ 12 MiB และขีดจำกัดไฟล์ที่ถอดรหัส (decoded-file) 8 MiB; คำขอ API ปกติยังคงใช้ขีดจำกัด 16 KiB การแปลงข้อมูลทำงานในเธรด ผู้ทำงาน เก็บการอัปโหลดไว้ในหน่วยความจำ และส่งข้อมูลที่ปรับให้เป็นมาตรฐานกลับไปยัง เบราว์เซอร์ที่ผ่านการยืนยันตัวตน การเข้าสู่ระบบด้วย QR มีตัวเลือกต่อเวิร์กสเปซ ตัวระบุที่มีอายุสั้น งานรอ และการยกเลิกอย่างชัดเจน เฉพาะการอนุญาตที่ได้รับการยอมรับเท่านั้นที่จะกลายเป็นไคลเอนต์ที่ใช้งานอยู่ Telegram FloodWait จะถูกส่งคืนพร้อมค่า Retry-After; ข้อมูลรับรองและข้อความข้อผิดพลาด RPC แบบดิบจะไม่ถูกเปิดเผยในข้อผิดพลาด API การส่งออกทำงานนอกวงจรเหตุการณ์แบบอะซิงโครนัส และถูกจัดลำดับตามพื้นที่ทำงาน มันส่งสตรีมภาพสแนปช็อตการอ่านที่เสถียร และสามารถ ทำงานร่วมกับกระบวนการเขียน WAL ที่กำลังดำเนินอยู่ได้ ตัวเก็บข้อมูลพื้นที่ทำงานใช้ร่วมกันในกระบวนการ/วงจรเหตุการณ์

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

สำหรับคำอธิบายที่มุ่งเน้นผู้ใช้งาน โปรดดูวิธีการทำงานของระบบการเก็บข้อมูล รวมถึงรูปแบบบัญชีและรูปแบบเซสชัน

การตั้งค่าเครือข่ายถูกเก็บไว้ใน vault ที่เข้ารหัส การใช้ route จะปิด ไคลเอนต์เก่าและยกเลิกการเข้าสู่ระบบที่ยังไม่เสร็จสิ้น; การเชื่อมต่อในภายหลังจะใช้ route นั้นโดยไม่มี การเปลี่ยนไปใช้ระบบสำรองโดยตรง การติดตั้งด้วยกุญแจภายนอกใหม่จะสร้างกุญแจ Fernet ของแต่ละพื้นที่ทำงาน ด้วย HKDF-SHA256 จากไฟล์กุญแจหลักและ salt แบบสุ่มที่เก็บไว้ สิ่งนี้ช่วยปกป้อง ข้อมูลลับแยกจากไดเรกทอรีข้อมูล ไม่ใช่เนื้อหาบันทึก/สื่อในรูปแบบข้อความธรรมดา

การเข้าสู่ระบบเดโมในเครื่องใช้ความสามารถของกระบวนการที่สร้างขึ้นแยกต่างหาก ไม่เคยใช้ โทเค็นแผงที่ตั้งค่าไว้ การออกและรับโทเค็นต้องอยู่ในโหมดเดโมอย่างชัดเจน ใช้รูทสังเคราะห์ โดยไม่มีพื้นที่ทำงานเพิ่มเติมหรือเซสชันที่ได้รับอนุญาต ใช้ peer/Host แบบ loopback ไม่มี เฮดเดอร์การส่งต่อพร็อกซี และไม่มีการร้องขอข้ามต้นทางจากเบราว์เซอร์ API แบบสดจะรักษาการยืนยันตัวตนแบบ bearer และปฏิเสธการเปลี่ยนแปลงการเก็บข้อมูลในโหมดเดโม