टेक्स्ट और रोजमर्रा के टूल · पासवर्ड जेनरेटर
crypto.getRandomValues बनाम Math.random: यह पासवर्ड के लिए क्यों महत्वपूर्ण है
· यह काम किस प्रकार करता है
पासवर्डों वेब-क्रिप्टो अनियमितता
ब्राउज़र के सामान्य-उद्देश्य वाले यादृच्छिक संख्या जनरेटर और उसके क्रिप्टोग्राफ़िक के बीच अंतर बताता है, पासवर्ड के लिए पूर्वानुमेयता घातक क्यों है, और यह कैसे बताया जाए कि कौन सा टूल उपयोग करता है।
पासे के खेल के लिए पर्याप्त यादृच्छिकता, पासवर्ड के लिए नहीं - ब्राउज़र द्वारा प्रदान की जाने वाली दो प्रकार की यादृच्छिकता
एक ब्राउज़र अनियमित दिखने वाले मानों के एक से अधिक स्रोत पेश कर सकता है, लेकिन दृश्य विकार इस बात का प्रमाण नहीं है कि कोई अनुक्रम किसी क्रेडेंशियल के लिए उपयुक्त है। ToolAcre एक कठिन उत्पाद सीमा खींचता है: प्रत्येक शब्द चयन, सीमांकक चयन, वर्ण चयन और शफ़ल स्वैप `crypto.getRandomValues` द्वारा समर्थित एक सुरक्षित पूर्णांक फ़ंक्शन से होकर गुजरता है। यदि उस API का उपयोग नहीं किया जा सकता है, तो पेज एक विश्वसनीय दिखने वाला विकल्प तैयार करने के बजाय पीढ़ी को अक्षम कर देता है।
यह इनकार इस बात से अधिक मायने रखता है कि क्या दो नमूना आउटपुट समान रूप से अव्यवस्थित दिखाई देते हैं। एक पूर्वानुमेय स्रोत अभी भी उन अक्षरों, अंकों और शब्दों को प्रिंट कर सकता है जो किसी व्यक्ति को आश्वस्त करने वाले लगते हैं। इसलिए कार्यान्वयन स्रोत को श्रवण योग्य और विफलता को दृश्यमान बनाता है। यह दावा नहीं करता कि कोई भी उत्पन्न मूल्य हर वातावरण के लिए सुरक्षित है; एक समझौता किया गया ब्राउज़र या डिवाइस अभी भी पढ़ सकता है कि पेज क्या प्रदर्शित करता है।
Math.random किसके लिए है - तेज़, बीजित छद्म-यादृच्छिकता जिसका आउटपुट कुछ अवलोकनों से पुनर्निर्मित किया जा सकता है
कार्यपुस्तिका Math.random को कुछ अवलोकनों से पुनर्निर्माण योग्य बीजित छद्म-यादृच्छिकता के रूप में वर्णित करती है, लेकिन ये सामान्य कार्यान्वयन दावे हैं जो यह रिपॉजिटरी प्रत्येक JavaScript इंजन के लिए स्थापित नहीं करता है। इस उत्पाद के लिए स्थानीय तथ्य सरल और मजबूत है: उत्पादन जनरेटर फ़ाइलें `Math.random` को कॉल नहीं करती हैं। एक स्रोत-स्तरीय परीक्षण टिप्पणियाँ छीनता है, निष्पादन योग्य कोड को स्कैन करता है और यदि ऐसी कॉल इंजन या पासवर्ड ऐप में कहीं भी दिखाई देती है तो विफल हो जाती है।
यह अंतर लेख को कार्यान्वयन नियम को सार्वभौमिक ब्राउज़र-इतिहास व्याख्यान में बदलने से रोकता है। ToolAcre को पासवर्ड निर्माण के लिए API को अस्वीकार करने के लिए हर संभव Math.random एल्गोरिदम को चिह्नित करने की आवश्यकता नहीं है। इसका पैकेज Web Crypto या परीक्षणों द्वारा उपयोग किए जाने वाले इंजेक्टेड सुरक्षित स्रोत को स्वीकार करता है, और बीज, नियतात्मक मोड या कमजोर फ़ॉलबैक के लिए कोई उत्पादन विकल्प नहीं दिखाता है।
यह भंडार Math.random के बारे में क्या साबित करता है: यह उत्पादन पीढ़ी से अनुपस्थित है
`createWebCryptoSource` कॉल करने योग्य `getRandomValues` की तलाश करता है, फिर उस विधि को पैकेज यादृच्छिक स्रोत के रूप में लपेटता है। नियंत्रण सक्षम करने से पहले एप्लिकेशन एक अतिरिक्त जांच करता है: यह वैश्विक क्रिप्टो ऑब्जेक्ट को ट्राई ब्लॉक के अंदर एक-तत्व टाइप किए गए सरणी को भरने के लिए कहता है। यह उन प्रतिबंधित वातावरणों को पकड़ता है जहां संपत्ति मौजूद है लेकिन सतही सुविधा जांच पर भरोसा करने के बजाय उपयोग किए जाने पर फेंक देती है।
स्रोत ब्राउज़र API सीमा पर रुकता है। यह साबित नहीं करता है कि कौन सा ऑपरेटिंग-सिस्टम पूल, हार्डवेयर इंस्ट्रक्शन या रीसीडिंग डिज़ाइन किसी विशेष ब्राउज़र के नीचे स्थित है। वे विवरण इंटरफ़ेस के नीचे भिन्न होते हैं और प्लेटफ़ॉर्म दस्तावेज़ीकरण की आवश्यकता होती है। कोड जो साबित करता है वह यह है कि बाइट्स नामित Web Crypto विधि के माध्यम से आते हैं और जांच विफल होने पर उस पीढ़ी का प्रयास नहीं किया जाता है।
crypto.getRandomValues यहां क्या करता है: ब्राउज़र के माध्यम से टाइप की गई सारणी भरता है API
पूर्वानुमेयता खतरनाक है क्योंकि एक क्रेडेंशियल जनरेटर को नए विकल्प चुनने चाहिए, एक पर्यवेक्षक पहले के आउटपुट से पुन: उत्पन्न नहीं कर सकता है। ToolAcre नियतात्मक उत्पादन पथों को अस्वीकार करके, प्रत्येक ड्रा को केंद्रीकृत करके और यह परीक्षण करके उस लक्ष्य का समर्थन करता है कि कमजोर API अनुपस्थित है। यह स्क्रीन कैप्चर, एक्सटेंशन, मैलवेयर, फ़िशिंग, पासवर्ड पुन: उपयोग या ऐसी सेवा से प्रतिरक्षा का वादा नहीं करता है जो सबमिट करने के बाद क्रेडेंशियल को गलत तरीके से संभालती है।
वह सीमा एक सामान्य कैटेगरी की त्रुटि को रोकती है: पीढ़ी यह बताती है कि एक उम्मीदवार का चयन कैसे किया जाता है, न कि वह सब कुछ जो बाद में उसके साथ होता है। पैकेज एक स्ट्रिंग लौटाता है और इसे लॉग या संग्रहीत नहीं करता है। पेज स्मृति में एक वर्तमान मान रखता है और उसे पाठ के रूप में प्रस्तुत करता है। पासवर्ड भंडारण, ट्रांसमिशन, खाता पुनर्प्राप्ति और प्रमाणीकरण नीति अन्य प्रणालियों की जिम्मेदारियां बनी हुई हैं।
कोड पढ़ना - यह कैसे जांचें कि पेज किस API का उपयोग करता है, और खुले, निरीक्षण योग्य पेजों पर भरोसा करना आसान क्यों है
कोड को पढ़ना `packages/password-generator/src/index.js` से शुरू होता है, जिसका अनुबंध कहता है कि प्रत्येक यादृच्छिक निर्णय `secureRandomInt` तक पहुंचता है। कार्यान्वयन फ़ाइल तब `getRandomValues`, अस्वीकृति नमूनाकरण और स्पष्ट त्रुटियाँ दिखाती है। अंत में, `no-math-random.test.js` और व्यापक पासवर्ड सुरक्षा सूट "हम कभी भी Math.random का उपयोग नहीं करते हैं" को एक अपरीक्षित टिप्पणी के रूप में छोड़ने के बजाय नकारात्मक गारंटी को निष्पादन योग्य बनाते हैं।
अकेले ओपन सोर्स कोड को सही नहीं बनाता है, लेकिन यह समीक्षक को निरीक्षण करने के लिए ठोस सीम देता है। यादृच्छिक स्रोत की खोज करें, विकल्पों और फेरबदल के माध्यम से कॉल करने वालों का अनुसरण करें, और निरीक्षण करें कि API गायब होने पर क्या होता है। एक भरोसेमंद समीक्षा को ब्रांडिंग से सुरक्षा का अनुमान लगाने के बजाय सफलता पथ और इनकार पथ दोनों का नाम देने में सक्षम होना चाहिए।
कारगर उदाहरण - दोनों तरीकों से समान शब्द-चयन दिनचर्या लिखी गई है, और एक हमलावर प्रत्येक के साथ क्या कर सकता है
100 से नीचे पूर्णांक के लिए अनुरोध पर विचार करें। `secureRandomInt` को एक बाइट की आवश्यकता है, जिसकी कैटेगरी में 256 मान हैं। यह केवल 100 से विभाज्य सबसे बड़े उपसर्ग को स्वीकार करता है, जो 200 से पहले समाप्त होता है, और शेष पूंछ को अस्वीकार कर देता है। एक नियतात्मक परीक्षण बाइट 200 और उसके बाद बाइट 7 फ़ीड करता है। कार्यान्वयन 200 को हटा देता है और 7 लौटाता है; एक सीधा मॉड्यूलो शॉर्टकट अस्वीकृत बाइट से शून्य लौटाता।
वही सुरक्षित पूर्णांक फ़ंक्शन शब्दों और वर्णों के लिए सूचकांक चुनता है, इसलिए यह उदाहरण पीढ़ी से अलग किया गया खिलौना नहीं है। उत्पादन में सटीक बाइट्स दोहराए जाने योग्य उदाहरण नहीं हैं और इन्हें कभी भी प्रमाण पत्र के रूप में प्रकाशित नहीं किया जाना चाहिए। उपयोगी कलाकृति नियंत्रण-प्रवाह प्रमाण है: Web Crypto बफर भरता है, एक असमान पूंछ को खारिज कर दिया जाता है, और केवल एक स्वीकृत मूल्य एक सीमित विकल्प बन जाता है।
कार्यान्वित उदाहरण: भेजे गए सिक्योररैंडमइंट पथ के माध्यम से एक बाउंडेड ड्रॉ का पता लगाएं
यह रिपॉजिटरी सर्वर-साइड जेनरेटर, हार्डवेयर रैंडम नंबर जेनरेटर या ऑपरेटिंग-सिस्टम कमांड-लाइन टूल को लागू या तुलना नहीं करता है। यह JavaScript से ब्राउज़र क्रिप्टो कार्यान्वयन के आंतरिक ऑडिट भी नहीं कर सकता है। उन विषयों को ToolAcre कोड पथ पर चिपकाए गए सादृश्य के बजाय अपने स्वयं के स्रोत सामग्री, खतरे के मॉडल और परिचालन जांच की आवश्यकता होती है।
पेज पासवर्ड मैनेजर भी नहीं है. यह जो भी उत्पन्न करता है उसे सहेजता, सिंक्रनाइज़, ट्रांसमिट या ऑटोफ़िल नहीं करता है। किसी पाठक को किसी परिणाम का पुन: उपयोग करने या उसे किसी असुरक्षित चैनल के माध्यम से ले जाने की सलाह के रूप में "क्रिप्टोग्राफ़िक यादृच्छिक स्रोत" की व्याख्या नहीं करनी चाहिए। दावा केवल वर्तमान ब्राउज़र टैब के अंदर चयन से संबंधित है।
टेकअवे - पासवर्ड जेनरेटर ब्राउज़र के क्रिप्टोग्राफ़िक रैंडम नंबर जनरेटर का उपयोग करता है, और आप इसे पेज से ही सत्यापित कर सकते हैं
ToolAcre का सत्यापन योग्य विकल्प क्रिप्टो या कुछ भी नहीं है। पेज समर्थन पहचान के दौरान ब्राउज़र को API कहता है, विफल होने पर नियंत्रण अक्षम कर देता है, और यदि पीढ़ी किसी तरह उसी लापता स्थिति में पहुंच जाती है तो इंजन को `InsecureRandomError` फेंकने देता है। किसी भी शाखा के पीछे कोई Math.random फ़ॉलबैक छिपा नहीं है।
जनरेटर की समीक्षा करते समय उस पैटर्न का उपयोग करें: स्रोत की पहचान करें, प्रत्येक बंधे हुए ड्रॉ का पता लगाएं, कमी और फेरबदल का निरीक्षण करें, और अनुपलब्ध-स्रोत पथ को बाध्य करें। फिर डिवाइस और गंतव्य का अलग-अलग मूल्यांकन करें। इस जनरेटर के काम के लिए एक ध्वनि यादृच्छिक स्रोत आवश्यक है, लेकिन यह क्रेडेंशियल के पूरे जीवन के लिए एक सार्वभौमिक प्रमाणपत्र नहीं है।