साधारण हार्डवेयर पर एक पासवर्ड की कीमत
यहाँ आँकड़ों के पेज पासवर्ड से सुरक्षित किए जा सकते हैं। इस पासवर्ड को हैश करना इस सेवा का अकेला ऐसा काम है, जिसे धीमा होना ही चाहिए — इसी से चुराए गए हैश पर हमला महँगा पड़ता है। सवाल यह है कि इस हार्डवेयर पर कितना धीमा।
इस वेबसाइट को चलाने वाली मशीन पर, PHP 8 के साथ मापा गया:
PASSWORD_DEFAULT | 560 ms | (यानी cost 12) |
| cost 12 | 595 ms | |
| cost 11 | 277 ms | |
| cost 10 | 138 ms |
bcrypt का cost पैरामीटर एक घातांक है: हर कदम पर काम दोगुना हो जाता है। माप ठीक यही दोगुनापन दिखाते हैं, जो इस बात का अच्छा संकेत है कि बीच में कुछ और दखल नहीं दे रहा।
यहाँ डिफ़ॉल्ट गलत विकल्प क्यों है
PHP ने bcrypt की डिफ़ॉल्ट cost 10 से बढ़ाकर 12 कर दी। डेस्कटॉप-स्तर के सर्वर पर यह समझदारी भरा अपग्रेड है — बस कुछ दसियों मिलीसेकंड का मामला। साधारण हार्डवेयर पर इसका मतलब है आधे सेकंड से ज़्यादा का शुद्ध CPU समय, उस मशीन पर जो उसी समय बाकी सबके लिए काउंटर इमेज भी बना रही होती है।
हर लॉग इन पर आधा सेकंड अपने आप में बुरा है। न्योते के रूप में यह और भी बुरा है: लॉग इन एंडपॉइंट को कोई भी कॉल कर सकता है, और हर कॉल उस CPU के 560 ms खर्च करती है जो पूरी वेबसाइट चलाता है। इससे पासवर्ड की जाँच डिनायल-ऑफ़-सर्विस हमले का सबसे सस्ता उपलब्ध रास्ता बन जाती है।
इसलिए cost को डिफ़ॉल्ट पर छोड़ने के बजाय 10 पर तय किया गया है। यह जान-बूझकर उससे कमज़ोर है जो PHP अब चुनता है, और इसे छिपाने के बजाय साफ़-साफ़ कहना चाहिए: cost-10 हैश पर हमला cost-12 हैश की तुलना में चार गुना सस्ता है। इसकी भरपाई इस बात से होती है कि पासवर्ड असल में किस चीज़ की रक्षा करता है — विज़िट की गिनती वाले एक पेज की दृश्यता की, किसी खाते, पैसे या पहचान की नहीं। इसके पीछे कब्ज़ा करने लायक कुछ नहीं है।
वह हिस्सा जो आसानी से छूट जाता है
PASSWORD_DEFAULT का मान जान-बूझकर बदलता रहता है। सालों पहले लिखा गया कोड, जो इसका इस्तेमाल करता है, हर PHP अपग्रेड के साथ चुपचाप धीमा होता जाएगा — वही सोर्स, वही इनपुट, और कई गुना ज़्यादा समय। यही अपेक्षित व्यवहार है, और ज़्यादातर सॉफ़्टवेयर के लिए यह सही है।
यह सिर्फ़ तब गलत है जब मशीन इसे झेल न सके, और जब वह नहीं झेल पाती, तब कोई चेतावनी नहीं मिलती। अपग्रेड सफल होता है, टेस्ट पास हो जाते हैं, पेज अब भी चलता है। बस उसमें आधा सेकंड ज़्यादा लगता है, और कोई उस संख्या को तब तक नहीं देखता, जब तक जाकर उसे मापे नहीं।