सबसे पहले, अपने क्लाइंट एप्लिकेशन और सर्वर के बीच सुरक्षित संचार को लागू करने के लिए, अवधारणात्मक रूप से बोलते हुए, आपको केवल सर्वर की सार्वजनिक कुंजी की आवश्यकता होती है। इससे आप सर्वर के साथ एक-तरफा ट्रस्ट रिलेशनशिप जहाज स्थापित कर सकते हैं और एक सुरक्षित सत्र स्थापित कर सकते हैं, जिसमें सर्वर की पहचान की गारंटी है।
जबकि निश्चित रूप से उपरोक्त विधि दो-तरफा ट्रस्ट प्रदान नहीं करती है (क्लाइंट को सर्वर पर पहचाना नहीं जा सकता है), अधिकांश अनुप्रयोगों में संचार चैनल स्थापित करते समय, ट्रस्ट का स्तर वास्तव में आवश्यक नहीं है।
यदि आपकी आवश्यकताओं को सार्वजनिक/निजी कुंजी का उपयोग कर सर्वर को क्लाइंट प्रमाणीकरण प्रदान करना है तो चीजें अधिक जटिल हो जाती हैं क्योंकि यदि आप एपीके में कुंजी डालते हैं, इससे कोई फर्क नहीं पड़ता कि आप इसे कितना खराब करते हैं (इसे मूल पुस्तकालय में एम्बेड करना) यह केवल एक समर्पित घृणास्पद उपयोगकर्ता को धीमा कर देगा।
क्लाइंट के साथ निजी कुंजी को स्टोर करने का एकमात्र तरीका इसे एन्क्रिप्ट करना है। लेकिन फिर आपके पास डिक्रिप्ट कुंजी को स्टोर करने के लिए एक समान समस्या है। क्लाइंट एप्लिकेशन के उपयोगकर्ता के लिए सार्वजनिक/निजी कुंजी जोड़ी उत्पन्न करना सबसे आसान समाधान है और उपयोगकर्ता को प्रत्येक बार निजी कुंजी को डिक्रिप्ट करने के लिए एक सममित एन्क्रिप्शन/डिक्रिप्शन कुंजी (जिसे उपयोगकर्ता को हमेशा टाइप करना होगा) प्रदान करने के लिए कहता है उपयोगकर्ता आवेदन का उपयोग कर रहा है।
विकल्प किसी ऐसे स्मार्ट कार्ड के समान समर्पित क्रिप्टोग्राफिक हार्डवेयर डिवाइस का उपयोग करना होगा जो निजी कुंजी को सुरक्षित रूप से स्टोर करेगा लेकिन आपको अभी भी डिवाइस से कुंजी पढ़ने के लिए अपने एप्लिकेशन को अधिकृत करने की समस्या है (उल्लेख नहीं है कहा डिवाइस के साथ इंटरफेसिंग की जटिलता)।
अब, आपको खुद से पूछने के लिए सवाल यह है: "आप निजी कुंजी पढ़ने से रोकने की कोशिश कर रहे हैं?" (अन्य प्रश्न का उत्तर देने के बाद: "क्या आपको वास्तव में क्लाइंट के लिए सार्वजनिक/निजी कुंजी जोड़ी चाहिए")।
स्रोत
2012-02-07 15:46:07
आपके खतरे के मॉडल में हमलावर कौन है? आपके डिवाइस का वैध उपयोगकर्ता? – CodesInChaos
हमलावर उपयोगकर्ता नहीं होगा, समस्या यह है कि ऐप भुगतान सेवाओं तक पहुंच जाएगा और हम एक सुरक्षित ऐप चाहते हैं। एक साधारण एपीके में कोई भी डिकंपाइल कर सकता है, चाबियाँ प्राप्त कर सकता है और भुगतान प्रणाली तक पहुंचने के लिए उनका उपयोग कर सकता है – rdiaz82
आपको अपने एप्लिकेशन को इस तरह से डिज़ाइन करना चाहिए कि जिस उपयोगकर्ता के पास एप्लिकेशन का पूर्ण स्रोत कोड है और सभी एम्बेडेड कुंजियां कुछ भी नहीं कर सकती हैं बुराई। – CodesInChaos