security - पासवर्ड हैशिंग, नमक और धोया मूल्यों का भंडारण




encryption hash (3)

मान लीजिए कि आप डीबीएमएस में कितने पासवर्ड धोए गए थे, यह तय करने की स्वतंत्रता थी। क्या इस तरह की योजना में स्पष्ट कमजोरियां हैं?

डीबीएमएस में संग्रहीत हैश मान बनाने के लिए, लें:

  • एक मूल्य जो नमक के हिस्से के रूप में डीबीएमएस सर्वर उदाहरण के लिए अद्वितीय है,
  • और नमक के दूसरे भाग के रूप में उपयोगकर्ता नाम,
  • और वास्तविक पासवर्ड के साथ नमक के संयोजन को बनाते हैं,
  • और SHA-256 एल्गोरिदम का उपयोग कर पूरी स्ट्रिंग हैश,
  • और परिणाम डीबीएमएस में स्टोर करें।

इसका मतलब यह होगा कि टक्कर से आने वाले किसी भी व्यक्ति को प्रत्येक उपयोगकर्ता नाम और प्रत्येक डीबीएमएस सर्वर इंस्टेंस के लिए अलग से काम करना होगा। मैं नए NIST मानक हैश एल्गोरिदम ( SHA-3 ) के उपयोग की अनुमति देने के लिए वास्तविक हैश तंत्र को कुछ हद तक लचीला रखने की योजना बना रहा हूं जो अभी भी काम कर रहा है।

'मूल्य जो डीबीएमएस सर्वर इंस्टेंस के लिए अद्वितीय है' को गुप्त नहीं होना चाहिए - हालांकि इसे आकस्मिक रूप से प्रकट नहीं किया जाएगा। इसका उद्देश्य यह सुनिश्चित करना है कि अगर कोई अलग डीबीएमएस सर्वर उदाहरणों में एक ही पासवर्ड का उपयोग करता है, तो रिकॉर्ड किए गए हैंश अलग होंगे। इसी तरह, उपयोगकर्ता का नाम गुप्त नहीं होगा - बस पासवर्ड सही है।

पासवर्ड पहले और उपयोगकर्ता नाम और 'अद्वितीय मूल्य' दूसरा, या डेटा के तीन स्रोतों के किसी अन्य क्रमपरिवर्तन के लिए कोई फायदा होगा? या तारों को interleaving के बारे में क्या?

क्या मुझे यादृच्छिक नमक मूल्य (प्रति पासवर्ड) के साथ-साथ उपर्युक्त जानकारी जोड़ने (और रिकॉर्ड) करने की आवश्यकता है? (लाभ: उपयोगकर्ता पासवर्ड का पुनः उपयोग कर सकता है और फिर भी, डेटाबेस में दर्ज एक अलग हैश प्राप्त कर सकता है। नुकसान: नमक दर्ज किया जाना चाहिए। मुझे संदेह है कि लाभ काफी नुकसान से अधिक है।)

बहुत से संबंधित SO प्रश्न हैं - यह सूची व्यापक होने की संभावना नहीं है:

मुझे लगता है कि इन सवालों के जवाब मेरे एल्गोरिदम का समर्थन करते हैं (हालांकि यदि आप बस यादृच्छिक नमक का उपयोग करते हैं, तो 'प्रति अद्वितीय मूल्य' और उपयोगकर्ता नाम घटक कम महत्वपूर्ण हैं)।


नमक को यादृच्छिक और अद्वितीय होना चाहिए। इसे स्वतंत्र रूप से जाना जा सकता है क्योंकि यह हमलावर की मदद नहीं करता है। कई सिस्टम डेटाबेस में सादा पाठ नमक को हैशर्ड पासवर्ड के बगल में कॉलम में संग्रहीत करेंगे।

नमक यह सुनिश्चित करने में मदद करता है कि यदि दो लोग (उपयोगकर्ता ए और उपयोगकर्ता बी) एक ही पासवर्ड साझा करते हैं तो यह स्पष्ट नहीं है। प्रत्येक पासवर्ड के लिए यादृच्छिक और अद्वितीय नमक के बिना हैश मान समान होंगे और स्पष्ट रूप से यदि उपयोगकर्ता ए के लिए पासवर्ड क्रैक किया गया है तो उपयोगकर्ता बी के पास एक ही पासवर्ड होना चाहिए।

यह हमलों से बचाने में भी मदद करता है जहां ज्ञात पासवर्ड के खिलाफ हैश का एक शब्दकोश मिलान किया जा सकता है। उदाहरण के लिए इंद्रधनुष टेबल।

इसके अलावा "वर्क फैक्टर" के साथ एक एल्गोरिदम का उपयोग करने का अर्थ यह भी है कि कम्प्यूटेशनल पावर काम को बढ़ाता है क्योंकि हैश बनाने के लिए एल्गोरिदम को भी जाना पड़ सकता है। उदाहरण के लिए, bcrypt । इसका मतलब है कि ब्रूट फोर्स हमलों के अर्थशास्त्र अस्थिर हो जाते हैं। संभवतः ज्ञात हैश की सारणी बनाना मुश्किल हो जाता है क्योंकि उन्हें बनाने में अधिक समय लगता है; "कार्य कारक" में भिन्नता का अर्थ यह होगा कि अधिक तालिकाओं का निर्माण करना होगा।


पासवर्ड में यादृच्छिक नमक क्यों न जोड़ें और संयोजन हैश। इसके बाद हैश और नमक को एक बाइट [] में संयोजित करें और डीबी में स्टोर करें?

यादृच्छिक नमक का लाभ यह है कि उपयोगकर्ता इसका उपयोगकर्ता नाम बदलने के लिए स्वतंत्र है। नमक को गुप्त होना जरूरी नहीं है, क्योंकि इसका उपयोग शब्दकोश हमलों को रोकने के लिए किया जाता है।


मुझे लगता है कि आपको खुद से पूछने की जरूरत है "आप यादृच्छिक नमक मूल्य उत्पन्न करने और इसे संग्रहीत करने से अधिक जटिल बनाकर क्या हासिल करने की उम्मीद कर रहे हैं?" जितना अधिक जटिल आप अपना एल्गोरिदम बनाते हैं, उतनी अधिक संभावना है कि आप अनजाने में कमजोरी पेश करें। इससे शायद कोई फर्क नहीं पड़ता कि मैं इसे कैसे कहूं, लेकिन इसका मतलब है मददगार - आपके ऐप के बारे में इतना खास क्या है कि इसे एक फैंसी नया पासवर्ड हैशिंग एल्गोरिदम चाहिए?





salt