سؤال

انا سألت هنا حول البروتوكول الذي طُلب مني تنفيذه، ومدى أمانه.لأنه بدا واضحاً منذ البداية أن الأمر هراء.ولما كان الأمر كذلك فإنني أسأل:

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

فقط 2 خصائص خاصة لاقتراحاتك.

  1. بسيط:الشبكة التي سيعمل عليها هذا التطبيق ليست غير آمنة بشكل خاص وأريد فقط تجنب إرسال كلمة المرور بنص عادي

  2. إذا كان ذلك ممكنا، وليس تبادل رسائل طويلة جدا.كلما كان أقصر، كلما كان ذلك أفضل.

هل كانت مفيدة؟

المحلول

الدفع مصادقة الاستجابة للتحدي

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

نصائح أخرى

ثلاثة بروتوكول تمرير سيكون في متناول يدي.في الأساس، يتلخص الأمر في:

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

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

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

في قاعدة البيانات يجب عليك تخزين شيء مثل:

md5(login_name +  domain_or_appname_salt + password);

يمنع الملح الموجود في المنتصف العديد من أشكال هجمات القاموس.

من جانب العملاء (في المتصفح) سيكون لديك نموذج تسجيل دخول باسم المستخدم وكلمة المرور.ستقوم قطعة صغيرة من جافا سكريبت بتجزئة اسم المستخدم + app_salt_ وكلمة المرور، لذلك يتم إرسال اسم تسجيل الدخول والتجزئة التي تم إنشاؤها فقط إلى الخادم.

الآن، لن يتم أبدًا إرسال كلمة مرور النص العادي إلى الخادم بنص عادي.لذلك لا يجب عليك الاعتماد على HTTPS هنا.

يمكن استخدام نفس الأسلوب في نموذج تحديث كلمة المرور.وبالتالي فإن الخادم لا يعرف أبدًا كلمة مرور النص العادي.

أتمنى أن تكون قد حصلت على بعض الإلهام من هذا والإجابات الأخرى.

قرصنة سعيدة!

هيوبرت

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

إذا كان البروتوكول الخاص بك يعمل عبر HTTP، فيمكنك القيام بذلك بطريقة قياسية باستخدام HTTPS.على سبيل المثال، تعتبر المصادقة الأساسية عبر HTTPS آمنة بدرجة كافية لتلبية الاحتياجات التي حددتها.

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

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

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

SASL هي آلية مصادقة آمنة.يتم توفير دعم SASL في مكتبات Java القياسية للإصدارات 1.5+.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top