आर्गन 2 ने 2015 पासवर्ड हैशिंग प्रतियोगिता जीती। Scrypt , bcrypt और PBKDF2 पुराने एल्गोरिदम हैं जिन्हें अब कम पसंद किया जाता है, लेकिन फिर भी मौलिक रूप से ध्वनि दी जाती है, इसलिए यदि आपका प्लेटफ़ॉर्म अभी तक Argon2 का समर्थन नहीं करता है, तो अभी के लिए किसी अन्य एल्गोरिदम का उपयोग करना ठीक है।
पासवर्ड को कभी भी डेटाबेस में स्टोर न करें। इसे एन्क्रिप्ट न करें, या तो: अन्यथा, यदि आपकी साइट भंग हो जाती है, तो हमलावर को डिक्रिप्शन कुंजी मिलती है और इसलिए सभी पासवर्ड प्राप्त कर सकते हैं। पासवर्डों किया जाना चाहिए टुकड़ों में बांटा ।
एक पासवर्ड हैश एक हैश तालिका हैश या एक क्रिप्टोग्राफिक हैश से अलग गुण है। पासवर्ड पर कभी भी एक साधारण क्रिप्टोग्राफिक हैश का उपयोग न करें जैसे कि MD5, SHA-256 या SHA-512। एक पासवर्ड हैशिंग एल्गोरिथ्म एक नमक का उपयोग करता है , जो अद्वितीय है (किसी अन्य उपयोगकर्ता या किसी और के डेटाबेस के लिए उपयोग नहीं किया जाता है)। नमक आवश्यक है ताकि हमलावर सामान्य पासवर्ड के हैश की पूर्व-गणना न कर सकें: एक नमक के साथ, उन्हें हर खाते के लिए गणना को पुनरारंभ करना होगा। एक पासवर्ड हैशिंग एल्गोरिथ्म आंतरिक रूप से धीमा है - जितना धीमा आप खर्च कर सकते हैं। धीमेपन से हमलावर को आप से बहुत अधिक चोट पहुँचती है क्योंकि हमलावर को कई अलग-अलग पासवर्ड आज़माने होते हैं। अधिक जानकारी के लिए, सुरक्षित रूप से हैश पासवर्ड कैसे देखें ।
एक पासवर्ड हैश सूचना के चार टुकड़े करता है:
- एक संकेतक जिसका एल्गोरिथ्म उपयोग किया जाता है। चपलता के लिए यह आवश्यक है : समय के साथ क्रिप्टोग्राफिक सिफारिशें बदल जाती हैं। आपको एक नए एल्गोरिथ्म में संक्रमण करने में सक्षम होने की आवश्यकता है।
- एक कठिनाई या कठोरता सूचक। यह मान जितना अधिक होता है, हैश की गणना करने के लिए उतनी ही अधिक गणना की आवश्यकता होती है। पासवर्ड परिवर्तन फ़ंक्शन में यह एक स्थिर या वैश्विक कॉन्फ़िगरेशन मान होना चाहिए, लेकिन यह समय के साथ बढ़ जाना चाहिए क्योंकि कंप्यूटर तेज़ हो जाते हैं, इसलिए आपको प्रत्येक खाते के लिए मूल्य याद रखना होगा। कुछ एल्गोरिदम का एक संख्यात्मक मान है, अन्य में अधिक पैरामीटर हैं (उदाहरण के लिए सीपीयू उपयोग और रैम उपयोग अलग-अलग ट्यून करने के लिए)।
- नमक। चूंकि नमक विश्व स्तर पर अद्वितीय होना चाहिए, इसलिए इसे प्रत्येक खाते के लिए संग्रहीत किया जाना चाहिए। प्रत्येक पासवर्ड परिवर्तन पर बेतरतीब ढंग से नमक उत्पन्न किया जाना चाहिए।
- हैश उचित, हैशिंग एल्गोरिथ्म में गणितीय गणना का उत्पादन।
कई पुस्तकालयों में एक जोड़ी फ़ंक्शन शामिल है जो आसानी से इस जानकारी को एक स्ट्रिंग के रूप में पैकेज करता है: एक जो एल्गोरिथ्म संकेतक, कठोरता संकेतक और पासवर्ड लेता है, एक यादृच्छिक नमक उत्पन्न करता है और पूर्ण हैश स्ट्रिंग लौटाता है; और वह जो एक पासवर्ड लेता है और इनपुट के रूप में पूरा हैश स्ट्रिंग और एक बूलियन देता है जो दर्शाता है कि पासवर्ड सही था या नहीं। कोई सार्वभौमिक मानक नहीं है, लेकिन एक सामान्य एन्कोडिंग है
$ एल्गोरिदम $ पैरामीटर $ नमक $ आउटपुट
जहां algorithm
एक नंबर या एक छोटी अल्फ़ान्यूमेरिक स्ट्रिंग एल्गोरिथ्म के चुनाव एन्कोडिंग, है parameters
एक मुद्रण योग्य स्ट्रिंग है, और salt
और output
समाप्त बिना Base64 में इनकोड =
।
नमक और आउटपुट के लिए 16 बाइट्स पर्याप्त हैं। ( Argon2 के लिए उदाहरण के लिए सिफारिशें देखें ।) Base64 में एन्कोडेड, यह प्रत्येक 21 वर्ण है। अन्य दो भाग एल्गोरिथ्म और मापदंडों पर निर्भर करते हैं, लेकिन 20–40 वर्ण विशिष्ट होते हैं। यह कुल C२ ASCII अक्षर है ( CHAR(82)
और यूनिकोड की कोई आवश्यकता नहीं है), जिसके लिए आपको एक सुरक्षा मार्जिन जोड़ना चाहिए अगर आपको लगता है कि बाद में क्षेत्र को बड़ा करना मुश्किल हो रहा है।
यदि आप हैश को एक द्विआधारी प्रारूप में कूटबद्ध करते हैं, तो आप इसे एल्गोरिथ्म के लिए 1 बाइट तक, कठोरता के लिए 1-4 बाइट्स (यदि आप कुछ मापदंडों को हार्ड-कोड करते हैं), और नमक और आउटपुट के लिए 16 बाइट्स प्राप्त कर सकते हैं। , कुल 37 बाइट्स के लिए। 40 बाइट्स ( BINARY(40)
) को कहें कि कम से कम कुछ अतिरिक्त बाइट्स हों। ध्यान दें कि ये 8-बिट बाइट्स हैं, न कि मुद्रण योग्य वर्ण, विशेष रूप से फ़ील्ड में शून्य बाइट्स शामिल हो सकते हैं।
ध्यान दें कि हैश की लंबाई पूरी तरह से पासवर्ड की लंबाई से असंबंधित है।