كما وعدناكم قبل يومين، سأستغل بعض الوقت الذي اقضيه في العزل الصحي لكتابة بعض التغريدات عن علم التشفير وأتمنى ان تكون مفيدة. سنبدأ بتعريف معنى التشفير ثم سنستعرض تطور التشفير عبر التاريخ حتى نصل الى اخر المستجدات فيه.
أول شي يجب ان نعرِّف ما هو التشفير (encryption) وهو عملية تحويل الرسالة (plaintext) الى شيء غير مفهوم (ciphertext) بحيث ان من يقرأ التشفير لا يستطيع معرفة محتوى الرسالة. هذا ما يسمى شرط السرية وهو المنطقي الذي يخطر على بال الشخص مباشرة.
لكن هناك شرط اخر وهو صحة العملية (correctness) والذي لا معنى للتشفير بدونه. هذا الشرط يتطلب ان المستقبل المقصود يجب ان يتمكن من استرجاع الرسالة الاصلية عند استقباله للشفرة.
اذن كيف يتم التشفير؟ التشفير هو عملية رياضية تأخذ الرسالة الاصلية كمدخل مع ما يسمى بمفتاح التشفير وتعطي الشفرة كمخرج. عند استقبال الشفرة، يجب ان يستطيع المستقبل فكها باستخدام المفتاح ومن لا يملك المفتاح يجب الا يستطيع معرفة شيء عن الرسالة.
نظرا للحاجة للتواصل السري، تم استخدام التشفير منذ القدم، هناك من يعيد استخدام التشفير الى الفراعنة المصريين 1900 سنة قبل الميلاد او لما بين النهرين 1500 سنة قبل الميلاد. لكن اول استخدام موثق للتشفير بتعريفه العلمي كان لقيصر الروم في القرن الاخير قبل الميلاد.
كان قيصر سعيدا بهذا الإنجاز حيث ان من يحاول قراءة الرسالة المشفرة سيرى امامه مجموعة حروف ليس لها أي معنى. لكن هذا التشفير لم يكن امنا، فما هو الخطأ الذي وقع فيه قيصر (وجعل بروتس يقتله 😉)؟
الخطأ الذي وقع فيه قيصر انه اعتقد ان مجرد ان الشفرة غير مفهومة فهذا يعني ان التشفير امن، بينما كان عند المهاجمين وجهة نظر أخرى: ماذا لو حاولنا تجربة جميع الخيارات المتاحة لمفتاح التشفير حتى الحصول على الرسالة المشفرة؟
في اللغة الإنجليزية مثلا هناك 26 حرف، لذلك هناك 26 احتمال لمفتاح التشفير. فلو حاولنا تجربة جميع الاحتمالات لتوصلنا لمفتاح التشفير المستخدم بسرعة.
تعلم المصممون الدرس: الان لا يكفي ان تكون الشفرة غير مفهومة، ولكن يجب أيضا ان يكون عدد المفاتيح الممكن استخدامها كبيرا لدرجة جعل تجربة جميع الخيارات (exhaustive search) أمرا شاقا يحتاج الكثير من الوقت والموارد.
بدأ المصممون بمحاولة زيادة اعداد المفاتيح الممكنة وكان هناك بعض المحاولات الخجولة التي لم تحل المشكلة فعليا... حتى جاء اقتراح الاستبدال العشوائي للحروف. التبديل العشوائي يعني ان كل حرف من الرسالة يستدل بحرف اخر يُختار بشكل عشوائي.
في هذه الحالة يرتفع عدد احتمالات مفتاح التشفير من 26 في حالة تشفير قيصر الى مضروب 26 في هذه الحالة. مضروب 26 يساوي تقريبا 4 متبوعة ب26 صفر، وهو عدد مهول لا يمكن استهلاكه (بالذات في زمن الورقة والقلم في ذلك الوقت).
استمر هذا التشفير صامدا لمئات السنين واعتقد الناس ان مشكلة التشفير حلت للأبد... حتى جاء العالم المسلم أبو يوسف يعقوب بن إسحاق الكندي في القرن التاسع الميلادي. عندما بدا الكندي بدراسة التشفير جاء بفكرة مبتكرة:
بدلا من محاولة فهم محتوى الرسالة من الشفرة او محاولة تجربة جميع المفاتيح المحتملة، لماذا لا يتم استخدام خصائص اللغة في كسر الشفرة؟ لاحظ الكندي ان اللغات ليست عشوائية ولها خصائص إحصائية ثابتة.
في اللغة الإنجليزية مثلا، أكثر حرف يتكرر هو حرف e ويأتي بعده حرف t ثم a وهكذا، فكيف استغل الكندي هذه المعلومة لكسر الشفرة؟ اقترح الكندي استخدام ما يسمى (frequency analysis) لاكتشاف مفتاح التشفير، فكيف يتم ذلك؟
عند عد تكرار الحروف في الشفرة فإن أكثر حرف يتكرر هو غالبا تشفير لحرف e وثاني أكثر حرف هو تشفير لحرف t وهكذا حتى يتم استكشاف مفتاح التشفير كاملا. بهذا الاكتشاف للكندي طويت صفحة مهمة في كتاب التشفير وتم القضاء على ما يسمى (monoalphabetic encryption).
جاري تحميل الاقتراحات...