शीर्षक और आपके प्रश्न का मुख्य भाग दो अलग-अलग प्रश्न पूछते हैं: कैसे ओएस एन्ट्रॉपी बनाता है (यह वास्तव में एन्ट्रापी प्राप्त करना चाहिए ), और यह कैसे इस एन्ट्रापी से छद्म यादृच्छिकता उत्पन्न करता है। मैं अंतर समझाकर शुरू करूंगा।
यादृच्छिकता कहाँ से आती है?
यादृच्छिक संख्या जनरेटर (RNG) दो प्रकारों में आते हैं:
कुछ अनुप्रयोग, जैसे भौतिक घटना के सिमुलेशन, यादृच्छिक संख्याओं के साथ सामग्री हो सकते हैं जो सांख्यिकीय परीक्षण पास करते हैं। अन्य अनुप्रयोगों, जैसे कि क्रिप्टोग्राफ़िक कुंजियों की पीढ़ी, एक मजबूत संपत्ति की आवश्यकता होती है: अप्रत्याशितता । अप्रत्याशितता एक सुरक्षा संपत्ति है, न कि (केवल) एक सांख्यिकीय संपत्ति: इसका मतलब है कि एक विरोधी यादृच्छिक संख्या जनरेटर के उत्पादन का अनुमान नहीं लगा सकता है। (अधिक सटीक रूप से, आप RNG आउटपुट के प्रत्येक बिट का अनुमान लगाने के लिए एक प्रतिकूलता के लिए संभाव्यता को मापकर RNG की गुणवत्ता को माप सकते हैं। यदि संभावना औसत रूप से 1/2 से भिन्न है, तो RNG खराब है।)
भौतिक घटनाएं हैं जो अच्छे सांख्यिकीय गुणों के साथ यादृच्छिक डेटा का उत्पादन करती हैं - उदाहरण के लिए, रेडियोधर्मी क्षय, या पृष्ठभूमि के शोर के कुछ खगोलीय अवलोकन, या शेयर बाजार में उतार-चढ़ाव। इस तरह के शारीरिक माप को एक समान संभाव्यता वितरण में पक्षपातपूर्ण वितरण वितरण को चालू करने के लिए कंडीशनिंग ( व्हाइटनिंग ) की आवश्यकता होती है। एक भौतिक माप, जो सभी के लिए जाना जाता है, क्रिप्टोग्राफी के लिए अच्छा नहीं है: स्टॉक मार्केट में उतार-चढ़ाव जियोहैशिंग के लिए अच्छा हो सकता है , लेकिन आप गुप्त कुंजी उत्पन्न करने के लिए उनका उपयोग नहीं कर सकते ।
क्रिप्टोग्राफी में गोपनीयता की आवश्यकता होती है : एक सलाहकार को कंडीशनिंग में गए डेटा का पता लगाने में सक्षम नहीं होना चाहिए। हैं क्रिप्टोग्राफी द्वारा सुरक्षित छद्म यादृच्छिक संख्या जनरेटर PRNG एल्गोरिदम जिसका उत्पादन क्रिप्टोग्राफिक अनुप्रयोगों में उपयोग करते हैं, के अलावा के लिए उपयुक्त है: (CSPRNG) अच्छा सांख्यिकीय गुण । CSPRNG को क्रिप्टोग्राफिक रूप से सुरक्षित बनाने वाले गुणों में से एक यह है कि इसका आउटपुट एक प्रतिकूल स्थिति को आंतरिक स्थिति को फिर से संगठित करने की अनुमति नहीं देता है (सभी बिट्स को जानती है लेकिन एक CSPRNG द्वारा उत्पादित एक लापता बिट को खोजने में मदद नहीं करता है)। मैं CSPRNG बनाने के तरीके में नहीं जाऊँगा क्योंकि यह आसान बिट है - आप पेशेवर क्रिप्टोग्राफर द्वारा दिए गए व्यंजनों का पालन कर सकते हैं ( मानक का उपयोग करेंएल्गोरिथ्म, जैसे Hash_DRBG, HMAC_DRBG या NTR SP 800-90A से CTR_DRBG ) या ANSI X9.31 PRNG । CSPRNG को सुरक्षित होने के लिए अपने राज्य की दो संपत्तियों की आवश्यकता है:
- राज्य को प्रारंभ से और हर समय गुप्त रखा जाना चाहिए (हालांकि राज्य के संपर्क से पिछले आउटपुट प्रकट नहीं होंगे)।
- राज्य रैखिक होना चाहिए: RNG को एक ही राज्य से दो बार शुरू नहीं किया जाना चाहिए।
एक यादृच्छिक संख्या जनरेटर की वास्तुकला
व्यवहार में, लगभग सभी अच्छे यादृच्छिक संख्या जनरेटर एक या अधिक एन्ट्रापी स्रोतों के साथ एक CSPRNG को जोड़ते हैं । इसे संक्षेप में कहें तो एन्ट्रापी डेटा के स्रोत की अप्रत्याशितता का एक उपाय है। एक हार्डवेयर RNG पर विशुद्ध रूप से एक यादृच्छिक संख्या जनरेटर की स्थापना मुश्किल है:
- कच्चे भौतिक डेटा को वैसे भी संभावना की आवश्यकता होती है, ताकि एक समान वितरण में संभाव्य डेटा को चालू किया जा सके।
- यादृच्छिकता के स्रोत से उत्पादन को गुप्त रखा जाना चाहिए।
- एंट्रोपी स्रोत अक्सर मांग की तुलना में धीमा होते हैं।
इस प्रकार एक ऑपरेटिंग सिस्टम में RNG लगभग हमेशा इस तरह काम करता है :
- अप्रत्याशित आंतरिक स्थिति का निर्माण करने के लिए पर्याप्त एन्ट्रापी संचित करें ।
- बीज के रूप में संचित एन्ट्रापी का उपयोग करके, अर्थात आंतरिक अवस्था के प्रारंभिक मूल्य के रूप में, एक CSPRNG चलाएं ।
- वैकल्पिक रूप से, समय-समय पर आंतरिक राज्य में अतिरिक्त एन्ट्रॉपी को मिलाते हैं। (यह कड़ाई से आवश्यक नहीं है, क्योंकि किसी भी औसत दर्जे की दर से एन्ट्रापी का "उपभोग" नहीं किया जाता है । यह कुछ खतरों के खिलाफ मदद करता है जो पूरे सिस्टम से समझौता किए बिना आरएनजी राज्य को लीक करते हैं।)
एक यादृच्छिक संख्या पीढ़ी सेवा एक ऑपरेटिंग सिस्टम के काम का हिस्सा है, क्योंकि एन्ट्रापी सभा को हार्डवेयर तक पहुंच की आवश्यकता होती है, और एन्ट्रॉपी स्रोत एक साझा संसाधन का गठन करते हैं: ऑपरेटिंग सिस्टम को उन्हें इकट्ठा करना चाहिए और उन से आउटपुट प्राप्त करना चाहिए जो अनुप्रयोगों के अनुरूप होंगे। ऑपरेटिंग सिस्टम में एंट्रोपी स्रोतों के छद्म यादृच्छिक कंडीशनिंग की आवश्यकता होती है; यह क्रिप्टोग्राफिक रूप से सुरक्षित हो सकता है, क्योंकि यह मौलिक रूप से कठिन नहीं है (और यह ऑपरेटिंग सिस्टम पर आवश्यक है जहां एप्लिकेशन एक-दूसरे पर भरोसा नहीं करते हैं; पूरी तरह से सहकारी प्रणालियों पर, प्रत्येक एप्लिकेशन को आंतरिक रूप से अपना CSPRNG चलाना होगा यदि ऑपरेटिंग सिस्टम; वैसे भी एक प्रदान नहीं किया)।
लगातार भंडारण वाले अधिकांश सिस्टम डिस्क से एक RNG बीज को लोड करेंगे (जब मैं बूट करता हूं तो "डिस्क का उपयोग किसी भी प्रकार के स्थायी भंडारण के लिए एक संक्षिप्त नाम के रूप में करूंगा) जब वे बूट करते हैं और उस बीज से उत्पन्न कुछ नए छद्म यादृच्छिक डेटा के साथ बीज को अधिलेखित करते हैं," या यदि उस बीज से उत्पन्न रैंडम डेटा के साथ उपलब्ध हो तो एक और एन्ट्रोपी स्रोत। इस तरह, भले ही रिबूट के बाद एन्ट्रॉपी उपलब्ध न हो, लेकिन पिछले सत्र से एन्ट्रापी का पुन: उपयोग किया जाता है।
सहेजे गए राज्य के बारे में कुछ ध्यान रखा जाना चाहिए। याद रखें कि मैंने कैसे कहा कि राज्य रैखिक होना चाहिए? यदि आप एक ही डिस्क स्थिति से दो बार बूट करते हैं, तो आपको एक ही RNG आउटपुट मिलेगा। यदि यह आपके वातावरण में एक संभावना है, तो आपको एंट्रोपी के दूसरे स्रोत की आवश्यकता है। बैकअप से पुनर्स्थापित करते समय, या वर्चुअल मशीन की क्लोनिंग करते समय ध्यान रखें । क्लोनिंग के लिए एक तकनीक संग्रहीत एन्ट्रापी को कुछ पर्यावरणीय डेटा के साथ मिलाना है जो कि पूर्वानुमान योग्य है लेकिन अद्वितीय है (जैसे समय और मैक पता); सावधान रहें कि यदि पर्यावरण डेटा अनुमानित है, तो संग्रहीत वीएम राज्य के कब्जे में कोई भी एक कांटे हुए वीएम उदाहरण के बीज का पुनर्निर्माण कर सकता है।
एन्ट्रापी स्रोत
किसी ऑपरेटिंग सिस्टम में रैंडम नंबर जनरेशन का सबसे चुनौतीपूर्ण हिस्सा ढूँढना, (और सही तरीके से उपयोग करना) है। उपलब्ध एन्ट्रापी स्रोत आवश्यक रूप से हार्डवेयर पर निर्भर करेगा और हार्डवेयर किस वातावरण में चलता है।
यदि आप भाग्यशाली हैं, तो आपका हार्डवेयर एक परिधीय प्रदान करता है जिसका उपयोग एंट्रोपी स्रोत के रूप में किया जा सकता है: एक हार्डवेयर यादृच्छिक संख्या जनरेटर , या तो समर्पित या साइड-पर्पस। उदाहरण के लिए:
NIST SP800-90B हार्डवेयर RNG के लिए डिजाइन दिशानिर्देश प्रदान करता है। एक हार्डवेयर RNG का मूल्यांकन करना मुश्किल है । हार्डवेयर आरएनजी सामान्य रूप से नाजुक जानवर होते हैं, जिन्हें देखभाल के साथ उपयोग करने की आवश्यकता होती है: बूट करने के बाद कई प्रकार की आवश्यकता होती है और अस्थिर करने के लिए कुछ समय के बीच पढ़ता है, वे अक्सर पर्यावरण की स्थिति जैसे तापमान आदि के प्रति संवेदनशील होते हैं।
आईवी ब्रिज आर्किटेक्चर पर आधारित इंटेल x86-64 प्रोसेसर RdRand
इंस्ट्रक्शन प्रदान करते हैं जो थर्मल शोर द्वारा बोए गए CSPRNG से आउटपुट प्रदान करता है । अधिकांश स्मार्टफोन प्रोसेसर में एक हार्डवेयर एन्ट्रापी स्रोत शामिल होता है, हालाँकि Android हमेशा इसका उपयोग नहीं करता है।
जिन प्रणालियों में एक मजबूत एन्ट्रापी स्रोत की कमी होती है, उन्हें कमजोर एन्ट्रोपी स्रोतों के संयोजन के साथ करना पड़ता है और यह सुनिश्चित करना ( एक शब्द भी मजबूत होगा) कि वे पर्याप्त होंगे। रैंडम माउस मूवमेंट क्लाइंट मशीन के लिए लोकप्रिय हैं, और आपने कुछ क्रिप्टोग्राफी प्रोग्राम्स द्वारा सिक्योरिटी शो को देखा होगा, जो आपको माउस को स्थानांतरित करने के लिए कहते हैं (भले ही किसी भी 21 वीं सदी के पीसी ऑपरेटिंग सिस्टम पर ओएस को परेशान किए बिना एप्लिकेशन को संचित करना होगा। )।
यदि आप एक उदाहरण देखना चाहते हैं, तो आप लिनक्स को देख सकते हैं, हालांकि सावधान रहें कि यह सही नहीं है । विशेष रूप से, /dev/random
अक्सर ब्लॉक करता है (क्योंकि यह पर्याप्त एन्ट्रापी तक ब्लॉक होता है, एन्ट्रापी की अत्यधिक रूढ़िवादी धारणा के साथ), जबकि /dev/urandom
लगभग हमेशा पहले बूट को छोड़कर लगभग अच्छा होता है लेकिन जब पर्याप्त एन्ट्रापी नहीं होती है तो कोई संकेत नहीं देता है। लिनक्स में कई HRNG उपकरणों के लिए ड्राइवर हैं , और विभिन्न उपकरणों ( इनपुट डिवाइसों सहित ) और डिस्क टाइमिंग से एन्ट्रापी को संचित करता है ।
यदि आपके पास (गोपनीय) लगातार भंडारण है, तो आप इसका उपयोग एक बूट से अगले तक एंट्रोपी को बचाने के लिए कर सकते हैं, जैसा कि ऊपर बताया गया है। पहले बूट एक नाजुक समय है: प्रणाली, उस बिंदु पर एक काफी उम्मीद के मुताबिक राज्य में हो सकता है विशेष रूप से बड़े पैमाने पर उत्पादन उपकरणों कि अनिवार्य रूप से एक ही तरीके से कारखाने से बाहर काम करते हैं पर। कुछ एम्बेडेड डिवाइस जिनके पास लगातार भंडारण होता है, कारखाने में एक प्रारंभिक बीज के साथ प्रावधान किए जाते हैं (कारखाने में एक कंप्यूटर पर चलने वाले एक आरएनजी द्वारा उत्पादित)। वर्चुअलाइज्ड सर्वर वातावरण में, मेजबान से या एंट्रॉपी सर्वर से वर्चुअल मशीन को इंस्टेंट करते समय प्रारंभिक एन्ट्रॉपी का प्रावधान किया जा सकता है।
खराब बीज वाले उपकरण व्यवहार में एक व्यापक समस्या हैं - सार्वजनिक आरएसए कुंजियों के एक अध्ययन में पाया गया कि कई सर्वरों और उपकरणों में चाबियाँ थीं जो खराब आरएनजी के साथ उत्पन्न हुई थीं, सबसे अधिक संभावना एक अच्छा पीआरएनजी था जो अपर्याप्त रूप से बोया गया था। OS डिज़ाइनर के रूप में, आप इस समस्या को अपने आप हल नहीं कर सकते हैं: यह परिनियोजन श्रृंखला के नियंत्रण में निकाय का काम है ताकि यह सुनिश्चित किया जा सके कि RNG पहले बूट पर ठीक से हो जाएगा । OS डिज़ाइनर के रूप में आपका कार्य एक उचित RNG प्रदान करना है, जिसमें पहले बीज को उपलब्ध कराने के लिए एक इंटरफ़ेस शामिल है, और यदि RNG को ठीक से बोने से पहले उपयोग किया जाता है, तो उचित त्रुटि को सुनिश्चित करने के लिए।