TgWitness / التوثيق

مرجع / الأمن والمشروع

الهندسة

مكونات أداة التجميع، ولوحة التحكم، والسجل، والعاملين، و«الشهود»، وكيفية انتقال البيانات بينها.

تستضيف عملية واحدة بلغة Python لوحة FastAPI وأي عدد من مساحات العمل المعزولة، كل منها مزودة بعميل حساب مستخدم Telethon. يحتوي SQLite على سجل أحداث موقّع قابل للإضافة فقط وإعدادات تشغيلية قابلة للتعديل. يحتوي خزينة مشفرة على بيانات اعتماد واجهة برمجة التطبيقات (API) وStringSession ومفتاح التوقيع. الواجهة الأمامية عبارة عن حزمة بسيطة من HTML/CSS/JavaScript: لا حاجة إلى بناء Node أو شبكات توزيع المحتوى (CDNs) أو تنزيلات للواجهة الأمامية أثناء التشغيل.

الوحدة المسؤولية
collector.py التفويض، واختيار الحوارات، والتحديثات، واللقطات، وقائمة انتظار الوسائط، ومراقبة الاتصال
interactions.py / telegram_client.py إجراءات لوحة التحكم الصريحة، والإيصالات الموقعة، ومعرّفات الطلبات الدائمة، وسياسة إعادة المحاولة للاتصال/الانضمام على مستوى المهمة
message_content.py مقارنة مرئية للرسائل، باستثناء بيانات الوصف الوصفية الخاصة بالوصول إلى شبكة النقل
workers.py انتظر حتى ينتهي العاملون من تصدير الملفات قبل إجراء عملية التنظيف بعد الإلغاء
store.py معاملات WAL، سلسلة الأحداث المرتبة، مرشحات الاستعلام، الإعدادات التشغيلية
security.py إنشاء ملفات خاصة، وخزينة مشفرة، وتوقيع Ed25519، وقفل أحادي العملية
evidence.py تصدير السجل الكامل، والمشتقات، ونقاط التحقق، والتحقق من المرفقات
verify.py أداة تحقق مستقلة وقابلة للقراءة فقط (مكتبة قياسية + تشفير): الأرشيفات، والتغطية، وسجلات الشهود، ومنشورات القنوات، وملفات الملفات الشخصية
app.py واجهة برمجة تطبيقات (API) مُصادق عليها، ودورة الحياة، والتحقق من صحة الطلبات، ولوحة التحكم الثابتة
profiles.py أدوات تجميع متعددة للحسابات، ووحدة تحكم في الوصول المشترك، ودورة حياة لكل مساحة عمل
access.py المنح المحددة النطاق، والتحقق من الأذونات، وقيود عناوين IP، وحدود الجلسات، ووحدة تحكم المسؤول
proxy_catalog.py لقطات من الخلاصات العامة، وفحوصات النقل، ومجموعة البروكسيات المشتركة، والاختيار بناءً على حالة الأداء
provenance.py قياسات موقعة للهوية وعمليات الاستحواذ والرموز والتبعيات
network.py مسارات مُثبتة لكل مساحة عمل؛ حالة الأدلة وحذفها؛ خيارات نقل Telethon
sessions.py تحويل مخططات Telethon SQLite التي تمت مراجعتها إلى صيغة قابلة للقراءة فقط دون اتصال بالإنترنت
account_import.py الكشف والتوحيد داخل الذاكرة لملفات الحسابات المدعومة وملفات JSON
tdata.py قارئ TData ZIP حديث ومحدود النطاق، مع التحقق من المجموع الاختباري وفك التشفير، دون استخراج
doctor.py فحوصات الجاهزية المحلية دون الحاجة إلى جمع البيانات أو تسجيل الدخول أو تثبيت حزم البرامج
download.py تنزيل ملفات تصدير متدفقة مصدقة مع قراءات محدودة وبدون الكتابة فوق البيانات
monitoring.py سياسة أحداث مُثبتة لكل مساحة عمل وقواعد مرفقات لكل نوع، يتم مشاركتها عبر المُعالِجين، والحالة، والإيصالات الموقعة
scope.py نطاق المراقبة (المحادثات المختارة، مجلد Telegram، الحساب بأكمله)، أنواع المصادر، الاستثناءات، مستويات إعادة الفحص
dossier.py ملفات تعريف الأشخاص لكل محادثة مبنية على السجلات المحفوظة: حقائق مع مراجع السجلات، ورموز SHA-256/pHash للصور الرمزية، واستخراج الإشارات
witness_api.py رموز «Witness» للقراءة فقط ورأس السجل الموقّع الذي يمكنهم استرجاعه
witness.py عملية الشاهد المستقل: مفتاح وسجل خاصان، والتحقق من الهوية، ومنشورات القناة الموقعة، والتصدير
alerts.py إشعارات Apprise وقائمة إشعارات اللوحة
logging_config.py تسجيل سجلات وحدة التحكم وتشخيصات الخادم الدورية للتشغيل بدون واجهة مستخدم
static/ واجهة سريعة الاستجابة، بوابة وصول محلية، عوامل تصفية، تفاصيل، عمليات التصدير، إعداد الحساب
demo.py يُشار إلى السجل الاصطناعي بوضوح، وهو منفصل عن البيانات الحقيقية المجمعة

يتم تسجيل معالجي المراقبة قبل الاتصال. ويتم تقييد عملية التجميع المباشر من خلال هوية العميل النشط، وحالة التشغيل الصريحة، والمصادر الممكّنة، أو نطاق المراقبة (تضيف أوضاع المجلد أو الحساب بأكمله محادثة جديدة كمصدر عند أول تحديث لها)، وسياسة الأحداث. لا يمكن للعملاء المرفوضين أو الذين تم استبدالهم المساهمة بالتحديثات المباشرة. تحافظ ردود الفعل الأولية وتحديثات العضوية على حدود الرؤية. يتم تسجيل محتوى الرسالة الواردة ومهمة الوسائط الدائمة الخاصة بها معًا. تحافظ المهام على واصف TL الأصلي وتربط هاشه بمراقبة الرسالة الموقعة. يتم فصل دلالات المرسل/المحرر/المسح.

تقبل كل مساحة عمل حسابًا واحدًا ولها دليلها الخاص وهويتها التوقيعية. تظل مساحة العمل الرئيسية في الجذر لضمان التوافق؛ بينما توجد مساحات العمل الإضافية في profiles/<id>/. يتحكم رمز حامل واحد في التثبيت بأكمله؛ ومساحات العمل ليست مستأجرين منفصلين للتفويض. تحمي أقفال العمليات الدلائل؛ بينما تعمل أقفال قاعدة البيانات على تسلسل إدراج الأحداث. يتم تسجيل كل عملية إضافة بشكل متزامن في سجل التغييرات (WAL) لـ SQLite باستخدام الوضع المتزامن الكامل (FULL). تمنع مشغلات تحديث/حذف الأحداث التعديلات العادية على التطبيق؛ ويبقى مسؤولو نظام الملفات داخل حدود الثقة.

تتمثل تفويضات واجهة برمجة التطبيقات (API) في رمز حامل. عمليات تسجيل الدخول متسلسلة ومحددة زمنياً. تستخدم عمليات تحميل الحساب حداً مخصصاً يبلغ 12 ميغابايت للنص المشفر و8 ميغابايت للملف غير المشفر؛ بينما تحتفظ طلبات واجهة برمجة التطبيقات (API) العادية بالحد البالغ 16 كيلوبايت. يتم إجراء التحويل في خيط عمل ، ويحتفظ بالتحميلات في الذاكرة، ويعيد المدخلات المعيارية إلى المتصفح المصادق عليه. يحتوي تسجيل الدخول عبر رمز الاستجابة السريعة (QR) على مرشح لكل مساحة عمل، ومعرّف قصير الأمد، ومهمة انتظار، وإلغاء صريح. لا يصبح العميل النشط سوى التفويض المقبول. يتم إرجاع Telegram FloodWait بقيمة Retry-After؛ ولا يتم الكشف عن بيانات الاعتماد ورسائل أخطاء RPC الخام في أخطاء واجهة برمجة التطبيقات. تعمل عمليات التصدير خارج حلقة الأحداث غير المتزامنة ويتم تسلسلها لكل مساحة عمل. وهي تبث لقطة قراءة مستقرة، ويمكنها التعايش مع عمليات الكتابة المستمرة في WAL. تشترك أدوات تجميع مساحة العمل في حلقة العمليات/الأحداث.

قد تتداخل اللقطات التاريخية الحالية والتحديثات المباشرة. وكلاهما ملاحظات منفصلة، مُصنَّفة حسب المصدر؛ ولا يتم إخفاء التكرارات تلقائيًا. ولا يتم تنفيذ أي استنتاجات من المعرّفات المفقودة، أو النصوص المحذوفة الملفقة، أو التعداد القسري للأعضاء، أو الانضمام التلقائي إلى المجموعات. يتم تنفيذ ذلك.

للاطلاع على الشرح الموجه للمشغلين، انظر كيفية عمل عملية التجميع وأنماط الحسابات والجلسات.

يتم تخزين تكوين الشبكة في الخزينة المشفرة. يؤدي تطبيق مسار ما إلى إغلاق العملاء القدامى وإلغاء عمليات تسجيل الدخول غير المكتملة؛ وتستخدم الاتصالات اللاحقة هذا المسار دون اللجوء المباشر إلى مسار بديل. يستمد التثبيت الجديد الذي يعتمد على مفتاح خارجي مفتاح Fernet لكل مساحة عمل باستخدام HKDF-SHA256 من ملف المفتاح الرئيسي و«ملح» عشوائي مخزّن. وهذا يحمي الأسرار بشكل منفصل عن دليل البيانات، وليس محتويات السجل/الوسائط النصية العادية.

يستخدم إدخال العرض التوضيحي المحلي قدرة عملية تم إنشاؤها بشكل منفصل، ولا يستخدم أبدًا رمز اللوحة المُهيأ. يتطلب الإصدار والقبول وضع العرض التوضيحي الصريح، وجذرًا اصطناعيًا بدون مساحات عمل إضافية أو جلسة معتمدة، ونظير/مضيف مرتد، وبدون رؤوس إعادة توجيه الوكيل، وبدون طلب متصفح عبر الأصول. تحتفظ واجهات برمجة التطبيقات (APIs) الحية بمصادقة حامل وترفض تغييرات التجميع في وضع العرض التوضيحي.