आपका पासवर्ड सलाम करना: सर्वश्रेष्ठ अभ्यास?


162

मैं हमेशा उत्सुक रहा हूँ ... जो हैशिंग के लिए पासवर्ड को नमस्कार करते समय बेहतर है: उपसर्ग, या उपसर्ग? क्यों? या क्या यह मायने रखता है, जब तक आप नमक करते हैं?

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

तो कौन सी बेहतर विधि है, और क्यों? क्या कोई विधि है जो हैश टकराव की संभावना को कम करती है? मेरे Googling ने इस विषय पर एक अच्छा विश्लेषण नहीं किया है।

संपादित करें: महान जवाब दोस्तों! मुझे खेद है कि मैं केवल एक उत्तर दे सका। :)


1
इसे भी देखें: stackoverflow.com/questions/1645161/…
जाको

1
@ जॅको: भयानक इनपुट। धन्यवाद!
रैंडोल्फो

3
सबसे अच्छा अभ्यास एक क्रिप्टोग्राफिक फ़ंक्शन का उपयोग करना है जो आपके लिए salting करता है, या तो PBKDF2 (मानक), bcrypt या यहां तक ​​कि स्क्रीप्ट का उपयोग करके। इस ओर इशारा करने के लिए स्टीफन का धन्यवाद।
Maarten Bodewes

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

1
@Omu खराब सिफारिश। 1) SHA-1 का एक एकल पुनरावृत्ति बहुत तेज़ है, आपको कम से कम 10000 का उपयोग करना चाहिए, और यहां तक ​​कि बहुत कमजोर है। 2) डिफ़ॉल्ट नमक बहुत छोटा है। 8 बाइट न्यूनतम है और 16 अनुशंसित है।
कोडइन्कॉउंस

जवाबों:


111

उपसर्ग या प्रत्यय अप्रासंगिक है, यह केवल पासवर्ड में कुछ एन्ट्रापी और लंबाई जोड़ने के बारे में है।

आपको उन तीन चीजों पर विचार करना चाहिए:

  1. आपके द्वारा संग्रहीत प्रत्येक पासवर्ड के लिए नमक अलग होना चाहिए। (यह काफी आम गलतफहमी है।)
  2. क्रिप्टोग्राफिक रूप से सुरक्षित यादृच्छिक संख्या जनरेटर का उपयोग करें।
  3. लंबे समय तक पर्याप्त नमक चुनें। जन्मदिन की समस्या के बारे में सोचो।

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


4
मैंने एक पुराने प्रश्न का लिंक जोड़ा है, उन उत्तरों को पढ़ें। मूल रूप से, प्रति पासवर्ड एक अलग यादृच्छिक नमक का उपयोग न करके आप एक अनावश्यक सुरक्षा जोखिम उठा रहे हैं, जो भविष्य में एक वास्तविक समस्या हो सकती है।
जॉर्ज शॉली

39
साइट-वाइड यादृच्छिक नमक खराब है, क्योंकि एक हमलावर इंद्रधनुष तालिकाओं को रोक सकता है और आपके पूरे उपयोगकर्ता डेटाबेस को हड़प सकता है। यदि आप इसे नहीं समझते हैं, तो कृपया लॉगिन / सुरक्षा प्रणाली न लिखें :) - आपने प्रति उपयोगकर्ता लवण की आवश्यकता है।
snemarch

3
हां, प्रति उपयोगकर्ता नमक। आदर्श रूप से, प्रति-उपयोगकर्ता पुनरावृत्तियों को संग्रहीत किया जाता है (ताकि आप समय के साथ उपयोग किए जाने वाले पुनरावृत्तियों की संख्या बढ़ा सकें)। किसी भी सभ्य ढांचे में यह अंतर्निहित होगा। (.NET के पास PasswordDeriveBytes है जो आपके लिए सब कुछ संभाल लेगा।)
माइकलजी

2
यदि आप किसी भी प्रकार की सुरक्षा प्रणाली को डिजाइन कर रहे हैं, तो यह प्रति उपयोगकर्ता नमक का उपयोग नहीं करने का साहस करता है। आपकी साइट सुपर-दिलचस्प नहीं हो सकती है, लेकिन उपयोगकर्ताओं को कई साइटों पर एक ही पासवर्ड का उपयोग करने पर विचार करें ... डेटाबेस को सुरक्षित रखने की कोशिश करना विफल हो जाता है :)
Snemarch

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

27

मुझे लगता है कि यह सब शब्दार्थ है। बहुत विशिष्ट खतरे वाले मॉडल के अलावा इसे रखने से पहले या बाद में कोई फर्क नहीं पड़ता।

तथ्य यह है कि यह वहाँ इंद्रधनुष तालिकाओं को हराने के लिए माना जाता है।

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

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

जैसा मैंने कहा। यह शब्दार्थ है। प्रति पासवर्ड, एक लंबा नमक, और प्रतीकों और ASCII कोड की तरह इसमें अजीब अक्षर शामिल करें: © ¤¡


@onebyone, अरे! उन्होंने 'पासवर्डसाल्ट' के मेरे नमक की खोज की है!
शमूएल

6
@ सैमुअल: मैं आप लोगों के बारे में नहीं जानता, लेकिन हम अपने नमक के लिए '12345' का इस्तेमाल करते हैं। :)
रैंडोल्फो

@onebyone वैध है। मुझे वास्तव में "आम" के रूप में "वर्णक Y में लंबाई X के तहत सभी लवण" जहां X, Y उचित हैं; 20 वर्ण और अल्फ़ान्यूमेरिक ऊपरी / निचला हिस्सा। लंबाई के तहत सभी हेक्साडेसिमल स्ट्रिंग्स जेड (160 का कहना है) कहने के लिए, क्योंकि मुझे लगता है कि हैश हैश की एक इंद्रधनुष तालिका उपयोगी होगी ..
टॉम रिटर

1
@ रैंडोल्फो: अरे, यह मेरा नमक है! क्या हालात हैं?
एड्रियन

और सुनिश्चित करें कि नमक गैर-पूर्वानुमान योग्य / यादृच्छिक है: stackoverflow.com/questions/1645161/…
जैको

18

असली जवाब, जिसे किसी ने छुआ तक नहीं, लगता है कि दोनों गलत हैं । यदि आप अपने स्वयं के क्रिप्टो को लागू कर रहे हैं, तो कोई फर्क नहीं पड़ता कि आप कितना हिस्सा सोचते हैं कि आप क्या कर रहे हैं, आप गलतियाँ करने जा रहे हैं

HMAC एक बेहतर दृष्टिकोण है, लेकिन फिर भी यदि आप SHA-1 जैसी किसी चीज़ का उपयोग कर रहे हैं, तो आपने पहले ही एक एल्गोरिथ्म चुन लिया है, जो गति के लिए डिज़ाइन के कारण पासवर्ड हैशिंग के लिए अनुपयुक्त है। Bcrypt या संभवतः scrypt जैसी किसी चीज़ का उपयोग करें और समस्या को अपने हाथों से पूरी तरह से बाहर निकालें

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


1
आखिरी पैराग्राफ के बारे में: हमलावर किसी भी चरित्र की सटीक संख्या के बारे में कोई जानकारी कैसे प्राप्त कर सकता है जो तुलना में विफल रही है? यह कोई मतलब नहीं .. बनाता है
halloweenlv

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

9

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


1
हैश टकराव हैश के आकार पर निर्भर करता है। जन्मदिन की समस्या के लिए धन्यवाद टकराव काफी संभावना है।
जॉर्ज शॉली

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

7

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

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


2
गलत awser: एक हमलावर कई बार उपयोग किए जाने वाले पासवर्ड के लिए एमडी (पास) को पूर्ववर्ती कर सकता है और फिर एमडी (पास + नमक) की गणना बहुत सस्ते में कर सकता है क्योंकि संदेश एक वृद्धिशील तरीके से काम को पचता है ताकि स्ट्रीमिंग का समर्थन किया जा सके।
एरवान लेग्रैंड

5

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

आपको पासवर्ड लुकअप टेबल, इंद्रधनुष या अन्यथा हैश के बारे में चिंतित होना चाहिए।

@ Onebyone.livejournal.com:

हमलावर में 'इंद्रधनुष सारणी' होती है, जिसमें शब्दकोषों की हैश नहीं होती, बल्कि हैश गणना को अंतिम रूप देने से पहले हैश गणना की स्थिति होती है।

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

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

इसके अलावा पीबीकेडीएफ जैसे पासवर्ड हैशिंग एल्गोरिदम कई बार अपने हैश फ़ंक्शन की रचना करते हैं (यह न्यूनतम 1000 बार पीबीकेडीएफ -2 को पुनरावृत्त करने की सिफारिश की गई है, प्रत्येक हमले SHA-1 को लागू करने वाला) इस हमले को दोगुना अव्यवहारिक बनाता है।


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

4

यदि मंच प्रदाता है तो BCrypt हैश । मैं प्यार करता हूँ कि आप कैसे लवण बनाने के बारे में चिंता नहीं करते हैं और यदि आप चाहते हैं तो आप उन्हें और भी मजबूत बना सकते हैं।


3
जैसा कि मुझे पता है कि बीसीक्रिप्ट हैश को किसी भी अन्य हैशिंग योजना की तरह ही सलाटिंग की जरूरत है।
जैको

2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.