2013-07-30 18 views
5

में स्ट्रिंग को सुरक्षित करना मैं एक्समरिन द्वारा एंड्रॉइड के लिए मोनो का उपयोग करके एंड्रॉइड ऐप विकसित कर रहा हूं। मैं वर्तमान में Google Play API का उपयोग करके इन-एप-खरीद क्षमता जोड़ने पर काम कर रहा हूं। ऐसा करने के लिए, मुझे अपने ऐप के भीतर से Google को सार्वजनिक लाइसेंस कुंजी भेजने की आवश्यकता है। इस मुद्दे के बारे में, Google अनुशंसा निम्नलिखित:एपीके

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

मैंने कभी भी एन्क्रिप्शन, हैकिंग/क्रैकिंग या सॉफ़्टवेयर सुरक्षा के किसी अन्य पहलू से निपटाया नहीं है, इसलिए मुझे यकीन नहीं है कि Google की सलाह को कैसे कार्यान्वित किया जाए। मेरा सवाल यह है कि कैसे एक पर्याप्त एक सुरक्षा विशेषज्ञ होने के बिना एंड्रॉइड के लिए मोनो के साथ किए गए एंड्रॉइड एपीके में एक स्ट्रिंग सुरक्षित करता है?

उत्तर

5

बहुत बोल्ड नहीं लग रहा है, लेकिन मेरा मानना ​​है कि आप उनके सुझाव को सुरक्षित रूप से अनदेखा कर सकते हैं। वे जो सुझाव दे रहे हैं उसके सुरक्षा लाभ सबसे कम हैं।

एक अधिक विस्तृत चर्चा के लिए पढ़ने के लिए इस: How to protect Google Play public key when doing InApp Billing

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

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

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

संपादित करें:

आप एक उद्योग मानक तरीका है अपने कोड की रक्षा के लिए के लिए देख रहे हैं, एक वाणिज्यिक अस्पष्टकर्ता का उपयोग करें। इन उपकरणों को इस उद्देश्य के लिए डिजाइन किया गया है। कुछ उदाहरण Mono for Android, code obfuscation हैं। पूरी तरह से फीचर्ड वाणिज्यिक संस्करणों का उपयोग करना सुनिश्चित करें जिनमें स्ट्रिंग एन्क्रिप्शन शामिल है।

+0

उत्तर के लिए धन्यवाद। लेकिन मैं अभी भी इस मुद्दे को हल करने के लिए कुछ अच्छी उद्योग मानक विधि जानना चाहता हूं, क्योंकि Google Play कुंजी मेरे ऐप में एकमात्र महत्वपूर्ण स्ट्रिंग नहीं है (उदाहरण के लिए फेसबुक ऐप कुंजी भी, और शायद भविष्य में अन्य)। – Ramsay

+0

एक वाणिज्यिक obfuscation उपकरण का उपयोग करें। ये उपकरण आपके कोड पर जाते हैं और इसे अपनाने के लिए कठिन बनाते हैं। वाणिज्यिक लोगों में आमतौर पर एक स्वचालित स्ट्रिंग एन्क्रिप्शन सुविधा शामिल होती है जो सुनिश्चित करता है कि आपके सभी हार्डकोडेड स्ट्रिंग्स (जैसे कुंजी) को आपके ऐप में कभी भी सादे टेक्स्ट नहीं रखा जाता है और रनटाइम में डीकोड किया जाता है। सी #/एंड्रॉइड के लिए बहुत सारे obfuscators उपलब्ध हैं।वे आपकी निर्माण प्रक्रिया में एकीकृत करने के लिए बहुत आसान हैं और वे आपके कोड की सुरक्षा के क्षेत्र में आपके लिए भारी भारोत्तोलन करते हैं। – talkol

+0

संभावित हैकर्स को मौत के लिए परेशान करने के लिए वाणिज्यिक obfuscators द्वारा उपयोग की जाने वाली कुछ तकनीकों की एक सूची यहां दी गई है: http://www.ssware.com/cryptoobfuscator/features.htm। हमेशा ध्यान रखें कि एक निर्धारित हैकर अभी भी इन सभी को दूर करने में सक्षम होगा .. लेकिन यह उसके लिए बहुत कम मजेदार होगा;) – talkol

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