2010-03-31 19 views
18

एमडी 5 की ज्ञात कमजोरियों और हाल ही में (मई 200 9) एसएचए 1 में चर्चा की गई कमजोरियों को देखते हुए, नए कार्यक्रमों को & को अपने पासवर्ड को सशक्त कैसे करना चाहिए?संग्रहीत पासवर्ड के लिए उपयोग करने के लिए अनुशंसित हैशिंग एल्गोरिदम क्या है?

मैंने SHA-256 और SHA-512 सुझाए गए हैं।

मुख्य रूप से रेल पर रूबी में और पोस्टग्रेएसक्यूएल का उपयोग करके प्रोग्रामिंग - लेकिन अन्य भाषाओं और वातावरण को पासवर्ड हैंश की गणना भी करनी पड़ सकती है।

+2

धन्यवाद मार्टिन उपयोग करते हैं, मुझे समझ नहीं है कि। यह एक संकीर्ण सवाल था और एक संकीर्ण उत्तर के लायक था। – Hissohathair

उत्तर

21

SHA-256 और SHA-512 निकट भविष्य के लिए सुरक्षित हैं। वे एसएचए -2 परिवार से संबंधित हैं, जिसके खिलाफ अब तक कोई हमले नहीं पहचाने गए हैं। This wikipedia page का कहना है कि यूनिक्स और लिनक्स विक्रेता अब अपने सुरक्षित हैशिंग पासवर्ड के लिए SHA-2 पर जा रहे हैं। एसएचए -3 परिवार, यहां तक ​​कि मजबूत एल्गोरिदम के साथ भी विकसित किया जा रहा है, लेकिन कम से कम 2012 तक तैयार नहीं होगा।

पीएस: जब तक आप सरकारों से गुप्त एजेंट नाम छुपा नहीं रहे हैं, तो आप SHA-1 के साथ भी सुरक्षित रहेंगे, लेकिन यदि SHA-2 को लागू करने में कोई समस्या नहीं है, तो बस इसके बजाय इसका उपयोग करें।

+2

पीकेसीएस # 5 (http://www.rsa.com/rsalabs/node.asp?id=2127) कुछ अन्य अच्छी जानकारी (जैसे पुनरावृत्तियों) पर चर्चा करता है कि पाठक विचार करना चाह सकता है। – atk

+2

SHA-1 टूटा माना जाता है। –

+0

@Noon रेशम: इसे तोड़ने के लिए वर्तमान में कितनी कंप्यूटिंग शक्ति की आवश्यकता है? –

17

bcrypt जैसे धीमे फ़ंक्शन का उपयोग करें। Here फ़्यूज़न लोगों से एक पोस्ट है।

-4

आप की तरह एक साथ एक हैश उपयोगकर्ता नाम, पासवर्ड और नमक का उपयोग करना चाहिए,:

hash(length(username)+"_veryuniquesalt4rtLMAO"+username+password) 

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

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

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

कोई फर्क नहीं पड़ता कि आप क्या चुनते हैं, थोड़ी धीमी गति से कुछ भी बेहतर नहीं है, 1 माइक्रोसॉन्ड के बजाय 1 मिलीसेकंड का उपयोग करें और आपकी सुरक्षा 1000 गुना मजबूत है।

आप bcrypt का उपयोग कर सकते हैं, या आप एक पारंपरिक हैशिंग एल्गोरिदम को बहुत अधिक काम कर सकते हैं, बस यह सुनिश्चित कर लें कि अतिरिक्त कार्य प्राथमिक रूप से स्ट्रिंग कनेक्शन नहीं है।

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

+2

ध्यान दें कि हैश में उपयोगकर्ता नाम शामिल करने से उपयोगकर्ता नाम बदलना रोकता है। सिस्टम आवश्यकताओं के आधार पर, यह वांछित हो सकता है या नहीं। एसईएस जहां यह वांछनीय नहीं है, यूआईडी (या गाइड, या समकक्ष) का उपयोग एक विकल्प होगा। – atk

+1

आपको उपयोगकर्ता को उपयोगकर्ता नाम बदलने के लिए अपना पासवर्ड दर्ज करना होगा, वैसे भी सर्वोत्तम अभ्यास। – aaaaaaaaaaaa

+2

आपके कोड में एक बहुत सूक्ष्म बग है - आपको हैश में कभी भी * समसामयिक डेटा नहीं होना चाहिए। एच (एक्स + वाई + जेड) आपको लंबाई विस्तार हमले तक खुलता है। इसके बजाय आपको चाहिए: एच (एच (एक्स + वाई + जेड)) या एच (एच (एक्स) + एच (वाई) + एच (जेड)) –

7

आपको पासवर्ड-आधारित कुंजी व्युत्पन्न फ़ंक्शन का उपयोग यूआईडी/पीडब्ल्यूडी परिणाम के रूप में करना चाहिए; सबसे अधिक ज्ञात पीबीकेडीएफ 2 http://en.wikipedia.org/wiki/PBKDF2 भी आरएफसी 28 9 8 http://tools.ietf.org/html/rfc2898 के रूप में परिभाषित किया गया है। पीकेबीडीएफ 2 आपके गुप्त डेटा के साथ-साथ नमक और पुनरावृत्ति गणना भी लेता है। यह आपकी समस्या को हल करने के मानक तरीका है।

आप .NET में कार्यक्रम हैं, तो Rfc2898DeriveBytes http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

+1

मैंने इस विषय पर केवल 100 लेख और प्रश्न पढ़े हैं, और ऐसा लगता है कि आरएफसी 28 9 8 या कोई अन्य बहु-पुनरावृत्ति समाधान (पूर्व बीसीआरपीटी) जाने का रास्ता है। लेकिन आरएफसी 28 9 8 डेरिवबाइट्स SHA-1 पर आधारित है, नहीं? क्या यह पुराना नहीं है? और बीसीआरपीटी "मान्य" प्रतीत नहीं होता है, भले ही यह शानदार लग रहा हो। साथ ही, Rfc2898DeriveBytes IDisposable को लागू नहीं करता है, ऐसा लगता है कि यह सादे टेक्स्ट पासवर्ड को आसानी से स्मृति में रिसाव कर सकता है। मेरी वास्तविक जरूरतें उस भद्दा नहीं हैं, लेकिन मैं यह मापना चाहता हूं कि प्रत्येक चीज़ कितनी सुरक्षित है। उस पर आपका क्या लेना होगा? धन्यवाद! –

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