जब कोई वेबसाइट आपसे कहती है कि आपका पासवर्ड तोड़ने में तीस लाख साल लगेंगे, तो वह वाक्य का सबसे ज़रूरी हिस्सा गोल कर रही होती है। सही सवाल यह नहीं है कि कितना समय लगेगा। सवाल यह है कि किसके ख़िलाफ़ कितना समय लगेगा।
और किसके ख़िलाफ़ — इसका जवाब आप तय नहीं करते। वह उस ऑनलाइन दुकान के किसी डेवलपर ने तय किया था जहाँ से आपने 2019 में जूते ख़रीदे थे, उस दिन जब उसने चुना कि आपका पासवर्ड डेटाबेस में किस तरह रखा जाएगा। बीस अक्षरों की वही एक स्ट्रिंग आपने दोनों साइटों पर लिखी थी। एक जगह वह सदियों टिकती है, दूसरी जगह शाम की चाय से पहले गिर जाती है।
समीकरण में जो संख्या गायब है
ब्रूट फ़ोर्स हमला मामूली-सा गणित है: कितने उम्मीदवार आज़माने पड़ेंगे, बटा कितने उम्मीदवार आप हर सेकंड आज़मा सकते हैं। पहला हिस्सा आपके पासवर्ड पर निर्भर है — उसकी लंबाई, उसकी वर्णमाला, वह किसी शब्दकोश में है या नहीं। दूसरे हिस्से का आपसे रत्ती भर लेना-देना नहीं है।
दूसरा हिस्सा दो चीज़ों पर निर्भर करता है: हमलावर का हार्डवेयर और, सबसे बढ़कर, वह फ़ंक्शन जिससे साइट ने आपके पासवर्ड को उस अंडबंड लकीर में बदलकर अपनी यूज़र टेबल में डाल दिया। उस फ़ंक्शन को hash कहते हैं, और सबका हिसाब लगाने की क़ीमत एक-सी नहीं होती।
MD5 और SHA-1 तेज़ होने के लिए ही बनाए गए थे। यह ख़ूबी है: ये सामान्य इस्तेमाल के hash फ़ंक्शन हैं, संदेशों का सार निकालने और अखंडता जाँचने के लिए, और वहाँ आप यही चाहते हैं कि पूरा गीगाबाइट इतनी जल्दी निपट जाए कि आपको चाय बनाने उठने का मौक़ा भी न मिले। जब कोई इन्हें पासवर्ड सहेजने में इस्तेमाल करता है, तभी वह ख़ूबी मुसीबत बन जाती है। जो फ़ंक्शन आप हर सेकंड लाखों बार गिन सकते हैं, वह ऐसा फ़ंक्शन है जिसे हमलावर भी हर सेकंड लाखों बार गिन सकता है — और उसके पास ग्राफ़िक्स कार्ड हैं और पूरा वीकेंड भी।
bcrypt और Argon2 ठीक उल्टे मक़सद से बनाए गए। ये जान-बूझकर धीमे हैं, और — यही सबसे सुंदर बात है — इनका धीमापन घटाया-बढ़ाया जा सकता है। Niels Provos और David Mazières ने 1999 में bcrypt को ऐसे शीर्षक के साथ पेश किया था जो सब कह देता है: A Future-Adaptable Password Scheme। सोच यह थी कि जैसे-जैसे हार्डवेयर सस्ता हो, वैसे-वैसे फ़ंक्शन को महँगा किया जा सके। Argon2, जिसने 2015 में Password Hashing Competition जीती, एक पेच और जोड़ता है: उसकी क़ीमत सिर्फ़ समय में नहीं, मेमोरी में भी चुकानी पड़ती है — और मेमोरी ही वह चीज़ है जिसे लुटाने में GPU सबसे कम उदार हैं।
तेज़ hash और ढंग से कॉन्फ़िगर किए गए धीमे hash के बीच का फ़र्क़ कुछ फ़ीसदी का नहीं है। वह मैग्नीट्यूड के ऑर्डर का है। कई ऑर्डर का।
बेंचमार्क मौजूद हैं, और सार्वजनिक हैं
इसमें कुछ भी क़यास नहीं है। Hashcat — वह औज़ार जिससे आधी दुनिया पासवर्ड तोड़ती है, अच्छे लोग भी — एक बेंचमार्क मोड के साथ आता है जिसे कोई भी अपनी मशीन पर चला सकता है और जो एल्गोरिद्म-दर-एल्गोरिद्म नापता है कि हर एक को हर सेकंड कितनी बार गिना जा सकता है। जब भी कोई नई GPU आती है, समुदाय ये तालिकाएँ छाप देता है।
इन तालिकाओं में दिलचस्प कोई एक ख़ास आँकड़ा नहीं है — वह तो हार्डवेयर की हर पीढ़ी के साथ बासी हो जाता है — दिलचस्प है पंक्तियों के बीच की दूरी। सूची को रफ़्तार से छाँटिए और सबसे ऊपर MD5 दिखेगा, अपने ही किसी अलग ग्रह पर। नीचे उतरते जाइए, उतरते जाइए, और तालिका की तह में bcrypt और Argon2 मिलेंगे, ऐसे आँकड़ों के साथ जिनकी ऊपर वालों से कोई शक्ल ही नहीं मिलती। पासवर्ड वही है। GPU वही है। बदला सिर्फ़ इतना है कि साइट ने उसे सहेजने का क्या तरीक़ा चुना।
इसीलिए किस hash के ख़िलाफ़ — यह बताए बिना “तीस लाख साल” कहना मार्केटिंग है, माप नहीं। यह ऐसे ही है जैसे विज्ञापन दिया जाए कि आपकी कार वहाँ पहुँचने में छह घंटे लेती है, और मंज़िल का नाम ही न लिया जाए।
ऑफ़लाइन और ऑनलाइन: दो दुनियाएँ जो कभी नहीं मिलतीं
एक दूसरा फ़र्क़ भी है जो शायद ही कोई समझाता है और जो नतीजा उतनी ही बेरहमी से बदल देता है।
ऑनलाइन हमले में हमलावर लॉगिन फ़ॉर्म पर पासवर्ड आज़माता है, जैसे कोई भी यूज़र आज़माएगा। रफ़्तार उसका हार्डवेयर तय नहीं करता: सर्वर तय करता है। कोशिशों की सीमा हो सकती है, कुछ देर के लिए ताला लग सकता है, captcha आ सकता है, दो अनुरोधों के बीच देरी लग सकती है, एक ही पते से हज़ार नाकाम कोशिशें दिखते ही अलर्ट जा सकता है। ठीक-ठाक बचाव वाली साइट के ख़िलाफ़ ऑनलाइन हमला धीमा है, शोर मचाता है और बहुत बेवक़ूफ़ी भरा है। हमलावर के लिए गणित इतना ख़राब बैठता है कि शुद्ध ब्रूट फ़ोर्स कोई आज़माता ही नहीं: वही चार घिसे-पिटे पासवर्ड लाखों अकाउंट पर ठोक दिए जाते हैं, और वह अलग खेल है।
ऑफ़लाइन हमले में डेटाबेस का पूरा डंप हमलावर के हाथ पहले से है। वह उसे घर उठा ले जाता है। वहाँ न सर्वर है, न कोशिशों की कोई सीमा, न कोई देखने वाला: वहाँ उसके ग्राफ़िक्स कार्ड हैं और उसका बिजली का बिल है। वह महीनों आज़माता रह सकता है और किसी को कानोंकान ख़बर नहीं होगी, और सही जवाब मिल जाने का पता भी उसे ख़ुद ही चल जाएगा, hash आपस में मिलाकर। यहीं सब कुछ hash तय करता है, क्योंकि उसे रोकने वाली अक्षरशः इकलौती चीज़ hash ही है।
और संभावनाओं के बारे में ईमानदार रहना चाहिए: ऑफ़लाइन वाला परिदृश्य कोई अजूबा नहीं है। जब भी कोई डेटाबेस लीक होता है, यही होता है। 2012 में जब LinkedIn का डेटाबेस लीक हुआ, तो लीक हुए डंप के विश्लेषण से पता चला कि वह पासवर्ड SHA-1 से बिना salt के सहेजता था: एक तेज़ hash, और वह भी उस सामग्री के बिना जो तालिकाएँ पहले से गिन रखने से रोकती है। इतने पासवर्डों का इतनी तेज़ी से टूटना सिर्फ़ इसलिए नहीं हुआ कि यूज़रों ने ख़राब पासवर्ड चुने थे। वह सबसे बढ़कर इंजीनियरिंग का एक फ़ैसला था, जिसे किसी यूज़र ने कभी देखा तक नहीं।
हम यहाँ क्या करते हैं, और क्यों बताते हैं
हमारा चेकर हर सेकंड 10¹² कोशिशें, ऑफ़लाइन, एक तेज़ hash के ख़िलाफ़ मानकर चलता है। यह बात नतीजे के ठीक नीचे उसी पन्ने पर लिखी है, और सजावटी पारदर्शिता के लिए नहीं: उस आँकड़े के बिना, जो समय वह आपको दिखाता है उसका कोई मतलब ही नहीं है।
यह जान-बूझकर सबसे बुरा हाल है। हम मान लेते हैं कि डेटाबेस लीक हो चुका है, कि हमलावर के पास संजीदा हार्डवेयर है, कि साइट ने आपका पासवर्ड वाजिब हद तक सबसे घटिया तरीक़े से सहेजा है, और यह भी कि उसे आपकी वर्णमाला और आपकी लंबाई पता है। अगर साइट ने ढंग से कॉन्फ़िगर किया bcrypt इस्तेमाल किया, तो असली आँकड़ा कई ऑर्डर ऊपर चला जाता है और आपका पासवर्ड हमारे बताए समय से कहीं ज़्यादा टिकता है।
हमें ग़लती इसी तरफ़ करना मंज़ूर है। जो चेकर आपको शाबाशी देता है, वह असल में ख़ुद अपनी पीठ थपथपा रहा होता है।
असहज नतीजा
आपके पासवर्ड का कोई एक टूटने का समय नहीं होता। उसका हर उस साइट के लिए अलग समय होता है जहाँ आपने उसे इस्तेमाल किया, और वह समय ऐसे लोग तय करते हैं जिन्हें आप जानते नहीं, ऐसे मानकों से जो वे छापते नहीं।
इससे दो बातें निकलती हैं, और वे वही पुरानी बातें हैं। पहली: चूँकि hash आपके बस में नहीं है, इसलिए एंट्रॉपी को बस में रखिए — समीकरण का यही आधा हिस्सा सचमुच आपका है, और इसीलिए जनरेटर आपको बिट दिखाता है, कोई मीठा-सा प्रतिशत नहीं। दूसरी, और ज़्यादा अहम: अगर हर साइट का अपना पासवर्ड है, तो जिसने उसे MD5 में सहेजा था वह सिर्फ़ उसी एक साइट वाला पासवर्ड लुटा सकता है।
क्योंकि कमज़ोर कड़ी आपका पासवर्ड नहीं है। कमज़ोर कड़ी वह सबसे घटिया साइट है जहाँ आपने उसे लिखा।
स्रोत: hashcat के सार्वजनिक बेंचमार्क (hashcat -b), जिन्हें कोई भी देख और
दोहरा सकता है · N. Provos और D. Mazières, “A Future-Adaptable Password Scheme”,
USENIX, 1999 · Password Hashing Competition, जिसे 2015 में Argon2 ने जीता ·
password.es के चेकर में घोषित ख़तरे का मॉडल: 10¹² कोशिशें/सेकंड, ऑफ़लाइन, तेज़
hash · LinkedIn की 2012 की सेंध: कंपनी ने लीक की पुष्टि की, और बिना salt के
SHA-1 के इस्तेमाल की बात प्रकाशित डंप के विश्लेषण से स्थापित हुई।