تبادل المفاتيح
تبادل المفاتيح
الوصف
تسعى بروتوكولات تبادل المفاتيح (key exchange) إلى حلّ مشكلة تبدو للوهلة الأولى
مستحيلة. فـAlice وBob، اللذان لم يلتقيا من قبل، عليهما الاتفاق على قيمة سرّية. أمّا
القناة التي يتواصلان عبرها فهي غير آمنة: فنحن نفترض أنّ كلّ ما يرسلانه عبر القناة
يجري تنصّت عليه.
وسنوضّح هنا بروتوكولًا من هذا النوع. سينتهي Alice وBob إلى توفير سرّ مشترك بينهما، وهما يتواصلان عبر القناة غير الآمنة وحدها. وبرغم أنّ إيف تملك حرفيًّا كلّ المعلومات التي يتبادلها Alice وBob، فإنّها لا تستطيع استعمال أيّ منها لتعرف السرّ المشترك بينهما.
ويُسمَّى ذلك البروتوكول ديفي-هيلمان (Diffie-Hellman)، نسبةً إلى Whitfield Diffie وMartin Hellman، الرائدين التشفيريَّين اللذين اكتشفاه. وقد اقترحا تسمية البروتوكول بـ«تبادل مفاتيح ديفي-هيلمان-ميركل» (Diffie-Hellman-Merkle key exchange) تقديرًا لإسهامات Ralph Merkle. ورغم أنّ إسهاماته تستحقّ التقدير فعلًا، فإنّ هذا المصطلح لم ينتشر كثيرًا. وسنستعمل، لصالح القارئ، المصطلح الأكثر شيوعًا.
تعتمد التطبيقات العملية لبروتوكول ديفي-هيلمان على مسائل رياضية يُعتقد أنّ حلّها في الاتجاه «الخاطئ» صعب إلى حدٍّ كبير، في حين أنّ حسابها في الاتجاه «الصحيح» سهل. وليس من الضروري فهم التنفيذ الرياضي لفهم المبدأ الكامن وراء البروتوكول. كما يجد كثيرون فهمه أسهل بكثير بعيدًا عن التعقيد الرياضي. لذا سنشرح ديفي-هيلمان أوّلًا بشكل مجرّد، من دون أيّ تركيبات رياضية. وسننظر بعد ذلك في تطبيقين عمليّين.
ديفي-هيلمان المجرّد
لوصف ديفي-هيلمان، سنستعمل تشبيهًا قائمًا على مزج الألوان. يمكننا مزج الألوان وفق القواعد التالية:
- من السهل جدًا أن تمزج لونين في لون ثالث.
- مزج لونين أو أكثر بترتيب مختلف ينتج اللون نفسه.
- مزج الألوان عملية أحادية الاتجاه (one-way). فمن المستحيل أن تحدّد ما إذا كان لون معيّن قد مزج، فضلًا عن تحديد أيّ الألوان مزج. فحتى وإن كنت تعرف أنّه مزج، بل وإن كنت تعرف بعض الألوان المستعملة في مزجه، فإنّك لا تدري ما كانت عليه بقية الألوان.
وسنبيّن أنّه بمثل دالة المزج هذه يمكننا إنتاج لون سرّ لا يعرفه إلّا Alice وBob.
وسنضطر لاحقًا مجرّدًا إلى وصف التنفيذ الملموس لهذه الدوالّ للحصول على نظام
تبادل مفاتيح (key exchange) ملموس.
ولتوضيح لماذا يبقى هذا آمنًا في مواجهة المستقِعين، سنمشي في عملية تبادل كاملة مع إيف المستقِعة (eavesdropper) في الوسط. فإيف تصغي إلى جميع الرسائل المرسلة عبر الشبكة. وسنتتبّع كلّ ما تعرفه وما تستطيع حسابه، وسننتهي إلى رؤية سبب عجز إيف عن حساب السرّ المشترك بين Alice وBob.
لبدء البروتوكول، على Alice وBob أن يتّفقا على لون أساسي (base color). ويمكنهما تبليغه عبر الشبكة: فلا بأس أن يعترض إيف الرسالة ويعرف ما هو ذلك اللون. وعادةً ما يكون هذا اللون الأساسي جزءًا ثابتًا من البروتوكول؛ فلا يحتاج Alice وBob إلى تبليغه. وبعد هذه الخطوة، تتوفّر لدى Alice وBob وإيف المعلومات نفسها: وهي اللون الأساسي.
يختار كلٌّ من Alice وBob لونًا عشوائيًّا، ثمّ يمزجه مع اللون الأساسي.
في نهاية هذه الخطوة، يعرف كلٌّ من Alice وBob لونَه السرّي الخاص به، والمزيج بين اللون السرّي واللون الأساسي، واللون الأساسي نفسه. ويعرف الجميع، بما فيهم إيف، اللون الأساسي.
ثمّ يرسل كلٌّ من Alice وBob ألوانَه المزججة عبر الشبكة. فترى إيف كلا اللونين
المزججين، لكنّها لا تستطيع أن تكتشف ما هو اللون السرّي لأيٍّ من Alice وBob.
وبرغم أنّها تعرف اللون الأساسي، فإنّها لا تستطيع «فكّ المزج» عن الألوان المرسلة
عبر الشبكة.
قد يبدو هذا عمليّة سهلة عند الاكتفاء بتقريبات بالأبيض والأسود لمزج الألوان، لكنّ تذكّر أنّ هذا إمّا فشلٌ في الرسم التوضيحي: إذ كان افتراضنا أنّ هذه العملية صعبة. في نهاية هذه الخطوة، يعرف Alice وBob اللون الأساسي، وأسرارهما الخاصة، وألوانهما المزججة الخاصة، وألوان كلٍّ منهما المزججة. أمّا إيف فتعرف اللون الأساسي وكلا اللونين المزججين.
وبعد أن يستلم كلٌّ من Alice وBob اللون المزجج للآخر، يضيف إليه لونه السرّي الخاص. وبما أنّ ترتيب المزج لا يهمّ، فسينتهي كلاهما إلى السرّ نفسه.
لا تستطيع إيف إجراء ذلك الحساب. فبإمكانها أن تُتمّ الحساب بأحد اللونين السرّيَّين، لأنّها تملك كلا اللونين المزججين، لكنّها لا تملك أيًّا من ذاك اللونين السرّيَّين. ويمكنها أيضًا أن تحاول مزج اللونين المزججين، وفي ذلك يكون قد مزج لون Alice السرّي ولون Bob السرّي معًا. لكنّ ذلك يجعل اللون الأساسي داخله مرّتين، فينتج لون يختلف عن لون السرّ المشترك الذي حسبه Alice وBob، والذي لا يشمل اللون الأساسي إلّا مرّة واحدة.
ديفي-هيلمان مع اللوغاريتمات المتقطّعة
يصف هذا القسم تطبيقًا عمليًّا لخوارزمية ديفي-هيلمان، قائمًا على مسألة اللوغاريتم
المتقطّع (discrete logarithm). وهو مقدَّم لتوفير بعض الخلفية الرياضية، ويتطلّب فهمه
إلمامًا بالحساب النمطي (modular arithmetic). فإن لم تكن ملمًّا بالحساب النمطي، فيمكنك
إمّا تخطّي هذا الفصل، أو قراءة :ref:ملحق الخلفية الرياضية <modular-arithmetic>
مقدّمًا.
قائم ديفي-هيلمان اللوغاريتمي على الفكرة بأنّ حساب y في المعادلة التالية سهل (على
الأقلّ بالنسبة إلى الحاسوب):
غير أنّ حساب x انطلاقًا من y وg وp يُعتقد أنّه صعب إلى حدٍّ كبير. وتُسمَّى
هذه مسألة اللوغاريتم المتقطّع، لأنّ عملية مماثلة من دون الحساب النمطي تُسمَّى
لوغاريتمًا.
وهذا ليس إلّا تطبيقًا ملموسًا لعملية ديفي-هيلمان المجرّدة التي ناقشناها في وقت
سابق. فاللون الأساسي المشترك هو عدد أوّلي (prime) كبير p، الأساس هو g. أمّا
عملية «مزج الألوان» فهي المعادلة أعلاه، حيث x هي قيمة الدخل وy هي القيمة
المزججة الناتجة.
وعنما يختار Alice أو Bob أرقامهما العشوائية r_A وr_B، يمزجانها مع الأساس
لإنتاج الأرقام المزججة m_A وm_B:
تُرسَل هذه الأرقام عبر الشبكة حيث تستطيع إيف رؤيتها. والافتراض الكامن في مسألة
اللوغاريتم المتقطّع هو أنّ ذلك مقبول، لأنّ استخراج r من m \equiv g^r \pmod{p}
يُفترض أنّه صعب إلى حدٍّ كبير.
وبعد أن يحصل كلٌّ من Alice وBob على الرقم المزجج للآخر، يضيف إليه رقمه السرّي الخاص. فمثلًا، يحسب Bob ما يلي:
ولو بدا حساب Alice مختلفًا، فإنّهما يحصلان على النتيجة نفسها، لأنّ
(g^{r_A})^{r_B} \equiv (g^{r_B})^{r_A} \pmod{p}. وهذا هو السرّ المشترك.
ولأنّ إيف لا تملك r_A ولا r_B، فإنّها لا تستطيع إجراء الحساب المكافئ: فإنّما
تملك رقم الأساس g والرقمين المزججين m_A \equiv g^{r_A} \pmod{p} و
m_B \equiv g^{r_B} \pmod{p}، وهما عديمان الفائدة لها. فهي تحتاج إمّا r_A أو
r_B (أو كليهما) كي تُجري الحساب الذي أجراه Alice وBob.
TODO: اذكر شيئًا عن هجمات MITM النشطة التي يختار فيها المهاجم قيمًا ناعمة (smooth values) لإنتاج أسرار ضعيفة.
ديفي-هيلمان مع المنحنيات الإهليلجية
يصف هذا القسم تطبيقًا عمليًّا لخوارزمية ديفي-هيلمان، قائمًا على مسألة اللوغاريتم
المتقطّع على المنحنيات الإهليلجية. وهو مقدَّم لتوفير بعض الخلفية الرياضية، ويتطلّب
فهمًا (جدًّا أوّليًّا) للرياضيات الكامنة وراء التشفير بالمنحنيات الإهليلجية. فإن لم
تكن ملمًّا بالمنحنيات الإهليلجية، فيمكنك إمّا تخطّي هذا الفصل، أو قراءة
:ref:ملحق الخلفية الرياضية <elliptic-curves> مقدّمًا.
ومن مزايا تنويعة ديفي-هيلمان بالمنحنيات الإهليلجية أنّ حجم المفتاح المطلوب أصغر بكثير جدًا ممّا هو عليه في التنويعة القائمة على مسألة اللوغاريتم المتقطّع. وذلك لأنّ أسرع الخوارزميات في كسر مسألة اللوغاريتم المتقطّع على المنحنيات الإهليلجية ذات تعقيد مقارب (asymptotic) أكبر من نظائرها غير الإهليلجية. فمثلًا، غربال حقل الأعداد (number field sieve) في اللوغاريتمات المتقطّعة، وهو خوارزمية من الطراز الأول في مهاجمة ديفي-هيلمان القائم على اللوغاريتم المتقطّع، له التعقيد الزمني التالي:
وهو أكبر من متعدّد حدود (polynomial) لكنّه أصغر من أُسّي (exponential) في عدد الخانات. وعلى الجهة المقابلة، فإنّ كلّ أسرع الخوارزميات التي يمكن استعمالها لكسر مسألة اللوغاريتم المتقطّع على المنحنيات الإهليلجية ذات تعقيد:
وبعبارة نسبية، هذا يعني أنّ حلّ مسألة المنحنيات الإهليلجية أصعب بكثير من حلّ مسألة
اللوغاريتم المتقطّع العادية، عند استعمال خوارزميات من الطراز الأول في الحالتين. أمّا
المقابل لهذا فإنّ خوارزمية المنحنيات الإهليلجية تحتاج، عند مستويات أمن متكافئة، إلى
أحجام مفاتيح أصغر بكثير rsa:keysizes nist:keymanagement [1]:
====================== ===================== ======================= مستوى الأمن (بتّات) بتّات لوغاريتم متقطّع بتّات مفتاح المنحنيات ====================== ===================== ======================= 56 512 112 80 1024 160 112 2048 224 128 3072 256 256 15360 512 ====================== ===================== =======================
المشكلات المتبقّية
باستعمال ديفي-هيلمان، يمكننا الاتفاق على أسرار مشتركة عبر إنترنت غير آمن، بأمان من المستقِعين. لكنّ المهاجم الذي قد لا يستطيع ببساطة أن يحصل على السرّ عبر التنصّت، يبقى بإمكان المهاجم النشط أن يكسر النظام. فإذا كان هذا المهاجم — الذي يُسمّى عادةً مورّي (Mallory) — في الوسط بين Alice وBob، فبإمكانه أن ينفّذ بروتوكول ديفي-هيلمان مرّتين: مرّة مع Alice حيث تتظاهر مورّي بأنّها Bob، ومرّة مع Bob حيث تتظاهر مورّي بأنّها Alice.
هناك سرّان مشتركان هنا: أحدهما بين Alice ومورّي، والآخر بين مورّي وBob. ويستطيع المهاجم (مورّي) ببساطة أن يأخذ جميع الرسائل التي يتلقّاها من شخص ويرسلها إلى الآخر، وأن يطّلع على الرسائل الصريحة، وأن يحذف رسائل، وأن يعدّلها أيضًا بأيّ شكل يختاره.
ولتراخي الأمور، حتى لو كان أحد الطرفين مدركًا بطريقة ما أنّ هذا يحدث، فلا سبيل له إلى إقناع الطرف الآخر بصدقه. فبعد كلّ هذا: لقد نفّذت مورّي عملية تبادل ديفي-هيلمان ناجحة مع الضحيّة التي لا تدري، ولديها جميع الأسرار المشتركة الصحيحة. فلا لدى Bob أيّ سرّ مشترك مع Alice، بل مع مورّي فحسب؛ ولا سبيل له إلى إثبات أنّه هو المشارك الشرعي. وبقدر ما تستطيع Alice تمييزه، فإنّ Bob لم يختَر سوى بضعة أرقام عشوائية. ولا سبيل إلى ربط أيّ مفتاح لدى Bob بأيّ مفتاح لدى Alice.
وتُسمَّى الهجمات من هذا النوع هجمات MITM، لأنّ المهاجم (مورّي) يقف بين شريكي الاتصال (Alice وBob). وبما أنّ البنية التحتية للشبكة التي نستعملها عادةً لإرسال الرسائل يديرها مشغّلون مختلفون كثيرون، فإنّ مثل هذا سيناريو الهجوم واقعيّ جدًّا، وسيضطر نظام تشفير آمن إلى معالجته بطريقة ما.
وفيما نجح بروتوكول ديفي-هيلمان في إنتاج سرّ مشترك بين شريكي الاتصال، فمن الواضح أنّ هناك قطعًا في الصورة ما تزال ناقصة لبناء أنظمة تشفير آمنة. فنحتاج إلى أدوات تساعدنا على مصادقة Alice أمام Bob والعكس، ونحتاج إلى أدوات تساعدنا على ضمان سلامة (integrity) الرسائل، بما يتيح للمستقبِل أن يتحقّق من أنّ الرسائل المستلَمة هي فعلًا الرسائل التي قصد المُرسِل إرسالها.
هذه الأرقام في الحقيقة تخصّ مسألة RSA في مقابل مسألة المنحنيات الإهليلجية المكافئة لها، لكنّ مستويات أمنها متقاربة بما يكفي لتُعطيك فكرة. ↩︎