password.es आपका पासवर्ड कहीं क्यों नहीं भेजता

प्रकाशित लेखक David Carrero

किसी वेब पेज पर “हम आपका पासवर्ड सेव नहीं करते” लिखने की क़ीमत उतनी ही है जितनी कुछ भी और लिखने की: शून्य। यह एक वाक्य है, गारंटी नहीं। जो सच बोल रहा है वह भी यही लिखता है और जो नहीं बोल रहा वह भी, और स्क्रीन के आपकी तरफ़ वाले हिस्से से दोनों बिल्कुल एक जैसे दिखते हैं।

यही दिक़्क़त उस हर वेबसाइट की जड़ में है जो आपसे पासवर्ड माँगती है ताकि उसका “विश्लेषण” कर सके। सेवा लाजवाब ही क्यों न हो — साफ़ कोड, नेक इरादे, भले लोग — आपके पास यह जानने का कोई तरीक़ा नहीं है। सर्वर एक बंद डिब्बा है। आप अपनी सबसे संवेदनशील चीज़ उसे भेज देते हैं और उम्मीद रखते हैं कि उस तरफ़ वही हो रहा है जो आपसे कहा गया था।

और एक बात जिस पर अक्सर ध्यान नहीं जाता: सेव न करने का वादा उस चीज़ से भी नहीं बचाता जो वादा करने वाले के हाथ में ही नहीं है। एक ईमानदार सर्वर पर भी वे लॉग हो सकते हैं जिन्हें किसी ने कभी देखा नहीं, बीच में कोई प्रॉक्सी, अपने आप चलता कोई बैकअप, कोई नया कर्मचारी, या बस एक बुरा दिन। पासवर्ड तो आपकी मशीन से निकल ही चुका। उसके बाद जो होता है वह आपकी पहुँच से बाहर है — और अक्सर उनकी भी।

वह इकलौता जवाब जिसमें कुछ मानना नहीं पड़ता

हल यह नहीं है कि वादा बेहतर किया जाए। हल यह है कि वह डेटा चाहिए ही न हो।

अगर आपका पासवर्ड ब्राउज़र से बाहर जाता ही नहीं, तो “वे उसका क्या करते हैं?” सवाल ही बेमानी हो जाता है। कोई “वे” है ही नहीं। न कोई सर्वर है जो उसे पाए, न लॉग जिनमें वह दिखे, न बैकअप जिसमें वह बैठा हो, न कोई कर्मचारी जो उसे पढ़ सके। भरोसे को बेहतर संभाला नहीं जाता: उसे सवाल से हटा दिया जाता है।

password.es ठीक यही करता है। चेकर आप जो लिखते हैं उसका विश्लेषण आपके ही ब्राउज़र में, आपके ही प्रोसेसर से करता है। आप जो टाइप करते हैं वह कहीं नहीं जाता, क्योंकि जाने के लिए कोई जगह ही नहीं है।

बेतरतीबी कहाँ से आती है

जनरेटर की सोच भी वही है। बेतरतीब पासवर्ड बनाने के लिए बेतरतीबी चाहिए, और वह दो जगह से मिल सकती है: सर्वर से माँगकर, या ब्राउज़र से माँगकर। सर्वर से माँगना बेतुका होता: पासवर्ड आपसे पहले सर्वर को पता होता।

तो हम ब्राउज़र से ही माँगते हैं, crypto.getRandomValues() के ज़रिए। यह क्रिप्टोग्राफ़िक बेतरतीबी के लिए वेब प्लैटफ़ॉर्म का मानक API है — जो बना ही इसी काम के लिए है, Math.random() के उलट, जो किसी खेल में पत्ते फेंटने भर के लिए ठीक है और ऐसी किसी चीज़ के लिए नहीं जिसे किसी दिलचस्पी रखने वाले के सामने टिकना हो। बेतरतीबी बनाने वाला ख़ुद आपका ब्राउज़र है, आपकी मशीन पर। इसमें हमारा कोई हिस्सा नहीं: नतीजा आपकी स्क्रीन पर आता है और वहीं रह जाता है।

मुझ पर भरोसा किए बिना इसे जाँचने का तरीका

यहाँ तक जो कुछ लिखा है, वह फ़िलहाल उन्हीं लोगों का लिखा पैराग्राफ़ है जिन्होंने यह साइट बनाई है। यानी: ठीक वही चीज़ जिस पर शक करने को मैं कह रहा था। तो मेरी बात मत मानिए। देख लीजिए।

अपने ब्राउज़र के डेवलपर टूल खोलिए — F12, या Mac पर Cmd+Option+Iनेटवर्क (Network) टैब पर जाइए, उसे खुला छोड़िए और चेकर में जाइए। पेज लोड होता दिखेगा। अब सूची साफ़ कीजिए, पासवर्ड वाले ख़ाने पर क्लिक कीजिए और लिखिए।

अब आपको यह दिखेगा, और यहाँ बेचने वाले की जगह सटीक होना ज़्यादा ज़रूरी है:

  • ख़ाने पर क्लिक करते ही एक रिक्वेस्ट जाती है। वह आपका पासवर्ड नहीं है — आपने अभी कुछ लिखा ही नहीं — वह विश्लेषण करने वाली लाइब्रेरी है, zxcvbn-_base.min.js नाम की एक फ़ाइल, जिसके भीतर शब्दों, नामों, कीबोर्ड के रास्तों और जाने-पहचाने पासवर्डों की वे सूचियाँ हैं जिनसे तुलना होती है। ख़ाने को छूते ही वह password.es से डाउनलोड होती है, ताकि आपके टाइप करते-करते तक पहुँच जाए। वह उसी डोमेन से आती है, एक स्टैटिक फ़ाइल है और इस पेज को खोलने वाले हर आदमी के लिए वही है — साइट पर भाषा के हिसाब से कई संस्करण हैं, और हिंदी वाला पेज साझा वाला (_base) उठाता है।
  • उसके बाद आप जो मर्ज़ी लिखिए, सूची जहाँ की तहाँ जमी रहती है। एक अक्षर, बीस, मिटाइए, दोबारा शुरू कीजिए, कोई लंबा टेक्स्ट चिपकाइए। शून्य रिक्वेस्ट। काउंटर हिलता तक नहीं। शब्दकोश आपके ब्राउज़र में पहले से है और खोज आपकी अपनी मशीन की मेमोरी में होती है।

पूरा फ़र्क़ इसी बात का है। बात यह नहीं कि आप भरोसा करें कि रिक्वेस्ट में आपका पासवर्ड नहीं गया: बात यह है कि रिक्वेस्ट है ही नहीं। न कुछ पढ़कर समझना है, न कोड समझना है; बस एक ऐसा काउंटर देखना है जो बढ़ता नहीं।

पूरी सूची, अपनी कमियों समेत

जब दलील ही “ख़ुद जाँच लीजिए” है, तो जाँचने पर जो मिलेगा उसे छिपाना अजीब होता। password.es का ईमानदार हिसाब:

कोई एनालिटिक्स नहीं है। न Google Analytics, न कोई कम शोर वाला विकल्प, न कोई पिक्सल। एक था, और उसे सारे पन्नों से हटा दिया गया। कोई कुकी नहीं है। साइट एक भी नहीं लिखती। हाँ, एक चीज़ आपके ब्राउज़र में सहेजी जाती है: आपको हल्की थीम पसंद है या गहरी, वह आपके ही उपकरण के लोकल स्टोरेज में। वह कभी कहीं नहीं भेजी जाती और आप उसी इंस्पेक्टर से उसे मिटा सकते हैं। न रजिस्ट्रेशन है, न खाते, न फ़ॉर्म: कोई डेटा छोड़ना चाहें तो भी छोड़ने की जगह नहीं है।

और कमी, क्योंकि है: पेज लोड होते समय Google के सर्वरों से दो फ़ॉन्ट माँगता है। इसका मतलब है कि Google को दिखता है कि आपके IP वाले किसी आदमी ने इस डोमेन का एक पेज खोला — जैसा अनगिनत साइटों पर होता है। वह यह नहीं देखता कि आप क्या लिखते हैं — वह रिक्वेस्ट पहले हो चुकी होती है और दोबारा नहीं होती — लेकिन है वह किसी तीसरे को की गई रिक्वेस्ट, आपको उसी नेटवर्क टैब में दिखेगी, और आपसे इंस्पेक्टर खोलने को कहना और साथ ही उसका ज़िक्र न करना बेमतलब होता। वह ठीक की जाने वाली चीज़ों की सूची में है।

हम यह क्यों बता रहे हैं

हम “शून्य रिक्वेस्ट, पूरी प्राइवेसी” लिखकर आराम से बैठ सकते थे। सुनने में बेहतर लगता और ब्योरे में झूठ होता: एक शब्दकोश वाली रिक्वेस्ट है और कुछ फ़ॉन्ट हैं। जो दलील कोई जाँचने पर ढह जाए, वह दलील थी ही नहीं: वह विज्ञापन था।

सटीक बात कम चमकदार है और जाँच में टिकती है: आप जो लिखते हैं वह आपके ब्राउज़र से बाहर नहीं जाता, और यह तीस सेकंड में उस औज़ार से दिख जाता है जो आपके पास पहले से इंस्टॉल है।

और सुनिए, क्योंकि यह बात आपके पास एक आम कसौटी बनकर लौटती है। अगली बार जो वेबसाइट किसी भी वजह से आपसे पासवर्ड माँगे, वही टैब खोलिए और देखिए कि एक बटन दबाते ही कोई रिक्वेस्ट निकलती है या नहीं। निकलती है, तो आपका पासवर्ड जा चुका। प्राइवेसी नोटिस में जो लिखा हो लिखा रहे, फ़ॉर्म का ताला कितना ही सुंदर हो, कंपनी कितनी ही संजीदा लगे। और अगर साइट एक घूमते पहिये के बाद आपको विश्लेषण किया हुआ पासवर्ड दिखाती है, तो समझ जाइए वह होकर कहाँ से आया है।

सुरक्षा की जिस बात पर सबसे कम चर्चा होती है वह पासवर्ड के बारे में नहीं है: वह जाँच के बारे में है। भरोसा करना ठीक है। जाँच लेना बेहतर है, और यहाँ वह मुफ़्त है।


स्रोत: ख़ुद password.es की बनावट, जो किसी भी ब्राउज़र के इंस्पेक्टर से जाँची जा सकती है — चेकर, ख़ाने पर फ़ोकस आते ही, अपने ही डोमेन से विश्लेषण वाली लाइब्रेरी अपनी सूचियों समेत (zxcvbn-_base.min.js) डाउनलोड करता है और लिखते समय कोई रिक्वेस्ट नहीं भेजता · crypto.getRandomValues(), क्रिप्टोग्राफ़िक बेतरतीबी के लिए Web Crypto API का मानक API · साइट के कोड में न एनालिटिक्स है, न पिक्सल, न कुकी; लोकल में सहेजा गया इकलौता डेटा थीम की पसंद है · फ़ॉन्ट Google Fonts से आते हैं।

← ब्लॉग पर वापस