انتقل إلى المحتوى

تعمية قيصر

من ويكيبيديا، الموسوعة الحرة
تقابل أبجدية تعمية قيصر حيث يتم مقابلة كل حرف بالحرف الثالث الذي يليه في الترتيب الأبجدي
تقابل أبجدية تعمية قيصر حيث يتم مقابلة كل حرف بالحرف الثالث الذي يليه في الترتيب الأبجدي

تعمية قيصر، تسمى أيضا التعمية بالإزاحة، هي طريقة من طرق التعمية التقليدية (بالإنجليزية: Classical Cryptography) تستعمل لتعمية النصوص، شاع استخدام هذه الطريقة قديمًا ويُعتقد أن يوليوس قيصر كان أول من استخدم هذه الوسيلة في الفترة ما بين 58 ق.م حتى 51 ق.م. تتميز هذه التعمية بسهولة تطبيقها لذلك تعتمد غالبا مدخلًا للتعرف على علم التعمية التقليدي غير أنها ليست أقدم طريقة تعمية مسجلة تاريخيا، إذ تعود أول محاولة تاريخية مسجلة لممارسة فن التعمية إلى العام 1900 قبل الميلاد.[1] فكرة الطريقة مشابهة لحد ما لتعمية أتبش ولطرق أخرى كانت منتشرة قديما، بحيث أنها تعتمد على مقابلة حروف الأبجدية بنسخة محوَّرة من نفس الحروف وذلك باعتماد تحوير بسيط غالبا ما يكون سريا ومتفق عليه. ويقوم مبدأ تعمية قيصر أو تعمية الإزاحة على مقابلة حروف الأبجدية بنسخة من نفس الأحرف تمت إزاحتها بموضع ثلاثة أحرف، فمثلا تعمية حرف «أ» يكون هو حرف «ث» وتعمية الكلمة «مرحبا» يكون بذلك هو «وشذجث». وكما جاء على لسان المؤرخ الروماني سويتونيوس في كتابه القياصرة الاثنى عشر، فإن أغسطس قيصر، و هو ابن أخ يوليوس قيصر، استخدم أيضاً نفس المبدأ للتعمية، غير أنه كان يعتمد على إزاحة بمقدار موضع واحد فقط، مع تعمية آخر حرف في الأبجدية بتكرار أول حرف من الأبجدية مرتين.

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

اصطلاحات

[عدل]

قبل البدء بتوصيف تعمية قيصر لا بد من توضيح بعض الاصطلاحات الرئيسة:

  1. النص الواضح (يسمى أيضا النص المجرد) وهو النص الأصل المراد تعميته، سيُرمز له بالحرف وهو مركب من مجموعة من الحروف، كل حرف ينتمي لمجموعة تُسمى الأبجدية، نرمز لهذه الأبجدية بالحرف ، و نقول أن هو نص مكون من حرف. مثلا: كلمة «مرحبا» هي نص واضح ينتمي ل مجموعة النصوص المكونة من خمسة حروف، بحيث مجموعة حروف الأبجدية العربية.
  2. النص المعمى وهو نتيجة تطبيق خوارزمية التعمية على النص الواضح، سيُرمز له بالحرف . في حالة تعمية قيصر أو تعمية الإزاحة إذا كان فإن أيضا، أي بعبارة أخرى و لهما الطول نفسه.
  3. دالة التعمية أو خوارزمية التعمية، نرمز لها ب ، و هي الخوارزمية التي تربط النص الواضح بالنص المعمى كما يلي: بحيث هو مفتاح التعمية. في حالة تعمية قيصر فلا حاجة لمفتاح لأن التعمية ثابتة وتعتمد فقط على خوارزمية التعمية، لذلك يمكننا صياغة هذه العلاقة في هذه الحالة ب .
  4. دالة فك التعمية أو خوارزمية فك التشفير، سنرمز لها ب ، وهي تَعْكُس عمل خوارزمية التعمية ، أي أنها تربط النص المعمى بالنص الواضح كما يلي: . في حالة تعمية قيصر فلا حاجة لمفتاح لذلك يمكننا صياغة هذه العلاقة في هذه الحالة ب .

عملية التعمية وفكها

[عدل]

تعمية قيصر

[عدل]

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

مقابلة حروف الأبجدية بمجموعة الأعداد الصحيحة من 0 إلى 27
الحرف الأبجدي أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي
الرقم الترتيبي 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

عملية تعمية قيصر هي خوارزمية معرفة كالآتي:

مثال

[عدل]

لتعمية الكلمة «مرحبا» يُعمَّى كل حرف على حدة باستخدام الخوارزمية . لتعمية هذه الحروف يجب مقابلة كل حرف بالرقم المقابل له، مثلًا حرف «م» يقابله العدد 23 في الجدول أعلاه، فيكون بذلك تعمية حرف «م» هو الحرف المقابل ل أي هو الحرف «و».

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

يمكن إنجاز التعمية يدويًا أو آليًا باعتماد هذه الخوارزمية التي تعتمد على الحسابيات المعيارية.

فك التعمية

[عدل]

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

بعبارة أخرى فإن تحول كل حرف إلى الحرف الثالث قبله في الترتيب الأبجدي.

تعميم تعمية قيصر: التعمية بالإزاحة

[عدل]

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

يعاد تعريف خوارزمية التعمية في هذه الحالة العامة كالآتي:

ويعاد تعريف خوارزمية فك التعمية المقابلة لها كما يلي:

يمكننا التأكد من صحة الخوارزمية (بالإنجليزية: proof of correctness) ببساطة كما يلي:

مثال

[عدل]

لتعمية الرسالة التالية «ويكيبيديا» باستخدام مفتاح تعمية . تُطبَّق الخوارزمية باستخدام المفتاح المختار على كل حرف على حدة:

بالتالي، يكون النص المعمى هو «سشخشضشقشص».

نص برمجي

[عدل]

فيما يلي نص برمجي بلغة بايثون يوضح عمليتي التعميةوفك التعمية باعتماد مفتاح إزاحة معين. تُستعمل أبجدية اللغة العربية المعرفة حسب الترميز الموحد كما يلي (تضم 29 حرف باعتبار التاء المروبوطة كحرف مستقل):

alphabet = [*range(0x0627, 0x063B), *range(0x0641, 0x0649), 0x064A] # أبجدية عربية
النص البرمجي للتعمية
[عدل]
def encrypt(key, message, alphabet):
    ciphertext = []
    for letter in message:
        try:
            i = alphabet.index(ord(letter))
        except:
            ciphertext.append(letter)
        else:
            ciphertext.append(chr(alphabet[(i + key) % len(alphabet)]))
            
    return "".join(ciphertext)
النص البرمجي لفك التعمية
[عدل]
def decrypt(key, ciphertext, alphabet):
    plaintext = []
    for letter in ciphertext:
        try:
            i = alphabet.index(ord(letter))
        except:
            plaintext.append(letter)
        else:
            plaintext.append(chr(alphabet[(i - key) % len(alphabet)]))
            
    return "".join(plaintext)
مثال تطبيقي
[عدل]

النص الواضح: مرحبا من ويكيبيديا الموسوعة الحرة

النص المعمى: كدثيو كل نهفهيهحهو وقكنرنطا وقثدا

تحليل أمن تعمية قيصر

[عدل]

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

تعمية قيصر ليست آمنة الدلالة

[عدل]

بالعودة إلى المثال الأول من الفقرة السابقة، يمكنك ملاحظة وجود تطابق نمطي بين النص الواضح والنص المُعَمَّى. بعبارة أخرى، يمكنك ملاحظة أن حرف الياء في النص «ويكيبيديا» دائما ما يُعمَّى باستخدام حرف الشين في النص المُعَمَّى «سشخشضشقشص». وبالتالي يمكن لأي خصم التفريق بين نصين معميين مختلفتين فقط بتحليل النصوص المتعمية. لتوضيح هذا الأمر سنفترض السيناريو التالي: نفترض أن هناك خصم متنصت على محادثة متعمية بين طرفين، قام خلالها برصد التعمية «نبن». نفترض أن المتنصت يعلم مسبقا أن هذه التعمية هي جواب لسؤال معلوم يقبل فقط إجابتين هما: «فجر» أو «ليل». واضح من تحليل التعمية فقط، ودون الحاجة لكسرها أو محاولة معرفة المفتاح، أن النص الواضح الموافق للنص المُعَمَّى «نبن» هو «ليل» وليس «فجر»، لأن هناك تطابق في أنماط الكلمتين «نبن» و«ليل» (كلاهما يبدءان بحرف وينتهيان بنفس الحرف) . نقول في هذه الحالة إن تعمية قيصر ليست آمنة دلاليا (بالإنجليزية: semantically secure).

طرق كسر تعمية قيصر

[عدل]

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

هجوم الإكراه الأعمى

[عدل]

قد يسمى أيضا هجوم القوة العمياء، (بالإنجليزية: Brute-force attack)، وهو ببساطة هجوم يقتضي تجريب كل المفاتيح الممكنة إلى غاية إيجاد المفتاح الصحيح. نُذَكِّر أن حقل المفاتيح الممكنة صغير جدا ، و بالتالي تجريب كل هذه المفاتيح لن يتطلب مجهود ووقت كبيرين قبل العثور على المفتاح المناسب. يمكن القيام بهجوم الإكراه الأغمى في حالتنا هذه سواء يدويا أو آليا.

هجوم التحليل الإحصائي

[عدل]

هجوم التحليل الإحصائي أو تحليل التكرار (بالإنجليزية: frequency analysis)، هو طريقة من أبرز طرق تحليل الشفرات التقليدية وهو من اختراع وتطوير العرب.[1] ولعل هذه كانت أول محاولة تاريخية لتطوير علم رياضي يهتم بكسر وواستخراح المعمى، وقد كان يسميه العرب حينها علم استخراج المعمَى.[3] يقوم مبدأ هذا النوع من الهجمات على استخدام التحليل الإحصائي للغة التعمية وللتعمية ذاتها ومحاولة مطابقة تردد حروف التعمية مع تردد حروف اللغة الأصلي، وبذلك يتمكن المحلل من التوصل إلى تقابل بين أبجدية النص الواضح وأبجدية النص المُعَمَّى. يستطيع هذا النوع من الهجمات كسر كل التعمية بالإعاضة الأحادية بدون استثناء، والتي من ضمنها تعمية قيصر وتعمية الإزاحة وأنواع أخرى عديدة. مثلا، باعتبار اللغة العربية، نعلم انطلاقا من تحليل التكرار أن حرف الألف هو أكثر الأحرف تواترا في اللغة، يليه حرف اللام. انطلاقا من هذه المعلومة يمكننا موافقة حرف الألف بالحرف الأكثر تواترا في النص المُعَمَّى (مثلا ليكن هو حرف الصاد)، و هكذا نستطيع كشف مفتاح الإزاحة المعتمد في تشفير الإزاحة والذي يكون في هذه الحالة هو 13.

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

مصادر

[عدل]
  1. ^ ا ب Kahn David (1996). The Codebreakers: The Comprehensive History of Secret Communication from Ancient Times to the Internet. Simon and Schuster.
  2. ^ Kerckhoffs Auguste (1883). La cryptographie militaire. Journal des sciences militaires.
  3. ^ علم التعمية واستخراج المعمى عند العرب: دراسة وتحقيق لرسائل الكندي وابن عدلان وابن الدريهم، تحقيق: محمد مراياتي، محمد حسان الطيان، يحيى مير علم، دمشق: مجمع اللغة العربية بدمشق، ج. 1، 1987، ص. 4، OCLC:1295819170، QID:Q123939109{{استشهاد}}: صيانة الاستشهاد: آخرون (link)