2008-11-19 4 views
12

ठीक है, मुझे लगता है कि यह पूरी तरह से व्यक्तिपरक और क्या नहीं है, लेकिन मैं यादृच्छिक संख्या जेनरेटर के लिए एंट्रॉपी स्रोतों के बारे में सोच रहा था। यह जाता है कि अधिकांश जेनरेटर वर्तमान समय के साथ बीजित होते हैं, सही? खैर, मैं उत्सुक था कि पूरी तरह से वैध, यादृच्छिक (ढीली परिभाषा) संख्याएं उत्पन्न करने के लिए अन्य स्रोतों का उपयोग कैसे किया जा सकता है।वैकल्पिक एंट्रॉपी स्रोत

कई स्रोतों का उपयोग करना होगा (जैसे समय + वर्तमान एचडीडी समय तलाशना [हम यहाँ fantastical हैं]) एक साथ एक स्रोत से "अधिक यादृच्छिक" संख्या बनाते हैं? स्रोतों की मात्रा की तार्किक सीमाएं क्या हैं? वास्तव में कितना पर्याप्त है? क्या समय बस चुना गया है क्योंकि यह सुविधाजनक है?

क्षमा करें अगर इस तरह की चीज़ की अनुमति नहीं है, लेकिन मैं स्रोतों के पीछे सिद्धांत के रूप में उत्सुक हूं।

+0

[आरएफसी 1149.5 मानक आईईईई-वेटेड यादृच्छिक संख्या के रूप में निर्दिष्ट 4।] (Https://imgs.xkcd.com/comics/random_number.png) –

+0

[नौ। नौ। नौ। नौ। ....] (http://dilbert.com/strips/comic/2001-10-25/) यह यादृच्छिकता के साथ समस्या है, आप कभी भी सुनिश्चित नहीं हो सकते हैं। – tvanfosson

उत्तर

17

विकिपीडिया लेख -

+0

शायद यह है कि मैंने अपने जवाब के बारे में पढ़ा है! – Feet

+1

परियोजना विचार: यूएसबी हम्सटर व्हील –

+0

* तकनीकी रूप से * उनमें से कुछ यादृच्छिक नहीं हैं, वे अगले कुछ में अनुकरण करने के लिए परिमाण के कुछ सौ आदेश बहुत जटिल हैं, ओह 100 साल ... – RCIX

4

यादृच्छिक संख्या जनरेटर के लिए "अच्छा" बीज के बारे में चिंता न करें। अनुक्रम की सांख्यिकीय गुण इस बात पर निर्भर नहीं हैं कि जनरेटर कैसे बीजित होता है। हालांकि, अन्य चीजें हैं। के बारे में चिंता करना। Pitfalls in Random Number Generation देखें।

हार्डवेयर यादृच्छिक संख्या जनरेटर के लिए, इन भौतिक स्रोतों को मापना है, और माप प्रक्रिया में व्यवस्थित त्रुटियां हैं। आपको "वास्तविक" यादृच्छिक संख्याओं की तुलना में उच्च गुणवत्ता वाले "छद्म" यादृच्छिक संख्या मिल सकती हैं। पर लेकिन निश्चित है कि अन्य हार्डवेयर और सॉफ्टवेयर की आवश्यकता के ...

0

कुछ उपयोग कीबोर्ड इनपुट (कीस्ट्रोक्स के बीच समय समाप्ति), मैं के बारे में सुना मैं एक उपन्यास में लगता है कि रेडियो स्थिर स्वागत किया जा सकता है Hardware random number generator's भौतिक गुणों का उपयोग करके यादृच्छिक संख्याओं के लिए कुछ रोचक स्रोतों को सूचीबद्ध करता है।

मेरे पसंदीदा:

  • एक परमाणु क्षय विकिरण स्रोत एक गीजर काउंटर एक पीसी से जुड़ी द्वारा पता लगाया।
  • अर्द्ध पारदर्शी दर्पण के माध्यम से यात्रा करने वाले फोटॉन। परस्पर अनन्य घटनाओं (प्रतिबिंब - संचरण) का पता लगाया गया है और क्रमशः "0" या "1" बिट मान से जुड़ा हुआ है।
  • एक प्रतिरोधी से थर्मल शोर, एक यादृच्छिक वोल्टेज स्रोत प्रदान करने के लिए बढ़ाया गया।
  • हिमस्खलन डायोड से उत्पन्न हिमस्खलन शोर।
  • वायुमंडलीय शोर, एक रेडियो रिसीवर एक पीसी

विकिपीडिया लेख के problems section से जुड़ी द्वारा पता लगाया (कैसे शांत है? है) इन स्रोतों/सेंसर का एक बहुत की कमजोरी का वर्णन है। सेंसर लगभग हमेशा कमजोर यादृच्छिक संख्याओं का उत्पादन करते हैं क्योंकि वे उम्र/गिरावट करते हैं। इन भौतिक स्रोतों को लगातार सांख्यिकीय परीक्षणों द्वारा जांचना चाहिए जो उत्पन्न डेटा का विश्लेषण कर सकते हैं, यह सुनिश्चित करना कि उपकरण चुपचाप टूट नहीं गए हैं।

8

एसजीआई ने एक बार "ग्लोब चरण" पर लावा दीपक की तस्वीरों को एन्ट्रॉपी के स्रोत के रूप में उपयोग किया, जो अंततः LavaRnd नामक एक ओपन सोर्स यादृच्छिक संख्या जनरेटर में विकसित हुआ।

5

मैं Random.ORG का उपयोग करता हूं, वे वायुमंडलीय शोर से मुफ्त यादृच्छिक डेटा प्रदान करते हैं, जिसका उपयोग मैं समय-समय पर मेर्सिन-ट्विस्टर आरएनजी को फिर से बीज करने के लिए करता हूं। इसके बारे में यादृच्छिक है क्योंकि आप हार्डवेयर निर्भरताओं के साथ प्राप्त कर सकते हैं।

3

लिनक्स कर्नेल एन्ट्रॉपी उत्पन्न करने के लिए डिवाइस इंटरप्ट टाइम (माउस, कीबोर्ड, हार्ड ड्राइव) का उपयोग करता है। एंट्रॉपी पर विकिपीडिया पर एक अच्छा article है।

2

मैंने एक एन्क्रिप्शन प्रोग्राम का उपयोग किया है जो उपयोगकर्ता माउस आंदोलन को यादृच्छिक संख्या उत्पन्न करने के लिए उपयोग करता है। एकमात्र समस्या यह थी कि कार्यक्रम को रोकना था और उपयोगकर्ता को माउस को कुछ सेकंड के लिए यादृच्छिक रूप से चारों ओर स्थानांतरित करने के लिए कहा जाना चाहिए जो हमेशा व्यावहारिक न हो।

2

मुझे कई वर्षों पहले HotBits मिला - संख्याएं रेडियोधर्मी क्षय से उत्पन्न होती हैं, वास्तव में यादृच्छिक संख्याएं।

इस बात पर सीमाएं हैं कि आप एक दिन कितनी संख्या डाउनलोड कर सकते हैं, लेकिन यह हमेशा मुझे वास्तव में आरएनजी के लिए वास्तव में यादृच्छिक बीज के रूप में उपयोग करने के लिए आश्चर्यचकित करता है।

3

आधुनिक आरएनजी दोनों पास के बीजों में सहसंबंधों के खिलाफ जांच किए जाते हैं और बीजिंग के बाद कई सौ पुनरावृत्तियों को चलाते हैं। तो, दुर्भाग्य से उबाऊ लेकिन सही जवाब यह है कि यह वास्तव में बहुत मायने रखता नहीं है।

आम तौर पर, यादृच्छिक भौतिक प्रक्रियाओं का उपयोग करके जांच की जानी चाहिए कि वे एक समान वितरण के अनुरूप हैं और अन्यथा वंचित हैं।

In my opinion, it's often better to use a very well understood pseudo-random number generator.

2

कुछ TPM (विश्वसनीय प्लेटफ़ॉर्म मॉड्यूल) "चिप्स" एक हार्डवेयर RNG की है। दुर्भाग्यवश, मेरे डेल लैपटॉप में (ब्रॉडकॉम) टीपीएम इस सुविधा की कमी है, लेकिन आज बेचे गए कई कंप्यूटर हार्डवेयर आरएनजी के साथ आते हैं जो वास्तव में अप्रत्याशित क्वांटम यांत्रिक प्रक्रियाओं का उपयोग करता है। इंटेल ने थर्मल शोर किस्म को लागू किया है।

इसके अलावा, क्रिप्टोग्राफिक उद्देश्यों के लिए आरएनजी बीज के लिए अकेले वर्तमान समय का उपयोग न करें, या कोई भी एप्लिकेशन जहां अप्रत्याशितता महत्वपूर्ण है। कई अन्य स्रोतों के साथ संयोजन के समय से कुछ कम ऑर्डर बिट्स का उपयोग करना शायद ठीक है।

similar question आपके लिए उपयोगी हो सकता है।

0

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

0

यादृच्छिक संख्या जनरेटर के लिए "अच्छा" बीज के बारे में चिंता न करें। अनुक्रम की सांख्यिकीय गुण इस बात पर निर्भर नहीं हैं कि जनरेटर कैसे बीजित होता है।

मैं John D. Cook's advice से असहमत हूं। यदि आप मेरसेन ट्विस्टर को बीज छोड़कर सभी बिट्स को शून्य पर सेट करते हैं, तो शुरुआत में यह संख्याएं उत्पन्न होगी जो यादृच्छिक लेकिन कुछ भी हैं। जनरेटर के लिए इस स्थिति को किसी भी चीज में बदलने के लिए काफी समय लगता है जो सांख्यिकीय परीक्षणों को पारित करेगा। बस जेनरेटर के पहले 32 बिट्स को बीज में सेट करना एक समान प्रभाव होगा। इसके अलावा, अगर पूरा राज्य शून्य पर सेट होता है तो जेनरेटर अंतहीन शून्य उत्पन्न करेगा।

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

0

बीज का स्रोत इतना महत्वपूर्ण नहीं है। छद्म संख्या जनरेटर एल्गोरिदम अधिक महत्वपूर्ण है। हालांकि मैंने कुछ बैंक ऑपरेशन के लिए बीज पैदा करने के बारे में कुछ समय पहले सुना है।कई कारकों वे ले लिया एक साथ:

  • समय
  • प्रोसेसर तापमान
  • पंखे की गति
  • cpu वोल्टेज
  • मुझे याद नहीं अधिक :)

यहां तक ​​कि इनमें से कुछ करता है, तो पैरामीटर समय में ज्यादा नहीं बदलते हैं, आप उन्हें कुछ अच्छे हैशिंग फ़ंक्शन में डाल सकते हैं।

अच्छी यादृच्छिक संख्या कैसे उत्पन्न करें?

शायद हम असीमित संख्या में सार्वभौमिक ध्यान में रख सकते हैं? अगर यह सही है, कि हर समय नए समानांतर ब्रह्मांडों बनाए जा रहे हैं, हम कुछ इस तरह कर सकते हैं:

int Random() { 
    return Universe.object_id % MAX_INT; 
} 

हर पल हम समानांतर ब्रह्मांडों की एक और शाखा पर होना चाहिए में, तो हम अलग आईडी होनी चाहिए। केवल समस्या यह है कि ब्रह्मांड वस्तु :) पाने के लिए है

0

एक धागा है कि समय की एक निश्चित राशि के लिए एक तंग पाश में कुछ चर में हेरफेर से पहले ही मार दिया जाता है का चक्कर के बारे में कैसे। क्या आप प्रोसेसर की गति, प्रणाली लोड, आदि ... बहुत सस्ती पर निर्भर करेगा के साथ खत्म हो, लेकिन सिर्फ srand (समय (शून्य)) की तुलना में बेहतर ...

3

खेद है कि मैं (इस चर्चा करने के लिए देर हो रही है क्या क्या यह अब 3 1/2 साल पुराना है?), लेकिन मुझे पीआरएन पीढ़ी और एन्ट्रॉपी के वैकल्पिक स्रोतों में एक पुनरुत्थान है। लिनक्स कर्नेल डेवलपर रस्टी रसेल ने हाल ही में एन्ट्रॉपी के वैकल्पिक स्रोतों पर blog पर चर्चा की थी (/dev/urandom के अलावा)।

लेकिन, मैं उन सभी विकल्पों से प्रभावित नहीं हूं जो उनके विकल्पों से प्रभावित हैं; एक एनआईसी का MAC पता कभी नहीं बदलता (हालांकि यह सब दूसरों से अद्वितीय है), और पीआईडी ​​बहुत छोटा एक संभव नमूना आकार की तरह लगता है।

मैं एक Mersenne Twister (मेरे लिनक्स बॉक्स पर), जो निम्नलिखित कलन विधि के साथ वरीयता प्राप्त है के साथ dabbled है। मैं कोई टिप्पणी/प्रतिक्रिया के लिए पूछ रहा हूँ अगर किसी को भी तैयार हैं और रुचि है:

  1. 64 बिट्स + 256 बिट्स * /proc की संख्या नीचे फ़ाइलों की एक सरणी बफर बनाएँ।
  2. इस बफर के पहले 64 बिट्स में टाइम स्टैम्प काउंटर (टीएससी) मान रखें।

    • /proc/meminfo
    • /proc/self/maps
    • /proc/self/smaps
    • /proc/interrupts
    • /proc/diskstats
    • :

    • निम्नलिखित /proc फ़ाइलों में से प्रत्येक के लिए, SHA256 योग की गणना

      प्लेस (1) में बनाया सरणी के अपने स्वयं के क्षेत्र में प्रत्येक 256-बिट हैश मान।

  3. इस पूरे बफर का SHA256 हैश बनाएं। नोट: मैं एसएचए कार्यों से पूरी तरह से स्वतंत्र एक अलग हैश फ़ंक्शन का उपयोग कर सकता हूं (और शायद चाहिए) - इस तकनीक को कमजोर हैश कार्यों के खिलाफ "सुरक्षा" के रूप में प्रस्तावित किया गया है।

अब मैं उम्मीद है कि यादृच्छिक (पर्याप्त) डेटा एंट्रोपी की 256 बिट्स मेरी Mersenne ट्विस्टर बीज के लिए है। मैं उपरोक्त का उपयोग एमटी ऐरे (624 32-बिट पूर्णांक) की शुरुआत को पॉप्युलेट करने के लिए करता हूं, और फिर एमटी लेखक के कोड के साथ उस सरणी के शेष को प्रारंभ करता हूं। इसके अलावा, मैं एक अलग हैश फ़ंक्शन का उपयोग कर सकता हूं (उदा। SHA384, SHA512), लेकिन मुझे एक अलग आकार सरणी बफर (स्पष्ट रूप से) की आवश्यकता होगी।

मूल मेर्सन ट्विस्टर कोड एक 32-बिट बीज के लिए बुलाया जाता है, लेकिन मुझे लगता है कि यह बेहद अपर्याप्त है। क्रिप्टो तोड़ने की खोज में "केवल" 2^32-1 विभिन्न एमटी चलाना इस दिन और उम्र में व्यावहारिक संभावना के दायरे से बाहर नहीं है।

मुझे इस पर किसी की प्रतिक्रिया को पढ़ने में खुशी होगी। आलोचना स्वागत से अधिक है। मैं उपरोक्त के रूप में /proc फ़ाइलों के उपयोग की रक्षा करूंगा क्योंकि वे लगातार बदल रहे हैं (विशेष रूप से /proc/self/* फाइलें, और टीएससी हमेशा एक अलग मूल्य (नैनोसेकंद [या बेहतर] रिज़ॉल्यूशन, आईआईआरसी) उत्पन्न करती है। मैंने इस पर Diehard tests चलाया है (कई सौ अरब बिट्स की धुन) करने के लिए, और यह सफलता के साथ गुजर रहा है। लेकिन वह शायद की तुलना में मैं इसे कैसे बोने कर रहा हूँ करने के लिए एक PRNG के रूप में Mersenne ट्विस्टर की सुदृढ़ता के लिए और अधिक वसीयतनामा है।

बेशक, ये पूरी तरह से किसी को हैकिंग करने के लिए अभ्यस्त नहीं हैं, लेकिन मुझे लगता है कि इन सभी (और SHA *) को मेरे जीवनकाल में और हैक किया जा रहा है।

संबंधित मुद्दे