Signed-off-by: Awiteb <a@4rs.nl>
This commit is contained in:
parent
488dd234f4
commit
a5ff165fc3
1 changed files with 17 additions and 16 deletions
|
@ -62,7 +62,7 @@ add_toc = true
|
||||||
حيث يتم وضع نقطتان رأسيتان `:` بين عنوان الخادم والمنفذ الذي يستمع إليه. سيسهل
|
حيث يتم وضع نقطتان رأسيتان `:` بين عنوان الخادم والمنفذ الذي يستمع إليه. سيسهل
|
||||||
هذا من جعل أسماء الخوادم سهلة التذكر والكتابة.
|
هذا من جعل أسماء الخوادم سهلة التذكر والكتابة.
|
||||||
|
|
||||||
يتم وضعه اسم خادم المرسل في رأس الطلب بأسم `X-OTMP-SERVER` ويجب ان يكون اسم الخادم فقط، على سبيل المثال `example.com`.
|
يتم وضع اسم خادم المرسل في رأس الطلب بأسم `X-OTMP-SERVER` ويجب ان يكون اسم الخادم فقط، على سبيل المثال `example.com`.
|
||||||
|
|
||||||
## مفتاح التشفير المشترك
|
## مفتاح التشفير المشترك
|
||||||
يتم انشاء مفتاح التشفير المشترك عبر خوارزمية [Elliptic Curve Diffie-Hellman] حيث
|
يتم انشاء مفتاح التشفير المشترك عبر خوارزمية [Elliptic Curve Diffie-Hellman] حيث
|
||||||
|
@ -102,7 +102,7 @@ AES-256 CBC، بعد تشفير الرسالة يتم وضع قيمة التهي
|
||||||
[AES-256 CBC] بـ[مفتاح التشفير المشترك] بين مرسل الطلب والخادم، بعد ذلك يتم
|
[AES-256 CBC] بـ[مفتاح التشفير المشترك] بين مرسل الطلب والخادم، بعد ذلك يتم
|
||||||
إضافة الوقت الحالي إلى النتيجة و إدخالها مرة أخرى إلى دالة [Sha256].
|
إضافة الوقت الحالي إلى النتيجة و إدخالها مرة أخرى إلى دالة [Sha256].
|
||||||
|
|
||||||
> يجب ترميز التوقيع بـ[Hex] قبل وضعها في الرأس. يفضل ان يقوم الخادم بإنشاء توقيع
|
> يجب ترميز التوقيع بـ[Hex] قبل وضعه في الرأس. يفضل ان يقوم الخادم بإنشاء توقيع
|
||||||
> الثانية الحالية والثانية السابقة والتحقق إذا كان التوقيع واحداً منهم
|
> الثانية الحالية والثانية السابقة والتحقق إذا كان التوقيع واحداً منهم
|
||||||
|
|
||||||
### شكل البيانات داخل إتصال الـWebsocket
|
### شكل البيانات داخل إتصال الـWebsocket
|
||||||
|
@ -111,7 +111,7 @@ AES-256 CBC، بعد تشفير الرسالة يتم وضع قيمة التهي
|
||||||
- `event`: إسم الحدث، على سبيل المثال إرسال رسالة او تحديث حالة الكتابة.
|
- `event`: إسم الحدث، على سبيل المثال إرسال رسالة او تحديث حالة الكتابة.
|
||||||
- `data`: البيانات الخاصة بالحدث.
|
- `data`: البيانات الخاصة بالحدث.
|
||||||
- `public_key`: وهو العنوان العام الخاص بالمرسل.
|
- `public_key`: وهو العنوان العام الخاص بالمرسل.
|
||||||
- `signature`: توقيع بيانات الحدث، هذا التوقيع يكون بين المرسل وبين الخادم وليس المُستقبل.
|
- `signature`: توقيع بيانات الحدث (data)، هذا التوقيع يكون بين المرسل وبين الخادم وليس المُستقبل.
|
||||||
|
|
||||||
ليكون الشكل النهائي كالتالي (مثال)
|
ليكون الشكل النهائي كالتالي (مثال)
|
||||||
|
|
||||||
|
@ -153,29 +153,28 @@ AES-256 CBC، بعد تشفير الرسالة يتم وضع قيمة التهي
|
||||||
> نسبياً
|
> نسبياً
|
||||||
|
|
||||||
### التواصل الداخلي
|
### التواصل الداخلي
|
||||||
اولاً عند فتحك لعميل التواصل، سوف تقوم بإنشاء تواصل [Websocket] بينك وبين الخادم
|
اولاً **يجب**[^1] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك وبين الخادم
|
||||||
الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص بك، وسوف
|
الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص بك، وسوف
|
||||||
تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.
|
تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.
|
||||||
|
|
||||||
لدينا الآن المرسل alice والمستقبِل bob و كلاهم في الخادم نفسه، سوف يقوم
|
لدينا الآن المرسل alice والمستقبِل bob و كلاهم في الخادم نفسه، سوف يقوم
|
||||||
alice بإرسال طلب Get إلى الخادم يطلب فيه الدردشة مع bob (سوف يقوم الخادم
|
alice بإرسال طلب Get إلى الخادم يطلب فيه الدردشة مع bob، سوف يرد الخادم بأحد الردود التالية إعتماداً
|
||||||
بإضافة bob إلى قائمة alice البيضاء)، سوف يرد الخادم بأحد الردود التالية إعتماداً
|
|
||||||
على حالة alice
|
على حالة alice
|
||||||
|
|
||||||
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
||||||
سوف يرجع الخادم 404 ويعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
||||||
|
|
||||||
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
||||||
سوف يقوم الخادم بإضافة الطلب في جدول طلبات الدردشة **المُستقبلة** ويرجع 200 ويقوم بإرسال طلب الدردشة إلى bob وينتظر رد bob، عندما يرد
|
سوف يقوم الخادم اولاً سوف يقوم الخادم بإضافة bob إلى قائمة alice البيضاء، وبعد ذلك إضافة الطلب في جدول طلبات الدردشة **المُستقبلة** بالنسبة لـbob وسوف يضيفه إلى **المُرسلة** بالنسبة إلى alice ويرجع 200 ويقوم بإرسال طلب الدردشة إلى bob وينتظر رد bob، عندما يرد
|
||||||
bob بالموافقة ام الرفض (عبر إتصال ال [Websocket])، سوف يُعلم الخادم alice بأن
|
bob بالموافقة ام الرفض (عبر إتصال ال [Websocket])، سوف يُعلم الخادم alice بأن
|
||||||
bob وافق او رفض التواصل معه (عبر إتصال الـ [Websocket]). إذا لم يوافق bob سوف
|
bob وافق او رفض التواصل معه (عبر إتصال الـ [Websocket] او إضافته إلى جدول ليعلمه عند تواصله مع الخادم). إذا لم يوافق bob سوف
|
||||||
يقوم الخادم بإضافة alice إلى قائمة bob السوداء، و إذا وافق سوف يتم إضافته إلى القائمة البيضاء.
|
يقوم الخادم بإضافة alice إلى قائمة bob السوداء، و إذا وافق سوف يتم إضافته إلى القائمة البيضاء.
|
||||||
|
|
||||||
#### إذا كان alice في قائمة bob البيضاء
|
#### إذا كان alice في قائمة bob البيضاء
|
||||||
سوف يرجع الخادم 400 ويعلم alice بأنه يمكنه مراسلة bob بشكل مباشر عبر إتصال الـ[Websocket].
|
سوف يرجع الخادم 400 و يُعلم alice بأنه يمكنه مراسلة bob بشكل مباشر عبر إتصال الـ[Websocket].
|
||||||
|
|
||||||
#### إذا كان alice في قائمة bob السوداء
|
#### إذا كان alice في قائمة bob السوداء
|
||||||
سوف يرجع الخادم 403 ويعلم alice انه في قائمة bob السوداء ولا يمكنه الدردشة معه.
|
سوف يرجع الخادم 403 و يُعلم alice انه في قائمة bob السوداء ولا يمكنه الدردشة معه.
|
||||||
|
|
||||||
> يتم تخزين رسائل الطرفين مُشفرة في قاعدة البيانات الخاصة بالخادم
|
> يتم تخزين رسائل الطرفين مُشفرة في قاعدة البيانات الخاصة بالخادم
|
||||||
|
|
||||||
|
@ -185,12 +184,12 @@ alice بإرسال طلب Get إلى `example2.com` يطلب فيه الدردش
|
||||||
بأحد الردود التالية
|
بأحد الردود التالية
|
||||||
|
|
||||||
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
||||||
سوف يرجع الخادم 404 ويعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
||||||
|
|
||||||
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
||||||
سوف يقوم خادم bob بإرسال طلب الدردشة إلى bob او يقوم بتخزين الطلب في جدول طلبات الدردشة **المٌستقبلة**، ويرد عليه بـ200، بعد ذلك يقوم alice بطلب الخادم الخاص به من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة إليه[^1]
|
سوف يقوم خادم bob بإرسال طلب الدردشة إلى bob او يقوم بتخزين الطلب في جدول طلبات الدردشة **المٌستقبلة**، ويرد عليه بـ200، بعد ذلك يقوم alice بطلب الخادم الخاص به من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة إليه[^2]
|
||||||
|
|
||||||
إذا قبل/رفض bob الدردشة سوف يعلم خادم bob خادم alice أن bob قام بقبول/رفض الدردشة، سوف يضع الخادم عنوانه في `X-OTMP-SERVER` و التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب المفتاح العام الخاص به من مسار الخادم[^2].
|
إذا قبل/رفض bob الدردشة سوف يعلم خادم bob خادم alice أن bob قام بقبول/رفض الدردشة، سوف يضع الخادم عنوانه في `X-OTMP-SERVER` و التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب المفتاح العام الخاص به من مسار الخادم[^3].
|
||||||
|
|
||||||
بعد ذلك إذا لم يكن لـalice إتصال [Websocket] سابق مع خادم bob، سوف يقوم بإرسال طلب دردشة
|
بعد ذلك إذا لم يكن لـalice إتصال [Websocket] سابق مع خادم bob، سوف يقوم بإرسال طلب دردشة
|
||||||
ليتم ترقية الإتصال إلى [Websocket]، ونفس المسئلة مع bob إذا اراد التواصل مع
|
ليتم ترقية الإتصال إلى [Websocket]، ونفس المسئلة مع bob إذا اراد التواصل مع
|
||||||
|
@ -214,9 +213,11 @@ alice سوف يقوم بإرسال طلب دردشة ويتم ترقية الإ
|
||||||
|
|
||||||
{{ hr(data_content="وصلات") }}
|
{{ hr(data_content="وصلات") }}
|
||||||
|
|
||||||
[^1]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج.
|
[^1]: طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال [Websocket] معه، ولن يقوم بترقية أي إتصال إلى [Websocket]
|
||||||
|
|
||||||
[^2]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو `/.well-known/oxidetalis/public`
|
[^2]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج.
|
||||||
|
|
||||||
|
[^3]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو `/.well-known/oxidetalis/public`
|
||||||
|
|
||||||
[Websocket]: https://en.wikipedia.org/wiki/WebSocket
|
[Websocket]: https://en.wikipedia.org/wiki/WebSocket
|
||||||
[مفتاح التشفير المشترك]: #mfth-ltshfyr-lmshtrk
|
[مفتاح التشفير المشترك]: #mfth-ltshfyr-lmshtrk
|
||||||
|
|
Loading…
Reference in a new issue