يعد التشفير والتوقيع الرقمي وحماية البيانات مصطلحات شائعة بين محترفي تكنولوجيا المعلومات.
كتبت بالفعل الكثير من المنشورات والمقالات والكتب المثيرة للاهتمام حول هذه المواضيع. بعد قراءة واحد منهم ، قررت أن أجرب يدي في الممارسة. وهكذا ولد المشروع ، الذي سيتم مناقشته أدناه.
موجز التطبيق
يضيف تطبيق 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
، مما يعني أن الحوار قد تم تأسيسه وأن تبادل الرسائل ممكن.
يظهر إنشاء حوار ناجح وتبادل الإشارات في الشكل:

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