उपयोगकर्ता पासवर्ड नमक के लिए इष्टतम लंबाई क्या है? [बन्द है]


128

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


10
मेरे पास नमक की लंबाई के बारे में सिफारिश नहीं है, लेकिन जो उत्तर यहां दिखाई दे रहे हैं, उनमें बहुत सारी बुरी जानकारी है। आपका नमक निश्चित रूप से होना चाहिए: - यादृच्छिक होना - प्रति रहस्य (आपकी प्रोग्राम छवि या कॉन्फ़िगरेशन फ़ाइल में संग्रहीत एक भी मूल्य नहीं)। नमक एक गुप्त रहस्य नहीं है, इसलिए इसे अपनी तालिका में संग्रहीत करना कोई समस्या नहीं है। एक नमक का एकमात्र उद्देश्य यह सुनिश्चित करना है कि जब एक ही वस्तु के अलग-अलग उदाहरणों में हैशेड (या एन्क्रिप्टेड) ​​हो जो आपको एक अलग परिणाम मिलता है।
माइकल बुर

2
उन लोगों के लिए जो नमक नहीं जानते: <a href=" en.wikipedia.org/wiki/Salt_(cryptography)"> नमक (क्रिप्टोग्राफी) </a> विकिपीडिया पर
डेविड कोएले

1
या अगर हैश आउटपुट की लंबाई के लिए नमक की लंबाई के लिए इष्टतम अनुपात है? 8-बाइट नमक HMAC-SHA-256 के लिए पर्याप्त हो सकता है, लेकिन HMAC-SHA-512 के लिए नहीं हो सकता है।
राजा

1
क्रिप्टोग्राफिक रूप से यादृच्छिक नमक हैशिंग फ़ंक्शन के आउटपुट के समान आकार का मतलब है कि "सभी संभव लवणों को आज़माएं" (प्लस एक पासवर्ड शब्दकोश) हमले के लिए "प्रयास सभी संभव हैश परिणामों" हमले के रूप में बहुत प्रयास की आवश्यकता होती है - जो एक मानक जानवर बल है । एक छोटे नमक का मतलब है कि आपके पास एक नमक शब्दकोश और एक शब्दकोष शब्दकोष हो सकता है।
रिचर्ड गैड्सन

-1 बेशक सवाल का जवाब देने की कोशिश भी नहीं करता है।
2235 पर user359996

जवाबों:


70

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

साल्ट केवल लंबे समय तक पर्याप्त होना चाहिए ताकि प्रत्येक उपयोगकर्ता का नमक अद्वितीय हो। यादृच्छिक 64-बिट लवण कभी भी एक अरब पंजीकृत उपयोगकर्ताओं के साथ भी दोहराने की संभावना नहीं है, इसलिए यह ठीक होना चाहिए। एक बार-बार दोहराया जाने वाला नमक एक अपेक्षाकृत मामूली सुरक्षा चिंता है, यह एक हमलावर को एक साथ दो खातों की खोज करने की अनुमति देता है, लेकिन कुल मिलाकर पूरे डेटाबेस पर खोज को अधिक गति नहीं देगा। यहां तक ​​कि अधिकांश उद्देश्यों के लिए 32-बिट लवण स्वीकार्य हैं, यह सबसे खराब स्थिति में एक हमलावर की खोज को लगभग 58% तक गति देगा। 64 बिट्स से अधिक लवण की लागत अधिक नहीं है, लेकिन ऐसा करने का कोई सुरक्षा कारण नहीं है।

प्रति उपयोगकर्ता नमक के शीर्ष पर साइट-वाइड नमक का उपयोग करने के लिए कुछ लाभ भी हैं, इससे अन्य साइटों पर संग्रहीत पासवर्ड हैश के साथ संभावित टकराव को रोका जा सकेगा, और सामान्य-उद्देश्य वाले इंद्रधनुष तालिकाओं के उपयोग को रोका जा सकता है, हालांकि 32 बिट्स भी नमक इंद्रधनुष के तालिकाओं को एक अव्यवहारिक हमले बनाने के लिए पर्याप्त है।

यहां तक ​​कि सरल और डेवलपर्स हमेशा इसे अनदेखा करते हैं-यदि आपके पास अद्वितीय उपयोगकर्ता आईडी या लॉगिन नाम हैं, तो वे नमक के रूप में पूरी तरह से ठीक हैं। यदि आप ऐसा करते हैं, तो आपको यह सुनिश्चित करने के लिए साइट-वाइड नमक जोड़ना चाहिए कि आप किसी अन्य सिस्टम के उपयोगकर्ताओं के साथ ओवरलैप नहीं करते हैं जिनके पास समान उज्ज्वल विचार था।


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

6
अपने अंतिम पैराग्राफ के संबंध में ध्यान दें, यदि आप साइट-वाइड नमक का उपयोग करते हैं, तो यह बिल्कुल वही होना चाहिए: साइट-वाइड। एप्लिकेशन-वाइड नहीं, यानी आपके द्वारा अपने एप्लिकेशन को इंस्टॉल किए गए प्रत्येक नए उदाहरण से एक नया साइट चौड़ा नमक उत्पन्न होना चाहिए। उदाहरण के लिए, यदि Windows प्रत्येक Windows प्रमाणीकरण डेटाबेस पर समान नमक का उपयोग करता है, तो उस नमक के लिए इंद्रधनुष तालिका बनाना सार्थक होगा, लेकिन यदि Windows के प्रत्येक स्थापित ने एक नया नमक उत्पन्न किया, तो यह नहीं होगा।
रिचर्ड गाड्सन

5
मुद्दा वास्तव में यह नहीं है कि नमक को अनुमान लगाने के लिए कठिन होना चाहिए। हमलावर को नमक का अनुमान लगाने की आवश्यकता नहीं है: जिस किसी के पास हैश तक पहुंच है उसके पास पहले से ही नमक है। मुद्दा यह है कि यदि आपके लवण बहुत आम हैं (उपयोगकर्ता नाम की तरह), तो वे अन्य साइटों पर समान हो सकते हैं, और उस समय हमलावरों को हमलों को संभव बनाने के लिए इंद्रधनुष तालिकाओं के बहुत छोटे सेट की आवश्यकता होती है। यही कारण है कि अन्य साइटों के साथ इस तरह के टकराव से बचने के लिए, प्रति-साइट नमक विचार का उल्लेख किया गया है।
नैट सीके

3
त्वरित नोट: यदि उपयोगकर्ता नाम नमक के रूप में उपयोग करते हैं, तो यह एक मुद्दा हो सकता है यदि उपयोगकर्ता नाम बदल जाते हैं। व्यावहारिक रूप से, (ग्राहक के डिज़ाइन दस्तावेज़ों में कही गई बातों के बावजूद) मैंने पाया है कि उपयोगकर्ता अक्सर उपयोगकर्ता नाम बदलना चाहते हैं।
साइलेंटसेटल

5
@ नैटके-के, जिस प्रति साइट नमक विचार के बारे में आप बात कर रहे हैं, उसे मिर्च कहा जाता है।
पचेरियर

35

हैशिंग पासवर्ड के लिए वर्तमान में स्वीकृत मानक हर पासवर्ड के लिए एक नया 16 वर्ण लंबा नमक बनाते हैं और पासवर्ड हैश के साथ नमक को स्टोर करते हैं।

वास्तव में वास्तव में यादृच्छिक नमक बनाने के लिए उचित क्रिप्टोग्राफिक देखभाल की जानी चाहिए।


6
चरित्र थोड़ा बीमार परिभाषित है। आपको बाइट कहना चाहिए ।
कोडइन्चोस

10
@CodesInChaos मेरा मानना ​​है कि आपका मतलब ऑक्टेट ;-)
user2864740

1
नमस्ते! ऐसा लगता है कि विकिपीडिया लेख बदल गया है - शायद आपको en.wikipedia.org/wiki/PBKDF2 या कुछ और देखना चाहिए ?
बोरिस ट्रेखोव


24

संपादित करें: मेरा नीचे का उत्तर पूछे गए प्रश्न का उत्तर देता है, लेकिन "वास्तविक" उत्तर है: बस bcrypt , scrypt , या Argon2 का उपयोग करें । यदि आप इस तरह के सवाल पूछ रहे हैं, तो आप लगभग निश्चित रूप से बहुत कम स्तर के टूल का उपयोग कर रहे हैं।

ईमानदारी से, नमक को हैशेड पासवर्ड के समान सटीक लंबाई न होने का कोई दोषपूर्ण कारण नहीं है। यदि आप SHA-256 का उपयोग कर रहे हैं, तो आपके पास 256-बिट हैश है। 256-बिट नमक का उपयोग न करने का कोई कारण नहीं है।

256 से अधिक बिट्स आपको सुरक्षा में गणितीय रूप से कोई सुधार नहीं करेंगे। लेकिन कम नमक के साथ जाना हमेशा एक ऐसी स्थिति के साथ समाप्त हो सकता है जहां एक इंद्रधनुष तालिका आपके नमक की लंबाई तक पकड़ लेती है - विशेष रूप से छोटे नमक के साथ।


10
यह इतनी बड़ी बात नहीं है ; उपयोगकर्ता मुश्किल से एक मिली सेकेंड हैश और डेढ़ सेकंड हैश के बीच अंतर को ध्यान में रखेगा, प्लस पासवर्ड हैशिंग वास्तव में जानवर बल के हमलों को धीमा करने में अधिक समय लेना चाहिए - हालांकि 15 मिनट के लिए लॉक किए गए विशिष्ट तीन हमले बेहतर हैं। क्या आप ऐसा करने के लिए सीपीयू चक्रों को "बर्बाद" कर रहे हैं? हाँ जो भी। सीपीयू वैसे भी अधिकांश वेबसाइटों पर नहीं की तुलना में अधिक समय व्यतीत करता है, तो इससे क्या फर्क पड़ता है? यदि आप प्रदर्शन के मुद्दों में भाग ले रहे हैं, तो स्केल आउट करें।
Randolpho

14
सालबो इंद्रधनुष के खिलाफ बचाव करता है। 256-बिट हैश के साथ एक 512-बिट नमक अभी भी अंतिम पासवर्ड में केवल 256 बिट एन्ट्रापी का परिणाम देगा।
स्टीफन टॉसेट

8
स्लो हैशिंग एक विशेषता है, बग नहीं।
outis

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

2
.................................................. .................................... विशेष प्रणाली। नमक के उद्देश्य है कि हैश खोजा नहीं जा सकता है और तुरंत प्लेन में उलट तो precomputation हमलों को रोकने के लिए है । 9999-बिट नमक के साथ, आपका पासवर्ड गुप्त रहता है , जबकि 3-बिट नमक के साथ, आपका पासवर्ड अब पूरी दुनिया को पता है (और वे इसका उपयोग आपके अन्य खातों में लॉगिन करने के लिए कर सकते हैं क्योंकि कई लोग अक्सर पासवर्ड का पुन: उपयोग करते हैं)। मुझे यह जानकर आश्चर्य हो रहा है कि यहां 5 लोगों ने वास्तव में इसमें "एन्ट्रॉपी" शब्द के कारण आपकी टिप्पणी को खारिज कर दिया था।
पचेरियर

7

विकिपीडिया :

लिनक्स, बीएसडी यूनिक्स और सोलारिस में प्रयुक्त SHA2-crypt और bcrypt विधियाँ-में 128 बिट्स के लवण हैं। ये बड़े नमक मान भविष्य के लिए इन प्रणालियों के खिलाफ पासवर्ड के लगभग किसी भी लंबाई के लिए पूर्वसंक्रमण के हमले करते हैं।

128-बिट (16-बाइट) नमक पर्याप्त होगा। आप इसे 128 / 4 = 32हेक्साडेसिमल अंकों के अनुक्रम के रूप में दर्शा सकते हैं।


यह मुझे लगता है कि अन्य सुरक्षित प्रणालियों का उपयोग करने का एक उदाहरण सबसे अच्छा अभ्यास क्या है का एक बड़ा उदाहरण है।
cjbarth

1
@ mklement0 धन्यवाद, मैंने उत्तर अपडेट कर दिया है।
एंड्री नेमचेंको

2

नमक के आकार के रूप में उपयोग करने के लिए एक उत्तर यह हो सकता है कि आप जिस हैश का उपयोग करने जा रहे हैं वह सुरक्षा की अवधि में प्रदान करता है।

उदाहरण के लिए, यदि आप SHA-512 की सुरक्षा का उपयोग करने जा रहे हैं, तो SHA-512 द्वारा प्रदान की गई सुरक्षा 256 बिट है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.