RSS

جولة عملية في عالم التشفير والتواقيع الإلكترونية

23 نوفمبر

في العام 1832  وضع الروائي Edgar Allan Poe في نهاية روايته The Gold Bug لغزا هو عبارة عن فقرة أخيرة مؤلفة من مجموعة من الرموز الغريبة والتي كانت تصف نهاية روايته تلك، وتحدى القراء في أن ينجحوا في فكها، وتسهيلا على قراءه قام بإعطاء بعض الملاحظات حول ذلك التشفير حيث أشار إلى أن الفقرة مكتوبة باللغة الإنجليزية وأن كل رمز من رموز تلك الفقرة كان يستبدل ذات الحرف في كل مرة (وهو ما يدعى عادة بتشفير قيصر ويتم عن طريق استبدال كل حرف بالرسالة برمز أو حرف آخر بديل). في نهاية المطاف لم تكن تلك بالمهمة المستحيلة، فعلى من يحاول فك ذلك النوع من التشفير أن يبدأ بإحصاء عدد مرات تكرار كل من الرموز الواردة ضمن الرسالة ويقابله مع نسب التكرار المعتادة لأحرف اللغة الأصلية، فإن ظهر الحرف N على سبيل المثال على أنه الرمز الأكثر تكرارا في الرسالة المشفر (المعماة) يمكننا استنتاج أن ذلك الحرف بالذات استخدم كمقابل أو بديل عن الحرف E الذي هو بطبيعة الحال الحرف الأكثر تكرارا في اللغة الإنجليزية (لغة الرسالة، أما في العربية على سبيل المثال فهو حرف الألف). ولكن المتابعة على ذات المنوال لن تصل بنا إلى الحل المطلوب، فهو ليس بهذه البساطة، فمثل هكذا أسلوب بسيط قد ينجح إن كان النص المشفر المتوافر بين يدينا كبيرا بما فيه الكفاية حتى تكون الاستنتاجات القائمة على أسس إحصائية للحروف المفردة مقبولة ويعتمد عليها (فما كل ما هو مرجح إحصائيا صحيح بطبيعة الحال، وهنا أذكر على سبيل المثال خطبة الإمام علي كرم الله وجهه بعد أن اجتمع الناس وقالوا أن الألف هو الحرف الأكثر شيوعا باللغة العربية، فأتاهم بخطبة بدون حرف الألف، وله أخرى بدون نقط، ويمكن للمهتمين بذلك أن يبحثوا عن نص كلتيهما على الشابكة).

نرى مما سبق أن الاعتماد على التكرار البسيط غير مفيد في حالة كسر تشفير صاحبنا كونها فقرة واحدة قصيرة، عوضا عن ذلك يمكننا المضي قدما في تعزيز النموذج بالبحث عن تكرار الثنائيات أو حتى الثلاثيات المذكورة في النص المشفر وما يقابلها في اللغة التي كتبت بها الرسالة أصلا، فمثلا إن لاحظت أن الثلاثية الأكثر تكرارا في النص المعمى هي ;48 فيمكننا تخمين أنها المقابل المشفر للكلمة the والتي تعتبر الثلاثية الأكثر شيوعا في اللغة الإنجليزية، هذا عدى عن إمكانية تبديل الرموز ; و 4 و 8 بمقابلاتها من الأحرف وهي t و h و e على التوالي وذلك أينما وردت في النص، وهو ما يسهل علينا مهمة تخمين غيرها من كلمات.

حسنا، لكن ما علاقة كل ذلك بعالم الحواسيب والشابكة (الإنترنت)؟ في حقيقة الأمر لا يمكننا تخيل أي تطبيقات جدية من قبيل تطبيقات التجارة الإلكترونية ما لم تتوفر لنا قنوات إتصال آمنة ومعماة، على الرغم من أن معظم العاملين في قطاع أمان التطبيقات والإتصالات يتفقون على أن سمة الأمان تلك هي سمة نسبية دوما وليست مطلقة (فليس هنالك ماهو آمن 100% حتى لو قسنا ذلك على المستوى المادي المعاش يوميا، فزيادة أمان منزل ما تبدأ بتغيير أقفال الباب، وتمر بتركيب قضبان حديدية على النوافذ، أو كاميرات مراقبة في المكان، وصولا حتى تعيين حراسة دائمة، كما يمكنك التمادي بخيالك فتطلب إقامة منصة للصواريخ المضادة للطائرات مجاورة لذلك المنزل بغرض حمايته من الغارات الجوية!).

تخيل أن الزمن عاد بك إلى العام 1995 وأنك على وشك القيام بأول عملية شراء لك على الشابكة، حيث تقوم بتشغيل برنامج المتصفح Netscape وترتشف قليلا من القهوة ريثما يتم تحميل الصفحة الرئيسية وهو ما كان يأخذ حينها بعضا من الوقت في مثل تلك الأيام لبطئ الاتصال، بعد ذلك تقوم بالإبحار تجاه موقع Amazon.com وهو مخزن لبيع الكتب افتتح حديثا على الشابكة أخبرك عنه أحد الأصدقاء، ومع متابعتك لعملية الشراء يطلب منك إدخال معلومات تخص آلية وطريقة الدفع، حينها ستلاحظ أن العنوان المشار إليه في أعلى نافذة المتصفح أصبح يبدأ باسم البروتوكول https عوضا عن http المعتاد، وتلك إشارة إلى أن حاسبك قد أنشئ للتو إتصالا مشفرا بينه وبين مخدم موقع أمازون، وهو ما يجعلك قادرا على إرسال معلومات بطاقة الائتمان إلى ذلك المخدم دون القلق حيال قيام سارق ما باستراق النظر والإطلاع على ما يتم نقله بينكما.

لسوء الحظ فإن عمليتك الأولى تلك للشراء عبر الشابكة كانت غير آمنة منذ اللحظة الأولى، حيث أكتشف لاحقا أن البروتوكول الذي كان يتبعه متصفحك للقيام بما يفترض أن يكون عملية نقل آمنة للمعلومات لم يكن فعليا بذلك الأمان المفترض. تكمن المشكلة في أن المفاتيح السرية التي كان يستخدمها المتصفح Netscape لم تكن عشوائية وطويلة بما فيه الكفاية، فقد كانت عبارة عن سلاسل نصية بطول 40 bits فقط، وهو ما يعني وجود قرابة ترليون احتمال ممكن، قد يبدو هذا العدد كبيرا لكنه لم يكن كبيرا كفاية، فقد كان المخترقون قادرين على كسر مثل تلك الشيفرة، حتى بالسرعات التي كانت متوفرة بحواسيب التسعينييات، وذلك خلال ما يقارب 30 ساعة فقط. حتى أن الأرقام العشوائية التي كان يقترح متصفح Netscape استخدامها لتشكيل المفاتيح السرية لم تكن عشوائية تماما، فقد كانت محسوبة على أساس ثلاثة قيم فحسب (وهي في واقع الأمر آتية من التوقيت الحالي لساعة الجهاز والمؤلفة من الساعة والدقيقة والثانية)، وهو ما يجعل من الوضع أكثر سوءا نظرا لكون مثل تلك الأرقام التي يفترض بها أن تكون عشوائية تبدو قابلة للتوقع إلى حد ما، وهو ما يمكّن المخترق من تقليل عدد الاحتمالات للمفاتيح الواجب التحقق منها وبالتالي فإنه يصبح بحاجة إلى وقت أقصر بكثير مما توقعه مبرمجوا المتصفح Netscape.

إن عماد تقنيات قنوات الاتصال الآمنة تقوم على خوارزمية RSA والتي تعتمد بدورها على صعوبة تحليل الأرقام الأولية الكبيرة (وهي تلك الأرقام التي تملك قاسمين اثنين فقط لا غير هما الرقم واحد والعدد ذاته)، إن آلية عمل هذه الخوارزمية تقوم على أساس استخدام مفهوم ما يدعى بالمفتاح المعلن والمفتاح الخاص لكل طرف من أطراف الاتصال، حيث يكون المفتاح المعلن متاحا للجميع، ويستطيع المستخدم تشفير البيانات باستخدام هذا المفتاح لكنه لا يستطيع فك ذلك التشفير، فيما الشخص الوحيد القادر على إنجاز عملية فك التشفير تلك هو من يملك المفتاح الخاص، وبالتالي إن أردت إرسال نص مشفر إلى شخص ما بشكل آمن بحيث لايستطيع أحد سواه الإطلاع على محتوى الرسالة، فإن كل ما عليك القيام به هو استخدام مفتاحه المعلن لتشفير الرسالة بحيث لن يستطيع أحد سواه فك ذلك التشفير (أي من يمتلك المفتاح الخاص القرين لذلك المفتاح المعلن). من الممكن نظريا توليد المفتاح الخاص إنطلاقا من المفتاح المعلن لكن مثل تلك العملية غاية في التعقيد والصعوبة لدرجة يقبل فيها أنها مستحيلة عمليا (حتى الآن) وهذا ما يجعل من خوارزمية RSA خيارا شائعا جدا في تشفير البيانات في عالم تطبيقات الحواسيب والاتصالات.

لتوضيح الفكرة سنقوم فيما يلي باستعراض مثال عملي لطريقة توليد المفاتيح ومن ثم تشفير وفك تشفير رسالة ما، كما سبق وأن ذكرنا فإن أمان هذه الخوارزمية ينبع من صعوبة حساب معاملات الأرقام الكبيرة، وحتى تبقى آمنا بما فيه الكفاية يجب عليك استخدام قيم كبيرة جدا لرقمين أوليين ندعوهما س و ع (يجب أن يكون كل منهما عبارة عن رقم مؤلف على الأقل من 100 خانة). ملاحظة: يمكن الحصول على الأرقام الأولية التي هي دون 10,000,000,000 لأغراض التجريب بشكل مجاني من الموقع prime-numbers.org والتي يبلغ عددها 455042511 عددا أوليا بالإجمال.

علينا أن نبدأ من عددين أوليين ندعوهما س و ع على التوالي، وسنستخدم في المثال التالي أرقام صغيرة بهدف تبسيط الحسابات، ليكن س = 7 فيما ع = 19، بعدها نحسب ناتج جداء هذين العددين الأوليين وندعو الناتج ص:

ص = س * ع

ص = 7 * 19 = 133

بعد ذلك نحسب عددا مساعدا جديدا هو ب وهو ناتج عن جداء ذات العددين الأوليين بعد طرح 1 من كل منهما، أي:

ب = (س – 1) * (ع – 1)

ب = (7 – 1) * (19 – 1)

ب = 6 * 18 = 108

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

إن كانت ج = 2 فإن القاسم المشترك الأكبر للعددين ج و ب (أي 2 و 108) هو 2 وبالتالي القيمة المقترحة للعدد ج مرفوضة

إن كانت ج = 3 فإن القاسم المشترك الأكبر للعددين ج و ب هو 3 وبالتالي مرفوض

إن كانت ج = 4 فإن القاسم المشترك الأكبر للعددين ج و ب هو 4 وبالتالي مرفوض

إن كانت ج = 5 فإن القاسم المشترك الأكبر للعددين ج و ب هو 1 وبالتالي مرفوض

بعد ذلك نوجد العدد د بحيث يكون باقي قسمة جداء العددين د * ج على ب هو 1، وهذا يكافئ إيجاد العدد د الذي يحقق المعادلة التالية:

د * ج = 1 + هـ * ب

حيث هـ هو أي عدد صحيح، وبالتالي نستطيع إعادة كتابة تلك المعادلة لعزل د بالصيغة التالية:

د = (1 + هـ * ب) ÷ ج

وهكذا نبدأ بتجريب قيم هـ حتى نصل إلى حل هو عبارة عن عدد صحيح للمقدار د أي:

إن كانت هـ = 0 حينها د = (1 + 0 * 108) ÷ 5 = 1 ÷ 5 = 0.2 مرفوض

إن كانت هـ = 1 حينها د = (1 + 1 * 108) ÷ 5 = 109 ÷ 5 = 21.8 مرفوض

إن كانت هـ = 2 حينها د = (1 + 2 * 108) ÷ 5 = 217 ÷ 5 = 43.4 مرفوض

إن كانت هـ = 3 حينها د = (1 + 3 * 108) ÷ 5 = 325 ÷ 5 = 65 مقبول

لإجراء مثل هكذا حساب مع الأرقام الكبيرة نحن بحاجة إلى خوارزميات أكثر تعقيدا لضمان السرعة والفعالية، بإتمام إنجاز هذه الحسابات نكون قد حصلنا على زوج المفتاح المعلن والمفتاح الخاص، حيث يتألف المفتاح المعلن من الثنائية (ج، ص) أي 5 و 133 فيما يتألف المفتاح الخاص من الثنائية (د، ص) أي 65 و 133. لنرى الآن كيف يمكن استخدام كل من هذين المفتاحين في عملية إجراء الاتصال المعمى من حيث التشفير وفك التشفير.

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

م = (ر ^ ج) % ص

(أي نحسب ر بالأس ج ومن ثم نحسب باقي القسمة على ص)

م = (6 ^ 5) % 133

م = 7776 % 133 = 62

إن خوارزمية فك التشفير مشابهة إلى حد بعيد لخوارزمية التشفير السابقة لكنها تتضمن حدودا أكبر قيمة وبالتالي نحاول تجزأتها إلى خطوات متعددة لتبسيط الحساب على الشكل التالي:

ر = (م ^ د) % ص

ر = (62 ^ 65) % 133

ر = (62 * (62 ^ 2) ^ 32) % 133

ر = (62 * 3844 ^ 32) % 133

ر = (62 * (3844 % 133) ^ 32) % 133

ر = (62 * 120 ^ 32) % 133

وهكذا نعيد الخطوات السابقة التي قللنا من خلالها المقدار 62 ^ 64

إلى 120 ^ 32  وصولا إلى تقليل الأس حتى يبلغ القيمة 1  كالتالي:

ر = (62 * 36 ^ 16) % 133

ر = (62 * 99 ^ 8 ) % 133

ر = (62 * 92 ^ 4) % 133

ر = (62 * 85 ^ 2) % 133

ر = (62 * 43 ^ 1) % 133

ر = 2666 % 133 = 6

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

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

لتوقيع وثيقة رقمية، على البرمجية التي يستخدمها بوب أن تختزل تلك البيانات وصولا إلى بضعة أسطر في عملية تدعى Hashing، تلك الأسطر القليلة تدعى موجز أو خلاصة الرسالة (لا يمكن إنطلاقا من خلاصة الرسالة استعادة بيانات الرسالة الأصلية، فهذا النوع من الاختزال فاقد للمعلومات، وأشهر مثال عن خوارزميات الاختزال تلك نذكر خوارزميتي MD5 و SHA1). بعد ذلك تقوم برمجية بوب بتشفير خلاصة الرسالة باستخدام مفتاحه الخاص (لاحظ أنه في حالة التواقيع الإلكترونية يستخدم المفتاح الخاص في تشفير الخلاصة، في حين أن المفتاح العام هو من يستخدم في فك التشفير للتأكد من أصالة الختم من جهة ومطابقة الخلاصة لما يفترض بها أن تكون للوثيقة المرفقة من جهة أخرى)، والناتج من تلك العملية هو توقيعنا الرقمي المنشود. ومن ثم تقوم برمجية بوب بإضافة ذلك التوقيع الإلكتروني إلى الوثيقة الرقمية، بمعنى أن كل البيانات التي تم إختزالها تم توقيعها أيضا.

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

كما نرى من الشرح السابق فإن تقنية التواقيع الإلكترونية تعتمد على خوارزميات الاختزال إضافة إلى ما سبق وأن استعرضناه من خوارزميات التشفير، حيث تقوم خوارزميات الاختزال مثل MD5 و SHA1 بتوليد خلاصة فريدة بطول ثابت (هو 32 bytes في حالة الخوارزمية MD5 وبطول 40 bytes في حالة الخوارزمية SHA1)، مما يجدر ذكره هنا في هذا المقام أن طول هذه الخلاصة ثابت دوما ومستقل عن طول النص أو المادة التي يتم اختزالها سواء كانت كلمة سر قصيرة بطول ثمانية محارف أم محتوى قرص مدمج كبير يبلغ حجمه بضع مئات من الميغابايتات (بتنسيق iso على سبيل المثال)، لذلك تعد خوارزميات الاختزال هذه فاقدة للمعلومات (أو ما يدعى أحيانا بالتشفير الأحادي الاتجاه، على نقيض التشفير الثنائي الاتجاه والذي يمكن فيه استعادة النص الأصلي من النص المشفر الذي بين يديك)، حيث أنك تحصل دوما على ذات الاختزال إن أنت انطلقت من النص الأصلي نفسه، لكن يصعب (إن لم نقل يستحيل) إنطلاقا من الخلاصة التي ولدتها عملية الاختزال أن نعود ونسترجع النص الأصلي كاملا (وإلا أصبحت خوارزميات الاختزال تلك ملوكا في عالم برمجيات الضغط بتحويلها قرصا مدمجا كاملا إلى ما هو دون السطر الواحد من الرموز).

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

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

حاشية:

القاسم المشترك الأكبر لعددين صحيحين هو أكبر عدد صحيح موجب يقسم كلا العددين دون باقي، مثلا القاسم المشترك الأكبر للعددين 12 و 8 هو 4. إن إحدى الطرق الفعالة لحساب القاسم المشترك الأكبر تدعى بالخوارزمية الإقليدية والتي تستخدم أسلوب القسمة التقليدية مدعومة بملاحظة أن القاسم المشترك الأكبر هو بدوره قاسم للفرق ما بين العددين الأصليين دون باقي أيضا. فمثلا لإيجاد القاسم المشترك الأكبر لكل من العددين 48 و 18، نقسم بداية 48 على 18 فيكون الناتج هو 2 والباقي 12، بعدها نقسم 18 على 12 فيكون الناتج 1 والباقي 6، بعد ذلك نقسم 12 على 6 فيكون الناتج 2 والباقي 0، بالتالي نستنتج أن العدد 6 هو القاسم المشترك الأكبر.

 
5 تعليقات

Posted by في 23 نوفمبر 2011 in تقنيات الويب

 

الأوسمة:

5 responses to “جولة عملية في عالم التشفير والتواقيع الإلكترونية

  1. khaled touma

    23 نوفمبر 2011 at 6:41 مساءً

    شكراً لك أستاذ خالد على المعلومات المفيدة

     
  2. يوسف

    24 نوفمبر 2011 at 4:16 مساءً

    شكرا و بارك الله فيك أستاذ

     
  3. MaJoOoDy

    20 يناير 2012 at 7:37 مساءً

    لك كل الود والتحية ،،
    الموضوع رائع ، والتذكير أروع

     
  4. maya

    19 فبراير 2013 at 3:39 مساءً

    شكرا” على المعلومات القيمة

     
  5. mimey saleh

    29 مارس 2013 at 12:13 مساءً

    شكرا الموضوع اكثر من رائع لك التحية يا مبدع

     

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

 
%d مدونون معجبون بهذه: