مواضيع ومقالات

مقال : التشفير باستخدام برنامج GnuPG

تم أرشفة هذا المحتوى


يعتبر أمن المعلومات وحمايتها من أكثر الأمور حساسية التي يجب علينا الاهتمام بها والتعامل معها بجدّية خصوصا عندما يتعلق الأمر بالانترنت. سأشرح في هذا المقال كيفية استخدام برنامج GNU Privacy Guard في صناعة زوج مفاتيح تشفير خاصة بك, طرق التعامل معها وكيفية تشفير/فك تشفير الملفات وتوقيعها باستخدام هذا البرنامج.

 

تعريف بالبرنامج وطريقة عمله:

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.

صناعة زوج مفاتيح تشفير:

مافهمناه حتى الآن كل شخص يجب أن يملك مفتاحين الأول علني يتم نشره وارساله للجميع يستخدمه الطرف الآخر في تشفير الملفات والمعلومات التي يريد ارسالها أما الثاني مفتاح خاص يتم الاحتفاظ به في مكان آمن ويستخدم في فك تشفير الملفات المشفرة. لصنع زوج مفاتيح تشفير جديدة نفتح سطر الأوامر وننفذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –gen-key

بعد تنفيذ الأمر السابق سيعمل البرنامج ويطلب منا تحديد نوع المفتاح الذي نريد صنعه, نحدد الخيار الأول (DSA and Elgamal) ثم نضغط Enter ليطلب منا البرنامج تحديد حجم المفتاح, شخصيا أرى الاعدادت الافتراضية مناسبة لذلك سأكتفي بالضغط على Enter مرة أخرى ليظهر لنا كما في الصورة التالية:

GnuPG 1

يطلب البرنامج تحديد فترة صلاحية المفتاح وهذا طبعا يعود لمدة حاجتنا له وبماذا سنستخدمه, من الممكن عدم تحديد فترة صلاحية وذلك بابقاء القيمة 0 والضغط على زر Enter أو جعل المفتاح صالح ليوم واحد مثلا! نكتب 1 ثم نضغط Enter أما اذا أردنا جعله صالح لأسبوع فقط نكتب 1w , شهر 1m , سنة 1y وهكذا… بالنسبة لي سأبقي الخيار الافتراضي 0 لكي لايتم تحديد فترة صلاحية للمفتاح, سيظهر بعد ذلك رسالة تأكيدية نضغط y لتظهر لنا رسالة تطلب منا ادخال الاسم, الايميل وتعليق عن المفتاح:

GnuPG 2

أدخل المعلومات بما يناسبك وعندما تنتهي ستظهر رسالة تأكيدية, نضغط حرف O للاكمال بعد ذلك سيطلب منا البرنامج ادخال كلمة سر للمفتاح (تستخدم عند فك التشفير). اكتب كلمة السر التي تريدها وتأكد من تذكرها جيدا فاذا فقدتها لن تتمكن من فك تشفير الملفات وسيصبح مفتاحك عديم الفائدة بعد ذلك سيبدأ البرنامج بصناعة زوج مفاتيح تشفير جديدة وعندما ينتهي سيظهر لك مثل الصورة التالية:

GnuPG 3

الـ KEY-ID الخاص بهذا المفتاح: 4D3F8269 (هذا المفتاح للتجربة واستخدم بغرض الشرح فقط!)

التعامل مع المفاتيح:

لاستعراض المفاتيح الموجودة في البرنامج نستخدام الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –list-keys

GnuPG 4

الأمر السابق سيعرض لنا المفاتيح العلنية فقط المضافة لبرنامج GPG لعرض المفاتيح الخاصة فقط ننفذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –list-secret-keys

الأن في حال أردنا تصدير المفتاح العلني الخاص بنا لارساله لشخص أو وضعه في الموقع/المدونة الخاصة بنا مثلا, ننفذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –export -a XXXXXXXX > Public.asc

مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد لينشأ ملف باسم Public.asc هو المفتاح العلني, أما اذا أردنا تصدير المفتاح الخاص Private Key لحفظه في مكان آمن كنسخة احتياطية أو نقله لجهاز آخر, ننفذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –export-secret-key -a XXXXXXXX > Private.asc

أيضا مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد. اذا أردنا اضافة مفتاح جديد لبرنامج GPG لنفرض المفتاح العلني الخاص بموقع iSecur1ty, في البداية نقوم بتحميل المفتاح:

[Br4v3-H34r7@iSecur1ty ~]$ wget http://www.isecur1ty.org/iS-Public.asc

ثم نقوم باضافة المفتاح الى برنامج GnuPG باستخدام الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –import iS-Public.asc

لحذف مفتاح علني من البرنامج ننفذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –delete-key XXXXXXXX

مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد. ولحذف مفتاح سري, نستخدم الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –delete-secret-key XXXXXXXX

من ميزات برنامج GnuPG هي امكانية ارسال المفاتيح العلنية لحفظها على سيرفر خاص بحفظ المفاتيح تمكن الجميع من الوصول اليها, نستطيع القيام بذلك بتنفيذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –send-keys –keyserver keys.gnupg.net XXXXXXXX

مع اسبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح الذي نريد ارساله وبهذه الحالة يكفي الحصول على الـ KEY-ID الخاص بمفتاح الشخص الذي نريد ارسال المعلومات اليه بعد التأكد من أنه قام بارساله مسبقا للسيرفر ثم نقوم بتحميله واضافته بشكل تلقائي للبرنامج بتنفيذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –recv-key XXXXXXXX

GnuPG 5

كذلك نستطيع البحث عن المفتاح العلني الخاص بهذا الشخص في السيرفر باستخدام الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –search-keys “USER/EMAIL”

مع استبدال USER/EMAIL باسم أو ايميل هذا الشخص, على سبيل المثال:

[Br4v3-H34r7@iSecur1ty ~]$ gpg –search-keys Br4v3-H34r7

GnuPG 6

لاضافة المفتاح, نكتب الرقم الخاص به وبهذه الحالة 1 ثم Enter أو نضغط N للانتقال للصفحة التالية في حال ظهر عدد كبير من المفاتيح أو Q للخروج.

تشفير/فك تشفير الملفات:

بعد صناعة زوج مفاتيح تشفير جديدة ومعرفة كيفية التعامل معها علينا معرفة طريقة تشفير/فك تشفير الملفات باستخدام برنامج GnuPG. لنفرض مثلا أننا نريد تشفير ملف passwords.txt وارساله لشخص ما, كل ماعلينا هو اضافة مفتاحه العلني للبرنامج وتنفيذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -r XXXXXXXX -e passwords.txt

مع استبدال XXXXXXXX بالـ KEY-ID الخاص بالمفتاح العلني للشخص الذي نريد ارسال الملف المشفّر اليه لينتج في النهاية ملف جديد مشفّر باسم passwords.txt.gpg لا يمكن فك تشفيره الا باستخدم المفتاح السري الخاص بالشخص الذي أرسلنا الملف اليه مع العلم أننا نستطيع تكرار -r عدة مرات اذا أردنا ارسال الملف لأكثر من شخص وجعل الجميع قادرين على فك تشفير الملف بنفس الوقت:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -r XXXXXXXX -r XXXXXXXX -e passwords.txt

في حال لم نحدد KEY-ID سيظهر البرنامج رسالة تطلب منك ادخال الـ KEY-ID أو اسم/ايميل الشخص الذي نريد ارسال الملف اليه, كل ماعلينا هو ادخال الـ KEY-ID الذي نريد والضغط على Enter واذا أردنا ارسال الملف لأكثر من شخص ندخل الـ KEY-ID الخاص بجميع الأشخاص واحدا تلو الآخر وعندما تنتهي نضغط زر Enter مرتين ليتم تشفير الملف:

GnuPG 7

لو لاحظنا الناتج passwords.txt.gpg سيكون ملف مشفّر بصيغة binary غير مقروء ماذا لو احتجنا لأن يكون الملف بصيغة ASCII عبارة عن نص يمكن ارساله عن طريق الايميل مثلا؟ ببساطة نضيف الخيار -a للأمر السابق لينتج ملف باسم passwords.txt.asc:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -a -r XXXXXXXX -e passwords.txt

الآن نستطيع قراءة الملف بشكل عادي جدا وارساله كنص عن طريق الايميل:

[Br4v3-H34r7@iSecur1ty ~]$ cat passwords.txt.asc

GnuPG 8

أما اذا أردنا فك تشفير ملف مشفّر تم ارساله الينا نستطيع ببساطة تنفيذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -d passwords.txt.gpg

بعد التأكد من وجود المفتاح السري الخاص بنا في برنامج GnuPG, الأمر السابق سيظهر الناتج على شاشة الـ Terminal لذلك اذا أردنا فك تشفير الملف وارسال الناتج الى ملف جديد نستخدم الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -d passwords.txt.gpg > passwords.txt

 

التواقيع الرقمية:

لنفرض مثلا أننا سنرسل ملف مشفّر لشخص ما.. في البداية سنقوم بالحصول على المفتاح العلني الخاص بهذا الشخص, اضافته للبرنامج, تشفير الملف الذي نريد ارساله ثم ارسال الملف اليه. السؤال الذي يطرح نفسه كيف سيتأكد هذا الشخص أن الملف الذي استلمه هو نفسه الملف الذي قمنا نحن بارسله؟ هنا يأتي دور التواقيع الرقمية حيث قبل أن نرسل الملف سنقوم بتوقيعه باستخدام المفتاح السري الخاص بنا. وبهذه الحالة عندما يقوم الشخص بفك تشفير الملف ستظهر رسالة تؤكد أننا نحن من أرسلنا الملف وليس شخص آخر, لنقوم بذلك كل ماعلينا هو تنفيذ الأمر:

[Br4v3-H34r7@iSecur1ty ~]$ gpg -s -u YYYYYYYY -r XXXXXXXX -e passwords.txt

مع استبدال YYYYYYYY بالـ KEY-ID الخاص بالمفتاح السري الذي سنستخدمه في توقيع الملف و XXXXXXXX بالـ KEY-ID الخاص بالمفتاح العلني للشخص الذي نريد ارسال الملف المشفّر اليه. الآن عندما يقوم هذا الشخص بفك تشفير الملف passwords.txt.gpg ستظهر له رسالة تخبره من الشخص الذي قام بتشفير هذا الملف.

[Br4v3-H34r7@iSecur1ty ~]$ gpg -d passwords.txt.pgp

 

GnuPG 9

 

الواجهات الرسومية:

اذا أردنا استخدام البرنامج لسطح مكتب قد يكون استخدام الواجهة الرسومية أسهل علينا, يوجد للبرنامج العديد من الواجهات الرسومية يمكن استخدامها مع البرنامج وهي متوفرة لأكثر من نظام تشغيل وأكثر من سطح مكتب مثل برنامج Gpg4win لنظام ويندوز, Kgpg برنامج خاص بسطح مكتب KDE و Seahorse الواجهة الرسومية الخاصة بسطح مكتب GNOME:

GnuPG 10

يمكنكم الاطلاع على هذه الصفحة لمزيد من المعلومات عن الواجهات الرسومية المتوفرة كما يوجد اضافات للعديد من البرامج تسهّل علينا التعامل مع GunPG مثل اضافة Enigmail لبرنامج Thunderbird الخاص بادرة الايميل.

عن الكاتب:


عبدالمهيمن الآغا, مؤسس موقع iSecur1ty. مختص بالحماية وأساليب إختبار الإختراق. أملك خبرة في إدارة الشبكات والسيرفرات, تطوير المواقع والبرمجة بلغة Ruby التي برمجت بها عدّة مشاريع وأدوات مفتوحة المصدر.

مقالات ذات صلة

‫17 تعليقات

  1. يسرني كثيرا ان اكون اول من يرد على الموضوع “تفاجئت في المدونة باالتعاليق مغلقة”
    صراحة موضوع لا استطيع ان اشكرك اكثر لان التعاليق لا يوصف جماله و منفعته تقبل تحيات من احد يتتبع مواضيعك كل يوم بشوق اتمنى ان ارى بعض المواضيع حول windows 7
    طبعا كرما ادا كان لديك الوقت
    شكراا لاتغب عنا
    الله يحفظك….

  2. موضوع اكثر من رائع الصراحة.. ولكن GnuPG لا يعمل بشكل جيد على نظام ويندوز خصوصاً فيستا.. وهناك برنامج مجاني ايضاً يقوم بنفس العمل (يعمل على ويندوز) وهوا جيد الصراحة اسمة File Assurity OpenPGP.

  3. 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

  4. بالبداية . مبروك افتتاح المدونه ..
    والله جميل جداً…

    ثاني شي .. يعطيك العافية على الشرح للتشفير ..

    تقبل مروري

  5. butterflyoffire أغلب المشتركين هنا لا يتقنون الفرنسية
    و أغلبهم من المشرق العربي و أنت قاعد ترد بالفرنسية 😛

  6. موضوع أكثر من رائع..التشفير فعلا انه قسم جميل….عالم التشفير مفيد جدا..شكرا على الشرح الجميل وانا صراحه اعطيك تقييم ممتاز…تقبل تحياتي..السهم الأسود

  7. السلام عليكم و رحمة الله و بركاته و تعالى
    بماذا ينصح في إختيار نوع خوارزمية التشفير: RSA أم DSA and Elgamal، ماذا عن طول المفتاح و خوارزمية التوقيع SHA-256 أم شيء آخر؟

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى