2011-10-31 6 views
7

मेरे पास मेरे एंड्रॉइड ऐप्स में से एक के भीतर एक मैक्रिप्ट एन्क्रिप्शन और डिक्रिप्शन दिनचर्या है। यह अनिवार्य रूप से एक स्ट्रिंग को डिक्रिप्ट कर रहा है जो कि लाया जाता है। रिमोट कॉल स्वाभाविक रूप से "गुप्त कुंजी" को कोड के भीतर संग्रहीत किया जाता है, लेकिन apktool वाला कोई भी व्यक्ति स्पष्ट रूप से कोड देख सकता है और मेरी गुप्त कुंजी देख सकता है।गुप्त कुंजी को सुरक्षित रखना - एंड्रॉइड ऐप के भीतर .. किसी भी विचार

क्या सभी जावा कोड एन्क्रिप्ट करने के लिए वैसे भी है ताकि भले ही इसे संकलित/समझने योग्य न हो?

मैंने प्रोगार्ड के बारे में सुना है, लेकिन इसके बारे में पढ़ने से, इस उद्देश्य के लिए पर्याप्त प्रतीत नहीं होता है।

+2

सवाल यह है कि स्ट्रिंग एन्क्रिप्टेड क्यों है? यदि यह परिवहन और सर्वर संग्रहण सुरक्षा के लिए है तो सार्वजनिक कुंजी एन्क्रिप्शन का उपयोग करें। यदि आप उपयोगकर्ताओं से इसे "छिपाना" चाहते हैं तो आप भाग्य से बाहर हैं क्योंकि आपका एप्लिकेशन "देख" सकता है ताकि उपयोगकर्ता भी हो सकें। –

+0

स्ट्रिंग को स्ट्रीम की गई फ़ाइल के स्थान को छिपाने के लिए एन्क्रिप्ट किया गया है - इरादा को रोकना है और कम से कम आकस्मिक उपयोगकर्ताओं/स्क्रिप्ट किड्स के लिए ऐप के स्वतंत्र रूप से एमपी 3 डाउनलोड करने से अधिक कठिन बनाते हैं। मुझे पता है कि आपकी कहानियां क्या है और पूरी तरह से समझती है कि ऐप कुछ भी देख सकता है - कोई भी निर्धारित किया गया है कि डीबग, डिक्रिप्ट या डिकंपाइल हो सकता है - मैं इसे और अधिक कठिन बनाने की कोशिश कर रहा हूं। निर्धारित कोई भी अभी भी सफल और सफल होगा। कोई बड़ी बात नहीं .. बस मूल रूप से स्क्रिप्ट kiddies बाहर रखें .. – SpacialWise

+2

क्यों क्लाइंट कुंजी जोड़ी उत्पन्न नहीं करता है और अनुरोध के साथ सर्वर पर अपनी सार्वजनिक कुंजी भेजता है? –

उत्तर

4

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

कोड में छिपाने वाले अक्षर केवल कुंजी प्राप्त करने की प्रक्रिया में हमलावर को देरी करते हैं, लेकिन यह किसी भी तरह से इसे रोकता नहीं है।

+0

तो, आपकी सिफारिशें क्या हैं? – SpacialWise

+0

एक कॉन्फ़िगरेशन स्क्रीन हो सकती है ताकि उपयोगकर्ता अपने स्वयं के psw को परिभाषित कर सके। फिर आप usr pasw का हैश स्टोर करते हैं, और जब ऐप लॉन्च होता है, तो psw से अनुरोध किया जाता है। यदि psw हैश संग्रहीत हैश से मेल खाता है, तो आप उपयोगकर्ता तक पहुंच प्रदान करते हैं। आप उपयोगकर्ताओं को कुंजी जारी कर सकते हैं, अपने डीबी में स्टोर हैंश कर सकते हैं, और उन्हें अपने ऐप को पहले उपयोग ऑनलाइन पर मान्य करने दें। –

0

मैं सुरक्षा विशेषज्ञ नहीं हूं और न ही मुझे पता है कि वीएम संकलित भाषा को आसानी से अपरिवर्तित किया जा सकता है, आप ProGuard का उपयोग करके अपने कोड को खराब करने का प्रयास कर सकते हैं लेकिन अभी भी पठनीय हो सकते हैं, मैं सलाह दूंगा कि इसे सहेजने का प्रयास करें और अपना क्रिप्ट करें Java Crypto का उपयोग करके कुंजी, Android Crypting Database या Encrypt Information in Android के समान इस तरह के प्रश्न से पूछा गया है, मुझे आपके प्रश्न का उत्तर देने की उम्मीद नहीं है, लेकिन अब से आपको एक गाइड लाइन देनी होगी।

+0

धन्यवाद नेक्रोनेट। मैंने एक निश्चित समाधान के बिना यहां कई पोस्ट पढ़ी हैं .. मैं आपके द्वारा लिंक किए गए लोगों की जांच करूंगा। – SpacialWise

0

आप के बजाय एक नई कुंजी हर बार जब आप लाने स्ट्रिंग की जरूरत है उत्पन्न कर सकते हैं

आप तो एक हार्डकोडेड प्रमाण पत्र के साथ एक मुख्य एक्सचेंज (जो सुरक्षित है अगर ठीक से लागू)

या सिर्फ करने की आवश्यकता होगी SSL का उपयोग करें यदि यह केवल

+1

यह दृष्टिकोण व्यावहारिक लगता है .. प्रत्येक बार एक नई कुंजी उत्पन्न करने योग्य है, लेकिन मैं एक हार्डकोडेड प्रमाणपत्र के साथ कुंजी एक्सचेंज से परिचित नहीं हूं। क्या आप आगे बढ़ सकते हैं या मुझे दिशा में इंगित कर सकते हैं? मैं – SpacialWise

1

क्लाइंट मशीन पर सभी कोड को पढ़ा जा सकता है। सबसे अच्छा आप कुंजी खोजने के लिए और अधिक कठिन बनाने के लिए कर सकते हैं।

एक सुझाव: आपके कोड में कुछ टेक्स्ट स्ट्रिंग्स होंगी, जैसे "कृपया अनुरोध करें कि आपका अनुरोध संसाधित हो रहा है ..." ऐसा संदेश ढूंढें, और उस संदेश को XORing द्वारा अपनी वास्तविक कुंजी में बदलने के लिए बाइट सरणी उत्पन्न करें पाठ स्ट्रिंग के साथ बाइट सरणी।

उदा। "गिलहरी" एक्सओआर [16 1 डी 10 1 1 1 13 13 बी 18] => "हाथी"

केवल "गिलहरी" और बाइट सरणी वास्तव में आपके कोड में दिखाई देती है।

+0

हाय! हां यह मूल रूप से जो मैं सोच रहा था उसके आधार पर है। अनिवार्य रूप से कुछ दिनचर्या (एल्गोरिदम का उपयोग) जो स्ट्रिंग.एक्सएमएल और कुछ अन्य यादृच्छिक रूप से एम्बेडेड चर के भीतर डेटा की कुंजी बनाता है। इसे अलग-अलग वर्गों में एम्बेडेड कई तरीकों से जोड़ना। फिर अंततः प्रोगार्ड का उपयोग करना जो ट्रेसिंग करेगा कि कौन से विशिष्ट कार्य/दिनचर्या अधिक चुनौतीपूर्ण कर रहे हैं .. – SpacialWise

+0

मुझे पता है कि कोई भी उस घटना में अभी भी इसे समझ सकता है, लेकिन यह एक और अधिक समय लेने वाला है - इसे आसानी से अपूर्ण और पढ़ने से लेकर कुछ मिनट के लिए कोड के माध्यम से पता लगाने के लिए। – SpacialWise

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