شرح استخدام GPG تحت منصة Linux
معلومة عامة
مصطلح GPG او GNUPG هو اختصار لـ GNU Privacy Guard ، وهو بديل لـ PGP الذى كان مستحوذ علية من قبل شركة سيمانتك ، ( في 29 ابريل 2010، أعلنت شركة سيمانتك عن نيتها للاستحواذ على PGP وأغلق هذا الاستحواذ فى 4 يونيو 2010) مصدر .برنامج GPG هو برنامج مفتوح المصدر يتم تطويرة من خلال حركة البرمجيات الحرة GNU ، وهو يعمل على التشفير والتوقيع باستخدام نظام PGP .
طبيعة برنامج GPG
برنامج GPG مدمج بشكل افتراضى مع اغلب توزيعات لينكس ، بما فيها توزيعة Ubuntu اشهر التوزيعات المستخدمة ، البرنامج يعمل بالكامل من خلال الواجهة النصية (الطرفية) Command-line - الاصدار الثانى من البرنامج يحمل واجهة رسومية والاعدادات المتقدمة تستخدم من الواجهةالنصية Command-line
*** امتدادات الملفات التى ينتجها البرنامج asc / sig / gpg
الامر الرئيسى من الطرفية gpg ، ولمعرفة كافة الاوامر والتفاصيل اكتب الامر man gpg
ولمعرفة الاوامر مباشرة اكتب الامر gpg --help
انشاء زوج مفاتيح جديد Generate PGP keys
يتم انشاء زوج من المفاتح ، احداهما خاص Privet key والاخر عام public key ويتم ذلك من خلال الامر
pgp --gen-key
بعد كتابة الامر يطلب منك اختيار نوع الخوارزمية المستخدمة فى التشفير ، وايضاً يمكنك اختيار عمل مفتاح للتوقيع فقط باختيار الخوارزميات المكتوب امامها Sign only ، والان سنختار الخوارزمية RSA ويمكن ان تكون لزوج المفاتيح معاً (خاص وعام - للتشفير والتوقيع )
سنختارالارقام من 1 الى 4
اختر 1 لخوارزمية RSA ، فهذا الخيار سينشئ مفتاح للتشفير والتوقيع
هنا سيطلب منك طول المفتاح وهى ما يعطى المفتاح قوة اكبر فى التشفير والامان ، تسطيع اختيار ما بين 1024bit الى 4096bit ، انا شخصياً استخدم اعلاهم ، يمكنك كتابة الرقم 4096 او اقل ان اردت
هنا يطلبك منك تحديد تاريخ انتهاء صلاحية المفاتيح ابتداء من التاريخ الحالى ، وبعد تاريخ الانتهاء لا يمكن التشفيربهذا المفتاح ولايمكن التوقيع بهذا المفتاح ، يمكنك ايضاً تعديل صلاحية المفتاح فيما بعد .
*** اذا قمت بكتابة الرقم 0 - سيكون المفتاح صالح مدى الحياة وليس لة تاريخ انتهاء
*** اذا كتبت ارقام مفردة فهذا يعنى عدد ايام - على سبيل المثال ان كتبت رقم 10 ، فهذا يعنى ان المفتاح ستنتهى صلاحيتة بعد 10 ايام من التاريخ الحالى
*** الخيارات التالية هى w للاسابيع ، m للشهور ، y للسنوات ، مثال على ذلك : اذا كتبت 5m ، هذا يعن صلاحية المفتاح 5 اشهر من التاريخ الحالى ، مثال اخر اذا كبت 1y ، هذا يعنى ان صلاحية المفتاح ستنتهى بعد عام من التاريخ الحالى
سيسألك البرنامج ما اذا كان اختيارك السابقة صحيحة بالنسبة لك ، اكتب حرف y للتأكيد
هنا يطلبك منك البرنامج اسمك الحقيقى - لا يشترط كتابة اسمك الحقيقة - من الممكن كتابة اسم شركتك مثلا ، او اى نص اخر ويمكن تعديل هذه التفاصيل بعد انشاء المفتاح
هنا بطلب ادخال بريد الكترونى ، يمكن تخطى هذه الخطوة بالضغط على انتر ، ولكن اضافة البريد الالكترونى فى مفتاحك يعطى مصداقية اكثر ، خصوصاً ان كنت توقع على ملفاتك او رسائلك المرسلة من نفس البريد الالكترونى ، اكتب بريدك الالكترونى او تخطى هذه الخطوة بالضغط على انتر
هنا يطلب ادخال تعليق ، او اى معلومات اضافية تريد ان تظهرها فى مفتاحك كاسم شركتك ، او اى معلومات اخرى ، ممكن تخطى هذه الخطو بالضغط على انتر
واخيراً تظهر رسالة تختار منها احدى خيارات التعديل على ما سبق ، حرف N لتغير الاسم ، حرف C لتغيير التعليق ، حرف E لتغييرالبريد الالكترونى ، حرف O لتأكيد المدخلات السابقة والموافقة على ما تم ادخالة ، وبدأ انشاء المفتاح
ملاحظة : يجب مراعة ان كانت الحروف كبيرة او صغيرة (Capital / Small ) - الحروف فى هذا السطر كلها كبيرة - لو تم كتابة الاحرف صغيرة لن يتم تنفيذ الامر
هنا سيظهر لك نافذة تطلب ادخال كلمة المرور الخاصة بالمفتاح ، اكتب كلمة المرور وستظهر نفس النافذة مرة اخرى لتأكيد كلمة المرور اكتب فيها كلمة المرور مرة اخرى لتأكيدها ، ثم اضغط Ok
الى هنا سيتنهى كل شئ ، ويبدأ البرنامج فى العمل لانتاج Bytes عشوائية لانتاج مفتاحك الجديد ، قد يتطلب الامر بعض الوقت ، استخدم الكمبيوتر بشكل عادى ، فالBytes العشوائية تتكون من حركات استخدامك للجهاز كحركة الماوس ، ما تكتبة على الكى بورد ، تشغيل واغلاق البرامج ، وما الى ذلك حتى تنتهى علملية انتاج المفتاح
هنا ينتهى انشاء المفتاح وستحصل على المعلومات الاتية :
1- رقم المفتاح الاساسى Key ID وهو ايضاً المفتاح الخاص
2- ومفتاح فرعى Sub Key وهو نفسة مفتاحك العام Public Key
3- وبصمة الاصبع Finger Print
الصورة التالية توضح كيفية قراءة هذه المعلومات :
1- pub اختصار لكلمة Public - تشير الى رقم ال Key ID
2- uid اختصار لكلمة User ID - تشير الى الاسم والبريد الالكترونى الذى ادخلتهم
3- sub - تشير الى الـID Sub Key ID - وهو ايضاً رقم مفتاحك العام Public Key
4- درجة التشفير 4096 - حرف الـ R يشير الى ان المفتاح استخدم خوارزمية RSA
5- رقم ال Key ID ويعتبر ايضاً المفتاح الرئيسى لاى مفاتيح فرعية ويسمى ايضاً Main Key هذا المفتاح يستطيع التحكم فى اى اعدادات فى المفاتيح التابعه له والتعديل على تاريخ صلاحيتة لذلك يجب ابقاءة فى أمان - وهو ايضاً يعتبر مفتاحك الخاص Privet Key
6- رقم Sub Key ID وهو يمثل مفتاحك العام Public Key وعند اضافة اى مفاتيح اخرى الى مفتاحك الرئيسى لاحقاً تسمى ايضاً Sub Key ID
7 و 8 - تاريخ انشاء المفاتيح
9- بيانات الـ User ID والمعروفة ايضا بأسم UID
*** بصمة الاصبع Finger Print وهو رقم يحتوى على ارقام وحروف ، يمكن رؤية هذة البصمة عند استدخامك مفتاح عام او خاص ، وذلك للتأكد من هوية المفتاح ، تظهر مرة واحدة فقط بعد الانتهاء من عملية انشاء المفتاح ولتعرف الـ FingerPrint ، فى اى وقت يمكنك استخدام الامر
gpg --fingerprint FileName
مع مراعة تغيير FileName لاسم المفتاح كما فى الصورة التالية
*** يمكنك مراجعة بيانات مفتاحك فى اى وقت باستخدام الامر gpg --list-key
اذا كنت قد قمت بانشاء اكثر من مفتاح ، سيظهر هذا الامر جميع المفاتيح الموجودة ، فاذا اردت اظهار بيانات واحد فقط منهم فيتم كتابة الامر بالاضافة الى اسم المفتاح User ID - UID ، او يمكنك اضافة رقم الـ Key ID
gpg --list-key key ID or Key Name
مع مراعة تغيير key ID or Key Name بأسم المفتاح او رقم المفتاح
كما فى الصورة التالية - (عرض المفتاح بالاسم UID )
والصورة التالية عرض المفتاح بالـ Key ID
طريقة تشفير PGP لملف
يتم التشفير باستخدام المفتاح العام Public key ، وهو المفتاح الذى تعلن عنة للاخرين ليقوموا بتشفير الملفات اوالرسائل التى سترسل لك ، كما يمكنك أنت استخدام المفتاح العام لتشفير ملفاتك او رسائلك للحفاظ عليها من المتطفلين ، او الحفاظ على البيانات السرية عند رفعها على بريدك الالكترونى او على الانترنت بشكل عام .
*** لتشفير الملفات يتم استخدام الامر
gpg --encrypt FileName
مع تغيير [File Name] باسم الملف المراد تشفيرة
نطبق الامر فى المثال التالى ، والمطلوب فية هو تشفير الملف Khaled.txt
ملاحظة : يجب ان تتأكد من ان الطرفية الان على المسار الموجود به الملف المراد تشفيرة
هنا يطلب البرنامج ادخال بيانات المستلمين ، او المفاتيح الخاصة بالاشخاص التى ستقوم بتشفير الملف اليهم
اسم المفتاح User ID وهذا هو المفتاح العام Public Key الذى سيتم التشفير به
بعد اضافة المستلم User ID او بمعنى اخر ، بعد اضافة المفتاح العام Public Key للشخص المستلم ، سيطلب البرنامج اضافة مستلم اخر ، اذا كان التشفير لمفتاح واحد (شخص واحد وفقط ) ، فيمكنك تخطى هذه الخطوة بالضغط على انتر ، وبذلك يكون تم التشفير بنجاح - وستلاحظ ظهور ملف اخر بجانب الملف الاصلى فى مكانة ، مع تغيير الامتداد ليصبح بهذا الشكل khaled.txt.gpg ، الصورة التالية للتوضيح
طريقة فك تشفير PGP للملفات File Encryption
لفك تشفير الملفات يستخدم الامر gpg --decrypt Filename مع استبدال FileName باسم الملف المشفر
ملحوظة : امتدادات الملفات المشفرة باستخدام gpg هى asc /gpg ولكن يمكن للبرنامج فك تشفير الملفات حتى وان لم يكن الامتداد مكتوب مع اسم الملف
ٍهنا ستظهر لك نافذة تطلب منك ادخال كلمة السر الخاصة بمفتاحك الخاص Privet Key بعد تنفيذ الامر ستجد نسخة جديدة من الملف بعد تشفيرة ، وايضاً النسخة الاصلية ستظل موجودة .
تشفير PGP للنصوص Text encryption
النص المشفر ويطلق علية Cipher text ، وهو عبارة عن تحويل نص مقروء الى نص مشفر غير مفهوم ، الفرق بينة وبين تشفير الملفات ، هو ان النص يمكن نقلة بشكلة النصى ، دون الحاجة الى وجود الملف ، بمعنى يمكن ان ارسل النص المشفر فى رسالة بريد الكترونى مثلا بدلاً من ارفاق ملف مشفر ، يمكنك فعل ذلك باستخدام اضافة خيار الى امر التشفير :
a --armor
ويكتب الامر للتشفير بهذا الشكل التالى :
gpg --armor --encrypt FileName
مع مراعاة تغيير FileName الى اسم الملف المراد تشفيرة
بعد ذلك يتم استكما خطوات التشفير بشكل عادى وسينتج الملف الجديد المشفر بهذا الاسم khaled.text.asc
الامتداد asc يعنى ان هذا الملف النصى مقروء ، تستطيع فتحة وقراءة محتواه النصى ولكن النص الموجود فى هذه الملف مشفر وغير مفهوم
معلومة : امتداد asc - تعنى ترميز ASCII وهو نظام الكتابة باللغة الانجليزية والاحرف المتعارف عليها امامك فى الكى بورد مصدر
النص المشفر يظهر كما هو موضح بالصورة التالية
وبهذه الطريقة يمكنك استخدام النص المشفر بدلاً من الملف النصى ، وتستطيع ان تستلم رسائلك النصية بهذه الطريقة بالاتفاق مع الراسل ، ويتم فك تشفيرها بعد وضعها فى اى محرر نصوص وحفظة على الجهاز ، ثم فك تشفيرة باستخدام الامر
gpg --decrypt FileName > OutFile.txt
مع مراعاة تغيير FileName لاسم الملف المراد فك تشفيرة ، و OutFile لاسم الملف بعد فك التشفير على ان يكون بامتداد txt
*** شفرة رسائل pgp يجب ان تحتوى على عنوان بدايه ونهاية لتصبح صالحة كما فى الصورة التالية :
التوقيع Signature
يستخدم التوقيع للتأكد من هوية المرسل ، وهو نفس مبدأ التوقع العادى فى الحياة الحقيقية
للتوقيع 3 حالات فى برنامج GPG ، توقيع مدمج ، وتوقيع منفصل ، والتوقيع على النص
التوقيع المدمج : يتم دمج التوقيع مع الملف ليخرج بصيغة gpg - مثلا توقيع على ملف باسم khaled.txt ، يتحول بعد التوقيع الى khaled.txt.gpg ، مع بقاء الملف الاصلى .
رغم ان الملف غير مشفر ، فقط يحمل توقيعاً الا انه لا يمكن قراءة الملف بدون برنامج GPG او اى برنامج يدعم نظام PGP .
يتم التوقيع باستخدام الامر gpg --sign FileName مع مراعاة تغيير FileName لاسم الملف المراد التوقيع علية كما هو موضح بالصورة التالية :
سيطلب منك كلمة كتابة كلمة مرور مفتاحك الخاص Privet Key ، وبهذا ينتهى التوقيع ويصبح الملف الجديد هو ملف كامل وموقع ولكن لا يمكن قرائتة بدون برنامج GPG او اى برنامج تشفير PGP اخر ، ويكون اسم الملف بهذا الشكل khaled.txt.gpg .
التوقيع المنفصل : يتم التوقيع بشكل منفصل ، ويتم انشاء ملف خاص بالتوقيع بجانب الملف الاصلى المطلوب التوقيع علية ، وهذا يعنى ان ملف التوقيع بدون الملف الاصلى ليس له قيمة.
يتم التوقيع المنفصل باستخدام الامر gpg -b FileName مع مراعاة تغيير FileName باسم الملف المراد التوقيع علية كما هو موضح بالصورة التالية :
سيطلب منك كلمة كتابة كلمة مرور مفتاحك الخاص Privet Key ، وبهذا ينتهى التوقيع ويصبح الملف الجديد ملف منفص عن الملف الاصلى ، وفى هذه الحالة الملف الاصلى يكون ظاهر لاى شخص ، ويكون اسم الملف بهذا الشكل khaled.txt.sig
ملحوظة :غالباً ما يستخدم التوقيع المنفصل فى حالات الملفات غير النصية - كالصور والملفات الصوتية والفيديو ...الخ
التوقيع المنفصل يمكن تحويله الى ملف ASCII ، ليسهل قرائتة وارسال التوقيع على هيئة نص، باضافة الخيار :
a --armor
ليكون شكل الامر فى التوقيع المدمج gpg --armor --sign FileName
وفى التوقيع المنفصل gpg --armor -b FilenName
مع مراعاة تغيير FileName باسم الملف المراد التوقيع علية
وفى كلا الحالتين الملف المخرج سيكون بصيغة asc يمكن فتحة على اى محرر نصوص لاظهار التوقيع بشكلة المشفر ، و يحتوى بداخلة على نص مشفر و على عنوان بداية ونهاية مكتوب بهما كلمة signature بمعنى "توقيع" كما فى الصورة التالية
التوقيع على النص : هذه الطرق تستخدم للنصوص المكتوبة فقط او ملفات txt ، ويكون النص ظاهر بشكل علنى لاى شخص يقرأة ، ولتنفيذ التوقيع على النص يستخدم الامر
gpg --clearsign FileName
مع مراعاة تغيير FileName باسم الملف المراد التوقيع علية ، كما فى الصورة التالية
سيطلب منك كتابة كلمة السر الخاصة بمفتاحك الخاص Privet Key ، بعد ذلك ستجد انه قد تم انشاء نسخة جديدة من الملف المكتوب به النص وسيكون اسمة بهذا الشكل khaled.txt.asc ، عند فتح هذا الملف بمحرر النصوص ستجد الرسالة الاصلية المكتوبة ظاهرة بشكل عادى ومعنونة بعنوان بداية ونهاية يحمل جملة
SIGNED MESSAGE
والتى تعنى "رسالة موقعة"
صورة توضيحية
ملحوظة :اذا قمت باى تعديل فى الرسالة بعد التوقيع حتى وان كان تعديل بسيط كاضافة مسافة او تصحيح املائى ، ستعتبر هذه الرسالة بالنسبة لنظام PGP رسالة مزورة ، يجب التوقيع بعد الانتهاء من اى تعديل بالرسالة
التوقيع والتشفير معاً :
يمكنك دمج الاوامر السابقة لتشفير ملف والتوقيع علية فى آن واحد ، وذلك من خلال دمج خيار التشفير مع خيار التوقيع بالشكل الاتى :
gpg --encrypt --sign FileName
مع مراعاة تغيير FileName باسم الملف المراد تشفيرة وتوقيعة ، كما فى الصورة التالية
كما فى الصورة السابقة سيطلب منك كلمة مرور مفتاحك الخاص Privet Key ، وذلك للتوقيع باستخدام مفتاحك الخاص ، ثم تختار المرسل اليه لتستخدم مفتاحة العامPublic Key فى التشفير
استخراج المفاتيح Export Keys
يتم استخراج المفاتيح لاستخدامها على اجهزة كمبيوتر اخرى ، او للحفاظ عليها من الضياع كحفظها على CD مثلا .
يتكون المفتاح من زوج من المفاتيح احداهما عام Public Key والاخر خاص Privet Key ، كل منهما يخرج على حدى ، وذلك لان المفتاح العام هو فقط من تعطية للاخرين ليقومو بالتشفير باستخدامة ، اما المفتاح الخاص فتستخدمة لفك التشفير او التوقيع وتحتفظ به فى مكان آمن .
*** لاستخراج المفتاح العام public key ، استخدم الامر
gpg --armor --export KeyID or Name ID > FileName.txt
مع مراعاة استبدال KeyID or Name ID بأسم المفتاح او رقم المفتاح الذى ترغب فى استخراجة
ومراعاة استبدال FileName.txt بأسم الملف المخرج الذى تريدة
***نصيحة : يمكنك كتابة الاسم بدون الامتداد txt ولكن يفضل كتابتة الامتداد لسهولة الوصول الية فى انظمة وندوز او غيرها من الانظمة
يمكنك الان فتح الملف المخرج وستجد به نص مشفر به عنوان بدابة ونهاية يحمل الجملة
PUBLIC KEY BLOCK
والتى تعنى كتلة المفتاح العام
صورة توضيحية
*** لاستخراج المفتاح الخاص Privet Key استخدم الامر :
gpg --armor --export-secret-key KeyID or Name ID > FileName.txt
مع مراعاة استبدال KeyID or Name ID بأسم المفتاح او رقم المفتاح الذى ترغب فى استخراجة
ومراعاة استبدال FileName.txt بأسم الملف المخرج الذى تريدة كما هو موضح بالصورة
وكما هو الحال فى المفتاح العام هو نفسة فى المفتاح الخاص
افتح الملف المخرج وستجد به نص مشفر به عنوان بداية ونهاية يحمل الجملة
PUBLIC KEY BLOCK
والتى تعنى كتلة المفتاح الخاص ، كما فى الصور التالية
استيراد / اضافة مفاتيح Import Keys :
استيراد المفاتيح هى عملية مطلوبة لتسجيل مفاتيح الاخرين الذين يتم مراسلاتهم على جهازك ، لتتمكن من تشفير الرسائل لاصحاب تلك المفاتيح ، وان لم تكن تستخدم هذه المفاتيح للتشفير ، ستبقى هذه المفاتيح بمثابة نموذج توقيع لهؤلاء الاشخاص ، ولتتأكد من هويتهم ، وايضاً تستخدم هذه العملية لاستيراد مفاتيحك العامة والخاصة فى حال اردت استخدامها على اجهزة اخرى او ان تم حذفهم لا سبب من الاسباب
يتم استيراد المفاتيح العامة بطريقتين ، اما ان تنقل الكتلة العامة (Public Key Block) وتضعها فى ملف نصى وتحفظة بامتداد txt ثم تقوم باستردادة ببرنامج الـ GPG ، او ان تقوم باسترداد ملف المفتاح على هيئة ملف (الملفات ذات الامتداد gpg او asc) ، ويتم ذلك باستخدام الامر :
gpg --import FileName
مع مراعاة استبدال FileName.txt بأسم الملف الموجود به المفتاح العام ، سواء اكان txt او asc او gpg ، وتظهر النتيجة كما بالشكل التالى
ستظهر فى نتائج الامر رقم المفتاح Key ID للمفتاح العام Public Key الذى قمت باضافتة ، وايضاً اسم المفتاح UID الذى يحمل اسم الشخص وبريدة الالكترونى ، والان هذا المفتاح جاهز لديك لاستخدامة فى التشفير وارسال الرسائل المشفرة لصاحب المفتاح ، او التحقق من الرسائل الموقعة من صاحب هذا المفتاح .
ملحوظة : هذا الامر يستخدم ايضاً لاستيراد مفاتيحك العامة والخاصة بنفس الطريقة
التحقق من التوقيع Verify :
التحقق من التوقيع هو التأكد من ان الرسالة او الملف لم يتم التعديل عليها او التلاعب بها ، او انها مرسلة من الشخص ذاتة الذى تثق فيه فعلاً .
يجب لاتمام عملية التحقق من التوقيع ، يجب ان يكون لديك نموذج لتوقيع الشخص الذى ارسل اليك هذه الرسالة ، والذى يتمثل فى مفتاحة العام Public Key
اذا كان التحقق من التوقيع يتم على توقيع مدمج (ملف بامتداد gpg وهو نفسة الملف الاصلى ) ، او التحقق من ملف نصى Text (توقيع على النص) ، يتم باستخدام الامر :
gpg --verify FileName
مع مراعاة استبدال FileName.txt بأسم ملف التوقيع (ملفات التوقيع يجب ان تكون بصيغة asc او gpg ) ، الصورة التالية تشرح نتيجة الامر
اذا كان التوقيع سليم سيظهر كما فى صورة عبارة Good Signature وهذا يعنى ان هذه الرسالة فعلاً موقعة من الشخص الذى ارسلها ، اذا تم التعديل على الملف او الرسالة سيظهر الاتى :
ستظهر عبارة BAD Signature والتى تعنى توقيع سئ ، وهذا يعنى ان الملف او الرسالة تم التلاعب بها وهى ليست الرسالة او الملف الاصلى ، وبذلك لن تثق فى هذه الرسالة او الملف .
*** اذا كان لديك ملف مرسل اليك مشفر وموقع فى آن واحد ، ستستخدم امر فك التشفير بشكل عادى ، وبعد فك التشفير تظهر لك رسالة فى النهاية تفيد بان التوقيع جيد او مزيف ، كما فى الصورة التالية :
كما يظهر فى نهاية العملية ، يظهر البرنامج صحة التوقيع .