مقال : التشفير باستخدام برنامج GnuPG
تعريف بالبرنامج وطريقة عمله:
يعرف برنامج GNU Privacy Guard باسم GnuPG أو GPG اختصاراً وهو موجود بشكل أساسي في أغلب توزيعات نظام جنو/لينوكس ويوجد منه اصدارات خاصة بأنظمة Unix-like مثل FreeBSD, OpenBSD , Mac OS X, OpenSolaris… كما يوجد منه اصدار خاص بنظام Windows. يعتمد GnuPG على مبدأ التشفير باستخدام المفتاح الغير متناظر تطبيقاً لمعيار OpenPGP في تشفير وفك تشفير الملفات وهو بديل حر لبرنامج PGP التجاري. ماذا يعني الكلام السابق؟ كما نعلم يوجد عدة أنواع من التشفير منها التشفير باستخدام المفتاح المتناظر أي أن المفتاح الذي يشفّر الملف هو نفسه الذي يفك تشفيره لكن بهذه الحالة لنفرض أننا نريد ارسال ملفات هامة لشخص ما عن طريق الانترنت كيف سنتمكن من اعطائه المفتاح الذي شفّرنا به هذه الملفات بطريقة آمنة؟ كيف سنتأكد أن هذا الشخص هو الوحيد القادر على فك تشفير الملفات والاطلاع عليها؟ بهذه الحالة سنختار التشفير باستخدام المفتاح الغير متناظر الذي يتألف من مفتاحين الأول المفتاح العلني Public Key يستخدم في تشفير الملفات التي نريد ارسالها أما المفتاح الثاني هو المفتاح الخاص (أو السري) Private Key ويستخدم في فك تشفير الملفات المشفّر بالمفتاح العلني. بهذه الحالة الملفات المشفّرة باستخدام المفتاح العلني لا يمكن فك تشفيرها الا باستخدام المفتاح الخاص.
ملاحظة: اعتمدت بالشرح على سطر الأوامر بشكل أساسي لأنها الطريقة الأفضل “برأيي” ولأهمية البرنامج بالنسبة لمدراء السيرفرات فغالبا التحكم بالسيرفر يكون عن طريق SSH وليس الواجهة الرسومية, تم التطبيق على نظام GNU/Linux توزيعة Fedora والاصدار 1.4.9 من برنامج GnuPG.
صناعة زوج مفاتيح تشفير:
مافهمناه حتى الآن كل شخص يجب أن يملك مفتاحين الأول علني يتم نشره وارساله للجميع يستخدمه الطرف الآخر في تشفير الملفات والمعلومات التي يريد ارسالها أما الثاني مفتاح خاص يتم الاحتفاظ به في مكان آمن ويستخدم في فك تشفير الملفات المشفرة. لصنع زوج مفاتيح تشفير جديدة نفتح سطر الأوامر وننفذ الأمر:
بعد تنفيذ الأمر السابق سيعمل البرنامج ويطلب منا تحديد نوع المفتاح الذي نريد صنعه, نحدد الخيار الأول (DSA and Elgamal) ثم نضغط Enter ليطلب منا البرنامج تحديد حجم المفتاح, شخصيا أرى الاعدادت الافتراضية مناسبة لذلك سأكتفي بالضغط على Enter مرة أخرى ليظهر لنا كما في الصورة التالية:
يطلب البرنامج تحديد فترة صلاحية المفتاح وهذا طبعا يعود لمدة حاجتنا له وبماذا سنستخدمه, من الممكن عدم تحديد فترة صلاحية وذلك بابقاء القيمة 0 والضغط على زر Enter أو جعل المفتاح صالح ليوم واحد مثلا! نكتب 1 ثم نضغط Enter أما اذا أردنا جعله صالح لأسبوع فقط نكتب 1w , شهر 1m , سنة 1y وهكذا… بالنسبة لي سأبقي الخيار الافتراضي 0 لكي لايتم تحديد فترة صلاحية للمفتاح, سيظهر بعد ذلك رسالة تأكيدية نضغط y لتظهر لنا رسالة تطلب منا ادخال الاسم, الايميل وتعليق عن المفتاح:
أدخل المعلومات بما يناسبك وعندما تنتهي ستظهر رسالة تأكيدية, نضغط حرف O للاكمال بعد ذلك سيطلب منا البرنامج ادخال كلمة سر للمفتاح (تستخدم عند فك التشفير). اكتب كلمة السر التي تريدها وتأكد من تذكرها جيدا فاذا فقدتها لن تتمكن من فك تشفير الملفات وسيصبح مفتاحك عديم الفائدة بعد ذلك سيبدأ البرنامج بصناعة زوج مفاتيح تشفير جديدة وعندما ينتهي سيظهر لك مثل الصورة التالية:
الـ KEY-ID الخاص بهذا المفتاح: 4D3F8269 (هذا المفتاح للتجربة واستخدم بغرض الشرح فقط!)
التعامل مع المفاتيح:
لاستعراض المفاتيح الموجودة في البرنامج نستخدام الأمر:
الأمر السابق سيعرض لنا المفاتيح العلنية فقط المضافة لبرنامج GPG لعرض المفاتيح الخاصة فقط ننفذ الأمر:
الأن في حال أردنا تصدير المفتاح العلني الخاص بنا لارساله لشخص أو وضعه في الموقع/المدونة الخاصة بنا مثلا, ننفذ الأمر:
مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد لينشأ ملف باسم Public.asc هو المفتاح العلني, أما اذا أردنا تصدير المفتاح الخاص Private Key لحفظه في مكان آمن كنسخة احتياطية أو نقله لجهاز آخر, ننفذ الأمر:
أيضا مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد. اذا أردنا اضافة مفتاح جديد لبرنامج GPG لنفرض المفتاح العلني الخاص بموقع iSecur1ty, في البداية نقوم بتحميل المفتاح:
ثم نقوم باضافة المفتاح الى برنامج GnuPG باستخدام الأمر:
لحذف مفتاح علني من البرنامج ننفذ الأمر:
مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد. ولحذف مفتاح سري, نستخدم الأمر:
من ميزات برنامج GnuPG هي امكانية ارسال المفاتيح العلنية لحفظها على سيرفر خاص بحفظ المفاتيح تمكن الجميع من الوصول اليها, نستطيع القيام بذلك بتنفيذ الأمر:
مع اسبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد ارساله وبهذه الحالة يكفي الحصول على الـ KEY-ID الخاص بمفتاح الشخص الذي نريد ارسال المعلومات اليه بعد التأكد من أنه قام بارساله مسبقا للسيرفر ثم نقوم بتحميله واضافته بشكل تلقائي للبرنامج بتنفيذ الأمر:
كذلك نستطيع البحث عن المفتاح العلني الخاص بهذا الشخص في السيرفر باستخدام الأمر:
مع استبدال USER/EMAIL باسم أو ايميل هذا الشخص, على سبيل المثال:
لاضافة المفتاح, نكتب الرقم الخاص به وبهذه الحالة 1 ثم Enter أو نضغط N للانتقال للصفحة التالية في حال ظهر عدد كبير من المفاتيح أو Q للخروج.
تشفير/فك تشفير الملفات:
بعد صناعة زوج مفاتيح تشفير جديدة ومعرفة كيفية التعامل معها علينا معرفة طريقة تشفير/فك تشفير الملفات باستخدام برنامج GnuPG. لنفرض مثلا أننا نريد تشفير ملف passwords.txt وارساله لشخص ما, كل ماعلينا هو اضافة مفتاحه العلني للبرنامج وتنفيذ الأمر:
مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح العلني للشخص الذي نريد ارسال الملف المشفّر اليه لينتج في النهاية ملف جديد مشفّر باسم passwords.txt.gpg لا يمكن فك تشفيره الا باستخدم المفتاح السري الخاص بالشخص الذي أرسلنا الملف اليه مع العلم أننا نستطيع تكرار -r عدة مرات اذا أردنا ارسال الملف لأكثر من شخص وجعل الجميع قادرين على فك تشفير الملف بنفس الوقت:
في حال لم نحدد KEY-ID سيظهر البرنامج رسالة تطلب منك ادخال الـ KEY-ID أو اسم/ايميل الشخص الذي نريد ارسال الملف اليه, كل ماعلينا هو ادخال الـ KEY-ID الذي نريد والضغط على Enter واذا أردنا ارسال الملف لأكثر من شخص ندخل الـ KEY-ID الخاص بجميع الأشخاص واحدا تلو الآخر وعندما تنتهي نضغط زر Enter مرتين ليتم تشفير الملف:
لو لاحظنا الناتج passwords.txt.gpg سيكون ملف مشفّر بصيغة binary غير مقروء ماذا لو احتجنا لأن يكون الملف بصيغة ASCII عبارة عن نص يمكن ارساله عن طريق الايميل مثلا؟ ببساطة نضيف الخيار -a للأمر السابق لينتج ملف باسم passwords.txt.asc:
الآن نستطيع قراءة الملف بشكل عادي جدا وارساله كنص عن طريق الايميل:
أما اذا أردنا فك تشفير ملف مشفّر تم ارساله الينا نستطيع ببساطة تنفيذ الأمر:
بعد التأكد من وجود المفتاح السري الخاص بنا في برنامج GnuPG, الأمر السابق سيظهر الناتج على شاشة الـ Terminal لذلك اذا أردنا فك تشفير الملف وارسال الناتج الى ملف جديد نستخدم الأمر:
التواقيع الرقمية:
لنفرض مثلا أننا سنرسل ملف مشفّر لشخص ما.. في البداية سنقوم بالحصول على المفتاح العلني الخاص بهذا الشخص, اضافته للبرنامج, تشفير الملف الذي نريد ارساله ثم ارسال الملف اليه. السؤال الذي يطرح نفسه كيف سيتأكد هذا الشخص أن الملف الذي استلمه هو نفسه الملف الذي قمنا نحن بارسله؟ هنا يأتي دور التواقيع الرقمية حيث قبل أن نرسل الملف سنقوم بتوقيعه باستخدام المفتاح السري الخاص بنا. وبهذه الحالة عندما يقوم الشخص بفك تشفير الملف ستظهر رسالة تؤكد أننا نحن من أرسلنا الملف وليس شخص آخر, لنقوم بذلك كل ماعلينا هو تنفيذ الأمر:
مع استبدال YYYYYYYY بالـ KEY-ID الخاص بالمفتاح السري الذي سنستخدمه في توقيع الملف و XXXXXXXX بالـ KEY-ID الخاص بالمفتاح العلني للشخص الذي نريد ارسال الملف المشفّر اليه. الآن عندما يقوم هذا الشخص بفك تشفير الملف passwords.txt.gpg ستظهر له رسالة تخبره من الشخص الذي قام بتشفير هذا الملف.
الواجهات الرسومية:
اذا أردنا استخدام البرنامج لسطح مكتب قد يكون استخدام الواجهة الرسومية أسهل علينا, يوجد للبرنامج العديد من الواجهات الرسومية يمكن استخدامها مع البرنامج وهي متوفرة لأكثر من نظام تشغيل وأكثر من سطح مكتب مثل برنامج Gpg4win لنظام ويندوز, Kgpg برنامج خاص بسطح مكتب KDE و Seahorse الواجهة الرسومية الخاصة بسطح مكتب GNOME:
يمكنكم الاطلاع على هذه الصفحة لمزيد من المعلومات عن الواجهات الرسومية المتوفرة كما يوجد اضافات للعديد من البرامج تسهّل علينا التعامل مع GunPG مثل اضافة Enigmail لبرنامج Thunderbird الخاص بادرة الايميل.
عن الكاتب:
عبدالمهيمن الآغا, مؤسس موقع iSecur1ty. مختص بالحماية وأساليب إختبار الإختراق. أملك خبرة في إدارة الشبكات والسيرفرات, تطوير المواقع والبرمجة بلغة Ruby التي برمجت بها عدّة مشاريع وأدوات مفتوحة المصدر.
يسرني كثيرا ان اكون اول من يرد على الموضوع “تفاجئت في المدونة باالتعاليق مغلقة”
صراحة موضوع لا استطيع ان اشكرك اكثر لان التعاليق لا يوصف جماله و منفعته تقبل تحيات من احد يتتبع مواضيعك كل يوم بشوق اتمنى ان ارى بعض المواضيع حول windows 7
طبعا كرما ادا كان لديك الوقت
شكراا لاتغب عنا
الله يحفظك….
موضوع اكثر من رائع الصراحة.. ولكن GnuPG لا يعمل بشكل جيد على نظام ويندوز خصوصاً فيستا.. وهناك برنامج مجاني ايضاً يقوم بنفس العمل (يعمل على ويندوز) وهوا جيد الصراحة اسمة File Assurity OpenPGP.
Salut Br4v3-H34r7,
Je te félicite pour ce tutoriel détaillé. Il pourra service à beaucoup de gens, en effet.
Bon courage et bonne continuation dans ce que tu fais.
Salutations amicales
بالبداية . مبروك افتتاح المدونه ..
والله جميل جداً…
ثاني شي .. يعطيك العافية على الشرح للتشفير ..
تقبل مروري
اعتقد انك تقصد “الموقع” *_*
butterflyoffire أغلب المشتركين هنا لا يتقنون الفرنسية
و أغلبهم من المشرق العربي و أنت قاعد ترد بالفرنسية 😛
very good work ,100‰
hlp with you
good byy
تسلم ايدك على الشرح الجميل ..موضوع روعة
ألـف شكر لك أخوي عبد المهين .. واصل في إبداعاتك
nice one man thx !!!
هل ممكن شرح البرنامج على بيئة الوندوز
موضوع أكثر من رائع..التشفير فعلا انه قسم جميل….عالم التشفير مفيد جدا..شكرا على الشرح الجميل وانا صراحه اعطيك تقييم ممتاز…تقبل تحياتي..السهم الأسود
يعني البرنامج احسن استعمال له في بيئة اللينكس و لكن ماذا عن الويندوز؟
يسرني كثيرا ان اكون اول من يرد على الموضوع “تفاجئت في المدونة باالتعاليق مغلقة”
السلام عليكم و رحمة الله و بركاته و تعالى
بماذا ينصح في إختيار نوع خوارزمية التشفير: RSA أم DSA and Elgamal، ماذا عن طول المفتاح و خوارزمية التوقيع SHA-256 أم شيء آخر؟
شرح اكثر من رائع!
Thank you so much for this information. It is very nice of you to inform us about this