العربية
  • auth
  • password
  • security
  • hashing
  • bcrypt
  • argon2
  • sha1
  • sha2
  • login
  • sign-in

تطور تشفير كلمات المرور

قد تكون سمعت عن نصائح لاختيار خوارزميات تشفير كلمات المرور، ولكن هل فكرت لماذا يتم التوصية بها؟ في هذه المقالة، سنستكشف تطور خوارزميات تشفير كلمات المرور والأسباب وراءها.

Gao
Gao
Founder

المقدمة

تشفير كلمات المرور، كما يشير الاسم، هو عملية حساب قيمة تجزئة من كلمة مرور. يتم عادةً تخزين قيمة التجزئة في قاعدة بيانات، وخلال عملية تسجيل الدخول، يتم حساب قيمة التجزئة لكلمة المرور التي يدخلها المستخدم ويتم مقارنتها بقيمة التجزئة المخزنة في قاعدة البيانات. إذا تطابقت، يتم توثيق المستخدم.

قبل أن نتعمق في تطور خوارزميات تشفير كلمات المرور، من المهم أن نفهم لماذا الضرورة لذلك.

كلمات المرور بالنص العادي: خطر أمني كبير

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

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

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

الترميز مقابل التشفير مقابل التجزئة

غالبًا ما يتم الخلط بين هذه المصطلحات الثلاثة، ولكنها مفاهيم مميزة.

الترميز

الترميز هو أول شيء يجب استبعاده لتخزين كلمات المرور. على سبيل المثال، Base64 هو خوارزمية ترميز تحول البيانات الثنائية إلى سلسلة من الأحرف:

معرفة خوارزمية الترميز يتيح لأي شخص فك الشفرة للسلسلة المرمازة واسترجاع البيانات الأصلية:

بالنسبة للمخترقين، معظم خوارزميات الترميز تعادل النص العادي.

التشفير

قبل أن يكتسب التشفير شعبية، كان التشفير يستخدم لتخزين كلمات المرور، مثل AES. يتضمن التشفير استخدام مفتاح (أو زوج من المفاتيح) لتشفير وفك تشفير البيانات.

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

التجزئة

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

كصاحب موقع، لا تحتاج فعليًا إلى معرفة الكلمة السرية نفسها، طالما أن المستخدم يمكنه تسجيل الدخول باستخدام الكلمة السرية الصحيحة. يمكن تبسيط عملية التسجيل كما يلي:

  1. يدخل المستخدم الكلمة السرية.
  2. يستخدم الموقع خوارزمية تجزئة لحساب قيمة التجزئة للكلمة السرية.
  3. يخزن الموقع قيمة التجزئة في قاعدة البيانات.

عندما يسجل المستخدم دخوله، تكون العملية:

  1. يدخل المستخدم الكلمة السرية.
  2. يستخدم الموقع نفس خوارزمية التجزئة لحساب قيمة التجزئة للكلمة السرية.
  3. يقارن الموقع قيمة التجزئة مع قيمة التجزئة المخزنة في قاعدة البيانات.
  4. إذا تطابقت قيمة التجزئة، يتم توثيق المستخدم.

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

مجموعة بداية خوارزميات التجزئة

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

MD5

في عام 1992، قام رون ريفست بتصميم خوارزمية MD5، وهي خوارزمية لحساب رسالة تجزئة يمكنها حساب قيمة تجزئة 128 بت من أي بيانات. تم استخدام MD5 على نطاق واسع في مجالات مختلفة، بما في ذلك تشفير كلمات المرور. على سبيل المثال، قيمة تجزئة MD5 لكلمة "123456" هي:

كما ذُكر سابقًا، تظهر قيمة التجزئة كسلسلة عشوائية ولا يمكن عكسها. علاوة على ذلك، فإن MD5 سريع وسهل التنفيذ، مما يجعله خوارزمية تشفير كلمات المرور الأكثر شيوعًا.

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

في يومنا الحاضر، أصبحت أجهزة الكمبيوتر أكثر قوة من ذي قبل، مما يسهل الكسر بالقوة الغاشمة لتجزئات كلمة المرور باستخدام MD5.

عائلة SHA

لذا، لماذا لا نستخدم خوارزمية أخرى تولد قيم تجزئة أطول؟ يبدو أن عائلة SHA خيار جيد. SHA-1 هي خوارزمية تجزئة تولد قيم تجزئة 160 بت، وSHA-2 هي عائلة من خوارزميات التجزئة التي تولد قيم تجزئة بطول 224 بت، 256 بت، 384 بت، و512 بت. دعونا نرى قيمة تجزئة SHA-256 لكلمة "123456":

قيمة التجزئة لـ SHA-256 أطول بكثير من MD5، كما أنها غير قابلة للعكس. ومع ذلك، هناك مشكلة أخرى: إذا كنت تعرف بالفعل قيمة التجزئة، مثل المذكور أعلاه، ورأيت نفس القيمة في قاعدة البيانات، تعرف أن الكلمة السرية هي "123456". يمكن للمخترق إنشاء قائمة بكلمات المرور الشائعة وقيم التجزئة المقابلة لها، ومقارنتها بقيم التجزئة في قاعدة البيانات. تعرف هذه القائمة باسم جدول قوس قزح.

الملح

للتخفيف من هجمات جداول قوس قزح، تم تقديم مفهوم الملح. الملح هو سلسلة عشوائية يتم إضافتها إلى الكلمة السرية قبل التجزئة. على سبيل المثال، إذا كان الملح هو "salt"، وترغب في استخدام SHA-256 لتجزئة كلمة المرور "123456" مع الملح، بدلاً من القيام ببساطة بـ:

ستقوم بـ:

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

التكرار

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

يمكنك استخدام:

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

استراحة منتصف المدة

لنأخذ استراحة ونلخص خصائص خوارزمية تجزئة كلمات مرور جيدة:

  • غير قابلة للعكس (مقاومة إعادة الصور السابقة)
  • صعبة الكسر بالقوة الغاشمة
  • مقاومة لهجمات جداول قوس قزح

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

خوارزميات تجزئة كلمات المرور

لمعالجة هذه المشكلة، تم تصميم عدة خوارزميات تجزئة خصيصًا لتشفير كلمات المرور. دعونا نلقي نظرة على بعضها.

bcrypt

bcrypt هي خوارزمية تجزئة كلمات مرور تم تصميمها بواسطة نيلس بروفوس وديفيد مازييريس. يتم استخدامها على نطاق واسع في العديد من لغات البرمجة. إليك مثال على قيمة تجزئة bcrypt:

على الرغم من أنها تظهر كسلسلة عشوائية أخرى، إلا أنها تحتوي على معلومات إضافية. دعونا نفصلها:

  • الجزء الأول $2y يشير إلى الخوارزمية، التي هي 2y.
  • الجزء الثاني $12 يشير إلى عدد التكرارات، وهو 12. وهذا يعني أن خوارزمية التجزئة ستعمل 212=4096 مرة (تكرارات).
  • الجزء الثالث wNt7lt/xf8wRJgPU7kK2ju هو الملح.
  • الجزء الأخير GrirhHK4gdb0NiCRdsSoAxqQoNbiluu هو قيمة التجزئة.

لدى bcrypt بعض القيود:

  • الحد الأقصى لطول كلمة المرور هو 72 بايت.
  • الملح محدود بـ 16 بايت.
  • قيمة التجزئة محدودة بـ 184 بت.

Argon2

نظرًا للنقاشات والقيود المفروضة على خوارزميات تجزئة كلمات المرور الموجودة، تم إجراء مسابقة تشفير كلمات المرور في عام 2015. بعد تخطي التفاصيل، لنتعرف على الفائز: Argon2.

Argon2 هي خوارزمية تجزئة كلمات مرور تم تصميمها بواسطة أليكس بيريوكوف، دانييل دينو، وديمتري خفراتوفيتش. تقدم العديد من المفاهيم الجديدة:

  • صعبة على الذاكرة: تم تصميم الخوارزمية لتكون صعبة على التحليل الموازي، مما يجعل استخدام القوة الغاشمة باستخدام وحدات معالجة الرسومات صعبًا.
  • صعبة على الزمن: تم تصميم الخوارزمية لتكون صعبة على التحسين، مما يجعل استخدام القوة الغاشمة باستخدام الدوائر المتكاملة الخاصة بالتطبيقات (ASICs) صعبًا.
  • مقاومة لهجمات القنوات الجانبية: تم تصميم الخوارزمية لتكون مقاومة لهجمات القنوات الجانبية، مثل هجمات التوقيت.

يوجد نسختان رئيسيتان من Argon2، Argon2i وArgon2d. يعد Argon2i الأكثر أمانًا ضد هجمات القنوات الجانبية، بينما يوفر Argon2d أعلى مقاومة ضد هجمات التكسير باستخدام وحدات معالجة الرسومات.

-- Argon2

إليك مثال على قيمة تجزئة Argon2:

لنقم بتفكيكها:

  • الجزء الأول $argon2i يشير إلى الخوارزمية، التي هي argon2i.
  • الجزء الثاني $v=19 يشير إلى الإصدار، الذي هو 19.
  • الجزء الثالث $m=16,t=2,p=1 يشير إلى تكلفة الذاكرة، تكلفة الزمن، ودرجة التوازي، التي هي 16، 2، و1.
  • الجزء الرابع $YTZ5ZnpXRWN5SlpjMHBDRQ هو الملح.
  • الجزء الأخير $12oUmJ6xV5bIadzZHkuLTg هو قيمة التجزئة.

في Argon2، الحد الأقصى لطول كلمة المرور هو 232-1 بايت، الملح محدود بـ 232-1 بايت، وقيمة التجزئة محدودة بـ 232-1 بايت. يجب أن يكون هذا كافياً لمعظم السيناريوهات.

يتوفر Argon2 الآن في العديد من لغات البرمجة، مثل node-argon2 لـ Node.js وargon2-cffi لـ Python.

الخلاصة

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

إذا كنت ترغب في تجنب عناء تنفيذ التوثيق والتفويض، لا تتردد في تجربة Logto مجانًا. نحن نقدم حلول آمنة (نستخدم Argon2!)، موثوقة، وقابلة للتوسع، مما يمكنكه من التركيز على بناء منتجك.