2009-07-27 16 views
38

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

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

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

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

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

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

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

काफी सवाल अतः संबंधित का एक बहुत - इस सूची व्यापक होने की संभावना नहीं है:

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

+1

यादृच्छिक हिस्सा महत्वपूर्ण है यह भविष्यवाणी हमलों को रोकता है – Jacco

+0

आप http: // stackoverflow जोड़ सकते हैं।कॉम/प्रश्न/1645161/नमक-पीढ़ी-और-खुले स्रोत-सॉफ्टवेयर/16451 9 0 # 16451 9 0 अपनी लेख सूची – Jacco

+0

में भी जोड़ें http://dba.stackexchange.com/questions/7492/password-hashes-fixed-length- [dba.se] साइट – jcolebrand

उत्तर

31

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

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

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

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

+5

नमक हमें इंद्रधनुष तालिका आधारित हमले से भी बचाता है –

+0

हां; जैसा कि मैंने अन्य उत्तरों के लिए टिप्पणियों में उल्लेख किया है, जैसा कि मैंने लिखा है, मेरा प्रश्न खराब हो गया है, और मुझे एहसास हुआ कि यादृच्छिक नमक जरूरी था, लेकिन यह प्रतिबिंबित करने में समय नहीं लगा कि यह भी पर्याप्त था। मिश्रण में उपयोगकर्ता नाम जोड़ना मुख्य रूप से उस डेटा को लम्बा करता है जिसे हैश एल्गोरिदम को काम करना पड़ता है, छोटे पासवर्ड की रक्षा में मदद करता है। कितना वास्तविक है कि अतिरिक्त सुरक्षा है, मुझे यकीन नहीं है। –

+10

यह उत्तर गलत है। लवण का उद्देश्य * नहीं * इसलिए "साझा पासवर्ड स्पष्ट नहीं हैं"। इसका उद्देश्य शब्दकोश हमलों को अधिक कठिन बनाना है। (इस तरह के खतरनाक रूप से गलत प्रतिक्रियाओं को "उत्तर" के रूप में चिह्नित करने की अनुमति देना इस साइट का घातक डिज़ाइन दोष है।) –

6

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

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

+2

+1 यह उल्लेख करने के लिए कि उपयोगकर्ता अब अपने उपयोगकर्ता नाम को बदलने के लिए स्वतंत्र नहीं है! –

+0

@pb: इस संदर्भ में, मैं नहीं चाहता कि उपयोगकर्ता अपना नाम बदल रहे हों, धन्यवाद। कुछ संदर्भों में, यह मूल्यवान हो सकता है, लेकिन जहां तक ​​इस ऐप का संबंध है, उपयोगकर्ता का नाम तय किया गया है (या, अधिक सटीक रूप से, यदि कोई अपना नाम बदलता है तो वे एक नया, अलग उपयोगकर्ता बन जाते हैं)। बस यादृच्छिक नमक और पासवर्ड का उपयोग करना ठीक है; मैं यह सुनिश्चित करने के लिए थोड़ा चिंतित हूं कि हैश एल्गोरिदम के लिए दांतों को प्राप्त करने के लिए पर्याप्त सामग्री है - यह केवल नमक से अधिक जोड़ने के कारण का एक और हिस्सा है। जैसा कि मैंने सवाल लिखा था, मुझे एहसास हुआ कि यादृच्छिक नमक आवश्यक था; मैंने नहीं देखा कि यह भी पर्याप्त था। –

+0

उपयोगकर्ता अभी भी अपना उपयोगकर्ता नाम बदल सकता है, लेकिन आपको उस समय अपना पासवर्ड फिर से करना होगा। दूसरी ओर, एक यादृच्छिक नमक का उपयोग गैर-यादृच्छिक नमक का उपयोग करने के समान या अधिक लाभ होता है। – wprl

19

मुझे लगता है कि आप समस्या को अधिक जटिल बना रहे हैं।

समस्या से प्रारंभ:

  1. आप कमजोर पासवर्ड की रक्षा करने की कोशिश कर रहे हैं?
  2. क्या आप इंद्रधनुष के हमलों के खिलाफ कम करने की कोशिश कर रहे हैं?

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

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

इसके बजाय मैं सिर्फ अतिरिक्त स्तंभ जोड़ सकते हैं और एक उचित यादृच्छिक नमक संग्रहीत करेंगे। यह किसी भी तरह के इंद्रधनुष हमले के खिलाफ रक्षा करेगा। कई तैनाती में।

हालांकि, यह आपको ब्रूट फोर्स अटैक के खिलाफ सुरक्षा नहीं करेगा। इसलिए यदि आप ऐसे उपयोगकर्ताओं की सुरक्षा करने की कोशिश कर रहे हैं जिनके पास क्रैपी पासवर्ड हैं, तो आपको कहीं और देखना होगा। उदाहरण के लिए यदि आपके उपयोगकर्ताओं के पास 4 अक्षर पासवर्ड हैं, तो शायद इसे नमक और नवीनतम हैश एल्गोरिदम के साथ भी सेकंड में क्रैक किया जा सकता है।

+0

अच्छा जवाब।10 के लिए वोट और grats है! –

+0

: पी धन्यवाद! –

+1

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

7

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

+0

@ पीटर: कोई अपराध नहीं हुआ - मैं समझता हूं कि आप क्या कह रहे हैं। जैसा कि मैं लिख रहा था, "क्या अलग है" का एक पहलू था "सुनिश्चित करें कि एक ही पासवर्ड के साथ अलग-अलग सर्वर अलग-अलग कुंजी स्टोर करते हैं"। जैसा कि अन्य टिप्पणियों में उल्लेख किया गया है, मुझे इस सवाल के अंत में एहसास हुआ कि यादृच्छिक नमक आवश्यक था; मैंने यह नहीं बताया कि यह पर्याप्त था। और हैश में अतिरिक्त डेटा छोटे और खराब पासवर्ड की सुरक्षा में मदद करता है। मैं आकलन नहीं कर सकता कि यह कितना अंतर बनाता है। –

+0

निरंतर: यदि नमक 8-बाइट पूर्णांक है और पासवर्ड एक ही अक्षर है, तो क्या SHA-256 हैश वास्तव में पर्याप्त रूप से इसकी रक्षा करता है? यदि उपयोगकर्ता का नाम 3 वर्ण है और 'सर्वर अद्वितीय' डेटा था, तो 32 वर्ण यादृच्छिक रूप से निर्धारित (लेकिन निश्चित) स्ट्रिंग कहता है, क्या यह डेटा की सुरक्षा में मदद करता है - डेटा के 44 बाइट डेटा 9 के बजाय काम करने के लिए। ऐसा लगता है जैसे यह सुरक्षित होना चाहिए (9 बाइट इंद्रधनुष पर हमला किया जा सकता है; 44 बाइट्स शायद आसानी से हमला नहीं किया जा सकता था)। हो सकता है कि 'सर्वर अद्वितीय' बस 'निश्चित 32-बाइट स्ट्रिंग' होना चाहिए; ... –

+0

निरंतर (2): ... या शायद इसे फिक्स्ड स्ट्रिंग के साथ 64 बाइट्स (या 32 बाइट्स, या कुछ अन्य नंबर) पर 'नमक प्लस पासवर्ड' पैड करने की आवश्यकता है? या शायद यह सब एक भव्य हंस पीछा है; यह वास्तव में कोई फर्क नहीं पड़ता। –