security एक पासवर्ड हैशिंग और इसे एन्क्रिप्ट करने के बीच अंतर




language-agnostic encryption (8)

वर्तमान में इस प्रश्न के लिए वोट दिया गया राज्य कहता है:

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

यह अंतर वास्तव में क्या है? मैं हमेशा इस धारणा के तहत था कि हैशिंग एन्क्रिप्शन का एक रूप था। पोस्टर का असुरक्षित कार्यक्षमता क्या है?


हैशिंग :

यह एक तरफा एल्गोरिदम है और एक बार धोया रोलबैक नहीं कर सकता है और यह एन्क्रिप्शन के खिलाफ इसका मीठा बिंदु है।

एन्क्रिप्शन

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

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

यदि आप देखना चाहते हैं कि आप अपने हैश फ़ंक्शन कैसे लिखना चाहते here , तो आप here जा सकते here

हैशिंग करने के लिए कई एल्गोरिदम हैं।

  1. एमडी 5 - संदेश डाइजेस्ट एल्गोरिदम 5 (एमडी 5) हैश फ़ंक्शन का उपयोग करता है। आउटपुट हैश 128 बिट्स लंबाई में है। एमडी 5 एल्गोरिदम को 1 99 0 के दशक के शुरू में रॉन रिवेस्ट द्वारा डिजाइन किया गया था और आज एक पसंदीदा विकल्प नहीं है।

  2. SHA1 - 1995 में प्रकाशित सुरक्षा हैश एल्गोरिदम (SHA1) हैश का उपयोग करता है। आउटपुट हैश लंबाई में 160 बिट्स है। हालांकि सबसे व्यापक रूप से उपयोग किया जाता है, यह आज एक पसंदीदा विकल्प नहीं है।

  3. एचएमएसीएसएच 256 , एचएमएसीएसएच 384 , एचएमएसीएसएएच 512 - SHA-256, SHA-384, और SHA-2 परिवार के SHA-512 कार्यों का उपयोग करें। एसएचए -2 2001 में प्रकाशित हुआ था। आउटश हैश लंबाई क्रमश: 256, 384, और 512 बिट्स हैं, क्योंकि हैश फ़ंक्शन के नाम इंगित करते हैं।


मैंने हमेशा सोचा है कि एन्क्रिप्शन को दोनों तरीकों से परिवर्तित किया जा सकता है, इस तरह से कि अंत मूल्य आपको मूल मूल्य पर ला सकता है और हैशिंग के साथ आप अंतिम परिणाम से मूल मान में वापस नहीं आ पाएंगे।


आदर्श रूप से आपको दोनों करना चाहिए।

पहले एक तरह से सुरक्षा के लिए पास पासवर्ड हैश। अतिरिक्त सुरक्षा के लिए नमक का प्रयोग करें।

फिर पासवर्ड हैश के आपके डेटाबेस से समझौता किया गया है, तो शब्दकोश हैश के खिलाफ बचाव के लिए हैश को एन्क्रिप्ट करें।


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

एन्क्रिप्टेड बनाम हैश किए गए पासवर्ड से निकाला गया - कौन सा बेहतर है?

एन्क्रिप्शन अच्छा है?

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

क्रिप्टोग्राफिक हैश फ़ंक्शन (केवल एक तरफा)

हां, हो सकता है कि आप यहां बिंदु को याद कर चुके हों। क्या आपने देखा कि डिक्रिप्ट और तुलना करने की कोई आवश्यकता नहीं है? यदि एकमात्र-केवल रूपांतरण दृष्टिकोण है जहां पासवर्ड को कुछ रूपांतरित-शब्द में परिवर्तित किया जा सकता है, लेकिन रिवर्स ऑपरेशन (रूपांतरित शब्द से पासवर्ड की पीढ़ी) असंभव है। अब भी अगर किसी को डेटाबेस तक पहुंच मिलती है, तो कनवर्ट किए गए शब्दों का उपयोग करके पासवर्ड को पुन: उत्पन्न या निकालने का कोई तरीका नहीं है। इस दृष्टिकोण में, वैसे भी शायद ही कभी आपके उपयोगकर्ता के शीर्ष गुप्त पासवर्ड जान सकें; और यह एकाधिक अनुप्रयोगों में एक ही पासवर्ड का उपयोग कर उपयोगकर्ताओं की रक्षा करेगा। इस दृष्टिकोण के लिए क्या एल्गोरिदम का उपयोग किया जा सकता है?


हैशिंग एक तरफा कार्य है, जिसका अर्थ है कि एक बार जब आप पासवर्ड लेते हैं तो मूल पासवर्ड को हैश से वापस लेना बहुत मुश्किल होता है। एन्क्रिप्शन एक दो-तरफा फ़ंक्शन है, जहां मूल पाठ को एन्क्रिप्टेड टेक्स्ट से वापस लेना बहुत आसान है।

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

एन्क्रिप्शन एल्गोरिदम का उपयोग करके पासवर्ड स्टोर करना असुरक्षित है क्योंकि अगर उपयोगकर्ता या व्यवस्थापक को एन्क्रिप्टेड टेक्स्ट से मूल पासवर्ड प्राप्त करना आसान होता है, तो हमलावर के लिए ऐसा करना भी आसान होता है।


यहां एक कारण है कि आप एक दूसरे को पासवर्ड पुनर्प्राप्ति का उपयोग करना चाह सकते हैं।

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


हैशिंग एक तरह से काम है (ठीक है, एक मैपिंग)। यह अपरिवर्तनीय है, आप सुरक्षित हैश एल्गोरिदम लागू करते हैं और आप मूल स्ट्रिंग को वापस नहीं प्राप्त कर सकते हैं। सबसे अधिक आप ऐसा कर सकते हैं जिसे "टकराव" कहा जाता है, यानी, एक अलग स्ट्रिंग ढूंढना जो एक ही हैश प्रदान करता है। क्रिप्टोग्राफ़िक रूप से सुरक्षित हैश एल्गोरिदम टकराव की घटना को रोकने के लिए डिज़ाइन किए गए हैं। आप एक इंद्रधनुष तालिका के उपयोग से एक सुरक्षित हैश पर हमला कर सकते हैं, जिसे आप इसे स्टोर करने से पहले हैश को salt लगाने से रोक सकते हैं।

एन्क्रिप्टिंग एक उचित (दो तरह) समारोह है। यह उलटा है, यदि आपके पास कुंजी है तो आप मूल स्ट्रिंग प्राप्त करने के लिए उलझन वाली स्ट्रिंग को डिक्रिप्ट कर सकते हैं।

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

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


हैशिंग एल्गोरिदम आमतौर पर प्रकृति में क्रिप्टोग्राफिक होते हैं, लेकिन मुख्य अंतर यह है कि एन्क्रिप्शन डिक्रिप्शन के माध्यम से उलटा होता है, और हैशिंग नहीं है।

एक एन्क्रिप्शन फ़ंक्शन आमतौर पर इनपुट लेता है और एन्क्रिप्टेड आउटपुट उत्पन्न करता है जो समान होता है, या थोड़ा बड़ा आकार होता है।

एक हैशिंग फ़ंक्शन इनपुट लेता है और आमतौर पर एक निश्चित आकार का उत्पादन करता है, आमतौर पर एक निश्चित आकार के साथ भी।

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

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

हैशिंग फ़ंक्शंस आमतौर पर टकराव के अवसर को कम करने के लिए बनाए जाते हैं और कुछ ऐसी गणना करने में कठिनाई होती है जो एक ही हैश का उत्पादन किसी और चीज के रूप में करेगी।







passwords