सर्वर सीड, क्लाइंट सीड और nonce की व्याख्या
एक नज़र में इनपुट
| इनपुट | आम रूप | कौन नियंत्रित करता है | गुप्त? |
|---|---|---|---|
| सर्वर सीड | रैंडम स्ट्रिंग, अक्सर 64 hex अक्षर | casino | हां, रोटेट होने तक |
| हैश किया गया सर्वर सीड | 64 hex अक्षर (SHA-256) | casino | नहीं, सार्वजनिक commitment |
| क्लाइंट सीड | कोई भी टेक्स्ट | खिलाड़ी | नहीं |
| Nonce | 0 या 1 से शुरू होने वाला integer | हर दांव पर बढ़ता है | नहीं |
| Round या cursor | 0 से शुरू होने वाला integer | ज़्यादा bytes चाहिए तो एक दांव के अंदर बढ़ता है | नहीं |
आम स्कीम में ये इस तरह जुड़ते हैं:
HMAC-SHA256(serverSeed, clientSeed:nonce:round)
सर्वर सीड
सर्वर सीड casino की randomness का स्रोत है। इसे cryptographically सुरक्षित रैंडम नंबर जनरेटर से बनाया जाना चाहिए और यह इतना लंबा होना चाहिए कि इसका अनुमान न लगाया जा सके। 64 अक्षरों की hexadecimal स्ट्रिंग 256 bits दर्शाती है।
इसे गुप्त क्यों रहना चाहिए
जो कोई भी सक्रिय सर्वर सीड, क्लाइंट सीड और nonce जानता है, वह अगला नतीजा निकाल सकता है। अगर आप इसे जानते, तो सिर्फ तभी दांव लगाते जब जीतना तय हो। इसलिए इस्तेमाल के दौरान casino इसे छिपाकर रखता है।
इसके लिए प्रतिबद्धता क्यों ज़रूरी है
सिर्फ गोपनीयता से casino जब चाहे सीड बदल सकता था। इसे रोकने के लिए casino आपके खेलने से पहले सीड का SHA-256 हैश प्रकाशित करता है।
हैश किया गया सर्वर सीड
SHA-256 की दो खूबियां commitment को काम करने लायक बनाती हैं:
- Preimage resistance. हैश दिए जाने पर सीड ढूंढना व्यावहारिक नहीं है। आपके भविष्य के नतीजे अनुमान से बाहर रहते हैं।
- Collision resistance. एक ही हैश वाले दो अलग सीड ढूंढना व्यावहारिक नहीं है। casino बाद में कोई दूसरा सीड सामने लाकर यह दावा नहीं कर सकता कि वह मेल खाता है।
commitment तभी उपयोगी है जब आप उसका रिकॉर्ड रखें। अगर आप बाद में हैश दिखाने के लिए casino के इंटरफेस पर निर्भर हैं, तो एक बेईमान casino कोई दूसरा हैश दिखा सकता है। खेलने से पहले हैश नोट कर लें।
टेक्स्ट या bytes?
ज़्यादातर casinos सीड को ठीक वैसे ही हैश करते हैं जैसा दिखता है, एक टेक्स्ट स्ट्रिंग के रूप में। कुछ अंदर के bytes को हैश करते हैं। इनसे अलग-अलग हैश बनते हैं। अगर आपकी हैश जांच विफल हो, तो दस्तावेज़ देखें।
क्लाइंट सीड
क्लाइंट सीड आपका योगदान है। डिफ़ॉल्ट रूप से यह आमतौर पर एक रैंडम स्ट्रिंग होती है, लेकिन आप इसे किसी भी टेक्स्ट से बदल सकते हैं।
इसे बदला जा सकने वाला क्यों होना चाहिए
सोचिए इसके बिना casino क्या कर सकता था। प्रतिबद्धता देने से पहले वह बहुत बड़ी संख्या में संभावित सर्वर सीड बना सकता था, आम दांवों के लिए हर एक के नतीजों की नकल कर सकता था, और कोई खराब सीड चुन सकता था। commitment फिर भी वैध होता, क्योंकि वह सच में उसी सीड का इस्तेमाल करता।
क्लाइंट सीड इसे रोकता है, क्योंकि यह commitment के बाद गणना में आता है। जब तक casino आपके क्लाइंट सीड का अनुमान नहीं लगा सकता, वह नहीं जान सकता कि कोई सर्वर सीड आपके लिए क्या नतीजे देगा।
इसके सही रहने के लिए:
- आपको क्लाइंट सीड बदलने में सक्षम होना चाहिए।
- casino को सच में वही वैल्यू इस्तेमाल करनी चाहिए जो आपने सेट की।
- आपको इसे नए सर्वर सीड हैश के दिखने के बाद बदलना चाहिए, पहले नहीं।
casino का बनाया डिफ़ॉल्ट क्लाइंट सीड कमज़ोर सुरक्षा देता है, क्योंकि सिद्धांत रूप में casino इस पर असर डाल सकता है। अपना खुद का सेट करना सबसे सुरक्षित विकल्प है।
Nonce
nonce एक काउंटर है। एक ही सर्वर सीड और क्लाइंट सीड के साथ पहला दांव nonce 0 (या 1) इस्तेमाल करता है, दूसरा 1, और इसी तरह आगे। यह हर दांव को अलग बनाता है और पूरे क्रम को दोबारा बनाने लायक भी रखता है।
क्या जांचें:
- यह हर दांव पर ठीक एक बढ़ता है।
- कोई अंतराल नहीं है। अंतराल का मतलब हो सकता है कि कोई दांव गिना गया पर दिखाया नहीं गया।
- कोई दोहराव नहीं है। दोहराव का मतलब होगा कि दो दांवों ने एक जैसे इनपुट इस्तेमाल किए।
- सीड रोटेट करने पर यह रीसेट होता है।
एक ही सीड पेयर के लिए nonces आमतौर पर गेम्स के बीच साझा होते हैं। nonce 41 पर dice का दांव और nonce 42 पर limbo का दांव एक ही सीड क्रम से आते हैं।
Round और cursor
एक HMAC-SHA256 आउटपुट में 32 bytes होते हैं। हर float के लिए 4 bytes के हिसाब से यह 8 floats हैं। Dice और limbo को एक चाहिए। 16 पंक्तियों वाले Plinko को 16 चाहिए। Mines को हर shuffle चरण के लिए एक float चाहिए। कार्ड गेम्स को कई चाहिए हो सकते हैं।
जब किसी गेम को 8 से ज़्यादा floats चाहिए, तो जनरेटर round नंबर एक बढ़ाकर एक और HMAC निकालता है, और bytes पढ़ता रहता है। इस धारा में पोज़िशन को अक्सर cursor कहा जाता है। कोड में एक आम जनरेटर round = floor(cursor / 32) निकालता है, उस HMAC के अंदर cursor - round x 32 वाला byte इस्तेमाल करता है, और आगे बढ़ता है।
पूरे दांव के लिए nonce वही रहता है; सिर्फ round बदलता है।
सीड रोटेशन
रोटेशन मौजूदा सीड पेयर को खत्म करता है। casino:
- पुराना सर्वर सीड सामने लाता है।
- नया सर्वर सीड बनाता है और उसका हैश दिखाता है।
- nonce रीसेट करता है।
फिर आप पुराने पेयर के सभी दांव वेरिफाई कर सकते हैं। कई casinos आपके क्लाइंट सीड बदलने पर अपने आप रोटेट करते हैं। कुछ आपको स्विच करने से पहले अगले सर्वर सीड का हैश भी देखने देते हैं, जिससे आप पहले से commitment दर्ज कर सकते हैं।
सिर्फ रोटेशन के बाद खुलासा क्यों
जिस सीड का अभी भी इस्तेमाल होगा उसे सामने लाने से भविष्य के नतीजों का अनुमान लगाया जा सकता। इसलिए सीड हमेशा उनके आखिरी इस्तेमाल के बाद सामने लाए जाते हैं। इसीलिए आप अभी लगाया गया दांव तब तक वेरिफाई नहीं कर सकते जब तक रोटेट न करें।
सब को जोड़कर
एक अच्छा provably fair session ऐसा दिखता है:
- हैश किया गया सर्वर सीड नोट करें।
- अपना क्लाइंट सीड सेट करें।
- खेलें।
- रोटेट करें।
- सामने आए सीड के SHA-256 को अपने नोट से मिलाएं।
- सीड, nonces और rounds से नतीजों का एक सैंपल दोबारा निकालें, जैसे हमारे वेरिफायर से।
implementations अलग होते हैं
casinos मैसेज फॉर्मेट, कौन सी वैल्यू HMAC key है, nonce की शुरुआती वैल्यू, byte से float में बदलने और गेम फॉर्मूलों में अलग होते हैं। कुछ multiplayer गेम हर खिलाड़ी के सीड के बजाय एक पब्लिक hash chain और भविष्य के ब्लॉकचेन block hash जैसी बाहरी वैल्यू इस्तेमाल करते हैं। सिद्धांत वही रहते हैं; बारीकियां casino के दस्तावेज़ों से आनी चाहिए।
सीड के बारे में आम सवाल
क्या casino मेरा क्लाइंट सीड जानता है?
हां, एक बार सेट करने के बाद, क्योंकि casino को नतीजे निकालने के लिए इसकी ज़रूरत होती है। यह ठीक है। मायने यह रखता है कि आपका क्लाइंट सीड जानने से पहले casino सर्वर सीड के लिए प्रतिबद्ध हो चुका था।
क्या मुझे अपना क्लाइंट सीड अक्सर बदलना चाहिए?
इसे बदलने से आपकी संभावनाएं बेहतर नहीं होतीं; हर सीड पेयर एक ही वितरण वाले नतीजे देता है। इसे बदलने से commitment ताज़ा होता है और आप पिछला बैच वेरिफाई कर सकते हैं। एक समझदार तरीका है हर session की शुरुआत में अपना क्लाइंट सीड सेट करना।
क्या मैं अगले सर्वर सीड का हैश पहले से देख सकता हूं?
कई casinos मौजूदा सर्वर सीड के साथ अगले सर्वर सीड का हैश दिखाते हैं। इसे पहले से दर्ज करने से आपके पास एक ऐसा commitment होता है जिसे आपने सीड के इस्तेमाल में आने से पहले नोट किया।
क्या लंबा क्लाइंट सीड ज़्यादा सुरक्षित है?
क्लाइंट सीड को गुप्त या लंबा होने की ज़रूरत नहीं है; इसे ऐसा होना चाहिए जिसका casino प्रतिबद्धता देते समय अनुमान न लगा सके। सर्वर सीड हैश देखने के बाद आपकी खुद चुनी कोई भी वैल्यू यह काम करती है।
अगर casino किसी सर्वर सीड को दोबारा इस्तेमाल करे तो?
किसी सर्वर सीड को सामने आने के बाद कभी दोबारा इस्तेमाल नहीं किया जाना चाहिए। अगर आपको वही सीड या हैश फिर दिखे, तो उसे दर्ज करें और रिपोर्ट करें।