2012-10-04 12 views
24

संभव डुप्लिकेट:
Secure hash and salt for PHP passwordsनमक और पासवर्ड

मेरे पासवर्ड के लिए मैं इस तरह नमक का उपयोग करना चाहिए (नमक प्रत्येक उपयोगकर्ता के लिए अनूठा होगा तथा पासवर्ड के साथ संग्रहीत नहीं) ...

$salt = sha1(md5("coders gonna code")); 
$password = md5($salt.$password); 

या यह ठीक हो सकता है अगर मैं सिर्फ इस्तेमाल किया:

$password = md5($password); 

क्योंकि अगर मैंने नमक का इस्तेमाल किया है, भले ही उपयोगकर्ता पासवर्ड की तरह एक बुरी पासवर्ड का निर्माण करता है इससे कोई फर्क नहीं करेगा क्योंकि नमक (इस मामले में) 145ac26ff093c6e1317f7d5fb4c9fd11c77be975 होगा तो वहाँ पासवर्ड के लिए प्रवेश 145ac26ff093c6e1317f7d5fb4c9fd11c77be975password होगा जो अनुसार http://howsecureismypassword.net/ में इसे 3 octodecillion साल लगाना होगा .... तो राय? या मैं और भी बदतर हो सकता है और जाना

$password = md5($salt.$password.md5($salt)); 

व्यक्ति अब तक नमक हैश करने के लिए पर्याप्त, कुछ भी रोकने में सक्षम हो जाएगा हो गया है चाहिए तो आगे जा रहे हैं? यह पिछले पासवर्ड


हर किसी ने कहा कि मैं यह प्रति उपयोगकर्ता क्या करना चाहिए करने के लिए

एक बयान के < अधिक ... मुझे पता है, यह सिर्फ एक उदाहरण है।

+0

क्षमा करना भूल गए-.- – FabianCook

+4

आप अपने पासवर्ड _salting_ के बजाय 'PBKDF2' का उपयोग कर सकते हैं। – Florent

+0

इसे पढ़ें http://www.codinghorror.com/blog/2012/04/speed-hashing.html – jurgemaister

उत्तर

13

आपको नमक को बदलना चाहिए ताकि यह प्रत्येक उपयोगकर्ता के लिए विशिष्ट हो, न कि सिस्टम व्यापक स्थिर हो। यह आपके पासवर्ड के खिलाफ इंद्रधनुष तालिका हमलों को और अधिक असुविधाजनक बना देगा।

ट्रॉय हंट द्वारा इस article में नमक के विकास पर एक अच्छा लेखन है।

संपादित

$salt कुछ प्रत्येक पासवर्ड रिकॉर्ड करने के लिए अद्वितीय है, जो यह करने के लिए बहुत एन्ट्रापी कहते हैं। यह आमतौर पर बाइट्स का यादृच्छिक अनुक्रम होता है, जो उपयोगकर्ता खाते से संग्रहीत होता है।

हैशिंग परंपरागत रूप से salt + password के संयोजन पर किया जाता है।

$passwordHash = hash($salt.$password); 

जैसा कि अन्य ने कहा है, हैशिंग के लिए एमडी 5 का उपयोग न करें। यह टूटा हुअा है।

हैशिंग से पहले पासवर्ड या नमक के लिए अतिरिक्त मालिकाना एल्गोरिदम लागू करना not recommended है। इसके बजाए, PBKDF2 जैसे उद्योग के ताकत समाधान को देखें, जो नमक के अलावा, कई (आमतौर पर> 10k) बार-बार पुनरावृत्तियों की आवश्यकता होती है जो एक हमलावर को और धीमा कर देगी।

यदि आप OWASP guidelines अपनाते हैं, तो प्रदर्शन किए गए हैंश की संख्या नियमित रूप से बढ़ी जानी चाहिए (मूर के कानून का विरोध करने के लिए)। हैश की संख्या प्रति उपयोगकर्ता भी जारी रहनी चाहिए, जिसका अर्थ है कि आपको धोखेबाज पासवर्ड, नमक और पुनरावृत्तियों की संख्या को तीन गुना स्टोर करना होगा।

+0

संपादित करें जांचें। धन्यवाद, लेकिन मुझे यह पता है। :) – FabianCook

+2

मुझे लगता है कि यह सवाल सबसे अच्छा जवाब देता है, क्योंकि मेरे लिए ऐसा लगता है कि ओपी स्पष्ट रूप से नहीं जानता कि वह अपने पासवर्ड के साथ नमक का उपयोग क्यों कर सकता है। यदि आप निश्चित नमक का उपयोग करते हैं, तो इससे कोई फर्क नहीं पड़ता कि ब्रूट फोर्स द्वारा पासवर्ड को क्रैक करने में 3 अरब साल लगेंगे, क्योंकि हमलावर सिर्फ आपकी डेटाबेस तालिका को देखेगा, देखें कि उसी हैश वैल्यू के साथ 3000 पासवर्ड हैं और अनुमान लगाएं कि यह 'पासवर्ड' या '12345' या जो कुछ भी हो। आप गतिशील हैश का उपयोग करते हैं ताकि धोखेबाज और स्लेटेड पासवर्ड को सांख्यिकीय माध्यमों द्वारा अनुमानित नहीं किया जा सके। –

13

आप नमक का पूरी तरह से गलत तरीके से उपयोग कर रहे हैं। नमक अप्रत्याशित होना चाहिए; आपका नमक उस (सटीक) के विपरीत विपरीत है। चूंकि एक निश्चित हैश बिल्कुल लाभ नहीं है, यह भी लगता है कि आप हमलावर द्वारा ज्ञात नमक पर भरोसा कर रहे हैं। यह अस्पष्टता के माध्यम से सुरक्षा की परिभाषा है, जो एक और बुरी आदत है।

आप क्या कर किया जाना चाहिए:

  1. नमक के रूप में उचित लंबाई के एक अप्रत्याशित स्ट्रिंग का उपयोग करें। निचले/ऊपरी केस अक्षरों और अंकों जैसे पूल से यादृच्छिक रूप से जेनरेट किए गए 8-वर्ण तार ठीक हैं।
  2. प्रत्येक उपयोगकर्ता के लिए एक अलग नमक का उपयोग करें, और हर बार जब वे अपना पासवर्ड बदलते हैं तो इसे बदलें।
  3. एमडी 5 (जिसे टूटा माना जाता है) से ले जाएं इस एप्लिकेशन के लिए बेहतर हैश फ़ंक्शन में। SHA-1 बेहतर है क्योंकि इसे टूटा नहीं माना जाता है; bcrypt सबसे अच्छा है क्योंकि इसमें एक कॉन्फ़िगर करने योग्य लोड कारक है।
+0

संपादित करें जांचें। धन्यवाद, लेकिन मुझे यह पता है।:) – FabianCook

+0

@SmartLemon: कृपया अपने प्रश्न की पहली पंक्तियों को उचित रूप से संपादित या हटा दें। एक मामूली संपादन हमें यह बताने के लिए पर्याप्त नहीं है कि आप वास्तव में क्या कर रहे हैं। – Jon

+0

इसी तरह? मुझे लगता है कि यह ठीक है अब – FabianCook

9
  1. अपने हैशिंग एल्गोरिथ्म के रूप में MD5 उपयोग करते हैं, कुछ अधिक सुरक्षित जैसे SHA256 या यहाँ तक कि bcrypt प्रयोग न करें।

  2. अगर किसी को आपके डेटाबेस में प्रवेश प्राप्त हुआ है तो पासवर्ड को नमक करें, वे आम हैश के लिए पासवर्ड को उलट नहीं पाएंगे या इंद्रधनुष के हमलों जैसी तकनीकों का उपयोग नहीं कर पाएंगे।

http://michaelwright.me/php-password-storage

http://en.wikipedia.org/wiki/Bcrypt

+2

हर कोई सोचता है कि यह सही है? मुझे ऐसा लगता है? – FabianCook

+1

शा256 अभी भी बहुत सुरक्षित नहीं है, यहां एक बाइट रेंज नमक के साथ सही ढंग से किया गया बैक्रीप्ट का एक वर्किंग वर्जन भी है http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing- पासवर्ड-इन-पीएचपी – Sammaye

0

लवण पूरी तरह से यादृच्छिक, और वास्तविक पासवर्ड आप के हैश भंडारण कर रहे हैं से संबंधित नहीं होना करने के लिए होती हैं।

क्या तुम सच में है एक पूरी तरह से यादृच्छिक नमक उत्पन्न कर रहा है चाहिए, फिर

$password = md5($salt.$password); 

करते हैं और उपयोगकर्ता के उपयोगकर्ता नाम, नमक की दुकान और पासवर्ड टुकड़ों में बांटा।

+1

एमडी 5 का सुझाव न दें, यह असुरक्षित है। –

+0

संपादित करें जांचें। धन्यवाद, लेकिन मुझे यह पता है। :) – FabianCook

+0

@ एच 2CO3 क्यों एमडी 5 असुरक्षित है? –

2

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

अपने उदाहरण में आप भी पासवर्ड hashing रहे हैं तो यह की तरह नहीं होगा: 145ac26ff093c6e1317f7d5fb4c9fd11c77be975password

पी.एस. Bcrypt का प्रयोग करें। यह बहुत अधिक विश्वसनीय है।

3

सबसे पहले आपको एमडी 5 को सीधे स्टोर नहीं करना चाहिए, जिसे आपने पहले से ही मान्यता दी है। PHP 5.5 आसानी से 1 लाइन में पासवर्ड बनाने और सत्यापित करने के लिए नए तरीके लाएगा, तब तक आप (आगे-संगत) का उपयोग & सुरक्षित पासवर्ड हैंश सत्यापित करने के लिए कर सकते हैं।

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