
دردشة ويب سرية من خفية مع تشفير قوي
يتيح لك 0FC تشغيل دردشة جماعية آمنة داخل المقبض مع غرف الدردشة المعزولة ، مع وجود بعض الميزات الخاصة:
- من طرف إلى طرف لغرفة دردشة محددة: لا يمكن أن يكون الخادم أفضل من هجوم DOS
- يعتبر الخادم الحد الأدنى من المنطقة الموثوق بها ، حيث تحدث جميع العمليات المهمة على جانب العميل:
- يتم إنشاء مفاتيح سريعة الزوال المستخدمة لحماية حركة مرور غرفة الدردشة داخل متصفح مالك الغرفة ونشرها إلى البقية
- يتم إنشاء الرموز السرية ، المستخدمة لإمكانية الوصول إلى غرفة الدردشة ، على جانب العميل (على الرغم من أن جزءًا من التحقق يحدث على جانب الخادم)
- أثناء مشاركة المفتاح ، يتم حماية كل رسالة خدمة بواسطة المفاتيح ، مستمدة من بيانات عشوائية لأكثر من طرف واحد
- يتم تشفير الرسائل الصادرة وإرسالها مرة واحدة فقط (جميع أعضاء الغرفة يشاركون نفس المفتاح المتماثل)
- يتم استخدام رمز الوصول السري مرة واحدة (تم حذفه بعد تأكيد المفتاح)
بدأ 0FC كملعب اختبار لبعض حالات الاستخدام المتطورة لـ Themis/WebThemis ، ولكنها أصبحت مثيرة للاهتمام بما يكفي لإصدارها كقطعة منفصلة من التعليمات البرمجية.
هام: لكي تعتبر آمنة حقًا ، يجب التحقق من صحة 0FC من قبل أطراف ثالثة ونشرها بشكل صحيح. لا ينبغي الوثوق بأي أداة تشفير دون تدقيق طرف ثالث. قبل حدوث ذلك (إذا حدث ذلك على الإطلاق) ، هناك وصف للبروتوكول في نهاية هذا المستند ، والذي يتيح لك إلقاء نظرة على الأعمال الداخلية لـ 0FC وإصدار حكمك الخاص. نحن أنفسنا على دراية ببعض التهديدات التي نادراً ما لا علاقة لها بالتشفير ، بل إلى الطريقة التي يعمل بها المتصفح (انظر قسم نموذج التهديد في منشور المدونة).
يتم كتابة 0FC الخلفية في Python ، الواجهة الأمامية تعتمد على WebThemis ، لذلك فهي تعمل في المتصفحات المستندة إلى Google Chrome فقط (حتى الآن).
يتم ترخيص 0FC عبر ترخيص Apache 2. سنكون سعداء إذا قمت ببناء شيء بناءً على هذا الرمز وبروتوكول 0FC ؛ إذا كنت ترغب في أي مساعدة في هذا ، اتصل.
اقرأ منشور المدونة لمعرفة المزيد عن 0FC والتقنيات الأساسية.
تثبيت واستخدام
يتكون 0FC من مكونين: خادم وعميل.
خادم 0FC
يتطلب خادم 0FC:
- بيثون 3.4
- pip
- Themis (بناء وتثبيت)
أولاً ، ستحتاج إلى تثبيت تبعيات Python:
pip install -r requirements.txt
بعد القيام بذلك ، يمكنك تشغيل الخادم:
بشكل افتراضي ، سيستمع الخادم إلى المنفذ 5103. لتغيير المنفذ إضافة -p <port> :
python3 server.py -port 333
عميل 0FC
يأتي عميل 0FC بالفعل في / ثابت / مجلد. ضع في اعتبارك أنه يحتوي على مفاتيح الخادم المتشددين ؛ إذا قمت بتجديد المفاتيح ، فستحتاج إلى إعادة بناء العميل (انظر أدناه).
باستخدام 0FC
... يمكنك إنشاء غرفة جديدة ، وإنشاء الرموز المميزة ودعوة الأشخاص للانضمام أو إدخال الرمز المميز الموجود لدخول الغرفة.
إعادة بناء العميل 0FC
إذا كنت ترغب في إعادة ترجمة عميل 0FC (كائن PNACL) بنفسك ، فإليك ما عليك فعله:
- لإنشاء كائن PNACL ، تحتاج إلى تثبيت NACL SDK وإنشاء
PNACL_ROOT متغير ENVIROMANT مع مسار إلى ملفات SDK المثبتة. - مستودع Clone 0FC مع عارضات فرعي من Github:
git clone https://github.com/cossacklabs/0fc
cd 0fc
git submodules update --init --recursive
- بناء webthemis:
- Build 0FC PNACL MODULE:
لقد انتهيت!
بنيان

يتكون 0FC من مكونين كلاسيكيين: العميل والخادم.
العملاء مسؤولون عن:
- عرض واجهة المستخدم للمستخدم
- جميع وظائف إدارة التشفير والثقة
- التواصل مع خادم الترحيل
الخادم مسؤول عن:
- خدمة UI + PEXE (وحدة PNACL) للعملاء عبر HTTP GET
- تشغيل WebSocket Relay Service ، والتي تتلقى الرسائل وتنقلها إلى الجميع.
عبر WebSocket Link ، يتحدث العملاء إلى Server عبر كائن Secursession theris ، والذي يوفر أمان نقل رفيع المستوى. يتم ترميز مفاتيح الخادم إلى العملاء ، لذلك يتم إنشاء الثقة بناءً على الارتباط بين مفتاح الخادم الحقيقي ومفتاح الخادم الذي يتم تغذيته للعميل في الثنائيات.
ضمن هذا الرابط الأثنائي ، يتم إرسال الرسائل التي تُحترم بها SecureCell.
بروتوكول ومخطط

خلق الغرفة
- يقوم مالك الغرفة بإنشاء زوج مفتاح
[client] - يقوم مالك الغرفة بإنشاء مفتاح الغرفة (والذي سيتم استخدامه لتشفير الرسائل في الغرفة)
[client] - يطلب مالك الغرفة الخادم لإنشاء الغرفة ، وتلقي معرف الغرفة في الرد
[client] + [server]
دعوة الآخرين (مشاركة المفاتيح)
- يقوم مالك الغرفة بإنشاء رمز دعوة عشوائي (لمرة واحدة)
[client] - يرسل مالك الغرفة دعوة من بعض القناة خارج نطاق النطاق (مثل البريد الإلكتروني) ، والتي تتضمن دعوة رمزية ومفتاحه العام ومعرف الغرفة
[client] - يتلقى المستخدم رمز الدعوة
[client] - يقوم المستخدم بإنشاء زوج مفتاح
[client] - يقوم المستخدم بإنشاء مفتاح الانضمام العشوائي
[client] - يرسل المستخدم رسالة آمنة إلى مالك الغرفة من خلال الخادم مع مفتاح الانضمام المشفر
[client] - قد يتحقق الخادم من خلال ACL ما إذا كانت هذه الدعوة صالحة وتمرير الرسالة إلى مالك الغرفة
[server] - مالك الغرفة unnraps الانضمام إلى المفتاح
[client] - يرسل مالك الغرفة مفتاح الغرفة المختومة إلى المستخدم من خلال الخادم باستخدام مفتاح الانضمام كمفتاح رئيسي ودعوة الرمز المميز كسياق
[client] - قد يتحقق الخادم من خلال ACL ما إذا كانت هذه الاستجابة صالحة وتمرير الرسالة إلى المستخدم
[server] - يقوم المستخدم بفك مفتاح الغرفة
[client] - يرسل المستخدم رسالة مختومة التأكيد إلى مالك الغرفة.
[client] - المالك ، عند مراجعة المستخدمين ، يوقع رسائل تأكيد المستخدمين على مفتاحه العام ويرسل إلى الخادم
[client] + [server] - يتحقق الخادم من التوقيع ويعتبر المستخدم كما تمت إضافته إلى غرفة الدردشة
[server] - بمجرد دعوة الرمز المميز ، يتم التخلص منه بواسطة مالك الغرفة
[server]
تبادل الرسائل
- أعضاء الغرفة تبادل الرسائل ختمهم مع مفتاح الغرفة. الخادم فقط إعادة توجيه الرسائل المشفرة دون الوصول إلى محتوياتها.
[server]
الإدارة الرئيسية
- يتم إنشاء Keypair لكل غرفة
[client] - يتم تخزين KEYPAIR في التخزين المستمر للمتصفح
[client] - يتم تشفير التخزين المستمر للمتصفح بخلية آمنة (وضع الختم) ، والمفتاح المشتق من كلمة مرور المستخدم ، والمدخلات عند الانضمام إلى الدردشة
[client]
اتصال الخادم
- يتواصل العملاء مع الخادم باستخدام جلسة Secure
[server] - المفتاح العام الموثوق به للخادم متشددين في العملاء
[client] - لا يقوم الخادم بتنفيذ مصادقة العميل ، ويثق تلقائيًا كل مفتاح عميل SS (هذه خطوة واضحة للتصلب إذا كان الأمان أكثر أهمية من كل مكان وعدم الكشف عن هويته)
[server]
الدوران الرئيسي
- كل 100 رسالة (قابلة للتكوين) المرسلة واستلامها ، يقوم مالك الغرفة بإنشاء مفتاح جديد ، ويشفرها بالمفتاح القديم ويرسل رسالة خاصة
[client] - قد لا يأتي مثل هذه الرسائل إلا من مالك الغرفة
[server]
تزامن الغرفة
- يتم الحفاظ على قائمة الأعضاء لكل غرفة كقائمة بالمفاتيح العامة (+مؤشر من هو صاحب الغرفة)
[server] - تحتوي كل غرفة على مالك غرفة (في الأصل ، منشئ الغرفة)
[server] - صاحب الغرفة مسؤول عن الدوران الرئيسي
[client]
تاريخ الدردشة
- يمكّن الخادم العملاء من جلب سجل الدردشة منذ رحيلهم الأخير للأعضاء الذين كانوا على الإنترنت ويعرفون المفاتيح قبل الدوران
[server] - يمكّن الخادم العملاء من جلب سجل الدردشة منذ آخر دوران مفتاح للأعضاء الجدد
[server]
تريد معرفة المزيد؟
اقرأ منشور المدونة لدينا مع بعض الخلفية حول تطوير 0FC واعتبارات أمان مختلفة.