ملخص برتوكول ال open PGP معييار الخصوصية الجيدة جدا
مقدمة
توضيح الاختلاف OpenPGP وبرنامج
الOpenPGP هو برتوكول (التسمية الرسمية معييار وذلك لاسباب ) صادر من IEFT اخر اصدار\تحديث نشر ب معييار رقم ٩٥٨٠.
برنامج GnuPGP : هو تطبيق للبرتكول OpenPGP موزوع كبرنامج مفتوح المصدر
معييار ابرتوكول ال OpenPGP
خطوات عمل البرتوكول في وضع التشفير مع التوقيع للمرسل
١- يقوم المرسل بكتابة الرسالة
٢- يقوم المرسل بتوقيع الرسالة
٣- يقوم البرنامج (المطبق للبرتوكول) بانشاء مفتاح تناظري منشق من الجلسة
٤- يقوم المرسل بتوقيع الرسالة
- يتم هنا انشاء ال هاش من محتوى الرسالة
- يتم التوقيع الرسالة عن طريق تشفير الهاش باستخدام المفتاح اللامتناظر الخاص بالمرسل
٥- مرحلة الضغط: يتم ضغط الرسالة كما هي مع التوقيع
٦- مرحلة تشفير التناظري ل الرسالة مع التوقيع مضغوطين (دائما يتم تشفير تناظري للرسالة لاخذ بعين الاعتبار حجم الرسالة لربما)
٧ - مرحلة تشفير المفتاح التناظري: يتم تشفير المفتاح المستعمل بالخطوة السابقة, اما تناظري او لاتناظري: - اذا كان لاتناظري يتم استعمال المفتاح العام للمستقبل\ين\ات
- اذا كان تناظري يتم اسخدام مفتاح خاص تم مشاركته بالسابق بين الطرفين
٨- الرسالة جاهزو لارسال وتتكون من جزئين رئيسين مهمين خطوة ٦ و ٨ - ( من غير المعررف انه اذا تم ارسال الرسالة كبريد الكتروني لأكثر من مستقبل هل يقوم البرنامج المشغل بتقسيمها بحيث يستقبل كل مستقبل\ة الجزء الخاص به\ا من الخطوة ٧ من ممكن ان يوئثر ذلك على خصوصية اذا كان bbc مثلا? )
خطوات عمل البرتكول للمستقبل
١- يقوم البرنامج المستقبل بقراءة الرسالة كظروف packets الرسالة
٢- يتم فك تشفير حزمة المفتاح التناظري
باسخدام المفتاح: الامتناظر الخاص في المستقبل
او باستخدام مفتاح: المتناظرة تم مشاركته بالسابق بين الطرفين
٣- يتم فك تشفير التناظري لالحزمة الرسالة مع توقيع
٤- يتم فك ضغط الحزمة وينشئ عنه الرسالة كما هي والتوقيع
٥- يتم التحقق من التوقيع عن طريق
- اعادة عمل هاش للرسالة كما هي
- فك تشفير لاتناظري لالتوقيع باستخدام المفتاح العام للمرسل وينتج عنه هاش
- مقارنة الهاش في خطوتيين السابقتين, اذا تطابق تحققة مصادقة من المرسل/ة
ملاحظات
- عملية التوقيع تحتم استعمال التشفير ال لاتناظري
انشاء مفتاح تناظري من كلمة
يتم انشاء مفتاح تناظري لغرضين اما لتشفير الرسالة المضغوطة أو لتخزين الجزء السري للمفتاح الخاص, في الاولى المصدر رقم عشوائي الخاص بالجلسة, في التالية كلمة سر المفتاح الخاص.
في الحالة الاولى يحتاج ان يكون طول المفتاح اطول من ثانية او حسب حجم الرسالة, في ثانية اقصر لان الجزء السري عبارة عن رقم حجمه ثابت.
يوجد اكثر من طريقة لتحويل الكلمة لمفتاح تناظري, من المستحسن استعمال طريقة ال argon 2 أو iterated salat S2K الطرق اللاخرى: S2K iterated و S2K البسيطة يتم دعمهم لقراءة رسائل من المستقبل. جميعها تعتمد على خوارزميات التلبيد, مبدأ عملهم مشابه ولكن يزداد تعقيداً وذلك لبقاء ضمان السرية مع تطور اساليب الهجوم وأداء عتاد الحوسبية.
[!INFO] ملاحظة!
لاحظ انه عند اخفاء المحتوى السري للمفتاح الخاص, الجهد المطلوب لمحاولة اختراق باستخدام ال brute force اقل من جهد مطلوب عند محاولة اختراق باستخدام المفتاح العام, ولكن يبقى من مستحسن اخفاءه بكلمة سر لان الجزء العام منشور, بينما المفتاح السري يتم تسريبه عند اختراق الجهاز أو وصول غير مصرح به
طريقة S2K البسيطة
يتم تحويل الكلمة باستخدام خوارزمية التلبيد الى شكل اخر, اذا كان الناتج اي البيانات المخرجة, اقل حجماَ من المطلوب يتم, اضافة (اوكت واحد) ثماني اصفار مع البيانات قبل تلبيدها في سياق اخر , واذا لم يكتفي الحجم المطلوب, يتم اضافة (اوكتان) ستة عشر صفراً الى سياق تلبيد ثالث, وهكذا..., ثم يتم جمع المخرجات مع بعضها البعض, ثم قصها من طرف لأيسر اذا لم يكن الطول مساواً تماماً لطول المفتاح المطلوب.
اما اذا كان طول المخرج اطول من المطلوب يتم قصها من اليسار ايضاً بدون الحاجة الى الحاق اوكتات من الاصفار, اي سياق تلبيد واحد كافي.
الشكل التالي يوضح كيف يتم تخزين
Octet 0: 0x 00 الاوكنت الاول يوضعح نوع او طريقة التحويل (صفر يعني S2K )
Octet 1: 0x نوع خوارزمية التلبيد المستعملة
طريقة S2K مع صالت salat
تعمل كمبدأ عمل الطريقة السابقة, الاختلاف انه يضاف الى سياق\ات التلبيد: صالت الملح وهو كلمة عشوائية ( بحق؟ بحاجة لتأكد من المصدر), التالي يوضح كيفية تخزنها
Octet 0: 0x 01 واحد يشير الى S2K مع ملح
Octet 1: نوع خوارزمية التلبيد المستعملة
Octet 2-9: salat ثماني اوكتات حجم ال
طريقة S2K مع salat المكررة
Octet 0: 0x 02 اثنان يشير الى S2K مع ملح
Octet 1: نوع خوارزمية التلبيد المستعملة
Octet 2-9: salat ثماني اوكتات حجم ال
Octet 10: عدد الاكتات المدخلة لكل سياق تلبيد c
يتم تجهيز عدد سياقات التلبيد حسب حجم البيانات المخرجة المطلوبة ونوع خوارزمية التلبيد المستعملة, الفرق بين السياقات هنا وبين اعلاه ان المدخل لكل سياق التلبيد هو كلمة السر مع الملح معادة اكثر مرة حتى نوصل الى رقم c. اذا كان طول الاكتات c اقصر من كلمة السر مع الملح, لا يتم القص اي انه على الاقل يضمن استعمال كلمة السر مع ملح مرة واحدة على الاقل.
ثم يتم اعادة تلبيد كل سياق على حدا (وضح المدخل في الجولة الثانية, الثالثة...), حتى نوصل الى عدد اوكتات ملبدة تساوي العدد count, هناك علاقة رياضية تربط c ب count مبينة في الاسفل.
مثال توضيحي
طول كلمة السر: 16 اوكتات klkin3wq (يعني ثمانية احرف/رموز)
طول الملح :8 اوكتات A_l#er_Z
العدد: c يساوي ١٥
العدد count = c * 15 اي ٢٦٥
حجم المفتاح المطلوب (حجم الجزء السري للمفتاح الخاص ) = ١٣٠ اوكتات
اول سياق تلبيد سياق kwqliwrkwqliwrk قمنا بلأعادة مرتين ١٤ + اوكت حتى نصل ١٥. المدخل هنا ١٥ اوكت حتى نلبدهم
العلاقة بين c وبين count على الاغلب يجب ان تكون من مضاعفات ١٢٨ او ٢٥٦...الخ حسب نوع خوارزمية التلبيد المستعملة, التي تحدد حجم البيانات الملبدة
يوجد حاجة الى فهم كيفية عمل خوارزميات التلبيد(بحاجة الى مرجع؟) , لانه لربما ما يتم شرحه في برتوكول له علاقة وطيدة في عمل الافتراضي, او الدعم للسياق المطلوب اعلاه, ايضاٌ الحاجة الى تحميل مرجع ال C مع مراجعة برمجية ل بروتوكول openpgp حيث يمكن روئية حزمة ومحاولة ان امكن تطبيق او تحويل كلمة سر الى مفتاح يدوياً عن طريق بايثون
الى اللقاء في الحلقة القادمة....
printf("Hello World");
int c = 15;
// when c = 15, then: (15+16) * 2^ (0+6) = 1984
// when c = 20 then: (4+16) * 2^ (1+6) = 2560
// when c = 33 then; (1+16) * 2^ (2+6) = 4352
// of c << of c
// 16 + first 4 bit * 2 ^ ((last 4 bit) + 6)
int count = (16 + (c & 15)) << ((c >> 4) + 6);
printf("%d\n",count);
https://chatgpt.com/share/69efcad0-6074-83eb-bf14-0f3f5ecedcde