दोनों /dev/random
और /dev/urandom
एक "एन्ट्रापी पूल" का उपयोग करें। जब पूल बाहर निकलता है, तो /dev/random
इसे फिर से भरने के लिए इंतजार करता है, जिसके लिए निगरानी प्रणाली व्यवहार (कीबोर्ड इनपुट, माउस आंदोलन, आदि) की आवश्यकता होती है, जबकि /dev/urandom
आप छद्म यादृच्छिक डेटा देना जारी रखेंगे। /dev/random
सैद्धांतिक रूप से उच्च गुणवत्ता है, लेकिन /dev/urandom
लगभग निश्चित रूप से आपके उद्देश्यों के लिए काफी अच्छा है। (लेकिन /dev/urandom
संभवत: कुछ अन्य तरीकों की तुलना में धीमी गति से भी हो सकता है। हार्ड ड्राइव को मिटाने के लिए एक तेज, लेकिन कम गुणवत्ता वाला, जनरेटर शायद काफी अच्छा है। यह स्पष्ट नहीं है कि एक हमलावर को उस अनुक्रम को जानने से कोई फायदा होगा जो उत्पन्न होने वाला है, या। यादृच्छिक संख्या इस उद्देश्य के लिए 0, 1, 2, 3, 4, .... जैसे अनुक्रम से बेहतर हैं ।)
random(4)
आदमी पृष्ठ का हवाला देते हुए :
यदि आप इस बारे में अनिश्चित हैं कि आपको इसका उपयोग करना चाहिए /dev/random
या
/dev/urandom
, तो शायद आप बाद का उपयोग करना चाहते हैं। एक सामान्य नियम के रूप में, /dev/urandom
लंबे समय तक रहने वाले GPG / SSL / SSH कुंजियों को छोड़कर हर चीज के लिए उपयोग किया जाना चाहिए।
अद्यतन : जब से मैंने लिखा है कि `यादृच्छिक (4) मैन पेज अपडेट किया गया है। अब यह कहता है:
/dev/random
इंटरफ़ेस एक विरासत इंटरफेस माना जाता है, और
/dev/urandom
पसंद किया जाता है और सभी उपयोग के मामलों में पर्याप्त, आवेदन जो जल्दी बूट समय के दौरान अनियमितता की आवश्यकता होती है के अपवाद के साथ; इन अनुप्रयोगों के लिए, getrandom(2)
इसके बजाय उपयोग किया जाना चाहिए, क्योंकि यह तब तक अवरुद्ध होगा जब तक कि एंट्रॉपी पूल को प्रारंभ नहीं किया जाता है।
थॉमस हुनन द्वारा " मिथकों के बारे में / देव / आरेख " भी देखें ।
लेकिन /dev/urandom
, भले ही यह ब्लॉक न हो, अगर आप भारी मात्रा में डेटा उत्पन्न करना चाहते हैं, तो यह बहुत धीमा होने की संभावना है। इसे आज़माने से पहले अपने सिस्टम पर कुछ माप लें।
संपादित करें: निम्नलिखित "सत्य" यादृच्छिक संख्या बनाम छद्म यादृच्छिक संख्या पर एक विषयांतर है। यदि आप जिस विषय में रुचि रखते हैं, वह प्रश्न का व्यावहारिक उत्तर है, तो आप अभी पढ़ना बंद कर सकते हैं।
मुझे लगता है कि दावे (यहां अन्य उत्तरों में शामिल हैं) जो कि /dev/random
छद्म-यादृच्छिक संख्या जनरेटर (PRNG) के विपरीत "सही" यादृच्छिक संख्या जनरेटर को लागू करता है। उदाहरण के लिए, विकिपीडिया लेख ऐसा दावा करता है। मुझे विश्वास नहीं है कि यह सही है। यहाँ इसकी कुछ चर्चा है जो हार्डवेयर रैंडम नंबर जनरेटर को संदर्भित करती है, लेकिन मुझे कोई सबूत नहीं दिखता है कि /dev/random
आमतौर पर इस तरह के डिवाइस का उपयोग किया जाता है, या कि विशिष्ट कंप्यूटरों में भी ऐसा उपकरण होता है। वे PRNGs से C rand()
फ़ंक्शन की तरह भिन्न होते हैं , जिसमें वे निर्धारक नहीं होते हैं, क्योंकि वे उन स्रोतों से कटाई करते हैं जो व्यावहारिक रूप से अप्रत्याशित हैं।
मैं कहता हूँ कि "यादृच्छिक" संख्या जनरेटर के तीन वर्ग हैं:
नियतात्मक PRNGs, C के rand()
फंक्शन की तरह , जो बार-बार क्रमबद्ध अनुक्रम के सांख्यिकीय गुणों वाले (अधिक या कम) दोहराए जाने वाले दृश्यों को उत्पन्न करने के लिए एक एल्गोरिथ्म का उपयोग करते हैं। ये गेम के लिए पर्याप्त हो सकते हैं (उन्हें सीडिंग करने का अच्छा तरीका दिया गया है), और उन अनुप्रयोगों के लिए आवश्यक हैं जिनके लिए पुनरावृत्ति की आवश्यकता होती है, लेकिन वे क्रिप्टोग्राफी के लिए उपयुक्त नहीं हैं।
जेनरेटर जैसे /dev/random
और /dev/urandom
उस कटाई को कुछ व्यावहारिक रूप से अप्रत्याशित स्रोत जैसे I / O गतिविधि से काटते हैं (यही कारण है कि कीबोर्ड पर तेज़ चलना या माउस हिलाना /dev/random
अधिक डेटा उत्पन्न कर सकता है)। यह स्पष्ट नहीं है (मेरे लिए) कि क्या ये PRNG की परिभाषा को संतुष्ट करते हैं (मैंने ऐसी परिभाषाएँ देखी हैं जो कहती हैं कि PRNG नियतात्मक है), लेकिन न तो वे सच यादृच्छिक संख्या जनरेटर हैं।
हार्डवेयर यादृच्छिक संख्या जनरेटर जो अपने प्रारंभिक राज्य के पूर्ण ज्ञान के साथ भी शारीरिक रूप से अप्रत्याशित हैं, और इसके अलावा सही सांख्यिकीय गुणों को सुनिश्चित करने के लिए गणितीय तकनीकों का उपयोग करते हैं।