hash एक नमकीन SHA-512 हैश बल को बलपूर्वक कब तक लाना है?(नमक प्रदान किया गया)




cryptography salt (3)

जावा में एक एल्गोरिदम है:

public String getHash(String password, String salt) throws Exception {
    String input = password + salt;
    MessageDigest md = MessageDigest.getInstance(SHA-512);
    byte[] out = md.digest(input.getBytes());
    return HexEncoder.toHex(out);
}

मान लें कि नमक ज्ञात है। जब मैं एक शब्दकोष शब्द होता हूं और जब यह शब्दकोष शब्द नहीं होता है, तो मैं बलपूर्वक बल के लिए समय जानना चाहता हूं।


जब मैं एक शब्दकोष शब्द होता हूं और जब यह शब्दकोष शब्द नहीं होता है, तो मैं बलपूर्वक बल के लिए समय जानना चाहता हूं।

शब्दकोश पासवर्ड

Ballpark आंकड़ा : लगभग 1,000,000 अंग्रेजी शब्द हैं, और यदि एक हैकर लगभग 10,000 SHA-512 हैश की गणना कर सकता है ( अपडेट: कोड्सइनकोस द्वारा टिप्पणी देखें, यह अनुमान बहुत कम है), 1,000,000 / 10,000 = 100 सेकंड । तो एक उपयोगकर्ता के लिए एकल शब्दकोष शब्दकोष को तोड़ने में बस एक मिनट लग जाएगा। यदि उपयोगकर्ता दो शब्दकोष शब्दों को जोड़ता है, तो आप कुछ दिनों के क्षेत्र में हैं, लेकिन अभी भी बहुत संभव है यदि हमलावर पर्याप्त परवाह करता है। उससे अधिक और यह कठिन हो रहा है।

यादृच्छिक पासवर्ड

यदि पासवर्ड अल्फा-न्यूमेरिक वर्णों, ऊपरी और निचले मामले का वास्तव में यादृच्छिक अनुक्रम है, तो लंबाई एन के संभावित पासवर्ड की संख्या 60 ^ एन है (60 संभावित वर्ण हैं)। हम इस बार दूसरी दिशा की गणना करेंगे; हम पूछेंगे: एक निश्चित अवधि के दौरान हम कितने पासवर्ड को क्रैक कर सकते हैं? बस इस सूत्र का उपयोग करें:

N = Log60(t * 10,000) जहां टी सेकेंड में हैश की गणना करने में समय बिताया जाता है (फिर से 10,000 हश एक सेकेंड मानते हैं)।

1 minute:    3.2
5 minute:    3.6
30 minutes:  4.1
2 hours:     4.4
3 days:      5.2

तो 3 दिनों के बाद हम पासवर्ड को क्रैक करने में सक्षम होंगे अगर यह 5 वर्ण लंबा है।

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

यहाँ क्या चल रहा है?

आइए कुछ गलत धारणाएं साफ़ करें:

  • नमक इसे हैश की गणना करने के लिए धीमा नहीं बनाता है , इसका मतलब है कि उन्हें प्रत्येक उपयोगकर्ता के पासवर्ड को व्यक्तिगत रूप से क्रैक करना होगा, और पूर्व-गणना वाले हैश टेबल (buzz-word: इंद्रधनुष सारणी ) पूरी तरह बेकार हो जाते हैं। यदि आपके पास प्रीकंपुटेड हैश-टेबल नहीं है, और आप केवल एक पासवर्ड हैश क्रैक कर रहे हैं, तो नमकीन कोई फर्क नहीं पड़ता है।

  • SHA-512 को क्रूर बल के लिए कठिन नहीं बनाया गया हैबीसीरीप्ट, पीबीकेडीएफ 2 या स्क्रिप जैसे बेहतर हैशिंग एल्गोरिदम को गणना करने में अधिक समय लगने के लिए कॉन्फ़िगर किया जा सकता है, और एक औसत कंप्यूटर केवल 10-20 हैश की गणना करने में सक्षम हो सकता है। यदि आपने पहले से नहीं किया है तो पासवर्ड हैशिंग के बारे में यह उत्कृष्ट उत्तर पढ़ें।

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

स्वीकृत उत्तर पर नोट्स:

सितंबर 2014 के रूप में स्वीकृत उत्तर गलत और खतरनाक रूप से गलत है:

आपके मामले में, हैश एल्गोरिदम तोड़ना हैश एल्गोरिदम में टकराव ढूंढने के बराबर है। इसका मतलब है कि आपको पासवर्ड खुद को खोजने की आवश्यकता नहीं है (जो एक शिकार हमला होगा) ... जन्मदिन के हमले का उपयोग करके टकराव ढूंढना ओ (2 ^ एन / 2) समय लेता है, जहां एन हैश की आउटपुट लंबाई है बिट्स में समारोह।

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

सामान्य पासवर्ड की निम्न एन्ट्रॉपी यह संभव बनाता है कि आपके उपयोगकर्ताओं में से एक के सामान्य पासवर्ड के अपेक्षाकृत छोटे डेटाबेस से पासवर्ड का उपयोग करने का अपेक्षाकृत अधिक अवसर हो ...

यही कारण है कि आम तौर पर अकेले हैशिंग और नमकीन पर्याप्त नहीं है, आपको अन्य सुरक्षा तंत्र भी स्थापित करने की आवश्यकता है। आपको पीकेसीएस # 5 में वर्णित पीबीकेडीएफ 2 जैसे कृत्रिम रूप से धीमी गति से एंट्रॉपी-समापन विधि का उपयोग करना चाहिए ...

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


आपके मामले में, हैश एल्गोरिदम तोड़ना हैश एल्गोरिदम में टकराव ढूंढने के बराबर है। इसका मतलब है कि आपको पासवर्ड खुद को खोजने की आवश्यकता नहीं है (जो एक प्रीमीज अटैक होगा ), आपको केवल हैश फ़ंक्शन का आउटपुट ढूंढना होगा जो मान्य पासवर्ड के हैश के बराबर है (इस प्रकार "टकराव")। जन्मदिन के हमले का उपयोग करके टकराव ढूंढना ओ (2 ^ (एन / 2)) समय लेता है, जहां बिट बिट्स में हैश फ़ंक्शन की आउटपुट लंबाई है।

एसएचए -2 में आउटपुट आकार 512 बिट्स है, इसलिए टकराव ढूंढने से ओ (2 ^ 256) समय लगेगा। यह देखते हुए कि एल्गोरिदम पर कोई चालाक हमला नहीं है (वर्तमान में कोई भी SHA-2 हैश परिवार के लिए जाना जाता है) यह एल्गोरिदम को तोड़ने के लिए होता है।

वास्तव में 2 ^ 256 के लिए एक भावना प्राप्त करने के लिए: वर्तमान में यह माना जाता है कि (पूरे !!!) ब्रह्मांड में परमाणुओं की संख्या लगभग 10 ^ 80 है जो मोटे तौर पर 2 ^ 266 है। 32 बाइट इनपुट मानना ​​(जो आपके मामले के लिए उचित है - 20 बाइट नमक + 12 बाइट्स पासवर्ड) मेरी मशीन 65536 (= 2 ^ 16) गणना के लिए ~ 0,22s (~ 2 ^ -2s) लेती है। तो 2 ^ 256 गणना 2 ^ 240 * 2 ^ 16 गणनाओं में की जाएगी जो ले जाएगा

2^240 * 2^-2 = 2^238 ~ 10^72s ~ 3,17 * 10^64 years

यहां तक ​​कि इस लाखों वर्षों को बुलावा हास्यास्पद है। और यह ग्रह पर सबसे तेज़ हार्डवेयर के साथ समानांतर में हजारों हैश की गणना करने से बेहतर नहीं होता है। कोई भी मानव तकनीक इस संख्या को कुछ स्वीकार्य रूप से कम करने में सक्षम नहीं होगी।

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

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

सामान्य पासवर्ड की निम्न एन्ट्रॉपी यह संभव बनाता है कि आपके उपयोगकर्ताओं में से एक के सामान्य पासवर्ड के अपेक्षाकृत छोटे डेटाबेस से पासवर्ड का उपयोग करने का अपेक्षाकृत अधिक अवसर हो। यदि आप उनके लिए Google हैं, तो आप गीगाबाइट आकार श्रेणी में अक्सर ऐसे पासवर्ड डेटाबेस के लिए धार लिंक ढूंढेंगे। ऐसे उपकरण के साथ सफल होने पर आम तौर पर हमलावर किसी भी तरह से प्रतिबंधित नहीं होने पर मिनटों की सीमा में होता है।

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


इस सवाल का कोई जवाब नहीं है क्योंकि बहुत सारे चर हैं, लेकिन SHA2 अभी तक वास्तव में क्रैक नहीं हुआ है (देखें: valerieaurora.org/hash.html ) इसलिए यह अभी भी पासवर्ड स्टोर करने के लिए उपयोग करने के लिए एक अच्छा एल्गोरिदम है। नमक अच्छा है क्योंकि यह हमले या इंद्रधनुष तालिकाओं से हमले को रोकता है। नमक का महत्व यह है कि यह प्रत्येक पासवर्ड के लिए अद्वितीय होना चाहिए। हैश किए गए पासवर्ड संग्रहीत करते समय आप [128-बिट नमक] [512-बिट पासवर्ड हैश] जैसे प्रारूप का उपयोग कर सकते हैं।

हमला करने का एकमात्र व्यवहार्य तरीका वास्तव में पासवर्ड की विभिन्न संभावनाओं के लिए हैश की गणना करना है और अंततः हैश से मिलान करके सही एक को ढूंढना है।

एक सेकंड में कितने हैंश किए जा सकते हैं, इस बारे में एक विचार देने के लिए, मुझे लगता है कि बिटकोइन एक सभ्य उदाहरण है। Bitcoin SHA256 का उपयोग करता है और इसे कम करने के लिए, जितना अधिक हैश उत्पन्न करता है, आपको जितना अधिक Bitcoin मिलते हैं (जिसे आप वास्तविक पैसे के लिए व्यापार कर सकते हैं) और ऐसे लोगों को इस उद्देश्य के लिए जीपीयू का उपयोग करने के लिए प्रेरित किया जाता है। आप हार्डवेयर अवलोकन में देख सकते हैं कि औसत ग्राफिक कार्ड जो केवल $ 150 खर्च करता है, 200 मिलियन से अधिक हैश / एस की गणना कर सकता है। आपका पासवर्ड जितना लंबा और जटिल होगा, उतना लंबा समय लगेगा। एक 8 वर्ण अल्फानंबरिक (पूंजी, निचले, संख्याओं) के लिए सभी संभावनाओं को आजमाने के लिए 200 एम / एस की गणना करने में लगभग 300 घंटे लगेंगे। पासवर्ड कुछ योग्य या सामान्य अंग्रेजी शब्द होने पर वास्तविक समय सबसे कम होगा।

किसी भी सुरक्षा के साथ आपको संदर्भ में देखने की आवश्यकता है। हमलावर की प्रेरणा क्या है? आवेदन किस तरह का है? प्रत्येक के लिए यादृच्छिक नमक के साथ हैश होने से मामलों के खिलाफ बहुत अच्छी सुरक्षा मिलती है जहां हजारों पासवर्ड की तरह कुछ समझौता किया जाता है।

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







sha