อ้างอิง / ความปลอดภัยและโครงการ
สถาปัตยกรรม
ส่วนประกอบของระบบ ได้แก่ 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 และปฏิเสธการเปลี่ยนแปลงการเก็บข้อมูลในโหมดเดโม