2012-04-05 16 views
9

मैं ऐसे सिस्टम पर काम कर रहा हूं जो एमडी 5 (कोई नमक) के साथ उपयोगकर्ता पासवर्ड हैशिंग कर रहा है। मैं एसएचए -512 और नमक का उपयोग करके पासवर्ड को अधिक सुरक्षित रूप से स्टोर करना चाहता हूं।एसएचए -512 का प्रयोग करें और एमडी 5 हैश पासवर्ड हैश के लिए नमक?

हालांकि भविष्य के पासवर्ड के लिए इसे कार्यान्वित करने में काफी आसान है, मैं मौजूदा एमडी 5 हैश किए गए पासवर्ड को फिर से भरना चाहूंगा, अधिमानतः सभी उपयोगकर्ताओं को अपने पासवर्ड बदलने के लिए मजबूर किए बिना। मेरा विचार है कि केवल एसएचए -512 का उपयोग करें और मौजूदा एमडी 5 हैश हैश के लिए उपयुक्त नमक। मैं या तो डेटाबेस में कुछ झंडा सेट कर सकता हूं जो इंगित करता है कि सादे पाठ से कौन से पासवर्ड धोए गए थे, और जिन्हें एमडी 5 हैश से धोया गया था। या मैं उपयोगकर्ताओं को प्रमाणीकृत करते समय बस कोशिश कर सकता हूं। या यहां तक ​​कि सिर्फ एमडी 5 के साथ हैश नए पासवर्ड और फिर SHA-512/नमक, इसलिए उन्हें पुराने पासवर्ड के समान माना जा सकता है।

प्रोग्रामेटिक रूप से, मुझे नहीं लगता कि यह एक समस्या होगी, लेकिन मुझे यह जानने के लिए एन्क्रिप्शन/हैशिंग के बारे में पर्याप्त जानकारी नहीं है कि क्या मैं किसी भी तरह से हैश की गुणवत्ता समझौता कर रहा हूं, SHA-512/नमक हैश एक पासवर्ड है जो पहले ही एमडी 5 थाश किया गया था। मेरा पहला वृत्ति यह है कि यदि कुछ भी हो, तो यह भी मजबूत होगा, एक बहुत ही हल्की कुंजी खींचती है।

मेरी दूसरी प्रवृत्ति यह है कि मुझे वास्तव में पता नहीं है कि मैं किस बारे में बात कर रहा हूं, इसलिए मुझे सलाह मिल जाएगी। कोई विचार?

+0

एसएचए -512 एमडी 5 पर बहुत कम सुधार प्रदान करेगा (उदाहरण: 'एमडी 5 (नमक + पासवर्ड) 'व्यावहारिक रूप से' SHA512 (नमक + पासवर्ड) 'के बराबर है)। एमडी 5 और एसएचए परिवार जैसे सामान्य उद्देश्य हैशिंग फ़ंक्शंस ** स्टोर नहीं किए गए ** ** ** नहीं थे। Bcrypt का प्रयोग करें। – NullUserException

+0

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

उत्तर

6

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

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

+0

यह एक अच्छा जवाब है। मुझे पहले इस प्रकार के समाधान को लागू किया गया है और यह करने का एक शानदार तरीका है। – jeffsix

+0

जब उपयोगकर्ता लॉग इन करता है तो पारदर्शी रूप से रीहैशिंग पर सुझाव के लिए धन्यवाद! क्या आपके पास कोई लिंक है जो बताता है कि एसडीए -512 हैश को एमडी 5-हैश वैल्यू में क्यों लागू करना SHA-512 हैश को सादा-पाठ पासवर्ड में लागू करने से कम सुरक्षित है? मुझे यह जानने में दिलचस्पी है कि क्यों ... –

+1

@JeremiahOrr: आपके विशिष्ट आवेदन के लिए, लंबे समय तक अप्रत्याशित नमक का उचित उपयोग हैशिंग योजना को बदलने से सुरक्षा के मामले में बहुत कुछ करेगा। जैसा कि जे 13आर ने समझाया, एमडी 5 पर एसएचए लागू करने से संभावित हैश की जगह फैल नहीं जाएगी, क्योंकि वे एमडी 5 के संभावित परिणामों से बाधित हैं। साथ ही, पासवर्ड के लिए विशेष रूप से अनुकूलित एक-तरफा फ़ंक्शन का उपयोग करना बेहतर होगा, उदाहरण के लिए [पीबीकेडीएफ 2] (http://en.wikipedia.org/wiki/PBKDF2)। – mensi

1

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

शायद एमडी 5 के साथ आपके नए पासवर्ड हैश और फिर आपके पासवर्ड हैशिंग लाइब्रेरी के साथ एमडी 5 हैश हैश। इस तरह, आप अपने पुराने पासवर्ड के साथ पिछड़ा संगतता बनाए रख सकते हैं।

आईई। password_hash (सभी वर्ष, md5'd पासवर्ड) और password_hash (md5 (नया पासवर्ड))

(चेतावनी: एक क्रिप्टोग्राफी विशेषज्ञ मैं नहीं कर रहा हूँ)

http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

+0

ओह, मैं अपनी खुद की हैशिंग लाइब्रेरी को पका नहीं चाहता हूं, मुझे बस यह जानने की जरूरत है कि मौजूदा एमडी 5-शेड पासवर्ड के साथ क्या करना है! –

+0

मैं कोई क्रिप्टोग्राफी विशेषज्ञ नहीं हूं लेकिन मैं मौजूदा एमडी 5 पासवर्ड पर पासवर्ड हैशिंग फ़ंक्शन चलाऊंगा। नए पासवर्ड के लिए, आप पहले पुराने एमडी 5 एल्गोरिदम करेंगे, फिर इसे उचित पासवर्ड हैशिंग फ़ंक्शन पर फ़ीड करें। वह, या आप किसी भी तरह से चिह्नित कर सकते हैं कि पासवर्ड डेटाबेस में पुराने या नए एल्गोरिदम का उपयोग कर रहा है (या आप जिस स्टोर को संग्रहीत कर रहे हैं)। – tangrs

+0

@tangrs उनके मूल पासवर्ड भी MD5 हैश किया गया है, यह पहले से ही सुरक्षित है। वह एसएचए -512 में नमक के साथ स्विच करना चाहता है जो अधिक सुरक्षित है। आप उसे दोगुना हैशिंग का सुझाव क्यों देंगे? यह अभी भी नए और पुराने पासवर्ड के बीच अंतर बताने के मुद्दे को हल नहीं करेगा। और हैश को दोगुना करने के लिए अस्पष्टता के माध्यम से सुरक्षा है, जो कि कोई सुरक्षा नहीं है, क्योंकि कोई भी नहीं जानता कि क्या चल रहा है और इसे कैसे बनाए रखा जाए। – Churk

4

आप पहली बार MD5 साथ हैश हैं, आपके पास केवल एमडी 5 (128 बिट) का प्रसार होगा। SHA512 की जगह का एक बड़ा हिस्सा आपके पासवर्ड द्वारा कवर नहीं किया जाएगा। तो आप SHA512 का लाभ नहीं लेते हैं, लेकिन यह MD5 से भी बदतर नहीं होगा।

आपको लाभ है कि अगर कोई SHA512 हैश प्राप्त करता है और नमक को नहीं जानता है (यह आपको किसी भी तरह से लागू करना है) हैश को नहीं देख सकता है और पासवर्ड प्राप्त कर सकता है - ऐसा कुछ जो संभव होगा आपके पास अब एमडी 5 डेटाबेस है।

तो हाँ, आप मौजूदा एमडी 5 पासवर्ड को फिर से हटा सकते हैं। लेकिन जैसा कि पहले अनुच्छेद में बताया गया है, एमडी 5 को सभी नए पासवर्डों पर भी लागू करना एक बुरा विचार होगा और फिर उन्हें SH512 के रूप में हैश करें। एक आसान कार्यान्वयन हैश के बगल में डेटाबेस में एक बुलियन 'नमकीन' फ़ील्ड होना चाहिए (लेकिन वहां नमक न डालें)।

+0

'लेकिन वहां नमक न डालें '- नमक का पूरा बिंदु यह है कि इसे गुप्त रखा जाना नहीं है और केवल धोए गए मूल्यों के बगल में सादे टेक्स्ट डाला जा सकता है (आपके पास पासवर्ड प्रति अद्वितीय हैश है!)। इसके अलावा: क्या यह किसी भी वास्तविक तथ्यों या केवल कुछ अंतर्ज्ञान के आधार पर "SHA-512 के साथ एमडी 5 पासवर्ड हैशिंग कोई नुकसान नहीं करेगा"? क्योंकि सामान्य रूप से अनुक्रम में कई हैंश लागू करने से अच्छे से अधिक नुकसान हो सकता है .. – Voo

+0

हैश फ़ंक्शन का बिंदु यह है कि यह एक परिवर्तनीय आकार स्ट्रिंग और कई एन बिट्स के बीच एक अद्वितीय मैपिंग प्रदान करता है। कोई भी अच्छा हैश फ़ंक्शन टकराव से बचाता है, और वास्तव में SHA-512 और यहां तक ​​कि MD5 पर टकराव का उत्पादन करना बेहद मुश्किल है (जब तक कि आपके मनमाने ढंग से लंबाई न हो, जिसे आप पासवर्ड में नहीं रखते हैं)। 512 बिट स्पेस में 128 बिट मान मैप करना मुश्किल है (आपके पास 2^(512-128) अप्रयुक्त मान हैं)। टकराव (जो नुकसान है) होने की संभावना बहुत कम है (संभाव्यता 2^(128-512))। – j13r

0

यदि आप देखते हैं कि अधिकांश बैंक और उच्च सुरक्षा वाले लोग पासवर्ड बदलते हैं।उनमें से ज्यादातर मूल रूप से उन लोगों से पूछते हैं जो एक नया पासवर्ड बनाने के लिए पुरानी एन्क्रिप्शन विधि का उपयोग कर रहे हैं। मुझे लगता है कि आप सभी मौजूदा पुराने एमडी 5 पासवर्ड उपयोगकर्ताओं पर झंडा लगाने का पहला समाधान है, और उन्हें सूचित करते हैं कि उन्हें नया पासवर्ड बनाने की आवश्यकता है और धीरे-धीरे उन्हें नए सिस्टम में माइग्रेट करना होगा। इस तरह जब आप कुछ भी गलत हो जाते हैं तो सिस्टम को शूट करने में परेशानी होती है तो आप यह नहीं पूछेंगे कि यह एक नया उपयोगकर्ता है या पुराना है। क्या हम डबल हैशिंग या सिंगल? किसी भी संभावित उत्तर के रूप में दो हैश की तुलना कभी नहीं करना चाहिए क्योंकि क्या होगा यदि MD5 ('abc') => 123, SHA ('NO') => 123, जिसका अर्थ है कि कोई गलत पासवर्ड में टाइप कर सकता था लेकिन अभी भी अंदर आता है।

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