मुझे उबंटू वर्चुअल मशीन पर काम करने के लिए कैसे / देव / यादृच्छिक मिलता है?


19

जाहिरा तौर पर, / dev / random हार्डवेयर इंटरप्ट या भौतिक हार्डवेयर के समान अप्रत्याशित पहलुओं पर आधारित है। चूंकि वर्चुअल मशीनों में भौतिक हार्डवेयर नहीं होते हैं, इसलिए वर्चुअल मशीन के cat /dev/randomभीतर चलने से कुछ नहीं होता है। मैं Ubuntuv 11.04 होस्ट को होस्ट और अतिथि के रूप में उपयोग कर रहा हूं, libvirt / KVM के साथ।

मुझे एक वीएम के अंदर केर्बोस सेट करने की आवश्यकता है, लेकिन krb5_newrealmबस हमेशा के लिए "लोड हो रहा है यादृच्छिक डेटा", क्योंकि सिस्टम कोई भी उत्पादन नहीं कर रहा है।

क्या किसी को पता है कि यह कैसे काम करना है? क्या मेजबान / देव / रैंडम (जो बहुत ही चट्टी है) को vm में पास करना संभव है इसलिए vm इसे रैंडम डेटा का उपयोग कर सकता है?

मैंने पढ़ा है कि कुछ सॉफ्टवेयर विकल्प हैं, लेकिन वे क्रिप्टोकरेंसी के लिए अच्छे नहीं हैं क्योंकि वे यादृच्छिक रूप से पर्याप्त नहीं हैं।

संपादित करें: ऐसा प्रतीत होता है कि वीएम पर बिल्ली / देव / यादृच्छिक उत्पादन का उत्पादन करता है, बस बहुत धीरे-धीरे। मुझे अपना वास्तविक सेट अप दो घंटे के इंतजार में मिला, जबकि यह "रैंडम डेटा लोड हो रहा था" था। आखिरकार इसे जारी रखने के लिए पर्याप्त मिला। मैं अभी भी इसे तेज करने के तरीके में दिलचस्पी रखता हूं।

जवाबों:


10

यह 'सिर्फ काम' होना चाहिए। हालांकि vm का कोई समर्पित भौतिक हार्डवेयर नहीं है, फिर भी यादृच्छिकता के कई बहुत अच्छे स्रोतों तक इसकी पहुंच है। उदाहरण के लिए, यह वर्चुअल डिस्क से पढ़ने के लिए सीपीयू के टीएससी का समय-समय पर उपयोग कर सकता है, जो अंततः एक सेकंड के अरबवें समय के भौतिक डिस्क को हवा देगा। ये समय हार्ड ड्राइव में अशांत एयरफ्लो शीयर पर निर्भर करता है, जो अप्रत्याशित है।

नेटवर्क ट्रैफिक पर भी ऐसा ही तर्क लागू होता है। हालांकि इंटरफ़ेस वर्चुअलाइज्ड है, इसलिए जब तक पैकेट एक भौतिक नेटवर्क पर उत्पन्न होता है (और बॉक्स में स्थानीय नहीं होता है, किसी अन्य vm में उत्पन्न होता है), पैकेट समय नेटवर्क कार्ड पर क्रिस्टल थरथरानवाला के बीच चरण ऑफसेट पर निर्भर करता है और क्रिस्टल थरथरानवाला जो TSC को चलाता है। यह दो क्वार्ट्ज क्रिस्टल में सूक्ष्म क्षेत्र तापमान भिन्नता पर निर्भर है। यह भी अप्रत्याशित है।

यदि किसी कारण से यह काम नहीं कर रहा है, तो सरलतम उपाय यह है कि मैं एंट्रॉपी की खान में एक कार्यक्रम लिखूं और इसे सिस्टम पूल में जोड़ दूं। नेटवर्क इंटरफ़ेस आपका सबसे विश्वसनीय स्रोत है। उदाहरण के लिए, आप इसके लिए कोड लिख सकते हैं:

1) TSC को क्वेरी करें।

2) उसी भौतिक मशीन पर न जाने वाले सर्वर को DNS क्वेरी जारी करें।

3) क्वेरी पूरा होने पर TSC को क्वेरी करें।

4) इसे कुछ बार दोहराएं, सभी टीएससी मूल्यों को संचित करते हुए।

5) संचित TSC फ़ंक्शंस पर एक सुरक्षित हैश प्रदर्शन करें।

6) सिस्टम के एन्ट्रापी पूल में सुरक्षित हैश फ़ंक्शन का आउटपुट पास करें।

7) एन्ट्रापी पूल स्तर की निगरानी करें, और कम होने तक प्रतीक्षा करें। जब यह हो, तो चरण 1 पर वापस जाएं।

लिनक्स में पूल में एन्ट्रापी जोड़ने के लिए सरल आईओसीटीएल कॉल हैं, पूल के स्तर की जाँच करें, और इसी तरह। आपके पास शायद है rngd, जो एक पाइप से एंट्रोपी ले सकता है और इसे सिस्टम पूल में खिला सकता है। आप अपनी इच्छानुसार किसी भी स्रोत से पाइप भर सकते हैं, फिर चाहे वह टीएससी हो या आपके अपने एंट्रोपी स्रोत से 'वेज' अनुरोध।


आपका दूसरा सुझाव सिद्धांत में दिलचस्प लगता है, लेकिन मैं एक समाधान की उम्मीद कर रहा था जिसमें प्रोग्रामिंग शामिल नहीं थी। मुझे आश्चर्य है कि अगर एक usb ड्राइव से होस्ट में या किसी बड़ी फाइल की कॉपी करने से vm के एन्ट्रापी पूल पर असर पड़ेगा (यानी यह तेजी से काम करेगा)? यदि हां, तो मैं मेजबान पर मशीन की छवि का बैकअप चलाने के दौरान अपना क्षेत्र बनाने की कोशिश कर सकता हूं ...
निक

1
एंट्रोपी पूल को फिर से भरने के लिए आप कुछ परीक्षण कर सकते हैं। एक बार जब आप कुछ काम करते हैं, तो आप ऐसा कर सकते हैं। नेटवर्क ट्रैफिक को करना चाहिए। ड्राइव गतिविधि इसे करना चाहिए। आप यह देखने के लिए परीक्षण कर सकते हैं कि इस आदेश के साथ क्या काम करता है: जो cat /proc/sys/kernel/random/entropy_availकुछ भी काम करता है वह बढ़ता है।
डेविड श्वार्ट्ज

ध्यान रखें कि रनिंग कैट "एन्ट्रापी" (पता स्थान का यादृच्छिककरण) खाती है। आप उपयोग कर सकते हैं python -c 'while True: import time; print str(time.sleep(1))[0:0] + open("/proc/sys/kernel/random/entropy_avail", "rb").read(),'। हाँ, यह पढ़ना मुश्किल है, लेकिन मुझे टिप्पणियों में नई लाइनें दर्ज करने का कोई तरीका नहीं दिखता ...
डोंचो गुनचेव

10

मैं अपने सभी हेडलेस सर्वरों का उपयोग करता हूं जो क्रिप्टोग्राफिक संचालन करते हैं (जैसे टीएलएस हैंडशेक, केर्बरोस, आदि)। यह अधिकांश उबंटू संस्करणों के पैकेज रिपॉजिटरी में होना चाहिए: http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all§ion=all

हैज ने आधुनिक प्रोसेसर की आंतरिक स्थिति से एन्ट्रापी निकालने के लिए HAVAGE एल्गोरिथम का उपयोग किया है। यहाँ एक स्पष्ट व्याख्या है: http://www.irisa.fr/caps/projects/hipsor/

आप एंट्री पैकेज के साथ उत्पन्न एन्ट्रापी की यादृच्छिकता की जांच कर सकते हैं। मेरे सिस्टम पर जनरेट से हुई एन्ट्रापी ने प्रवेश के द्वारा सभी यादृच्छिकता परीक्षणों को पारित कर दिया


आपको यह सुनिश्चित करने के लिए एनआईएसटी परीक्षण सूट चलाने की भी आवश्यकता है।
माइकल हैम्पटन

7

हाँ, आप इसे बीज से कर सकते हैं:

http://manpages.ubuntu.com/manpages/jaunty/man4/random.4.html

आप बस उस / dev / urandom में डाल सकते हैं और उसे एंट्रॉपी पूल को सीड करना चाहिए। मैं इसकी पुष्टि करने में सक्षम था:

root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
128
root@mx01-ewr:/proc/sys/kernel/random# cat /dev/xvda >/dev/urandom  &
[1] 16187 # just using this as a source of data, you could do ssh hostIP 'cat /dev/random' >... etc
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1221
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1398

बोनस यदि आप ssh कमांड को राउटर से गुजरते हैं तो यह एंट्रॉपी * पैदा करता है :)


मैं मध्य भाग के बारे में उलझन में हूं। मेरे पास सिस्टम पर "/ dev / xvda" नहीं है। मेजबान के / dev / random को vm / dev / urandom में रूट करने के लिए ssh का उपयोग करने का लक्ष्य है? मैं जो कुछ भी चाहता हूं उसे "/ dev / urandom" में भेज सकता हूं और यह "/ dev / random" से बाहर आता है।
निक

मैं "ssh 192.168.1.1 'बिल्ली / देव / यादृच्छिक' का उपयोग करके मेजबान से यादृच्छिक डेटा प्राप्त कर सकता हूं, लेकिन मुझे नहीं पता कि यह मेहमानों को कैसे प्रभावित करता है" / dev / random "। "ssh 192.168.1.1 'कैट / डेव / रैंडम'> / डेव / यूरेनियम" कुछ भी करने के लिए प्रतीत नहीं होता है।
निक

मैंने सिर्फ एक टर्मिनल में 'कैट / डेव / रैंडम' चलाकर परीक्षण किया और तब तक इंतजार किया जब तक कि यह डेटा आउटपुट करना बंद न कर दे। फिर एक अन्य में मैंने 'कैट सोमरगैमिनेफाइल> / डेव / यूरजैंडम' किया और धीरे-धीरे 'कैट / देव / रैंडम' ने फिर से सामान बनाना शुरू कर दिया। ऐसा लगता है कि आपको योग्य / देव / यादृच्छिक इनपुट बनाने के लिए / dev / urandom पर यादृच्छिक इनपुट की बहुत आवश्यकता है। क्या आप कह रहे हैं कि बिल्ली करते समय ... '> / dev / urandom आप किसी भी आउटपुट / dev / random को बिल्कुल नहीं देख रहे हैं?
बहुपद

मैं अंततः कुछ आउटपुट देख रहा हूं, लेकिन यह बहुत धीमा है। मुझे यकीन नहीं है कि अगर यह स्वाभाविक रूप से उत्पादित की तुलना में अधिक है। मुझे पता चला है कि VMs में बहुत धीमी और कम मात्रा में रैंडम डेटा उत्पन्न होता है, यह हमेशा के लिए होता है। लगभग 2 घंटे बैठने और "रैंडम डेटा इकट्ठा करने" के बाद मैंने अपने दायरे को बनाया।
निक

सहायक उत्तर के लिए +1।
निक

5

इसने मेरे लिए काम किया

VM के अंदर krb5_newrealm रनिंग को पूरा होने में ("रैंडम डेटा लोड हो रहा है" संदेश दिखाने के बाद) एक लंबा समय लग सकता है। चीजों को थोड़ा तेज करने के लिए आप निम्नलिखित हैक का उपयोग कर सकते हैं।

$ sudo aptitude install rng-tools -y
$ sudo rngd -r /dev/urandom -o /dev/random  # don't do this in production!

http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md पर पोस्ट किया गया


1

X86 का उत्तर यह सुनिश्चित करता है कि आपका VM RdRand या RdSeed को नहीं फँसाता है। आप कई चीजों के लिए अपने वीएम पर भरोसा करते हैं, यह उनमें से एक है।

एक पोस्ट स्नेडी ब्रिज सीपीयू पर पर्याप्त रूप से हाल ही में आरएनजी, (या कहा जा सकता है) का उपयोग करते हुए RdRand या RdSeed का उपयोग किया जाता है, और एक अनट्रैप्ड RdRand या RdSeed VM में प्रवेश करता है। / dev / random तब एंट्रॉपी के एक वास्तविक (आभासी नहीं) स्रोत के साथ काम करता है।

यह दुर्घटना से नहीं है। यह इंटेल आर्किटेक्चर डॉक्स में वहीं है।

डिवाइस आधारित हार्डवेयर एन्ट्रापी स्रोत (IE इसे साझा करने के लिए कर्नेल ड्राइवर का उपयोग करता है) के लिए आपको भौतिक स्रोत को सही ढंग से वर्चुअलाइज करने के लिए VM की आवश्यकता होती है। मेरे पास कोई सुराग नहीं है अगर वे ऐसा करते हैं और यदि हां, तो किन उपकरणों के लिए।

यदि आपके RNGd में नीचे दिया गया विकल्प नहीं है, तो उसे अपडेट करें। यदि आपके हार्डवेयर में एक तेज हार्डवेयर RNG नहीं है, तो आप बर्बाद हो गए हैं और आपको सुरक्षा उद्देश्यों के लिए अलग हार्डवेयर का उपयोग करने पर विचार करना चाहिए।

# rngd --help
Usage: rngd [OPTION...]
Check and feed random data from hardware device to kernel entropy pool.

  -b, --background           Become a daemon (default)
  **-d, --no-drng=1|0          Do not use drng as a source of random number input**
                             (default: 0)
  -f, --foreground           Do not fork and become a daemon
  -n, --no-tpm=1|0           Do not use tpm as a source of random number input
                             (default: 0)
  -o, --random-device=file   Kernel device used for random number output
                             (default: /dev/random)
  -p, --pid-file=file        File used for recording daemon PID, and multiple
                             exclusion (default: /var/run/rngd.pid)
  -q, --quiet                Suppress error messages
  -r, --rng-device=file      Kernel device used for random number input
                             (default: /dev/hwrng)
  -s, --random-step=nnn      Number of bytes written to random-device at a time
                             (default: 64)
  -v, --verbose              Report available entropy sources
  -W, --fill-watermark=n     Do not stop feeding entropy to random-device until
                             at least n bits of entropy are available in the
                             pool (default: 2048), 0 <= n <= 4096
 -?, --help                 Give this help list
  --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

Report bugs to Jeff Garzik <jgarzik@pobox.com>.

0

मुझे krb5_newrealm के साथ ही हैंग होने की समस्या हो रही थी। उपरोक्त उत्तर के आधार पर, मेरे लिए यह अच्छी तरह से काम किया:

cat /dev/sda > /dev/urandom

रैंडम डेटा के लिए अपनी जरूरत पूरी करने के बाद आप इसे मार सकते हैं। / dev / sda में संभवतः आपकी आवश्यकता से अधिक डेटा है।

नोट: मुझे यकीन नहीं है कि इस तरीके से उत्पन्न यादृच्छिक डेटा वास्तव में कितना यादृच्छिक है।


कृपया पोस्टर के नाम का उपयोग करके अन्य पोस्ट देखें। "ऊपर" या "नीचे" कहना निरर्थक है क्योंकि आप सभी को एक ही अनुक्रम में पोस्ट नहीं देखते हैं।
जॉन गार्डनियर्स 6

4
यह काम कर सकता है, लेकिन / dev / sda में बहुत अधिक गैर-यादृच्छिक डेटा (कम से कम शून्य का टन) होता है, जो सुरक्षा के दृष्टिकोण से विचार को बहुत अच्छा नहीं बनाता है। शून्य के अलावा, यह एमबीआर के साथ शुरू होता है, जो वास्तव में बहुत अनुमानित है, मैं कम से कम 3 बाइट्स का अनुमान लगा सकता हूं ... या यह बूट नहीं करेगा;)
डेंचो गनचेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.