password••••••••Argon2id+salt + cost$argon2id$v=19$m=...$Tk7e...slow, memory-hard, one-way

पासवर्ड हैशिंग

11 मिनट पढ़ाक्रिप्टोग्राफी

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

संपूर्ण लेख का मुख्य भाग नीचे अंग्रेजी में दिया गया है।

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

यही सिद्धांत है। अभ्यास "विज्ञापित के रूप में काम करता है" से लेकर "प्लेनटेक्स्ट भी हो सकता है" तक होता है, जो इस पर निर्भर करता है कि कौन सा एल्गोरिदम और पैरामीटर चुने गए हैं।

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

    एल्गोरिदम जिन्हें आपको पासवर्ड भंडारण के लिए कभी भी उपयोग नहीं करना चाहिए: हार्डवेयर.

  • SHA-1, SHA-256. तेज़ क्रिप्टोग्राफ़िक हैश को अखंडता जांच के लिए डिज़ाइन किया गया है, पासवर्ड स्टोरेज के लिए नहीं। GPUs पर अरबों प्रति सेकंड की दर से क्रूर-बलपूर्वक।
  • एन्क्रिप्टेड पासवर्ड। हैशिंग उत्तर है; एन्क्रिप्शन नहीं है। एल्गोरिदम:

    • bcrypt (1999)। समायोज्य लागत कारक (गणना के दौर)। 72-बाइट पासवर्ड तक सीमित। मेमोरी-हार्ड नहीं है, इसलिए जीपीयू इस पर कुशलता से हमला कर सकता है - लेकिन एक उचित लागत कारक अभी भी हमलों को महंगा बनाता है। व्यापक परिनियोजन, सही ढंग से उपयोग करने में आसान।
    • scrypt (2009)। स्मृति-कठिन. कॉन्फ़िगर करने योग्य मेमोरी लागत, समानता, और सीपीयू लागत। बीक्रिप्ट से अधिक जटिल; कभी-कभी गलत कॉन्फ़िगर किया गया।
    • Argon2 (2015 पासवर्ड हैशिंग प्रतियोगिता विजेता)। तीन प्रकार: Argon2d (डेटा-निर्भर, GPU हमलों के लिए प्रतिरोधी लेकिन साइड चैनलों के प्रति संवेदनशील), Argon2i (डेटा-स्वतंत्र, साइड-चैनल प्रतिरोधी), Argon2id (हाइब्रिड - अनुशंसित डिफ़ॉल्ट)। आधुनिक, अच्छी तरह से परीक्षित, नए सिस्टम के लिए सही विकल्प। Practice

      बीक्रिप्ट में 10 के लागत कारक का मतलब आधुनिक हार्डवेयर पर लगभग 100 एमएस प्रति हैश है। लॉग इन करने वाले वैध उपयोगकर्ता के लिए, यह अदृश्य है। एक लीक हुए डेटाबेस से 100 मिलियन पासवर्ड को बलपूर्वक प्राप्त करने की कोशिश करने वाले एक हमलावर के लिए, एक उचित शब्दसूची के माध्यम से प्रति पास 100 मिलियन × 100 एमएस = 116 दिन का जीपीयू समय लगता है। प्रति उपयोगकर्ता एक अद्वितीय नमक के साथ संयुक्त, बड़ी इंद्रधनुष तालिकाएं बेकार हैं। पर्याप्त (यादृच्छिकता के 128 बिट्स)

    • नमक को हैश के साथ संग्रहित किया जाता है, गुप्त नहीं - इसका काम अद्वितीय होना है, छिपाना नहीं Extra

      A pepper एक साइट-व्यापी गुप्त मान हैश इनपुट में जोड़ा गया है, जो डेटाबेस से अलग संग्रहीत है (HSM, कुंजी वॉल्ट, या ऐप कॉन्फ़िगरेशन में)। यदि डेटाबेस डंप हो गया है लेकिन काली मिर्च नहीं है, तो उपयोगकर्ता नमक के साथ भी हैश अप्राप्य है - क्योंकि हमलावर के पास काली मिर्च नहीं है। काली मिर्च उच्च-मूल्य वाले सिस्टम के लिए एक उपयोगी बेल्ट-और-ब्रेसिज़ है।

      हैश को सुरक्षित रूप से अपग्रेड करना

      जब आप पैरामीटर बदलते हैं या एल्गोरिदम माइग्रेट करते हैं, तो आप मूल पासवर्ड के बिना दोबारा हैश नहीं कर सकते। मानक दृष्टिकोण:

      1. प्रत्येक उपयोगकर्ता रिकॉर्ड अपने वर्तमान हैश एल्गोरिदम, पैरामीटर, नमक और हैश को संग्रहीत करता है। पासवर्ड रीसेट किए बिना डेटाबेस नए मापदंडों में परिवर्तित हो जाता है। कमजोर पासवर्ड अच्छी तरह से हैश किए गए डेटाबेस से भी क्रैक हो जाते हैं; उपयोगकर्ता वह वेरिएबल है जिसे डेवलपर नियंत्रित नहीं कर सकता.

  • अक्सर पूछे जाने वाले प्रश्नों

    बीक्रिप्ट 72 अक्षरों तक सीमित क्यों है?
    अंतर्निहित ब्लोफिश सिफर का ऐतिहासिक कार्यान्वयन विवरण। लंबे इनपुट काट दिए जाते हैं. अधिकांश उपयोगकर्ता ध्यान नहीं देते; 16-वर्ण का यादृच्छिक पासफ़्रेज़ सीमा से बहुत नीचे है। असीमित पासवर्ड लंबाई चाहने वाले सिस्टम के लिए, Argon2 पर ऐसा कोई प्रतिबंध नहीं है।
    क्या मुझे अपने पासवर्ड में नमक और काली मिर्च डालनी चाहिए?
    नमक की आवश्यकता है (और कोई भी प्रतिष्ठित पुस्तकालय इसे स्वचालित रूप से करता है)। काली मिर्च वैकल्पिक है लेकिन उच्च सुरक्षा प्रणालियों के लिए मूल्यवान है। व्यापार-बंद: डेटाबेस के बाहर काली मिर्च को दीर्घकालिक रहस्य के रूप में प्रबंधित करना परिचालन जटिलता को जोड़ता है। अधिकांश ऐप्स नमक + हैश संग्रहीत करते हैं; सबसे बड़े लोग नमक + हैश + काली मिर्च-व्युत्पन्न हैश का भंडारण करते हैं।
    क्या Argon2 हमेशा bcrypt से बेहतर है?
    नई प्रणालियों के लिए, हाँ। Argon2 मेमोरी-हार्ड (GPU/ASIC के लिए प्रतिरोधी) है, इसकी कोई 72-चार सीमा नहीं है, और इसने अच्छे कारणों से पासवर्ड हैशिंग प्रतियोगिता जीती है। जब Argon2 उपलब्ध नहीं होता है या संगठनात्मक बाधाएं पुराने मानक को प्राथमिकता देती हैं तो bcrypt अभी भी स्वीकार्य है। लागत ≥10 के साथ बीक्रिप्ट का उपयोग करने वाली विरासत प्रणालियों के लिए, माइग्रेट करने की तात्कालिकता कम है।
    पासवर्ड हैश करने में कितना समय लगना चाहिए?
    OWASP सर्वर के हार्डवेयर पर लगभग 100-500 एमएस का सुझाव देता है। तेज़ का अर्थ है हमलावरों के विरुद्ध कमज़ोर; धीमी गति वैध लॉगिन अनुभव को प्रभावित करना शुरू कर देती है। सही संख्या आपके ट्रैफ़िक पर निर्भर करती है - उच्च मात्रा वाली सेवाएँ कम लागत चुनती हैं; कम लॉगिन दरों वाली उच्च-सुरक्षा सेवाएँ उच्चतर चुन सकती हैं।
    क्या मैं हैशेड के बजाय एन्क्रिप्टेड पासवर्ड स्टोर कर सकता हूं?
    नहीं। एन्क्रिप्शन प्रतिवर्ती है, जिसका अर्थ है कि एन्क्रिप्शन कुंजी ऐसी जगह मौजूद होनी चाहिए जहां एप्लिकेशन पहुंच सके। यदि डेटाबेस का उल्लंघन किया जाता है, तो कुंजी भी अक्सर होती है, और आपने प्रभावी रूप से सादा पाठ संग्रहीत कर लिया है। हैशिंग की अपरिवर्तनीयता ही मुद्दा है - यहां तक ​​कि आपका अपना एप्लिकेशन भी पासवर्ड को पुनर्प्राप्त नहीं कर सकता है, जो कि सुरक्षा संपत्ति है।
    पासवर्ड हैशिंग की व्याख्या: क्यों bcrypt, scrypt, और Argon2 मायने रखते हैं