बहुत से लोग इंद्रधनुष तालिकाओं को रोकने के बिना "इंद्रधनुष तालिकाओं को रोकने के लिए" कह रहे हैं यह उन्हें रोकता है।
इंद्रधनुष सारणी बड़ी संख्या में हैश की प्रीकंप्यूटिंग करने का एक चालाक तरीका है और उन्हें कम स्मृति में कम से कम स्मृति में संग्रहीत करने की एक चालाक तरीका है, और आप उन्हें एक हैश को बहुत तेज़ करने के लिए उपयोग कर सकते हैं। hash = md5(password)
और hash = sha1(password)
जैसे नंगे कार्यों के लिए टेबल्स आम हैं।
हालांकि, उन्हें किसी भी हैश फ़ंक्शन के लिए जेनरेट किया जा सकता है जिसे output = f(input)
के रूप में वर्णित किया जा सकता है। यदि आप सभी उपयोगकर्ता पासवर्ड के लिए साइट-व्यापी नमक का उपयोग करते हैं, उदाहरण के लिए hash = md5(salt+password)
, तो आप एक फ़ंक्शन f
, f(password) = md5(salt+password)
बना सकते हैं। इसलिए आप इस फ़ंक्शन के लिए इंद्रधनुष सारणी उत्पन्न कर सकते हैं, जिसमें काफी समय लगेगा, लेकिन फिर आपको डेटाबेस में हर पासवर्ड को तेज़ी से क्रैक करने देगा।
यदि प्रत्येक पासवर्ड के लिए नमक अलग है, तो आप इंद्रधनुष तालिका उत्पन्न नहीं कर सकते हैं जो डेटाबेस में सभी पासवर्ड क्रैक करेगा। आप प्रत्येक उपयोगकर्ता के लिए एक नया उत्पन्न कर सकते हैं लेकिन यह व्यर्थ होगा - बेवकूफ ब्रूट-फोर्सिंग धीमा नहीं होगा। तो प्रत्येक उपयोगकर्ता के लिए एक अलग नमक होने से इंद्रधनुष टेबल हमले बंद हो जाता है।
इसे पूरा करने के कई तरीके हैं।लोकप्रिय तरीकों में शामिल हैं:
- प्रत्येक उपयोगकर्ता, डेटाबेस में उनके अन्य विवरण के साथ संग्रहीत के लिए एक अलग नमक:
hash = hashfunction(salt + password)
- एक वैश्विक नमक और प्रति उपयोगकर्ता कुछ अद्वितीय मूल्य: उदाहरण के लिए
hash = hashfunction(salt + password + user_id)
- एक वैश्विक नमक और प्रति-उपयोगकर्ता नमक:
hash = hashfunction(global_salt + user_salt + password)
, एक वैश्विक नमक होने पासवर्ड खुर के लिए कुछ अतिरिक्त जटिलता जोड़ सकता है के रूप में यह डेटाबेस के बाहर संग्रहीत किया जा सकता है (कोड में, उदाहरण के लिए), जो हमलावरों हासिल नहीं हो सकता है तक पहुंच डेटाबेस उल्लंघन की स्थिति में। क्रिप्टोग्राफिक रूप से मुझे नहीं लगता कि यह बहुत अधिक जोड़ता है, लेकिन व्यवहार में यह उन्हें धीमा कर सकता है।
अंत में, अपने वास्तविक सवाल का जवाब देने:
उपयोगकर्ता डेटा के बगल में नमक भंडारण हैश को कमजोर नहीं है। हैश फ़ंक्शन एक-तरफा हैं: पासवर्ड के हैश को देखते हुए, यहां तक कि एक अनसुलझा भी, पासवर्ड को ढूंढना बहुत मुश्किल है। सलाम के पीछे प्रेरणा एक व्यक्तिगत हैश को अधिक सुरक्षित नहीं बनाना है, बल्कि कई हैंश का संग्रह अधिक सुरक्षित बनाना है। वहाँ अनसाल्टेड हैश का एक संग्रह के लिए हमले के कई वैक्टर हैं:
- इंद्रधनुष तालिकाओं
- आम पासवर्ड (
123
, password
, god
) Hashing और देख अगर किसी भी डेटाबेस में मौजूद है, और फिर उन खातों से छेड़छाड़
- डेटाबेस में समान हैश की तलाश करें, जिसका अर्थ है समान पासवर्ड (संभवतः)
http://stackoverflow.com/questions/213380/the-necessity-of-hiding-the-salt-for-a-hash/215165#215165 – tanascius