Bcrypt(4) (= 4 تكرارات) مقابل SHA512 أو شيء مختلف مع ملح فريد لكل كلمة مرور؟

StackOverflow https://stackoverflow.com//questions/11704200

سؤال

خلفية:

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

قبل أن أتعمق أكثر في تنفيذ LightOpenID، أريد إضافة معلومات تسجيل دخول عادية.الكتاب الذي كنت أتعلم منه يسمى Head First PHP & MySQL (2008) ويستخدم الكود النهائي للفصل SHA('$user_password') كجزء من استعلام MySQL.

نظرًا لأنني مهتم بكتابة جيف أتوود، فأنا على دراية جيدة بـ bcrypt كما هو الحال في scrypt.ولكن نظرًا لعدم وجود تطبيق php لـ scrypt وعدم وجود خادم مخصص لتشغيله، قررت على الأقل النظر في تنفيذ bcrypt في الوقت الحالي.

ومع ذلك، فأنا لست ساذجًا تمامًا، فأنا أعلم أنه يجب علي الحذر من المبالغة في توسيع موارد الاستضافة المتواضعة الخاصة بي.يجب أن يأتي تطبيق php نفسه دائمًا في المقام الأول قبل أي شيء آخر يتعلق بالموارد.

طريقة أندرو مور يبدو لطيفًا (على الرغم من أنني يجب أن أرى كيفية تنفيذه على php 5.2.17 الذي يستخدمه مضيفي) ويأتي مع نصيحة لسرعة الأجهزة:

يجب عليك تحديد عدد من الجولات التي تؤدي إلى 200-250 مللي ثانية من العمل.جزء من سبب أمان bcrypt هو أنه بطيء.يجب أن تتأكد من وجود عدد من الجولات التي تحافظ على هذه المميزة.- أندرو مور

مستخدم آخر يذكر أن له تشغيل microtime() يعطي 0.314 لـ Bcrypt(9)، والذي سيكون بالتالي قريبًا من الأمثل.

السؤال:

نظرًا لأنني لا أملك سوى موارد متواضعة جدًا تحت تصرفي وأرغب في الاستفادة منها على أفضل وجه، وترك معظمها لتطبيق php نفسه، هل ما زلت أفضل حالًا في استخدام Bcrypt(4) بدلاً من شيء آخر؟

يُرجع Bcrypt(4) صحيحًا على الفور تقريبًا، لكن هل ما زال يحتفظ بهذه الخاصية التي يتحدث عنها مور؟ (هل سيكون هذا هو الجزء المتعلق بذاكرة الوصول العشوائي (RAM) الذي يجعل الأمر أكثر صعوبة بالنسبة لوحدة معالجة الرسومات؟) أم أن SHA512 أو أي شيء آخر هل تكون في الواقع بنفس السرعة ولكن أكثر أمانًا في هذه المرحلة؟

كنت أتوقع فوز Bcrypt(4) في هذه الحالة، لكن هل أعرف ذلك بحق الجحيم؟:ص

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

المحلول

يتعلق الأمان دائمًا بما تحاول تأمينه.

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

SHA-512 ليس أكثر أمانًا من SHA-1 كخوارزمية تجزئة كلمة المرور [1]، ولم يتم تصميمه لهذا الغرض.ومع ذلك، لا يزال من الممكن استخدامها كأدوات أولية لإنشاء خوارزميات تشفير آمنة، ولكن هذا شيء لا ينبغي لأي شخص القيام به.لكي تعتبر خوارزميات التشفير آمنة، يجب أن تكون عامة حتى تخضع لمراجعة النظراء، ويجب أن تجتاز اختبار الزمن.ومن الواضح أنها يجب أن تكون مصممة لما ستستخدمه منها.MD5، شا-X، الخ.هي خوارزميات تشفير، ولكنها غير مصممة لتخزين كلمات المرور.

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

[1] بالنسبة للأشياء الأخرى، فمن الواضح أنها أكثر أمانًا

نصائح أخرى

يجب أن تنظر إلى أمان النظام، وليس فقط bcrypt.

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

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

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

أو هل سيكون SHA512 أو أي شيء آخر بنفس السرعة ولكنه أكثر أمانًا في هذه المرحلة؟

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

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

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

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