/ / पासवर्ड सुरक्षा - सुरक्षा, पासवर्ड, शा

पासवर्ड सुरक्षा - सुरक्षा, पासवर्ड, शा

वर्तमान में मैं पासवर्ड हासिल करने के लिए एक विशेष योजना का उपयोग कर रहा हूं, और मुझे लगता है कि मेरे पास सुधार के लिए कुछ बिंदु हैं। कार्यान्वयन जावा में है, इसलिए मैं एन्क्रिप्शन रूप में SHA-2 512 का उपयोग करना पसंद करता हूं।

वर्तमान में मेरे पास क्लाइंट-सर्वर मॉडल है, इसलिए ये चीजें हो सकती हैं:

  • क्लाइंट लॉगिन करना चाहता है, वह नेटवर्क पर एक बार सामान्य SHA-2 512 एन्क्रिप्शन के साथ अपना पासवर्ड भेजता है।
  • सर्वर में संग्रहीत पासवर्ड हैंउदाहरण के लिए डेटाबेस SHA-2_512 (SHA-2_512 (पासवर्ड) + नमक), आंतरिक SHA-2_512 (पासवर्ड) के साथ "एन्क्रिप्टेड" पासवर्ड होने के साथ यह नेटवर्क पर प्राप्त होता है।
  • पासवर्ड की जाँच सर्वर की ओर से की जाती है और सर्वर से कुछ भी लीक होने का कोई रास्ता नहीं है, केवल संभावित भेद्यता होगी यदि कोई व्यक्ति मेरे विचार से रैम पढ़ सकता है।

मेरे पास ये प्रश्न हैं:

  • एक हमलावर आमतौर पर टकराव के हमले बनाता हैजब एक पासवर्ड हैक करना चाहते हैं। हालांकि टकराव कैसे पर्याप्त हैं? यदि पासवर्ड का उपयोग अन्य अनुप्रयोगों जैसे कि Outlook.com, Facebook या जो भी (जो संभवतः किसी अन्य नमक का उपयोग करते हैं, क्योंकि मेरे अनुप्रयोगों से उनका कोई लेना-देना नहीं है) के लिए उपयोग किए जाने की आवश्यकता है, तो फिर टकराव कैसे पर्याप्त है? क्या आपको असली पासवर्ड की आवश्यकता नहीं है?

  • क्या SHA-2 512 पहले से ही पुनरावृत्ति का उपयोग करता है? और अगर ऐसा है भी, तो क्या मुझे कई तरीकों का स्वतः उपयोग करने के लिए अपने एन्क्रिप्शन तरीकों को बदलना चाहिए और कितने पुनरावृत्तियों को प्राथमिकता दी जानी चाहिए? मैंने एक यादृच्छिक संख्या के पुनरावृत्तियों (एक श्रेणी में) का उपयोग करने के बारे में भी पढ़ा है, मैं यादृच्छिक कारक को निर्धारक रूप से कैसे संग्रहीत करूं?

  • क्या मुझे सर्वर कोड में हर पुनरावृत्ति के लिए सिस्टम सीक्रेट्स स्टोर करना चाहिए? देख http://blog.mozilla.org/webappsec/2011/05/10/sha-512-w-per-user-salts-is-not-enough/ । मैं एक एरे को स्टोर कर सकता था, जो कि होल्ड करेगाप्रत्येक पुनरावृत्ति के लिए स्थैतिक रहस्य, nth रहस्य nth पुनरावृत्ति के लिए होने के साथ। रहस्यों को कोई नहीं जान सकता, वे एक बार गणना करते हैं (मुझे लगता है कि कुछ यादृच्छिक स्ट्रिंग को एन्क्रिप्ट करने के रूप में), और फिर मूल रूप से सर्वर के रैम में संग्रहीत किया जाता है।

  • वर्तमान में मैं से टाइप किया गया पासवर्ड भेजता हूंक्लाइंट को केवल SHA-2_512 (पासवर्ड) के रूप में क्लाइंट, क्या इस प्रक्रिया में सुधार किया जाना चाहिए, और यदि हां, तो कैसे? मैं नमक का उपयोग नहीं कर सकता, क्योंकि ग्राहक के पास नमक उपलब्ध नहीं है।

सादर।

उत्तर:

जवाब के लिए 5 № 1

TLDR: आपको एक एन्क्रिप्टेड चैनल, जैसे TLS का उपयोग करके पासवर्ड भेजने की आवश्यकता है। का उपयोग करने पर विचार करें bcrypt पासवर्ड हैशिंग के लिए।

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

ciphertext = E(key, plaintext);
plaintext = D(key, ciphertext);

मैसेज डाइजेस्ट प्लेनटेक्स्ट का एक टुकड़ा लेता है औरसंदेश पचाता है। संदेश को पचा लेने और मूल संदेश को पुनः प्राप्त करने के लिए कोई भी उल्टा तंत्र नहीं है। कोई गुप्त कुंजी भी नहीं है।

digest = hash(plaintext);

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

digest1 = hash(guess1);
digest2 = hash(guess2);    //repeat with lots of guesses

सबसे पहले, एक नेटवर्क पर हैश भेजना है नहीं सुरक्षित। इसे एसएसएल जैसे कुछ सुरक्षित संचार तंत्र के माध्यम से भेजा जाना चाहिए। यदि कोई हमलावर संचार पर हैश को इंटरसेप्ट कर सकता है तो वे ओरिजिनल पासवर्ड को काम करने में सक्षम हो सकते हैं।

हैश टक्कर पासवर्ड मजबूर करने के लिए जानवर के समान नहीं है। दो होने पर एक हैश टकराव होता है विभिन्न संदेश उसी संदेश को पचाते हैं।

digest1 = hash(plaintext1);
digest2 = hash(plaintext2);
if ( ( plaintext1 != plaintext2 ) && ( digest1 == digest2 ) )
// hash collision

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

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

सादे में SHA-2 512 भेजना सुरक्षित नहीं है। आपको इसे एक एन्क्रिप्टेड चैनल जैसे कि एसएसएल में भेजना चाहिए।

यह सब कहने के बाद, SHA-2 को डिज़ाइन नहीं किया गया हैएक पासवर्ड हैशिंग एल्गोरिथ्म। यह संदेश सत्यापन के लिए डिज़ाइन किया गया है और कुशल होना चाहिए। एक उद्देश्य से निर्मित पासवर्ड हैशिंग एल्गोरिथ्म का उपयोग करने पर विचार करें। एक उदाहरण है bcrypt। यह कम्प्यूटेशनल रूप से कठिन होने के लिए डिज़ाइन किया गया है और इसमें निर्मित नमक और पुनरावृत्तियां हैं।