Skip to Content

مقدمة في التشفير باستخدام GNU Privacy Guard

التشفير : حماية البيانات و الخصوصية باستخدام GNUPG

by Tarek (Warrior101) Amr

التشفير (Encryption):

التشفير هو عملية يتم فيها تحويل نص من الكلمات أو الحروف العادية إلى نص مشفر بالرموز أى تحويل نص عادي يمكن قراءته إلى رموز معقدة لا يمكن قراءتها. و في المعادلتين التاليتين توضيح أكثر لهذه العملية:

1- CypheredMessage = Encrypt (Key1, PlainMessage)   --> Encryption
2- PlainMessage = Decrypt (Key2, CypheredMessage)   --> Decryption

حيث:

PlainMessage
نص عادى يمكن قرائته
CypheredMessage
نص مشفر
Encrypt function
دالة أو خوارزمة تستخدم للتشفير و تعتمد على (النص العادى, مفتاح التشفير) ء
Decrypt function
دالة أو خوارزمة تستخدم لفك التشفير و تعتمد على (النص المشفر, مفتاح فك التشفير) ء
Key1
مفتاح التشفير
Key2
مفتاح فك التشفير

و يمكن تقسيم أنظمة التشفبر إلى قسمين رئيسيين

متماثل (Symmetric)
يستخدم مفتاح تشفير سرى (private key) حيث يكون كلا من Key1 و Key2 متماثلان.
غير متماثل (Asymmetric)
يستخدم مفتاح تشفير علنى (public key) حيث يكون كلا من Key1 و Key2 مختلفان.

التشفير بالمفاتيح العلنية (Public Key Cryptography)

هونظام تشفير غير متماثل يكون لكل طرف فيه زوج من المفاتيح (علنى و سرى) و يتبادل الطرفان المفاتيح العلنىة فقط لكن استخدام المفاتيح السرية ضرورى لكل طرف.

و يمكن بسهولة من الناحية العملية استنتاج المفتاح العلنى من المفتاح السرى بينما يكاد يكون العكس مستحيل أو بمعنى أدق في غاية الصعوبة لذا نستطيع أن نقول أن أحد عوامل قوة التشفير هو مدى صعوبة هذه العملية.

التوقيع الرقمى (Digital Signature)

هي عملية أخرى عن طريقها تتمكن من إدراج ما يشبه توقيعا خاصا بك فيما ترسله من رسائل و بذلك يستطيع المستقبل التأكد من أن هذه الرسالة قد أرسلت منك. كما تمكنه من التأكد من أن هذه الرسالة لم يتم العبث بها من قبل شخص آخر.

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

و المثال القادم يجعل الأمر أكثر وضوحا

لنفرض أن لدينا شخصان أو طرفان أحمد و برعي:

  • بالنسبة لأحمد المفتاح السرى هو KA1 و المفتاح العلنى هو KA2
  • بالنسبة لبرعي المفتاح السرى هو KB1 و المفتاح العلنى هو KB2
  • و سوف يقوم كلا منهما بالإعلان عن المفتاح العلنى (KA2, KB2) الخاص به للآخر و للجميع إن وجد غيرهما-.

و الآن يريد أحمد أن يبعث برسالة مشفرة إلي برعي لذا يستخدم توليفة من KA1 و KB2 لتشفير الرسالة بينما يستخدم برعي توليفة من KB1 و KA2 لفك هذا التشفير. أيضا يستخدم أحمد KA1 لكي يرفق بالرسالة توقيع رقمى و يستطيع برعي التأكد و مراجعة أصل الرسالة بواسطة KA2.

ما هو ال PGP

كلمة PGP هي الأحرف الأولى من (Pretty Good Privacy) وهي آداه طورها Phil Zimmerman تستخدم لتشفير أو إدراج توقيع برسالة أو ملف أو بريد إلكتروني بين الأطراف المختلفة تعتمد على التشفير بالمفاتيح العلنية.

ما هو ال GPG

كلمة GPG هى الأحرف الأولى من (GNU Privacy Guard) و هى بديل حر لPGP طوره مبرمجى مشروع GNU، ستجد نسخة من GPG فى كل توزيعات GNU/Linux


استخدام نظام GPG

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

1- نقوم بعمل المفتاح السرى:

ندخل الأمر التالي

# gpg  --gen-key

يسألك هذا الأمر عن نوع المفتاح الذي تريده.

  • DSA and ElGamal (Default)
  • DSA only (Sign only)
  • ElGamal Only (Sign, and Encrypt)

في هذا المثال سوف نختار النوع الأول.

و بالمناسبة ElGamal هو نوع من التشفير تم تطويره بواسطة عالم مصرى يدعي طاهر الجمال.

بعدها يسأل عن طول المفتاح

  • 512bit
  • 1024bit
  • 2048bit

حيث المفتاح الأطول يكون أكثر أمانا و تعقيدا و لكن أقل كفاءة و سرعة. لذا أعتقد أن 1024 هو أنسب إختيار.

بعدها يسأل عن فترة صلاحية هذا المفتاح أو المدة التي يظل فيها هذا المفتاح متاحا و قابل للاستخدام و سوف نختار 5 سنوات.

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

2- نقوم بعمل المفتاح العلنى:

ندخل الأمر التالي

# gpg  -a --export USER_ID

حيث ال USER_ID هو ذلك ال ID الذي أدخلناه في الخطوة السابقة البريد الإلكتروني - . قم بعدها بنسخ الناتج عن هذا الأمر وضعه في أي مكان بحيث تتاح رؤيته للآخرين أو لباقي الأطراف مثل الصفحة الرئيسية علي موقعك أو أرسله لهم بالبريد الإلكتروني مع ملاحظة أن الطريقة الثانية غير آمنة.

3- إضافة المفاتيح العلنية الخاصة بباقي الأطراف إلي قاعدة البيانات الخاصة بنا:

لنفرض أن أحد هذه الأطراف هو صديق يدعي طارق حيث يمكن أن نحصل علي المفتاح العلنى الخاص به من موقعه أو بمقابلته و معرفة هذا المفتاح منه.

بعد معرفة هذا المفتاح العلنى و بصرف النظر عن طريقة الحصول عليه نضيف هذا المفتاح إلي ملف نسميه مثلا tarek_key.txt ثم ندخل الأمر التالي:

# gpg  --import  tarek_key.txt

ونكرر الخطوة رقم 3 لكل شخص نريد أن نضيف المفتاح العلنى الخاص به إلي قاعدة البيانات الخاصة بنا.

نلاحظ أن كل المفاتيح التي أدخلناها ليست مؤهلة بعد للإستخدام لأنها ليست في موضع ثقة (Trust) ونستطيع تعديل بعض خواص هذه المفاتيح ومنها درجة الثقة فى صحة و سلامة المفتاح عن طريق الأمر التالي:

# gpg  --edit-key  tarek_ID

هذا الأمر يدخلنا في واجهة تفاعلية حيث نستطيع أن نرى ال Fingerprint الخاصة بهذا المفتاح و تغيير حالته إلي Trust وأيضا إدراج توقيع رقمى.

لفحص ال Fingerprint:

>fpr

لنفرض أننا نريد التأكد من أن هذا المفتاح متاح من قبل طارق لذا فمن الممكن الاتصال به علي المحمول و نراجع معه المفتاح ولكن إذا قمت بمراجعة كل ال 1024 بت أعتقد أن فاتورة الهاتف الخاص بك سوف تزداد قليلا. لهذا السبب نستخدم مثل هذا الأمر الذي يظهر مؤشر تطابق موحد لا يتكرر لهذا المفتاح و الذي عن طريقه نتأكد من أن هذا المفتاح متاح من قبل طارق و قابل للاستخدام بدلا من مراجعة 1024 بت.

و الآن و بعد التأكد من صلاحية المفتاح نغير حالته إلي Trust عن طريق :

>trust

و نستطيع أيضا إضافة توقيع لتمييزه عن طريق:

>sign

للخروج من الواجهة التفاعلية:

> quit

لعرض المفتاح في قاعدة البيانات: .

# gpg --list-keys

التشفير

سوف نقوم الآن بعمل تشفير و إدراج توقيع لملف. لنفرض أن الملف هو secret_list.txt و سوف نرسله إلي طارق و بالطبع لابد من وجود المفتاح العلنى الخاص به لدينا.

# gpg --encrypt -r secret_list.txt

يظهر لنا ملف باسم secret_list.gpg و لوضع توقيع عليه:

# gpg --clearsign  secret_list.txt

و لعمل الخطوتان معا:

# gpg -se -r secret_list.txt

فك التشفير

سوف نقوم الآن بفك تشفير ملف أرسل من قبل طارق. لنفرض أن اسم الملف tarek_letter.gpg و حيث أنه لدينا المفتاح العلنى الخاص بطارق:

# gpg --decrypt  tarek_letter.gpg

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

# gpg --verify tarek_letter.sig

خادم المفاتيح المعلنه (public key server):

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

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

و الآن لإرسال مفتاحك المعلن لأحد هذه الخوادم أدخل الأمر التالي:

# gpg   --keyserver  <keyserver name>   --send-key   <key ID>

حيث Keyserver Name هو عنوان خادم المفاتيح

و لكي تحصل علي المفتاح المعلن لشخص آخر أدخل الأمر التالى:

# gpg   --keyserver  <keyserver name>   --recv-keys   <key ID>

مثلا

# gpg  --keyserver pgp.mit.edu --recv-keys B79C3C77

توقيع المفاتيح و حلقة الثقه (ring of trust):

كما ذكرنا سابقا تستطيع الآن الإتصال بأى خادم و الحصول علي المفتاح المعلن لأي شخص تريده عن طريق الأمر السابق. و لكن كيف يمكن أن تتأكد من أن هذا المفتاح هو فعلا المفتاح المعلن الخاص بهذا الشخص؟

لنضرب مثلا:

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

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

لكي تضع توقيعك علي مفتاح شخص ما أدخل الأمر التالي:

# gpg   --sign-key   <key ID>

و كما تلاحظ فالمسألة كلها تعتمد علي الثقه حيث أنه يجب أن تثق في مفتاح واحد علي الأقل و من هنا جاء التعبير (حلقة الثقه) حيث يجب أن تثق في {س} لكي تثق في {ص} و تثق في {ص} لكي تثق في {ع} ...... إلخ الى أن نعود الى {س}


خلاصة

من الواضح الآن مدى أهمية ال PGP و إصداره الحر GnuPG كآداة تتيح لنا سلامة و خصوصية البيانات, و البيانات هنا ربما يقصد بها ملفات نصوص أو كود.

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

ربما تلاحظ في كثير من مواقع البرامج ذات المصادر المفتوحة على سبيل المثال www.kernel.org يوجد ملف إسمه kernel-2.x.x.tar.gz و بجانبه ملف آخر إسمه kernel-2.x.x.tar.gz.sign و الذى يعد نفس الملف الأول و لكنه موقع بواسطة المبرمج أو مجموعة المبرمجيين الذين أصدروه.

و فى النهاية أنصحك بتعلم استخدام آداة ال GnuPG إذا كنت تريد البقاء آمنا وسط عالم الإنترنت الغير آمن

Reference

Kgpg

بعد كل الكلام "المعقد" السابق -لقد قرأته 3 مرات لأفهم ما هذا ;)- سنتحدث عن طريقة بسيطة للقيام بكل الأشياء السابقة باستخدام الواجهة الرسومية

اذا كنت من مستخدمى بيئة سطح المكتب كى دى اى فستجد أداة جميلة تسمى Kgpg (يمكن الوصول اليها من "القائمة الرئيسية --> أدوات خدمية --> Kgpg"، أو من سطر الأوامر kgpg)، وهى عبارة عن واجهة سهلة الإستخدام لأداة GnuPG.

مع Kgpg لن تحتاج لتذكر أوامر GnuPG وخيارات سطر الأوامر، حيث يمكمنك عمل كل شئ ببضع نقرات من الفأرة.

1-انشاء مفتاح تشفير:

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

2-تصدير المفتاح العلنى:

من النافذة الرئيسة لـ Kgpg انقر بالزر اﻷيمن على المفتاح المراد ثم اختر "Export Puplic Keys" من القائمة المنبثقة.

!3-استيراد مفتاح: لتضيف المفتاح العلنى -الخاص بأحد أصدقائك مثلا- اذهب الى النافذة الرئيسة لـ Kgpg ثم قائمة "المفاتيح --> استيراد مفتاح" ثم لتغيير حالة المفتاح الى مفتاح موثوق"Trust" انقر بالزر اﻷيمن على المفتاح واختر "تحرير مفتاح" حيث يمكنك فحص البصمة والتأكد منها من مالك المفتاح وبعدها يمكن تعيين المفتاح كمفتاح موثوق به.

4-تشفير ملف:

هناك عدة طرق لتشفير ملف باستخدام Kgpg:

  • من خلال كونكيورر: انقر نقرا أيمن على الملف ثم اختر "أعمال --> تشفير ملف"، بعدها ستظهر نافذة اختيار مفتاح التشفير -مهم : اذا كنت تشفر الملف لتستخدمه أنت فيما بعد فعليك تشفيره بمفتاحك أن العلنى أما اذا كنت سترسله لشخص ما فعليك تشفيره بالمفتاح العلنى لذلك الشخص ولاحظ أنك لن تتمكن من فك هذا التشفير مرة أخرى-.

  • باستخدام بريمج Kgpg: اسحب الملف المراد تشفيره الى أيقونة Kgpg فى لوحة المهام "system tray"
  • من محرر Kgpg: هو عبارة عن محرر نصوص بسيط يمكنك فتحه بالنقر اﻷيمن على أيقونة Kgpg فى لوحة المهام ثم اختر المحرر.

5-فك التشفير:

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

أما بالنسبة لمستخدمين أسطح المكتب الأخرى غير KDE فيمكنكم العثور على برامج واجهه رسومية للتعامل مع GPG في الصفحة التالية:

مصادر قد تهمك:

Comments

Alaa's picture

هه يا شباب عايزي

هه يا شباب عايزين نجدد الكلام ده و نضيف ليه بقى ازاي تشفر مراسلاتك في برامج kmail, evolution, thunderbird, mozilla-mail, sylpheed مثلا و كمان اذا كان في واجهات رسومية سهلة و مدورة بدل الأوامر المرعبة دي، و اذا كان في أي دمج للامكانيات دي في نظم سطح المكتب الحرة، ورونا الشغل بقى.

Alaa


"context is over-rated. who are you anyway?"

khaledhosny's picture

أنا كتبت

أنا كتبت كلمتين عن kgpg وهحاول أظبطهم شوية


Alaa's picture

طيب

ما تكتبلنا عن الموضوع ده حاجةو سلسة كده و تحط معاها screenshots و حوارات Alaa


"context is over-rated. who are you anyway?"

Key length

Thanks for the nice article.. I would just add that some people would consider 1024 bits for an asymmetric key to be too short for some uses. Personally, I'd use a 2048 key. --sk -- don't panic

Do you have the original

Do you have the original article in english, coz I lost it. Also if any one of you have more topics it will be nice to write on them

Green Data

Alaa's picture

hmm maybe I still have it

hmm maybe I still have it on my email archive, would you remember which email address you used back then?

as for a new article you seem interested in security, why not write something related like into to firewalls or intrusion detection.

Alaa


"context is over-rated. who are you anyway?"

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.


Dr. Radut | book