دردشة ويب مشفرة بسيطة. مدعوم من Socket.io ، واجهة برمجة تطبيقات تشفير الويب. هذا المشروع هو مثال على كيفية عمل تشفير جانب العميل وكيف يمكنك دمجه كخدمة دردشة.
خادم Darkwire هو تطبيق Node.js.
يتم كتابة عميل الويب Darkwire.io في JavaScript مع React JS و Redux.
server/ .env.dist client/ .dist
يجب أن يكون لديك اتصال HTTPS لـ Darkwire للعمل لأنه يستخدم API Crypto Browser الذي لا يمكن الوصول إليه إلا على اتصال محلي وخلف اتصال HTTPS.
يمكنك استخدام NVM لتثبيت الإصدار الصحيح من العقدة باستخدام هذا الأمر:
nvm install # If the right node version is not already installed
nvm use
npm install yarn -g # To install yarn
تثبيت التبعيات
$ yarn
ابدأ الخادم والعميل
$ yarn setup
$ yarn dev
فقط قم بتشغيل ما يلي:
$ docker-compose up
سيؤدي ذلك تلقائيًا إلى إنشاء ملفات .env الافتراضية لك.
إنشاء بنيات إنتاج الخادم والعميل
$ yarn build
ابدأ الخادم
$ yarn start
بنه.
$ docker build --tag darkwire.io:latest .
ثم قم بتشغيله. مثال:
$ docker run --init --name darkwire.io --rm -p 3001:3001 darkwire.io
يمكنك استخدام أي من متغيرات البيئة المتاحة في server/.env.dist و client/.env.dist . الافتراضات متوفرة في Dockerfile
يرجى الإبلاغ عن أي مشكلات أمنية إلى [email protected] .
يستخدم Darkwire مجموعة من التشفير غير المتماثل (RSA-OAEP) ، ومفاتيح الجلسة المتماثلة (AES-CBC) ومفاتيح التوقيع (HMAC) للأمان.
فيما يلي نظرة عامة على الدردشة بين أليس وبوب (ينطبق أيضًا على الدردشات الجماعية):
تعمل الدردشات الجماعية بنفس الطريقة لأننا في الخطوة 5 نقوم بتشفير المفاتيح مع المفتاح العام للجميع. عند إرسال رسالة ، فإنها تتضمن مفاتيح مشفرة للجميع في الغرفة ، ثم يختار المستلمون تلك الخاصة بهم بناءً على معرف المستخدم الخاص بهم.
لا يوفر Darkwire أي ضمان بأن الشخص الذي تتواصل معه هو من تعتقد أنه. يمكن دمج وظيفة المصادقة في الإصدارات المستقبلية.
يقوم Darkwire بتشفير المستندات إلى BASE64 باستخدام BTOA ويتم تشفيره بنفس الطريقة التي توجد بها رسائل الدردشة.
حد حجم الملف القابل للتحويل الافتراضي هو 4 ميجابايت ، ولكن يمكن تغييره في ملف .env مع متغير REACT_APP_MAX_FILE_SIZE .
يستخدم Darkwire Socket.io لنقل المعلومات المشفرة باستخدام WebSockets الآمنة (WSS).
يتم تخزين الغرف في الذاكرة على الخادم حتى يغادر جميع المشاركين ، وعندها يتم تدمير الغرفة. يتم تخزين المفاتيح العامة فقط في ذاكرة الخادم طوال مدة حياة الغرفة.
يتم تخزين سجل الدردشة في متصفح كل مشارك ، لذلك يتم محوها بشكل فعال (لهذا المستخدم) عند إغلاق نافذته.