2009-01-04 12 views
6

मैं वर्तमान में एक साधारण पासवर्ड जनरेटर (सी #) लिख रहा हूं। इसके लिए मुझे कुछ यादृच्छिक संख्या चाहिए।सिस्टम कितना यादृच्छिक है। .NET 3 में यादृच्छिक?

क्या यह आसानी से Random कक्षा का उपयोग करना ठीक है जो .NET के साथ जहाजों या उसके साथ कोई ज्ञात समस्या है?

+0

विषय का एक छोटा सा लेकिन यह एक पुरानी अच्छी कहानी है कि अच्छे यादृच्छिक जनरेटर नहीं होने पर यह कितना गलत हो सकता है .. http://www.cigital.com/papers/download/developer_gambling.php – StefanE

उत्तर

13

इसमें कुछ भी गलत नहीं है - यह सरल पासवर्ड उत्पन्न करने के लिए पर्याप्त है। एक साधारण उदाहरण (source):

Random RandomClass = new Random(); 
int RandomNumber = RandomClass.Next(); // Random number between 1 and 2147483647 
double RandomNumber = RandomClass.Next(1,10); // Random number between 1 and 10 

double RandomDouble = RandomClass.NextDouble(); // Random double between 0.0 and 1.0 

लेख How To: Generate a Random Password (C#/VB.NET) अच्छा पैदा करने में एक बहुत ही व्यापक उदाहरण है, आसानी से पढ़ने के लिए निर्दिष्ट जटिलता के साथ पासवर्ड। यह आपके लिए अधिक हो सकता है, लेकिन यह विचारों की प्रतिलिपि बनाने के लिए एक अच्छा स्रोत प्रदान कर सकता है।


आप क्रिप्टोग्राफी के लिए कुछ और की जरूरत है, वहाँ उस के लिए एक और नाम स्थान है:

System.Security.Cryptography 

विशेष रूप से, आप इस का उपयोग कर सकते हैं:

System.Security.Cryptography.RNGCryptoServiceProvider.GetBytes(yourByte) 

एक उदाहरण है, Using Crypto for your Random Numbers in VB.NET है और एक और Crypto Random Numbers है।

आप अपने खुद के रोलिंग के बारे में सोच रहे हैं, साइट Developer Guidance Share आप इससे बाहर बात करने के लिए कुछ जानकारी नहीं है।

+1

'System.Random का उपयोग करना पासवर्ड उत्पन्न करने के लिए कभी भी ठीक नहीं है। – CodesInChaos

1

यदि आप System.Random को आपके लिए काम करने के बारे में कुछ विवरणों के बाद हैं, तो यह CodeBetter आलेख पढ़ने योग्य है। वह रैंडम फ़ंक्शन क्या कर रहा है और बीज के रूप में एक हैश किए गए GUID का उपयोग करके इसे 'अधिक यादृच्छिक' बनाने का एक अच्छा अवलोकन देता है। यदि आपको केवल उपयोगकर्ता खातों के लिए यादृच्छिक प्रारंभिक पासवर्ड उत्पन्न करने की आवश्यकता है (मैं यहां मान रहा हूं) तो यह पर्याप्त से अधिक होना चाहिए, इस मामले में क्रिप्टोग्राफ़ी उपकरण शायद अधिक हो जाएंगे।

+1

@Glenn Slaven: यह एक अच्छा लेख है, लेकिन यह Syste बनाने के बारे में नहीं है। यादृच्छिक 'अधिक यादृच्छिक'! यह रैंडम कन्स्ट्रक्टर को समय बी के साथ कॉल करने का एक समाधान है जब बहुत कम समय बिताया जाता है (जैसे कि तंग लूप में)। –

+2

प्रोग्रामर के बारे में कई कंप्यूटिंग कहानियां हैं जिन्होंने सोचा कि वे परिणाम के लिए 'सामान' करके रैंडम नंबर जनरेटर 'अधिक यादृच्छिक' बना सकते हैं, और पूरी तरह से अपने psuedo-randomness को तोड़ सकते हैं। –

10

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

भले ही प्रारंभिक समय बिल्कुल ज्ञात न हो, फिर भी हमलावर ब्रूट फोर्स द्वारा दिए गए समय सीमा में सभी संभावित मूल्यों की जांच कर सकता है।

सिस्टम में यादृच्छिक जनरेटर। सुरक्षा। क्रिप्टोग्राफी नामस्थान इस तरह की स्थिति में उपयोग के लिए डिज़ाइन किए गए हैं और कई अधिक सुरक्षित स्रोतों से उनकी अप्रत्याशितता प्राप्त करते हैं।

0

सब कुछ के लिए RFC है! - Randomness Requirements for Security (आरएफसी 4086)।

आप यादृच्छिक बीज बनाने के लिए हार्डवेयर पर कुछ बड़े रुपये भी खर्च कर सकते हैं। मुझे लगता है कि Geiger counter पेशेवर समाधान के लिए मानक है। अधिकांश पोकर साइटें आजकल इसका उपयोग करती हैं।

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