تشفير الرسائل في SecureDialogues

يعد التشفير والتوقيع الرقمي وحماية البيانات مصطلحات شائعة بين محترفي تكنولوجيا المعلومات.


كتبت بالفعل الكثير من المنشورات والمقالات والكتب المثيرة للاهتمام حول هذه المواضيع. بعد قراءة واحد منهم ، قررت أن أجرب يدي في الممارسة. وهكذا ولد المشروع ، الذي سيتم مناقشته أدناه.


موجز التطبيق


يضيف تطبيق SecureDialogues مستوى من التشفير للرسائل التي يتم إرسالها من خلال خدمات مثل Gmail . ينفذ التطبيق نفسه تفويضًا للخدمات التي تم تكوينها باستخدام بروتوكول OAuth2 ، ويستقبل ويرسل الرسائل. في جوهره ، هو برنامج مراسلة منتظم يوفر حماية تشفيرًا للرسائل ، ما لم يكن من الممكن استخدام إحدى خدمات الطرف الثالث للنقل.


يتم تشفير البيانات الموجودة على القرص الثابت باستخدام خوارزمية AES باستخدام مفتاح 256 بت ، والذي يتم استخراجه من كلمة المرور التي تم إدخالها عند بدء التشغيل ، ويتم استخدام RSA للتوقيع الرقمي. يتم تشفير رسائل المستخدم باستخدام مفتاح جلسة 256- بت AES .


تتوفر أكواد المصدر على الرابط ، ويكي المشروع .


يتوفر تشغيل التطبيق في حاوية عامل الميناء ، والمزيد على الرابط .


الغرض من الخلق


تم إنشاء التطبيق لغرض محدد للغاية - كان من الممتع بالنسبة لي العمل مع التشفير في مشروع عملي. وليس بطريقة بسيطة ، مثل "أدخل النص هنا ، ولكن هنا التقط الرسالة المشفرة" ، ولكن يوجد توقيع رقمي ، وتشفير غير متماثل ، ومفاتيح الجلسة وأشياء أخرى مثيرة للاهتمام. لذلك ، تم اختيار مشروع المراسلة.


في حالة عدم وجود البنية الأساسية اللازمة لإرسال الرسائل ، يتم تفويض هذه الوظيفة إلى الخدمات الحالية مثل Gmail أو VKontakte .


وصف واجهة


عند بدء تشغيل التطبيق لأول مرة ، سيطلب منك إدخال كلمة مرور:



يتم استخدام كلمة المرور هذه لتشفير البيانات المخزنة على القرص الصلب ، مثل: مفاتيح RSA ، رموز الترخيص لـ OAuth2 ، بيانات عن الخدمات وجهات الاتصال.


لا يتم حفظ الرسائل والمعلومات حول مربعات الحوار ، أي في نهاية التطبيق ، يتم فقد بيانات حول الرسائل المستلمة ومربعات الحوار المفتوحة.


في عمليات الإطلاق اللاحقة ، يطلب التطبيق أيضًا كلمة مرور من أجل فك تشفير وتنزيل البيانات المحفوظة مسبقًا.


عرض نافذة التطبيق الرئيسية:



قبل أن تتمكن من إرسال الرسالة الأولى ، يجب عليك إكمال خطوتين:



أهم شيء ، بسبب إضافة جهة الاتصال قبل بدء التبادل ، هو المفتاح العمومي . يجب أن يوقع المرسل كل رسالة يتم إرسالها بين المستخدمين. إذا تعذر على المستلم التحقق من التوقيع الرقمي باستخدام المفتاح العمومي ، فسيتم تجاهل هذه الرسالة.


أيضا ، يتم استخدام المفتاح العمومي لتشفير مفتاح الجلسة.


بعد الانتهاء من جميع الخطوات الأولية ، يمكنك بدء الحوار. للقيام بذلك ، يوجد زر مطابق في نافذة التطبيق الرئيسية ( المزيد على الويكي ). عند إنشاء محادثة ، يتم إنشاء مفتاح جلسة لتشفير جميع الرسائل داخل هذه المحادثة.


يتم عرض جميع مربعات الحوار في النافذة الرئيسية على اليسار. بعد أن يؤكد المحاور الخاص بك على إنشاء حوار ، يمكنك إرسال واستقبال الرسائل فيه:



لإرسال الرسائل أو قراءتها في مربع الحوار المرغوب ، تحتاج إلى تحديدها بالنقر فوق زر الماوس الأيسر.


يتم عرض رسائل المستخدم البعيد على اليسار ، وستظهر لك رسائل على اليمين. إذا لم يتم تسليم الرسالة بعد ، يتم عرضها باللون الرمادي:



يقوم التطبيق بفرز قائمة مربعات الحوار بالترتيب التالي - في الأعلى سيكون هناك مربعات حوار نشطة يسمح بإرسال الرسائل إليها ، وفي أسفلها ستكون هناك مربعات مغلقة. أيضًا ، يتأثر الترتيب بالوقت الذي يتغير فيه مربع الحوار. سيكون الحوار النشط الذي تلقته آخر رسالة قبل كل شيء ، وأول رسالة مغلقة ستكون في الأسفل. لكل حوار ، يتم عرض مؤشر لعدد الرسائل غير المقروءة ، إن وجدت:



يتم تمييز حالة الحوار بلون:


  • مربعات الحوار مغلقة باللون الأحمر
  • تظهر مربعات الحوار النشطة باللون الأخضر ، ويمكنهم إرسال الرسائل
  • الحوارات الرمادية في طور الإعداد.

إليك مثال على شكل رسالة بسيطة تحتوي على نص hellow world! :



تبادل الإشارة


يتكون تبادل الرسائل بين المحاورين A و B من الخطوات التالية:


  • ينشئ الطرف A أمرًا لإنشاء مربع حوار ( CREATE_DIALOG ) CREATE_DIALOG باستخدام مفتاحه الخاص ؛
  • يطلب الطرف B من المستخدم الموافقة على إنشاء حوار ، وإذا وافق المستخدم ، يتم إنشاء مفتاح جلسة T وسلسلة عشوائية R ، والتي يتم تشفيرها بشكل فردي باستخدام المفتاح العمومي A وتوضع في نص الرسالة ( VERIFY_KEY ). تم توقيع الرسالة بالكامل باستخدام المفتاح الخاص B.
  • side A يقوم بفك تشفير مفتاح الجلسة والسلسلة العشوائية ، ويقوم بتشفير السلسلة العشوائية بمفتاح الجلسة ، ويضيف النتيجة إلى KEY_VERIFICATION رسالة KEY_VERIFICATION . علامات الرسالة بأكملها مع مفتاحه الخاص.
  • يقوم الجانب B بفك تشفير السلسلة العشوائية ، وتحقق مما إذا كانت النتيجة تتطابق مع السلسلة R ، وإذا كان كل شيء صحيحًا ، ACCEPT_DIALOG الرسالة الموقعة ACCEPT_DIALOG ، مما يعني أن الحوار قد تم تأسيسه وأن تبادل الرسائل ممكن.

يظهر إنشاء حوار ناجح وتبادل الإشارات في الشكل:



مزيد من التطوير للمشروع


في الوقت الحالي ، يوفر التطبيق بالفعل الإمكانيات الأساسية لتشفير الرسائل والمصادقة عليها من خلال التوقيع الرقمي. لكن قائمة الخدمات المدعومة صغيرة للغاية.


في المستقبل ، من المخطط زيادته. العمل جار بالفعل لإدراج فكونتاكتي فيه.


يوجد أيضًا في المشروع زيادة في محتوى المعلومات لواجهة المستخدم ، مثل إضافة حالة للاتصال بخدمة (نشطة ، خطأ في الاتصال ، وما إلى ذلك).


لا تعمل خوارزمية التحقق من الرسائل المكررة بأفضل طريقة ، ومن المخطط الانتهاء منها.

Source: https://habr.com/ru/post/ar452736/


All Articles