अच्छे पासवर्ड के साथ आने के बारे में जो चयन के लिए प्रतिरोधी हैं, कई लेख लिखे गए हैं, जिसमें हैबे भी शामिल है। आज मैं एक ऐसे उपकरण के बारे में बात करना चाहता हूं जो इस समस्या को हल करने के लिए भी बनाया गया है। इसे विकसित करने में मुझे बस कुछ ही दिन लगे, और इसे कुछ घंटों में तैयार दस्तावेज के अनुसार उत्पादित किया जा सकता है। यह उपकरण आपके डेस्क पर देखने के लिए दिलचस्प होगा, और एक कंप्यूटर गीक, सिस्टम प्रशासक या सूचना सुरक्षा विशेषज्ञ के लिए मूल उपहार के रूप में भी काम करेगा।
तो, परिचित हो जाएं: रैंडमूस एक नियमित कंप्यूटर माउस में निर्मित एक यादृच्छिक चरित्र जनरेटर है।
पहले थोड़ा सिद्धांत
एक एल्गोरिथम तरीके से यादृच्छिक संख्या उत्पन्न करने के लिए, आपको एक फ़ंक्शन की आवश्यकता है जो प्रत्येक कॉल के साथ अगले मूल्य का उत्पादन करेगा। इसके अलावा, यह बहुत ही वांछनीय है कि ये मान "यादृच्छिक" (बिखरे हुए) दिखते हैं, और अनुक्रम की पुनरावृत्ति अवधि अधिकतम है (आदर्श रूप से 2 ^ एन -1, जहां एन परिणाम की थोड़ी गहराई है)।
छद्म यादृच्छिक संख्या पीढ़ी फ़ंक्शन रूप का एक बहुपद है

गुणांक gi = {0,1} (i = 0, ... k) द्वारा परिभाषित किया गया है।
फ़ंक्शन के मूल्य की गणना करने के लिए, गैलोज़ स्कीम का उपयोग किया जा सकता है, एल्गोरिथम कार्यान्वयन में सबसे सरल है। बहुपद को उसके गुणांकों द्वारा द्विआधारी संख्या के रूप में परिभाषित किया जाता है, फ़ंक्शन च (x) के मूल्य की गणना एल्गोरिदम द्वारा की जाती है।
1. यदि low_bit (x) = 1 है, तो
2.f (x) = (x / 2) xor बहुपद
3. अन्यथा
4.f (x) = x / 2
5. सब कुछ
अगले चरण में, गणना की गई मान फ़ंक्शन के तर्क के रूप में उपयोग की जाती है और सब कुछ दोहराया जाता है। जनरेटर के उत्पादन के रूप में, गणना मूल्य के मूल्य का कम से कम महत्वपूर्ण बिट का उपयोग किया जाता है।
प्राइमिनिटिस नामक बहुपद हैं जो सबसे बड़ी संभव लंबाई के एक फ़ंक्शन के मूल्यों के गैर-दोहराव अनुक्रम देते हैं। इस विषय पर एक गहरा सिद्धांत पढ़ा जा सकता है, उदाहरण के लिए,
यहाँ ।
यह स्पष्ट है कि समान इनपुट डेटा वाला कोई भी एल्गोरिथम समान परिणाम देता है। इसलिए, विशुद्ध रूप से एल्गोरिथम क्रियाओं के आधार पर, केवल एक छद्म यादृच्छिक संख्या जनरेटर का निर्माण किया जा सकता है - जब आउटपुट पर संख्याओं का क्रम अंततः उसी क्रम में दोहराता है। इसके अलावा, अनुक्रम स्वयं बहुत लंबा हो सकता है, लेकिन मुख्य समस्या यह है कि जब जनरेटर को एक ही इनपुट मूल्य के साथ आरंभीकृत किया जाता है, तो हमें आउटपुट पर संख्याओं का समान अनुक्रम हमेशा मिलता है।
सही मायने में यादृच्छिक अनुक्रम प्राप्त करने के लिए, एल्गोरिथम जनरेटर के अलावा, आपको एक भौतिक का उपयोग करने की आवश्यकता है। कंप्यूटर पर बहुत सारी घटनाएं लगातार हो रही हैं जिन्हें एक चल रहे कार्यक्रम के संबंध में यादृच्छिक माना जा सकता है। यह मेमोरी और ड्राइव के साथ डेटा का आदान-प्रदान, कीबोर्ड और माउस से डेटा इनपुट, नेटवर्क से पैकेट प्राप्त करना है। UNIX- जैसे ऑपरेटिंग सिस्टम पर, एक अंतर्निहित यादृच्छिक संख्या सेंसर / देव / यादृच्छिक है, जो इस तरह के "भौतिक शोर" के आधार पर संचित यादृच्छिक डेटा प्रदान करता है। इस डेटा का उपयोग यादृच्छिक संख्याओं के अनुक्रम के प्रारंभिक तत्व को उत्पन्न करने के लिए किया जा सकता है या वास्तव में यादृच्छिक अनुक्रम प्राप्त करने के लिए RNG ऑपरेशन के परिणाम में उन्हें लगातार मिलाया जा सकता है।
जेनरेटर डिवाइस
इस पासवर्ड जनरेटर में, दोनों यादृच्छिक संख्या पीढ़ी तंत्र का उपयोग किया जाता है: एक आदिम बहुपद, और भौतिक पर आधारित एल्गोरिथम। हार्डवेयर रैंडम नंबर सेंसर के रूप में, USB बस सिग्नल लाइनों में से एक का उपयोग किया जाता है। "यादृच्छिक" तरीके से इस लाइन पर माउस और कंप्यूटर के बीच डेटा के आदान-प्रदान के दौरान, संकेत 0 और 1 के बीच स्विच करता है, जिसका उपयोग एल्गोरिदम आरएनजी के परिणामों के साथ "भौतिक शोर" को मिलाने के लिए किया जाता है।
जनरेटर 8-बिट माइक्रोकंट्रोलर के एटल एएमआर परिवार पर इकट्ठा किया गया है। माइक्रोकंट्रोलर के उपयोग के लिए धन्यवाद, सर्किट बहुत सरल निकला, एमके के अलावा, संकेतक खुद और कई वर्तमान-सीमित प्रतिरोधों की भी आवश्यकता होती है - प्रत्येक संकेतक बिट के लिए एक का उपयोग किया जाता है।
मैंने जनरेटर के दो संस्करण विकसित किए हैं - सामान्य 7-खंड संकेतक के लिए और "उन्नत" 16-खंड एक के लिए। आप आधुनिक घरेलू उपकरणों पर बाद को देख सकते हैं जो "मानव भाषा" में उपयोगकर्ता के साथ संवाद कर सकते हैं। इस तरह के संकेतक आपको लैटिन या सिरिलिक वर्णमाला के किसी भी पत्र को प्रदर्शित करने की अनुमति देते हैं। दुर्भाग्य से, मेरे पास हाथ पर 16-खंड का संकेतक नहीं था, इसलिए, "धातु में" मैंने केवल 7-खंड संस्करण को लागू किया, लेकिन मैं दोनों संस्करणों के लिए योजनाओं और फर्मवेयर को पोस्ट करता हूं। 7-खंड संकेतक के मामले में, जनरेटर संख्या और कुछ अक्षर प्रदर्शित कर सकता है।
दोनों संस्करणों के योजनाबद्ध आरेख (विस्तार करने के लिए क्लिक करें)
योजनाएं, स्रोत कोड (कोडांतरक में) और दोनों संस्करणों के लिए संकलित फर्मवेयर को
ज़िप संग्रह (44k) के रूप में डाउनलोड किया जा सकता है।
अवरोधक मानों को न्यूनतम वर्तमान के आधार पर चुना जाता है, जो संकेतक खंडों की स्वीकार्य चमक प्रदान करता है। USB पोर्ट को अधिक अधिभार न दें, हालांकि यह अधिकतम 500mA का उत्पादन कर सकता है, यह आमतौर पर 100mA को क्रमादेशित होता है, और सीमा को बढ़ाने के लिए, कनेक्टेड डिवाइस को अपने डिस्क्रिप्टर में यह इंगित करना होगा।
डिवाइस का डिज़ाइन मुख्य रूप से माउस के अंदर मुक्त स्थान की उपस्थिति और आकार से निर्धारित होता है। संकेतक को रखना न भूलें ताकि यह दिखाई दे। यह बेहतर है कि सूचक मामले की पारभासी दीवार के माध्यम से चमकता है, तो आपको इसके नीचे एक छेद नहीं काटना होगा और तैयार उत्पाद बेहतर और "ब्रांडेड" दिखाई देगा।

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

माउस के अंदर, बोर्ड के साथ सूचक को मामले के बग़ल के दो हिस्सों के बीच सैंडविच किया गया था (आकार इतनी अच्छी तरह से मेल खाता था, यहां तक कि गोंद की आवश्यकता नहीं थी)।

तीन तार (बिजली, डेटा, और आम) यूएसबी केबल कनेक्टर के पिनों में मिलाए जाते हैं। सबसे आसान तरीका एक परीक्षक का उपयोग करके तारों के उद्देश्य को निर्धारित करना है, यूएसबी कनेक्टर के पिनआउट का उपयोग करना (आरेख देखें)।
एमके को प्रोग्राम करने के लिए, पतले कंडक्टर (एक मुड़ जोड़ी से) जिसे प्रोग्रामर से जोड़ा गया था, सीधे अपने निष्कर्षों पर मिलाप किया गया था। सर्किट के संचालन की जांच करने के बाद, कंडक्टरों को टांका लगाया जाता है। मैं USBASP USB प्रोग्रामर (http://www.fischl.de/usbasp/) और AVRDUDE प्रोग्राम (http://www.nongnu.org/avrdude/) का उपयोग करता हूं। एक बार की प्रोग्रामिंग के लिए (अर्थात, आप केवल इस उपकरण को बनाना चाहते हैं, और भविष्य में एमके प्रोग्रामिंग में संलग्न नहीं होना चाहते हैं), आप उनके सर्किट के कुछ कोड़ा कर सकते हैं, उदाहरण के लिए, यहां (http://www.123avr.com/07)। htm) या "AVR प्रोग्रामर" की खोज करें और एक विशिष्ट सर्किट के बारे में समीक्षा पढ़ें। मुख्य बात यह है कि प्रोग्रामर के अंतिम सक्रिय तत्व (बफर चिप, पीसी चिपसेट :), आदि) और एमके के बीच तारों को यथासंभव कम रखने की कोशिश करें।
योजना और फर्मवेयर के बारे में अधिक जानकारी
यदि आप डिवाइस को अपग्रेड करना चाहते हैं, तो आपको यह जानने में दिलचस्पी होगी कि यह अंदर से कैसे काम करता है।
USB इंटरफ़ेस 4 तारों, निर्दिष्ट VCC (पावर, + 5V), डेटा- (D-), डेटा + (D +), GND (सामान्य तार) का उपयोग करता है। डेटा ट्रांसमिशन लाइनों के लिए डी + / डी का उपयोग किया जाता है, जो तथाकथित "अंतर जोड़ी" बनाते हैं। मानक के अनुसार, जब एक तार पर एक जोड़ी को संचारित किया जाता है, तो वोल्टेज कम से कम 2.7 वोल्ट होना चाहिए, और दूसरे पर 0.3 वोल्ट से अधिक नहीं होना चाहिए। प्राप्त होने पर, तार्किक शून्य स्तर को एक ऐसी स्थिति माना जाता है जिसमें D- लाइन पर वोल्टेज D + लाइन पर वोल्टेज की तुलना में 0.2Volt से कम नहीं होता है, और इसके विपरीत। इस तथ्य के कारण कि केबल में इन दो तारों को एक मुड़ जोड़ी केबल में घुमाया जाता है, यह प्रोटोकॉल डेटा ट्रांसमिशन के दौरान उच्च शोर प्रतिरक्षा प्रदान करता है।
जोड़ी से तारों में से एक एमके में निर्मित एनालॉग तुलनित्र के इनपुट से जुड़ा है। यह डिवाइस लगातार अपने दो इनपुट पर वोल्टेज की तुलना करता है और एक डिजिटल सिग्नल 0 या 1 उत्पन्न करता है, यह निर्भर करता है कि किस इनपुट पर वोल्टेज अधिक है। सैद्धांतिक रूप से, एक जोड़ी के दोनों तारों को तुलनित्र से जोड़ना संभव होगा, लेकिन यादृच्छिक संकेत उत्पन्न करने के उद्देश्य के लिए, एक तार पर्याप्त है। एक आंतरिक वोल्टेज संदर्भ स्रोत (लगभग 1.1 वोल्ट) दूसरे इनपुट से जुड़ा हुआ है।
कार्यक्रम की एल्गोरिथ्म इस प्रकार है:
1. जब बिजली चालू होती है, तो आंतरिक एमके डिवाइस और I / O पोर्ट्स को आरंभीकृत किया जाता है (लाइनें 90-134)। तुलनित्र इनपुट के लिए उपयोग किया जाने वाला पोर्ट हमेशा एक पुल-अप रोकनेवाला को जोड़ने के बिना इनपुट के लिए कॉन्फ़िगर किया जाना चाहिए। अन्यथा, यूएसबी इंटरफ़ेस काम नहीं करेगा। आरंभीकरण के बाद, एमके नींद मोड में चला जाता है ताकि ऊर्जा बर्बाद न हो।
2. टाइमर के व्यवधान को एक यादृच्छिक संख्या के संभावित मूल्यों की संख्या के बराबर आवृत्ति के साथ कहा जाता है। इसके कारण, संकेतक पर मूल्यों के परिवर्तन की आवृत्ति मूल्यों की संख्या की परवाह किए बिना, 1 सेकंड के बराबर रहती है।
बिजली चालू करने के तुरंत बाद, डिवाइस डेमो मोड में संचालित होता है, बदले में 0.5 सेकंड प्रत्येक के सभी संभावित मूल्यों को प्रदर्शित करता है (लाइनें 150-17-17)।
फिर प्रारंभिक आरएनजी आरंभीकरण मोड में एक स्विच होता है: भौतिक सेंसर (लाइनों 173-185) से एल्गोरिदम आरएनजी के प्रारंभिक मूल्य का एक सेट।
RNG के आरंभीकरण के बाद, प्रत्येक बाद के टाइमर ऑपरेशन RNG फ़ंक्शन के अगले मूल्य की गणना और यादृच्छिक मान (लाइनों 187-211) के लिए कम से कम महत्वपूर्ण बिट के अलावा की ओर जाता है। प्रत्येक एन चक्र (जहां एन संभव यादृच्छिक मूल्यों की संख्या के बराबर है), यादृच्छिक मूल्य के अनुरूप एक चरित्र प्रदर्शित होता है (शामिल फ़ाइल में DISPLAY_SIGN सबरूटिन खंडों की संख्या पर निर्भर करता है), फिर वर्तमान यादृच्छिक मान रीसेट हो जाता है और चक्र फिर से शुरू होता है।
3. एनालॉग तुलनित्र के रुकावट को हर बार इसके आउटपुट मूल्य में बदलाव (0 से 1 या इसके विपरीत) कहा जाता है। एक भौतिक यादृच्छिक संख्या उत्पन्न करने के लिए, टाइमर 0 के वर्तमान मूल्य का उपयोग किया जाता है, एमके (4 मेगाहर्ट्ज) की आवृत्ति के साथ लगातार गिनती होती है। RNG के प्रारंभिक आरंभीकरण के दौरान, टाइमर काउंटर 0 मान का निम्न-क्रम बिट RNG चर के निम्न-क्रम बिट को लिखा जाता है, शेष बिट्स को उच्च-क्रम एक (234-244 रेखाएं) की ओर ले जाता है।
32 बिट्स टाइप होने के बाद, डिवाइस ऑपरेटिंग मोड में प्रवेश करता है। इसमें, टाइमर काउंटर 0 के कम से कम 5 बिट्स का मूल्य एक यादृच्छिक मूल्य में जोड़ा जाता है, जिसके बाद यादृच्छिक मान को संभव मानों की संख्या (247-259 पंक्तियों) की संख्या में मोडुलो लिया जाता है।
संस्करणों के बीच स्विच करने की सुविधा के लिए, संकेतक की थोड़ी गहराई के आधार पर सभी कोड, डेटा और स्थिरांक, एक अलग फ़ाइल में निकाले जाते हैं, जो मुख्य कोड में शामिल है। आप मौजूदा संस्करण के आधार पर अपना स्वयं का संस्करण बना सकते हैं।
एमके आउटपुट और इंडिकेटर सेगमेंट का पत्राचार आमतौर पर बोर्ड पर कंडक्टरों को वायरिंग की सुविधा के आधार पर चुना जाता है। यदि आप कनेक्शन आरेख को बदलते हैं, तो आपको सम्मिलित फ़ाइल में संबंधित वर्ण जनरेटर तालिका भी बदलनी होगी। यदि एक संकेतक का उपयोग एक सामान्य एनोड (+ 5 वी से जुड़ा हुआ) के साथ किया जाता है, तो एक खंड को प्रज्वलित करने के लिए, एमसी का आउटपुट 0 होना चाहिए, यदि एक सामान्य कैथोड (एक सामान्य तार से जुड़ा) के साथ, तो 1।
कृपया ध्यान दें कि 16-बिट संस्करण में, 14 एमके पिन वास्तव में उपयोग किए जाते हैं, खंडों के ऊपरी और निचले जोड़े संयुक्त होते हैं (लेकिन प्रत्येक अपने स्वयं के अवरोधक के माध्यम से जुड़ा हुआ है)। यह वर्ण प्रदर्शित करने की क्षमता पर प्रतिबंध लगा सकता है। यदि आपको इन सेगमेंट को अलग करने की आवश्यकता है, तो DISPLAY_SIGN सबरूटीन को बदलकर पिन PA0, PA1 (आंतरिक जनरेटर मोड में उपयोग नहीं किया जाता है) का उपयोग करें।
अन्य अनुप्रयोगों
यद्यपि यह बहुत बार नए पासवर्ड बनाने के लिए आवश्यक नहीं है, वर्णित डिवाइस में यादृच्छिक संख्या की पीढ़ी से संबंधित अन्य एप्लिकेशन मिल सकते हैं, उदाहरण के लिए, बोर्ड गेम में क्यूब के बजाय। विभिन्न मोड में काम करने की सुविधा के लिए, आप अतिरिक्त बटनों के साथ एक माउस का चयन कर सकते हैं और उनमें से एक को एमके से जोड़ सकते हैं, फ़र्मवेयर को संशोधित कर सकते हैं ताकि इस बटन पर क्लिक करके यादृच्छिक वर्णों को स्विच किया जा सके या अगला यादृच्छिक संख्या प्रदर्शित हो।
साथ ही, न्यूनतम परिवर्तन वाली प्रस्तावित योजना का उपयोग अन्य उपकरणों में किया जा सकता है। नए साल के लिए पहली बात जो दिमाग में आती है वह है नए साल की माला बनाना। ऐसा करने के लिए, एक संकेतक के बजाय, एलईडी एमके आउटपुट से जुड़े होते हैं (आमतौर पर श्रृंखला में जुड़े दो एलईडी के लिए 5 वी का एक वोल्टेज पर्याप्त होता है, वर्तमान-सीमित प्रतिरोधों को सेट नहीं किया जा सकता है यदि श्रृंखला के माध्यम से वर्तमान 20 एमए से अधिक नहीं है), और प्रतीकों के बजाय, इन एल ई डी के इग्निशन संयोजन चरित्र जनरेटर तालिका में लिखे गए हैं। अधिक लंबाई की एल ई डी की श्रृंखलाओं को जोड़ने के लिए, आपको आपूर्ति वोल्टेज को बढ़ाने की आवश्यकता होगी (तब एमके को 5 वी स्टेबलाइजर द्वारा संचालित करने की आवश्यकता होगी) और ट्रांजिस्टर स्विच या एक विशेष बफर चिप का उपयोग करना होगा।
एक अलग प्रश्न भौतिक सेंसर (एनालॉग तुलनित्र के इनपुट) के साथ क्या करना है। इसे पर्याप्त लंबाई के तार से जोड़ा जा सकता है (30 सेंटीमीटर पर्याप्त होना चाहिए), एमके का इनपुट प्रतिरोध बहुत अधिक है और इनपुट वोल्टेज विद्युत चुम्बकीय हस्तक्षेप के कारण बदल जाएगा, जिससे आवश्यक यादृच्छिक दालों का निर्माण होगा। यदि डिवाइस यूएसबी (एक डेस्कटॉप मिनी-क्रिसमस ट्री स्मारिका) द्वारा संचालित किया जाएगा, तो इनपुट फिर से किसी भी यूएसबी बस लाइन से जुड़ा हो सकता है।