database - डेटाबेस में पासवर्ड स्टोर करने का सबसे अच्छा तरीका




security passwords (6)

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें प्रमाणीकरण होना चाहिए (उपयोगकर्ता नाम / पास)

यह एक डेटाबेस से भी जुड़ता है, इसलिए मुझे लगा कि मैं वहां उपयोगकर्ता नाम और पासवर्ड स्टोर करूंगा लेकिन ऐसा लगता है कि डीबी पर बैठे टेबल में केवल एक टेक्स्ट फ़ील्ड के रूप में पासवर्ड रखना अच्छा विचार नहीं है

मैं सी # का उपयोग कर रहा हूं और 2008 एक्सप्रेस सर्वर से कनेक्ट कर रहा हूं। क्या कोई सुझाव दे सकता है (जितना संभव हो उतने उदाहरणों के साथ) इस प्रकार के डेटा को स्टोर करने का सबसे अच्छा तरीका क्या है?

(मैं इस विचार के लिए खुला हूं कि अगर कोई अच्छा कारण प्रदान किया जा सकता है तो यह जानकारी डीबी में संग्रहीत नहीं की जाएगी)


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

इसलिए, यह एक अच्छी बात है, जबकि आप इसके बारे में सोच रहे हैं और यह एक अच्छा सवाल है, यह वास्तव में इन सवालों का एक डुप्लिकेट है (कम से कम):

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


मैं थोड़ा ऑफ-विषय हो सकता हूं क्योंकि आपने उपयोगकर्ता नाम और पासवर्ड की आवश्यकता का जिक्र किया है, और इस मुद्दे की मेरी समझ स्वीकार नहीं है, लेकिन ओपनआईडी कुछ विचार करने योग्य है?

यदि आप ओपनआईडी का उपयोग करते हैं तो आप किसी भी प्रमाण-पत्र को संग्रहीत नहीं करते हैं, अगर मैं तकनीक को सही ढंग से समझता हूं और उपयोगकर्ता आपके पास पहले से मौजूद प्रमाण-पत्रों का उपयोग कर सकते हैं, जो आपके आवेदन के लिए विशिष्ट नई पहचान बनाने की आवश्यकता से परहेज करते हैं।

यह उपयुक्त नहीं हो सकता है अगर प्रश्न में आवेदन पूरी तरह से आंतरिक उपयोग के लिए है

RPX एक आवेदन में ओपनआईडी समर्थन को एकीकृत करने का एक अच्छा आसान तरीका प्रदान करता है।


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


शा -512 जैसे सुरक्षित एल्गोरिदम का उपयोग करके, एक कठोर नमकीन नमक हैश के रूप में।


पृष्ठभूमि आप कभी नहीं ... वास्तव में ... उपयोगकर्ता के पासवर्ड को जानने की जरूरत है। आप बस एक आने वाले उपयोगकर्ता को सत्यापित करना चाहते हैं कि खाते के लिए पासवर्ड पता है।

हैश इट: एक मजबूत हैश फ़ंक्शन के माध्यम से उपयोगकर्ता पासवर्ड धोखा (एक तरफा एन्क्रिप्शन) स्टोर करें। "सी # एन्क्रिप्ट पासवर्ड" की खोज उदाहरणों का एक भार देती है।

एक हैश फ़ंक्शन उत्पन्न करने के विचार के लिए ऑनलाइन SHA1 हैश निर्माता देखें (लेकिन SHA1 को हैश फ़ंक्शन के रूप में उपयोग न करें, SHA256 जैसे कुछ मजबूत उपयोग करें)।

अब, एक हैश किए गए पासवर्ड का अर्थ है कि आप (और डेटाबेस चोर) उस हैश को मूल पासवर्ड में वापस करने में सक्षम नहीं होना चाहिए।

इसका उपयोग कैसे करें: लेकिन, आप कहते हैं, मैं डेटाबेस में संग्रहीत इस मैश किए हुए पासवर्ड का उपयोग कैसे करूं?

जब उपयोगकर्ता लॉग इन करता है, तो वे आपको उपयोगकर्ता नाम और पासवर्ड (इसके मूल पाठ में) सौंपेंगे, आप केवल उसी हैश कोड का उपयोग हैश को संग्रहीत संस्करण प्राप्त करने के लिए पासवर्ड में टाइप किया है।

तो, दो हैश किए गए पासवर्ड की तुलना करें (उपयोगकर्ता नाम के लिए डेटाबेस हैश और टाइप-इन और हैश पासवर्ड)। आप बता सकते हैं कि "क्या उन्होंने टाइप किया है" मिलान किया है "मूल उपयोगकर्ता ने अपने पासवर्ड के लिए क्या दर्ज किया है" अपने हैंश की तुलना करके।

अतिरिक्त श्रेय:

प्रश्न: यदि मेरे पास आपका डेटाबेस था, तो क्या मैं जॉन द रिपर की तरह एक क्रैकर नहीं ले सकता था और जब तक कि मैं आपके संग्रहीत, मैश किए गए पासवर्ड से मेल नहीं खाता, तब तक हैश बनाना शुरू कर सकता हूं? (चूंकि उपयोगकर्ता संक्षिप्त, शब्दकोष शब्द चुनते हैं ... यह आसान होना चाहिए)

उत्तर: हाँ ... हाँ वे कर सकते हैं।

तो, आपको अपने पासवर्ड 'नमक' करना चाहिए। salt देखें

सी # उदाहरण "नमक के साथ हैश डेटा कैसे देखें " देखें


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

इस उद्देश्य के लिए सबकुछ बनाया गया है, एएसपीनेट सदस्यता देखें





passwords