2011-11-14 15 views
5

करने के लिए उपयोगकर्ताओं में लॉग इन करने के लिए नमकीन मैं एक परियोजना और जाहिरा तौर पर सॉफ्टवेयर के डिजाइनरों को ध्यान में सुरक्षा डाल नहीं किया है।T-SQL एईएस एन्क्रिप्शन हैशिंग बनाम/वेबसाइट

पासवर्ड सादा पाठ में संग्रहीत और सादा पाठ के माध्यम से प्रेषित कर रहे हैं। इसलिए मुझे इसे ठीक करने के लिए कार्य के साथ छोड़ दिया गया है।

मैं सुरक्षा पर थोड़ा जंग लगी हूँ, तो मेरे सवाल यह है: ऑनलाइन उपयोगकर्ता पासवर्ड प्रमाणीकरण के लिए यह/हैशिंग उपयोग करने के लिए नमक मिलाना तकनीक बेहतर है या यह एईएस एन्क्रिप्शन का उपयोग करने के लिए बेहतर है? क्या मेरे पास पेशेवर और विपक्ष हो सकता है।

बेहतर होगा किसी भी तरह ASP.NET सदस्यता प्रदाता का उपयोग करने के लिए? क्या यह करना आसान होगा? मैंने पहले इसका उपयोग किया है, लेकिन सॉफ़्टवेयर इसकी अपनी टेबल पर कॉल करता है, इसलिए मुझे यकीन नहीं है कि यह और अधिक परेशानी है या नहीं।

यदि इसका उत्तर दिया गया है तो कोई मुझे वहां निर्देशित कर सकता है, क्योंकि मुझे तुलना नहीं मिली।

उत्तर

8

आपको सममित एन्क्रिप्शन का उपयोग करके कभी भी पासवर्ड स्टोर नहीं करना चाहिए।

प्रत्येक उपयोगकर्ता के लिए यादृच्छिक नमक, उनके पासवर्ड हैश, डेटाबेस में नमक और हैश दोनों को स्टोर करें। फिर लॉगिन अनुरोधों पर आप उपयोगकर्ता को ईमेल/उपयोगकर्ता नाम/आईडी आदि से प्राप्त करते हैं, फिर उस उपयोगकर्ता से बंधे नमक का उपयोग करें और हैश को उनके आपूर्ति किए गए पासवर्ड का उपयोग करें और फिर संग्रहीत हैश के खिलाफ इसका मिलान करें। यदि मैचों, लॉगिन, और बुरा पासवर्ड है।

यदि आप एएसपी.NET सदस्यता प्रदाता में निर्मित का उपयोग करते हैं तो इसे आपके लिए करना चाहिए।

+0

उत्तर मुझे धन्यवाद चाहिए। एएसपीनेट सदस्यता के नोट पर: सॉफ्टवेयर ने इसका उपयोग नहीं किया (जो सिरदर्द बताता है)। मैं सिर्फ टेबल की समीक्षा कर रहा था और मुझे लगता है कि सबसे अच्छा समाधान केवल एपमेम्बरशिप उपयोगकर्ता आईडी के लिए एक नया कॉलम जोड़ना होगा। – pqsk

+0

ध्यान दें कि aspmembership उपयोगकर्ता आईडी के लिए एक नया कॉलम जोड़ने से मैं [मेरे उत्तर] में उल्लेख की गई निंदा से बच नहीं पाता हूं (http://stackoverflow.com/questions/8123382/t-sql-aes-encryption-vs-hashing-salting-for -लॉगिंग-इन-यूजर्स-टू-वेबसाइट/8123808 # 8123808), हालांकि यह आपको इस बारे में विकल्प देता है कि उपयोगकर्ता नाम बदलने वाले किस प्रकार की कुरूपता लागू होगी। – Brian

1

मैं सुझाव है कि आप हैश एक नमकीन पासवर्ड multipe करने के लिए। 10 गुना से अधिक या कुछ। तो क्यों? क्योंकि आपके लिए नमकीन पासवर्ड हैशिंग करने के लिए पहचानने योग्य समय नहीं लगेगा। लेकिन एक दुष्ट व्यक्ति के लिए पासवर्ड को ब्रूटफोक्रे करने के लिए विभिन्न संयोजनों की कोशिश करने के लिए, प्रत्येक प्रयास में 10 गुना अधिक समय लगता है। और वह यह सुनिश्चित नहीं कर सकता कि आपने इसे 10 या 1000 बार किया है।

मैं इस व्यक्तिगत रूप से उपयोग करने के एक सस्ते सुरक्षा वृद्धि के रूप में।

यहाँ देखें: Stackoverflow Salting Your Password: Best Practices?

या वहाँ Secure hash and salt for PHP passwords

गुड लक :)

हैरी

-2

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

मैं उत्तर नहीं दे सकता है या नहीं, वहाँ सुरक्षा किसी भी तरह से वृद्धि हुई है। किसी से अधिक ज्ञान वाले किसी को मुझे जवाब देना होगा कि एक सममित एन्क्रिप्शन एल्गोरिदम के विपरीत हैशिंग/नमक एल्गोरिदम को क्रैक करने के लिए कम या ज्यादा संभव है या नहीं। सतह पर, हैशिंग/लवण अधिक सुरक्षित प्रतीत होता है क्योंकि हमलावर को पासवर्ड क्रैक करना शुरू करने से पहले एल्गोरिदम को समझना पड़ता है। लेकिन यह भी कहा जा सकता है कि क्या आपने एक अलग सममित एन्क्रिप्शन एल्गोरिदम का उपयोग करने का निर्णय लिया है। यदि आप सोचते हैं कि एईएस बस अपने आप पर्याप्त सुरक्षित नहीं है तो आप सममित कुंजी एल्गोरिदम भी जोड़ सकते हैं।

+1

हैशिंग/लवण अधिक सुरक्षित है क्योंकि आप पासवर्ड संग्रहित नहीं कर रहे हैं। कोई भी जो आपके सर्वर में हैक करता है, वह सभी उपयोगकर्ता पासवर्ड खींचने के लिए एक जादू फ़ंक्शन चलाने में सक्षम नहीं होगा (और फिर उन्हें अन्य सर्वरों पर उपयोग करें) ... हालांकि वे "सामान्य" पासवर्ड को क्रैक करने में सक्षम होंगे (निश्चित रूप से, वहां "पासवर्ड 1" के साथ हैश साझा करने वाले कई पासवर्ड हैं, लेकिन संभावना है कि उपयोगकर्ता "पासवर्ड 1" का उपयोग कर रहा है)। – Brian

+2

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

+0

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

1

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

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

+0

क्या आप सदस्यता प्रदाता के साथ सुरक्षा चिंताओं को विस्तृत कर सकते हैं यदि उपयोगकर्ता अपना उपयोगकर्ता नाम बदल सकते हैं? –

+0

@ChrisMarisic: सदस्यता प्रदाता उपयोगकर्ता नाम बदलने के लिए अंतर्निहित सुपरपोर्ट प्रदान नहीं करता है। कोई और जो किसी भी तरह से जानता है कि आप अपना उपयोगकर्ता नाम बदल रहे हैं, तो अपना उपयोगकर्ता नाम अपने पुराने उपयोगकर्ता नाम में बदल सकते हैं।फिर, जब वे जानकारी तक पहुंचने का प्रयास करते हैं, तो सिस्टम गलत तरीके से आपकी जानकारी वापस कर सकता है। असल में, एक बार जब आप एक साथ जानकारी की पहचान के दो टुकड़े बांधते हैं, तो आपको यह सुनिश्चित करना होगा कि वे न केवल डेटाबेस में बल्कि किसी भी कैश के भीतर सिंक में पूरी तरह से रहें (और संभवतः सत्र डेटा को रीसेट करना होगा)। AspNet यह आपके लिए नहीं करेगा। – Brian

+0

@ChrisMarisic: इसके अलावा, संभावित रूप से सिंक करने के लिए डेटा के 3 टुकड़े हैं, क्योंकि ओपी को या तो अपने लॉगिन नियंत्रण का उपयोग करना चाहिए या उपयोगकर्ताओं के उपयोगकर्ता नाम को उनके मौजूदा उपयोगकर्ता नाम में सदस्यता के भीतर समन्वयित करना होगा। – Brian

संबंधित मुद्दे