2009-06-01 14 views
5

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

Digest::SHA1.hexdigest(salt_plus_plainpassword) 

एक बार है कि स्ट्रिंग डेटाबेस में संग्रहीत किया जाता है, एक है कि यह कैसे प्राप्त करता है: मेरी समझ है कि प्लेन पासवर्ड एक यादृच्छिक "नमक" के साथ जोड़ दिया जाना चाहिए और है कि पूरे वाक्यांश जैसे कुछ हैशिंग एल्गोरिथ्म द्वारा टुकड़ों में बांटा जाना चाहिए यह सत्यापित करने के लिए कि उपयोगकर्ता ने जो दर्ज किया है, वह सही है अगर अब इसमें अज्ञात यादृच्छिक नमक लगाया गया है?

उत्तर

6

यह करने के लिए सबसे अच्छा तरीका है स्टोर करने के लिए नमक प्रत्येक उपयोगकर्ता के लिए एक है और इसके बिंदु वे यह किया पर समय के आधार पर उत्पन्न किया जाता है।

यह है कि वे उपयोगकर्ताओं के लिए नमक देख सकते हैं एक बार एक व्यक्ति अपने डेटाबेस तक पहुँच गया है सच है, लेकिन अगर ऐसा हुआ है तो आप बड़ी चीजों के बारे में चिंता करने की ज़रूरत।

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

+0

अच्छी तरह से कहा। –

+2

उस पर विस्तृत करने के लिए: नमक भंडारण एक समस्या नहीं है क्योंकि इसका एकमात्र उद्देश्य आपको हमलों से इंद्रधनुष-टेबल तक सहेजना है। चूंकि हैशिंग अपरिवर्तनीय है लेकिन अनुमानित है, हमलावर सामान्य पासवर्ड के पूर्व-गणना वाले हैंश को देखकर अनसाल्टेड हैश से पासवर्ड ढूंढ सकते हैं। इसे फिर से भरने के लिए: sha1 ("हैलो") [1] के परिणाम का अनुमान लगाने और सूचीबद्ध करना आसान है, अनुमान है कि sha1 ("हैलो" + नमक()) का परिणाम वास्तव में कठिन है। [1] यह है: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d, इसलिए जब भी मुझे अनसाल्टेड डेटाबेस में लगता है, तो मुझे पासवर्ड पता है। – Skade

1

सैद्धांतिक रूप से नमक दो मुख्य उद्देश्यों को पूरा करता है। पहला डेटाबेस पर उसी हैश मान के साथ डुप्लिकेट पासवर्ड को समाप्त करने के लिए है। दूसरा पासवर्ड की लंबाई बढ़ाने के लिए है, इस प्रकार एक हमलावर की पासवर्ड को अनुमान लगाने में कठिनाई भी बढ़ रही है।

लेकिन नमक को संग्रहीत करने की समस्या है, यदि आप डेटाबेस पर डालते हैं तो दूसरा उद्देश्य किसी डेटा को पकड़ने के मामले में कुछ हद तक हराया जाता है, आदर्श रूप से इसे किसी दूसरे स्थान पर संग्रहीत किया जाना चाहिए, लेकिन यह केवल तभी जरूरी है आपका आवेदन बहुत संवेदनशील है!

यदि आपके आवेदन का कोड सार्वजनिक नहीं है, तो मैं कहूंगा कि इस समस्या को रोकने के लिए एक संभावित तरीका है कि प्रत्येक उपयोगकर्ता के स्थिर मूल्य के आधार पर नमक उत्पन्न करना, जैसे कि निर्माण तिथि या उपयोगकर्ता नाम, क्योंकि अगर कोई पढ़ता है डेटाबेस यह अस्पष्ट है कि आप नमक का उपयोग करते हैं या नहीं ...