15

संभव डुप्लिकेट:
Secure hash and salt for PHP passwordsसर्वश्रेष्ठ अभ्यास

मैं एक प्रणाली है कि एक में दुकानों उपयोगकर्ता क्रेडेंशियल (ईमेल, उपयोगकर्ता नाम और पासवर्ड) बनाने हूँ MySQL डेटाबेस और एन्क्रिप्शन, नमकीन और एन्क्रिप्शन प्रकारों का उपयोग करने पर विवादित विचारों को देखा है।

आप सुझाए जाने वाले सर्वोत्तम तरीकों क्या हैं? एमडी 5 या एसएचए 1 में एन्कोडिंग? नमस्कार या सलाम नहीं? बस पासवर्ड या सभी 3 तत्व एन्क्रिप्ट करना?

उत्तर

11

पासवर्ड हैश उपयोग PBKDF2 के लिए यह NIST approved है। आपको प्रत्येक पासवर्ड और नॉनट्रिविअल (1000 से अधिक) पुनरावृत्ति गणना के लिए एक यादृच्छिक गैर-गुप्त नमक का उपयोग करना चाहिए।

उपयोगकर्ता नाम और ईमेल के लिए, शायद एन्क्रिप्टिंग के लायक नहीं है।

+1

PBKDF2 के लिए +1 काफी बेहतर है, हालांकि मैं आम तौर पर 10,000 पुनरावृत्तियों का उपयोग जब प्रदर्शन कोई मुद्दा नहीं है;) एक उदाहरण के लिए: http://csharptest.net/470/another -example-of-how-to-store-a-salted-password-hash/ –

+0

@ csharptest.net मैं आपकी पुनरावृत्ति गणना, अच्छा उदाहरण पर सहमत हूं। – jbtule

0

इंद्रधनुष तालिकाओं का उपयोग करके हमले को रोकने के लिए पासवर्ड को मजबूत नमक (या तो एमडी 5 या SHA1 ठीक है) के साथ हैशिंग द्वारा संरक्षित किया जाना चाहिए।

आपको ईमेल पता नहीं होना चाहिए - जैसे ही आप इसे रखते हैं, आप उपयोगकर्ता के प्रकार के विरुद्ध जांच करने के अलावा किसी अन्य चीज़ के लिए इसका उपयोग करने में असमर्थ हैं, इसलिए इसे धोने से आपको उस व्यक्ति को ईमेल करने से रोक दिया जाएगा। समान रूप से उपयोगकर्ता नाम उस व्यक्ति की पहचान करने के लिए सादा पाठ में सबसे अच्छा संग्रहीत किया जाएगा।

+1

कृपया एमडी 5 या SHA1 का उपयोग न करें। वे क्रिप्टोग्राफिक रूप से टूटे हुए दोनों हैं। –

2

यह केवल वास्तव में वह पासवर्ड है जिसे आपको एन्क्रिप्टिंग की आवश्यकता है। वास्तविक, आप दोनों Hashing होना चाहिए कम से कम SHA-256 पर एक एल्गोरिथ्म में वास्तव में (कि तुम क्या मतलब है जब आप कहते हैं एन्कोडिंग है) (मैं यकीन है कि MD5 और SHA1 भंजनीय हैं हूँ?) औरSalting अपने पासवर्ड अतिरिक्त होने के लिए सुरक्षित। Preferred Method of Storing Passwords In Database

1

उपयोगकर्ता नाम और ईमेल एन्क्रिप्टेड नहीं किया जाना चाहिए, आप की जरूरत है उन्हें प्लेन में हो सकता है, वे और अधिक उपयोगी हो सकता है कि जिस तरह से:

यहाँ उन्हें भंडारण की पसंदीदा विधि पर एक जवाब है।

पासवर्ड के लिए: उन्हें ABSOLUTELY एन्क्रिप्टेड या धोया जाना चाहिए, अधिमानतः नमक के साथ भी। अब तक मैंने ऐसा करने के लिए कुछ हद तक दिलचस्प तकनीक का उपयोग किया: एईएस, जिसकी कुंजी पासवर्ड है। तो यदि उपयोगकर्ता अपना पासवर्ड "blabla123" बनाता है, तो मैं AES_ENCRYPT('blabla123', 'blabla123') पर कॉल करके इसे MySQL में संग्रहीत करूंगा। इस के लिए 2 लाभ हैं:

  • आप एन्क्रिप्शन कुंजी कहीं भी
  • प्रत्येक पासवर्ड एक अलग कुंजी का उपयोग कर एन्क्रिप्टेड है की दुकान नहीं है। तो यदि आप एक कुंजी बाहर निकलते हैं, तो इसकी उपयोगिता पर इसकी सीमा होगी।

वैधता तब होती है जब उपयोगकर्ता टाइप करता है और 2 मानों की तुलना करता है।

+0

मुझे यह पसंद आया ... –

+0

मुझे यह विधि भी पसंद है! क्या आप इस विधि को भी सलाम करने के लायक हैं? –

+1

@ फिलफैसप्लेंट यॉन्ग, मुझे लगता है कि आप इसे नमक बनाना चाहते हैं। यह नमक के बिना इंद्रधनुष हमलों के लिए खुला है। –

6

सर्वोत्तम प्रथाओं IMO हैं:

  • ऐसे SHA256 या SHA512 के रूप में एक हैशिंग एल्गोरिथ्म का उपयोग करें। एमडी 5 अब असुरक्षित है क्योंकि आप हैश को उलट सकते हैं/इंद्रधनुष हमले कर सकते हैं।

  • यह सुनिश्चित करने के लिए एक मजबूत नमक का उपयोग करें कि हमलावर आमतौर पर आपके डेटाबेस में प्रवेश प्राप्त करने पर पासवर्ड धोने वाले पासवर्ड का अनुमान नहीं लगा सकता है।

  • एन्क्रिप्शन का उपयोग न करें।

  • केवल हैश पासवर्ड, उपयोगकर्ता नाम और ई-मेल सादा पाठ के रूप में ठीक हैं।

+0

+1 ईमेल और उपयोगकर्ता नामों को धक्का देना कठिन होगा क्योंकि वे आम तौर पर मामले नहीं होते हैं संवेदनशील या तो। –

+1

यह सही जवाब नहीं है। आप उचित पासवर्ड हैशिंग फ़ंक्शन जैसे PBKDF2 या bcrypt का उपयोग करना चाहते हैं। – imichaelmiers

+0

@imichaelmiers - इसका मतलब यह नहीं है कि मेरा जवाब सही नहीं है। आपने एक मजबूत हैशिंग फ़ंक्शन की अनुशंसा की है, हालांकि SHA256 और 512 अभी भी मान्य हैं क्योंकि कोई हैश टकराव नहीं मिला है। –