2010-09-11 6 views
56

मैं लगभग /dev/urandom पढ़ रहा हूं, और जहां तक ​​मैं कह सकता हूं, /dev/random नेटवर्क पैकेट समय आदि जैसे कई कार्यक्रमों का लाभ उठाकर क्रिप्टोग्राफ़िक रूप से यादृच्छिक संख्याएं बनाता है। हालांकि, क्या मुझे सही समझ आया कि /dev/urandom एक पीआरएनजी का उपयोग करता है, जिसमें बीज /dev/random से संख्या? या क्या यह /dev/random का उपयोग तब तक करता है जब तक बिट्स होते हैं - और जब वे बाहर निकलते हैं तो यह कुछ पीआरएनजी पर वापस गिरते हुए बीज से गिर जाता है?क्या मैं समझ गया/dev/urandom?

उत्तर

76
urandom मैनपेज से

:

यादृच्छिक संख्या जनरेटर बटोरता डिवाइस ड्राइवरों और अन्य स्रोतों से पर्यावरणीय शोर एक एन्ट्रापी पूल में। जनरेटर भी एन्ट्रॉपी पूल में शोर के बिट्स की संख्या का अनुमान रखता है। इस एन्ट्रॉपी पूल से यादृच्छिक संख्या बनाए गए हैं।

जब पढ़ा,/dev/यादृच्छिक डिवाइस केवल यादृच्छिक बाइट्स भीतर शोर के टुकड़े की अनुमानित संख्या एन्ट्रापी पूल में वापस आ जाएगी।/dev/random उन उपयोगों के लिए उपयुक्त होना चाहिए जिनकी आवश्यकता बहुत उच्च गुणवत्ता वाले यादृच्छिकता जैसे एक बार पैड या कुंजी पीढ़ी के रूप में होनी चाहिए। जब एंट्रॉपी पूल खाली होता है, तो अतिरिक्त पर्यावरण शोर एकत्र होने तक/dev/random/ ब्लॉक से पढ़ता है।

/dev/urandom डिवाइस से पढ़ा गया एन्ट्रॉपी के लिए प्रतीक्षा को अवरुद्ध नहीं करेगा। नतीजतन, अगर एंट्रॉपी पूल में पर्याप्त एन्ट्रॉपी नहीं है, तो लौटाए गए मान सैद्धांतिक रूप से पर अल्टोरिदम पर क्रिप्टोग्राफ़िक हमले के लिए कमजोर हैं। ऐसा करने के लिए का ज्ञान वर्तमान अवर्गीकृत साहित्य में उपलब्ध नहीं है, लेकिन यह सैद्धांतिक रूप से संभव है कि कोई हमला हो सकता है। यदि यह आपके आवेदन में चिंता है, तो इसके बजाय /dev/random का उपयोग करें।

दोनों, एक PRNG का उपयोग करता है, हालांकि पर्यावरण डेटा का उपयोग कर और एन्ट्रापी पूल यह astronomically और अधिक कठिन PRNG दरार, और असंभव भी ठीक उसी पर्यावरण डेटा एकत्र करने के बिना बनाता है।

अंगूठे के नियम के रूप में, बिना किसी महंगे हार्डवेयर के डेटा, जो क्वांटम घटनाओं से डेटा एकत्र करता है, वास्तविक यादृच्छिक संख्या जनरेटर (यानी एक आरएनजी जो वास्तव में अप्रत्याशित संख्या उत्पन्न करता है) जैसी कोई चीज नहीं है; हालांकि क्रिप्टोग्राफिक उद्देश्य के लिए,/dev/random या/dev/urandom पर्याप्त होगा (विधि का उपयोग एक सीपीआरएनजी, क्रिप्टोग्राफिक छद्म-यादृच्छिक संख्या जनरेटर के लिए है)।

एंट्रॉपी पूल और/dev/random के अवरुद्ध अवरोध को यादृच्छिक संख्या की भविष्यवाणी करने की असंभवता सुनिश्चित करने के लिए एक सुरक्षित गार्ड के रूप में उपयोग किया जाता है; यदि, उदाहरण के लिए, एक हमलावर ने सिस्टम के एन्ट्रॉपी पूल को समाप्त कर दिया, तो यह संभव है, हालांकि आज की तकनीक के साथ अत्यधिक संभावना नहीं है, कि वह/dev/urandom के आउटपुट की भविष्यवाणी कर सकता है जिसे लंबे समय तक शोध नहीं किया गया है (हालांकि जिसके लिए हमलावर को अधिक उद्यमों को इकट्ठा करने की प्रणाली की क्षमता को समाप्त करने की भी आवश्यकता होगी, जो खगोलीय रूप से असंभव रूप से भी है)।

+0

मुझे भी मेरी जानकारी का संदेह था। धन्यवाद। – jyz

+1

@ ली, तो ओएस कहां है/dev/random' बिट्स स्टोर करता है? क्या इन सीमाओं में से कितने स्टोर हैं, इसकी कोई सीमा है? – Pacerier

+0

@Pacerier, random.c manpage और इसी स्रोत को अच्छी तरह से टिप्पणी की गई है और काफी रोचक है: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random ।सी – ijustlovemath

30

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

लिनक्स का /dev/urandom समान है कि यह कभी भी अवरुद्ध नहीं होगा, और बूट के ठीक बाद उपयोग किए जाने पर निम्न गुणवत्ता वाले यादृच्छिकता को वापस करने का जोखिम हो सकता है। दूसरी तरफ, /dev/random बूट-टाइम के बाद भी लंबे समय तक अवरुद्ध हो सकता है, जो एक समस्या भी है। मैंने अक्सर सर्वर को रहस्यमय तरीके से रोक दिया है, क्योंकि कुछ सॉफ्टवेयर /dev/random का उपयोग करने पर जोर दे रहे थे, और कीबोर्ड-कम सर्वर को पर्याप्त एन्ट्रॉपी नहीं मिल रही थी।

सामान्य लिनक्स वितरण /dev/urandom से प्राप्त एक यादृच्छिक बीज को बंद करने पर बचाता है, और इसे अगले बूट पर वापस इंजेक्ट करता है, इस प्रकार /dev/urandom द्वारा प्रदान किए गए यादृच्छिक की गुणवत्ता की गारंटी देता है। केवल ओएस इंस्टॉलेशन के दौरान क्रिप्टोग्राफिक गुणवत्ता एक मुद्दा बन जाती है, और आमतौर पर ऐसा नहीं होता है क्योंकि इंस्टॉलेशन में मानव के साथ कई इंटरैक्शन शामिल होते हैं जो इंस्टॉलेशन करते हैं, एंट्रॉपी की भीड़ प्रदान करते हैं।

लिनक्स और फ्रीबीएसडी दोनों के तहत, आपको /dev/urandom, /dev/random का उपयोग करना चाहिए।

+0

यह मानते हुए कि/dev/random को/dev/urandom से कम सुरक्षित माना जाता है, क्या यह सुझाव नहीं दिया जा सकता है कि शुरुआती बीज/dev/random पर निर्भर होने के कारण यह एक कम सुरक्षित दृष्टिकोण है? – monokrome

+2

नहीं/dev/urandom/dev/urandom से कम सुरक्षित है क्योंकि/dev/urandom एंट्रॉपी – Demi

+7

@ डेमेट्री से बाहर होने पर अवरुद्ध नहीं होता है - आपने अभी कहा है कि/dev/urandom स्वयं से कम सुरक्षित है। –

7

here

/dev/random का हवाला देते हुए एन्ट्रापी पूल के बाद समाप्त हो रहा है रोकेंगे। यह तब तक अवरुद्ध रहेगा जब तक उपलब्ध एंट्रॉपी के स्रोतों से अतिरिक्त डेटा एकत्र नहीं किया जाता है। यह यादृच्छिक डेटा पीढ़ी को धीमा कर सकता है।

/dev/urandom ब्लॉक नहीं होगा। इसके बजाय यह अधिक छद्म-यादृच्छिक बिट्स बनाने के लिए आंतरिक पूल का पुन: उपयोग करेगा।


/dev/urandom सबसे अच्छा प्रयोग किया जाता है जब:

  • तुम सिर्फ परीक्षण के कुछ प्रकार के लिए यादृच्छिक डेटा के साथ एक बड़ी फ़ाइल चाहते हैं।
  • आप dd कमांड का उपयोग कर डिस्क से डेटा को यादृच्छिक डेटा के साथ बदलकर कम कर सकते हैं।
  • लगभग हर जगह जहां आपके पास /dev/random का उपयोग करने का वास्तव में अच्छा कारण नहीं है। - एक बार पैड, कुंजी पीढ़ी

    • अनियमितता अपने आवेदन में क्रिप्टोग्राफी के सुरक्षा के लिए महत्वपूर्ण है:

    /dev/random जब बेहतर विकल्प होने की संभावना है।

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