2008-10-20 6 views
5

मैं क्लाइंट-सर्वर एप्लिकेशन में प्रमाणीकरण का निर्माण कर रहा हूं, और मुझे मिली प्रतिक्रियाओं में से कुछ यह है कि मुझे सर्वर पर हैश गणना छोड़नी चाहिए (इसे शुरू में क्लाइंट को हैश प्राप्त करने के लिए लागू किया गया था, एक हैश की गणना करें ग्राहक का दर्ज पासवर्ड, और उनकी तुलना करें)। ऐसा लगता है, लेकिन मुझे एक समस्या के साथ छोड़ दिया गया है - मैं उन उपयोगकर्ताओं को प्रमाणित कैसे कर सकता हूं जो ऑफ़लाइन हैं?उपयोगकर्ता प्रमाणीकरण ऑफ़लाइन लेने के लिए सबसे अच्छा मॉडल क्या है?

उदाहरण के लिए, यदि मैंने इंटरनेट एक्सेस के बिना किसी मोबाइल डिवाइस पर तैनात किया है, तो प्रमाणीकरण को संभालने का सबसे सुरक्षित तरीका क्या है?

तरह से मैं इसे देख, मैं करने के लिए है या तो क्लाइंट हैश + किसी भी नमक जानकारी प्राप्त करने के लिए, या के लिए हैश + नमक प्राप्त करने के लिए एक अलग पिन/पासवर्ड का उपयोग करें और ग्राहक की अनुमति देने के लिए अनुमति देगा कि पासवर्ड।

मैं बाद वाले पक्ष का पक्ष लेगा क्योंकि यह हमले वेक्टर को सीमित करता है - यदि किसी मोबाइल डिवाइस से समझौता किया गया है, तो पूरे सिस्टम की सुरक्षा (जैसे सभी नेटवर्क-प्रमाणीकृत टुकड़े) बरकरार रहती हैं।

मेरे सर्वोत्तम विकल्प और विचार क्या हैं?

+0

क्या आप स्थायी ऑफलाइन पहुंच के बारे में बात कर रहे हैं, या किसी ऐसे व्यक्ति को फिर से प्रमाणित कर रहे हैं जो अब ऑनलाइन है, अब वे नहीं हैं? – Whisk

+0

अंतिम लक्ष्य क्लाइंट के बाद सर्वर से कनेक्ट होना और इसके डेटा/अपडेट सिंक करना है। – pc1oad1etter

+0

भ्रम के लिए खेद है। मेरा मतलब सभी उपयोगकर्ताओं द्वारा साझा किया गया "मास्टर" पासवर्ड नहीं था, मेरा मतलब एक पासवर्ड था जो उपयोगकर्ता के मोबाइल डेटाबेस और उपयोगकर्ता की सेवा प्रमाणीकरण प्रमाण-पत्रों की सुरक्षा करता है। यह उपयोगकर्ताओं को ऑफ़लाइन और ऑनलाइन प्रभावी ढंग से प्रमाणित करता है। – erickson

उत्तर

1

यदि आप अपने आवेदन को अधिक विस्तार से समझाते हैं, तो मुझे लगता है कि मैं यहां आधार से बाहर हूं, लेकिन अभी के लिए मैं आपके उपयोग के मामले और खतरे के मॉडल के बारे में कुछ धारणाएं करूंगा।

मेरी समझ यह है कि आपके पास कुछ संवेदनशील जानकारी है जिसे आप मोबाइल डिवाइस के बीच अंतःक्रियात्मक कनेक्टिविटी और कुछ दूरस्थ सेवा के साथ सिंक्रनाइज़ करना चाहते हैं। यह सेवा केवल प्रमाणित उपयोगकर्ताओं के लिए सुलभ है, और उपयोगकर्ताओं को जानकारी की प्रतिलिपि तक पहुंचने के लिए मोबाइल डिवाइस पर प्रमाणित करना होगा, भले ही यह ऑफ़लाइन हो।

यदि आप मजबूत सुरक्षा चाहते हैं, तो पासवर्ड-आधारित एन्क्रिप्शन का उपयोग करके मोबाइल डिवाइस की प्रति एन्क्रिप्ट करें।

आप सेवा के प्रमाणीकरण के लिए उपयोग किए गए एक ही पासवर्ड का उपयोग कर सकते हैं, लेकिन सामान्य रूप से, मैं अलग-अलग उद्देश्यों के लिए एक ही कुंजी का पुन: उपयोग करने से बचूंगा। एक बेहतर तरीका मोबाइल डिवाइस के लिए एक मास्टर एन्क्रिप्शन पासवर्ड होना होगा, जो मोबाइल डेटाबेस के साथ-साथ "पासवर्ड" को सिंक्रनाइज़ेशन सेवा में उपयोगकर्ता को प्रमाणित करने के लिए उपयोग किया जाता है। ध्यान दें कि सेवा प्रमाणीकरण पासवर्ड वास्तव में SSL क्लाइंट-प्रमाणपत्र प्रमाणीकरण, या एक वर्ण-आधारित पासवर्ड के लिए एक निजी कुंजी हो सकता है।

आपको केवल एक पासवर्ड रखने का जोखिम मूल्यांकन करना होगा, लेकिन कई मामलों में, मुझे लगता है कि यह सुविधा उपयोगकर्ता को प्रदान करती है, जो कि एक मजबूत मास्टर पासवर्ड द्वारा प्रदान की गई सुरक्षा के साथ संयुक्त है, लेकिन दो कमजोर- आसानी से याद किए गए पासवर्ड एक अच्छी शेष राशि है।

ध्यान दें कि यह दृष्टिकोण उस उपयोगकर्ता को अनुमति देगा जिसकी सेवा पहुंच को स्थानीय प्रतिलिपि तक पहुंचने के लिए निरस्त कर दिया गया है, लेकिन बिना किसी नए अपडेट के। आप मोबाइल सॉफ़्टवेयर द्वारा लागू होने वाली समय सीमा की कुछ धारणा शामिल कर सकते हैं, लेकिन एक निर्धारित हमलावर इसे बाधित कर सकता है।

यदि आपको खिलौना सुरक्षा की आवश्यकता है, तो मोबाइल डिवाइस पर सही हैश को संग्रहीत करने का आपका सुझाव पर्याप्त है, और इससे कोई फर्क नहीं पड़ता कि आपके पास असली पासवर्ड है या वैकल्पिक है, क्योंकि यदि आप सही हैश का उपयोग करते हैं, पासवर्ड टकराव खोजने के लिए उन्हें कुछ अरब साल लगाना चाहिए जो उन्हें दूरस्थ सेवा तक पहुंचने की अनुमति देगा।

हालांकि, मानते हैं कि एक हमलावर पासवर्ड हैश देख सकता है, जो उन्हें सिंक किए गए डेटा को देखने से रोक रहा है? उन्हें पासवर्ड पुनर्प्राप्त करने की आवश्यकता क्यों होगी? मोबाइल डेटाबेस एन्क्रिप्ट करना इसे रोक देगा।

+0

पीएस, पासवर्ड-आधारित एन्क्रिप्शन के लिए, आप "पीबीकेडीएफ 2" के बारे में मेरा उत्तर खोज सकते हैं।यदि आप रुचि रखते हैं तो अधिक प्रश्न पूछने के लिए स्वतंत्र महसूस करें। – erickson

+0

मैं * गोपनीयता के बारे में चिंतित नहीं हूं क्योंकि मैं प्रमाणीकरण हूं - यह जानकर कि मोबाइल डिवाइस में डेटा डालने वाला व्यक्ति प्रमाणित है। यह जॉनी प्रमाणीकृत या जूली प्रमाणीकृत हो सकता है लेकिन उर्सुला अनधिकृत नहीं। तो मैं सिर्फ एक मास्टर पासवर्ड नहीं करना पसंद करूंगा। – pc1oad1etter

1

मुझे लगता है कि यह आपके समस्या डोमेन पर निर्भर हो सकता है, लेकिन एक सुरक्षित आवेदन के लिए, ट्रस्ट की कमी के कारण प्रमाणीकरण क्लाइंट पक्ष नहीं किया जा सकता है। सरल मामले में आपने कहा है कि हैश गणना और तुलना क्लाइंट साइड कहां की जाती है, जिसे किसी को पहुंच प्राप्त करने के लिए करना होगा, उसे डीबगर अप करना होगा, कोड के माध्यम से कदम उठाएं और तुलना करें कि तुलना कहां की जाती है, और एक मूल्य को प्रतिस्थापित करें वापसी से पहले ढेर (उदाहरण के लिए)। बधाई हो, आपको हैक किया गया है।

मैं जानना चाहता हूं कि "ऑफ़लाइन" मोड में आपका विशिष्ट ऐप कौन सा ऑपरेशन सक्षम करना चाहता है, और डिवाइस की पुन: कनेक्ट होने के बाद आपकी योजना क्या होगी, इससे पहले कि मैं आंशिक सक्षम कर सकूं कार्यक्षमता ऑफ़लाइन।

+0

तो आप पुष्टि करते हैं कि यह क्लाइंट पर पूरी तरह से सुरक्षित नहीं हो सकता है - जोखिम को कम करने के लिए मैं क्या कर सकता हूं? आपकी आखिरी टिप्पणी शायद इस पर हो सकती है - सिंक-इन डेटा से पहले क्या करना है या जांचना है। – pc1oad1etter

+0

बहुत खुला समाप्त = x मुझे नहीं पता कि आप किस प्रकार का एस/डब्ल्यू बना रहे हैं, लेकिन स्रोत नियंत्रण मॉडल की तरह कुछ मानें, जहां ऑफलाइन परिवर्तन किए जा सकते हैं, लेकिन फिर राज्य की तुलना में सत्यापित/वापस/सत्यापित किया जा सकता है सर्वर प्रमाणित सत्र के दौरान परिवर्तन किए जाने से पहले सर्वर किया जाता है। – Niniki

0

मैंने कुछ मिनट पहले एक समान प्रश्न पोस्ट किया था, और कुछ और सोचने के बाद, मुझे सार्वजनिक/निजी कुंजी का उपयोग करके एक स्वीकार्य दृष्टिकोण मिल गया होगा।

  1. उपयोगकर्ता ऑफ़लाइन हो जाता है, वह एप्लिकेशन की पहुंच को सुरक्षित करने के लिए ऑफ़लाइन (वैकल्पिक एन्क्रिप्शन के साथ चोरी के खिलाफ की रक्षा करने के लिए), जबकि एक पासवर्ड का उपयोग करने के लिए चुन सकते हैं: ये कदम उठाएँ मैं अपने अनुप्रयोग के लिए बताए गए हैं।

  2. ऑनलाइन जाने पर, ग्राहक वर्तमान उपयोगकर्ता के लिए एक आईडी भेज देगा (यह एक हैश या ऐसा कुछ हो सकता है जो उस उपयोगकर्ता को विशिष्ट रूप से पहचानता हो)।

  3. सर्वर उस उपयोगकर्ता की सार्वजनिक कुंजी के साथ एन्क्रिप्टेड प्राधिकरण टोकन भेजता है।

  4. ग्राहक अपनी निजी कुंजी के साथ डिक्रिप्ट किए गए टोकन को वापस भेजता है।

  5. सर्वर अंततः आगे संचार जारी रखने के लिए सत्र टोकन भेजता है (यह अंतिम चरण अनावश्यक हो सकता है, शायद पहले से स्थापित ऑथ टोकन का उपयोग किया जा सकता है?)।

मैं एन्क्रिप्शन या सुरक्षा पर कोई विशेषज्ञ हूँ, लेकिन यह मेरे लिए प्रतीत होता है इस दृष्टिकोण, बहुत सुरक्षित है एक ही रास्ता मैं के बारे में सोच सकते हैं सर्वर को हैक करने के लिए हमलावर के लिए किया जाएगा के रूप में इसके पास वाक्यांश के साथ उपयोगकर्ता की निजी कुंजी।

संवेदनशील डेटा के मामले में, यह एन्क्रिप्शन द्वारा संरक्षित किया जा सकता है जैसा कि मैंने बताया है, उपयोगकर्ता द्वारा प्रमाणीकृत करने के लिए या तो पासवर्ड को एन्क्रिप्ट करने के साथ, या डिवाइस को खोने के मामले में डेटा एन्क्रिप्टेड के साथ, यह समझौता नहीं किया जाता है ।

+0

मुझे लगता है कि कोई भी कनेक्शन टॉगलिंग करने के बावजूद चरण 2-5 लागू हो सकता है। प्रश्न # 1 के बारे में अधिक है - आप सुझाव देते हैं कि उपयोगकर्ता एक अलग पासवर्ड सेट करता है, जो एक विकल्प है जिसे मैं विचार कर रहा हूं। चरण 2-5 आश्वासन जोड़ें कि कम से कम व्यक्ति को सिंक्रनाइज़ करने वाला व्यक्ति आईडीड किया गया है। – pc1oad1etter

+0

हाँ, मेरे मामले में मैं ऑनलाइन हस्ताक्षर (ओपनआईडी) के लिए एक अलग विधि का उपयोग करता हूं, इसलिए मुझे सिंक और उपयोगकर्ता के डेटा की रक्षा करने के लिए यह दृष्टिकोण लेना पड़ा। – Ivan

संबंधित मुद्दे

 संबंधित मुद्दे