2010-11-01 13 views
5

को भेजने से पहले पासवर्ड Hashing जब UTF-8 एन्कोडेड सॉकेट हस्तांतरण के माध्यम से पासवर्ड भेजने, यह अगर मैं पहले डेटा भेजने के लिए या तो MD5 या SHA-1 का उपयोग कर पासवर्ड हैश सुरक्षित माना जाता है? ध्यान रखें कि मैं SQL डेटाबेस में हैश किए गए पासवर्ड की तुलना करने की योजना बना रहा हूं। मुझे चिंता है कि कोई यूटीएफ -8 में हैश किए गए पासवर्ड को छीनने में सक्षम हो सकता है और फिर यूटीएफ -8 एन्कोडिंग को डिक्रिप्ट कर सकता है और मेरा हैश पासवर्ड प्राप्त कर सकता है जिसका संभावित रूप से मेरे डेटाबेस में पासवर्ड से मिलान करने के लिए उपयोग किया जा सकता है।सर्वर

+0

एसएसएल का उपयोग करें और प्रोग्राम में एम्बेडेड इसके हैश के साथ सर्वर प्रमाण पत्र की तुलना करें। असमर्थ के लिए – CodesInChaos

उत्तर

12

ग्राहक सिर्फ टुकड़ों में बंटी पासवर्ड, तो टुकड़ों में बांटा पासवर्ड "password" है भेजता है: बाइट्स की एक दृश्य जो ग्राहक सिर्फ प्रमाणीकृत करने को दिखाने के लिए की जरूरत है। यदि हमलावर उसको स्नीफ कर सकता है तो आपका प्रोटोकॉल बर्बाद हो जाता है।

यदि प्रमाणीकरण प्रोटोकॉल में केवल गुप्त डेटा का एक टुकड़ा प्रस्तुत करना शामिल है (यदि आप चाहें तो इसे पासवर्ड दें), तो एक्सचेंज एक परिवहन माध्यम के भीतर होना चाहिए जो गोपनीयता सुनिश्चित करता है (ताकि गुप्त डेटा को स्नीफ नहीं किया जा सके) और सर्वर प्रमाणीकरण (ताकि एक हमलावर एक सर्वर की नकल नहीं कर सकता है और क्लाइंट को गुप्त डेटा भेजने के लिए मना सकता है)। यह एक क्लासिक एसएसएल/टीएलएस सुरंग (एक वेब संदर्भ में https:// यूआरएल) से बाहर निकलता है।

यदि आप सर्वर प्रमाणीकरण के साथ एक एसएसएल/टीएलएस सुरंग स्थापित नहीं कर सकते हैं (यानी सर्वर के पास प्रमाणपत्र है जो क्लाइंट सत्यापित कर सकता है), तो आप एक चुनौती के साथ प्रमाणीकरण प्रोटोकॉल का सहारा लेना चाहेंगे: सर्वर अनुक्रम भेजता है यादृच्छिक बाइट्स (चुनौती) और ग्राहक पासवर्ड और चुनौती के संयोजन पर गणना किए गए हैश मान के साथ प्रतिक्रिया करता है। इसे घर पर न करें! इसे सही करना बहुत मुश्किल है, खासकर जब हमलावर संचार (सक्रिय हमलों) को रोक सकता है।

एक और सामान्य उत्तर password-authenticated key exchange प्रोटोकॉल है। PAKE एक क्रिप्टोग्राफिक कुंजी अनुबंध प्रोटोकॉल (जैसे डिफी-हेलमैन) और क्लाइंट और सर्वर के बीच पारस्परिक पासवर्ड प्रमाणीकरण को जोड़ता है, जो अपेक्षाकृत कमजोर पासवर्ड के साथ निष्क्रिय और सक्रिय हमलावर दोनों को हरा देता है (हमलावर को "कोशिश" करने के लिए पर्याप्त डेटा नहीं मिल सकता है प्रत्येक अनुमान के लिए क्लाइंट या सर्वर के साथ बातचीत किए बिना पासवर्ड)। दुर्भाग्यवश, कुछ पाक एल्गोरिदम को गणितीय विवरण से परे मानकीकृत किया गया है, और क्षेत्र पेटेंट खानभूमि है।

+0

क्या सी ++ क्यूटी में कोई लाइब्रेरी है जो एक चुनौती के साथ प्रमाणीकरण का सही ढंग से उपयोग करती है? – sonics876

1

यदि वे हैशिंग एल्गोरिदम जानते हैं तो वे आपके पासवर्ड को बलपूर्वक बल दे सकते हैं। सरल (और पूरी तरह से सुरक्षित नहीं) समाधान चुनौती/प्रतिक्रिया का उपयोग करना है, सर्वर पासवर्ड हैश के साथ एक यादृच्छिक स्ट्रिंग ("nonce") को धोने के लिए जारी करता है। यह आपके ऐप को आपके द्वारा वर्णित रीप्ले हमलों के प्रकार के लिए असुरक्षित बनाता है।

अधिक जानकारी के लिए, HTTP के digest access authentication

0

आप डेटाबेस तरफ पासवर्ड जांच कैसे करूं?

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

यह ठीक है जैसे आप सादे पाठ में डेटाबेस में पासवर्ड संग्रहीत कर रहे थे।

यदि आप स्नीफिंग से डरते हैं, तो प्रमाणीकरण के लिए एक चुनौती-प्रतिक्रिया प्रोटोकॉल का उपयोग करें, लेकिन इस मामले में गुप्त डेटाबेस में संग्रहीत किया जाएगा (और किसी भी व्यक्ति के पास जाना जाएगा जिसके पास डेटाबेस तक पहुंच है)।

वैकल्पिक रूप से, आप एक संरक्षित चैनल (SSL) पर सादे पाठ में एक पासवर्ड भेज सकते हैं, लेकिन आपको एक प्रमाणपत्र स्थापित करना होगा जो आपको शायद कुछ पैसे खर्च करेगा (यदि आप किसी विक्रेता से प्राधिकरण का उपयोग कर रहे हैं सूची, यानी एक अपने ग्राहकों के ब्राउज़रों के बारे में शिकायत नहीं होगा)

4

ठीक है, अगर किसी को हैश सूंघ कर सकते हैं - वह कर सकते हैं नकली प्राधिकरण अनुरोध और भेज हैश वह पहले से ही पता है।

सुरक्षित प्रणाली बनाना आसान नहीं है, आप इसे सुरक्षित बनाने के लिए ठीक प्रकार से हस्ताक्षरित कुंजी के साथ असममित क्रिप्टोग्राफी का उपयोग कर प्राधिकरण क्या करने की जरूरत होगी।

कम से कम ~ 100byte यादृच्छिक नमक जोड़ने के लिए, और SHA1 का उपयोग करें - इस तरह से यह रास्ता कठिन bruteforce होगा।

+0

+1! 2017 में –

+0

, SHA1 अब क्रिप्टोग्राफ़िक हैश एल्गोरिदम नहीं है। – mauris

0

एचएम, यदि आप 'उचित' हैशिंग के बारे में बात कर रहे हैं, तो इसका मतलब है कि यह आपके पासवर्ड को 'एन्क्रिप्ट' करेगा, इसलिए यह डिक्रिप्ट-सक्षम नहीं होगा, क्योंकि हैशिंग एक तरीका है, और इसे डिक्रिप्ट करने तक - यह तब तक कुछ समय लें, और कुछ प्रकार के महान CPU power लें।

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

this बाहर की जाँच करें।

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