2012-05-03 12 views
5

अक्सर मुझे लगता है कि .NET class Random पासवर्ड पीढ़ी के लिए उपयोग किया जा रहा है।मैं कैसे प्रदर्शित करूं कि .NET क्लास रैंडम पासवर्ड उत्पन्न करने के लिए उपयुक्त नहीं है?

एक ओर, this question I asked earlier दिखाता है कि class Random का उपयोग करके "गुप्त" डेटा का एक गुच्छा उत्पन्न करने के बजाय अनुमानित डेटा उत्पन्न होता है। दूसरी तरफ, मैं वर्तमान में उस सटीक भविष्यवाणी करने की कोशिश कर रहा हूं और मेरा कोड एक कोर पर प्रति दिन लगभग छह मिलियन बीज अनुमानों की गति से काम करता है - बेहद तेज़ नहीं, सभी संभव बीज मूल्यों को समझने में लगभग एक वर्ष लग जाएगा उस दर पर।

क्या यह दिखाने के लिए एक स्पष्ट और तेज़ तरीका है कि class Random() से डेटा का उपयोग करके जेनरेट किए गए पासवर्ड आम तौर पर अपेक्षाकृत कमजोर होते हैं?

+5

क्यों न केवल उन्हें एरिक लिपर्ट और आपके द्वारा जुड़े प्रश्न से प्रतिक्रिया दिखाएं? यह क्रिप्टोग्राफिक यादृच्छिक संख्या पीढ़ी का एक उदाहरण भी दिखाता है - यदि आप व्यवसाय दिमाग को मनाने की कोशिश कर रहे हैं, तो बस क्रिप्टोग्राफिक शब्द का जिक्र करना चाहिए: -P –

+0

मुझे लगता है कि आपके पास तर्क गलत है। यदि कोई ऐसा एप्लिकेशन है जो सुरक्षा-महत्वपूर्ण है, तो बोझ उन लोगों पर है जो समाधान का प्रस्ताव देते हैं कि समाधान सुरक्षा आवश्यकताओं को पूरा करता है। मुझे संदेह है कि कोई भी .NET के यादृच्छिक वर्ग के लिए ऐसा कर सकता है। क्रिप्टो अनुप्रयोगों में प्रयुक्त पीआरएनजी ने सुरक्षा गुणों को परिभाषित किया है, इसलिए यह दिखाना संभव है कि वे निर्धारित आवश्यकताओं को पूरा करते हैं। –

उत्तर

0

मेरी समझ से, Random वर्ग "Psuedo-random एल्गोरिदम" के आधार पर यादृच्छिक मान उत्पन्न करता है, इसलिए वास्तव में वे अब तक यादृच्छिक नहीं हैं। वे गणितीय एल्गोरिदम के ठोस कार्यान्वयन पर आधारित हैं, इसलिए परिणाम अनुमानित हैं।

तो अगर मैं सुरक्षा उल्लंघन के लिए इस एल्गोरिदम को तोड़ने की कोशिश कर रहा था, तो मुझे नहीं पता कि मुझे कुछ जानकारी जाननी चाहिए: मुझे पता है कि एल्गोरिदम क्या है, यह नेट फ्रेमवर्क के माध्यम से सार्वजनिक रूप से सुलभ है, यह क्या है इनपुट मूल्य (बीज)?

फिर आप इन इनपुट मानों को जादू नहीं कर सकते हैं, वे कुछ पर आधारित होना चाहिए, तो क्या?

आपके उदाहरण में, जैसा कि मैं इसे समझता हूं, सभी संभव बीज मूल्य उत्पन्न करने के लिए। यह आपके जैसा कहा एक लंबा समय लगता है!

लेकिन मैं ऐसा क्यों करूं? सबसे बुद्धिमान दृष्टिकोण यह है कि आप अपने इनपुट मूल्यों को उत्पन्न करने के लिए उपयोग करने का प्रयास करें और अनुमान लगाएं? यानी आप समय का उपयोग कर रहे हैं? पासवर्ड कब रीसेट हो जाते हैं? यह पासवर्ड कब उत्पन्न हुआ था? मूल्यों का क्या सबसेट मुझे देता है? आप कितनी बड़ी संख्या का उपयोग कर रहे हैं?

यदि आप एक दिन में 6 मिलियन बीज का परीक्षण कर सकते हैं, तो कुछ तर्क लागू करने से कितने मूल्य संभव मूल्यों के सेट को संकीर्ण करते हैं? यदि यह < 6 मिलियन है तो मैं 24 घंटे में अपना पासवर्ड तोड़ सकता हूं।

यह कहा गया कि यदि आप अपने बीज का सबसेट पर्याप्त रूप से पर्याप्त और अप्रत्याशित कर सकते हैं तो यह कठिन है। तो प्रश्न, सुरक्षा में कई चीजों की तरह नीचे आता है, यह कितना सुरक्षित होना चाहिए? कुछ भी 100% नहीं है!

+1

आपके पहले तीन पैराग्राफ सामान्य रूप से उपयोग में आने वाले सभी आरएनजी पर लागू होते हैं, है ना? अगर मेरे पास आपका अहंकार और आपका बीज है, तो मुझे अगला मूल्य मिल सकता है। – Cylindric

+0

सच है लेकिन जटिलता यहां एक मुद्दा है। लेकिन यादृच्छिक केवल एक ही कुंजी है? यह बहुत जटिल नहीं है इसलिए तर्क यह अनुमान लगाने के लिए आवश्यक है कि कुंजी आसान है। यह यादृच्छिक पासवर्ड पीढ़ी के लिए डिज़ाइन नहीं किया गया है। एमडी 5 हैश की तरह कुछ एन्क्रिप्शन के लिए डिज़ाइन किया गया है, इसलिए यह अधिक जटिल है, इसमें कई कुंजी हैं, इसलिए परिणाम को दोहराने के लिए आवश्यक तर्क अधिक जटिल – Liam

+1

है यदि आप पासवर्ड के साथ कुछ भी करने के लिए MD5 का उपयोग कर रहे हैं और/या एन्क्रिप्शन, आप भी परेशान नहीं हो सकता है। – Cylindric

0

आपके मूल प्रश्न में कोई भी नहीं कहता है कि यादृच्छिक पासवर्ड उत्पन्न करने के लिए यादृच्छिक अच्छा नहीं है (वास्तव में शब्द "पासवर्ड" प्रश्न, उत्तर या टिप्पणियों में कहीं भी दिखाई नहीं देता है)। आपको यह साबित करने में कठिनाई होगी क्योंकि ऐसा करने के लिए सिस्टम को एक साथ कई यादृच्छिक पासवर्ड उत्पन्न करना होगा। इसके अलावा हमलावर को उपयोगकर्ता नाम और पासवर्ड से मेल खाना पड़ेगा, भले ही वह एक अच्छी संख्या में पासवर्ड प्राप्त करने का प्रबंधन करता हो।

1

मुझे इसे इस तरह से रखने दें: यादृच्छिक संख्या जनरेटर चुनें जो आपके द्वारा उत्पन्न किए जाने वाले पासवर्ड की संख्या के लिए पर्याप्त है। 36 के वर्णमाला आकार के साथ (अंक और केवल अपरकेस या केवल लोअरकेस अक्षर) आप आरएनजी की आंतरिक स्थिति का केवल एक छोटा सा अंश निकालते हैं। और यहां तक ​​कि यदि आप इस तरह 40000 वर्ण उत्पन्न करते हैं, तो यह अभी भी केवल 21 बिट जानकारी है। अन्य प्रश्न में आपका एल्गोरिदम केवल उपसर्ग के अलावा 4 यादृच्छिक वर्ण उत्पन्न करता है। उत्पन्न होने वाले अगले पासवर्ड को जानने के लिए आरएनजी राज्य को क्रूर-फोर्स करने के बजाय हमलावर के लिए सभी संभावित पासवर्ड को बलपूर्वक बल देना आसान होगा।

दरअसल, पासवर्ड उत्पन्न करने के लिए एक साधारण आरएनजी का उपयोग करते समय आप सबसे बुरी गलती कर सकते हैं, जिससे बड़ी संख्या में उत्पन्न होता है। यदि आप केवल उन्हें मांग पर और हमेशा ताजा बीज वाले आरएनजी के साथ उत्पन्न करते हैं, तो हमलावर को बीज और इस तरह के पासवर्ड को समझने में मुश्किल होगी। System.Random का डिफ़ॉल्ट कार्यान्वयन समय बीतता है क्योंकि सिस्टम मिलीसेकंड में बीज के रूप में शुरू होता है। शुभकामनाएं कि बाहर लग रहा है।

संबंधित मुद्दे