एक हैश के लिए नमक को छिपाने की आवश्यकता


99

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

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

इसके बारे में सोचने के बाद, मुझे इस दृष्टिकोण से वास्तविक सुरक्षा लाभ नहीं दिखता है। खाते से खाते में नमक बदलना, फिर भी किसी के लिए हैशिंग एल्गोरिथ्म को बल देने का प्रयास करना बहुत मुश्किल होता है, भले ही हमलावर को यह पता चले कि प्रत्येक खाते के लिए यह कैसे निर्धारित किया जाए। यह इस धारणा पर चल रहा है कि पासवर्ड पर्याप्त रूप से मजबूत हैं। (स्पष्ट रूप से पासवर्ड के एक सेट के लिए सही हैश ढूंढना जहां वे सभी दो अंक हैं पासवर्ड के सही हैश को खोजने की तुलना में काफी आसान है जो 8 अंक हैं)। क्या मैं अपने तर्क में गलत हूं, या कुछ ऐसा है जो मुझे याद आ रहा है?

संपादित करें: ठीक है, इसलिए यहां मुझे लगता है कि नमक को एन्क्रिप्ट करने के लिए यह वास्तव में लूट का कारण है। (lemme पता है कि मैं सही रास्ते पर हूँ)।

निम्नलिखित स्पष्टीकरण के लिए, हम मानेंगे कि पासवर्ड हमेशा 8 वर्ण के होते हैं और नमक 5 होता है और सभी पासवर्ड लोअरकेस अक्षरों से युक्त होते हैं (यह सिर्फ गणित को आसान बनाता है)।

प्रत्येक प्रविष्टि के लिए एक अलग नमक होने का मतलब है कि मैं एक ही इंद्रधनुष तालिका का उपयोग नहीं कर सकता (वास्तव में तकनीकी रूप से मैं कर सकता था अगर मेरे पास पर्याप्त आकार में से एक था, लेकिन आइए इसे अनदेखा करें)। यह नमक की असली कुंजी है जो मुझे समझ में आता है, क्योंकि हर खाते को क्रैक करने के लिए मुझे पहिया को सुदृढ़ करना होगा ताकि प्रत्येक के लिए बोल सकें। अब अगर मुझे पता है कि हैश उत्पन्न करने के लिए पासवर्ड पर सही नमक कैसे लगाया जाता है, तो मैं ऐसा करूँगा क्योंकि एक नमक वास्तव में हैश वाक्यांश की लंबाई / जटिलता का विस्तार करता है। इसलिए मैं उन संभावित संयोजनों की संख्या में कटौती कर रहा हूं जिन्हें मुझे "पता" करने के लिए उत्पन्न करने की आवश्यकता होगी मेरे पास 13 ^ 26 से 8 ^ 26 तक पासवर्ड + नमक है क्योंकि मुझे पता है कि नमक क्या है। अब यह आसान है, लेकिन अभी भी वास्तव में कठिन है।

तो नमक को एन्क्रिप्ट करने पर। अगर मुझे पता है कि नमक एन्क्रिप्टेड है, तो मैं कोशिश नहीं करूंगा और डिक्रिप्ट (यह मानते हुए कि यह एन्क्रिप्शन का एक पर्याप्त स्तर है) इसे पहले। मैं इसे नजरअंदाज कर दूंगा। इसके बजाय यह समझने की कोशिश करें कि इसे कैसे डिक्रिप्ट किया जाए, पिछले उदाहरण पर वापस जाते हुए मैं सिर्फ 13 ^ 26 के लिए सभी कुंजियों वाली एक बड़ी इंद्रधनुष तालिका उत्पन्न करूंगा। नमक न जानने से मुझे निश्चित रूप से धीमा हो जाएगा, लेकिन मुझे नहीं लगता कि यह पहले नमक एन्क्रिप्शन को क्रैक करने के स्मारकीय कार्य को जोड़ देगा। इसलिए मुझे नहीं लगता कि यह इसके लायक है। विचार?

यहाँ एक लिंक बताया गया है कि ब्रूट फ़ोर्स अटैक के तहत कब तक पासवर्ड पकड़े रहेंगे: http://www.lockdown.co.uk/?pg=combi


अच्छा सवाल, केविन, बहुत समय पर। मैं सुरक्षा पर टिप्पणी नहीं कर सकता, लेकिन यह सुनिश्चित करने के लिए कि यह सभी एन्क्रिप्ट और डिक्रिप्टिंग के लिए एक प्रदर्शन हिट है।
DOK

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

जो चीज मुझे मिलती है, वह यह है कि मैं पूरी तरह से निश्चित नहीं हूं कि उस आकार का इंद्रधनुष तालिका बनाने में लंबा समय लगेगा। वह एक निराला विचार है, क्रैकेन की तरह एक वितरित कंप्यूटिंग प्लेटफ़ॉर्म ले (वास्तव में यह थोड़े है कि यह क्या है) इसे उत्पन्न करने के लिए। तब तक कितना समय लगेगा?
kemiller2002

3
@ केविन: SHA1 एक 40-वर्ण हेक्स स्ट्रिंग लौटाता है, इसलिए 40 ^ 16 संभावित रिटर्न मान हैं। एक एकल कंप्यूटर की मानें तो प्रत्येक सेकंड में 1000 हैश की गणना की जा सकती है। मैं गणना करता हूं कि 1 000 000 कंप्यूटर एक इंद्रधनुष तालिका उत्पन्न करने में लगभग 10 बिलियन वर्ष लगेंगे, जो एक स्ट्रिंग को निर्धारित करने में सक्षम है।
tloach

+1 अच्छा प्रश्न और आप अच्छी तरह से पढ़ रहे हैं। मुझे लगता है कि आपको इस प्रश्न का गलत उत्तर मिल गया है। हमेशा एक सीक्रेट होना चाहिए क्योंकि हैश को तब तक नहीं तोड़ा जा सकता जब तक इसे प्राप्त नहीं किया जाता है। आप के बारे में CWE-760 (पढ़ना चाहिए cwe.mitre.org/data/definitions/760.html )
किश्ती

जवाबों:


45

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


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

आमतौर पर इस्तेमाल किए जाने वाले पासवर्डों से रैंबो टेबल लगभग उसी गति से टूटेगी जैसे कि हैशिंग। यह काम करने का एकमात्र तरीका यह है कि यदि आप अपने पासवर्ड के वितरण को एक समान मानते हैं .. और हम जानते हैं कि वे नहीं हैं
DWNFoRCe

100

नमक छिपाना अनावश्यक है।

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

एक से मेरा पिछले जवाब :

नमक पूर्व-गणना शब्दकोश हमलों को विफल करने में मदद करता है।

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

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

तो, नमक को गुप्त रखना आवश्यक नहीं है। यह सुनिश्चित करना कि हमलावर के पास उस विशेष नमक के अनुरूप एक पूर्व-गणना शब्दकोश नहीं है।


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


हालांकि, NIST की हालिया सिफारिशें एक अतिरिक्त, गुप्त "नमक" के उपयोग को प्रोत्साहित करती हैं (मैंने दूसरों को इस अतिरिक्त गुप्त "काली मिर्च" को कॉल करते हुए देखा है)। नमक के रूप में इस रहस्य का उपयोग करके मुख्य व्युत्पत्ति का एक अतिरिक्त पुनरावृत्ति किया जा सकता है। एक पूर्व-गणना लुक अटैक के खिलाफ बढ़ती ताकत के बजाय, यह दौर पासवर्ड अनुमान लगाने से बचाता है, एक बड़ी कुंजी व्युत्पत्ति फ़ंक्शन में बड़ी संख्या में पुनरावृत्तियों की तरह। यदि कोई हैशेड पासवर्ड के साथ संग्रहीत है, तो यह रहस्य कोई उद्देश्य नहीं रखता है; इसे एक रहस्य के रूप में प्रबंधित किया जाना चाहिए, और यह एक बड़े उपयोगकर्ता डेटाबेस में मुश्किल हो सकता है।


1
नमक को छिपाना आवश्यक है क्योंकि प्राप्त होने तक हैश को तोड़ा नहीं जा सकता है। यह करने के लिए CWE-760 (संबंधित है cwe.mitre.org/data/definitions/760.html )
किश्ती

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

इन्हें भी देखें: stackoverflow.com/questions/1645161/…
जैको

1
@erickson, मुझे लगता है कि आप यहां शब्दावली का मिश्रण कर रहे हैं। साल्ट डिक्शनरी पर तब तक हमला नहीं करते जब तक कि वे छिपे न हों। लवण का एक बहुत खुले रूप से संग्रहित किया जाता है। और अगर आप नमक को जानते हैं, तो आप डिक्शनरी अटैक को केवल उस समय तक धीमा कर देते हैं, जब तक कि आपके डिक्शनरी में नमक को शामिल करने में समय लगता है :) साल्ट्स रेनबो टेबल लुक अप्स को रोकते हैं .... जो कि बहुत तेज़ होते हैं। यदि हमलावर आपके नमक को जानता है, तो आप एक शब्दकोश हमले से सुरक्षित नहीं हैं। यदि हमलावर आपके नमक को नहीं जानता है, तो आप एक शब्दकोश हमले से सुरक्षित हैं और उन्हें एक क्रूर बल हमले का उपयोग करना चाहिए।
११:३३

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

3

"नमक" की मेरी समझ यह है कि यह दरार को और अधिक कठिन बना देता है, लेकिन यह अतिरिक्त डेटा को छिपाने की कोशिश नहीं करता है। यदि आप नमक को "गुप्त" बनाकर अधिक सुरक्षा प्राप्त करने की कोशिश कर रहे हैं, तो आप वास्तव में अपने एन्क्रिप्शन कुंजी में अधिक बिट्स चाहते हैं।


3

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

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


वे शब्दकोश हमलों से कैसे बचाते हैं?
क्लोच

प्रत्येक पासवर्ड + नमक संयोजन के लिए हमलावर को एक नया शब्दकोश बनाने के लिए मजबूर करके। नमक के बिना, एक शब्दकोश का उपयोग आपकी संपूर्ण पासवर्ड तालिका के खिलाफ किया जा सकता है।
छिपकली का बिल

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

1
@ बिल: आपने सिर्फ एक इंद्रधनुष तालिका का वर्णन किया है। एक डिक्शनरी हमला वह है जहां मैं सामान्य शब्द लेता हूं और उनके साथ प्रमाणित करने का प्रयास करता हूं। यह बहुत कम उत्तर वाली जगह के साथ एक जानवर-बल है। कोई हैश जानवर बल के खिलाफ बचाव करता है।
tloach

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

3

... कुछ हैश नाम नमक करने के लिए एक उपयोगकर्ता नाम या फोन नंबर की तरह। ...

मेरा प्रश्न है कि क्या दूसरा दृष्टिकोण वास्तव में आवश्यक है? मैं विशुद्ध रूप से सैद्धांतिक दृष्टिकोण से समझ सकता हूं कि यह पहले दृष्टिकोण की तुलना में अधिक सुरक्षित है, लेकिन व्यावहारिकता के दृष्टिकोण से क्या?

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

क्या यह सुनिश्चित करना बंद कर दिया जाता है कि प्रत्येक खाते में एक फोन नंबर है, जिसमें यह सुनिश्चित करने के लिए कि आपने सुरक्षा खातों से उन खातों को नहीं खोला है, को पूर्ण सुरक्षा समीक्षा में शामिल करने की आवश्यकता है?


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

3

एक छिपा हुआ नमक अब नमक नहीं है। यह काली मिर्च है। इसका उपयोग है। यह नमक से अलग है।

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

काली मिर्च के बारे में अधिक जानकारी के लिए, यहाँ देखें

Hmac भी देखें ।


2

यहाँ एक सरल उदाहरण दिखाया गया है कि प्रत्येक हैश के लिए समान नमक क्यों बुरा है

निम्न तालिका पर विचार करें

UserId  UserName,   Password
     1  Fred       Hash1 =  Sha(Salt1+Password1)    
     2  Ted        Hash2 =  Sha(Salt2+Password2)    

केस 1 जब नमक 1 नमक 2 के समान है यदि Hash2 को Hash1 से बदल दिया जाए तो उपयोगकर्ता 2 उपयोगकर्ता 1 पासवर्ड के साथ लॉगऑन कर सकता है

केस 2 जब नमक 1 नहीं एक ही नमक 2 अगर Hash2 को Hash1 से बदल दिया जाए तो user2 उपयोगकर्ता 1 पासवर्ड के साथ लॉगऑन नहीं कर सकता है।


हम प्रत्येक खाते के लिए एक ही हैश का उपयोग नहीं कर रहे हैं, हम प्रत्येक हैश के लिए एक ही प्रकार की जानकारी का उपयोग कर रहे हैं। उदाहरण के लिए, एक खाते के लिए नमक खाते का
फोननंबर

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

1

विभिन्न लक्ष्यों के साथ दो तकनीकें हैं:

  • "नमक" का उपयोग दो अन्यथा समान पासवर्ड अलग-अलग एन्क्रिप्ट करने के लिए किया जाता है। इस तरह, एक घुसपैठिया एन्क्रिप्टेड पासवर्ड की पूरी सूची के खिलाफ एक शब्दकोश हमले का कुशलता से उपयोग नहीं कर सकता है।

  • संदेश साझा करने से पहले "गुप्त" "गुप्त" जोड़ा जाता है, ताकि एक घुसपैठिया अपने संदेश न बना सके और उन्हें स्वीकार कर लिया हो।


0

मैं नमक छिपाने के लिए जाता हूं। मैं हैशिंग से पहले पासवर्ड की शुरुआत में 1 से 1024 तक एक यादृच्छिक संख्या का उपयोग करके 10 बिट नमक का उपयोग करता हूं। उपयोगकर्ता द्वारा हैश के साथ दर्ज किए गए पासवर्ड की तुलना करते समय, मैं 1 से 1024 तक लूप करता हूं और जब तक मुझे मैच नहीं मिलता तब तक नमक के हर संभव मूल्य का प्रयास करें। इसमें सेकंड का 1/10 से कम समय लगता है। मैं विचार यह PHP से इस तरह से करना होगा password_hash और password_verify । मेरे उदाहरण में, नमक के 10 बिट्स के लिए "लागत" 10 है। या किसी अन्य उपयोगकर्ता ने जो कहा, उससे छिपे "नमक" को "काली मिर्च" कहा जाता है। डेटाबेस में नमक को एन्क्रिप्ट नहीं किया गया है। यह पाशविक है। यह इंद्रधनुष तालिका को हैश को 1000 गुना बड़ा करने के लिए आवश्यक बनाता है। मैं sha256 का उपयोग करता हूं क्योंकि यह तेज है, लेकिन फिर भी सुरक्षित माना जाता है।


इसलिए यदि मेरा पासवर्ड "345678" है और आपके द्वारा प्रस्तुत किया जाने वाला बेतरतीब नमक है, तो कहें, "12"। अगर कोई मेरे पासवर्ड के रूप में "45678" दर्ज करता है। यह कई मायनों में गलत लगता है।
युरिपिपेनेट

-1

वास्तव में, यह इस बात पर निर्भर करता है कि आप अपने डेटा की सुरक्षा के लिए किस प्रकार के हमले कर रहे हैं।

प्रत्येक पासवर्ड के लिए एक अद्वितीय नमक का उद्देश्य पूरे पासवर्ड डेटाबेस के खिलाफ एक शब्दकोश हमले को रोकना है।

प्रत्येक पासवर्ड के लिए अद्वितीय नमक को एन्क्रिप्ट करने से एक व्यक्तिगत पासवर्ड को क्रैक करना अधिक कठिन होगा, हाँ, लेकिन आपको यह तौलना चाहिए कि क्या वास्तव में बहुत अधिक लाभ है। यदि हमलावर, क्रूर बल द्वारा, यह स्ट्रिंग पाता है:

Marianne2ae85fb5d

DB में संग्रहीत हैश में हैश, क्या वास्तव में यह पता लगाना मुश्किल है कि कौन सा हिस्सा पास है और कौन सा हिस्सा नमक है?


2
यदि कोई व्यक्ति पासवर्ड का अनुमान लगाने के लिए इस तरह के असंभव को मजबूर करता है, तो मैं कहूंगा कि आप वैसे भी hosed हैं, क्योंकि जाहिर तौर पर उनके पास तकनीक है जो किसी ने अभी तक सोचा भी नहीं है।
इंस्टा हंटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.