चलो कुछ कंप्यूटर पोकर खेलते हैं, बस आप, मैं और सर्वर हम दोनों पर भरोसा करते हैं। सर्वर एक छद्म यादृच्छिक संख्या जनरेटर का उपयोग करता है जिसे हम खेलने से पहले 32-बिट बीज के साथ आरंभीकृत किया जाता है। तो लगभग चार बिलियन संभव डेक हैं।
मेरे हाथ में पांच कार्ड हैं - जाहिर है कि हम टेक्सास होल्ड 'एम नहीं खेल रहे हैं। मान लीजिए कि कार्डों में से एक को मुझे, एक को आप को, एक को मुझे, एक को आप से निपटाया जाता है। इसलिए मेरे पास डेक में पहले, तीसरे, पांचवें, सातवें और नौवें कार्ड हैं।
पहले मैंने छद्म यादृच्छिक संख्या जनरेटर को चार बिलियन बार चलाया, एक बार प्रत्येक बीज के साथ, और एक डेटाबेस में प्रत्येक के लिए उत्पन्न पहले कार्ड को लिखा। मान लीजिए मेरा पहला कार्ड हुकुम की रानी है। यह केवल उन संभावित डेक के हर 52 में से एक में पहले कार्ड के रूप में एक दिखाता है, इसलिए हमने संभावित डेक को चार अरब से लगभग 80 मिलियन या तो घटा दिया है।
मान लीजिए कि मेरा दूसरा कार्ड तीन दिलों का है। अब मैं 80 मिलियन बीजों का उपयोग करके अपने RNG को 80 मिलियन से अधिक बार चलाता हूं जो पहले नंबर के रूप में हुकुम की रानी का उत्पादन करता है। यह मुझे कुछ सेकंड के लिए ले जाता है। मैं सभी डेक को लिखता हूं जो तीसरे कार्ड के रूप में तीन दिलों का उत्पादन करता है - मेरे हाथ में दूसरा कार्ड। यह फिर से डेक के केवल 2% के बारे में है, इसलिए अब हम 2 मिलियन डेक के नीचे हैं।
मान लीजिए मेरे हाथ में तीसरा कार्ड क्लबों के 7 है। मेरे पास 2 मिलियन बीजों का एक डेटाबेस है जो मेरे दो कार्डों का निपटारा करता है; मैं अपने RNG को उन डेक के 2% को खोजने के लिए 2 लाख बार चलाता हूं जो 7 के क्लबों को तीसरे कार्ड के रूप में बनाते हैं, और हम केवल 40 हजार डेक तक नीचे हैं।
आप देखें कि यह कैसे होता है। मैं अपने चौथे कार्ड का उत्पादन करने वाले सभी बीजों को खोजने के लिए अपने RNG 40000 से अधिक बार चलाता हूं, और जो हमें 800 डेक तक ले जाता है, और फिर ~ 20 बीज प्राप्त करने के लिए 800 बार इसे चलाता हूं, जो मेरा पांचवा कार्ड बनाता है, और अब मैं बस उन बीस डेक कार्ड को उत्पन्न करें और मुझे पता है कि आपके पास बीस संभावित हाथों में से एक है। इसके अलावा, मेरे पास एक बहुत अच्छा विचार है कि मैं आगे क्या आकर्षित करने जा रहा हूं।
अब आप देखें कि सच्ची यादृच्छिकता महत्वपूर्ण क्यों है? जिस तरह से आप इसका वर्णन करते हैं, आपको लगता है कि वितरण महत्वपूर्ण है, लेकिन वितरण वह नहीं है जो एक प्रक्रिया को यादृच्छिक बनाता है। अप्रत्याशितता वह है जो एक प्रक्रिया को यादृच्छिक बनाती है।
अपडेट करें
(अब उनकी असंयमित प्रकृति के कारण हटाए गए) टिप्पणियों के आधार पर, कम से कम 0.3% लोग जिन्होंने इसे पढ़ा है, वे मेरी बात के अनुसार भ्रमित हैं। लोगों अंक मैं नहीं किया है, या बुरा के खिलाफ बहस करते हैं, लोगों का तर्क है के लिए अंक है कि मैं था धारणा है कि मैं उन्हें नहीं था पर बना है, तो मुझे पता है कि मैं और अधिक स्पष्ट रूप से और ध्यान से समझाने के लिए की जरूरत है।
शब्द वितरण के आसपास विशेष रूप से भ्रम होने लगता है इसलिए मैं ध्यान से यूज़ेज को कॉल करना चाहता हूं।
हाथ में प्रश्न हैं:
- छद्म आयामी संख्याएँ और वास्तव में यादृच्छिक संख्याएँ कैसे भिन्न होती हैं?
- अंतर महत्वपूर्ण क्यों है?
- क्या PRNG के आउटपुट के वितरण के साथ कुछ मतभेद हैं?
चलो पोकर खेलने के लिए जिसके साथ कार्ड का एक यादृच्छिक डेक उत्पन्न करने के लिए सही तरीके पर विचार करके शुरू करते हैं । फिर हम देखेंगे कि डेक बनाने के लिए अन्य तकनीकें कैसे भिन्न हैं, और यदि उस अंतर का लाभ उठाना संभव है।
चलो यह मानकर शुरू करते हैं कि हमारे पास एक जादुई बॉक्स है TRNG
। इसके इनपुट के रूप में हम इसे एक पूर्णांक n से अधिक या एक के बराबर देते हैं, और इसके आउटपुट के रूप में यह हमें एक और n, समावेशी के बीच सही मायने में यादृच्छिक संख्या देता है। बॉक्स का आउटपुट पूरी तरह से अप्रत्याशित है (जब एक के अलावा एक नंबर दिया जाता है) और एक और n के बीच की कोई भी संख्या एक दूसरे के रूप में होने की संभावना है; यह कहना है कि वितरण एक समान है । (यादृच्छिकता के अन्य अधिक उन्नत सांख्यिकीय चेक हैं जो हम प्रदर्शन कर सकते हैं; मैं इस बिंदु को अनदेखा कर रहा हूं क्योंकि यह मेरे तर्क के लिए जर्मन नहीं है। धारणा के अनुसार TRNG पूरी तरह से सांख्यिकीय रूप से यादृच्छिक है।)
हम ताश के पत्तों के एक अप्रकाशित डेक से शुरू करते हैं। हम बॉक्स को एक और 52 के बीच की संख्या के लिए पूछते हैं - अर्थात TRNG(52)
। जो भी नंबर वापस देता है, हम अपने सॉर्ट किए गए डेक से उस कार्ड को गिनते हैं और उस कार्ड को निकाल देते हैं। यह फेरबदल डेक में पहला कार्ड बन जाता है। फिर हम TRNG(51)
दूसरे कार्ड का चयन करने के लिए कहते हैं और ऐसा ही करते हैं।
इसे देखने का एक और तरीका है: 52 हैं! = 52 x 51 x 50 ... x 2 x 1 संभावित डेक, जो लगभग 2 226 है । हमने उनमें से एक को सही मायने में यादृच्छिक पर चुना है।
अब हम कार्डों का सौदा करते हैं। जब मैं अपने कार्ड को देखता हूं तो मुझे पता नहीं चलता कि आपके पास क्या कार्ड है। (इस तथ्य के अलावा कि आपके पास मेरे पास कोई कार्ड नहीं है।) वे समान संभावना वाले किसी भी कार्ड हो सकते हैं।
तो मुझे यह सुनिश्चित करने दें कि मैं इसे स्पष्ट रूप से समझाऊं। हमारे पास प्रत्येक व्यक्तिगत आउटपुट का समान वितरण है TRNG(n)
; प्रत्येक 1 और n के बीच प्रायिकता 1 / n के साथ एक संख्या चुनता है। साथ ही, इस प्रक्रिया का परिणाम यह है कि हमने 52 में से एक को चुना है! 1/52 की सम्भावना !, तो वितरण के साथ संभव डेक संभव डेक के समूह के ऊपर है भी वर्दी।
ठीक है।
अब मान लेते हैं कि हमारे पास एक कम मैजिक बॉक्स है, जिसे लेबल किया गया है PRNG
। उपयोग करने से पहले, इसे 32-बिट अहस्ताक्षरित संख्या के साथ सीड किया जाना चाहिए ।
ASIDE: 32 क्यों ? क्या यह 64- या 256- या 10000-बिट संख्या के साथ नहीं हो सकता है? ज़रूर। लेकिन (1) व्यवहार में अधिकांश ऑफ-द-शेल्फ PRNG को 32-बिट संख्या के साथ वरीयता दी जाती है, और (2) यदि आपके पास बीज बनाने के लिए यादृच्छिकता के 10000 बिट्स हैं तो आप PRNG का उपयोग क्यों कर रहे हैं? आपके पास पहले से ही यादृच्छिकता के 10000 बिट्स का स्रोत है!
वैसे भी, PRNG कैसे काम करता है: इस पर अंकुरित होने के बाद, आप इसे उसी तरह उपयोग कर सकते हैं जैसे आप उपयोग करते हैं TRNG
। यही है, आप इसे एक संख्या, n पास करते हैं, और यह आपको 1 और n के बीच एक संख्या वापस देता है, समावेशी। इसके अलावा, उस आउटपुट का वितरण कम या ज्यादा समान है । यही है, जब हम PRNG
1 और 6 के बीच संख्या पूछते हैं, तो हमें 1, 2, 3, 4, 5 या 6 प्रत्येक समय का लगभग एक छठा मिलता है, कोई फर्क नहीं पड़ता कि बीज क्या था।
मैं इस बिंदु पर कई बार जोर देना चाहता हूं क्योंकि ऐसा लगता है कि कुछ टिप्पणीकारों को भ्रमित कर रहा है। PRNG का वितरण कम से कम दो तरीकों से एक समान है। पहला, मान लीजिए कि हम किसी विशेष बीज को चुनते हैं। हम उम्मीद करेंगे कि अनुक्रम PRNG(6), PRNG(6), PRNG(6)...
एक मिलियन बार 1 और 6. के बीच संख्याओं का एक समान वितरण का उत्पादन करेगा और दूसरा, अगर हमने एक लाख अलग-अलग बीजों को चुना और प्रत्येक बीज के लिए एक PRNG(6)
बार कॉल किया, तो हम 1 से संख्याओं के एक समान वितरण की उम्मीद करेंगे 6. इनमें से किसी भी ऑपरेशन में PRNG की एकरूपता मेरे द्वारा बताए गए हमले के लिए प्रासंगिक नहीं है ।
इस प्रक्रिया को छद्म यादृच्छिक कहा जाता है क्योंकि बॉक्स का व्यवहार वास्तव में पूरी तरह से नियतात्मक है; यह बीज के आधार पर 2 32 संभावित व्यवहारों में से एक को चुनता है । यही है, एक बार यह बोया जाता है, एक समान वितरण के साथ संख्याओं PRNG(6), PRNG(6), PRNG(6), ...
का एक क्रम पैदा करता है , लेकिन यह अनुक्रम पूरी तरह से बीज द्वारा निर्धारित किया जाता है। कॉल के दिए गए अनुक्रम के लिए, कहें, PRNG (52), PRNG (51) ... और इसी तरह, केवल 2 32 संभावित क्रम हैं। बीज अनिवार्य रूप से चुनता है कि हमें कौन सा मिलता है।
एक डेक उत्पन्न करने के लिए सर्वर अब एक बीज उत्पन्न करता है। (कैसे? हम उस बिंदु पर वापस आएंगे।) फिर वे कॉल करते हैं PRNG(52)
, PRNG(51)
और इसी तरह डेक उत्पन्न करने के लिए, पहले की तरह।
यह प्रणाली मेरे द्वारा वर्णित हमले के लिए अतिसंवेदनशील है। पहले हम सर्वर पर हमला करने के लिए, समय से पहले, 0 के साथ बॉक्स की अपनी प्रति को सीड करें और PRNG(52)
नीचे लिखें और लिखें। फिर हम 1 के साथ फिर से बीज डालते हैं, पूछते हैं PRNG(52)
, और नीचे लिखते हैं, पूरे रास्ते में 2 32 -1।
अब, पोकर सर्वर जो PRNG का उपयोग डेक उत्पन्न करने के लिए करता है, उसे किसी तरह एक बीज उत्पन्न करना होता है। इससे कोई फर्क नहीं पड़ता कि वे ऐसा कैसे करते हैं। वे TRNG(2^32)
वास्तव में यादृच्छिक बीज प्राप्त करने के लिए कॉल कर सकते हैं । या वे वर्तमान समय को बीज के रूप में ले सकते हैं, जो शायद ही यादृच्छिक है; मुझे पता है कि यह समय आपके लिए कितना है। मेरे हमले की बात यह है कि इससे कोई फर्क नहीं पड़ता, क्योंकि मेरे पास मेरा डेटाबेस है । जब मैं अपना पहला कार्ड देखता हूं तो मैं 98% संभावित बीजों को खत्म कर सकता हूं। जब मैं अपना दूसरा कार्ड देखता हूं, तो मैं 98% तक समाप्त कर सकता हूं, और इसी तरह, जब तक कि मैं संभव मुट्ठी भर बीज तक नीचे नहीं जा सकता, और उच्च संभावना के साथ जान सकता हूं कि आपके हाथ में क्या है।
अब, फिर से, मैं इस बात पर ज़ोर देना चाहता हूँ कि यहाँ धारणा यह है कि अगर हम PRNG(6)
एक लाख बार कहें तो हमें प्रत्येक संख्या लगभग छठे समय मिलेगी । वह वितरण (अधिक या कम) एकसमान है , और यदि उस वितरण की एकरूपता आप सभी के बारे में परवाह है , तो यह ठीक है। सवाल का मुद्दा यह था कि क्या अन्य चीजें हैं जिनके वितरण की PRNG(6)
हमें परवाह है? और जवाब हां है । हम अप्रत्याशितता के बारे में भी परवाह करते हैं ।
समस्या को देखने का एक और तरीका यह है कि भले ही मिलियन कॉल का वितरण PRNG(6)
ठीक हो, क्योंकि PRNG केवल 2 32 संभावित व्यवहारों में से चुन रहा है, यह हर संभव डेक उत्पन्न नहीं कर सकता है। यह 2 226 संभावित डेक में से केवल 2 32 उत्पन्न कर सकता है ; एक छोटा सा अंश। तो सभी डेक के सेट पर वितरण बहुत खराब है। लेकिन फिर से, यहां मौलिक हमला हमारे उत्पादन के एक छोटे से नमूने से अतीत और भविष्य के व्यवहार की सफलतापूर्वक भविष्यवाणी करने में सक्षम होने पर आधारित है । PRNG
मुझे यह सुनिश्चित करने के लिए कि यह सिंक में तीन या चार बार है। यहां तीन वितरण हैं। सबसे पहले, उस प्रक्रिया का वितरण जो यादृच्छिक 32-बिट बीज का उत्पादन करता है। यह पूरी तरह से यादृच्छिक, अप्रत्याशित और वर्दी हो सकता है और हमला अभी भी काम करेगा । दूसरा, एक मिलियन कॉल का वितरण PRNG(6)
। यह पूरी तरह से एक समान हो सकता है और हमला अभी भी काम करेगा। तीसरा, मेरे द्वारा वर्णित छद्म यादृच्छिक प्रक्रिया द्वारा चुने गए डेक का वितरण। वह वितरण अत्यंत घटिया है; IRL संभव डेक का केवल एक छोटा सा अंश संभवतः चुना जा सकता है। यह हमला इसके उत्पादन के आंशिक ज्ञान के आधार पर PRNG के व्यवहार की पूर्वानुमेयता पर निर्भर करता है ।
ASIDE: इस हमले के लिए आवश्यक है कि हमलावर को पता हो या अनुमान लगाने में सक्षम हो कि PRNG द्वारा उपयोग किया गया सटीक एल्गोरिदम क्या है। वह वास्तविक है या नहीं यह एक खुला प्रश्न है। हालाँकि, सुरक्षा प्रणाली को डिज़ाइन करते समय आपको इसे हमलों के खिलाफ सुरक्षित रहने के लिए डिज़ाइन करना चाहिए, भले ही हमलावर कार्यक्रम के सभी एल्गोरिदम को जानता हो । एक और तरीका रखो: एक सुरक्षा प्रणाली के हिस्से को जो सिस्टम के सुरक्षित रहने के लिए गुप्त रहना चाहिए उसे "कुंजी" कहा जाता है। यदि आपका सिस्टम उस एल्गोरिदम पर अपनी सुरक्षा के लिए निर्भर करता है जिसे आप गुप्त होने का उपयोग करते हैं तो आपकी कुंजी में उन एल्गोरिदम होते हैं । यह एक अत्यंत कमजोर स्थिति है!
आगे बढ़ते रहना।
अब मान लेते हैं कि हमारे पास एक तीसरा मैजिक बॉक्स लेबल है CPRNG
। यह एक क्रिप्टो-शक्ति संस्करण है PRNG
। यह 32-बिट बीज के बजाय 256-बिट बीज लेता है। यह PRNG
संपत्ति के साथ साझा करता है जो बीज 2 256 संभावित व्यवहारों में से एक को चुनता है। और हमारी अन्य मशीनों की तरह, इसके पास संपत्ति है कि बड़ी संख्या में CPRNG(n)
1 और n के बीच परिणाम का एक समान वितरण का उत्पादन करने के लिए: प्रत्येक समय का 1 / n होता है। क्या हम इसके खिलाफ अपना हमला चला सकते हैं?
हमारे मूल हमले के लिए हमें बीज से 2 32 मैपिंग स्टोर करने की आवश्यकता है PRNG(52)
। लेकिन 2 256 एक बहुत बड़ी संख्या है; यह CPRNG(52)
कई बार चलाने और परिणामों को संग्रहीत करने के लिए पूरी तरह से संभव है ।
लेकिन मान लीजिए कि बीज के बारे में एक तथ्य को कम करने और उससे मूल्य लेने का कोई और तरीका है CPRNG(52)
? हम अभी तक बहुत गूंगे हो गए हैं, बस सभी संभावित संयोजनों को मजबूर कर रहे हैं। क्या हम जादू बॉक्स के अंदर देख सकते हैं, यह पता लगा सकते हैं कि यह कैसे काम करता है, और आउटपुट के आधार पर बीज के बारे में तथ्यों को घटाता है?
नहीं। विवरण स्पष्ट करने के लिए बहुत जटिल हैं, लेकिन CPRNG को बड़ी चतुराई से डिजाइन किया गया है ताकि बीज के बारे में किसी भी उपयोगी तथ्य को पहले आउटपुट से CPRNG(52)
या आउटपुट के किसी भी सबसेट से घटाया जा सके , चाहे वह कितना भी बड़ा क्यों न हो ।
ठीक है, तो अब मान लीजिए कि सर्वर CPRNG
डेक उत्पन्न करने के लिए उपयोग कर रहा है। इसके लिए 256-बिट बीज की आवश्यकता होती है। यह उस बीज को कैसे चुनता है? यदि यह किसी भी मूल्य को चुनता है जो एक हमलावर भविष्यवाणी कर सकता है तो अचानक हमला फिर से व्यवहार्य हो जाता है । यदि हम 2 256 संभावित बीजों को निर्धारित कर सकते हैं, तो सर्वर द्वारा उनमें से केवल चार बिलियन चुने जाने की संभावना है, फिर हम व्यवसाय में वापस आ गए हैं । हम इस हमले को फिर से माउंट कर सकते हैं, केवल उन छोटे बीजों पर ध्यान दे जो संभवतः उत्पन्न हो सकते हैं।
इसलिए सर्वर को यह सुनिश्चित करने के लिए काम करना चाहिए कि 256-बिट संख्या समान रूप से वितरित की जाती है - अर्थात, प्रत्येक संभावित बीज को 1/2 256 की संभावना के साथ चुना जाता है । मूल रूप से सर्वर के TRNG(2^256)-1
लिए बीज उत्पन्न करने के लिए कॉल किया जाना चाहिए CPRNG
।
क्या होगा यदि मैं सर्वर को हैक कर सकता हूं और यह देखने के लिए सहकर्मी को चुन सकता हूं कि क्या बीज चुना गया था? उस स्थिति में, हमलावर CPRNG का पूरा अतीत और भविष्य जानता है । सर्वर के लेखक को इस हमले से बचना चाहिए! (निश्चित रूप से अगर मैं इस हमले को सफलतापूर्वक पार कर सकता हूं तो मैं शायद अपने बैंक खाते में सीधे पैसा भी स्थानांतरित कर सकता हूं, इसलिए शायद यह दिलचस्प नहीं है। बिंदु यह है: बीज को एक कठिन-से-गुप्त रहस्य होना चाहिए, और एक वास्तव में यादृच्छिक 256-बिट संख्या का अनुमान लगाना बहुत कठिन है।)
रक्षा-में-गहराई के बारे में मेरे पहले बिंदु पर लौटना: 256-बिट बीज इस सुरक्षा प्रणाली की कुंजी है। CPRNG का विचार है कि जब तक कुंजी सुरक्षित है तब तक सिस्टम सुरक्षित है ; भले ही एल्गोरिथ्म के बारे में प्रत्येक अन्य तथ्य ज्ञात हो, जब तक आप कुंजी को गुप्त रख सकते हैं, प्रतिद्वंद्वी के कार्ड अप्रत्याशित होते हैं।
ठीक है, इसलिए बीज को गुप्त और समान रूप से वितरित किया जाना चाहिए क्योंकि यदि यह नहीं है, तो हम एक हमले को माउंट कर सकते हैं। हमारे पास यह धारणा है कि आउटपुट का वितरण CPRNG(n)
एक समान है। सभी संभावित डेक के सेट पर वितरण के बारे में क्या?
आप कह सकते हैं: CPRNG द्वारा 2 256 संभावित अनुक्रम आउटपुट हैं, लेकिन केवल 2 226 संभावित डेक हैं। इसलिए डेक की तुलना में अधिक संभव अनुक्रम हैं, इसलिए हम ठीक हैं; इस प्रणाली में अब हर संभव IRL डेक (उच्च संभावना के साथ) संभव है। और इसके अलावा एक अच्छा तर्क है ...
2 226 केवल एक है सन्निकटन 52 की !. इसे विभाजित करें। २ २५० / ५२! संभवतः एक पूरी संख्या नहीं हो सकती क्योंकि एक चीज के लिए, 52! 3 से विभाज्य है लेकिन दो की कोई शक्ति नहीं है! चूंकि यह एक पूर्ण संख्या नहीं है, अब हमारे पास ऐसी स्थिति है जहां सभी डेक संभव हैं , लेकिन कुछ डेक दूसरों की तुलना में अधिक संभावना है ।
यदि यह स्पष्ट नहीं है, तो छोटी संख्या के साथ स्थिति पर विचार करें। मान लीजिए कि हमारे पास तीन कार्ड हैं, ए, बी और सी। मान लीजिए कि हम 8-बिट बीज के साथ एक PRNG का उपयोग करते हैं, इसलिए 256 ग्राम बीज हैं। PRNG(3)
बीज के आधार पर 256 संभावित आउटपुट होते हैं ; उनमें से एक तिहाई के ए होने का कोई तरीका नहीं है, उनमें से एक तिहाई बी हैं और उनमें से एक तिहाई सी हैं क्योंकि 256 समान रूप से विभाज्य नहीं हैं। 3. उनमें से एक के लिए एक छोटा सा पूर्वाग्रह होना चाहिए।
इसी तरह, 52 समान रूप से 2 256 में विभाजित नहीं होता है , इसलिए कुछ कार्डों के प्रति कुछ पूर्वाग्रह होना चाहिए क्योंकि पहला कार्ड चुना गया है और एक पूर्वाग्रह दूसरों से दूर है।
32-बिट बीज वाले हमारे मूल सिस्टम में एक बड़े पैमाने पर पूर्वाग्रह था और संभव डेक के विशाल बहुमत का उत्पादन कभी नहीं किया गया था। इस प्रणाली में सभी डेक का उत्पादन किया जा सकता है, लेकिन डेक का वितरण अभी भी त्रुटिपूर्ण है । कुछ डेक दूसरों की तुलना में बहुत अधिक संभावना रखते हैं।
अब सवाल यह है कि क्या हमारे पास इस दोष के आधार पर हमला है? और जवाब व्यवहार में है, शायद नहीं । CPRNGs ताकि तैयार कर रहे हैं , तो बीज को सही मायने में यादृच्छिक है तो यह computationally अव्यवहार्य है के बीच अंतर बताने के लिए CPRNG
और TRNG
।
ठीक है, तो चलो योग करें।
छद्म आयामी संख्याएँ और वास्तव में यादृच्छिक संख्याएँ कैसे भिन्न होती हैं?
वे जिस पूर्वानुमानशीलता को प्रदर्शित करते हैं उसके स्तर में भिन्नता है।
- सचमुच यादृच्छिक संख्या पूर्वानुमान योग्य नहीं है।
- सभी छद्म यादृच्छिक संख्याओं का अनुमान लगाया जा सकता है यदि बीज का निर्धारण या अनुमान लगाया जा सकता है।
अंतर महत्वपूर्ण क्यों है?
क्योंकि ऐसे अनुप्रयोग हैं जहां सिस्टम की सुरक्षा अप्रत्याशितता पर निर्भर करती है ।
- यदि प्रत्येक कार्ड को चुनने के लिए TRNG का उपयोग किया जाता है, तो सिस्टम उपलब्ध नहीं है।
- यदि प्रत्येक कार्ड को चुनने के लिए CPRNG का उपयोग किया जाता है तो बीज सुरक्षित और अज्ञात दोनों होने पर सिस्टम सुरक्षित है।
- यदि एक छोटे बीज स्थान के साथ एक साधारण PRNG का उपयोग किया जाता है, तो सिस्टम इस बात की परवाह किए बिना सुरक्षित नहीं है कि बीज अप्रत्याशित है या अज्ञात; एक छोटा सा पर्याप्त बीज स्थान जिस तरह का मैंने वर्णन किया है, उस पर जानवर के हमले के लिए अतिसंवेदनशील है।
क्या अंतर का PRNG के आउटपुट के वितरण से कोई लेना-देना है?
वितरण या के लिए उसके अभाव की एकरूपता व्यक्ति कॉल करने के लिए RNG(n)
हमलों मैं का वर्णन किया है करने के लिए प्रासंगिक नहीं है।
हमने देखा के रूप में, दोनों एक PRNG
और CPRNG
सभी संभव डेक के किसी भी व्यक्ति के डेक को चुनने की संभावना के गरीब वितरण का उत्पादन। PRNG
काफी बदतर है, लेकिन दोनों समस्याएं हैं।
एक और प्रश्न:
यदि TRNG CPRNG से बहुत बेहतर है, जो बदले में PRNG से बहुत बेहतर है, तो कोई CPRNG या PRNG का उपयोग क्यों करता है?
दो कारण।
पहला: खर्च। TRNG महंगा है । वास्तव में यादृच्छिक संख्या उत्पन्न करना मुश्किल है। CPRNG, मनमाने ढंग से कई कॉल के लिए अच्छे परिणाम देते हैं, केवल एक कॉल के लिए TRNG को बीज के लिए। नीचे का पक्ष यह है कि आपको उस बीज को गुप्त रखना होगा ।
दूसरा: कभी-कभी हम पूर्वानुमेयता चाहते हैं और हमें इस बात की परवाह है कि अच्छा वितरण है यदि आप एक परीक्षण सूट के लिए प्रोग्राम इनपुट के रूप में "यादृच्छिक" डेटा उत्पन्न कर रहे हैं, और यह एक बग दिखाता है, तो यह अच्छा होगा कि परीक्षण सूट चलाने से फिर से बग पैदा होता है!
मुझे उम्मीद है कि अब बहुत स्पष्ट है।
अंत में, यदि आपने इसका आनंद लिया, तो आप यादृच्छिकता और क्रमपरिवर्तन के विषय पर आगे पढ़ने का आनंद ले सकते हैं: