سؤال

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

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

المحلول

كما يقول عضو الكنيست، SHA1 أو MD5 هما المعياران، إلى جانب SHA2.


تحديث:نظرًا لأن المعالجات أصبحت أسرع على مر السنين، فقد أصبحت التجزئة أكثر قوة.يُنصح الآن باستخدامه bcrypt.


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

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

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

نصائح أخرى

MD5 أو SHA1 + ملح.

إذا كنت تستخدم MD5 أو SHA1، فاستخدم الملح لتجنب حيل طاولة قوس قزح.

في C# هذا سهل:

MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
string addSalt = string.Concat( "ummm salty ", password );
byte[] hash = hasher.ComputeHash( Encoding.Unicode.GetBytes( addSalt ) );

سهل: بكريبت.

جيف من المحتمل أنك تقوم بتخزين كلمات المرور بشكل غير صحيح المقال هو قراءة ممتازة حول هذا الموضوع.

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

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

أطلقنا عليها اسم كلمات المرور المجزأة الآمنة إلى حد ما أو FSHP باختصار.تم تنفيذه في Python وRuby وPHP5 وتم إصداره إلى المجال العام.متاح للاستهلاك أو التشعب أو اللهب أو البصق على GitHub في http://github.com/bdd/fshp

FSHP عبارة عن تطبيق لتجزئة كلمة المرور المملحة والمجزأة بشكل متكرر.

مبدأ التصميم مشابه ل PBKDF1 المواصفات في RFC 2898(الملقب ب:بي كي سي اس رقم 5:مواصفات التشفير المستند إلى كلمة المرور، الإصدار 2.0.)يسمح FSHP باختيار طول الملح وعدد التكرارات ووظيفة التجزئة التشفير الأساسية بين SHA-1 و SHA-2 (256 ، 384 ، 512).البادئة التعريفية المحددة ذاتيًا في بداية كل مخرج تجعلها قابلة للحمل مع السماح للمستهلك باختيار خط الأساس الخاص بأمان تخزين كلمة المرور الخاصة به.

حماية:

يستخدم FSHP1 الافتراضي أملاح 8 بايت، مع 4096 تكرارًا لتجزئة SHA-256.- 8 بايت الملح يجعل هجمات جدول قوس قزح غير عملية عن طريق ضرب المساحة المطلوبة مع 2 ^ 64.- تكرارات 4096 تجعل هجمات القوة الغاشمة باهظة الثمن إلى حد ما.- لا توجد هجمات معروفة ضد SHA-256 للعثور على تصادمات مع جهد حسابي أقل من 2 ^ 128 عملية في وقت هذا الإصدار.

التنفيذ:

  • بايثون:تم الاختبار مع 2.3.5 (ث/هاشلب)، 2.5.1، 2.6.1
  • روبي :تم اختباره مع 1.8.6
  • PHP5 :تم اختباره مع 5.2.6

الجميع أكثر من موضع ترحيب لإنشاء تطبيقات اللغة المفقودة أو تلميع تلك الحالية.

عملية أساسية (مع بايثون):

>>> fsh = fshp.crypt('OrpheanBeholderScryDoubt')
>>> print fsh
{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==
>>> fshp.validate('OrpheanBeholderScryDoubt', fsh)
True

تخصيص التشفير:

دعونا نضعف نظام تجزئة كلمة المرور لدينا.- تقليل طول الملح من الافتراضي 8 إلى 2.- تقليل جولة التكرار من الافتراضي 4096 إلى 10.- حدد FSHP0 مع SHA-1 كخوارزمية التجزئة الأساسية.

>>> fsh = fshp.crypt('ExecuteOrder66', saltlen=2, rounds=10, variant=0)
>>> print fsh
{FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==

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

إذا كنت تستخدم SQL Server، فهناك وظيفة HashBytes:

http://msdn.microsoft.com/en-us/library/ms174415.aspx

أؤيد التصويت لصالح MD5 أو SHA بالملح.تحتوي أي من لغات تطوير الويب الرئيسية على وظائف مدمجة لحساب التجزئة (في PHP، على سبيل المثال، تحتوي حزمة mcrypt على الوظائف الضرورية).

يجب أن تستخدم خوارزمية تجزئة أحادية الاتجاه مثل SHA-1 المقترحة أعلاه مع الملح.أود أن أقترح هذا الموقع لمزيد من المعلومات.يتضمن بعض نماذج التعليمات البرمجية/التنفيذ.http://www.obviex.com/samples/hash.aspx

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

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

إذا كنت تريد إثبات الحل الخاص بك في المستقبل، فإنني أوصي بـ SHA256 أو SHA512.يشعر عالم عالم التشفير بالتوتر بشأن MD5، وبدرجة أقل قليلاً، SHA1.

أو، إذا كنت تستطيع، الانتظار شا-3

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

مزيد من المعلومات: كيفية القيام بتجزئة كلمة المرور بشكل صحيح

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