أود اليوم أن أتحدث عن كلمات المرور. نعم، أعلم أن كلمات المرور هي الأسوأ أمنيًا، ولكن ما سبب ذلك؟ هذه هي المقالة الأولى من بين سلسلة من المقالات التي تتناول الحديث عن كلمات المرور، إذ تركز هذه المقالة على أصول أنظمة كلمات المرور الحالية لدينا ابتداء بتسجيل الدخول إلى الأنظمة متعددة المستخدمين.

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

من السهل أن نرى كيفية التوصل إلى هذا الاستنتاج. فإذا حصرنا أنفسنا باستخدام الأحرف والأرقام فحسب، فستكون هناك ٢ ٦ كلمة مرور مكونة من خانة واحدة فقط، و ٢ ١٢ كلمة مرور مكونة من خانتين... وهكذا. وباستطاعة أسرع أنظمة تكسير كلمات المرور أن تتفقد حوالي ٢ ٣٦ كلمة مرور في الثانية، لذلك إن أردت كلمة مرور تستغرق عامًا لتكسيرها، فستحتاج إلى كلمة مكونة من ١٠ خانات أو أطول من ذلك.

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

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

 

كيفية تصميم نظام كلمات مرور

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

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

أدرك مصممو يونكس أن هناك منهجًا أفضل يتمثل في استخدام ما يسمى الآن تجزئة كلمة المرور (Password Hashing): فبدلاً من تخزين كلمة المرور نفسها تقوم بتخزين ما تسمى دالة وحيدة الاتجاه لكلمة المرور. والدالة وحيدة الاتجاه ليست إلا دالة (فلنرمز لها بالحرف هـ) سهلة الحساب باتجاه واحد دون الآخر.2 ويتم إجراء هذا الأمر تقليديًا بما تسمى دالة التجزئة Hash Function، وبالتالي تعرف الطريقة على أنها "تجزئة كلمة المرور" وتعرف القيم المخزنة على أنها "تجزئات كلمة المرور."

ما يعنيه الأمر في هذه الحالة أنك تخزن الزوج: (اسم المستخدم، هـ (كلمة المرور)). [ملاحظة فنية: أحذف المدخل العشوائي Salt الإضافي المستخدم للحد من الاختراقات غير المباشرة ما قبل العملية الحسابية على ملف كلمة المرور.] وعندما يحاول المستخدم تسجيل الدخول، تأخذ كلمة المرور الذي يدخلها (ك) وتحسب هـ(ك). وإذا كانت هـ(ك) نفس كلمة المرور المخزنة، إذا فأنت تعرف أن كلمة مروره صحيحة (مع احتمالية غامرة) وتسمح له بتسجيل الدخول، وخلاف ذلك ترجع خطأ. والجميل في هذا التصميم أنه حتى لو كان ملف كلمة المرور مسرّبًا، لا يعرف المخترق سوى تجزئات كلمة المرور.3

 

المشاكل والتدابير المضادة

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

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

توجد ثلاث دفاعات واضحة لهذا النوع من الهجوم:

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

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

  • اجعل الناس يختارون كلمات مرور أفضل: يبدو هذا جيدًا من الناحية النظرية، ولكنه أدى عمليًا إلى أعداد كبيرة من تضارب القواعد بشأن إنشاء كلمات المرور. وعندما تنشئ حسابًا ويقال لك إنك تحتاج إلى أن تكون كلمة مرورك ما بين ٨ إلى ١٢ خانة، مع حرف صغير وحرف كبير ورقم ورمز خاص من هذه المجموعة —ولكن ليس من هذه المجموعة الأخرى— فإن ما يأملونه منك هو إنشاء كلمات مرور قوية. وتشير التجربة إلى أنك على الأرجح ستستخدم كLمة مرؤر! لذلك فإن الوضع هنا لم يتحسن كثيرًا ما لم يستخدم الناس أدوات لإدارة كلمات المرور التي تنشئ كلمات مرور لهم.

 

 

البيئة الحديثة

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

 

 


 

1 ملاحظة المترجم: يقصد هنا بالحرف الكبير شكل الأحرف الكبيرة باللغة الإنجليزية كالأحرف التي تكون في بداية الجملة أو في الأسماء.

2 ما نحتاجه حرفياً هو ألا تكون الدالة وحيدة الاتجاه فحسب، بل أن تكون أيضاً مقاومة لأصل الصورة، ويعني هذا بالنظر إلى H(P) فإن من الصعب إيجاد أي مدخل P مثل أن H(P) == H)P).

3 للمزيد من المعلومات حول هذا، انظر Morris and Thompson للاطلاع على تاريخ تصميم يونكس القابل للقراءة تماماً. هناك خاصية مثيرة جداً للاهتمام، وهي أن دالات التجزئة الشاملة لم تكن موجودة في وقت تصميم هذا النظام، وبالتالي استخدمت بدلاً من ذلك تفرعاً من معيار تشفير البيانات. وتم تحويل كلمة المرور إلى مفتاح معيار تشفير البيانات ومن ثم تم استخدامه لتشفير قيمة ثابتة. ويعتبر هذا تصميماً جيداً نوعاً ما وحتى أنه شمل خاصية مصممة لمنع الهجمات باستخدام أجهزة معيار تشفير البيانات المفصلة. ولكن كانت لها صفة مؤسفة أن كلمات المرور كانت مقتصرة على 8 خانات، وتستلزم خوارزميات جديدة من شأنها أن تقبل كلمة مرور أطول.

 

تمت إعادة نشر هذا المقال من موقع https://blog.mozilla.org وفقاً لرخصة المشاع الإبداعي - Creative Commons، للإطلاع على المقال الأصلي.