सुरक्षा मार्गदर्शिका
Math.random पासवर्ड के लिए सुरक्षित क्यों नहीं है
जानें कि Math.random UI प्रभावों के लिए उपयुक्त क्यों है, लेकिन पासवर्ड, रीसेट कोड, टोकन या अन्य सुरक्षा-संवेदनशील रहस्यों के लिए नहीं।
सारांश
Math.random() एक सामान्य JavaScript छद्म-यादृच्छिक फ़ंक्शन है। यह एनिमेशन, रैंडमाइज़्ड UI व्यवहार, उदाहरण, गेम और सिमुलेशन के लिए उपयोगी है। यह क्रिप्टोग्राफ़िक सुरक्षा के लिए निर्दिष्ट नहीं है और इसका उपयोग पासवर्ड, रीसेट कोड, API रहस्य, साइनिंग कुंजी या रिकवरी टोकन उत्पन्न करने के लिए नहीं किया जाना चाहिए।
समस्या
पासवर्ड जनरेटर को एक हमलावर के खिलाफ अप्रत्याशितता की आवश्यकता होती है, न कि केवल ऐसे मान जो उपयोगकर्ता को विविध दिखते हैं। Math.random() ब्राउज़र-मानक क्रिप्टोग्राफ़िक सुरक्षा गारंटी प्रदान नहीं करता है, और इंजनों के बीच कार्यान्वयन भिन्न हो सकता है।
सुरक्षित ब्राउज़र विकल्प
आधुनिक ब्राउज़र Web Crypto API के माध्यम से crypto.getRandomValues() प्रदान करते हैं। PwdGen उस इंटरफ़ेस और रिजेक्शन सैंपलिंग का उपयोग करता है, जो पक्षपाती वर्ण चयन से बचाता है। यदि वह API उपलब्ध नहीं है, तो सुरक्षित व्यवहार जनरेशन को रोकना और संगतता आवश्यकता समझाना है।
जनरेटर की समीक्षा कैसे करें
स्रोत में Math.random खोजें। एक गंभीर पासवर्ड जनरेटर को पासवर्ड वर्णों के लिए इसका उपयोग नहीं करना चाहिए। यह दस्तावेज़ीकरण में दिखाई दे सकता है जो बताता है कि यह असुरक्षित क्यों है, लेकिन जनरेशन पथ में नहीं।
विस्तृत मार्गदर्शन
यह मार्गदर्शिका इस बात पर केंद्रित है कि Math.random पासवर्ड और रहस्यों के लिए अनुपयुक्त क्यों है। यह डेवलपर्स, छात्रों और टूल उपयोगकर्ताओं के लिए लिखा गया है जो जाँच रहे हैं कि कोई जनरेटर सुरक्षित यादृच्छिकता का उपयोग करता है या नहीं, इसलिए व्यावहारिक लक्ष्य एक नाटकीय सुरक्षा दावा बनाना नहीं है। लक्ष्य एक पासवर्ड आदत चुनना है जो दैनिक उपयोग में टिक सके: साइन-इन फॉर्म, पासवर्ड मैनेजर, मोबाइल कीबोर्ड, खाता पुनर्प्राप्ति, साझा डिवाइस, और कभी-कभी अजीब सत्यापन नियमों वाली सेवाएँ। एक सुरक्षित अनुशंसा तभी उपयोगी है जब कोई वास्तविक व्यक्ति इसे लगातार अपना सके।
सबसे सुरक्षित प्रारंभिक बिंदु यादृच्छिकता और विशिष्टता है। यादृच्छिकता का अर्थ है कि मान एक बड़े स्थान से क्रिप्टोग्राफ़िक रूप से उपयुक्त यादृच्छिक स्रोत द्वारा चुना गया है, न कि जन्मदिन, पालतू जानवर का नाम, कीबोर्ड पैटर्न या पसंदीदा उद्धरण से आविष्कार किया गया। विशिष्टता का अर्थ है कि एक ही पासवर्ड कहीं और उपयोग नहीं किया गया है। एक पासवर्ड जो लंबा है लेकिन पुन: उपयोग किया गया है, एक असंबंधित उल्लंघन के बाद जल्दी विफल हो सकता है, जबकि एक अद्वितीय यादृच्छिक पासवर्ड नुकसान को उस एक खाते तक सीमित करता है जहाँ इसका उपयोग किया गया था।
इस विषय के लिए, एक व्यावहारिक प्रीसेट Math.random के बजाय रिजेक्शन सैंपलिंग के साथ crypto.getRandomValues है। आप उस प्रीसेट को Web Crypto API गाइड के साथ लागू कर सकते हैं और फिर अंतिम मान को एक विश्वसनीय पासवर्ड मैनेजर में संग्रहीत कर सकते हैं। PwdGen ब्राउज़र में Web Crypto के साथ स्थानीय रूप से मान उत्पन्न करता है; उत्पन्न पासवर्ड PwdGen सर्वर को नहीं भेजा जाता है। वह स्थानीय डिज़ाइन सर्वर-साइड एक्सपोज़र को कम करता है, लेकिन यह हर खतरे से रक्षा नहीं करता है। एक दुर्भावनापूर्ण ब्राउज़र एक्सटेंशन, एक समझौता किया गया डिवाइस, एक फ़िशिंग पेज, या असुरक्षित क्लिपबोर्ड हैंडलिंग अभी भी उत्पन्न होने के बाद एक रहस्य को उजागर कर सकता है।
सबसे आम समस्याएँ जिनसे बचना चाहिए, वे हैं पूर्वानुमानित छद्म-यादृच्छिक अनुक्रम, मॉड्यूलो पूर्वाग्रह, कस्टम यादृच्छिक फ़ंक्शन, और उत्पादन में कॉपी किया गया डेमो कोड। ये समस्याएँ मायने रखती हैं क्योंकि हमलावरों को शायद ही कभी हर संभव पासवर्ड को ब्रूट-फोर्स करने की आवश्यकता होती है जब मानव आदतें उन्हें शॉर्टकट देती हैं। क्रेडेंशियल स्टफिंग, फ़िशिंग, लीक हुई पासवर्ड सूचियाँ, और खाता-पुनर्प्राप्ति दुरुपयोग अक्सर शुद्ध गणितीय खोज की तुलना में अधिक यथार्थवादी होते हैं। यही कारण है कि सबसे अच्छी सलाह पासवर्ड गुणवत्ता को MFA, पासकी, रिकवरी-कोड स्टोरेज, और रिकवरी ईमेल या फ़ोन सेटिंग्स की नियमित समीक्षा जैसे खाता-स्तरीय नियंत्रणों के साथ जोड़ती है।
अनुशंसा लागू करते समय इस चेकलिस्ट का उपयोग करें:
- पासवर्ड के लिए Math.random का उपयोग न करें।
- ब्राउज़र में Web Crypto का उपयोग करें।
- CLI कोड में Node crypto या एक जाँचा-परखा पैकेज का उपयोग करें।
- आकस्मिक फ़ॉलबैक कोड के लिए परीक्षण करें।
यदि कोई वेबसाइट आदर्श सेटिंग को अस्वीकार करती है, तो पासवर्ड को हाथ से कमजोर पैटर्न में न बदलें। एक बार में एक चर समायोजित करें। यदि प्रतीक अस्वीकार किए जाते हैं, तो अपरकेस, लोअरकेस और संख्याएँ सक्षम रखें और लंबाई बढ़ाएँ। यदि अधिकतम लंबाई कम है, तो सबसे बड़ी स्वीकृत लंबाई का उपयोग करें और सुनिश्चित करें कि मान अद्वितीय है। यदि पासवर्ड को जोर से पढ़ा जाना है, मुद्रित किया जाना है, या टेलीविज़न या राउटर स्क्रीन पर टाइप किया जाना है, तो भ्रमित करने वाले वर्णों को बाहर करने और छोटे वर्णमाला की भरपाई के लिए लंबाई बढ़ाने पर विचार करें।
अंत में, पासवर्ड सलाह की सीमा याद रखें। एक मजबूत पासवर्ड रक्षा की एक परत है, गारंटी नहीं। यह फ़िशिंग पेज को सुरक्षित नहीं बना सकता, मैलवेयर को ठीक नहीं कर सकता, या उस सेवा की भरपाई नहीं कर सकता जो क्रेडेंशियल्स को खराब तरीके से संग्रहीत करती है। उपयोगी आदत उबाऊ लेकिन टिकाऊ है: एक अद्वितीय मान उत्पन्न करें, इसे सुरक्षित रूप से संग्रहीत करें, पुनर्प्राप्ति पथ की रक्षा करें, और यदि आपको एक्सपोज़र का संदेह हो तो इसे जल्दी से बदलें।
एक सुरक्षित अगला कदम
इस मार्गदर्शिका को पढ़ने के बाद, एक साथ सब कुछ ठीक करने की कोशिश करने के बजाय एक छोटा खाता ऑडिट करें। वह खाता चुनें जो अगर लिया जाता है तो सबसे अधिक परेशानी होगी, पुष्टि करें कि उसका पासवर्ड अद्वितीय है, और रिकवरी ईमेल, रिकवरी फ़ोन, MFA विधि और बैकअप-कोड स्टोरेज की जाँच करें। यदि उस श्रृंखला का कोई भी हिस्सा कमजोर है, तो कम जोखिम वाले खातों पर जाने से पहले उस हिस्से में सुधार करें। यह क्रम कार्य को प्रबंधनीय रखता है और उन खातों की रक्षा करता है जिनका हमलावर एक कदम के पत्थर के रूप में उपयोग करने की सबसे अधिक संभावना रखते हैं। Math.random पासवर्ड के लिए सुरक्षित क्यों नहीं है, इसके लिए सबसे अच्छा परिणाम एक दोहराने योग्य आदत है: स्थानीय रूप से उत्पन्न करें, सावधानी से संग्रहीत करें, और पुन: उपयोग से बचें।
अक्सर पूछे जाने वाले प्रश्न
क्या Math.random कभी ठीक है?
हाँ, दृश्य प्रभावों, सिमुलेशन और सामान्य UI यादृच्छिकता के लिए, लेकिन क्रेडेंशियल्स या सुरक्षा टोकन के लिए नहीं।
पासवर्ड जनरेटर को इसके बजाय क्या उपयोग करना चाहिए?
उन्हें ब्राउज़र में crypto.getRandomValues() जैसे क्रिप्टोग्राफ़िक यादृच्छिक स्रोत का उपयोग करना चाहिए।
क्या PwdGen Math.random पर वापस आता है?
नहीं। यदि Web Crypto उपलब्ध नहीं है, तो PwdGen एक संगतता चेतावनी दिखाता है और Math.random() के साथ पासवर्ड उत्पन्न नहीं करता है।