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

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