استرجاع كلمة المرور عند تخزين كلمة المرور كقيمة التجزئة

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

سؤال

هل يمكن للمستخدمين أن يطلبوا أن تكون عبر البريد الالكتروني كلمة المرور الخاصة بهم لأنفسهم إذا تم تخزين كلمة المرور كقيمة تجزئة؟

هل هناك أي طريقة لتحويل قيمة التجزئة للقيمة نص واضح مع المعلومات الصحيحة (وما هي المعلومات التي قد تحتاج)؟

إذا كان المستخدم لديه نفس قيمة التجزئة كلمة المرور المخزنة في موقعين، ستكون كلمة المرور الخاصة بهم نفسها من أجل كل المواقع؟

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

المحلول

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

وآليات إعادة ضبط كلمة المرور هي البديل المناسب.

نصائح أخرى

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

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

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

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

وبحكم التعريف، تجزئة هي وظيفة اتجاه واحد. لا يمكن عكسها.

http://en.wikipedia.org/wiki/Sha-1

إذا كان هناك طريقة بسيطة لاستعادة كلمة المرور النص الواضح، لن يكون هناك أي نقطة في تجزئة كلمات السر لتبدأ. عند هذه النقطة ربما كنت كذلك base64 في عادل أو ROT13 لهم. (لا تفعل ذلك!)

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

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

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

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

لذلك يجب أن يكون لديك نموذج مع الحقول:

Hashed_password
Salt

وتحتاج إلى معرفة المستخدم طريقة لتجزئة كلمة المرور (وهنا يمكنني استخدام SHA1) ثم يمكنك تحديد في وحدة التحكم الخاصة بك:

def self.encrypted_password(password, salt)
   string_to_hash = password + "wibble" + salt
   Digest::SHA1.hexdigest(string_to_hash)
end

التالي يمكنك مقارنة:

user.Hashed_password == encrypted_password(password, user.salt)

وصحيح يعني أن "كلمة المرور" هي كلمة السر للمستخدم "المستخدم"

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

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