टेक्स्ट और रोजमर्रा के टूल · पासवर्ड जेनरेटर
PRNG बनाम CSPRNG: आपके ब्राउज़र की यादृच्छिक संख्याएँ वास्तव में कहाँ से आती हैं
· पेजभूमि
पासवर्डों वेब-क्रिप्टो CAसPRएनजी
छद्म-यादृच्छिक और क्रिप्टोग्राफ़िक रूप से सुरक्षित जनरेटर के बीच अंतर बताता है, कैसे ऑपरेटिंग सिस्टम हार्डवेयर घटनाओं से एन्ट्रापी इकट्ठा करते हैं, और कैसे वह यादृच्छिकता Web Crypto API के माध्यम से एक वेब पेज तक पहुंचती है।
कंप्यूटर नियतिवादी हैं, तो यादृच्छिकता कहाँ से आती है? - प्रत्येक जनरेटर के पीछे मूल पहेली
JavaScript ToolAcre में चलना API सीमा पर शुरू होता है। यह `crypto.getRandomValues` से बाइट्स का अनुरोध कर सकता है, देख सकता है कि क्या कॉल सफल होती है और लौटाई गई सरणी का उपयोग कर सकती है। यह प्रत्येक भौतिक घटना, कर्नेल पूल या हार्डवेयर घटक का निरीक्षण नहीं कर सकता है जिसका उपयोग कोई विशेष प्लेटफ़ॉर्म कर सकता है। इसलिए यादृच्छिकता के लिए कार्यपुस्तिका की मूल कहानी स्थानीय साक्ष्य से अधिक है।
तकनीकी रूप से ईमानदार व्याख्या वहीं से शुरू होती है जहां अवलोकन शुरू होता है। ऐप Web Crypto की जांच करता है, इंजन इसे लपेटता है और सभी चयन उस स्रोत का उपभोग करते हैं। प्लेटफ़ॉर्म-विशिष्ट आंतरिक को प्लेटफ़ॉर्म दस्तावेज़ीकरण और ऑडिट की आवश्यकता होती है, न कि ब्राउज़र विधि नाम से अनुमानित सामान्य विवरण की।
रिपॉजिटरी ब्राउज़र API से शुरू होती है; यह भौतिक एन्ट्रापी स्रोतों का ऑडिट नहीं करता है
छद्म-यादृच्छिक जनरेटर को अक्सर बीज और प्रतिलिपि प्रस्तुत करने योग्य स्थिति द्वारा वर्णित किया जाता है, लेकिन JavaScript इंजन को इस रिपॉजिटरी द्वारा एक Math.random डिज़ाइन साझा करने की आवश्यकता नहीं होती है। ToolAcre क्रेडेंशियल उत्पादन में API को पूरी तरह से प्रतिबंधित करके अस्पष्टता से बचाता है। स्रोत स्कैन उस नकारात्मक गारंटी को लागू करते हैं।
परीक्षणों को अभी भी नियतात्मक बाइट्स की आवश्यकता होती है, इसलिए वे आंतरिक पैरामीटर के माध्यम से `getRandomValues` को उजागर करने वाली वस्तुओं को इंजेक्ट करते हैं। वे नकली परीक्षण समर्थन में रहते हैं और बीजयुक्त उत्पादन मोड के रूप में निर्यात नहीं किए जाते हैं। टेस्टेबिलिटी दोहराए जाने वाले पासवर्ड के लिए एक छिपा हुआ उपयोगकर्ता विकल्प नहीं बनाती है।
एक सार्वभौमिक PRNG डिज़ाइन का दावा किए बिना, Math.random को यहां प्रतिबंधित किया गया है
उत्पाद "क्रिप्टोग्राफ़िक" का उपयोग स्कोप्ड तरीके से करता है: आवश्यक ब्राउज़र इंटरफ़ेस Web Crypto है, और यह अनुपस्थित या अनुपयोगी होने पर जेनरेशन बंद हो जाता है। ऐप केवल उसके प्रकार की जांच करने के बजाय, पता लगाने के दौरान विधि को कॉल करता है, प्रतिबंधित वातावरण को पकड़ता है जहां आमंत्रण फेंकता है।
वह अनुबंध प्रत्येक काल्पनिक राज्य समझौते के प्रतिरोध का वादा नहीं करता है या ब्राउज़र कार्यान्वयन को प्रमाणित नहीं करता है। यह साबित करता है कि पेज किस API का अनुरोध करता है और इसके साथ कोई कमजोर फ़ॉलबैक नहीं जोड़ा गया है। डिवाइस की अखंडता जनरेटर के बाहर बनी रहती है।
सत्यापित क्रिप्टोग्राफ़िक संपत्ति आवश्यक Web Crypto स्रोत और इनकार पथ है
टाइमिंग इवेंट, समर्पित प्रोसेसर निर्देश, रीसीडिंग शेड्यूल और ऑपरेटिंग-सिस्टम एन्ट्रॉपी पूल सभी वेब API सतह के नीचे हैं। यहां किसी का भी दावा नहीं किया गया है क्योंकि पैकेज स्रोत उन्हें सत्यापित नहीं कर सकता है। भविष्य के प्लेटफ़ॉर्म-विशिष्ट लेख को उसके द्वारा वर्णित प्रत्येक वातावरण के लिए प्राथमिक दस्तावेज़ीकरण की आवश्यकता होगी।
यह चूक मौजूदा दावे को कमजोर करने के बजाय मजबूत करती है। ToolAcre वास्तव में बता सकता है कि यह ब्राउज़र से क्या करने के लिए कहता है और यह बाइट्स के साथ कैसा व्यवहार करता है। इसे यह दिखावा करने की आवश्यकता नहीं है कि JavaScript Math.random को अस्वीकार करने को उचित ठहराने के लिए पूरी एन्ट्रापी श्रृंखला का ऑडिट कर सकता है।
हार्डवेयर-इवेंट और ऑपरेटिंग-सिस्टम-पूल विवरण कार्यान्वयन के दावे हैं जिन्हें यह स्रोत साबित नहीं करता है
`getRandomValues` अनुरोधित विशिष्ट सीमा से `Uint8Array` आकार भरता है। `secureRandomInt` उन बाइट्स को एक अहस्ताक्षरित बड़े-एंडियन नंबर के रूप में इकट्ठा करता है, सबसे बड़ी विभाज्य स्वीकृति विंडो की गणना करता है और शेष में मानों को हटा देता है। फिर स्वीकृत मूल्य को एक सूचकांक में घटा दिया जाता है।
शब्द, सीमांकक, वर्ण और शफ़ल स्वैप सभी इस पथ का पुन: उपयोग करते हैं। एक एकल चोक पॉइंट ब्राउज़र-टू-चॉइस श्रृंखला को समीक्षा योग्य बनाता है और यह सुनिश्चित करता है कि बाउंडेड रिडक्शन को ठीक करने से एक भूले हुए कॉलर के बजाय हर पीढ़ी मोड प्रभावित होता है।
GetRandomValues से सुरक्षितRandomInt तक: दृश्यमान ब्राउज़र-टू-इंडेक्स पथ
7,776-वर्ड पूल के लिए, फ़ंक्शन प्रत्येक वैध इंडेक्स का प्रतिनिधित्व करने के लिए पर्याप्त बाइट्स का चयन करता है। यह एक पूर्णांक बनाता है, गणना की गई सीमा पर या उससे ऊपर के किसी भी मान को अस्वीकार कर देता है और स्वीकृति के बाद ही शेष लौटाता है। `secureRandomChoice` पात्र सरणी से एक शब्द को पढ़ने के लिए उस परिणाम का उपयोग करता है।
विशेष उत्पादन सूचकांक निजी है और इसे दस्तावेज़ीकरण में पुन: प्रस्तुत नहीं किया जाना चाहिए। नियतात्मक परीक्षण इसके बजाय नियंत्रण प्रवाह को साबित करने के लिए ज्ञात टेल और इन-रेंज बाइट्स फ़ीड करते हैं। यह किसी उत्पन्न वाक्यांश को सार्वजनिक उदाहरण में बदले बिना एक चयन का पता लगाता है।
कार्यान्वित उदाहरण: एक सूची सूचकांक में अस्वीकृति नमूने के माध्यम से बाइट्स का पता लगाएं
हार्डवेयर रैंडम-नंबर जनरेटर डिज़ाइन और औपचारिक क्रिप्टोग्राफ़िक प्रमाण पैकेज में शामिल नहीं हैं। न ही सर्वर रनटाइम या मूल एप्लिकेशन हैं। कार्यान्वयन एक ब्राउज़र जनरेटर है और इसकी गारंटी को असंबंधित सिस्टम पर कॉपी नहीं किया जाना चाहिए।
यह भंडारण या बाद में उपयोग को भी संबोधित नहीं करता है। Web Crypto के माध्यम से चयनित मूल्य अभी भी पुन: उपयोग, फ़िशिंग, क्लिपबोर्ड इतिहास या मैलवेयर द्वारा उजागर किया जा सकता है। CSPRNG विकल्प स्रोत समस्या का समाधान करता है, प्रत्येक क्रेडेंशियल-हैंडलिंग समस्या का नहीं।
टेकअवे - पासवर्ड जेनरेटर ब्राउज़र के क्रिप्टोग्राफ़िक जेनरेटर से पूछता है, जो किसी रहस्य के लिए सही स्रोत है
कार्रवाई योग्य श्रृंखला छोटी है: परीक्षण करें कि Web Crypto काम करता है, जब यह काम नहीं करता है तो पीढ़ी को मना कर देता है, बाइट्स भरता है, एक असमान पूंछ को अस्वीकार करता है और स्वीकृत मूल्य को एक सूचकांक में मैप करता है। ToolAcre प्रत्येक चरण को दृश्यमान बनाता है और कठिन सीमाओं का परीक्षण करता है।
अस्पष्ट "यादृच्छिक" लेबल पर भरोसा करने के बजाय उस श्रृंखला की समीक्षा करें। फिर समापन बिंदु और गंतव्य की अलग से समीक्षा करें। ब्राउज़र का क्रिप्टोग्राफ़िक API इस उत्पाद के लिए सही स्रोत है, लेकिन रिपॉजिटरी यह प्रमाणित करने का दावा नहीं करता है कि इसके नीचे क्या है या उसके बाद जो कुछ भी है।