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