bcrypt की 72-बाइट सीमा हर भाषा के लिए अलग असर डालती है। देवनागरी का एक अक्षर UTF-8 में आमतौर पर 3 बाइट लेता है, यानी हिंदी में पासवर्ड की व्यावहारिक सीमा 72 नहीं बल्कि लगभग 24 अक्षर है। और मात्राओं व संयुक्ताक्षरों (जैसे "क्ष", "ज्ञ") को जोड़ने वाले अतिरिक्त कोडपॉइंट्स इसे और कम कर देते हैं — यानी एक सामान्य हिंदी पासफ़्रेज़ लैटिन पासवर्ड से कहीं जल्दी इस सीमा तक पहुँच सकता है।
स्पीड पासवर्ड सिक्योरिटी को नुक़सान क्यों पहुँचाती है
अगर कोई अटैकर पासवर्ड हैश का डेटाबेस चुरा लेता है, तो वह ब्रूट-फ़ोर्स से ओरिजिनल पासवर्ड निकालने की कोशिश करता है। SHA-256 जैसे तेज़ फ़ंक्शन के साथ मॉडर्न हार्डवेयर एक सेकंड में अरबों कॉम्बिनेशन जाँच सकता है। bcrypt जानबूझकर एक हैश में लगभग 100 मिलीसेकंड लगाता है, जिससे ब्रूट-फ़ोर्स कई गुना धीमा और महँगा हो जाता है।
Cost factor क्या है
Bcrypt का "cost" पैरामीटर इंटरनल राउंड की संख्या को 2 की घात (2^cost, आमतौर पर 10-12) के तौर पर तय करता है। इसे एक बढ़ाने पर हैशिंग का समय लगभग दोगुना हो जाता है — और अटैकर की कुल ब्रूट-फ़ोर्स लागत भी दोगुनी हो जाती है।
बिल्ट-इन सॉल्ट
Bcrypt हर पासवर्ड के लिए अपने-आप एक यूनीक रैंडम सॉल्ट जनरेट करता है और उसे सीधे रिज़ल्ट में शामिल कर देता है — अलग से कुछ स्टोर करने की ज़रूरत नहीं। दो एक जैसे पासवर्ड अलग-अलग हैश देते हैं, और आम पासवर्ड के लिए पहले से बनी हैश टेबल (रेनबो टेबल) बेकार हो जाती है — हर हैश पर अलग से हमला करना पड़ता है।
यह किस काम आता है
- किसी ऐप्लिकेशन के डेटाबेस में यूज़र पासवर्ड सही तरीक़े से स्टोर करना।
- यह समझना कि SHA-256 या MD5 पासवर्ड हैशिंग के लिए बुरे विकल्प क्यों हैं।
- bcrypt इस्तेमाल करने वाले किसी ऑथेंटिकेशन सिस्टम को टेस्ट या माइग्रेट करना।
24 अक्षर, 72 नहीं
बाइट सीमा हर भाषा के लिए एक जैसी है — 72 बाइट्स — लेकिन उसमें कितने अक्षर समाएँगे यह लिपि पर निर्भर करता है। लैटिन में यह 72 अक्षर है, देवनागरी में UTF-8 की 3-बाइट एन्कोडिंग की वजह से लगभग एक-तिहाई। हिंदी-भाषी यूज़र बेस वाले ऐप्लिकेशन बनाते समय पासवर्ड की अधिकतम लंबाई तय करते हुए इसे ध्यान में रखना ज़रूरी है।