इस लेख में
bcrypt क्या है?
bcrypt एक अनुकूली पासवर्ड हैशिंग फ़ंक्शन है, जिसे 1999 में Niels Provos और David Mazieres ने डिज़ाइन किया था। Blowfish सिफर पर आधारित bcrypt, रेनबो टेबल हमलों से बचाने के लिए एक साल्ट और एक कॉन्फ़िगर करने योग्य कॉस्ट फ़ैक्टर (वर्क फ़ैक्टर) शामिल करता है, जो यह नियंत्रित करता है कि हैश की गणना कितनी कम्प्यूटेशनल रूप से महँगी होगी। इससे bcrypt जानबूझकर धीमा हो जाता है — और यही धीमापन इसकी मुख्य सुरक्षा विशेषता है।
MD5 या SHA-256 जैसे तेज़ हैश फ़ंक्शन (जो डेटा अखंडता के लिए बने हैं) के विपरीत, bcrypt विशेष रूप से पासवर्ड भंडारण के लिए डिज़ाइन किया गया है। इसकी अनुकूली प्रकृति का अर्थ है कि हार्डवेयर तेज़ होने पर समय के साथ कॉस्ट फ़ैक्टर बढ़ाया जा सकता है, जिससे आधुनिक कंप्यूटिंग शक्ति के साथ भी ब्रूट-फ़ोर्स हमले अव्यावहारिक बने रहते हैं।
bcrypt कैसे काम करता है
एक bcrypt हैश में किसी पासवर्ड को सत्यापित करने के लिए ज़रूरी सारी जानकारी एक ही स्ट्रिंग में समाई होती है। इसका फ़ॉर्मैट $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy है, जहाँ हर हिस्से का एक विशिष्ट अर्थ होता है।
- $2b$ — एल्गोरिदम पहचानकर्ता, जो bcrypt संस्करण 2b (वर्तमान अनुशंसित संस्करण) दर्शाता है
- 10$ — कॉस्ट फ़ैक्टर (2^10 = कुंजी व्युत्पत्ति फ़ंक्शन के 1024 राउंड)
- N9qo8uLOickgx2ZMRZoMye — 22-अक्षर वाला Base64-एन्कोडेड साल्ट (128 बिट की रैंडमनेस)
- IjZAgcfl7p92ldGxad68LJZdL17lhWy — 31-अक्षर वाला Base64-एन्कोडेड हैश आउटपुट
निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं
bcrypt हैश बनाएँ →सही कॉस्ट फ़ैक्टर चुनना
कॉस्ट फ़ैक्टर (जिसे राउंड या वर्क फ़ैक्टर भी कहा जाता है) यह तय करता है कि bcrypt आंतरिक रूप से कितनी पुनरावृत्तियाँ करता है। हर वृद्धि गणना समय को दोगुना कर देती है। 10 का कॉस्ट फ़ैक्टर का मतलब है 2^10 = 1024 पुनरावृत्तियाँ; 12 का कॉस्ट फ़ैक्टर का मतलब है 2^12 = 4096 पुनरावृत्तियाँ — जो 10 से चार गुना धीमा है।
लक्ष्य यह है कि हैशिंग इतनी धीमी हो कि ब्रूट-फ़ोर्स हमलों को रोका जा सके, लेकिन इतनी तेज़ भी हो कि लॉगिन के दौरान उपयोगकर्ता अनुभव खराब न हो। अधिकांश सुरक्षा विशेषज्ञ प्रोडक्शन ऐप्लिकेशन के लिए 10 और 12 के बीच का कॉस्ट फ़ैक्टर सुझाते हैं।
- कॉस्ट 10 — लगभग 100ms में हैश होता है; अधिकांश वेब ऐप्लिकेशन के लिए अच्छा आधार
- कॉस्ट 12 — लगभग 300-400ms में हैश होता है; बैंकिंग या हेल्थकेयर जैसे उच्च-सुरक्षा ऐप्लिकेशन के लिए अनुशंसित
- कॉस्ट 14+ — 1 सेकंड या उससे अधिक में हैश होता है; इंटरैक्टिव लॉगिन के लिए आमतौर पर बहुत धीमा, लेकिन प्रशासनिक खातों या कुंजी व्युत्पत्ति के लिए उपयुक्त हो सकता है
bcrypt बनाम अन्य हैशिंग एल्गोरिदम
सभी हैशिंग एल्गोरिदम पासवर्ड भंडारण के लिए उपयुक्त नहीं होते। MD5 और SHA-256 जैसे तेज़ हैश फ़ंक्शन आधुनिक GPU पर प्रति सेकंड अरबों हैश की गणना कर सकते हैं, जिससे वे ब्रूट-फ़ोर्स हमलों के प्रति असुरक्षित हो जाते हैं। bcrypt, scrypt और Argon2 जैसे पासवर्ड-विशिष्ट फ़ंक्शन जानबूझकर धीमे होते हैं।
- MD5/SHA-256 — गति के लिए बने हैं, पासवर्ड सुरक्षा के लिए नहीं; GPU पर प्रति सेकंड अरबों हैश की दर से ब्रूट-फ़ोर्स किए जा सकते हैं; पासवर्ड के लिए कभी उपयोग न करें
- bcrypt — CPU-हार्ड, 1999 से आज़माया-परखा, हर प्रमुख प्रोग्रामिंग भाषा में व्यापक रूप से समर्थित; पासवर्ड हैशिंग के लिए डिफ़ॉल्ट अनुशंसा
- Argon2 — 2015 में Password Hashing Competition जीता; मेमोरी-हार्ड (bcrypt से बेहतर GPU हमलों का प्रतिरोध करता है); यदि लाइब्रेरी समर्थन उपलब्ध हो तो नए प्रोजेक्ट के लिए अनुशंसित
आम उपयोग के मामले
bcrypt का उपयोग हर उस जगह होता है जहाँ पासवर्ड को सुरक्षित रूप से संग्रहीत करना ज़रूरी हो। हैश-फिर-सत्यापित वर्कफ़्लो इसका मानक पैटर्न है।
- उपयोगकर्ता पंजीकरण — पासवर्ड को डेटाबेस में संग्रहीत करने से पहले bcrypt से हैश करें; प्लेनटेक्स्ट पासवर्ड कभी संग्रहीत न करें
- लॉगिन सत्यापन — सबमिट किए गए पासवर्ड को उसी साल्ट और कॉस्ट फ़ैक्टर के साथ हैश करें, फिर स्थिर-समय तुलना फ़ंक्शन का उपयोग करके इसकी तुलना संग्रहीत हैश से करें
- पासवर्ड माइग्रेशन — MD5/SHA से bcrypt में अपग्रेड करते समय, अगले सफल लॉगिन पर पासवर्ड को दोबारा हैश करें; उन खातों को चिह्नित करें जो अभी भी पुराने हैश फ़ॉर्मैट का उपयोग करते हैं
अक्सर पूछे जाने वाले सवाल
क्या मैं पासवर्ड रीसेट किए बिना कॉस्ट फ़ैक्टर बदल सकता हूँ?
हाँ। हर सफल लॉगिन पर जाँचें कि संग्रहीत हैश किसी पुराने कॉस्ट फ़ैक्टर का उपयोग करता है या नहीं। यदि हाँ, तो पासवर्ड (जो लॉगिन के दौरान आपके पास प्लेनटेक्स्ट में होता है) को नए कॉस्ट फ़ैक्टर के साथ दोबारा हैश करें और डेटाबेस अपडेट करें। इसे अवसरवादी रीहैशिंग कहते हैं और यह पासवर्ड रीसेट के लिए मजबूर किए बिना क्रमिक माइग्रेशन की अनुमति देता है।
मैं किसी पासवर्ड को bcrypt हैश के विरुद्ध कैसे सत्यापित करूँ?
bcrypt हैश स्ट्रिंग में एल्गोरिदम संस्करण, कॉस्ट फ़ैक्टर और साल्ट होता है। सत्यापन फ़ंक्शन इन्हें निकालता है, उम्मीदवार पासवर्ड को उन्हीं पैरामीटर के साथ हैश करता है, और टाइमिंग हमलों से बचने के लिए स्थिर-समय तुलना का उपयोग करके परिणामों की तुलना करता है। Node.js में bcrypt.compare() का उपयोग करें; Python में bcrypt.checkpw() का।
क्या मुझे bcrypt का उपयोग करना चाहिए या Argon2 का?
दोनों ही बेहतरीन विकल्प हैं। bcrypt 25 वर्षों से आज़माया-परखा है और इसे सार्वभौमिक लाइब्रेरी समर्थन प्राप्त है। Argon2 नया है, मेमोरी-हार्ड है (GPU हमलों के प्रति बेहतर) और इसने Password Hashing Competition जीता है। नए प्रोजेक्ट के लिए, यदि आपका प्लेटफ़ॉर्म इसका अच्छा समर्थन करता है तो Argon2id अनुशंसित विकल्प है। मौजूदा प्रोजेक्ट के लिए, कॉस्ट फ़ैक्टर 10 या उससे अधिक के साथ कॉन्फ़िगर किए जाने पर bcrypt पूरी तरह सुरक्षित बना रहता है।