हम यादृच्छिक संख्या जनरेटर को क्यों नहीं जोड़ते हैं?


60

कई अनुप्रयोग हैं जहां एक छद्म यादृच्छिक संख्या जनरेटर का उपयोग किया जाता है। इसलिए लोग एक को लागू करते हैं जो उन्हें लगता है कि केवल बाद में खोजने के लिए महान है कि यह त्रुटिपूर्ण है। हाल ही में जावास्क्रिप्ट यादृच्छिक संख्या जनरेटर के साथ कुछ ऐसा ही हुआ। बहुत पहले भी RandU। ट्विस्टर जैसी किसी चीज के लिए अनुचित प्रारंभिक बीजारोपण के मुद्दे भी हैं।

मैं सामान्य एक्सर ऑपरेटर के साथ जनरेटर के दो या अधिक परिवारों के संयोजन के किसी का भी उदाहरण नहीं पा सकता हूं। अगर java.SecureRandom या Twister कार्यान्वयन जैसी चीजों को चलाने के लिए पर्याप्त कंप्यूटर शक्ति है, तो लोग उन्हें क्यों नहीं जोड़ते हैं? ISAAC xor Xorshift xor RandU एक काफी अच्छा उदाहरण होना चाहिए, और जहां आप एक एकल जनरेटर की कमजोरी को दूसरों द्वारा कम किया जा सकता है। इसे उच्च आयामों में संख्याओं के वितरण में भी मदद करनी चाहिए क्योंकि आंतरिक एल्गोरिदम पूरी तरह से अलग हैं। क्या कुछ मूलभूत सिद्धांत हैं जिन्हें उन्हें संयोजित नहीं किया जाना चाहिए?

यदि आप एक सच्चे यादृच्छिक संख्या जनरेटर का निर्माण करते थे, तो लोग शायद आपको सलाह देंगे कि आप एंट्रॉपी के दो या अधिक स्रोतों को मिलाएं। क्या मेरा उदाहरण अलग है?

मैं कई रैखिक प्रतिक्रिया शिफ्ट रजिस्टरों के सामान्य उदाहरण को छोड़कर एक साथ काम कर रहा हूं क्योंकि वे एक ही परिवार से हैं।


जवाब आवेदन पर निर्भर हो सकता है। क्या आप के लिए छद्म आयामी अनुक्रम का उपयोग करना चाहते हैं?
युवल फिल्मस

1
क्या आपने Fortuna ( en.wikipedia.org/wiki/Fortuna_%28PRNG%29 ) पाया है, जो आपको बताता है कि यह विभिन्न यादृच्छिक स्रोतों को एक में समेटता है।
लिटिल कोड

1
@LittleCode वास्तव में यह पूरी तरह से अलग लगता है। Fortuna एकल हैश फ़ंक्शन से डेटा आउटपुट करता है। यह सिर्फ एक ही आउटपुट फ़ंक्शन से पहले (री) हैशिंग से पहले बहुत सारे कमजोर एंट्रोपी संग्रह तंत्र के साथ खिलवाड़ करता है। मेरा सवाल कई कार्यों से आउटपुट से संबंधित है (उनमें से 10 क्यों नहीं)? यदि यह एक भरण उपकरण है, तो गति वैसे भी अप्रासंगिक है।
पॉल उस्ज़ाक

1
देर जॉर्ज मार्साग्लिया, PRNGs के क्षेत्र जो इस तरह के रूप में गुणा नई PRNG प्रकार का आविष्कार में एक प्रख्यात शोधकर्ता गुणा-साथ-कैरी और XOR-शिफ्ट किया इसी जब वह 1990 के दशक में KISS जनरेटर जो तीन PRNGs का एक संयोजन है प्रस्तावित विभिन्न प्रकार के। मैं पिछले बीस वर्षों से सफलतापूर्वक KISS का उपयोग कर दिया गया है, क्रिप्टोग्राफी के लिए नहीं, निश्चित रूप से। KISS के संबंध में एक उपयोगी माध्यमिक स्रोत है ग्रेग गुलाब से यह 2011 कागज जिसमें उन्होंने संविधान PRNGs में से एक के साथ एक समस्या है, जो संयोजन अवधारणा को अमान्य नहीं है बताते हैं
njuffa

4
नथ ने छद्म रूप से नंबर जेनरेटरों (एक यादृच्छिक संख्या का उपयोग करने के लिए जो जनरेटर का उपयोग करने के लिए) के संयोजन के परिणाम को संबंधित किया है, एक फ़ंक्शन के परिणामस्वरूप एक निश्चित मान में परिवर्तित होता है! इसलिए, माइक्रो कंप्यूटर क्रांति से ठीक पहले के दिनों में, उन्होंने हमें यादृच्छिक जनरेटर को कभी नहीं मिलाने की चेतावनी दी।
JDługosz

जवाबों:


7

IIRC (और यह मेमोरी से है), 1955 के रैंड बेस्टसेलर ए मिलियन रैंडम डिजिट्स ने कुछ ऐसा किया। कंप्यूटर सस्ते होने से पहले, लोगों ने इस पुस्तक से यादृच्छिक संख्याएं निकालीं।

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


45

निश्चित रूप से, आप PRNGs को इस तरह से जोड़ सकते हैं, यदि आप चाहें, तो यह मानते हुए कि वे स्वतंत्र रूप से वरीयता प्राप्त हैं। हालाँकि, यह धीमा होगा और यह संभवतः लोगों के लिए सबसे अधिक दबाव वाली समस्याओं को हल नहीं करेगा।

व्यवहार में, यदि आपको बहुत उच्च गुणवत्ता वाले PRNG की आवश्यकता है, तो आप एक अच्छी तरह से क्रिप्टोग्राफ़िक-शक्ति PRNG का उपयोग करते हैं और आप इसे सही एंट्रोपी के साथ बीजते हैं। यदि आप ऐसा करते हैं, तो आपकी सबसे अधिक संभावना विफलता मोड स्वयं PRNG एल्गोरिथ्म के साथ कोई समस्या नहीं है; सबसे अधिक संभावना विफलता मोड में पर्याप्त एन्ट्रापी (या शायद कार्यान्वयन त्रुटियों) का अभाव है। Xor-ing कई PRNGs इस विफलता मोड के साथ मदद नहीं करता है। इसलिए, यदि आप एक बहुत ही उच्च गुणवत्ता वाले PRNG चाहते हैं, तो संभवत: उनके पास xor-ing का बहुत कम बिंदु है।

वैकल्पिक रूप से, यदि आप एक सांख्यिकीय PRNG चाहते हैं जो सिमुलेशन उद्देश्यों के लिए पर्याप्त है, आमतौर पर # 1 चिंता या तो गति है (वास्तव में तेजी से छद्म संख्या उत्पन्न करें) या सादगी (शोध या इसे लागू करने पर ज्यादा विकास समय खर्च नहीं करना चाहते हैं)। Xor-ing PRNG को धीमा कर देता है और इसे और अधिक जटिल बना देता है, इसलिए यह उस संदर्भ में प्राथमिक आवश्यकताओं को भी संबोधित नहीं करता है।

जब तक आप उचित देखभाल और क्षमता का प्रदर्शन करते हैं, मानक PRNG अच्छे से अधिक होते हैं, इसलिए वास्तव में कोई कारण नहीं है कि हमें कुछ भी कट्टरता (xor-ing की कोई आवश्यकता नहीं) की आवश्यकता है। यदि आपके पास देखभाल या सक्षमता का न्यूनतम स्तर भी नहीं है, तो आप शायद कुछ जटिल जैसे कि xor-ing का चयन नहीं करने जा रहे हैं, और चीजों को बेहतर बनाने का सबसे अच्छा तरीका PRNG के चयन में अधिक देखभाल और क्षमता पर ध्यान केंद्रित करना है। बजाय xor-ing पर।

नीचे पंक्ति : मूल रूप से, Xor ट्रिक उन समस्याओं को हल नहीं करती है जो आमतौर पर PRNG का उपयोग करते समय लोगों को होती है।


3
"पर्याप्त एन्ट्रापी की कमी ... कई PRNGs को एक्सरसाइज करने से इसमें मदद नहीं मिलती" - वास्तव में यह बाधा डाल सकता है, क्योंकि आप अपने PRNGs को सीड करने के लिए आवश्यक एन्ट्रापी की मात्रा बढ़ाते हैं। यही कारण है कि आप इसे अच्छी तरह से veted PRNGs को संयोजित करने के लिए नियमित अभ्यास नहीं करना चाहते हैं, भले ही यह वास्तव में आपको उन अच्छी तरह से संरक्षित PRNGs में से एक के खिलाफ की रक्षा करता है जो पूरी तरह से बकवास हैं (कार्यान्वयन में आप उपयोग कर रहे हैं ।
स्टीव जेसोप

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

1
@DW "स्वतंत्र रूप से वरीयता क्यों?" चूंकि मेरा सवाल जनरेटर के विभिन्न परिवारों के संयोजन से संबंधित है, प्रत्येक परिवार को समान बीजों से एक अद्वितीय उत्पादन अनुक्रम का उत्पादन करना चाहिए। उदाहरण के लिए, java.SecureRandom और RC4 को आसानी से एक ही कुंजी से वरीयता दी जा सकती है, फिर संयुक्त।
पॉल उस्ज़क

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

1
@PaulUszak, मुझे नहीं लगता कि मैंने कभी यह तर्क दिया था कि Xor-ing दो जनरेटर इसे कीड़े के लिए अधिक प्रवण बनाता है। मैं कह रहा हूं कि, यदि आप एक अच्छा PRNG (सिर्फ एक) चुनते हैं, तो सबसे संभावित विफलता मोड्स में से एक सीडिंग या एक कार्यान्वयन विफलता की विफलता है, और एक्स-इंग दो जनरेटर भी मदद नहीं करते हैं। (बेशक, यदि एकल PRNG विफल नहीं होता है, तो xor-ing दो जनरेटर उपयोगी नहीं है, या तो।) तो मूल रूप से यह गलत समस्या को संबोधित कर रहा है। दूसरे शब्दों में, xor-ing जनरेटर निश्चित रूप से बहुत अधिक नहीं बढ़ाते हैं, क्योंकि यह अनिश्चितता के सबसे महत्वपूर्ण कारणों को संबोधित नहीं करता है।
DW

19

वास्तव में, कुछ सफलता की घोषणा ठीक इसी तरह से करने की घोषणा की गई है।

टेक्सास विश्वविद्यालय के कंप्यूटर विज्ञान के प्रोफेसर डेविड ज़करमैन और पीएचडी छात्र ईशान चट्टोपाध्याय ने पाया कि एक "उच्च-गुणवत्ता" यादृच्छिक संख्या को दो "कम-गुणवत्ता" यादृच्छिक स्रोतों के संयोजन से उत्पन्न किया जा सकता है।

यहाँ उनका पेपर है: स्पष्ट दो-स्रोत एक्सट्रैक्टर्स और रेजिलिएंट फ़ंक्शंस


8
यह एक अलग विषय पर एक विशुद्ध रूप से सैद्धांतिक पेपर है जिसकी यूटी द्वारा पीआर प्रयासों के बावजूद बिल्कुल व्यावहारिक प्रासंगिकता नहीं है।
युवल फिल्मस २०'१६ को val

4
@ युवल फिल्मस - क्या आप उस टिप्पणी पर विस्तार करना चाहेंगे?
नीत्शेचएनाई

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

2
इसके अलावा, यह विशेष पेपर एक्सट्रैक्टर्स के सैद्धांतिक क्षेत्र में सिर्फ एक काम है। आप उसी तरह से क्षेत्र में किसी अन्य कागज का बिल दे सकते हैं। वे एक मजबूत स्रोत बनाने के लिए कमजोर स्रोतों के संयोजन के बारे में हैं। अंतर सिर्फ मापदंडों में है।
युवल फिल्मस २०'१६ को val

3
अंत में, कागज का निर्माण संभवतः एक ओवरकिल है, न कि कुछ जिसे आप कभी लागू करना चाहते हैं। इस प्रकार के निर्माण के लिए ठोस पैरामीटर निर्धारित करना कठिन है, और वे आमतौर पर बेहद खराब होते हैं, क्योंकि कागज हमेशा असममित शासन पर ध्यान केंद्रित करते हैं, और स्थिरांक को अनदेखा करते हैं।
युवल फिल्मस २०'१६ को val

9

X1,,XnXi{0,1}X1,,XnKf(K)

X1,,Xn(X1,,Xn)LL()

  • y1,,ynL(X1y1,,Xnyn)=L(X1,,Xn)

  • X0,X1T{0,1}Z=XTL(Z)min(X0,X1)

पहली संपत्ति का मतलब है कि माप वें बिट को फ़्लिप करने के तहत अपरिवर्तनीय है । दूसरी संपत्ति का मतलब है कि यदि हम दो वितरण मिलाते हैं , तो परिणाम कम से कम उतना ही अच्छा है जितना बुरा।iX,Y

कोई भी उचित यादृच्छिकता माप पहले संपत्ति को संतुष्ट करेगा। दूसरी प्रॉपर्टी सबसे लोकप्रिय उपायों जैसे कि एंट्रॉपी और मिन-एन्ट्रापी से संतुष्ट है ।HH

हम अब यह साबित कर सकते हैं कि एक प्रमेय साबित हो सकता है कि XORing दो छद्म आयामी अनुक्रम हमेशा एक अच्छा विचार है।

प्रमेय। Let एक ही लंबाई के दो स्वतंत्र छद्म आयामी क्रम हो सकते हैं, और को एक स्वीकार्य यादृच्छिकता उपाय (ऊपर दो स्थितियों को संतुष्ट करने वाला) होना चाहिए। फिरX,YL

L(XY)max(L(X),L(Y)).

सबूत। मान लीजिए । फिर वितरण का एक मिश्रण है , के वितरण के अनुसार मिश्रित । चूंकि और एक मिश्रण कम से कम उतना ही अच्छा है जितना कि सबसे खराब वितरण मिलाया जाता है, हम । L(X)L(Y)XYXyYL(Xy)=L(X)L(XY)L(X) 

इस प्रमेय का मतलब यह है कि यदि आप दो स्वतंत्र कुंजी का उपयोग करके XOR दो छद्म आयामी अनुक्रम उत्पन्न करते हैं , तो इसका परिणाम हमेशा कम से कम उतना ही अच्छा होता है जितना बेहतर XORed, किसी भी स्वीकार्य यादृच्छिकता माप के संबंध में।

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


हम, तो, XOR दो छद्म आयामी संख्या जनरेटर चाहिए? यदि हम गति से प्रतिबंधित नहीं हैं, तो यह निश्चित रूप से एक अच्छा विचार है। लेकिन व्यवहार में हमारे पास गति सीमा है। फिर हम निम्नलिखित प्रश्न पूछ सकते हैं। मान लीजिए कि हमें दो PRNG दिए गए हैं, प्रत्येक एक पैरामीटर साथ है जो जनरेटर के चलने के समय (और इसलिए ताकत) को नियंत्रित करता है। उदाहरण के लिए, एक LFSR की लंबाई, या राउंड की संख्या हो सकती है। मान लीजिए कि हम पैरामीटर साथ एक PRNG का उपयोग करते हैं , दूसरा पैरामीटर और XOR के परिणाम के साथ। हम मान सकते हैं कि , ताकि कुल चलने का समय स्थिर रहे। का सबसे अच्छा विकल्प क्या हैTTT1T2T1+T2=tT1,T2? यहां एक ट्रेडऑफ है जो सामान्य रूप से उत्तर देना मुश्किल है। यह हो सकता है कि सेटिंग या तो या तुलना में बहुत खराब है ।(t/2,t/2)(t,0)(0,t)

यहां सबसे अच्छी सलाह एक लोकप्रिय PRNG से चिपकना है जिसे मजबूत माना जाता है। यदि आप अपने अनुक्रम को बनाने के लिए अधिक समय खाली कर सकते हैं, तो XOR कई प्रतियां, स्वतंत्र कुंजी (या महंगी PRNG का उपयोग करके एकल कुंजी का विस्तार करके उत्पन्न कुंजियों) का उपयोग कर।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है । एक बार जब आप एक रचनात्मक अंत पर आते हैं, तो कृपया अपनी चर्चा के परिणामों को शामिल करने के लिए उत्तर को संपादित करें।
राफेल

4

मैं इसे एक शॉट दूँगा, क्योंकि मैं कुछ अन्य उत्तरों में दी गई सलाह से पर्याप्त रूप से परेशान हूं।

आज्ञा दें दो RNG द्वारा उत्पन्न अनंत बिट अनुक्रम हैं (जरूरी नहीं कि PRNG जो कि एक बार प्रारंभिक अवस्था ज्ञात होने पर नियतात्मक हों), और हम अनुक्रम का उपयोग करने की संभावना पर विचार कर रहे हैं कुछ अर्थों में व्यवहार में सुधार की आशा के साथ । ऐसे कई तरीके हैं जिनमें को प्रत्येक और की तुलना में बेहतर या बदतर माना जा सकता है ; यहाँ एक छोटा सा मुट्ठी भर शब्द है जो मुझे विश्वास है कि "बेहतर" और "बदतर" शब्दों के सामान्य उपयोग के साथ सार्थक, उपयोगी और सुसंगत हैं:X,YXYXYXY

  • (0) अनुक्रम की वास्तविक यादृच्छिकता की संभावना बढ़ जाती है या घट जाती है
  • (1) अवलोकनीय गैर-यादृच्छिकता की संभावना बढ़ जाती है या घट जाती है (कुछ पर्यवेक्षक के संबंध में, जांच की कुछ दी गई राशि, संभवतः)
  • (२) अवलोकनीय गैर-यादृच्छिकता की गंभीरता / स्पष्टता बढ़ती या घटती है।

पहले विचार करते हैं (0) के बारे में, जो कि तीनों में से केवल एक ही है जिसके सटीक होने की कोई उम्मीद है। ध्यान दें कि यदि वास्तव में, दोनों इनपुट RNG में से कोई भी वास्तव में यादृच्छिक, निष्पक्ष और दूसरे से स्वतंत्र है, तो XOR परिणाम वास्तव में यादृच्छिक और निष्पक्ष भी होगा। इस बात को ध्यान में रखते हुए, उस मामले पर विचार करें जब आप मानते हैं कि वास्तव में बेतरतीब ढंग से अलग-थलग अलग-अलग धाराएँ हैं, लेकिन आप पूरी तरह से निश्चित नहीं हैं। यदि संबंधित संभावनाएं हैं, तो आप उनमें से प्रत्येक के बारे में गलत हैं, तो संभावना है कि सही-यादृच्छिक नहीं है, तो , वास्तव में बहुत कमX,YεX,εYXYεXεY<min{εX,εY}εX,εY को 0 के बहुत करीब माना जाता है ("आप मानते हैं कि वे वास्तव में यादृच्छिक हैं")। और वास्तव में यह उससे भी बेहतर है, जब हम की संभावना को भी ध्यान में रखते हैं तब भी जब वास्तव में यादृच्छिक न हो तो भी स्वतंत्र है: इसलिए हम इस निष्कर्ष पर पहुँच सकते हैं कि (0), XOR को नुकसान नहीं पहुँचा सकता है, और संभवतः बहुत मदद कर सकता है।X,Y

Pr(XY not truly random)min{Pr(X not truly random),Pr(Y not truly random),Pr(X,Y dependent)}.

हालाँकि, PRNGs के लिए (0) दिलचस्प नहीं है, क्योंकि PRNGs के मामले में प्रश्न में कोई भी क्रम सही मायने में यादृच्छिक होने का कोई मौका नहीं है।

इसलिए इस सवाल के लिए, जो वास्तव में PRNGs के बारे में है, हमें कुछ (1) या (2) के बारे में बात करनी चाहिए। चूंकि वे "अवलोकनीय", "गंभीर", "स्पष्ट", "स्पष्ट" जैसे गुणों और मात्राओं के संदर्भ में हैं, अब हम कोलमोगोरोव जटिलता के बारे में बात कर रहे हैं, और मैं इसे सटीक बनाने की कोशिश नहीं करने जा रहा हूं। लेकिन मैं उम्मीद के मुताबिक निर्विवाद जोर लगाने के लिए इतनी दूर जाऊंगा कि, इस तरह के एक उपाय से, "01100110 ..." (अवधि = 4) "01010101 ..." (अवधि = 2) से भी बदतर है जो "इससे भी बदतर है" 00000000 ... "(स्थिर)।

अब, एक अनुमान लगा सकता है कि (1) और (2) उसी प्रवृत्ति का अनुसरण करेगा (0), और इसलिए कि निष्कर्ष "XOR चोट नहीं कर सकता" अभी भी पकड़ सकता है। हालाँकि, इस महत्वपूर्ण संभावना पर ध्यान दें कि न तो और न ही का अवलोकन गैर-यादृच्छिक था, लेकिन उन दोनों के बीच सहसंबंध के कारण का अवलोकन गैर-यादृच्छिक होता है। इसका सबसे गंभीर मामला, ज़ाहिर है, जब (या ), जिस स्थिति में स्थिर है, सभी संभावित परिणामों में से सबसे खराब; सामान्य तौर पर, यह देखना आसान है कि, भले ही कितना अच्छा और हैं,XYXYX=YX=not(Y)XYXYXऔर को अपने xor के लिए स्वतंत्र रूप से "नज़दीकी" होने की आवश्यकता होती है, न कि अवलोकन-गैर-आयामी। वास्तव में, अवलोकनीय-निर्भर नहीं होने को यथोचित रूप से रूप में परिभाषित किया जा सकता है, न कि अवलोकन-गैर-आयामी।YXY

इस तरह की आश्चर्यजनक निर्भरता वास्तव में एक बड़ी समस्या है।


क्या गलत हो जाता है इसका एक उदाहरण

प्रश्न में कहा गया है कि "मैं एक ही परिवार से एक साथ काम कर रहे कई रेखीय प्रतिक्रिया शिफ्ट रजिस्टर के सामान्य उदाहरण को छोड़ रहा हूं"। लेकिन मैं उस समय के लिए उस बहिष्करण को बाहर करने जा रहा हूं, ताकि XORing के साथ गलत तरीके का एक बहुत ही सरल वास्तविक जीवन उदाहरण दिया जा सके।

मेरा उदाहरण रैंड () का एक पुराना कार्यान्वयन होगा जो कि यूनिक्स लगभग 1983 के कुछ संस्करण पर था। IIRC, रैंड के इस कार्यान्वयन () फ़ंक्शन में निम्नलिखित गुण थे:

  • रैंड () के लिए प्रत्येक कॉल का मूल्य 15 छद्म यादृच्छिक बिट्स था, अर्थात, [0, 32767 श्रेणी में पूर्णांक)।
  • क्रमिक रिटर्न मान वैकल्पिक-सम-विषम-विषम; यह है, सबसे कम-महत्वपूर्ण-बिट 0-1-0-1 बारी-बारी से ...
  • अगले-से-कम-महत्वपूर्ण बिट की अवधि 4 थी, इसके बाद की अवधि 8 थी, ... इसलिए उच्चतम-ऑर्डर बिट की अवधि ।215
  • इसलिए रैंड के 15-बिट रिटर्न वैल्यू का क्रम अवधि के साथ आवधिक था ।215

मैं मूल स्रोत कोड को खोजने में असमर्थ किया गया है, लेकिन मैं में यहां से पोस्ट की एक जोड़ी एक साथ piecing से अनुमान लगा रहा हूँ https://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3A कि इसने निम्नलिखित (सी कोड) को ठीक किया, जो उपरोक्त गुणों की मेरी स्मृति से सहमत है:

#define RAND_MAX 32767
static unsigned int next = 1;
int rand(void)
{
    next = next * 1103515245 + 12345;
    return (next & RAND_MAX);
}
void srand(seed)
unsigned int seed;
{
    next = seed;
}

जैसा कि कोई कल्पना कर सकता है, विभिन्न तरीकों से इस रैंड () का उपयोग करने की कोशिश ने निराशाओं को जन्म दिया।

उदाहरण के लिए, एक बिंदु पर मैंने बार-बार लेने के द्वारा यादृच्छिक सिक्का फ़्लिप के अनुक्रम का अनुकरण करने की कोशिश की:

rand() & 1

यानी कम से कम महत्वपूर्ण बिट। परिणाम सरल वैकल्पिक सिर-पूंछ-सिर-पूंछ था। यह पहली बार में विश्वास करना कठिन था (मेरे कार्यक्रम में एक बग होना चाहिए!), लेकिन बाद में मैंने खुद को आश्वस्त किया कि यह सच है, मैंने इसके बजाय अगले-कम-महत्वपूर्ण बिट का उपयोग करने की कोशिश की। यह बहुत बेहतर नहीं है, जैसा कि पहले उल्लेख किया गया है - वह बिट आवधिक है। 4. क्रमिक रूप से उच्च बिट्स का पता लगाने के लिए पैटर्न मैंने पहले नोट किया था: अर्थात, प्रत्येक अगले उच्च-क्रम बिट में पिछले की अवधि से दोगुना था, इसलिए यह सम्मान उच्चतम-क्रम बिट उन सभी के लिए सबसे उपयोगी था। ध्यान दें कि कोई काला-सफेद दहलीज नहीं था "बिट उपयोगी है, बिट उपयोगी नहीं है" यहां; हम सभी वास्तव में कह सकते हैं कि गिने-चुने बिट पदों में उपयोगिता / बेकारता की अलग-अलग डिग्री थी।ii1

मैंने परिणामों को आगे बढ़ाने के लिए भी कोशिश की, या एक साथ कई कॉल रैंड () से लौटाए गए मानों को XOR करना। क्रमिक रैंड () मूल्यों के XORing जोड़े एक आपदा थे, निश्चित रूप से - इसके परिणामस्वरूप सभी विषम संख्याएं थीं! मेरे उद्देश्यों के लिए (अर्थात् सिक्के के उतार-चढ़ाव का "स्पष्ट रूप से यादृच्छिक" अनुक्रम पैदा करना), XOR की निरंतर समता परिणाम मूल के विषम सम-विषम व्यवहार से भी बदतर थी।

थोड़ी भिन्नता इसे मूल ढाँचे में डालती है: , रैंड द्वारा लौटाए गए 15-बिट मानों का अनुक्रम हो () दिए गए बीज , और एक अलग बीज से अनुक्रम । फिर, सभी या सम-विषम संख्याओं का एक अनुक्रम होगा, जो मूल प्रत्यावर्ती सम / विषम व्यवहार से भी बदतर है।XsXYsYXY

दूसरे शब्दों में, यह एक उदाहरण है जहां XOR ने किसी भी उचित व्याख्या द्वारा (1) और (2) के अर्थ में चीजों को बदतर बना दिया। यह कई अन्य तरीकों से भी बदतर है:

  • (3) XORed कम से कम-महत्वपूर्ण-बिट स्पष्ट रूप से पक्षपाती है, यानी 0 और 1 के असमान आवृत्तियों में से किसी भी संख्या में बिट स्थिति के विपरीत, जो सभी निष्पक्ष हैं।
  • (४) वास्तव में, प्रत्येक बिट स्थिति के लिए, बीजों के जोड़े होते हैं, जिसके लिए एक्सओआर परिणाम में वह बिट स्थिति पक्षपाती होती है, और बीजों की प्रत्येक जोड़ी के लिए, एक्सओआर में पक्षपाती होने वाले (कम से कम ५) बिट पद होते हैं नतीजा।
  • (5) XOR परिणाम में 15-बिट मानों के पूरे अनुक्रम की अवधि या तो 1 या , जबकि मूल के लिए की तुलना में ।214215

कोई नहीं (3), (4), (5) स्पष्ट है, लेकिन वे सभी आसानी से सत्यापन योग्य हैं।


अंत में, आइए एक ही परिवार से PRNGs के निषेध को फिर से शुरू करने पर विचार करें। यहाँ मुझे लगता है कि समस्या यह है कि यह वास्तव में कभी स्पष्ट नहीं है कि दो PRNG "एक ही परिवार से" हैं, जब तक / जब तक कोई XOR और नोटिस (या हमलावर नोटिस) का उपयोग करना शुरू नहीं करता है, तब तक (1) के अर्थ में चीजें खराब हो गईं। और (2), अर्थात जब तक आउटपुट में गैर-यादृच्छिक पैटर्न नहीं देखा-देखा / शर्मनाक / विनाशकारी से सीमा को पार करते हैं, और उस बिंदु पर बहुत देर हो चुकी होती है।

मैं यहाँ अन्य जवाबों से घबरा गया हूँ, जो सैद्धांतिक सलाह के आधार पर अयोग्य सलाह "XOR को चोट नहीं पहुँचा सकते" जो मुझे मॉडलिंग के घटिया काम करने के लिए दिखाई देती है, जिसे ज्यादातर लोग "अच्छा" और "बुरा" मानते हैं। वास्तविक जीवन में PRNGs। उस सलाह का स्पष्ट और स्पष्ट उदाहरणों से खंडन किया जाता है जिसमें XOR चीजों को बदतर बना देता है, जैसे कि रैंड () उदाहरण ऊपर दिया गया है। हालांकि यह अनुमान योग्य है कि अपेक्षाकृत "मजबूत" PRNG लगातार विपरीत व्यवहार प्रदर्शित कर सकता है जब XORed टू द खिलौना PRNG जो कि रैंड () था, जिससे XOR उनके लिए एक अच्छा विचार बना रहा है, मैंने उस दिशा में कोई सबूत नहीं देखा है, सैद्धांतिक या अनुभवजन्य, इसलिए ऐसा होना मेरे लिए अनुचित है।

व्यक्तिगत रूप से, मेरी युवावस्था में XORing रैंड () के द्वारा आश्चर्य से काट लिया गया है, और अपने पूरे जीवन में अनगिनत अन्य मिश्रित आश्चर्य सहसंबंधों से, मुझे लगता है कि अगर मैं फिर से इसी तरह की रणनीति आजमाता हूं, तो परिणाम के बारे में सोचने का कोई कारण नहीं है। यही कारण है कि मैं, व्यक्तिगत रूप से, कई PRNGs के साथ XOR के लिए बहुत अनिच्छुक होगा जब तक कि बहुत व्यापक विश्लेषण और वीटिंग मुझे कुछ आत्मविश्वास देने के लिए नहीं किया गया है कि विशेष रूप से RNG के लिए ऐसा करना सुरक्षित हो सकता है। जब मुझे एक या एक से अधिक PRNG में कम आत्मविश्वास होता है, तो संभावित इलाज के रूप में, उन्हें XORing करना मेरा आत्मविश्वास बढ़ाने की संभावना नहीं है, इसलिए मैं इस तरह के उद्देश्य के लिए इसका उपयोग करने की संभावना नहीं हूं। मैं आपके प्रश्न के उत्तर की कल्पना करता हूं कि यह व्यापक रूप से आयोजित भावना है।


तो आप A5 / 1 का उपयोग कैसे करते हैं?
पॉल उस्ज़ाक

@PaulUszak मुझे कोई पता नहीं है। क्या A5 / 1 का उपयोग अरबों लोगों द्वारा किया जा रहा है जो मैंने कुछ कहा है?
डॉन हैच

यह तीन prngs है (वास्तव में एक ही परिवार से) एक साथ मिलकर एक बेहतर तरीका बनाने के लिए जो आपको परेशान करता है और
सचेत करता है

मैं जिस चीज से परेशान और चिंतित हूं, वह है अयोग्य सलाह "यदि आप निश्चित नहीं हैं, तो आगे बढ़ें और एक्सओआर एक साथ आरएनजी का एक गुच्छा; यह चीजों को बदतर नहीं कर सकता है"। मेरे कहने या कहने का मतलब यह नहीं था कि XOR सभी मामलों में बुरा है, और मुझे A5 / 1 के बारे में या इसमें XOR के उपयोग के बारे में कोई राय नहीं है। यदि मैं अपना अंतिम मूर्खतापूर्ण सारांश वक्तव्य बदल कर इसे स्पष्ट करूं तो क्या यह मदद करेगा?
डॉन हैच

1
मैंने कुछ और वास्तविक और उम्मीद से कम भ्रामक के साथ अंत में सरलीकृत "बस कहो नहीं XORing RNGs" को बदल दिया।
डॉन हैच

0

अस्वीकरण: यह जवाब कड़ाई से "हम यह नहीं कर रहे हैं" के बारे में है और "यहां यह गणितीय प्रमाण नहीं है कि यह क्यों या नहीं कर सकता है"। मैं यह दावा नहीं करता कि XOR किसी भी क्रिप्टोग्राफ़िक कमजोरियों का परिचय देता है (या नहीं)। मेरा कहना केवल यह है कि अनुभव हमें दिखाता है कि सरलतम योजनाएँ भी लगभग हमेशा अप्रत्याशित परिणाम देती हैं - और यही कारण है कि हम उनसे बचते हैं।

"यादृच्छिकता" हिमशैल का एक सिरा है जब यह RNG और PRNGs में आता है। अन्य गुण हैं जो महत्वपूर्ण हैं, जैसे एकरूपता।

एक सामान्य पासा की कल्पना करें जो अपने आप में काफी अच्छा आरएनजी है। लेकिन अब मान लें कि आपको 1-6 के बजाय 1-5 रेंज की आवश्यकता है। पहली बात जो दिमाग में आती है, वह बस 6 चेहरे को मिटा देना और इसे 1 अतिरिक्त के साथ बदलना है। "यादृच्छिकता" बनी हुई है (परिणाम अभी भी यादृच्छिक हैं), हालांकि एकरूपता बहुत ग्रस्त है: अब 1 अन्य परिणामों की तुलना में दोगुना है।

कई आरएनजी से परिणाम संयोजन एक समान फिसलन ढलान है। उदाहरण के लिए। सरल 2 डाइस फेंक पूरी तरह से किसी भी एकरूपता को मिटा देता है, क्योंकि "7" अब "2" या "12" की तुलना में 6 गुना अधिक है। मैं इस बात से सहमत हूं कि XOR पहली नज़र में जुड़ने से बेहतर है, लेकिन PRNGs में पहली नज़र में जैसा दिखता है वैसा कुछ भी नहीं है।

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

सुरक्षा एक श्रृंखला है, जितना मजबूत यह सबसे कमजोर घटक है। सुरक्षा में अंगूठे का एक नियम: जब भी आप 2 चीजों को जोड़ते हैं, तो आपको आमतौर पर खामियों का योग मिलता है, ताकत का योग नहीं।


7
दृढ़तापूर्वक असहमत। यदि आप एक अनियंत्रित अनुक्रम के साथ वास्तव में यादृच्छिक अनुक्रम XOR करते हैं, तो आपको अभी भी वास्तव में यादृच्छिक अनुक्रम मिलता है। इसी तरह, यदि आप XOR दो स्वतंत्र छद्म आयामी अनुक्रम (यानी, अलग-अलग कुंजियों के साथ उत्पन्न) करते हैं, तो आपको व्यक्तिगत रूप से प्रत्येक के रूप में कम से कम कुछ मजबूत मिलता है।
युवल फिल्मस

3
यह मुझे गलत लगता है। यहां सामान्य मामला यह है कि मुझे लगता है कि मेरे पास दो बहुत ही उच्च गुणवत्ता वाले आरएनजी हैं जो अनिवार्य रूप से यादृच्छिक बिट्स का उत्पादन करते हैं, लेकिन एक छोटा सा मौका एप्सिलॉन है जो मैं (शायद सकल रूप से) उनमें से एक (या, बहुत कम संभावना, दोनों) के बारे में गलत हो सकता हूं। अगर मैं उन्हें एक साथ कर देता हूं, जब तक कि मैं उनमें से कम से कम एक के बारे में सही हूं, परिणाम वास्तव में यादृच्छिक होगा, और मैं अच्छा हूं। इसलिए उनके संयोजन से मैंने एक बुरे RNG होने की संभावना को लगभग epsilon / 2 से बेहद छोटे epsilon ^ 2 से कम कर दिया है, जो निश्चित रूप से एक जीत है। मुझे लगता है कि कम कट-एंड-ट्राइ मामलों में भी इसी तरह की गतिशीलता पकड़ है।
डॉन हैच

2
मुझे अब भी यकीन नहीं हो रहा है। जब मैंने "वास्तव में यादृच्छिक" लिखा तो मेरा मतलब था "समान रूप से यादृच्छिक"। यदि आप एक मनमाने ढंग से अनुक्रम के साथ समान रूप से यादृच्छिक अनुक्रम करते हैं, तो आपको समान रूप से यादृच्छिक अनुक्रम मिलता है।
युवल फिल्मस

2
@ डोनचैच निश्चित रूप से, जो योग्य होगा। मान लीजिए कि आपका PRNG लंबाई 100 का क्रम बनाता है, तो उसी क्रम का एक शोर संस्करण, और इसी तरह। मान लीजिए कि पहली के साथ दूसरी प्रति का सहसंबंध है । XORed अनुक्रम संतुष्ट करता है । चूंकि, यह कहना उचित है कि सहसंबंध "स्थूल रूप से बढ़े हुए" नहीं हैं, बल्कि स्थूल रूप से कम हो गए हैं। जेड मैं = एक्स मैंवाई मैं पीआर [ जेड मैं + 100 = जेड मैं ] = ( 1 + ε 2 ) / 2 ε 2| ϵ |Pr[Xi+100=Xi]=(1+ϵ)/2Zi=XiYiPr[Zi+100=Zi]=(1+ϵ2)/2ϵ2|ϵ|
युवल फिल्मस

3
@YuvalFilmus आप शायद सही हैं कि आइटम i और आइटम i + 100 के बीच सहसंबंध सकल रूप से कम हो गया है, लेकिन यह बात नहीं है। एक बहुत ही विशिष्ट और वास्तविक जीवन के उदाहरण के लिए: मुझे याद है कि यूनिक्स पर पुराने क्रैपी रैंड () कार्यान्वयन को प्रत्येक 31-बिट पूर्णांक के निम्नतम-क्रम बिट में आवधिक व्यवहार था, जिसे अधिकांश लोगों ने नोटिस नहीं किया था। दुर्भाग्य से शिफ्ट आकार की खुद की स्थानांतरित प्रति के साथ चींटियों का अनुक्रम जो (जो कि आपको एक अलग बीज का उपयोग करने पर मिलता है), आपको सभी नंबर भी मिलेंगे। ऐसा इसलिए है बहुत मूल अनुक्रम में समस्या से भी बदतर है, सबसे अधिक उद्देश्यों के लिए।
डॉन हैच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.