2008-12-03 11 views
11

मेरे पास मेरे mysql डेटाबेस में एक उपयोगकर्ता तालिका है जिसमें पासवर्ड कॉलम है। वर्तमान में, मैं डेटाबेस में स्टोरेज के लिए उपयोगकर्ताओं के पासवर्ड हैश के लिए MD5 एल्गोरिदम का उपयोग करता हूं। अब मुझे लगता है कि मैं एक सुरक्षा विवेक व्यक्ति हूं। मैंने MySQL दस्तावेज़ों को पढ़ने के दौरान देखा कि वे MD5 या SHA/SHA1 हैशिंग विधियों की अनुशंसा नहीं करते हैं, लेकिन वैकल्पिक विकल्प प्रदान नहीं करते हैं।MySQL में हैश पासवर्ड के लिए उपयोग करने के लिए क्या फ़ंक्शन?

MySQL में मेरे पासवर्ड हैश करने का सबसे अच्छा तरीका क्या होगा? एक फ़ंक्शन जो PHP और MySQL दोनों में मूल रूप से समर्थित है, मेरे वर्तमान कार्यान्वयन के साथ आदर्श और आवश्यक होगा।

धन्यवाद!

उत्तर

12

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

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

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

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

दूर, कहीं अधिक यहाँ विस्तार: http://www.codinghorror.com/blog/archives/000953.html

1

MD5 और SHA-1 शायद अब की वजह से know attacks अनुशंसित नहीं हैं। लेकिन, वे अभी भी आमतौर पर अधिकतर उपयोग मामलों के लिए पर्याप्त हैं।

यदि आप अधिक विकल्प ढूंढ रहे हैं, तो बस PHP के hash functions का उपयोग करें - आपको plenty of options मिल गया है।

4

MD5 वर्तमान मानकों के अनुसार कमजोर माना जाता है। यह अभी भी एमडी 5 के साथ किए गए हैश को क्रैक करने के लिए कुछ काम करेगा, लेकिन ब्रूट-फोर्स द्वारा पासवर्ड अनुमान लगाने से कई बार आसान है। आदर्श रूप से, हैश को क्रैक करना बलपूर्वक बल से आसान नहीं होना चाहिए।

SHA1 को ब्रूट-बल द्वारा पासवर्ड अनुमान लगाने से क्रैक करना भी आसान माना जाता है।

मैंने वास्तव में ओपनएसएसएल से SHA224, SHA256, SHA384, और SHA512 कार्यों को सतह पर रखने के लिए MySQL पर एक पैच का योगदान दिया। इन्हें एनआईएसटी द्वारा पासवर्ड हैशिंग (वास्तव में SHA256 और उच्चतर) के लिए अनुशंसित किया जाता है।

मेरा पैच MySQL इंजीनियरों द्वारा समाप्त किया गया था, और मुझे याद है कि MySQL 6.0.5 और बाद में, यदि मुझे याद है।

यदि आप MySQL (और कौन नहीं) के पहले संस्करण का उपयोग करते हैं, तो आप शायद अपनी मेजबान भाषा में मजबूत हैशिंग फ़ंक्शंस के कार्यान्वयन का उपयोग कर सकते हैं। उदाहरण के लिए PHP में hash() फ़ंक्शन है। आप अपने आवेदन में हैशिंग कर सकते हैं और परिणामी संदेश स्ट्रिंग को डेटाबेस में सहेज सकते हैं।

salting भी मत भूलना!

-3

मैं संयोजन का उपयोग कर रहा हूं। उदाहरण के लिए SHA1 (MD5()) ठीक काम कर रहा है।

+1

यह वास्तव में सुरक्षित नहीं है। हैश के संयोजन के दौरान और अधिक सुरक्षित है, एसएचए 1 तोड़ने की लागत तेजी से उस बिंदु तक पहुंच रही है जहां इसे तोड़ना मुश्किल है। एमडी 5 पहले से ही वहां है। – Machavity

+0

SHA1 (MD5 (PASSWORD (SHA1 (MD5 ('lalaala')))) सुरक्षित है, मुझे लगता है। –

+0

कृपया पढ़ें: https://gist.github.com/MadaraUchiha/041a886e1bf27da5373c (स्पोइलर अलर्ट, 'SHA1 (MD5 (' SHA1 (') –

2

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

PHP 5.5 के साथ password_hash का परिचय आया, जो कि अधिक सुरक्षित बीक्रिप्ट एल्गोरिदम का उपयोग करता है। MySQL एन्क्रिप्ट कर सकते हैं जबकि/डिक्रिप्ट bcrypt, यह एक भयानक समाधान क्योंकि आप केवल अपने डेटाबेस परत करने के लिए एक संभावित बड़े गणना लोड जोड़ने नहीं रहे हैं, लेकिन the unhashed password could be stored in your logs

किसी भी परिस्थिति में विशुद्ध लेख पासवर्ड MySQL हिट चाहिए, भले ही क्वेरी स्तर पर। अन्यथा आप लॉग इन करने के लिए पासवर्ड लिखने का जोखिम लेते हैं (क्वेरी लॉग, सामान्य लॉग, धीमी क्वेरी लॉग, आदि)। जो भयानक है। तो नहीं, परेशान भी न करें ...

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