“यह यादृच्छिक है” एक दावा है, तथ्य नहीं। किसी चयन के निष्पक्ष होने के लिए दो बातें सच होनी चाहिए: संख्याओं का स्रोत अनुमानित न हो, और हर विकल्प की संभावना समान हो।
दोनों को लागू किया जा सकता है, दोनों में आमतौर पर गलती होती है, और दोनों स्वतंत्र रूप से विफल होती हैं। किसी टूल में उत्कृष्ट यादृच्छिक स्रोत और पक्षपातपूर्ण मैपिंग हो सकती है, या पूरी तरह समरूप मैपिंग जिसे अनुमानित संख्याएँ खिलाती हैं।
यादृच्छिकता कहाँ से आती है
असली यादृच्छिकता उन भौतिक प्रक्रियाओं से आती है जो पिछली स्थिति से निर्धारित नहीं होतीं:
- रेडियोधर्मी क्षय — परमाणु के क्षय का क्षण अनुमानित नहीं किया जा सकता
- तापीय शोर — प्रतिरोधक में यादृच्छिक वोल्टेज उतार-चढ़ाव
- वायुमंडलीय शोर — बिजली की गतिविधि से पृष्ठभूमि स्थैतिक
- क्वांटम मापन — ऐसे परिणाम जो वास्तव में अनिश्चित हैं
कंप्यूटर इन्हें सीधे नहीं देख सकता। वह एक हार्डवेयर जनरेटर का नमूना लेता है — /dev/urandom और उसके समकक्ष — जो स्वयं भौतिक प्रक्रियाओं से सीड होता है। वह सच्चा यादृच्छिक संख्या जनरेटर है।
बहुत अधिक सामान्य स्थिति है छद्म-यादृच्छिक संख्या जनरेटर: एक निर्धारक एल्गोरिदम जो ऐसा अनुक्रम बनाता है जो बस यादृच्छिक दिखता है।
next = (previous × multiplier + increment) mod modulus
महत्वपूर्ण गुण सूक्ष्म नहीं है। अगर आप एल्गोरिदम और सीड जानते हैं, तो आप उस अनुक्रम का हर वह मान निकाल सकते हैं जो वह कभी उत्पन्न करेगा। लगभग नहीं — बिल्कुल। इसी कारण Math.random(), जिसे अधिकांश वेबसाइटें उपयोग करती हैं, किसी भी महत्वपूर्ण काम के लिए अनुपयुक्त है: इसका आउटपुट आंतरिक स्थिति से तय होता है, और देखे गए आउटपुट से उस स्थिति को निकालना हर भविष्य के परिणाम को अनुमानित बना देता है।
वह मध्य मार्ग जो सवाल तय करता है
आधुनिक प्लेटफ़ॉर्म प्रति कॉल कच्ची हार्डवेयर एन्ट्रॉपी उपयोग नहीं करते। वे क्रिप्टोग्राफिक रूप से सुरक्षित PRNG उपयोग करते हैं — निर्धारक, लेकिन हार्डवेयर एन्ट्रॉपी से सीड किया गया और ऐसे डिज़ाइन किया गया कि आउटपुट देखने से स्थिति का पता न चले।
| हार्डवेयर TRNG | CSPRNG | सामान्य PRNG | |
|---|---|---|---|
| भौतिक एन्ट्रॉपी पर आधारित | हाँ | हाँ | नहीं |
| स्थिति दी जाने पर निर्धारक | नहीं | हाँ | हाँ |
| आउटपुट स्थिति उजागर करता है | नहीं | नहीं | हाँ |
| पुरस्कार ड्रॉ के लिए उपयुक्त | हाँ | हाँ | नहीं |
CSPRNG ठीक उसी अर्थ में निर्धारक है जिस अर्थ में आपके द्वारा उपयोग किया जाने वाला हर सॉफ़्टवेयर निर्धारक है। इसे स्वीकार्य बनाता है कि इसकी स्थिति उसके पहले जारी किए गए आउटपुट से पुनर्प्राप्त नहीं की जा सकती।
ब्राउज़र इसे crypto.getRandomValues() के माध्यम से उजागर करते हैं। यह वही स्रोत है जिसका उपयोग यहाँ के ड्रॉ करते हैं।
समरूपता एक अलग समस्या है
अच्छा स्रोत होना पर्याप्त नहीं है। यादृच्छिक संख्या से विकल्प तक की मैपिंग फिर भी पक्षपातपूर्ण हो सकती है, और यही वह गलती है जो अधिकांश टूल करते हैं।

सरल तरीका — 0 से 1 तक के यादृच्छिक फ्लोट को रेंज पर स्केल करना — निचले सिरे को पक्षपात देता है। 40 नामों के साथ, कुछ यादृच्छिक मान अंतिम बकेट के अंत से आगे गिरते हैं, और अगर उन्हें खारिज करने के बजाय क्लैंप कर दिया जाए, तो पहला नाम अंतिम से थोड़ा अधिक बार आता है।
पक्षपात इतना छोटा है कि किसी को पता नहीं चलता, और यही कारण है कि यह अधिकांश कार्यान्वयनों में टिका रहता है।
सही तरीका है रिजेक्शन सैंपलिंग: ड्रॉ करें, और अगर परिणाम अपूर्ण अंतिम बकेट में गिरे, तो उसे खारिज करें और फिर ड्रॉ करें। वितरण बिल्कुल समरूप हो जाता है, इसलिए हर प्रविष्टि की संभावना 1/N होती है — 40 नामों के ड्रॉ में भी, जहाँ स्केल-फ्लोट कार्यान्वयन पहले नाम को बहुत थोड़ी अधिक संभावना देता है।
यही तकनीक यहाँ के शॉर्ट-ID जनरेटर में भी दिखती है, जहाँ स्वीकृति दर 252/256 है और परिणामी पक्षपात लगभग दो भाग प्रति दस मिलियन है। इतना छोटा कि अप्रासंगिक है, और इतना छोटा कि लापरवाह कार्यान्वयन बिना पहचाने रह जाता — यही कारण है कि इसे मापना उचित है।
तीन मानवीय गलतियाँ जो टूल की नहीं हैं
जुआरी की भ्रांति। लगातार पाँच चित के बाद, पट आना चाहिए ऐसा लगता है। हर ड्रॉ स्वतंत्र है। सिक्के को अनुचित होने की कोई स्मृति नहीं है, और पाँच चित के बाद भी सही संभावना प्रति फलक ठीक 1/6 ही रहती है।
क्लस्टरिंग भ्रम। यादृच्छिक डेटा में लगातार दिखने वाले पैटर्न होते हैं क्योंकि आप उन्हें ढूँढ रहे होते हैं। लगातार तीन समान परिणाम अंतर्ज्ञान के अनुमान से कहीं अधिक बार होते हैं। और सच्चा यादृच्छिक डेटा छोटे दौरों में गुच्छेदार दिखता है — जो अनुक्रम पूरी तरह समान दिखे, उसके असली होने से अधिक संभावना है कि वह गढ़ा गया हो।
जन्मदिन विरोधाभास। 23 लोगों के समूह में, दो के जन्मदिन एक होने की संभावना है। यह अंकगणित है, मनोविज्ञान नहीं, लेकिन यह दिखाता है कि लोग यादृच्छिकता का अनुमान लगाने में इतने खराब क्यों हैं: व्यक्तिगत संभावनाएँ बहुत छोटी होती हैं और वे गुणा होती हैं।
साझा सूत्र यह है कि एक अवलोकन किसी भी दिशा में कुछ सिद्ध नहीं करता। अजीब लगा कोई ड्रॉ उतना ही अनिश्चित है जितना साफ-सुथरा लगा कोई ड्रॉ।
व्यवहार में सबसे ज़्यादा मायने रखने वाली दो विफलताएँ
तंत्र का पता लगाने के बाद, यह बताना उचित है कि जब कोई चयन विवादित होता है तो वास्तव में क्या गलत होता है — और इनमें से कोई भी स्रोत के बारे में नहीं है।
संचालक ने परिणाम को ओवरराइड किया। दोबारा रोल करना, हाथ से सुधारना, ड्रॉ के बीच में किसी अनुपस्थित नाम को छोड़ना। एक उत्तम जनरेटर और संशोधित परिणाम फिर भी संशोधित परिणाम ही है, और यह हर उस व्यक्ति को दिखता है जिसने देखा।
पूल वह प्रकाशित पूल नहीं था। कोई नाम जोड़ना, या चुपचाप किसी को हटाना, एल्गोरिदम की परवाह किए बिना चयन बदल देता है।
दोनों प्रक्रिया की विफलताएँ हैं, और दोनों को रिकॉर्ड किया गया ड्रॉ रोकता है। इसीलिए प्रतिभागी सूची को फ़्रेम में रखकर रिकॉर्ड करना किसी भी तकनीकी गुण से अधिक मूल्यवान है: यह दोनों को रोक देता है।
इस स्तर की कठोरता कहाँ उचित है
दोपहर का भोजन चुनने के लिए, इनमें से कुछ भी मायने नहीं रखता। कोई भी जनरेटर स्वीकार्य भोजन बना देता है।
यह तब महत्वपूर्ण हो जाता है जब दाँव, प्रतिष्ठा, या कानूनी पहलू हो:
- पुरस्कार ड्रॉ और प्रतियोगिताएँ। सत्यापन योग्य परिणाम ही मुद्दा है
- कर्मचारी या कर्तव्य आवंटन। लोग प्रक्रिया की जाँच करेंगे
- वैज्ञानिक और नैदानिक यादृच्छिकीकरण। क्षेत्र का मानक दर्ज, सीड किया गया, पुनरुत्पादनीय यादृच्छिकता है
- नियामक और ऑडिट संदर्भ। दर्ज यादृच्छिकता अक्सर वरीयता नहीं, आवश्यकता होती है
इन सभी में आवश्यकताएँ वही चार हैं, और वे संक्षिप्त हैं: पूल निश्चित और प्रकाशित हो, भार प्रकाशित हों अगर कोई हों, स्रोत अनुमानित न हो, और परिणाम पूल को दृश्यमान रखकर दर्ज हो।
इसे स्वयं कैसे जाँचें
आप ब्राउज़र टैब में CSPRNG का ऑडिट नहीं कर सकते, लेकिन आप तंत्र पर तर्क कर सकते हैं, और वही पर्याप्त है।
पूछें कि स्रोत क्या है। अगर उत्तर “एक रैंडम फंक्शन” है, तो पूछें कि क्या वह अनुमानित वाला है। crypto.getRandomValues() एक विशिष्ट, जाँचने योग्य उत्तर है।
पूछें कि समरूपता कैसे प्राप्त की जाती है। अगर उत्तर में किसी फ्लोट को रेंज पर स्केल करना है और रिजेक्शन सैंपलिंग का ज़िक्र नहीं है, तो मैपिंग संभवतः पक्षपातपूर्ण है। थोड़ा, लेकिन मापने योग्य।
पूछें कि संचालक क्या बदल सकता था। अगर कुछ नहीं, तो परिणाम बचाव योग्य है। अगर कोई नाम छोड़ा जा सकता था या ड्रॉ दोबारा चलाया जा सकता था, तो नहीं — स्रोत की परवाह किए बिना।
निष्पक्षता पृष्ठ इस साइट पर कार्यान्वयन को अधिक विस्तार से बताता है। अगर आप ऐसे निर्णय के लिए टूल चुन रहे हैं जिस पर सवाल उठेंगे, तो इसे एक बार पढ़ना उचित है।