مقدمة في علوم الحاسوب النظرية › التعمية 23 / 26 السابق التالي

التشفير { #chapcryptography }

التشفير

  • تعريف السرّية التامّة \
  • مخطّط تشفير الوسادة لمرة واحدة (one-time pad) \
  • ضرورة المفاتيح الطويلة للسرّية التامّة \
  • السرّية الحسابية والوسادة لمرة واحدة منزوعة العشوائية. \
  • التشفير بالمفتاح العام \
  • لمحة عن مواضيع متقدّمة \

"لا يمكن لبراعة البشر أن تصنع شيفرةً لا يمكن لبراعة البشر أن تحلّها."، إدجار ألين بو، 1841

"التنكّر الجيّد ينبغي ألّا يكشف عن طول الشخص"، شافي غولدواسر وسيلفيو ميكالي، 1982

"«السرّية التامّة» تُعرَّف بأنه يُشترط على نظامٍ ما أنّه بعد أن يعترض العدو على رسالةٍ مشفّرة، تكون الاحتمالات البعدية (a posteriori) لهذه الرسالة المشفّرة بأنّها تمثّل رسائلَ مختلفة هي هي نفسها الاحتمالات القبلية (a priori) للرسائل ذاتها قبل الاعتراض. ويُبيَّن أنّ السرّية التامّة ممكنة، لكنّها تتطلّب — إذا كان عدد الرسائل متناهيًا — أنّ يساويها عددُ المفاتيح الممكنة."، كلود شانون، 1945

"نحن نقف اليوم على شفا ثورة في التشفير."، ويتفيلد ديفي ومارتن هيلمان، 1976

التشفير — فنّ «الكتابة السرّية» أو علمها — موجود منذ آلاف السنين، وقد ظلّ اقتباس إدجار ألين بو أعلاه صادقًا طوال هذه الحقبة تقريبًا. وفي الواقع، تاريخ التشفير مكثّف بالجثث الرمزية لنظمٍ تشفيرية ظنّها الناس آمنة ثم كُسرت، وأحيانًا بالجثث الحقيقية لمن وضعوا إيمانهم في هذه النظم عن سوء. لكنّ شيئًا ما تغيّر في العقود الأخيرة، وهو ما تشير إليه «الثورة» المقتبسة أعلاه (والتي ابتدأها إلى حدٍّ كبير ورقةُ ديفي وهيلمان لعام 1976 المذكورة أعلاه). فقد وُجدت نظم تشفيرية جديدة لم تُكسَر رغم أنّها تعرّضت لمحاولاتٍ هائلة جهدًا من براعة البشر ومن قدرة الحوسبة على مقياس يفوق كليًّا «كاسّري الشفرات» في زمن بو. والأدهش من ذلك كلّه أنّ هذه النظم ليست فقط تبدو غير قابلة للكسر، بل إنّها تحقّق ذلك في ظروفٍ أشدّ قسوة بكثير. فالمهاجمون اليوم لا يملكون قدرات حوسبة أكبر فحسب، بل يملكون أيضًا بيانات أكثر للعمل بها. في زمن بو كان المهاجم محظوظًا إن حصل على أكثر من بضعة تشفيرات لرسائلَ معروفة. أما اليوم فقد يملك المهاجمون كمياتٍ هائلة من البيانات — التيرابايت أو أكثر — في متناول أيديهم. بل إنّ التشفير بالمفتاح العام (public key) يمكّن المهاجم من توليد ما يشاء من النصوص المشفّرة.

مفتاح هذا النجاح كان هو فهمٌ أدقّ لكليّن الأمرين: كيف نُعرّف (define) أمنَ الأدوات التشفيرية، وكيف نربط هذا الأمن بمسائلَ حاسوبية (computational problems) ملموسة. التشفير موضوعٌ واسع ومتغيّر باستمرار، لكنّنا سنتناول في هذا الفصل بعض هذه المسائل.

لا يمكن لتغطية التشفير في فصلٍ واحد، ولذلك فإنّ هذا الفصل يمنحكم مجرّد «مذاق» من علم التشفير، مع التركيز على الجوانب الأكثر صلةً بالتعقيد الحاسوبي. وللمعالجة الأوسع، راجعوا ملاحظات محاضرتي التي أُعدَّ هذا الفصل على أساسها. سنناقش بعض «النظم التشفيرية الكلاسيكية» ونبيّن كيف يمكننا تعريف أمان التشفير رياضيًّا، ونستخدم الوسادة لمرة واحدة (one-time pad) لتحقيق تشفير يُثبت أنّه يحقّق هذا التعريف. سنرى بعدها القيدَ الجوهري لهذا التعريف، وكيف نتخلّص منه فنُرخي الأمان بالاكتفاء بالنظر إلى المهاجمين الذين يملكون مواردَ حاسوبية محدودة (bounded computational resources). وهذه الفكرة (computational security) مرتبطة جوهريًّا بالتعقيد الحاسوبي وبسؤال P\mathbf{P} مقابل NP\mathbf{NP}. وسنقدّم أيضًا لمحة يسيرة عن بعض البنى التشفيرية «المتناقضة» التي تتجاوز التشفير بكثير، بما فيها التشفير بالمفتاح العام، والتشفير المتجانس الكامل، والحوسبة الآمنة متعددة الأطراف.

النظم التشفيرية الكلاسيكية

صُمِّمت وكُسرت أعدادٌ هائلة من النظم التشفيرية طوال العصور. ولنَعُد بعضًا من هذه القصص فقط. في عام 1587 أرادت ماري، ملكة اسكتلندا، ووريثةُ عرش إنجلترا، ترتيب اغتيال قريتها إليزابيث الأولى ملكة إنجلترا، لتتسلّى إلى العرش وتفلت أخيرًا من الاعتقال المنزلي الذي كانت تخضع له طوال الثمانية عشر سنة الماضية. وكجزء من هذه المؤامرة المعقّدة، أرسلت رسالةً مشفّرة إلى السير أنتوني بابينغتون.

/images/introtcs/lec_19_cryptography-1.webp

استعملت ماري ما يُعرف بـ_شيفرة الاستبدال_ (substitution cipher) حيث يُحوَّل كل حرف إلى رمز غامض مختلف (انظر الشكل التوضيحي). للوهلة الأولى قد تبدو هذه الرسالة غامضة إلى حدّ بعيد --- تسلسلًا بلا معنًى من رموز غريبة. لكنّ بعد قليلٍ من التفكير قد ندرك أنّ هذه الرموز تتكرّر عدّة مرّات، وأنّ رموزًا مختلفة تتكرّر بترددات مختلفة. والآن لا يحتاج الافتراض بأنّ لكل رمزٍ ما يقابل حرفًا وأنّ الرموز الأكثر تكرارًا تقابل الحروف الأكثر تكرارًا في الأبجدية، إلى قفزة إيمانٍ كبيرة. ومن هذه الملاحظة كانت المسافة إلى كسر الشيفرة كسرًا تامًّا قصيرة، وهو ما قام به فعلًا عملاء الملكة إليزابيث، إذ استعملوا الحروف المفكوكة ليتعرّفوا على جميع المتآمرين ويدينوا الملكة ماري بالخيانة، وهي جريمة أُعدمَت من أجلها. إنّ الثقة في تدابير أمنيّة سطحيّة (مثل استعمال رموز «لا تُقرأ») هي فخٌّ سقط فيه مستخدمو التشفير مرارًا وتكرارًا عبر السنين. (وكما الحال في أمور كثيرة، فإنّ هذه المسألة موضوعُ رسمٍ كاريكاتوري في XKCD، انظر الشكل التوضيحي.)

/images/introtcs/lec_19_cryptography-2.webp

سُمِّيت شيفرة فيجينير نسبةً إلى بليز دو فيجينير الذي وصفها في كتابٍ عام 1586 (مع أنّ بيلاسو اخترعها في وقتٍ أسبق). الفكرة هي استعمال مجموعةٍ من شفرات الاستبدال: إن كانت هناك nn من الشفرات المختلفة، فإنّ الحرف الأول من النص الصريح يُرمَّز بالشيفرة الأولى، والثاني بالشيفرة الثانية، والـ nthn^{th} بالشيفرة الـ nn، ثم يُرمَّز الحرف n+1stn+1^{st} من جديد بالشيفرة الأولى. المفتاح kk يكون عادةً كلمةً أو عبارةً من nn حرفًا. وشيفرة الاستبدال ithi^{th} تُزيح كل حرف بمقدار الإزاحة ذاتها اللازمة للانتقال من A إلى kik_i. فإذا كان kik_i هو C مثلًا، فإنّ شيفرة الاستبدال ithi^{th} تُزيح كل حرف بمقدار موضعين. وهذا «يبطّن» الترددات ويجعل تحليل الترددات أصعب بكثير، ولهذا عُدّت هذه الشيفرة «غير قابلة للكسر» لأكثر من 300 سنة، وحازت لقب «le chiffre indéchiffrable» («الشيفرة التي لا تُكسَر»). ومع ذلك، كسر تشارلز بابيج شيفرة فيجينير عام 1854 (مع أنّه لم ينشر ذلك). وفي عام 1863 كسر فريدريش كاسيسكي الشيفرة ونشر النتيجة. والفكرة هي أنّه متى عرفتَ طول الشيفرة، استطعتَ اختزال المهمّة إلى كسر شيفرة استبدالٍ بسيطة يمكن إنجازه عبر تحليل الترددات (أترى لماذا؟). استعمل قادّة الكونفدرالية شيفرة فيجينير بانتظام أثناء الحرب الأهلية، وكانت رسائلهم تُحلَّل خوارزميًّا بشكلٍ روتيني من قِبل ضباط الاتحاد.

/images/introtcs/lec_19_cryptography-3.webp

تشفيرٌ كونفدرالي للرسالة: «الجنرال بمبرتون: لا ترجّع نصرًا من هذا الجانب من النهر. أبلغ الجنرال جونستون، إن أمكن، متى تستطيع الهجوم على النقطة نفسها في خطوط العدو. أخبرني أيضًا وسأسعى إلى تشتيت الانتباه. لقد أرسلت بعض الطواقم. أرفق إليك رسالةً من الجنرال جونستون».

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

/images/introtcs/lec_19_cryptography-5.webp

وهنا حكايةٌ طريفة: كانت آلة إنجما لا تُسقط أي حرفٍ على نفسه أبدًا. في مارس 1941، تسلّمت ميفيس بيتي، وهي محلّلة شفرات في بليتشلي بارك، رسالةً طويلة جدًّا حاولت فكّ تشفيرها. ثم لاحظت خاصيّةً مدهشة --- الرسالة لم تحتوِ على الحرف «L».[1] أدركت أنّ احتمال عدم ظهور أيّ «L» في الرسالة صغيرٌ جدًّا لحدّ لا يسمح بحدوث ذلك بالصدفة. ومن ثمّ استنتجت أنّ الرسالة الأصلية لا بدّ أنّها كانت مؤلَّفة فقط من حروف L. أي إنّ الأمر على الأرجح أنّ المشغّل، ربما لاختبار الآلة، أرسل رسالة ضغط فيها الحرف «L» مرارًا وتكرارًا. ساعدتها هذه الملاحظة على فكّ الرسالة التالية، ممّا أفادها بهجومٍ إيطالي مخطَّط، وأمّن لها انتصارًا بريطانيًّا ساحقًا فيما صار معروفًا بـ«معركة كيب ماتابان». وساعدت ميفيس أيضًا في كسر آلة إنجما أخرى. وبالمعلومات التي قدّمتها، تمكّن britanniques من تغذية الألمان بمعلوماتٍ كاذبة بأنّ الغزو الحليف الرئيسي سيحدث في باس دو كاليه لا في نورماندي.

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

تعريف التشفير

يمكن عزو كثيرٍ من المصائب التي واجهها مصمّمو النظم التشفيرية عبر التاريخ (وما زالوا يواجهونها!) إلى عدم تعريفهم لأهدافهم أو فهمهم لها على نحوٍ سليم من البداية. لنركّز على سياق التشفير بالمفتاح السرّي (private key encryption). (ويُعرف هذا أيضًا بـ«التشفير المتماثل»؛ طوال آلاف السنين كان «التشفير بالمفتاح السرّي» مرادفًا للتشفير، ولم يُخترع مفهوم التشفير بالمفتاح العام إلّا في السبعينيات من القرن الماضي، انظر تعريف — التشفير بالمفتاح العام.) يريد مرسِلٌ (يُسمّى تقليديًّا «أليس») أن يرسل رسالةً (تُعرف أيضًا بـ_النص الصريح_ (plaintext)) x∈{0,1}∗x\in \{0,1\}^* إلى مستقبِلٍ (يُسمّى تقليديًّا «بوب»). ويودّان أن تبقى رسالته سرّيةً أمام خصمٍ (adversary) يتنصّت على قناة الاتصال أو «يتجسّس» (eavesdrops) عليها (ويُسمّى تقليديًّا «إيف»).

يتبادل أليس وبوب مفتاحًا سرّيًا (secret key) k∈{0,1}∗k \in \{0,1\}^*. (وكما يُستعمل الحرف kk في مواضعَ أخرى من الكتاب للدلالة على عددٍ طبيعي، فإنّنا نستعمله هنا للدلالة على السلسلة المقابلة لمفتاحٍ سرّي.) تستعمل أليس المفتاح kk لـ«تشويش» (scramble) أو تشفير (encrypt) النص الصريح xx إلى نصٍّ مشفّر (ciphertext) yy، ويستعمل بوب المفتاح kk لـ«فكّ التشويش» (unscramble) أو فكّ التشفير (decrypt) النص المشفّر yy إلى النص الصريح xx، وهذا يقودنا إلى التعريف التالي الذي يحاول التقاط معنى كون مخطّط تشفير صالحًا (valid) أو «منطقيًّا»، بصرف النظر عمّا إذا كان آمنًا (secure) أم لا:

تعريف — مخطّط تشفير صالح

ليكن L:N→NL:\N \rightarrow \N و C:N→NC:\N \rightarrow \N دالتّين تُنشطان الأعدادَ الطبيعية على أعدادٍ طبيعية. زوجُ الدوالّ (E,D)(E,D) القابل للحساب في زمن متعدّد الحدود، والذي يُنشط السلاسل على سلاسل، هو مخطّط تشفير صالح بالمفتاح السرّي (valid private key encryption scheme) (أو مخطّط تشفير (encryption scheme_) باختصار) بدالّة طول النص الصريح L(⋅)L(\cdot) ودالّة طول النص المشفّر C(⋅)C(\cdot)، إذا كان لكلّ n∈Nn\in \N و k∈{0,1}nk\in \{0,1\}^n و x∈{0,1}L(n)x \in \{0,1\}^{L(n)}، أنّ ∣Ek(x)∣=C(n)|E_k(x)|= C(n) و D(k,E(k,x))=x  . D(k,E(k,x))=x \;.

سنكتب غالبًا المُدخل الأوّل (أي المفتاح) للتشفير وفكّ التشفير كـ«رأسية سفلى»، ولذلك يمكننا كتابة المعادلة أيضًا على الصورة Dk(Ek(x))=xD_k(E_k(x))=x.

/images/introtcs/lec_19_cryptography-6.webp

تمرين محلول — طوال النص المشفّر والنص الصريح

أثبتوا أنّه لكلّ مخطّط تشفير صالح (E,D)(E,D) بالدالتّين L,CL,C، إنّ C(n)≥L(n)C(n) \geq L(n) لكلّ nn.

الحل

لكلّ مفتاحٍ ثابت k∈{0,1}nk \in \{0,1\}^n، تُترجِم المعادلة المعادلة أنّ الانحسار y↦Dk(y)y \mapsto D_k(y) هو انعكاسٌ (inverse) للانحسار x↦Ek(x)x \mapsto E_k(x)، وهو ما يعني تحديدًا أنّ الانحسار x↦Ek(x)x \mapsto E_k(x) يجب أن يكون واحدًا إلى واحد. ومن ثمّ يجب أن يكون مداه (codomain) لا أصغر من مجاله، وبما أنّ مجاله هو {0,1}L(n)\{0,1\}^{L(n)} ومداء هو {0,1}C(n)\{0,1\}^{C(n)}، فيتّضح أنّ C(n)≥L(n)C(n) \geq L(n).

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

تعريف أمان التشفير

لا يقول تعريف — مخطّط تشفير صالح شيئًا عن أمان (security) EE و DD، بل ويسمح حتى بمخطّط التشفير التافه الذي يتجاهل المفتاح تمامًا ويضع Ek(x)=xE_k(x)=x لكلّ xx. وتعريف الأمان ليس أمرًا تافهًا.

توقّف وتأمّل

ستقدّر دقّة مسألة تعريف أمان التشفير أكثر لو أخذت في هذه النقطة استراحةً من القراءة لخمس دقائق، وحاولتَ (ربّما مع زميل) أن تنظّم أفكارك حول كيفية تعريفك رياضيًّا لفكرة أنّ مخطّط تشفير آمن (secure)، بالمعنى أنّه يحمي سرّيةَ النص الصريح xx.

لقد تبيّن عبر التاريخ أنّ كثيرًا من الهجمات على النظم التشفيرية كانت ترجع إلى اعتماد مصمّمي النظم التشفيرية على «الأمنّ عبر الغموض» (security through obscurity) --- أي الاعتماد على أنّ كون طرقهم (methods) مجهولةً للعدو سيحميهم من الكسر. وهذا افتراضٌ خاطئ؛ فإذا أعدت استعمال طريقةٍ مرارًا وتكرارًا (حتى بمفتاحٍ مختلف في كلّ مرّة) فسينتهي المطّر إلى فهم ما تفعله. وإذا اجتمع أليس وبوب بشكلٍ متكرّر في مكانٍ آمن للاتّفاق على طريقةٍ جديدة، فلا بأس أن يستغلّوا الفرصة أيضًا لتبادل أسرارهم. وهذه الاعتبارات دفعت أوغست كيرخوف إلى أن يصوغ المبدأ التالي عام 1883:

يجب أن يبقى نظامٌ تشفيري آمنًا حتى لو كان كلّ شيء في النظام، باستثناء المفتاح، معرفةً علنية.[2]

لماذا يُقبل بنا أن نفترض أنّ المفتاح هو السرّي وليس الخوارزمية؟ لأنّنا نستطيع دائمًا اختيار مفتاحٍ جديد. لكنّ ذلك لن يفيدنا كثيرًا إذا كان مفتاحنا هو «1234» أو «passw0rd!». وفي الحقيقة، إذا استعملتَ أيّ خوارزمية حتمية لاختيار المفتاح فسينتهي المطّر في النهاية إلى اكتشاف ذلك. ولذلك فإنّ من أجل الأمن يجب أن نختار المفتاح عشوائيًّا (at random)، ويمكننا إعادة صياغة مبدأ كيرخوف على النحو التالي:

لا سرّية من دون عشوائية

هذه نقطةٌ بالغة الأهمية تستحقّ التكرار:

لا سرّية من دون عشوائية.

في قلب كلّ مخطّط تشفيري يوجد مفتاحٌ سرّي، والمفتاح السرّي يُختار دائمًا عشوائيًّا. ومن نتائج ذلك أنّك لفهم التشفير تحتاج إلى نظرية الاحتمالات.

ملاحظة — العشوائية في العالم الحقيقي

اختيار أسرار التشفير يستلزم توليد عشوائية، وهذا يُنجَز عادةً بقياس بيانات «غير قابلة للتنبّؤ» أو «عالية الأنتروبيا»، ثمّ تطبيق دوالّ التجزئة على النتيجة «لاستخراج» سلسلةٍ عشوائية بانتظام تامّ. ينبغي بذل عنايةٍ كبيرة في ذلك، وكثيرًا ما تبيّن أنّ مولّدات العشوائية هي نقطةَ الضعف في الأنظمة الآمنة.

في عام 2006 حذف مبرمج سطرًا من شيفرة إجراء توليد الأنتروبيا في حزمة OpenSSL التي توزّعها دبيان، لأنّه كان يسبّب تحذيرًا في بعض شيفرة التحقّق التلقائي. والنتيجة أنّه لمدّة سنتين (حتى اكتُشف الأمر) كان كلُّ ما تولّده هذا الإجراء من عشوائية يستخدم معرّف العملية (process ID) وحده بوصفه مصدرًا «غير قابل للتنبّؤ». وهذا يعني أنّ كلّ الاتصال الذي أجراه المستخدمون في تلك الفترة يمكن كسره بسهولةٍ نسبية (والتحديد، إن سجّلت بعض الجهات ذلك الاتصال يكسرونه لاحقًا أيضًا). انظر قراءة XKCD لذلك الحادثة.

في عام 2012 فحص فريقان منفصلان من الباحثين عددًا كبيرًا من مفاتيح RSA على الويب ووجدا أنّ نحو 4 بالمئة منها سهلة الكسر. كانت المشكلة الأساسية في أجهزةٍ مثل الموجّهات (routers) والطابعات المتّصلة بالإنترنت وما شابه. أحيانًا تعمل هذه الأجهزة بنُسخ مُعدَّلة من لينكس --- نظام تشغيل سطح المكتب --- لكن من دون قرص صلب أو فأرة أو لوحة مفاتيح، فهي لا تصل إلى كثيرٍ من مصادر الأنتروبيا التي تتوفّر على أجهزة سطح المكتب. وعند اقتران ذلك بقدرٍ من الجهل القديم بالمصطلح في علم التشفير وبأخطاء البرمجيات، أدّى ذلك إلى مفاتيحَ كثيرةٍ تُكسَر بكلّ بساطة، انظر هذه المقالة في المدوّنة وهذه الصفحة لمزيدٍ من التفاصيل.

ولأنّ العشوائية بالغة الأهمية للأمن، فإنّ كسر إجراء توليد العشوائية قد يؤدّي إلى كسرٍ كاملٍ للنظام الذي يستعمل هذه العشوائية. وفي الواقع، تُشير وثائق سنودن، مقترنةً بملاحظات شومو وفيرغسون، إلى نحوٍ قويّ أنّ وكالة الأمن الوطني (NSA) أدخلت عمدًا فتحةً خلفية (trapdoor) في أحد مولّدات شبه العشوائية التي نشرها المعهد الوطني للمعايير والتقنية (NIST). ولحسن الحظّ لم يعمَّم استعمال هذا المولّد على نطاقٍ واسع، لكنّ يبدو أنّ وكالة الأمن الوطني أيضًا دفعت 10 ملايين دولار إلى شركة RSA Security كي تجعل هذا المولّد الخيار الافتراضي في منتجاتها.

السرّية التامّة

إن فكّرت قليلًا في أمان مخطّطات التشفير، فقد يصير لديك المبدأ التالي لتعريف الأمان: «مخطّط التشفير آمن إذا كان من المستحيل استرجاع المفتاح kk من Ek(x)E_k(x)». لكنّ دقيقةً من التفكير تُظهر أنّ المفتاح ليس هو ما نحاول حمايته أصلًا. فبعد كلّ شيء، الغرض من التشفير كلّه هو حماية سرّية النص الصريح xx. وإذن يمكننا أن نجرّب أن نعرّف: «مخطّط التشفير آمن إذا كان من المستحيل استرجاع النص الصريح xx من Ek(x)E_k(x)». لكنّ هذا أيضًا لا يوضّح ما نعنيه. لنفترض أنّ مخطّط تشفير يكشف البتّات العشرة الأولى من النص الصريح xx. قد لا يزال من المستحيل استرجاع xx بالكامل، لكنّ على المستوى الحدسي يبدو أنّ استعمال مخطّط تشفير كهذا في العمليّة سيكون حكيمةً إلى حدٍّ بعيد. وفي الواقع، غالبًا ما يكفي الخصمَ معلومةٌ جزئيّة (partial information) عن النص الصريح لتحقيق أهدافه.

أدى التفكير أعلاه إلى أن صاغ شانون عام 1945 مفهوم السرّية التامّة (perfect secrecy)، أي أنّ التشفير لا يكشف عن الرسالة شيئًا على الإطلاق. وهناك عدّة طرق متكافئة لتعريفها، لكنّ أنظفَها ربّما هو التالي:

تعريف — السرّية التامّة

مخطّطُ التشفير الصالح (E,D)(E,D) ذو طول النص الصريح L(⋅)L(\cdot) هو سرّيتمامًا (perfectly secret) إذا كان لكلّ n∈Nn\in \N وللنصَّين الصريحين x,x′∈{0,1}L(n)x,x' \in \{0,1\}^{L(n)}، التوزيعان YY و Y′Y' على {0,1}∗\{0,1\}^* متطابقين:

  • YY يُنشأ بأخذ عيّنة k∼{0,1}nk\sim \{0,1\}^n وإخراج Ek(x)E_k(x).

  • Y′Y' يُنشأ بأخذ عيّنة k∼{0,1}nk\sim \{0,1\}^n وإخراج Ek(x′)E_k(x').

توقّف وتأمّل

قد يستغرق هذا التعريف أكثر من قراءةٍ واحدة ليستوعبه. حاول أن تتخيّل كيف يقابل هذا الشرط تصوّرَك الحدسي بأنّك «لا تتعلّم أيّ معلومة» عن xx من ملاحظة Ek(x)E_k(x)، وكيف يقابل اقتباس شانون في بداية هذا الفصل.

بصورة خاصة، لنفترض أنّك كنت تعرف مسبقًا أنّ أليس أرسلت إمّا تشفير xx أو تشفير x′x'. هل ستتعلّم شيئًا جديدًا من ملاحظة تشفير الرسالة التي أرسلتها أليس فعلًا؟ ربّما يفيدك النظر في الشكل التوضيحي.

/images/introtcs/lec_19_cryptography-7.webp

مثال: السرّية التامّة في ساحة المعركة

لفهم تعريف — السرّية التامّة، لنفترض أنّ أليس ترسل واحدةً فقط من رسالتين محتملتين: «هجوم» أو «انسحاب»، ونرمّز لهما على التوالي بـx0x_0 و x1x_1، وأنّها ترسل كلًّا منهما باحتمال 1/21/2. ولنتخيّل أنفسنا في موقع إيف (Eve) الخصمة المتنصّتة. كان من المتوقّع (a priori) أن نتوقّع أنّ أليس أرسلت x0x_0 أو x1x_1 باحتمال 1/21/2. الآن نلاحظ y=Ek(xi)y=E_k(x_i) حيث kk مفتاحٌ مختار بانتظام في {0,1}n\{0,1\}^n. كيف تُحدِّث هذه المعلومة الجديدة معتقداتنا حول ما إذا كانت أليس أرسلت النص الصريح x0x_0 أم النص الصريح x1x_1؟

توقّف وتأمّل

قبل أن تقرأ الفقرة التالية، ربّما ترغب في أن تجري هذا التحليل بنفسك. قد يفيدك النظر في موّسوعة ويكيبيديا عن الاستدلال البايزي أو في ملاحظات محاضرات MIT هذه.

لنُعرِّف p0(y)p_0(y) على أنّه الاحتمال (بأخذ k∼{0,1}nk\sim \{0,1\}^n في الحسبان) بأنّ y=Ek(x0)y=E_k(x_0)، وبالمثل p1(y)p_1(y) على أنّه Pr⁡k∼{0,1}n[y=Ek(x1)]\Pr_{k \sim \{0,1\}^n}[y=E_k(x_1)]. لاحظ أنّه، بما أنّ أليس تختار الرسالة التي ترسلها عشوائيًّا، فإنّ احتمالنا القبلي (a priori) في ملاحظة yy هو 12p0(y)+12p1(y)\tfrac{1}{2}p_0(y) + \tfrac{1}{2}p_1(y). لكنّ، طبقًا لـ تعريف — السرّية التامّة، يضمن شرط السرّية التامّة أنّ p0(y)=p1(y)p_0(y)=p_1(y)! ولنسمِّ العددَ p0(y)=p1(y)p_0(y)=p_1(y) بـpp. وبصيغة الاحتمال الشرطي، فإنّ احتمال أن تكون أليس أرسلت الرسالة x0x_0 شرطًا لملاحظتنا yy هو ببساطة Pr⁡[i=0∣y=Ek(xi)]=Pr⁡[i=0∧y=Ek(xi)]Pr⁡[y=Ek(x)]  . \Pr[i=0 | y=E_k(x_i)] = \frac{\Pr[i=0 \wedge y = E_k(x_i)]}{\Pr[y = E_k(x)]} \;.

(المعادلة المعادلة حالةٌ خاصة من قاعدة بايز (Bayes' rule)، وهي وإن كانت إعادة صياغةٍ بسيطة لصيغة الاحتمال الشرطي، إلّا أنّها أداةٌ بالغة الأهمية وشائعة الاستعمال في الإحصاء وتحليل البيانات.)

بما أنّ احتمال أن يكون i=0i=0 وأنّ yy هو النص المشفّر Ek(0)E_k(0) يساوي 12⋅p0(y)\tfrac{1}{2}\cdot p_0(y)، وأنّ احتمالنا القبلي في ملاحظة yy هو 12p0(y)+12p1(y)\tfrac{1}{2}p_0(y) + \tfrac{1}{2}p_1(y)، فيمكننا إعادة كتابة المعادلة على الصورة Pr⁡[i=0∣y=Ek(xi)]=12p0(y)12p0(y)+12p1(y)=pp+p=12 \Pr[i=0 | y=E_k(x_i)] = \frac{\tfrac{1}{2}p_0(y)}{\tfrac{1}{2}p_0(y)+\tfrac{1}{2}p_1(y)} = \frac{p}{p +p} = \frac{1}{2} باستعمال الحقيقة p0(y)=p1(y)=pp_0(y)=p_1(y)=p. وهذا يعني أنّ ملاحظة النص المشفّر yy لم تساعدنا في شيء على الإطلاق! وظلّنا غير قادرين على التخمين ما إذا كانت أليس أرسلت «هجوم» أم «انسحاب» بفرص أفضل من 50/50!

يمكن تعميم هذا المثال إلى حدٍّ بعيد ليبني أنّ السرّية التامّة هي فعلًا «تامّة» بالمعنى أنّه ملاحظة نصٍّ مشفّر لا تمنح إيف أيّ معلومة إضافيّة (no additional information) عن النص الصريح تتجاوز ما تعرفه سلفًا.

بناء تشفيرٍ سرّي تمامًا

السرّية التامّة (perfect secrecy) شرطٌ قويٌّ إلى حدٍّ يّ، وهو يستلزم أنّ المتنصِّص لا يتعلّم أيّ معلومة من ملاحظة النص المشفّر. وربّما تظنّ أنّ تحقيق مخطّط تشفير يحقّق شرطًا قويًّا كهذا مستحيل، أو على الأقلّ معقّد إلى حدٍّ كبير. غير أنّه اتّضح لنا في الحقيقة أنّنا نستطيع الحصول على مخطّط تشفيرٍ سرّي تمامًا بسهولةٍ نسبية.

/images/introtcs/lec_19_cryptography-8.webp

وتصوّرُ لمخطّطٍ كهذا لرسائل بطول بتّتين في الشكل التوضيحي.

وفي الحقيقة، يمكن تعميم هذا على أيّ عددٍ من البتّات:

مبرهنة — الوسادة لمرة واحدة (فيرنام 1917، شانون 1949)

يوجد مخطّطُ تشفيرٍ صالح وسرّي تمامًا (E,D)(E,D) مع L(n)=C(n)=nL(n)=C(n)=n.

مخطّطنا هو الوسادة لمرة واحدة (one-time pad) المعروفة أيضًا بـ«شيفرة فيرنام»، انظر الشكل التوضيحي. والتشفير بسيطٌ إلى حدٍّ يّ: لتشفير رسالة x∈{0,1}nx\in \{0,1\}^n بمفتاح k∈{0,1}nk \in \{0,1\}^n، نكتفي بإخراج x⊕kx \oplus k حيث ⊕\oplus هي عملية XOR البتّانية التي تُخرج السلسلة المقابلة لعملية XOR بين كلّ إحداثيّتين من xx و kk.

برهان

لسللسلتين ثنائيّتين aa و bb من الطول نفسه nn، نُعرِّف a⊕ba \oplus b بأنها السلسلة c∈{0,1}nc \in \{0,1\}^n بحيث ci=ai+bimod  2c_i = a_i + b_i \mod 2 لكلّ i∈[n]i\in [n]. ويُعرَّف مخطّط التشفير (E,D)(E,D) على النحو التالي: Ek(x)=x⊕kE_k(x) = x\oplus k و Dk(y)=y⊕kD_k(y)= y \oplus k. وبقانون الجمع التجادفي (والذي يعمل أيضًا modulo 2)، لدينا Dk(Ek(x))=(x⊕k)⊕k=x⊕(k⊕k)=x⊕0n=xD_k(E_k(x))=(x\oplus k) \oplus k = x \oplus (k \oplus k) = x \oplus 0^n = x، باستعمال الحقيقة أنّه لكلّ بتّ σ∈{0,1}\sigma \in \{0,1\}، فإنّ σ+σmod  2=0\sigma + \sigma \mod 2 = 0 و σ+0=σmod  2\sigma + 0 = \sigma \mod 2. ومن ثمّ يكون (E,D)(E,D) تشفيرًا صالحًا.

لتحليل خاصية السرّية التامّة، نُدعي أنّه لكلّ x∈{0,1}nx\in \{0,1\}^n، فإنّ التوزيع Yx=Ek(x)Y_x=E_k(x) حيث k∼{0,1}nk \sim \{0,1\}^n هو ببساطة التوزيع المنتظم على {0,1}n\{0,1\}^n، ومن ثمّ إنّ التوزيعين YxY_{x} و Yx′Y_{x'} متطابقان لكلّ x,x′∈{0,1}nx,x' \in \{0,1\}^n. وفي الحقيقة، لكلّ y∈{0,1}ny\in \{0,1\}^n بعينه، تُخرَج القيمة yy بواسطة YxY_x إذا وفقط إذا كان y=x⊕ky = x \oplus k، وهذا يتحقّق إذا وفقط إذا كان k=x⊕yk= x \oplus y. وبما أنّ kk يُختار عشوائيًّا بانتظام في {0,1}n\{0,1\}^n، فإنّ احتمال أن يساوي kk بالصدفة القيمةَ x⊕yx \oplus y هو بالضبط 2−n2^{-n}، ما يعني أنّ كلّ سلسلة yy تُخرَج بواسطة YxY_x باحتمال 2−n2^{-n}.

/images/introtcs/lec_19_cryptography-9.webp

توقّف وتأمّل

الحجّة أعلاه بسيطةٌ إلى حدٍّ كبير، لكنّها تستحق القراءة من جديد. ولفهم لماذا الوسادة لمرة واحدة سرّية تمامًا، من المفيد تخيّلها كرسمٍ بياني ثنائي الجانب كما فعلنا في الشكل التوضيحي. (وفي الحقيقة، مخطّط التشفير في الشكل التوضيحي هو بالضبط الوسادة لمرة واحدة عند n=2n=2.) لكلّ nn، يقابل مخطّطُ التشفير بالوسادة لمرة واحدة رسمًا بيانيًا ثنائي الجانب فيه 2n2^n رأس على «الجانب الأيسر» يقابل النصوص الصريحة في {0,1}n\{0,1\}^n و 2n2^n رأس على «الجانب الأيمن» يقابل النصوص المشفّرة {0,1}n\{0,1\}^n. ولكلّ x∈{0,1}nx\in \{0,1\}^n و k∈{0,1}nk\in \{0,1\}^n، نوصل بين xx والرأس y=Ek(x)y=E_k(x) بحافّةٍ نُسمّيها kk. ويمكن ملاحظة أنّ هذا هو الرسم البياني ثنائي الجانب التامّ، إذ يُوصَل كلُّ رأسٍ على اليسار بجميع الرؤوس على اليمين. وبصورة خاصّة، هذا يعني أنّه لكلّ رأسٍ أيسر xx، فإنّ التوزيع على النصوص المشفّرة الذي ينتج عن أخذ k∈{0,1}nk\in \{0,1\}^n عشوائي والانتقال إلى جار xx على الحافّة الموسومة بـkk هو التوزيع المنتظم على {0,1}n\{0,1\}^n. وهذا يضمن شرط السرّية التامّة.

ضرورة المفاتيح الطويلة

إذن، هل يضع مبرهنة — الوسادة لمرة واحدة (فيرنام 1917، شانون 1949) حدًّا نهائيًّا لأمر التشفير، ويعني أنّنا جميعًا نستطيع أن نتواصل بسرّيةٍ تامّة ونعيش حياةً سعيدة إلى الأبد؟ لا، ليس كذلك. بينما الوسادة لمرة واحدة فعّالةٌ وتعطي سرّيةً تامّة، إلّا أنّ لها عيبًا فادحًا واحدًا: لإرسال nn بتّ تحتاج إلى تخزين مفتاحٍ بطول nn.

وبالمقابل، فإنّ النظم التشفيرية المستعمَلة عمليًا مثل AES-128 تملك مفتاحًا قصيرًا بطول 128128 بتّ (أي 1616 بايت) يمكن أن يحمي تيرابايتات أو أكثر من الاتصال! تخيّل لو كنّا جميعًا بحاجة إلى استعمال الوسادة لمرة واحدة. ولو كان الأمر كذلك، فإنّ عليك --- إن كنت تحتاج إلى الاتصال بـmm أشخاص --- أن تحتفظ (بأمان!) بـmm ملفاتٍ ضخمة، كلٌّ منها بطول أقصى اتصالٍ إجماليّ تتوقّعه مع ذلك الشخص.

وتخيّل أنّك في كلّ مرّة تفتح فيها حسابًا في أمازون أو جوجل أو أيّ خدمةٍ أخرى، سيُرسَل إليك بالبريد (ويفضّل عبر ساعيٍ آمن) قرص DVD مليء بالأعداد العشوائية، وفي كلّ مرّة تشكّ فيها في فيروس، ستحتاج إلى أن تطلب من جميع هذه الخدمات قرص DVD جديدًا. لا يبدو هذا مقنعًا البتّة.

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

وفي الواقع، حتى قبل عمل شانون، كانت الاستخبارات الأمريكية في عام 1941 تعرف بالفعل أنّ الوسادة لمرة واحدة «غير قابلة للكسر» من حيث المبدأ (انظر الصفحة 32 في وثيقة فينونا). غير أنّه تبيّن أنّ عناء صنع كلّ هذه المفاتيح لكلّ الاتصالات أخذ ه من السوفييت، وانتهى الأمر بهم إلى إعادة استعمال المفاتيح ذاتها لأكثر من رسالة. وقد حاولوا فعلًا استخدامها لمستقبِلين مختلفين تمامًا على أمل (الباطل) ألّا يُكتشف ذلك. أسّس مشروع فينونا الجيش الأمريكي في فبراير 1943 كلٌّ من جين غرابيل (انظر الشكل التوضيحي)، وهو معلّمٌ سابقٌ للتربية المنزلية من ماديسن هايتس في ولاية فرجينيا، والملازم لينارد زوبكو. وفي أكتوبر 1943 تحقّق انقلابُهم الكبير حين كُشف عن إعادة استعمال مفاتيحهم. وخلال السبعين وسبع سنواتٍ من عمره، أنتج المشروع كنزًا من الاستخبارات، كشف المئات من عملاء KGB والجواسيس في الولايات المتحدة وفي دولٍ أخرى، ومنهم جوليوس روزنبرغ وهاري غولد وكلاوس فوكس وألجر هيس وهاري دكستر وايت وآخرون كثيرون.

/images/introtcs/lec_19_cryptography-10.webp

/images/introtcs/lec_19_cryptography-11.webp

وللأسف يتبيّن أنّ هذه المفاتيح الطويلة ضرورية للسرّية التامّة:

مبرهنة — السرّية التامّة تتطلّب مفاتيح طويلة

لكلّ مخطّط تشفيرٍ سرّي تمامًا (E,D)(E,D)، فإنّ دالّة الطول LL تحقّق L(n)≤nL(n) \leq n.

الفكرة وراء البرهان مصوَّرة في الشكل التوضيحي. نُعرِّف رسمًا بيانيًا بين النصوص الصريحة والنصوص المشفّرة، نضع فيه حافّةً بين النص الصريح xx والنص المشفّر yy إذا كان هناك مفتاح kk بحيث y=Ek(x)y=E_k(x). درجةُ هذا الرسم البياني (degree) لا تتجاوز عددَ المفاتيح المحتملة. والحقيقة أنّ الدرجة أصغر من عدد النصوص الصريحة (ومن ثمّ عدد النصوص المشفّرة) تعني أنّه سيوجد نصّان صريحان xx و x′x' لهما مجموعتا جيران مختلفتان، ومن ثمّ فإنّ توزيع النص المشفّر المقابل لـxx (بمفتاحٍ عشوائي) لن يتطابق مع توزيع النص المشفّر المقابل لـx′x'.

برهان

ليكن E,DE,D مخطّط تشفيرٍ صالحًا برسائلَ بطول LL ومفتاحٍ بطول n<Ln<L. سنبيّن أنّ (E,D)(E,D) ليس سرّيًا تمامًا بأن نقدّم نصَّين صريحين x0,x1∈{0,1}Lx_0,x_1 \in \{0,1\}^L بحيث لا يتطابق التوزيعان Yx0Y_{x_0} و Yx1Y_{x_1}، حيث YxY_x هو التوزيع الذي ينتج عن أخذ k∼{0,1}nk \sim \{0,1\}^n وإخراج Ek(x)E_k(x).

نختار x0=0Lx_0 = 0^L. ولنُعرِّف S0⊆{0,1}∗S_0 \subseteq \{0,1\}^* لتكون مجموعة كلّ النصوص المشفّرة التي احتمال أن تُخرَج في Yx0Y_{x_0} غير معدوم. أي أنّ S0={y  ∣  ∃k∈{0,1}ny=Ek(x0)}S_0=\{ y \;|\; \exists_{k\in \{0,1\}^n} y=E_k(x_0) \}. وبما أنّ هناك 2n2^n مفتاحًا فقط، نعرف أنّ ∣S0∣≤2n|S_0| \leq 2^n.

سنبيّن الادّعاء التالي:

الادّعاء I: يوجد x1∈{0,1}Lx_1 \in \{0,1\}^L و k∈{0,1}nk\in \{0,1\}^n بحيث Ek(x1)∉S0E_k(x_1) \not\in S_0.

يترتّب على الادّعاء I أنّ السلسلة Ek(x1)E_k(x_1) لها احتمالٌ موجب في أن تُخرَج بواسطة Yx1Y_{x_1} واحتمالُ صفر في أن تُخرَج بواسطة Yx0Y_{x_0}، ومن ثمّ إنّ Yx0Y_{x_0} و Yx1Y_{x_1} ليسا متطابقين. ولإثبات الادّعاء I، يكفي فقط اختيار مفتاحٍ ثابت k∈{0,1}nk\in \{0,1\}^n. وشرط الصلاحية يقتضي أنّ الانحسار x↦Ek(x)x \mapsto E_k(x) انحسارٌ واحد إلى واحد من {0,1}L\{0,1\}^L إلى {0,1}∗\{0,1\}^*، ومن ثمّ تحديدًا فإنّ صورةَ هذا الانحسار، أي المجموعة Ik={y  ∣  ∃x∈{0,1}Ly=Ek(x)}I_k = \{ y \;|\; \exists_{x\in \{0,1\}^L} y=E_k(x) \}، لها حجمٌ على الأقلّ (وفي الحقيقة بالضبط) 2L2^L. وبما أنّ ∣S0∣≤2n<2L|S_0| \leq 2^n < 2^L، فإنّ هذا يعني أنّ ∣Ik∣>∣S0∣|I_k|>|S_0|، ومن ثمّ تحديدًا توجد سلسلة yy ما في Ik∖S0I_k \setminus S_0. لكنّه بتعريف IkI_k، هذا يعني أنّ هناك x∈{0,1}Lx\in \{0,1\}^L ما بحيث Ek(x)∉S0E_k(x) \not\in S_0، وهذا يُتمّ إثبات الادّعاء I ومن ثمّ مبرهنة — السرّية التامّة تتطلّب مفاتيح طويلة.

السرّية الحسابية

  • من الممكن الحصول على مخطّط تشفيرٍ سرّي تمامًا يكون طول مفتاحه مساويًا لطول النص الصريح.

وأنّ

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

فكيف ينسجم هذا مع الحقيقة، كما رأينا سابقًا، بأنّ الناس يستخدمون بصورة روتينية نظمًا تشفيرية بمفتاح بطول 16 بايت (أي 128 بتّ) لكن بنصوص صريحة تبلغ تيرابايتاتٍ كثيرة؟ وبرهان مبرهنة — السرّية التامّة تتطلّب مفاتيح طويلة يقدّر فعلًا طريقةً لكسر كلّ هذه النظم التشفيرية، لكنّ فحص هذا البرهان يُظهر أنّه لا يُنتج إلّا خوارزمية زمنها أسّيّ في طول المفتاح. وهذا يقودنا إلى التخفيف التالي لشرط السرّية التامّة إلى شرطٍ معروف بـ_«السرّية الحسابية»_ (computational secrecy). وبصورة حدسيّة، يكون مخطّط التشفير سريًّا حسابيًّا إذا لم تكن هناك أيّ خوارزمية ذات زمن متعدّد الحدود تستطيع كسره. والتعريف الرسمي هو التالي:

تعريف — السرّية الحسابية

ليكن (E,D)(E,D) مخطّط تشفيرٍ صالحًا، حيث إنّ المفاتيح بطول nn، والنصوص الصريحة بطول L(n)L(n)، والنصوص المشفّرة بطول m(n)m(n). نقول إنّ (E,D)(E,D) سرّيٌّ حسابيًّا (computationally secret) إذا كان لكلّ كثير الحدود p:N→Np:\N \rightarrow \N، و nn كبير بما يكفي، إذا كان PP برنامج NAND-CIRC له m(n)m(n) مُدخلًا ومُخرجًا واحدًا، ولا يتجاوز p(n)p(n) سطرًا، و x0,x1∈{0,1}L(n)x_0,x_1 \in \{0,1\}^{L(n)}، فإنّ

∣Ek∼{0,1}n[P(Ek(x0))]−Ek∼{0,1}n[P(Ek(x1))]∣<1p(n) \left| \E_{k \sim \{0,1\}^n} [P(E_k(x_0))] - \E_{k \sim \{0,1\}^n} [P(E_k(x_1))] \right| < \tfrac{1}{p(n)}

توقّف وتأمّل

تعريف — السرّية الحسابية يحتاج إلى قراءةٍ ثانية أو ثالثة وبعض الممارسة لفهمه حقًّا. من التمارين الممتازة للتأكّد من أنّك تتّبعه أن ترى ما يلي: إذا سمحنا بأن يكون PP دالّة غير مقيَّدة (arbitrary) تُنشِط {0,1}m(n)\{0,1\}^{m(n)} على {0,1}\{0,1\}، واستبدلنا في المعادلة الشرط بأنّ الطرف الأيسر أصغر من 1p(n)\tfrac{1}{p(n)} بالشرط بأنّه يساوي 00، فإنّنا نحصل على شرط السرّية التامّة في تعريف — السرّية التامّة. وفي الواقع، إذا كان التوزيعان Ek(x0)E_k(x_0) و Ek(x1)E_k(x_1) متطابقين، فإنّ تطبيق أيّ دالّة PP عليهما يعطي التوقّع ذاته. ومن جهةٍ أخرى، إذا أعطى التوزيعان أعلاه احتمالًا مختلفًا لعنصرٍ ما y∗∈{0,1}m(n)y^*\in \{0,1\}^{m(n)}، فإنّ الدالّة P(y)P(y) التي تُخرج 11 إذا وفقط إذا كان y=y∗y=y^* سيكون لها توقّعٌ مختلف تحت التوزيع الأوّل ممّا هو عليه تحت التوزيع الثاني.

تعريف — السرّية الحسابية يطرح سؤالين طبيعيين:

  • هل هو قويٌّ بما يكفي لضمان أنّ مخطّط التشفير السريّ حسابيًّا يحمي سرّيةَ الرسائل المشفّرة به؟

  • هل هو ضعيفٌ بما يكفي بحيث -- على خلاف السرّية التامّة -- من الممكن الحصول على مخطّط تشفيرٍ سريٍّ حسابيًّا يكون فيه المفتاح أصغر بكثير من الرسالة؟

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

الصلابةُ الحاسوبية ضرورية وكافية لكلّ التطبيقات التشفيرية تقريبًا.

وفيما يتعلّق بالسؤال الأوّل، ليس من الصعب أن نبيّن أنّه إذا استعملت أليس --- مثلًا --- خوارزمية تشفيرٍ سريّة حسابيًّا لتشفير إمّا «هجوم» أو «انسحاب» (يُختار كلٌّ منهما باحتمال 1/21/2)، فإنّ الخصمة إيف --- ما دامت مقيّدةً بخوارزميات ذات زمن متعدّد الحدود --- لن تستطيع تخمين الرسالة باحتمالٍ أفضل من 0.510.51، ولنقل، حتى بعد ملاحظة صيغتها المشفّرة. (ونترك البرهان هنا، لكنّ اشتقاقه على يدك تمرينٌ ممتاز.)

ولنجيب عن السؤال الثاني بأن نبيّن أنّه، في حال الافتراض نفسه الذي استعملناه لإزالة العشوائية عن BPP\mathbf{BPP}، يمكننا الحصول على نظام تشفيرٍ سريٍّ حسابيًّا يكون فيه المفتاح أصغرَ أسّيًّا (exponentially) تقريبًا من النص الصريح.

الشفرات التيابعية أو «الوسادة لمرة واحدة منزوعة العشوائية»

اتّضح أنّه إذا وُجدت مولّداتُ شبه عشوائية على النحو الذي تنصّ عليه حدسُ PRG الأمثل، فإنّ هناك مخطّط تشفيرٍ سريٍّ حسابيًّا بمفاتيح أقصر بكثير من النص الصريح. والبِناء أدناه معروف بـالشفرة التيابعية (stream cipher)، وإن كان ربّما الاسم الأدقّ هو «الوسادة لمرة واحدة منزوعة العشوائية».

/images/introtcs/lec_19_cryptography-12.webp

ويُستعمل على نطاقٍ واسع في العمليّة بمفاتيح بطول عشرات أو مئات البتّات، تحمي تيرابايتاتٍ كثيرة أو حتى بيتابايتات من الاتصال.

نبدأ بتذكّر فكرة مولّد شبه العشوائية (pseudorandom generator)، كما هي معرَّفة في تعريف — المولِّدُ شبه العشوائي. ولأغراض هذا الفصل، سنثبّت حالةً خاصة من التعريف:

تعريف — مولّد شبه العشوائية التشفيري

ليكن L:N→NL:\N \rightarrow \N دالّةً ما. مولّدُ شبه العشوائية التشفيري (cryptographic pseudorandom generator) ذو الامتداد L(⋅)L(\cdot) هو دالّة G:{0,1}∗→{0,1}∗G:\{0,1\}^* \rightarrow \{0,1\}^* قابلة للحساب في زمن متعدّد الحدود بحيث:

  • لكلّ n∈Nn\in \N و s∈{0,1}ns\in \{0,1\}^n، ∣G(s)∣=L(n)|G(s)|=L(n).

  • لكلّ كثير حدود p:N→Np:\N \rightarrow \N و nn كبير بما يكفي، إذا كانت CC دائرةً لها L(n)L(n) مُدخلًا ومُخرجًا واحدًا، ولا تتجاوز p(n)p(n) بوابة، فإنّ ∣Pr⁡s∼{0,1}ℓ[C(G(s))=1]−Pr⁡r∼{0,1}m[C(r)=1]∣<1p(n)  . \left| \Pr_{s\sim \{0,1\}^\ell}[C(G(s))=1] - \Pr_{r \sim \{0,1\}^m}[C(r)=1] \right| < \frac{1}{p(n)} \;.

في هذا الفصل سنسمّي مولّد شبه العشوائية التشفيري ببساطة مولّدَ شبه عشوائية (pseudorandom generator) أو PRG باختصار. وحدسُ PRG الأمثل في من الوجود إلى الإنشائية (constructivity) يقتضي أنّ هناك مولّد شبه عشوائية يستطيع «خداع» الدوائر ذات الحجم الأسّي، وحيث لا يتجاوز الفارق في الاحتمالات واحدًا مقسومًا على كمّية أسية. وبما أنّ النمو الأسّي ينمو أسرع من كلّ كثير حدود، فإنّ حدس PRG الأمثل يقتضي ما يلي:

حدس PRG التشفيري: لكلّ a∈Na \in \N، هناك مولّد شبه عشوائية تشفيري بـL(n)=naL(n)=n^a.

حدسُ PRG التشفيري أضعف من حدس PRG الأمثل، لكنّه أيضًا (كما سنرى) أقوى من الحدس القائل إنّ P≠NP\mathbf{P} \neq \mathbf{NP}.

مبرهنة — الوسادة لمرة واحدة منزوعة العشوائية

لنفترض أنّ حدس PRG التشفيري صحيح. عندئذٍ، لكلّ ثابت a∈Na\in \N، يوجد مخطّطُ تشفيرٍ سريٌّ حسابيًّا (E,D)(E,D) طولُ نصّه الصريح L(n)L(n) لا يقلّ عن nan^a.

البرهان مصوَّر في الشكل التوضيحي. نكتفي بأخذ الوسادة لمرة واحدة على نصوصٍ صريحة بطول LL بتّ، لكن مع استبدال المفتاح بـG(k)G(k) حيث kk سلسلةٌ في {0,1}n\{0,1\}^n و G:{0,1}n→{0,1}LG:\{0,1\}^n \rightarrow \{0,1\}^L مولّدُ شبه عشوائية. وبما أنّ الوسادة لمرة واحدة لا يمكن كسرها، فإنّ خصمًا يكسر الوسادة لمرة واحدة منزوعة العشوائية يمكن استعماله للتمييز بين خرَج مولّد شبه العشوائية والتوزيع المنتظم.

برهان

ليكن G:{0,1}n→{0,1}LG:\{0,1\}^n \rightarrow \{0,1\}^L مع L=naL = n^a تقييدَ مولّد شبه العشوائية GG على طول مُدخل nn، وهو المولّد الذي يضمن لنا وجودَه حدسُ PRG التشفيري. ونُعرِّف الآن مخطّط التشفير على النحو التالي: بمفتاح k∈{0,1}nk\in \{0,1\}^n ونص صريح x∈{0,1}Lx\in \{0,1\}^L، فإنّ التشفير Ek(x)E_k(x) هو ببساطة x⊕G(k)x \oplus G(k). ولفكّ سلسلة y∈{0,1}my \in \{0,1\}^m نُخرج y⊕G(k)y \oplus G(k). وهذا تشفيرٌ صالح لأنّ GG قابلة للحساب في زمن متعدّد الحدود، وأنّ (x⊕G(k))⊕G(k)=x⊕(G(k)⊕G(k))=x(x \oplus G(k)) \oplus G(k) = x \oplus (G(k) \oplus G(k))=x لكلّ x∈{0,1}Lx\in \{0,1\}^L.

وتترتّب السرّية الحسابية من شرط مولّد شبه العشوائية. ولنفترض، طلبًا للتناقض، أنّ هناك كثيرَ حدود pp، وبرنامج NAND-CIRC QQ لا يتجاوز p(L)p(L) سطرًا، و x,x′∈{0,1}L(n)x,x' \in \{0,1\}^{L(n)} بحيث (ونستعمل هنا الحقيقة البسيطة أنّه لمتغيّر عشوائي XX يأخذ قيمًا في {0,1}\{0,1\}، فإنّ Pr⁡[X=1]=E[X]\Pr[X=1]=\E[X].)

وبتعريف مخطّط التشفير الخاصّ بنا، يعني هذا أنّ ∣Ek∼{0,1}n[Q(G(k)⊕x)]−Ek∼{0,1}n[Q(G(k)⊕x′)]∣>1p(L)  . \left| \E_{k \sim \{0,1\}^n}[ Q(G(k) \oplus x)] - \E_{k \sim \{0,1\}^n}[Q(G(k) \oplus x')] \right| > \tfrac{1}{p(L)} \;.

والآن بما أنّنا (كما رأينا في تحليل أمان الوسادة لمرة واحدة) فإنّ سلسلتين x,x′∈{0,1}Lx,x'\in \{0,1\}^L، فإنّ التوزيعين r⊕xr \oplus x و r⊕x′r \oplus x' متطابقان، حيث r∼{0,1}Lr\sim \{0,1\}^L. ومن ثمّ Er∼{0,1}L[Q(r⊕x)]=Er∼{0,1}L[Q(r⊕x′)]  . \E_{r \sim \{0,1\}^L} [ Q(r \oplus x)] = \E_{r \sim \{0,1\}^L} [ Q(r \oplus x')] \;. وبإدخال المعادلة في المعادلة، يمكننا أن نستنتج أنّ ∣Ek∼{0,1}n[Q(G(k)⊕x)]−Er∼{0,1}L[Q(r⊕x)]+Er∼{0,1}L[Q(r⊕x′)]−Ek∼{0,1}n[Q(G(k)⊕x′)]∣>1p(L)  . \left| \E_{k \sim \{0,1\}^n}[ Q(G(k) \oplus x)] - \E_{r \sim \{0,1\}^L} [ Q(r \oplus x)] + \E_{r \sim \{0,1\}^L} [ Q(r \oplus x')] - \E_{k \sim \{0,1\}^n}[Q(G(k) \oplus x')] \right| > \tfrac{1}{p(L)} \;. (من فضلك تأكّد من أنّك ترى لماذا هذا صحيح.)

والآن يمكننا استعمال متراجحة المثلثات (triangle inequality) ∣ ⁣A+B ⁣∣≤∣ ⁣A ⁣∣+∣ ⁣B ⁣∣|\!A+B\!| \leq |\!A\!|+|\!B\!| لكلّ عددين A,BA,B، بتطبيقها على A=Ek∼{0,1}n[Q(G(k)⊕x)]−Er∼{0,1}L[Q(r⊕x)]A= \E_{k \sim \{0,1\}^n}[ Q(G(k) \oplus x)] - \E_{r \sim \{0,1\}^L} [ Q(r \oplus x)] و B=Er∼{0,1}L[Q(r⊕x′)]−Ek∼{0,1}n[Q(G(k)⊕x′)]B= \E_{r \sim \{0,1\}^L} [ Q(r \oplus x')] - \E_{k \sim \{0,1\}^n}[Q(G(k) \oplus x')]، لنستنتج أنّ $$ \left| \E_{k \sim {0,1}^n}[ Q(G(k) \oplus x)] - \E_{r \sim {0,1}^L} [ Q(r \oplus x)] \right| + \left| \E_{r \sim {0,1}^L} [ Q(r \oplus x')] - \E_{k \sim {0,1}^n}[Q(G(k) \oplus x')] \right| > \tfrac{1}{p(L)} ;.

وبصورة خاصّة، إمّا الحدّ الأوّل أو الحدّ الثاني من الطرف الأيسر لـ eqprgsefour لا بدّ من أن يكون على الأقلّ 12p(L)\tfrac{1}{2p(L)}. ولنفترض أنّ الحالة الأولى هي الحالة القائمة (الحالة الثانية تُحلَّل بالطريقة ذاتها تمامًا). عندئذٍ نحصل على ∣Ek∼{0,1}n[Q(G(k)⊕x)]−Er∼{0,1}L[Q(r⊕x)]∣>12p(L)  .<spanclass="content−anchor"id="distingprgeq"></span> \left| \E_{k \sim \{0,1\}^n}[ Q(G(k) \oplus x)] - \E_{r \sim \{0,1\}^L} [ Q(r \oplus x)] \right| > \tfrac{1}{2p(L)} \;. <span class="content-anchor" id="distingprgeq"></span>

لكنّنا إذا عرّفنا الآن برنامج NAND-CIRC الذي يسمّى PxP_x بحيث يُخرج Q(r⊕x)Q(r \oplus x) عند مُدخل r∈{0,1}Lr\in \{0,1\}^L، فإنّنا (لأنّ XOR لـLL بتّ يمكن حسابه في O(L)O(L) سطرًا) نحصل على أنّ PxP_x له p(L)+O(L)p(L)+O(L) سطرًا، وبـ distingprgeq استطاع التمييز بين مُدخلٍ من الشكل G(k)G(k) ومُدخلٍ من الشكل r∼{0,1}kr \sim \{0,1\}^k بميزةٍ أفضل من 12p(L)\tfrac{1}{2p(L)}. وبما أنّ كلّ كثير حدود يغلبه عددٌ أسّي، فإنّنا إذا جعلنا LL كبيرًا بما يكفي سيتناقض هذا مع أمان (2δn,2−δn)(2^{\delta n},2^{-\delta n}) لمولّد شبه العشوائية GG.

ملاحظة — الشفرات التيابعية في العمليّة

أوسع صور التشفير بالمفتاح السرّي استعمالًا في العمليّة هما الشفرات التيابعية (stream ciphers) و_الشفرات الكتلية_ (block ciphers).

(ولإرباك الأمر أكثر، فإنّ الشفرة الكتلية تُستعمل دائمًا في وضع تشغيل ما، وبعض هذه الأوضاع تحوّل الشفرة الكتلية عمليًا إلى شفرةٍ تيباعية.) ويمكن التفكير في الشفرة الكتلية على أنّها نوعٌ من «الخريطة العشوائية القابلة للعكس» من {0,1}n\{0,1\}^n إلى {0,1}n\{0,1\}^n، وأنّها يمكن استعمالها لبناء مولّد شبه عشوائية ومنه شفرةٍ تيباعية، أو لتشفير البيانات مباشرةً بأوضاع تشغيلٍ أخرى. وهناك قدرٌ هائل من مفاهيم الأمان الأخرى واعتباراته لمخطّطات التشفير، تتجاوز السرّية الحسابية بكثير. وكثيرٌ منها يتعلّق بالتعامل مع سيناريوهات مثل هجمات النص الصريح المُختار (chosen plaintext)، و_الرجل في المنتصف_ (man in the middle)، و_النص المشفّر المُختار_ (chosen ciphertext)، حيث لا يكون الخصم مجرّدًا متنصّتًا سلبيًا بل يستطيع التأثير في الاتصال بصورةٍ ما. ومع أنّ هذا الفصل مقصودٌ به أن يمنحكم لمحةً عن الأفكار الكامنة وراء التشفير، فإنّ ثَمّ الكثير جدًّا مما ينبغي معرفته قبل تطبيقه على نحوٍ صحيح للحصول على تطبيقاتٍ آمنة، وقد أخطأ كثيرٌ جدًّا من الناس في ذلك.

لقد ذكرنا من قبل أنّ خوارزميةَ فعّالة لـNP\mathbf{NP} يمكن استعمالها لكسر كلّ التشفير. وسنقدّم الآن مثالًا على كيف يمكن فعل ذلك:

مبرهنة — كسر التشفير باستعمال خوارزمية NP\mathbf{NP}

إذا كان P=NP\mathbf{P}=\mathbf{NP} فلا يوجد مخطّطُ تشفيرٍ سريٍّ حسابيًّا بـL(n)>nL(n) > n.

وإضافةً إلى ذلك، لكلّ مخطّط تشفيرٍ صالح (E,D)(E,D) مع L(n)>n+100L(n) > n+100، هناك كثيرُ حدود pp بحيث لكلّ nn كبير بما يكفي يوجد x0,x1∈{0,1}L(n)x_0,x_1 \in \{0,1\}^{L(n)} وبرنامج NAND-CIRC EVEEVE من p(n)p(n) سطرًا بحيث Pr⁡i∼{0,1},k∼{0,1}n[EVE(Ek(xi))=i]≥0.99  . \Pr_{i \sim \{0,1\}, k \sim \{0,1\}^n}[ EVE(E_k(x_i))=i ] \geq 0.99 \;.

لاحظ أنّجزء «وإضافةً إلى ذلك» قويٌّ إلى حدٍّ بعيد. أي أنّه سيكون هناك زوجٌ من الرسائل x0x_0، x1x_1 (تخيّل x0x_0 هي «بيع» و x1x_1 هي «شراء») واستراتيجيةٍ فعّالة لإيف، بحيث إذا حصلت إيف على نصٍّ مشفّر yy فإنّها تستطيع أن تخبر ما إذا كان yy تشفيرًا لـx0x_0 أم لـ x1x_1 باحتمالٍ قريب جدًّا من 11. (نصمّم كسر المخطّط على أنّ إيف تُخرج 00 أو 11 بحسب ما إذا كانت الرسالة المرسلة هي x0x_0 أو x1x_1. ولاحظ أنّنا كان يمكننا تعديل إيف لتُخرج x0x_0 بدل 00 و x1x_1 بدل 11. والنقطة الجوهرية هي أنّ إيف قبل ذلك كانت لديها فرصة 50/50 في تخمين ما إذا كانت أليس أرسلت x0x_0 أم x1x_1، لكن بعد رؤية النص المشفّر ترتفع هذه الفرصة إلى ما هو أفضل من 99/100.) ويمكن تخفيف الشرط P=NP\mathbf{P}=\mathbf{NP} إلى NP⊆BPP\mathbf{NP}\subseteq \mathbf{BPP}، بل حتى إلى الشرط الأضعف NP⊆P/poly\mathbf{NP} \subseteq \mathbf{P_{/poly}}، بالبرهان نفسه في الجوهر.

يسير البرهان على خطوط مبرهنة — السرّية التامّة تتطلّب مفاتيح طويلة لكن هذه المرة مع الانتباه إلى الجانب الحاسوبي. فإذا كان P=NP\mathbf{P}=\mathbf{NP}، فإنّه لكلّ نص صريح xx ولكلّ نص مشفّر yy يمكننا بكفاءة أن نعرف ما إذا كان هناك مفتاح k∈{0,1}nk\in \{0,1\}^n بحيث Ek(x)=yE_k(x)=y. وإذن، لإثبات هذه النتيجة، نحتاج أن نبيّن أنّه إذا كانت النصوص الصريحة طويلة بما يكفي، لَوُجد زوجٌ x0,x1x_0,x_1 بحيث يكون احتمال أن يكون التشفير العشوائيُّ لـx1x_1 هو أيضًا تشفيرًا صالحًا لـx0x_0 صغيرًا جدًّا. وتفاصيل كيفية بيان ذلك مذكورة أدناه.

برهان

سنركّز على بيان جزء «وإضافةً إلى ذلك» فقط لأنّه الأكثر إثارةً للاهتمام، أمّا الجزء الآخر فيترتّب بالبرهان نفسه في الجوهر.

لنفترض أنّ (E,D)(E,D) تشفيرٌ من هذا النوع، ولنفرض أنّ nn كبير بما يكفي، وأنّ x0=0L(n)x_0 = 0^{L(n)}. ولكلّ x∈{0,1}L(n)x\in \{0,1\}^{L(n)} نُعرِّف SxS_x لتكون مجموعة كلّ التشفيرات الصالحة لـxx. أي أنّ Sx={y  ∣  ∃k∈{0,1}ny=Ek(x)}S_x = \{ y \;|\; \exists_{k\in \{0,1\}^n} y=E_k(x) \}. وكما في برهان مبرهنة — السرّية التامّة تتطلّب مفاتيح طويلة، وبما أنّ هناك 2n2^n مفتاحًا kk، فإنّ ∣Sx∣≤2n|S_x| \leq 2^n لكلّ x∈{0,1}L(n)x\in \{0,1\}^{L(n)}.

ونرمّز بـS0S_0 المجموعةَ Sx0S_{x_0}. ونُعرِّف خوارزميّتَنا EVEEVE لتُخرج 00 عند مُدخل y∈{0,1}∗y\in \{0,1\}^* إذا كان y∈S0y\in S_0، ولتُخرج 11 في غير ذلك. وهذا يمكن تنفيذه في زمن متعدّد الحدود إذا كان P=NP\mathbf{P}=\mathbf{NP}، لأنّ المفتاح kk يمكن أن يقوم بدور حلٍّ يُتحقَّق منه بكفاءة. (أترى لماذا؟) ومن البديهي أنّ Pr⁡[EVE(Ek(x0))=0]=1\Pr[ EVE(E_k(x_0))=0 ] =1، ومن ثمّ في الحالة التي تتسلّم فيها EVEEVE تشفيرًا لـx0x_0 فإنّها تخمّن صحيحًا باحتمال 11. ويُكرَّر بقية البرهان لبيان أنّه يوجد x1∈{0,1}L(n)x_1 \in \{0,1\}^{L(n)} بحيث Pr⁡[EVE(Ek(x1))=0]≤0.01\Pr[ EVE(E_k(x_1))=0 ] \leq 0.01، وهو ما يُتمّ البرهان ببيان أنّ EVEEVE تخطئ باحتمالٍ لا يتجاوز 120+120.01<0.01\tfrac{1}{2}0 + \tfrac{1}{2}0.01 < 0.01.

ولنتأمّل الآن التجربةَ الاحتمالية التالية (وإنّما نُعرّفها لغرض التحليل وحده). نأخذ فضاء العيّنات الذي فيه نختار xx بانتظام في {0,1}L(n)\{0,1\}^{L(n)}، ونُعرِّف المتغيّر العشوائي Zk(x)Z_k(x) ليكون 11 إذا وفقط إذا كان Ek(x)∈S0E_k(x)\in S_0. ولكلّ kk، الانحسار x↦Ek(x)x \mapsto E_k(x) واحد إلى واحد، ما يعني أنّ احتمال Zk=1Z_k=1 يساوي احتمال x∈Ek−1(S0)x \in E_k^{-1}(S_0) وهو ∣S0∣2L(n)\tfrac{|S_0|}{2^{L(n)}}. وإذن، بخطّية التوقّع، E[∑k∈{0,1}nZk]≤2n∣S0∣2L(n)≤22n2L(n)\E[\sum_{k \in \{0,1\}^n} Z_k] \leq \tfrac{2^n|S_0|}{2^{L(n)}} \leq \tfrac{2^{2n}}{2^{L(n)}}.

وسنستعمل الآن الحقيقة البسيطة جدًّا لكن المفيدة التالية، وهي المعروفة بـ_مبدأ المتوسط_ (the averaging principle) (انظر أيضًا لمّة): لكلّ متغيّر عشوائي ZZ، إذا كان E[Z]=μ\E[Z]=\mu، فإنّ Z≤μZ \leq \mu باحتمال موجب. (وفي الواقع، إذا كان Z>μZ>\mu باحتمال واحد، فإنّ القيمة المتوقّعة لـZZ لا بدّ أن تكون أكبر من μ\mu، تمامًا كما لا يمكن أن يكون في صفٍّ كلّ طلابه حصلوا على A أو A- ويكون المتوسط العام B+.) وفي حالتنا يعني ذلك أنّ ∑k∈{0,1}nZk≤22n2L(n)\sum_{k\in \{0,1\}^n} Z_k \leq \tfrac{2^{2n}}{2^{L(n)}} باحتمال موجب. وبعبارةٍ أخرى، توجد سلسلة x1∈{0,1}L(n)x_1 \in \{0,1\}^{L(n)} ما بحيث ∑k∈{0,1}nZk(x1)≤22n2L(n)\sum_{k\in \{0,1\}^n} Z_k(x_1) \leq \tfrac{2^{2n}}{2^{L(n)}}. لكنّ هذا يعني أنّه إذا اخترنا مفتاحًا عشوائيًّا k∼{0,1}nk \sim \{0,1\}^n، فإنّ احتمال Ek(x1)∈S0E_k(x_1) \in S_0 لا يتجاوز 12n⋅22n2L(n)=2n−L(n)\tfrac{1}{2^n} \cdot \tfrac{2^{2n}}{2^{L(n)}} = 2^{n-L(n)}. وإذن، بصورة خاصّة، إذا كان لدينا خوارزمية EVEEVE تُخرج 00 إذا كان x∈S0x\in S_0 وتُخرج 11 في غير ذلك، فإنّ Pr⁡[EVE(Ek(x0))=0]=1\Pr[ EVE(E_k(x_0))=0]=1 و Pr⁡[EVE(Ek(x1))=0]≤2n−L(n)\Pr[EVE(E_k(x_1))=0] \leq 2^{n-L(n)}، وهو أصغر من 2−10<0.012^{-10} < 0.01 إذا كان L(n)≥n+10L(n) \geq n+10.

بالنظر إلى ما سبق، ربّما لا يكون مبرهنة — كسر التشفير باستعمال خوارزمية NP مفاجئًا. فبعد كلّ شيء، كما ذكرنا من قبل، من المعروف أنّ حدسَ PRG الأمثل (الذي تقوم عليه الوسادة لمرة واحدة منزوعة العشوائية) خاطئ إذا كان P=NP\mathbf{P}=\mathbf{NP} (وفي الحقيقة حتى إذا كان NP⊆BPP\mathbf{NP}\subseteq \mathbf{BPP} أو حتى NP⊆P/poly\mathbf{NP} \subseteq \mathbf{P_{/poly}}).

التشفير بالمفتاح العام

منذ أيام ليوناردو دافينشي على الأقلّ (فضلًا عن إيكاروس من الأسطورة اليونانية)، يحلم الناس بالطيران الثقيل. كتب جول فيرن عام 1865 بتفاصيلٍ ثاقبة إلى حدٍّ ما عن الذهاب إلى القمر. لكنّ، إلى حدّ علمي، في كلّ آلاف السنين التي استعمل فيها الناس الكتابة السرّية، لم يفكّر أحدٌ قبل نحو 50 سنة في إمكانية الاتصال بأمان دون تبادل مفتاحٍ سرّيٍّ مشترك.

غير أنّه في أواخر الستّينيات ومطلع السبعينيات من القرن الماضي، بدأ عدّة أشخاص في التشكيك في هذا «الحكمة الشائعة». وربّما كان أكثرُ أولئك البصائر إثارةً للدهشة هو طالبٌ جامعي في بيركلي اسمه رالف ميركل. في خريف عام 1974 كتب ميركل في مقترح مشروع لمساقسه في أمن الحاسوب أنّه وإن كان «قد يبدو بديهيًّا حدسيًّا أنّه إذا لم يكن بين شخصين فرصةٌ للاتّفاق مسبقًا على طريقة تشفير، فإنّهما لن يتمكّنا من الاتصال بأمان عبر قناةٍ غير آمنة... فأنا أعتقد أنّ هذا غير صحيح». وقد رفض أستاذه مقترح المشروع بوصفه «غير جيد بما يكفي». وقد قدّم ميركل لاحقًا ورقةً إلى مجلة ACM حيث اعتذر عن عدم وجود مراجع، لأنّه لم يستطع أن يجد أيّ إشارةٍ إلى المشكلة في الأدبيّة العلمية، ولم يكن المصدر الوحيد الذي رآى فيه المشكلة مطروحةً حتى هو قصةٌ من الخيال العلمي. وقد رُفضت الورقة مع تعليق بأنّ «الخبرة تبيّن أنّه من الخطير جدًّا نقلَ معلومات المفتاح في صورته الصريحة». أظهر ميركل أنّه يمكن تصميم بروتوكول يتمكّ فيه أليس وبوب من تبادل مفتاح باستخدام TT استدعاءً لدالّة تجزئة، لكنّ الخصمَ (في نموذج الآلة العشوائية، وإن لم يستعمل هذا الاسم طبعًا) سيحتاج إلى نحو T2T^2 استدعاءٍ لكسره. وتخيّل أنّه قد يكون من الممكن الحصول على بروتوكولاتٍ من هذا النوع يكون كسرُها أصعبَ أُسّيًّا من استعمالها، لكنّه لم يستطع أن يفكّر في أيّ طريقةٍ ملموسة لذلك.

ولم نعلم إلّا في وقتٍ متأخّر جدًّا أنّه في أواخر الستّينيات، أي قبل ميركل بسنتين تقريبًا، كان جيمس إليس من وكالة الاستخبارات البريطانية GCHQ يفكّر في مثل هذه الأمور. وقد استفزّه فِكرُ بساطة يدِ مخطوطةٍ قديمة من مختبرات بِل، وهي تُشير إلى الطريقة التالية التي يتمكّن بها شخصان من الاتصال بأمان عبر خطّ هاتفي. تضخّ أليس ضجيجًا في الخطّ، ويعيد بوب بثّ رسائله، ثمّ تطرح أليس الضجيج لتحصل على الإشارة. والفكرة أنّ الخصم على الخطّ لا يرى إلّا مجموعَ إشارتَي أليس وبوب، ولا يعرف أيّهما جاء من أيّهما. وقد دفع هذا جيمس إليس إلى التفكير ما إذا كان من الممكن تحصيل شيءٍ من هذا النوع رقميًّا. وكما ذكر إليس لاحقًا، أدرك عام 1970 أنّ هذا ممكنٌ من حيث المبدأ، لأنّه كان بإمكانه تخيّل صندوقٍ أسود افتراضي BB يُعطى عند مُدخله «مقبضًا» α\alpha ونصًّا صريحًا xx فيُخرج «نصًّا مشفّرًا» yy، وأنّ هناك مفتاحًا سرّيًا β\beta يقابل α\alpha، بحيث إنّ تغذية الصندوق بـβ\beta و yy تُعيد xx. غير أنّ إليس لم يكن لديه أيّ فكرة عن كيفية تنفيذ هذا الصندوق فعلًا. وهو وآخرون ظلّوا يطرحون هذا السؤال لغزًّا على المجنَّدين الجدد الأذكياء، حتى جاء أحدهم، كلتفورد كوكس، عام 1973 بحلٍّ مرشَّحٍ يعتمد أساسًا على مسألة التحليل إلى عوامل؛ وفي عام 1974 قدّم مجنّدٌ آخر من GCHQ هو مالكوم ويليامسون حلًّا يستعمل الرفع إلى أُسّ معياري.

لكنّ من بين كلّ أولئك الذين فكّروا في التشفير بالمفتاح العام، ربّما كان أكثرُهم بصرًا باحثَين في ستانفورد، هما ويت ديفي ومارتن هيلمان. أدركا أنّه مع ظهور الاتصال الإلكتروني، سيجد التشفير تطبيقاتَ جديدةً خارج المجال العسكريّ للجواسيس والغواصات، وأدركا أنّه في هذا العالم الجديد متعدّدِ المستخدمين، سيحتاج التشفير إلى التوسّع. وتخيَّلا جسمًا نسمّيه اليوم «تبديلًا بفتحة خلفية» (trapdoor permutation)، لكنّهما سمّياه «دالة أحادية الاتجاه بفتحة خلفية» (one way trapdoor function) أو أحيانًا ببساطة «تشفيرًا بالمفتاح العام».

ومع أنّهما لم يتوفّرا على تعريفاتٍ رسمية كاملة، فإنّ فكرتهما كانت أنّ هذا دالّةٌ أحاديةُ (injective) يسهل حسابُها (مثلًا في زمن متعدّد الحدود) لكن يصعب عكسُها (مثلًا في زمن أسّي). غير أنّ هناك فتحةً خلفية (trapdoor)، ومعرفةُها تسمح بالعكس في زمن متعدّد الحدود. وجادل ديفي وهيلمان بأنّه باستعمال دالةٍ من هذا النوع بفتحةٍ خلفية، يمكن لأليس وبوب أن يتواصلا بأمان دون أن يتبادلا مفتاحًا سرّيًا إطلاقًا. لكنّهما لم يتوقّفا عند ذلك. أدركا أنّ حمايةَ سلامةِ (integrity) الاتصال لا تقلّ أهميةً عن حماية سرّيتِه. ومن ثمّ تخيّلا أنّه يمكن لأليس أن «تشغّل التشفير بالمقلوب» لتوثّق أو توقّع (sign) الرسائل.

وفي تلك اللحظة كان ديفي وهيلمان في موقفٍ لا يختلف كثيرًا عن موقف فيزيائيين تنبّؤا بأنّ جسيمًا ما يجب أن يوجد دون أيّ تحقّقٍ تجريبي. ولحسن الحظّ التقيَا رالف ميركل، وأفكارُه عن بروتوكول تبادل مفاتيح احتمالي، مع اقتراحٍ من زميلهما في ستانفورد جون غِل، ألهمتهما أن يبتكرا ما صار معروفًا اليوم بـتبادل مفاتيح ديفي-هيلمان (والذي، دون علمهما، كان قد اكتُشف قبل ذلك بسنتين في GCHQ على يد مالكوم ويليامسون).

ونشرا ورقتهما «اتجاهاتٌ جديدة في التشفير» عام 1976، ويُعتبر أنّها أتت بميلاد التشفير الحديث.

ولا يزال تبادلُ مفاتيح ديفي-هيلمان مستعملًا على نطاقٍ واسع اليوم للاتصال الآمن. لكنّها ظلت بعيدةً كلّ البعد عن توفير دالّة ديفي وهيلمان بفتحةٍ خلفية التي طمحتا إليها.

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

(وقد اكتُشف تحويٌ قريبٌ لدالّة RSA في وقتٍ أسبق على يد كلتفورد كوكس في GCHQ، لكنّهم — إلى حدّ علمي — لم يدركوا أنّ الأمر ينطبق على التوقيع الرقمي.)

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

/images/introtcs/lec_19_cryptography-13.webp

تعريف التشفير بالمفتاح العام

يتكوّن التشفير بالمفتاح العام من ثلاث خوارزميات:

  • خوارزمية توليد المفاتيح (key generation algorithm)، التي نرمّز لها بـKeyGenKeyGen أو KGKG باختصار، هي خوارزميةٌ عشوائية تُخرج زوجًا من السلسلتين (e,d)(e,d) حيث ee معروفٌ باسم المفتاح العام (أو مفتاح التشفير)، و dd معروفٌ باسم المفتاح الخاص (أو مفتاح فكّ التشفير). وتأخذ خوارزمية توليد المفاتيح كمدخل 1n1^n (أي سلسلةً من الآحاد بطول nn). ونسمّي nn معاملَ الأمان (security parameter) للمخطّط. وكلّما كبّرنا nn صار التشفير أكثر أمانًا، لكنّه أيضًا أقلّ كفاءة.

  • خوارزمية التشفير (encryption algorithm)، التي نرمّز لها بـEE، تأخذ مفتاح التشفير ee ونصًّا صريحًا xx، وتُخرج النص المشفّر y=Ee(x)y=E_e(x).

/images/introtcs/lec_19_cryptography-14.webp

  • خوارزمية فكّ التشفير (decryption algorithm)، التي نرمّز لها بـDD، تأخذ مفتاح فكّ التشفير dd ونصًّا مشفّرًا yy، وتُخرج النص الصريح x=Dd(y)x=D_d(y). ونُضيف الآن إلى هذا تعريفًا رسميًا:

تعريف — التشفير بالمفتاح العام

التشفير بالمفتاح العام السريّ حسابيًّا (computationally secret public key encryption) ذو طول النص الصريح L:N→NL:\N \rightarrow \N هو ثلاث خوارزمياتٍ عشوائية (KG,E,D)(KG,E,D) ذات زمن متعدّد الحدود تحقّق الشروط التالية:

  • لكلّ nn، إذا كان (e,d)(e,d) هو مُخرَج KG(1n)KG(1^n) باحتمال موجب، و x∈{0,1}L(n)x\in \{0,1\}^{L(n)}، فإنّ Dd(Ee(x))=xD_d(E_e(x))=x باحتمال واحد.

  • لكلّ كثير حدود pp، و nn كبير بما يكفي، إذا كان PP برنامج NAND-CIRC لا يتجاوز p(n)p(n) سطرًا، فإنّه لكلّ x,x′∈{0,1}L(n)x,x'\in \{0,1\}^{L(n)}، ∣E[P(e,Ee(x))]−E[P(e,Ee(x′))]∣<1/p(n)\left| \E[ P(e,E_e(x))] - \E[P(e,E_e(x'))] \right| < 1/p(n)، حيث يُؤخذ هذا الاحتمال على عملتي KGKG و EE.

يسمح تعريف — التشفير بالمفتاح العام بأن تكون EE و DD خوارزميّتَي عشوائيّتَيْن. وفي الواقع، اتّضح أنّه ضرروريّ أن تكون EE عشوائيةً للحصول على السرّية الحسابية.

كما اتّضح أيضًا أنّه، على خلاف حالة المفتاح السرّي، يمكننا تحويل تشفيرٍ بمفتاحٍ عام يعمل للرسائل التي طولها بتٌّ واحد فقط إلى مخطّط تشفيرٍ بمفتاح عام يستطيع تشفير رسائلَ بطولٍ اعتباطي، وخصوصًا رسائلَ أطولَ من المفتاح.

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

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

  • بِنى تعتمد على نظرية المجموعات (group theoretic constructions) المبنيّة على مسائل مثل تحليل الأعداد إلى عواملها (integer factoring) و_اللوغاريتم المتقطّع_ (discrete logarithm) على الحقول المنتهية أو المنحنيات البيضاوية.

  • بِنى تعتمد على الشبكات/الترميز (lattice/coding based constructions) المبنيّة على مسائل مثل أقرب متّجهٍ في شبكة (closest vector in a lattice) أو فكّ الترميز بمسافة محدودة (bounded distance decoding).

وهذه التشفيرات القائمة على نظرية المجموعات، مثل نظام تشفير RSA وبروتوكول ديفي-هيلمان وتشفير المنحنيات البيضاوية، هي في الوقت الحالي الأكثر تطبيقًا على نطاقٍ واسع.

تبادل مفاتيح ديفي-هيلمان

ولنصف الآن، كمثالٍ واحدٍ فقط على كيفية بناء مخطّطات التشفير بالمفتاح العام، بروتوكول تبادل مفاتيح ديفي-هيلمان. وسنصف بروتوكول ديفي-هيلمان بمستوى غير رسميّ نوعًا ما، من دون تقديم تحليلٍ كامل للأمان.

المسألة الحاسوبية الكامنة خلف بروتوكول ديفي-هيلمان هي مسألة اللوغاريتم المتقطّع. لنفترض أنّ gg عددٌ صحيح ما. ويمكننا حساب الانحسار x↦gxx \mapsto g^x وكذلك عكسَه y↦log⁡gyy \mapsto \log_g y. (مثلًا، يمكننا حساب اللوغاريتم بالبحث الثنائي (binary search): نبدأ بفاصلة [xmin,xmax][x_{min},x_{max}] مضمونةً أن تحتوي على log⁡gy\log_g y. ثمّ نختبر ما إذا كانت نقطةُ المنتصف xmidx_{mid} تحقق gxmid>yg^{x_{mid}} > y، وبناءً على ذلك نقصّف حجم الفاصلة.)

لكنّ لنفترض الآن أنّنا نستعمل الحسابَ المعياريَّ (modular arithmetic) ونعمل على الوحدة pp حيث pp عددٌ أوّلي.

فإذا كان pp يملك nn خانةً ثنائية و gg في [p][p]، فإنّنا نستطيع حساب الانحسار x↦gxmod  px \mapsto g^x \mod p في زمنٍ متعدّد الحدود في nn. (وهذا ليس بديهيًّا، وهو تمرينٌ ممتاز لك أن تقرّره بنفسك؛ وكتلميح، ابدأ ببيان أنّه يمكن حساب الانحسار k↦g2kmod  pk \mapsto g^{2^k} \mod p باستخدام kk من عمليات الضرب المعيارية على pp، وإذا تعثّرت فراجع موّسوعة ويكيبيديا هذه.)

ومن جهةٍ أخرى، وبسبب خاصية «الالتفاف» في الحساب المعياري، لا يمكننا تشغيل البحث الثنائي لإيجاد عكس هذا الانحسار (المعروف بـ_اللوغاريتم المتقطّع_). وفي الواقع، لا توجد خوارزميةٌ معروفةٌ ذات زمن متعدّد الحدود لحساب انحسار اللوغاريتم المتقطّع هذا (g,x,p)↦log⁡gxmod  p(g,x,p) \mapsto \log_g x \mod p، حيث نعرّف log⁡gxmod  p\log_g x \mod p بأنّه العدد a∈[p]a \in [p] بحيث ga=xmod  pg^a = x \mod p.

يتبع بروتوكول ديفي-هيلمان الذي يرسل به بوب رسالةً إلى أليس ما يلي:

  • أليس: تختار pp عددًا أوّليًّا عشوائيًّا بطول nn بتّ (ويمكن فعل ذلك باختيار أعدادٍ عشوائية وتشغيل خوارزمية اختبار أوّليّة عليها)، وتختار gg و aa عشوائيًّا في [p][p]. وترسل إلى بوب الثلاثيّ (p,g,gamod  p)(p,g,g^a \mod p).
  • بوب: بمعرفة الثلاثيّ (p,g,h)(p,g,h)، يرسل بوب رسالةً x∈{0,1}Lx \in \{0,1\}^L إلى أليس بأن يختار bb عشوائيًّا في [p][p]، ويرسل إلى أليس الزوجَ (gbmod  p,rep(hbmod  p)⊕x)(g^b \mod p, rep(h^b \mod p) \oplus x).

هنا rep:[p]→{0,1}∗rep:[p] \rightarrow \{0,1\}^* دالّةُ تمثيلٍ (representation function) تُنشِط [p][p] على {0,1}L\{0,1\}^L. (ولا يلزم أن تكون reprep واحدًا إلى واحد، ويمكنك أن تفكّر في rep(z)rep(z) على أنّها ببساطة تُخرج LL بتًّا من بتّات zz في التمثيل الثنائيّ الطبيعي، ولا يلزم منها سوى استيفاء شروطٍ تقنيةٍ معيّنة نغفلها في هذا الوصف.)

  • أليس: بمعرفة g′,zg',z، تستعيد أليس xx بإخراج rep(g′amod  p)⊕zrep(g'^a \mod p) \oplus z.

وتتّضح صحّة البروتوكول من الحقيقة البسيطة بأنّ (ga)b=(gb)a(g^a)^b = (g^b)^a لكلّ g,a,bg,a,b، وهذا يبقى صائبًا حتى لو عملنا على الوحدة pp.

وأمانُه يعتمد على الافتراض الحاسوبيّ بأنّ حساب هذا الانحسار صعب، حتى بمعنى معيّنٍ من معنى «الحالة المتوسّطة» (ويُعرف هذا الافتراض الحاسوبيّ بـافتراض ديفي-هيلمان الحاسم).

ويمكن التفكير في بروتوكول ديفي-هيلمان على أنّه مبنيٌّ على «مولّد شبه عشوائية بفتحة خلفية»، حيث يبدو الثلاثيّ ga,gb,gabg^a,g^{b},g^{ab} «عشوائيًّا» لمن لا يعرف aa، لكنّ من يعرف aa يستطيع أن يرى أنّ رفعَ العنصر الثاني إلى الأسّ aa يعطي العنصر الثالث.

ويمكن وصف بروتوكول ديفي-هيلمان بشكلٍ مجرّد في سياق أيّ مجموعةٍ أبيلية منتهية نتمكّن فيها بكفاءة من حساب عملية المجموعة.

وقد نُفِّذ على مجموعاتٍ غير الأعداد على الوحدة pp، ويُخصَّص تشفير المنحنيات البيضاوية (ECC) على نحوٍ لافت من طريق بناء ديفي-هيلمان على مجموعات المنحنيات البيضاوية، وهو ما يمنح بعض المزايا العملية.

ومن الأسس النظرية المجموعاتية الشائعة الأخرى لبروتوكولات تبادل المفاتيح/التشفير بالمفتاح العام دالّة RSA. ومن عيوب ديفي-هيلمان الكبيرة (كلاهما بنسختيه: الحساب المعياري والمنحنيات البيضاوية) وRSA أنّ المخطّطين يمكن كسرهما في زمن متعدّد الحدود بواسطة حاسوبٍ كمّيّ. وسنناقش الحوسبة الكمّية لاحقًا في هذه المساق.

مفاهيم أمان أخرى

هناك قدرٌ هائل في التشفير يتجاوز مجرّد مخطّطات التشفير، ويتجاوز أيضًا فكرة الخصم السلبي. ومن الأهداف المركزية السلامة (integrity) أو التحقّق من الهوية (authentication): حماية الاتصال من أن يعدّله خصم. والسلامة غالبًا ما تكون أكثر أساسًا من السرّية: سواء كان الأمر تحديثَ برمجيات أو مشاهدةَ الأخبار، فربّما لا يهمّك كثيرًا أن يكون الاتصال سرّيًا بقدر ما يهمّك أن يكون قد جاء فعلًا من مصدره المُعلَن. مخطّطات التوقيع الرقمي (digital signature schemes) هي نظيرُ التشفير بالمفتاح العام في التحقّق من الهوية، وهي مستعملةٌ على نطاقٍ واسع (وخصوصًا بوصفها أساسًا لـشهادات المفاتيح العامة) لتوفير قاعدة ثقةٍ في العالم الرقمي.

وكذلك، حتى في حالة التشفير، نحتاج غالبًا إلى ضمان الأمان أمام الهجمات النشطة (active attacks)، ومن ثمّ فقد طُرحت مفاهيمُ مثل عدم القابلية للتشكيل (non-malleability) وأمن النص المشفّر المُختار التكيّفي.

ومخطّط التشفير لا يكون آمنًا أكثر من مفتاحه السرّي، وقد دُرست أيضًا آليّاتٌ تضمن توليدَ المفتاح على نحوٍ سليم وحمايته من التبديل أو حتى من الاختراق (أي السرّية الأمامية).

ونأمل أن يكون هذا الفصل قد منحكم قدرًا من التقدير للتشفير بوصفه حقلًا فكريًّا، دون أن يمنحكم ثقةً ذاتيةً زائفة في تنفيذه.

دوالّ التجزئة التشفيرية (cryptographic hash functions) هي أداةٌ أخرى مستعملةٌ على نطاقٍ واسع ولها استعمالاتٌ متنوّعة، منها استخراج العشوائية من مصادر عالية الأنتروبيا، وإنتاج «بصمات» (digests) قصيرةٍ يصعب تزويرها للملفات، وحماية كلمات المرور، وغيرها كثير.

السحر

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

براهين المعرفة الصفرية

في 31 أكتوبر 1903، ألقى الرياضيّ فرانك نلسون كول محاضرةً مدّتها ساعة في اجتماع الجمعية الرياضية الأمريكية، ولم ينطق بكلمةٍ واحدة. بدلًا من ذلك، حسب على السبورة قيمةَ 267−12^{67}-1 التي تساوي 147,573,952,589,676,412,927147,573,952,589,676,412,927، ثمّ بيّن أنّ هذا العدد يساوي 193,707,721×761,838,257,287193,707,721 \times 761,838,257,287.

وأظهر برهانُ كول أنّ 267−12^{67}-1 ليس أوّليًّا، لكنّه كشف أيضًا عن معلومةٍ إضافيّة، هي عوامله الفعلية.

في براهين المعرفة الصفرية (Zero Knowledge Proofs) نحاول تحقيق الأثر المعاكس. فنريد برهانًا لقضيحة XX يمكننا أن نُثبتَ بدقّة (rigorously show) أنّ البرهان يكشف أبدًا أيّ معلومة إضافيّة عن XX.

وياتّضح أنّ هذا جسمٌ بالغة النفع لمهامٍ متنوّعة، منها التحقّق من الهوية والبروتوكولات الآمنة والتصويت والخصوصية في العملات المشفّرة وغيرها.

ويعتمد بناء هذه الأجسام على نظرية اكتمال NP\mathbf{NP}. وهكذا، فإنّ هذه النظرية التي صُمِّمت في الأصل لتقديم نتيجة سالبة (بيان أنّ بعض المسائل صعبة) انتهت إلى إنتاج تطبيقاتٍ إيجابية، متيحًا لنا تحقيق مهامّ لم تكن ممكنة لولاه.

التشفير المتجانس الكامل

لنفترض أنّ لدينا تشفيرًا بتًّ ببتّ لسلسلة Ek(x0),…,Ek(xn−1)E_k(x_0),\ldots,E_k(x_{n-1}).

وبطبيععة التصميم، يُفترض أن تكون هذه النصوص المشفّرة «غير قابلة لفكّ التشويش البتّة» (completely unscrutable)، وأنّنا لا ينبغي أن نتمكّن من استخراج أيّ معلومة عنها بشأن xix_i.

لكنّه منذ عام 1978 لاحظ ريفيست وأدلمان وديرتوزوس أنّ هذا لا يعني أنّنا لا يمكننا التعاملَ مع (manipulate) هذه التشفيرات.

فمثلًا، اتّضح أنّ أمانَ مخطّط تشفير لا يستبعد مباشرةً القدرةَ على أخذ زوجٍ من التشفيرات Ek(a)E_k(a) و Ek(b)E_k(b) وحساب Ek(aNANDb)E_k(a NAND b) من دون معرفة المفتاح السرّي kk. لكنّ هل توجد مخطّطاتُ تشفيرٍ تسمح بمثل هذه التلاعب؟ وإن كان الأمر كذلك، فهل هذا عيبٌ أم ميزة؟

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

فبعد كلّ شيء، إذا استطعنا حساب NAND فإنّنا نستطيع استعماله لتشغيل أيّ خوارزمية PP على البيانات المشفّرة، ولكي نُسقط Ek(x0),…,Ek(xn−1)E_k(x_0),\ldots,E_k(x_{n-1}) على Ek(P(x0,…,xn−1))E_k(P(x_0,\ldots,x_{n-1})).

فمثلًا، يستطيع عميلٌ أن يخزّن بياناته السرّية xx في صورةٍ مشفّرة على السحابة، ويجعل مزوّدَ السحابة يجري مختلفَ أنواع الحساب على هذه البيانات من دون أن يكشف له المفتاح الخاصّ أبدًا، وبالتالي من دون أن يتعلّم المزوّد أيّ معلومةٍ البتّة عن البيانات السرّية.

وكان سؤالُ وجود (existence) مثل هذا المخطّط يحتاج وقتًا أطول بكثير ليُحلّ. فلم يقدّم كريغ غنتري إلا عام 2009 أوّلَ بناءٍ لمخطّط تشفير يسمح بحساب قاعدةٍ عامّةٍ من البوابات على البيانات (المعروف في لغة التشفير بـ_مخطّط التشفير المتجانس الكامل_).

وترك مخطّطُ غنتري الكثير مما يُرام في الكفاءة، وكان تحسينُه موضوع برنامج بحثٍ مكثّفٍ قد شهد بالفعل تحسّناتٍ جوهرية.

الحوسبة الآمنة متعددة الأطراف

التشفير يدور حول تمكين أطرافٍ لا يثق بعضها ببعض من تحقيق هدفٍ مشترك. وربّما كانت الحوسبة الآمنة متعددة الأطراف (secure multiparty computation) هي الأداة الأكثر عموميةً لتحقيق هذا الهدف.

والفكرة في الحوسبة الآمنة متعددة الأطراف أنّ nn طرفًا يتفاعلون معًا لحساب دالّةٍ ما F(x0,…,xn−1)F(x_0,\ldots,x_{n-1}) حيث xix_i هو المُدخل الخاصّ بالطرف ii-th. والنقطة الحاسمة هي أنّه لا يوجد طرفٌ أو سلطةٌ موثوقٌ بها على نحوٍ مشترك، وأنّ لا شيء يُكشف عن البيانات السرّية عدوىخرَج الدالّة.

ومن الأمثلة بروتوكولُ تصويتٍ إلكترونيّ (electronic voting protocol) لا يُكشف فيه إلّا عن العدد الإجماليّ للأصوات، مع حماية خصوصية الناخبين الفرديين، ودون الحاجة إلى الثقة في أيّ سلطةٍ كي تعدّ الأصوات بشكلٍ صحيح أو كي تحافظ على سرّية المعلومات.

ومن مثالٍ آخر تنفيذُ مزادٍ بالسعر الثاني (المعروف أيضًا بمزاد فيكري) حيث يقدّم n−1n-1 طرفًا عروضًا على سلعةٍ يملكها الطرف nn-th، وتذهب السلعة إلى أعلى مزايدٍ بالسعر ثاني أعلى عرض.

وباستعمال الحوسبة الآمنة متعددة الأطراف يمكننا تنفيذُ مزادٍ بالسعر الثاني على نحوٍ يضمن سرّيةَ القيم العددية لجميع العروض (بما في ذلك حتى العرض الأعلى) عدا ثاني أعلى عرض، وسرّيةَ هوية جميع المزايدين (بما في ذلك حتى المزايد صاحب ثاني أعلى عرض) عدا الأعلى.

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

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

خلاصة

  • يمكننا تعريفَ مفهوم أمان مخطّط التشفير رسميًّا.

  • السرّية التامّة (perfect secrecy) تضمن أنّ الخصم لا يتعلّم شيئًا البتّة عن النص الصريح من النص المشفّر، مهما كانت قدراتُه الحاسوبية.

  • الوسادة لمرة واحدة هي تشفيرٌ سرّي تمامًا طولُ مفتاحه يساوي طولَ الرسالة. ولا يمكن لأيّ تشفيرٍ سرّيٍّ تمامًا أن يكون مفتاحُه أقصر من الرسالة.

  • السرّية الحسابية (computational secrecy) قد تكون بجودة السرّية التامّة، لأنّها تضمن أنّ الميزة التي يحصل عليها الخصوم المحدودون حاسوبيًّا من ملاحظة النص المشفّر هي ميزةٌ أُسّيّةٌ ضئيلة.

وإذا كان حدسُ PRG الأمثل صحيحًا، فإنّ هناك مخطّط تشفيرٍ سريٍّ حسابيًّا يمكن أن تكون رسائله (تقريبًا) أكبرَ أُسّيًّا من المفتاح.

  • هناك أدواتٌ تشفيريةٌ كثيرةٌ تتجاوز التشفير بالمفتاح السرّي بكثير.

وتشمل ذلك التشفير بالمفتاح العام، و_التوقيعات الرقمية_، و_دوالّ التجزئة_، فضلًا عن أدواتٍ أكثر «سحرية» مثل الحوسبة الآمنة متعددة الأطراف، و_التشفير المتجانس الكامل_، و_براهين المعرفة الصفرية_، وغيرها كثير.

التمارين

ملاحظات مرجعية

معظم هذا النص مأخوذٌ من ملاحظات محاضرتي في التشفير.

كُتبت مخطوطةُ شانون عام 1945 لكنّها صُنِّفت، ولم تُنشر إلّا نسخةٌ جزئيّة عام 1949. ومع ذلك فإنّها ثوّرت التشفير، وكانت السابقة لكثير ممّا جاء بعدها.

يُوصف تاريخُ مشروع فينونا في هذه الوثيقة.

وبالإضافة إلى غرابيل وزوبكو، يتقاسم الفضل في اكتشاف أنّ السوفييت يعيدون استعمال المفاتيح الملازمُ ريتشارد هالوك وكاري بيري وفرانك لويس والملازم كارل إلمكويست، وهناك آخرون أسهموا إسهامًا مهمًّا في هذا المشروع. انظر الصفحتين 27 و 28 في الوثيقة.

في رسالةٍ إلى NSA عام 1955 ظهرت أخيرًا في وقتٍ حديث، اقترح جون ناش مخطّطَ تشفيرٍ «غير قابل للكسر».

وكتب «آمل ألّا توحي خطّي وما شابه بأنّني مجرّد دوّار هوايات أو راسم دوائر... أهمّية هذا الحدس [بأنّ بعض مخطّطات التشفير آمنةٌ أُسّيًّا ضد هجمات استرجاع المفتاح] ... أنّه من العملي جدًّا تصميم شفراتٍ غير قابلة للكسر عمليًّا.».

وقدّم جون ناش إسهاماتٍ أساسية في الرياضيات وفي نظرية الألعاب، ونال جانائزةَ أبي Abel وجائزةَ نوبل التذكارية في العلوم الاقتصادية.

غير أنّه عانى من مرضٍ عقنيّ طوال حياته. وقد حُوِّلت سيرتُه الذاتية عقلٌ جميل إلى فيلمٍ شعبيّ.

ومن الطبيعيّ أن تُقارن رسالةَ ناش إلى NSA عام 1955 برسالة غودل إلى فون نيومان التي ذكرناها من قبل.

ومن منظور علوم الحاسوب النظرية، يكمن الفارقُ الجوهر في أنّ ناش، وإن كان يتحدّث بصورة غير رسمية عن الزمن الحسابي الأسّي مقابل متعدّد الحدود، لا يذكر كلمة «آلة تورينغ» ولا نماذجَ حسابٍ أخرى، وليس واضحًا ما إذا كان واعيًا أم لا لأنّ حدسه يمكن صياغته بدقّة رياضية (بافتراض صياغةٍ رسمية لـ«أنواع كافية من التعقيد في التعمية»).

تعريفُ السرّية الحسابية الذي نستعمله هو مفهوم التمييز الحاسوبي (computational indistinguishability) (المعروف بأنّه مكافئ لـ_الأمان الدلالي_ (semantic security)) الذي قدّمه غولدواسر وميكالي عام 1982.

ولو استعملوا مصطلحاتٍ مختلفة، فإنّ ديفي وهيلمان بيّنا في ورقتهما بوضوح أنّ بروتوكولهما يمكن استعماله تشفيرًا بالمفتاح العام، مع وضع الرسالة الأولى في «ملفٍ عام».

وفي عام 1985 بيّن الجملال كيف يمكن الحصول على مخطّط توقيع (signature scheme) مبنيٍّ على أفكار ديفي-هيلمان، ولأنّه وصف مخطّط تشفير ديفي-هيلمان في الورقة ذاتها، فإنّ مخطّط التشفير بالمفتاح العام الذي اقترحه ديفي وهيلمان أصلًا يُسمّى أحيانًا أيضًا تشفير الجملال.

يتضمّن مسحي مناقشةً لأنواع افتراضات المفتاح العام المختلفة.

وفي حين أنّ مخطّطات التشفير القياسية بالمنحنيات البيضاوية عرضةٌ للحواسيب الكمّية تمامًا كديفي-هيلمان وRSA، فإنّ ميزتها الرئيسية هي أنّ أفضل الخوارزميات الكلاسيكية المعروفة لحساب اللوغاريتمات المتقطّعة على مجموعات المنحنيات البيضاوية تستغرق زمنًا 2ϵn2^{\epsilon n} لبعض ϵ>0\epsilon>0 حيث nn هو عدد البتّات اللازم لوصف عنصر مجموعة.

وبالمقابل، فإنّ أفضل خوارزميةٍ للمجموعة الضربية على الوحدة pp تستغرق زمنًا 2O(n1/3polylog(n))2^{O(n^{1/3} polylog(n))}، ما يعني أنّه (بافتراض أنّ الخوارزميات المعروفة هي الأمثل) علينا أن نختار العددَ الأوّلي أكبر (ومن ثمّ يكون لدينا أحجامُ مفاتيح أكبر مع تكلفةٍ مقابلة في الاتصال والحساب) للحصول على المستوى نفسه من الأمان.

صُنِّعت براهينُ المعرفة الصفرية على يد غولدواسر وميكالي وياكوف عام 1982، وأثبت غولدرايش وميكالي وويجدرسون في عام 1986 قابليّةَ تطبيقها الواسعة (باستعمال نظرية اكتمال NP\mathbf{NP}).

صُنِّعت بروتوكولاتُ الحوسبة الآمنة لطرفين وللأطراف المتعدّدة على التوالي من طرف ياو عام 1982 ومن طرف غولدرايش وميكالي وويجدرسون عام 1987. وأعطى العملُ الأخير تحوّلًا عامًا من الأمان أمام الخصوم السلبيين إلى الأمان أمام الخصوم النشطين، باستعمال براهين المعرفة الصفرية.


  1. إليك تمرينًا لطيفًا: احسب (حتى رتبة مقدار) احتمال أن تُنهي رسالةٌ طولها 50 حرفًا، مؤلَّفة من حروفٍ عشوائية، دون أن تحوي الحرف «L». ↩︎

  2. الاقتباس الحقيقي هو «Il faut qu’il n’exige pas le secret, et qu’il puisse sans inconvénient tomber entre les mains de l’ennemi»، ويُترجم ترجمةً تقريبيةً بأنّ «النظام يجب ألّا يتطلّب السرّية، وأنّه يمكن أن يقع بين يدي العدو من دون أن يسبّب ذلك أيّ ضرر». وذكر ستيف بيلوفين أنّ صيغة جهاز الأمن الوطني (NSA) هي «افترض أنّ النسخة الأولى من أيّ جهازٍ نصنعه تُرسَل إلى الكرملين». ↩︎