ऐप

2008-09-12 15 views
6

के लिए सादा पाठ पासवर्ड बदलना हम वर्तमान में हमारे पास एक वेब ऐप के लिए सादा पाठ पासवर्ड संग्रहीत कर रहे हैं।ऐप

मैं पासवर्ड हैश पर जाने की वकालत करता हूं लेकिन एक अन्य डेवलपर ने कहा कि यह कम सुरक्षित होगा - अधिक पासवर्ड हैश से मेल खाता है और एक शब्दकोश/हैश हमला तेज होगा।

क्या इस तर्क के लिए कोई सच है?

उत्तर

15

बिल्कुल कोई नहीं। लेकिन इससे कोई फर्क नहीं पड़ता। मैंने पहले एक समान प्रतिक्रिया पोस्ट की है:

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

+0

वहां अच्छी पकड़ है - यह वास्तव में ओपी के सहकर्मी से भावनात्मक प्रतिक्रिया है। गर्म फज़ीज़ को संबोधित करना शायद अधिक उत्पादक होगा जो कठिन तर्क और मीट्रिक है। शायद सहयोगी पर हैशिंग अलगो पसंद को धक्का दें ताकि वे उचित समाधान में अधिक खरीद सकें? –

+0

आपके यहां एक बहुत अच्छा बिंदु है। मैंने इस सवाल का जिक्र नहीं किया, लेकिन यह उसका कोड था - उसने इसे इस तरह से प्रेरित किया। अब यह मेरा कोड है, इसलिए मैं इसे एकतरफा रूप से बदल सकता हूं लेकिन अगर मैं कोड को समझने में और मदद की ज़रूरत है तो मैं उसे चेहरे/सहमत होने की अनुमति देना चाहूंगा ... –

1

मैं सुरक्षा विशेषज्ञ नहीं हूं लेकिन मुझे एहसास है कि यदि सादा पाठ अधिक सुरक्षित था, तो पहले स्थान पर हैशिंग मौजूद नहीं होगी।

+1

-1: हैशिंग पासवर्ड की तुलना में अधिक के लिए प्रयोग किया जाता है। और सिर्फ इसलिए कि कुछ मौजूद है इसका मतलब यह नहीं है कि यह किसी भी मूल्य का है (हालांकि इस मामले में यह है)। एक वास्तविक स्पष्टीकरण मूल्य जोड़ा होगा। –

5

वेब ऐप पर सादा पाठ पासवर्ड रखने का बिल्कुल कोई बहाना नहीं है। एक नमक मूल्य के साथ मानक हैशिंग एल्गोरिदम (SHA-1, MD5 नहीं!) का उपयोग करें, ताकि इंद्रधनुष के हमले असंभव हो।

+0

md5 पासवर्ड हैश के लिए पूरी तरह से अनुचित है –

+0

मैंने प्रतिक्रिया अपडेट की है, धन्यवाद @ जोएल-कोहेओर्न। – qbeuek

3

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

अन्य डेवलपर अगर आप भंडारण पासवर्ड रहे हैं सुरक्षा के बारे में बात करना बंद करना चाहिए सादे पाठ में और सुरक्षा के बारे में पढ़ना शुरू करें।

टक्कर संभव है, लेकिन आमतौर पर पासवर्ड ऐप्स के लिए बड़ी समस्या नहीं है (वे मुख्य रूप से उन क्षेत्रों में एक समस्या है जहां फ़ाइलों की अखंडता को सत्यापित करने के लिए हैंश का उपयोग किया जाता है)।

तो: अपने पासवर्ड को नमक जोड़कर (पासवर्ड के दाहिने तरफ नमक जोड़कर *) और SHA-1 या अधिमानतः SHA-256 या SHA-512 जैसे अच्छे हैशिंग एल्गोरिदम का उपयोग करें।

पीएस: हैश here के बारे में थोड़ा और विवरण।

* मुझे थोड़ा अनिश्चित है कि नमक को शुरुआत या स्ट्रिंग के अंत तक होना चाहिए या नहीं। समस्या यह है कि यदि आपके पास टकराव (एक ही हैश के साथ दो इनपुट) हैं, तो "गलत" पक्ष में नमक जोड़ने से परिणामी हैश नहीं बदलेगा। किसी भी तरह से, आपको इंद्रधनुष टेबल्स के साथ बड़ी समस्या नहीं होगी, केवल टक्कर के साथ

3

मुझे नहीं पता कि आपके अन्य डेवलपर चीजें 'अधिक पासवर्ड हैश से कैसे मिल सकती हैं'।

'हैश हमले तेज होगा' के लिए तर्क है, लेकिन केवल तभी जब आप पासवर्ड को सलाम नहीं कर रहे हैं। आम तौर पर, हैशिंग फ़ंक्शन आपको नमक प्रदान करने की अनुमति देते हैं जो ज्ञात हैश तालिका का उपयोग समय की बर्बादी करता है।

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

यानी, यदि किसी भी स्ट्रिंग को हैशिंग करना हमेशा 20 वर्ण हैश में होता है, तो यदि आपके पास केवल हैश देखने के लिए है, तो आप यह नहीं बता सकते कि मूल पासवर्ड आठ वर्ण या सोलह उदाहरण के लिए है या नहीं।

1

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

0

अधिक पासवर्ड हैश से मेल खाते हैं और एक शब्दकोश/हैश हमला तेज होगा।

हां और नहीं। एक एसएए संस्करण की तरह एक आधुनिक हैशिंग एल्गोरिदम का प्रयोग करें, और यह तर्क बहुत हफ्तों तक मिलता है। क्या आपको वास्तव में चिंतित होने की आवश्यकता है यदि उस क्रूर बल पर हमले 467 वर्षों के बजाय केवल 352 साल लगेंगे? (वहाँ अचूक मजाक।) प्राप्त करने के लिए मूल्य (प्रणाली पर सादे पाठ में संग्रहीत पासवर्ड नहीं है) आपके सहयोगी की चिंता से कहीं दूर है।

6
Wikipedia

कुछ कंप्यूटर सिस्टम की दुकान उपयोगकर्ता पासवर्ड, जिसके खिलाफ प्रयासों पर उपयोगकर्ता लॉग तुलना करने के लिए, क्लियर रूप से

। यदि एक हमलावर लाभ इस तरह के एक आंतरिक पासवर्ड की दुकान का उपयोग करने, सभी पासवर्ड और इतने सभी उपयोगकर्ता खातों समझौता किया जा जाएगा। कुछ उपयोगकर्ताओं विभिन्न प्रणालियों वाले खातों के लिए एक ही पासवर्ड का काम में लेते हैं, उन रूप में अच्छी तरह से समझौता हो जाएगा।

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

एक सामान्य दृष्टिकोण केवल सादा पाठ पासवर्ड के "हैश" फ़ॉर्म को संग्रहीत करता है। एक ऐसी प्रणाली पर एक पासवर्ड में एक उपयोगकर्ता प्रकार, पासवर्ड हैंडलिंग सॉफ्टवेयर एक क्रिप्टोग्राफिक हैश एल्गोरिथ्म के माध्यम से चलता है, और अगर हैश मान उपयोगकर्ता की प्रविष्टि से उत्पन्न पासवर्ड डेटाबेस में संग्रहीत हैश से मेल खाता, उपयोगकर्ता पहुंच की अनुमति है। हैश मान है जो एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन को सबमिट किए गए पासवर्ड के और आमतौर पर नमक के रूप में जाना जाने वाला एक स्ट्रिंग पर बनाया गया है। नमक आम पासवर्ड के लिए हैश मान की एक सूची का निर्माण से हमलावरों को रोकता है। MD5 और SHA1 अक्सर क्रिप्टोग्राफिक हैश कार्यों किया जाता है।

इस पृष्ठ पर विषय पर आप और भी बहुत कुछ पढ़ सकते हैं। मेरी राय में, और मैंने जो भी पढ़ा है और उसके साथ काम किया है, हैशिंग एक बेहतर परिदृश्य है जब तक आप एक बहुत छोटा (< 256 बिट) एल्गोरिदम का उपयोग नहीं करते।

2

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

एक व्यावहारिक दृष्टिकोण से हालांकि, कि एक गरीब तर्क है - एक अच्छा हैशिंग समारोह (md5 या SHA1 ठीक होगा) काफी गारंटी नहीं है कि सभी सार्थक स्ट्रिंग्स के लिए, विशेष रूप से कम लोगों को है, वहाँ कोई टकराव हो जाएगा कर सकते हैं। यहां तक ​​कि यदि एक खाते के लिए दो पासवर्ड मिलान होते हैं, तो यह एक बड़ी समस्या नहीं है - अगर कोई व्यक्ति यादृच्छिक रूप से पासवर्ड को अनुमान लगाने के लिए पर्याप्त रूप से अनुमान लगाता है कि वे अंदर आने में सक्षम होने की संभावना है, तो आपको बड़ी समस्याएं हैं।

मैं तर्क था कि सादे पाठ में पासवर्ड संग्रहीत पासवर्ड मिलान में हैश टकराव की तुलना में काफी अधिक सुरक्षा जोखिम का प्रतिनिधित्व करता।

+1

MD5 _never_ fine है। – SLaks

+0

@Slaks: md5, जो टूटा हुआ है, अभी भी सादे पाठ पासवर्ड संग्रहीत करने से बेहतर है। –

1

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

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

String hashedPass=CryptUtils.MD5("alsdl;ksahglhkjfsdkjhkjhkfsdlsdf" + user.getCreateDate().toString() + user.getPassword); 
जब तक आपके नमक रहस्य है, या अपने हमलावर की सटीक निर्माण तिथि पता नहीं है

: हमेशा की तरह समाधान की तरह कुछ unique- टुकड़ों में बांटा परिणाम बनाने के लिए एक गुप्त नमक के साथ साथ अतिरिक्त उपयोगकर्ता जानकारी का उपयोग करने के लिए है उपयोगकर्ता का रिकॉर्ड, एक शब्दकोश हमला विफल हो जाएगा - यहां तक ​​कि अगर वे पासवर्ड फ़ील्ड को खींचने में सक्षम होते हैं।

+0

क्या? यदि हमलावर के पास "उपयोगकर्ता" तालिका है तो उसके पास उपयोगकर्ता का क्रिएशनडेट होगा। यदि CreationDate "उपयोगकर्ता" तालिका में नहीं है तो एप्लिकेशन प्रक्रिया लॉग इन कैसे करेगा? प्रत्येक उपयोगकर्ता के लिए अद्वितीय डेटा के साथ साल्टिंग अच्छा विचार है, लेकिन यह भी एक दिया गया है कि हमलावर के पास इसका उपयोग होगा। इसका मुद्दा यह है कि हमलावर को प्रत्येक उपयोगकर्ता के लिए अलग इंद्रधनुष सारणी बनाना होगा। और यह वह जगह है जहां धीमी हैशिंग अल्गोस आती है। – Shinhan

+2

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

+0

एस/अक्सर/हमेशा /। और उदाहरण कोड के लिए md5? शर्म की बात है –

3

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

शब्दकोश/हैश हमलों के खिलाफ रोकने के लिए एक टोकन प्रत्येक उपयोगकर्ता और स्थिर करने के लिए अद्वितीय है कि के खिलाफ हैश करने के लिए सुनिश्चित हो के रूप में परिवर्धित किया गया था (उपयोगकर्ता नाम/तारीख में शामिल होने/userguid अच्छी तरह से काम करता है)

1

सादे-पाठ पासवर्ड संग्रहीत करने से कुछ भी कम सुरक्षित नहीं है। यदि आप एक सभ्य हैशिंग एल्गोरिदम का उपयोग कर रहे हैं (कम से कम SHA-256, लेकिन यहां तक ​​कि SHA-1 कुछ भी नहीं है) तो हाँ, टकराव संभव है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि हैश दिया गया है, यह असंभव है * गणना करने के लिए तारों के लिए हैश। यदि आपने पासवर्ड के साथ उपयोगकर्ता नाम हैश किया है, तो वह संभावना खिड़की से भी बाहर हो जाती है।

* - तकनीकी रूप से असंभव नहीं है, लेकिन "computationally अव्यवहार्य"

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

3

नहीं है एक पुरानी कहावत प्रोग्रामर के बारे में cryptographers :)

जेफ Atwood होने का नाटक कर इस विषय पर एक अच्छा पोस्ट है: You're Probably Storing Passwords Incorrectly

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

0

आशा है कि आप मुझे एक समाधान मैं इस पर लिखा था प्लग, क्लाइंट पक्ष जावास्क्रिप्ट का उपयोग करने से पहले इसे प्रेषित है पासवर्ड हैश करने के लिए के लिए माफ कर दो: http://blog.asgeirnilsen.com/2005/11/password-authentication-without.html