एक GPIO पिन का उपयोग कर यादृच्छिक संख्या जनरेटर?


22

मैं बस सवाल AVR रैंडम नंबर जेनरेटर के माध्यम से पढ़ता हूं और एक AVR में यादृच्छिक बीज उत्पन्न करने के कई तरीकों का सामना करता हूं :

  • एक विशेष प्रयोजन "सुरक्षित AVR" का उपयोग करें
  • एक आंतरिक तापमान संवेदक का उपयोग करें
  • अलिखित EEPROM पढ़ें
  • उपयोगकर्ता इनपुट के बीच समय अंतराल को मापें
  • एक अस्थायी एडीसी पिन का उपयोग करें।

पुल-अप और फ्लोटिंग के बिना इनपुट के रूप में कॉन्फ़िगर किया गया सिर्फ एक डिजिटल पिन क्यों नहीं? सिद्धांत में जो यादृच्छिक बिट्स की एक धारा उत्पन्न करना चाहिए। इसका उपयोग क्यों नहीं करते? क्या राज्य भी धीरे-धीरे बदल रहा है? क्या यह 1 या 0 पर अटक जाता है? कोई और समस्या?


1
सुरक्षित AVR मर चुका है AFAIK
vicatcu

1
अलिखित eeprom हमेशा 0xFF नहीं है?
vsz

@vsz, हो सकता है कि अगर आप इसे कुछ लिखें और भूल जाएँ कि आपने क्या लिखा है, तो यह अब "यादृच्छिक" है। जबरदस्त हंसी।
वोरैक

जवाबों:


5

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

भले ही फ्लोटिंग पिन से पढ़ा गया मान अप्रत्याशित हो (पहले अर्थ में "यादृच्छिक"), यह दूसरे अर्थ में उपयोगी होने की संभावना नहीं है।


15

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

दूसरा, लेकिन शायद अधिक महत्वपूर्ण: यदि डिजिटल पिन का फ्लोटिंग "माध्य" मान लॉजिक सेंस लेवल (जो कि पावर और ग्राउंड रेल लेवल नहीं है, लेकिन इनपुट सर्किट्री के लिए थ्रेसहोल्ड स्विचिंग है) के बीच बिल्कुल ठीक नहीं है, तो परिणामी बिट स्ट्रीम में एक बेहतर होगा 1 या 0. के प्रति मजबूत पूर्वाग्रह। यह पूर्वाग्रह बीजों को एनालॉग स्तरों में एक तिरछा की तुलना में बहुत अधिक मजबूती से पकड़ता है।

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


14

एक फ्लोटिंग इनपुट अपरिभाषित है। यह आपको यादृच्छिक बिट्स दे सकता है, लेकिन यह 0 या 1 पर अटक सकता है। अधिकांश समय यह अटक जाएगा। और जब यह वास्तव में तैर रहा होता है, तो यह सिस्टम के शोर और बिजली की खपत को बढ़ा सकता है। फ्लोटिंग इनपुट आमतौर पर एक बुरी चीज है, तब भी जब इनपुट का उपयोग किसी चीज के लिए नहीं किया जा रहा हो।


न केवल यह कुछ समय में 0 या 1 पर अटक जाएगा, लेकिन जब तक कि इनपुट बफर के पहले चरण को बनाने वाले दो ट्रांजिस्टर सही ढंग से संतुलित नहीं होते हैं, या रास्ते में कोई दूसरा बाहरी स्रोत है या कोई अन्य है, इनपुट फ्लोट करेगा अंततः 1 या 0 तक नीचे।
wjl

9

सबसे सरल उपाय एक हार्डवेयर रैंडम सिग्नल जनरेटर सर्किट का उपयोग करना है जो कि एक दुरुपयोग ओपन-कलेक्टर ट्रांजिस्टर सर्किट से बाहर है। माइक्रो-कंट्रोलर पर इनपुट के लिए बिट-स्ट्रीम आउटपुट का उपयोग करें। अंतराल पर आने वाली बिट्स का नमूना लें। 1s और 0s की लगभग समान संख्या सुनिश्चित करने के लिए, बस राज्य के परिवर्तन को 1 के रूप में और शून्य के रूप में परिवर्तन का उपयोग करें। अधिक जानकारी के लिए ट्रांजिस्टर शोर जनरेटर के लिए Google।


दिलचस्प। एक "दुरुपयोग ओपन-कलेक्टर ट्रांजिस्टर सर्किट" क्या दिखता है?
स्टीफन Collings

7
@ रीमल - आप एक ट्रांजिस्टर के बेस-एमिटर जंक्शन को रिवर्स-बायस करते हैं, और यह वास्तव में भद्दा जेनर की तरह काम करता है। आप बहुत शोर करने वाले ज़ेनर लेते हैं, और आप यादृच्छिक बिटस्ट्रीम प्राप्त करने के लिए शोर को बढ़ाते हैं। देखें robseward.com/misc/RNG2
कॉनर वुल्फ

3

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

अंत में यह निर्भर करता है कि आपको इसके लिए क्या चाहिए? थोड़ा यादृच्छिककरण और आप कुछ भी नहीं जुड़े एडीसी पिन का उपयोग कर सकते हैं। या जैसे एक एल्गोरिथ्म का उपयोग करें

Mersenne ट्विस्टर http://en.wikipedia.org/wiki/Mersenne_twister

कोई भी अगर यह क्रिप्टोग्राफिक रूप से सुरक्षित है, लेकिन अधिकांश उद्देश्यों के लिए पर्याप्त है।


मेरे ज्ञान AVR घड़ी प्रणाली इस तकनीक का समर्थन नहीं करता है
vicatcu

सही बात। यह अभी भी एक ही घड़ी स्रोत के साथ करना संभव है, भले ही यह सीधे समर्थित न हो।
गुस्तावो लिटोव्स्की 17

3

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

उच्च एंट्रॉपी का एक अच्छा उदाहरण एक यादृच्छिक बीज के लिए लैटिन स्क्वायर विधि का उपयोग करता है ।

फ्लोटिंग इनपुट आसानी से खामियों, रिसाव या प्रवेश शोर द्वारा पक्षपाती है।


0

PIC18F माइक्रोप्रोसेसर में आपको यादृच्छिक संख्या के लिए एक बीज की आवश्यकता होती है। बीज 0 से 32767 (15 बिट्स) तक कुछ भी हो सकता है। मैं कार्यक्रम की शुरुआत में सुझाव दूंगा कि आप पिन और एनालॉग इनपुट पिन में से एक बनाते हैं। इस पिन को पढ़ें और कम से कम महत्वपूर्ण बिट लें और इसे 16 बिट चर में डालें। फिर वेरिएबल को बाईं ओर से शिफ्ट करें। पिन को फिर से पढ़ें और एडीसी के एलएसबी रिजल्ट को उस बिट बिट में स्टोर किए गए वेरिएबल के पहले बिट में डालें। फिर से बाईं ओर शिफ्ट करें .....

इसे तब तक दोहराएं जब तक आपके चर में 15 बिट्स न हों। यह वह संख्या है जिसे आपको अपने बीज में डालना है।

आपके द्वारा ऐसा करने के बाद, आप बस एनालॉग इनपुट पिन को डिजिटल इनपुट पिन बना सकते हैं और उस पर एक कमजोर पुल को सक्षम कर सकते हैं, या इसे डिजिटल आउटपुट पिन बना सकते हैं। या तो कोई इस पिन को तैरने से रोकेगा।

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