2012-08-06 29 views
5

तो मैं अभी मोबाइल ऐप पर काम कर रहा हूं जो डीजेगो के साथ निर्मित एक आरईएसटी एपीआई के लिए अनुरोध कर रहा है।पहली बार जब मैं इसे उत्पन्न करता हूं, तो मैं अपने मोबाइल ऐप की गुप्त कुंजी को सर्वर के साथ कैसे साझा करूं?

एपीआई को सुरक्षित करने के लिए मैं एक निजी/सार्वजनिक कुंजी जोड़ी प्रमाणीकरण प्रणाली का उपयोग करने की योजना बना रहा हूं। फेसबुक

  • का उपयोग कर एक बार जब उपयोगकर्ता संकेत एप्लिकेशन उत्पन्न करता है एक निजी कुंजी
  • निजी कुंजी के बीच साझा किया जाता है में

    1. उपयोगकर्ता के लॉग:

      कार्यप्रवाह मैं बाहर सोचा है कुछ इस तरह चला जाता है सर्वर और ऐप ताकि सर्वर किसी विशिष्ट उपयोगकर्ता को उस निजी कुंजी को मैप करना जानता हो।

    2. हर बार मोबाइल ऐप अनुरोध करता है कि ऐप अनुरोध पैरामीटर और निजी कुंजी का उपयोग करके एचएमएसी/हस्ताक्षर उत्पन्न करता है। एचएमएसी के अलावा ऐप भी उपयोगकर्ता के उपयोगकर्ता_आईडी भेजता है जिसने इसे भेजा (यह सार्वजनिक कुंजी के रूप में कार्य करेगा)।
    3. जब सर्वर अनुरोध प्राप्त करता है तो यह अपना स्वयं का एचएमएसी उत्पन्न करता है। यह user_id लेता है और एक टेबल में निजी कुंजी देखता है। निजी कुंजी का उपयोग करके यह अनुरोध पैरामीटर के साथ एचएमएसी को दोबारा शुरू करता है और इसे एचएमएसी से तुलना करता है जिसे मोबाइल ऐप भेजा जाता है। यदि सर्वर और मोबाइल एचएमएसी से मेल खाते हैं तो यह अनुरोध करता है।

    अब मेरी समस्या चरण 3 में निहित है जहां निजी कुंजी को किसी भी तरह मोबाइल ऐप और सर्वर के बीच साझा किया जाना है। मैं सुरक्षित रूप से निजी कुंजी कैसे भेज सकता हूं?

  • उत्तर

    4

    मैं पूछकर शुरू करूंगा कि आपके ऐप के सर्वर हिस्से को निजी कुंजी क्यों जाननी चाहिए। यदि यह केवल उपयोगकर्ता को प्रमाणीकृत करना चाहता है, तो उसे केवल सार्वजनिक कुंजी और उपयोगकर्ता आईडी की आवश्यकता होती है, और उपयोगकर्ता आईडी स्वयं सार्वजनिक कुंजी नहीं हो सकती है (आपको यह जानने के लिए एक तरीका चाहिए कि किस सार्वजनिक कुंजी का उपयोग करना है)।

    उदाहरण के लिए, कुंजी साझा करने की प्रक्रिया, अपने कदम तीन, कुछ ऐसा दिखाई दे सकता:

    1. एप्लिकेशन एक सार्वजनिक-निजी कुंजी युग्म उत्पन्न करता है।
    2. ऐप सर्वर पर सार्वजनिक कुंजी भेजता है, इस पर ध्यान नहीं देता कि कौन इसे रोक सकता है।
    3. सर्वर उस सार्वजनिक कुंजी को संग्रहीत करता है, जो इसे प्रदान किए गए आईडी के साथ जोड़ता है।

    शायद फेसबुक में एकीकरण वह हिस्सा है जो इसे असंभव बनाता है। मुझे समझ में नहीं आता कि फेसबुक इस पूरी प्रक्रिया में कैसे आता है।

    एक बात है कि एक प्रमुख थोड़ा और अधिक सुरक्षित के हस्तांतरण कर सकते हैं यह हस्तांतरण करने के लिए कई चैनलों का प्रयोग है।

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

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