पहले से ही कई विषयों में, असुरक्षित कनेक्शन के साथ एक सुरक्षित प्रमाणीकरण तंत्र के निर्माण की समस्याओं पर विचार किया गया था। नीचे, असममित क्रिप्टोग्राफी का उपयोग करने वाली एक योजना चर्चा के लिए प्रस्तावित है। यह दृष्टिकोण सर्वर पर प्रमाणीकरण की अनुमति देगा, कभी भी पंजीकरण के दौरान या प्रमाणीकरण के दौरान, सर्वर को पासवर्ड पारित नहीं किया जाएगा। हमेशा की तरह, एक डेमो और स्रोत कोड होगा। किसके लिए यह विषय दिलचस्प है, मैं बिल्ली के नीचे पूछता हूं।
इससे पहले, हमने पहले से ही कई विकल्पों पर विचार किया था:
- पासवर्ड एन्क्रिप्शन के साथ समाधान सबसे सरल है और इसका एक बड़ा फायदा है - इस तरह की योजना की शुरूआत के लिए उपयोगकर्ताओं के पुन: पंजीकरण की आवश्यकता नहीं है। इस समाधान की सुरक्षा बराबर नहीं है, लेकिन यह अभी भी स्पष्ट पाठ में प्रेषित पासवर्ड से बेहतर है।
- SRP-6 , जिस पर भी चर्चा की गई थी, एक सुरक्षित प्रोटोकॉल है। कमियों में से, शायद, सर्वर के साथ केवल एक लंबी बातचीत और कार्यान्वयन की जटिलता।
- यहां वर्णित रुटोकन पर आधारित प्रमाणीकरण एक बहुत ही सुरक्षित समाधान है, लेकिन इसकी तुलना विशुद्ध रूप से सॉफ्टवेयर समाधान से करना गलत है। और यह ध्यान दिया जाना चाहिए कि सभी उपयोगकर्ता एक अतिरिक्त डिवाइस के लिए भुगतान करने के लिए तैयार नहीं हैं।
प्रस्तावित प्रमाणीकरण तंत्र रूटोकॉन-आधारित समाधान के समान प्रोटोकॉल का उपयोग करता है। मुख्य अंतर यह है कि सभी क्रिप्टोग्राफिक संचालन प्रोग्रामेटिक रूप से किए जाते हैं, और पासवर्ड के आधार पर निजी कुंजी उत्पन्न होती है। दोनों समाधान
अण्डाकार वक्र क्रिप्टोग्राफी (ईसीसी) का उपयोग करते हैं। ECC क्रिप्टोग्राफिक रूप से RSA से अधिक मजबूत है, जो छोटी कुंजी के उपयोग की अनुमति देता है, और परिणामस्वरूप, प्रदर्शन आवश्यकताओं को कम करता है। और इसलिए:
रजिस्टर।- क्लाइंट लॉगिन और पासवर्ड का चयन करता है;
- उनके आधार पर, PrivateKey = SHA256 (लॉगिन + पासवर्ड) बनता है ;
- PrivateKey के आधार पर, PublicKey का गठन किया जाता है;
- लॉगिन और PublicKey सर्वर पर भेजे जाते हैं और डेटाबेस में संग्रहीत होते हैं।
प्रमाणीकरण।- क्लाइंट लॉगिन और पासवर्ड दर्ज करता है;
- उनके आधार पर, PrivateKey = SHA256 (लॉगिन + पासवर्ड) बनता है ;
- क्लाइंट सर्वर ( RNDserver ) से एक यादृच्छिक संख्या प्राप्त करता है और अपनी यादृच्छिक संख्या ( RNDclient ) उत्पन्न करता है;
- PrivateKey का उपयोग करते हुए , क्लाइंट एक साइन डिजिटल हस्ताक्षर (SHA256 (RNDserver + RNDclient)) उत्पन्न करता है और सर्वर को लॉगिन, RNDclient और डिजिटल हस्ताक्षर भेजता है;
- सर्वर डेटाबेस में संग्रहीत PublicKey क्लाइंट का उपयोग करके डिजिटल हस्ताक्षर की शुद्धता की जांच करता है।
संलग्न एक
डेमो है । उदाहरण तैयार करने में, स्टैनफोर्ड छात्रों द्वारा लिखित एक
पुस्तकालय का उपयोग किया गया था। गुड मैन
अलेक्जेंडर मार्टीनेंको के लिए विशेष धन्यवाद, जो दुर्भाग्य से एक महत्वपूर्ण जोड़ी बनाने और संलग्न उदाहरण में GOST R 34.10-2001 एल्गोरिथ्म के अनुसार एक इलेक्ट्रॉनिक डिजिटल हस्ताक्षर बनाने के सॉफ्टवेयर कार्यान्वयन के लिए हैबर को आमंत्रित नहीं करता है।
बेशक, सभी उदाहरण केवल उदाहरण हैं। उनके "मुकाबला" उपयोग के लिए, आपको पहले ध्यान से सोचना चाहिए और विभिन्न "छोटी चीजों" पर अधिक ध्यान देना चाहिए। हालांकि, विभिन्न सुरक्षित प्रमाणीकरण प्रोटोकॉल का बहुत अस्तित्व सवाल उठाता है। पासवर्ड अभी भी स्पष्ट पाठ में क्यों प्रेषित हैं? पासवर्ड स्पष्ट या बिना नमक के हैश के रूप में डेटाबेस में क्यों संग्रहीत किया जाता है? अपने खातों की सुरक्षा के बारे में प्रमुख ऑनलाइन सेवाओं के कुछ प्रतिनिधियों के साथ संवाद करते समय, मैंने अक्सर सवाल सुना है - हमारे यहाँ लाभ कहाँ है? तो, क्या आपके उपयोगकर्ताओं की सुरक्षा के लिए कोई लाभ है?