खेद है कि मैं (इस चर्चा करने के लिए देर हो रही है क्या क्या यह अब 3 1/2 साल पुराना है?), लेकिन मुझे पीआरएन पीढ़ी और एन्ट्रॉपी के वैकल्पिक स्रोतों में एक पुनरुत्थान है। लिनक्स कर्नेल डेवलपर रस्टी रसेल ने हाल ही में एन्ट्रॉपी के वैकल्पिक स्रोतों पर blog पर चर्चा की थी (/dev/urandom
के अलावा)।
लेकिन, मैं उन सभी विकल्पों से प्रभावित नहीं हूं जो उनके विकल्पों से प्रभावित हैं; एक एनआईसी का MAC पता कभी नहीं बदलता (हालांकि यह सब दूसरों से अद्वितीय है), और पीआईडी बहुत छोटा एक संभव नमूना आकार की तरह लगता है।
मैं एक Mersenne Twister (मेरे लिनक्स बॉक्स पर), जो निम्नलिखित कलन विधि के साथ वरीयता प्राप्त है के साथ dabbled है। मैं कोई टिप्पणी/प्रतिक्रिया के लिए पूछ रहा हूँ अगर किसी को भी तैयार हैं और रुचि है:
- 64 बिट्स + 256 बिट्स *
/proc
की संख्या नीचे फ़ाइलों की एक सरणी बफर बनाएँ।
- इस बफर के पहले 64 बिट्स में टाइम स्टैम्प काउंटर (टीएससी) मान रखें।
/proc/meminfo
/proc/self/maps
/proc/self/smaps
/proc/interrupts
/proc/diskstats
:
निम्नलिखित /proc
फ़ाइलों में से प्रत्येक के लिए, SHA256 योग की गणना
प्लेस (1) में बनाया सरणी के अपने स्वयं के क्षेत्र में प्रत्येक 256-बिट हैश मान।
- इस पूरे बफर का SHA256 हैश बनाएं। नोट: मैं एसएचए कार्यों से पूरी तरह से स्वतंत्र एक अलग हैश फ़ंक्शन का उपयोग कर सकता हूं (और शायद चाहिए) - इस तकनीक को कमजोर हैश कार्यों के खिलाफ "सुरक्षा" के रूप में प्रस्तावित किया गया है।
अब मैं उम्मीद है कि यादृच्छिक (पर्याप्त) डेटा एंट्रोपी की 256 बिट्स मेरी Mersenne ट्विस्टर बीज के लिए है। मैं उपरोक्त का उपयोग एमटी ऐरे (624 32-बिट पूर्णांक) की शुरुआत को पॉप्युलेट करने के लिए करता हूं, और फिर एमटी लेखक के कोड के साथ उस सरणी के शेष को प्रारंभ करता हूं। इसके अलावा, मैं एक अलग हैश फ़ंक्शन का उपयोग कर सकता हूं (उदा। SHA384, SHA512), लेकिन मुझे एक अलग आकार सरणी बफर (स्पष्ट रूप से) की आवश्यकता होगी।
मूल मेर्सन ट्विस्टर कोड एक 32-बिट बीज के लिए बुलाया जाता है, लेकिन मुझे लगता है कि यह बेहद अपर्याप्त है। क्रिप्टो तोड़ने की खोज में "केवल" 2^32-1 विभिन्न एमटी चलाना इस दिन और उम्र में व्यावहारिक संभावना के दायरे से बाहर नहीं है।
मुझे इस पर किसी की प्रतिक्रिया को पढ़ने में खुशी होगी। आलोचना स्वागत से अधिक है। मैं उपरोक्त के रूप में /proc
फ़ाइलों के उपयोग की रक्षा करूंगा क्योंकि वे लगातार बदल रहे हैं (विशेष रूप से /proc/self/*
फाइलें, और टीएससी हमेशा एक अलग मूल्य (नैनोसेकंद [या बेहतर] रिज़ॉल्यूशन, आईआईआरसी) उत्पन्न करती है। मैंने इस पर Diehard tests चलाया है (कई सौ अरब बिट्स की धुन) करने के लिए, और यह सफलता के साथ गुजर रहा है। लेकिन वह शायद की तुलना में मैं इसे कैसे बोने कर रहा हूँ करने के लिए एक PRNG के रूप में Mersenne ट्विस्टर की सुदृढ़ता के लिए और अधिक वसीयतनामा है।
बेशक, ये पूरी तरह से किसी को हैकिंग करने के लिए अभ्यस्त नहीं हैं, लेकिन मुझे लगता है कि इन सभी (और SHA *) को मेरे जीवनकाल में और हैक किया जा रहा है।
[आरएफसी 1149.5 मानक आईईईई-वेटेड यादृच्छिक संख्या के रूप में निर्दिष्ट 4।] (Https://imgs.xkcd.com/comics/random_number.png) –
[नौ। नौ। नौ। नौ। ....] (http://dilbert.com/strips/comic/2001-10-25/) यह यादृच्छिकता के साथ समस्या है, आप कभी भी सुनिश्चित नहीं हो सकते हैं। – tvanfosson