GPG कुंजी के लिए "यादृच्छिक संख्या एन्ट्रापी" जोड़ना?


10

निम्नलिखित वीडियो में: Linux HOWTO: PGP के साथ अपने डेटा को सुरक्षित करें, भाग 2 , आपको दिखाया गया है कि कैसे के साथ एक महत्वपूर्ण जोड़ी बनाएं gpg। के बारे में 1:50, प्रशिक्षक निम्नलिखित कहता है:

जबकि कुंजी उत्पन्न की जा रही है, यह आपके माउस को थोड़ा सा इधर-उधर करने के लिए है कि यह कीपर के निर्माण के लिए थोड़ा अधिक यादृच्छिक संख्या एन्ट्रापी देने के लिए है।

यह मुझे एक मिथक की तरह लगता है, खासकर जब से कमांड-लाइन टूल आमतौर पर कर्सर से प्रभावित नहीं होना चाहिए। दूसरी ओर, मेरे पास कोई सुराग नहीं है कि लिनक्स का यादृच्छिक संख्या जनरेटर कैसे काम करता है, चाहे वह जीयूआई द्वारा साझा किया गया हो या उससे स्वतंत्र हो। क्या वह जो दावा करता है, उसमें कोई स्टॉक है या यह कार्गो पंथ प्रोग्रामिंग का एक उदाहरण है ?


एक पक्ष-प्रश्न के रूप में, क्या यह "शहरी मिथक" का सही उपयोग है या "कंप्यूटिंग के भीतर मिथक" के लिए एक समान वाक्यांश है?
IQAndreas

1
मुझे लगता है कि वाक्यांश शहरी कथा है ; मैंने कभी शहरी मिथक के बारे में नहीं सुना । En.wikipedia.org/wiki/Urban_legend देखें कंप्यूटिंग में, "कार्गो पंथ" वाक्यांश उपयुक्त हो सकता है।
व्युत्पन्न

जवाबों:


8

इस सत्य का एक दाना है, वास्तव में मिथक की तुलना में अधिक सत्य है, लेकिन फिर भी यह कथन क्या चल रहा है की एक बुनियादी गलतफहमी को दर्शाता है। हां, GPG के साथ कुंजी बनाते समय माउस को हिलाना एक अच्छा विचार हो सकता है। हां, मूव को मूव करने में कुछ एन्ट्रॉपी का योगदान होता है जो रैंडम नंबरों को रैंडम बनाता है। नहीं, माउस को हिलाने से चाबी अधिक सुरक्षित नहीं है।

क्रिप्टोग्राफी के लिए उपयुक्त सभी अच्छे यादृच्छिक जनरेटर, और लिनक्स उस श्रेणी में है, दो घटक हैं:

  • एक एंट्रोपी स्रोत, जो गैर-नियतात्मक है। एन्ट्रापी का उद्देश्य अप्रत्याशित डेटा के साथ यादृच्छिक संख्या जनरेटर को बूटस्ट्रैप करना है। एन्ट्रापी स्रोत गैर-निर्धारक होना चाहिए: अन्यथा, एक विरोधी एक ही गणना को पुन: पेश कर सकता है।
  • एक छद्म आयामी संख्या जनरेटर , जो एक बदलते आंतरिक राज्य से एक नियतात्मक फैशन में अप्रत्याशित यादृच्छिक संख्या पैदा करता है।

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

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

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

लिनक्स सिस्टम डिस्क पर आंतरिक RNG स्टेट को सेव करता है और इसे बूट समय पर रिस्टोर करता है। इसलिए एन्ट्रापी एक बूट से दूसरे तक चलती है। एक ही समय जब लिनक्स सिस्टम में एन्ट्रापी की कमी हो सकती है जब इसे नए सिरे से स्थापित किया जाता है। एक बार सिस्टम में पर्याप्त एन्ट्रापी होने के बाद, एन्ट्रापी में कमी नहीं होती है; केवल लिनक्स की त्रुटिपूर्ण गणना घट जाती है। इस विचार के अधिक स्पष्टीकरण के /dev/urandomलिए , एक पेशेवर क्रिप्टोग्राफर द्वारा क्रिप्टोग्राफिक कुंजी उत्पन्न करने के लिए रीड उपयुक्त हैAso देखें क्या आप random.c में उपयोग किए गए एन्ट्रापी अनुमान की व्याख्या कर सकते हैं

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


लिनक्स के वर्तमान संस्करणों को छोड़कर, मेरे परीक्षण से कम से कम, एंट्रोपी (या कम से कम अनुमानित एन्ट्रोपी) के स्रोत के रूप में इनपुट उपकरणों का उपयोग न करें। मुझे पूरा यकीन है कि उन्होंने इसे बदल दिया क्योंकि सिद्धांत में वे एक हमलावर के नियंत्रण में हो सकते हैं।
व्युत्पन्न

3.12 के रूप में @derobert वहाँ के लिए एक कॉल है add_input_randomnessमें drivers/input/input.c, लेकिन मैं किन परिस्थितियों यह वास्तव में इंजेक्षन एन्ट्रापी होगा में पता नहीं है।
गिल्स एसओ- बुराई को रोकें '

मैं अनुमान लगा रहा हूं कि यह एन्ट्रापी को जोड़ता है, लेकिन 0 के अनुमान के साथ ... मैंने USB माउस और PS / 2 कीबोर्ड दोनों की कोशिश की, न ही एन्ट्रापी का अनुमान। हालांकि, मुझे यकीन नहीं है कि हालांकि, मुझे कोड में credit_entropy_bits की कॉल दिखाई दे रही है।
व्युत्पन्न

3

GPG लिनक्स (कर्नेल) यादृच्छिक संख्या जनरेटर का उपयोग कर रहा है। कर्नेल जनरेटर सभी प्रकार के स्थानों से एन्ट्रापी (यादृच्छिकता) प्राप्त करता है, उनमें से कुछ निश्चित व्यवधानों के लिए समय बाधित है। माउस को स्थानांतरित करना (और टाइपिंग, डिस्क गतिविधि, आदि) सभी में व्यवधान उत्पन्न होगा।

तो, माउस को ले जाना वास्तव में यादृच्छिक संख्या जनरेटर में फ़ीड करता है। लेकिन क्या यह उपयोग में सटीक कर्नेल संस्करण पर निर्भर करता है; नए संस्करण (कम से कम मेरे परीक्षण में) एन्ट्रापी के लिए कीबोर्ड या माउस इंटरप्ट का उपयोग नहीं करते हैं। डिस्क गतिविधि, हालांकि, (इसलिए, उदाहरण के लिए, रनिंग में syncसंभावित रूप से बड़ी मात्रा में एन्ट्रापी शामिल होगी, यह निर्भर करता है कि कितना फ्लश किया गया है)।

संक्षेप में: यह वर्तमान लिनक्स संस्करणों पर सच नहीं है। यह पुराने लोगों पर था।

हालाँकि, अगर जनरेटर एन्ट्रापी से बाहर निकलता है, तो यह बस रुकने वाला है - इसलिए आपकी मुख्य पीढ़ी तब तक लटकेगी जब तक कि कुछ एन्ट्रॉपी उत्पन्न नहीं हो जाती। तो यह एक सुरक्षा समस्या नहीं, हमेशा के लिए एक समस्या होगी।

आप देख सकते हैं कि कितनी एन्ट्रापी उपलब्ध है cat /proc/sys/kernel/random/entropy_avail


यह भी ध्यान दें कि आप rngdएंट्रॉपी पूल को कलात्मक रूप से खिलाने के लिए टूल का उपयोग कर सकते हैं ।
पैट्रिक

@ पैट्रिक वास्तव में, और यदि आपके पास एक नया चिप है और एनएसए पर भरोसा करें (ओह, रुको, मेरा मतलब है, इंटेल) आप RDRAND का उपयोग कर सकते हैं।
व्युत्पन्न

havegedयह एंट्रोपी पूल को कृत्रिम रूप से खिलाने के लिए एक और अच्छा उपकरण है।
माविलन

यह पूरी कहानी नहीं है - आरएनजी एन्ट्रॉपी से बाहर नहीं चलती है, यह एंट्रोपी के आंतरिक उपाय से बाहर निकलती है। इसके अलावा, पहेली का एक महत्वपूर्ण टुकड़ा यह है कि gpg माउस की परवाह नहीं करता है, यह कर्नेल करता है।
गिल्स एसओ- बुराई को रोकें '

@Gilles मैंने स्पष्ट किया है कि gpg लिनक्स RNG का उपयोग कर रहा है। और एन्ट्रापी अनुमानक में कीड़े गुंजाइश से परे लगते हैं।
व्युत्पन्न

0

पूंछ की एक बहुत तेज कुंजी पीढ़ी है क्योंकि यह havegedस्थापित है:

sudo apt-get install haveged
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.