सामान्य तौर पर, आपको एक से अधिक हैशिंग एल्गोरिथ्म का उपयोग करने की आवश्यकता नहीं है।
आपको क्या करने की आवश्यकता है:
नमक का उपयोग करें: नमक का उपयोग सिर्फ आपके पासवर्ड को अधिक सुरक्षित बनाने के लिए नहीं किया जाता है , इसका उपयोग इंद्रधनुष तालिका हमले को समाप्त करने के लिए किया जाता है। इस तरह, किसी के पास आपके सिस्टम में संग्रहीत पासवर्ड के लिए हैश को पूर्वस्थापित करने की कोशिश में एक कठिन काम होगा।
कई व्यवधानों का उपयोग करें: केवल SHA (पासवर्ड + नमक) करने के बजाय, SHA (SHA (SHA (SHA (SHA ... (पासवर्ड + नमक))))) करें। या, दूसरे तरीके से प्रतिनिधित्व करने के लिए:
hash = sha(password + salt)
for i=1 , i=5000, i++ {
hash = sha(hash + salt);
}
और, अंत में, एक अच्छा हैशिंग फ़ंक्शन चुनें। SHA, MD5, आदि, बहुत अच्छे नहीं हैं क्योंकि वे बहुत तेज़ हैं । चूंकि आप सुरक्षा के लिए हैश का उपयोग करना चाहते हैं, आप बेहतर धीमी हैश का उपयोग करेंगे। उदाहरण के लिए, Bcrypt , PBKDF2 या Scrypt पर एक नज़र डालें ।
संपादित करें : टिप्पणियों के बाद, आइए कुछ बिंदुओं को देखने का प्रयास करें (क्षमा करें, अंत तक पाने के लिए लंबी व्याख्या, क्योंकि यह दूसरों को समान उत्तरों की खोज में मदद कर सकता है):
यदि आपका सिस्टम सुरक्षित है, जैसे कोई भी कभी भी संग्रहीत पासवर्ड तक नहीं पहुंच पाएगा, तो आपको हैश की आवश्यकता नहीं होगी। पासवर्ड गुप्त होगा, किसी को भी नहीं मिलेगा।
लेकिन कोई भी आश्वस्त नहीं कर सकता कि पासवर्ड के साथ डेटाबेस चोरी हो जाएगा। डेटाबेस चुराओ, सभी पासवर्ड मिले। ठीक है, आपके सिस्टम और आपकी कंपनी को इसके सभी परिणाम भुगतने होंगे। इसलिए, हम इस पासवर्ड को लीक होने से बचाने की कोशिश कर सकते हैं।
सूचना है कि हम इस बिंदु पर ऑनलाइन हमलों के बारे में चिंतित नहीं हैं। एक ऑनलाइन हमले के लिए, सबसे अच्छा समाधान खराब पासवर्ड के बाद धीमा करना है, कुछ प्रयासों आदि के बाद खाते को लॉक करना है और इसके लिए यह कोई फर्क नहीं पड़ता है कि आप अपना पासवर्ड एन्क्रिप्ट, हैश, स्टोर, आदि किस तरह से करते हैं। ऑनलाइन हमला पासवर्ड इनपुट को धीमा करने का मामला है ।
तो, don't let them take my plain passwords
समस्या पर वापस जाएँ । उत्तर सरल है: उन्हें सादे पाठ के रूप में संग्रहीत न करें। ठीक मिल गया।
उससे कैसे बचा जाए?
पासवर्ड (?) एन्क्रिप्ट करें। लेकिन, जैसा कि आप जानते हैं, यदि आप इसे एन्क्रिप्ट करते हैं, तो आप इसे वापस डिक्रिप्ट कर सकते हैं, यदि आपके पास उचित कुंजी है। और आप "जहां छुपाना" कुंजी की समस्या को समाप्त करेंगे। हाँ, अच्छा नहीं है, क्योंकि उन्हें आपका डेटाबेस मिल गया है, वे आपकी चाबी प्राप्त कर सकते हैं। ठीक है, चलो इसे इस्तेमाल नहीं करते हैं।
तो, एक और दृष्टिकोण: चलो पासवर्ड को कुछ और में बदल दें जिसे उलट नहीं किया जा सकता है और इसे संग्रहीत नहीं किया जा सकता है। और यह सत्यापित करने के लिए कि आपूर्ति किया गया पासवर्ड सही है या नहीं, हम फिर से वही प्रक्रिया करते हैं और जांचते हैं कि दो ट्रांसफ़ॉर्म किए गए मान मेल खाते हैं या नहीं। यदि वे मेल खाते हैं तो अच्छा पासवर्ड दिया गया था।
ठीक है, अब तक बहुत अच्छा। पासवर्ड में कुछ MD5 हैश का उपयोग करते हैं। लेकिन ... यदि किसी के पास पासवर्ड का संग्रहित हैशेड मूल्य है, तो उसके पास प्रत्येक संभावित पासवर्ड (brute force) के MD5 हैश की गणना करने के लिए कंप्यूटर की बहुत अधिक शक्ति हो सकती है, इसलिए वह मूल पासवर्ड पा सकता है। या, सबसे खराब, वह सभी वर्ण संयोजनों से सभी एमडी 5 को स्टोर कर सकता है, और आसानी से पासवर्ड ढूंढ सकता है। तो, बहुत सारे पुनरावृत्तियां, एचएएसएच (एचएएसएच (एचएएसएच ())) को कठिन बनाने के लिए, क्योंकि इसे और अधिक समय लगेगा।
लेकिन यहां तक कि इसे प्रसारित किया जा सकता है, इंद्रधनुष तालिका बिल्कुल इस तरह के संरक्षण के खिलाफ तेजी लाने के लिए बनाई गई थी।
तो, चलो इसके ऊपर कुछ नमक का उपयोग करें। इस तरह, प्रत्येक बातचीत में, नमक फिर से उपयोग किया जाता है। आपके पासवर्ड पर हमला करने की कोशिश करने वाले को यह विचार करते हुए इंद्रधनुष तालिका तैयार करनी होगी कि नमक हर बार जोड़ा जाता है। और जब वह उस इंद्रधनुष तालिका को उत्पन्न करता है, क्योंकि यह एक नमक के साथ उत्पन्न होता है, तो उसे दूसरे नमक के साथ फिर से गणना करनी होगी, इसलिए उसे प्रत्येक पासवर्ड (= प्रत्येक नमक) के लिए कुछ समय बिताना होगा। नमक पासवर्ड में "अधिक जटिलता" नहीं जोड़ेगा, यह सिर्फ हमलावर ढीले समय को इंद्रधनुष तालिका उत्पन्न करेगा, यदि आप प्रत्येक पासवर्ड के लिए एक नमक का उपयोग करते हैं, तो एक नमक से तालिका दूसरे पासवर्ड के लिए बेकार है।
और एक से अधिक हैश का उपयोग करने से यहाँ मदद मिली होगी? नहीं, एक विशिष्ट इंद्रधनुष हमला उत्पन्न करने वाला व्यक्ति, वैसे भी एक या अधिक हैश का उपयोग करके इसे उत्पन्न करने में सक्षम होगा।
और एक से अधिक हैश का उपयोग करने से आपको एक समस्या हो सकती है: यह आपके द्वारा उपयोग किए जाने वाले सबसे कमजोर हैश के रूप में सुरक्षित है। अगर किसी को एक हैश एल्गोरिथ्म में टकराव लगता है, तो यह हैश का उपयोग किया जाएगा, जो कि यात्रा प्रक्रिया के किसी भी बिंदु पर, पासवर्ड को तोड़ने के लिए किया जाएगा। तो, आप अधिक हैश एल्गोरिदम का उपयोग करके कुछ भी हासिल नहीं करते हैं, केवल एक अच्छा अहंकार चुनना बेहतर होता है। और इसका उपयोग करें। और अगर यूओ कभी सुनता है कि यह टूट गया है, तो सोचें कि आप इसे अपने आवेदन में कैसे बदलेंगे।
और क्यों bcrypt या ऐसा कुछ उपयोग करें (आप कहते हैं कि आप इसका उपयोग करते हैं): क्योंकि हमलावर को टेबल बनाने में अधिक समय देना होगा। यही कारण है कि MD5 + प्रतीक्षा (3 सेकंड) का उपयोग करने में मदद नहीं करता है: हमला ऑफ़लाइन होगा, वैसे भी, इसलिए हमलावर टेबल (3 सेकंड की देरी) के बिना उत्पन्न कर सकता है।