इस सत्य का एक दाना है, वास्तव में मिथक की तुलना में अधिक सत्य है, लेकिन फिर भी यह कथन क्या चल रहा है की एक बुनियादी गलतफहमी को दर्शाता है। हां, GPG के साथ कुंजी बनाते समय माउस को हिलाना एक अच्छा विचार हो सकता है। हां, मूव को मूव करने में कुछ एन्ट्रॉपी का योगदान होता है जो रैंडम नंबरों को रैंडम बनाता है। नहीं, माउस को हिलाने से चाबी अधिक सुरक्षित नहीं है।
क्रिप्टोग्राफी के लिए उपयुक्त सभी अच्छे यादृच्छिक जनरेटर, और लिनक्स उस श्रेणी में है, दो घटक हैं:
- एक एंट्रोपी स्रोत, जो गैर-नियतात्मक है। एन्ट्रापी का उद्देश्य अप्रत्याशित डेटा के साथ यादृच्छिक संख्या जनरेटर को बूटस्ट्रैप करना है। एन्ट्रापी स्रोत गैर-निर्धारक होना चाहिए: अन्यथा, एक विरोधी एक ही गणना को पुन: पेश कर सकता है।
- एक छद्म आयामी संख्या जनरेटर , जो एक बदलते आंतरिक राज्य से एक नियतात्मक फैशन में अप्रत्याशित यादृच्छिक संख्या पैदा करता है।
एन्ट्रॉपी को एक स्रोत से आना पड़ता है जो कंप्यूटर के लिए बाहरी है। उपयोगकर्ता एंट्रोपी का एक स्रोत है। उपयोगकर्ता जो करता है वह ज्यादातर यादृच्छिक नहीं है, लेकिन कीस्ट्रोक्स और माउस आंदोलनों का ठीक समय इतना अप्रत्याशित है जितना कि थोड़ा यादृच्छिक होना - बहुत यादृच्छिक नहीं, लेकिन बहुत कम, यह जम जाता है। एन्ट्रॉपी के अन्य संभावित स्रोतों में नेटवर्क पैकेट और कैमरा या माइक्रोफोन सफेद शोर का समय शामिल है। विभिन्न कर्नेल संस्करण और कॉन्फ़िगरेशन स्रोतों के एक अलग सेट का उपयोग कर सकते हैं। कुछ कंप्यूटरों में रेडियोधर्मी क्षय के आधार पर हार्डवेयर RNG सर्किट होते हैं या, कम प्रभावशाली, अस्थिर इलेक्ट्रॉनिक सर्किट। ये समर्पित स्रोत विशेष रूप से एम्बेडेड उपकरणों और सर्वरों में उपयोगी होते हैं, जो अजीब चीजों को करने के लिए एक उपयोगकर्ता के बिना अपने पहले बूट पर काफी पूर्वानुमानित व्यवहार कर सकते हैं।
लिनक्स दो उपकरणों के माध्यम से कार्यक्रमों को यादृच्छिक संख्या प्रदान करता है: /dev/random
और/dev/urandom
। या तो डिवाइस से पढ़ना क्रिप्टोग्राफिक-गुणवत्ता देता है। दोनों डिवाइस राज्य को बदलने और यादृच्छिक बाइट्स का उत्पादन करने के लिए एक ही आंतरिक आरएनजी राज्य और एक ही एल्गोरिदम का उपयोग करते हैं। उनके पास अजीबोगरीब सीमाएँ हैं जो उनमें से किसी को भी सही नहीं बनाती हैं:
/dev/urandom
यदि सिस्टम अभी तक पर्याप्त एन्ट्रॉपी जमा नहीं कर पाया है, तो पूर्वानुमानित डेटा वापस कर सकता है।
/dev/random
यदि पर्याप्त नहीं है तो उपलब्ध एन्ट्रापी और ब्लॉक की मात्रा की गणना करता है। यह अच्छा लगता है, सिवाय इसके कि गणना सैद्धांतिक विचारों पर आधारित है जो प्रत्येक आउटपुट बिट के साथ रैखिक रूप से उपलब्ध एन्ट्रापी की मात्रा को कम करते हैं। इस प्रकार /dev/random
बहुत जल्दी ब्लॉक हो जाता है।
लिनक्स सिस्टम डिस्क पर आंतरिक RNG स्टेट को सेव करता है और इसे बूट समय पर रिस्टोर करता है। इसलिए एन्ट्रापी एक बूट से दूसरे तक चलती है। एक ही समय जब लिनक्स सिस्टम में एन्ट्रापी की कमी हो सकती है जब इसे नए सिरे से स्थापित किया जाता है। एक बार सिस्टम में पर्याप्त एन्ट्रापी होने के बाद, एन्ट्रापी में कमी नहीं होती है; केवल लिनक्स की त्रुटिपूर्ण गणना घट जाती है। इस विचार के अधिक स्पष्टीकरण के /dev/urandom
लिए , एक पेशेवर क्रिप्टोग्राफर द्वारा क्रिप्टोग्राफिक कुंजी उत्पन्न करने के लिए रीड उपयुक्त है । Aso देखें क्या आप random.c में उपयोग किए गए एन्ट्रापी अनुमान की व्याख्या कर सकते हैं ।
माउस को ले जाना सिस्टम में अधिक एन्ट्रापी जोड़ता है। लेकिन gpg से केवल पढ़ा जा सकता है /dev/random
, नहीं/dev/urandom
(इस समस्या को हल करने का एक तरीका /dev/random
1: 9 डिवाइस के रूप में एक ही बनाना है /dev/urandom
), इसलिए इसे कभी भी यादृच्छिक-पर्याप्त-यादृच्छिक संख्या प्राप्त करने का जोखिम नहीं है। यदि आप माउस को स्थानांतरित नहीं करते हैं, तो कुंजी उतनी ही यादृच्छिक है जितनी हो सकती है; लेकिन क्या हो सकता है कि gpg से पढ़ने में अवरुद्ध हो सकता है /dev/random
, कर्नेल के एन्ट्रापी काउंटर के उठने की प्रतीक्षा कर रहा है।