2009-02-11 33 views
16

मैं प्रोजेक्ट पर काम कर रहा हूं जिसे डेटा की रक्षा करने की आवश्यकता होनी चाहिए (कोड को प्रकट करना मुख्य समस्या नहीं है) फ़ाइलें। हम जावा + नेटबीन्स का उपयोग कर रहे हैं। क्या ऐसी कोई सुविधा है जो एन्क्रिप्टेड प्रारूप में जार बनाएगी? हम डेटाबेस के लिए एसक्लाइट का भी उपयोग कर रहे हैं - इसलिए एन्क्रिप्टेड प्रारूप में टेक्स्ट फ़ाइल डालना हमारे लिए भी उचित विकल्प नहीं है।एन्क्रिप्टेड जार फ़ाइल कैसे बनाएं?

+4

आपका डिज़ाइन त्रुटिपूर्ण है; कोड के साथ शिपिंग संवेदनशील डेटा शिपिंग एक चालाक विचार नहीं है। – Rob

+0

यह डेस्कटॉप एप्लिकेशन है। जावा प्लेटफॉर्म संगतता के लिए प्रयोग किया जाता है। –

+3

यदि आपको डेटा की सुरक्षा करने की आवश्यकता है तो SQLLipher पर विचार करें। यदि आप चाहें तो पहले से एन्क्रिप्टेड डीबी फ़ाइल भेज सकते हैं। –

उत्तर

20

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

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

सबसे अच्छा आप प्राप्त कर सकते हैं obfuscation है, लेकिन यह महत्वाकांक्षी हमलावर के लिए कोई वास्तविक सुरक्षा या बाधा नहीं है।

2

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

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

1

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

7

Kosi2801 बहुत अधिक सही है। एकमात्र चीज जो मैं सोच सकता हूं वह कर सकता है, लेकिन यह बदसूरत है।

  1. एक छोटा मानक जेएआर और एक एन्क्रिप्टेड डेटा फ़ाइल शिप करें।
  2. जब जेएआर चलता है, तो यह एन्क्रिप्टेड डेटा फ़ाइल की स्मृति में (कुछ) को डिक्रिप्ट करता है (जैसे डेटा जेएआर में है, मूल रूप से पॉइंटर/लम्बाई जोड़े की एक साधारण इन-मेमोरी फाइल सिस्टम)
  3. सेट अपने स्वयं के वर्ग लोडर है कि, जब कहा जाता है, सही एन्क्रिप्टेड बाइट्स जार से (छद्म एफएस 2 # में वर्णित तालिका का उपयोग कर), हो जाता है यह decrypts, और फिर वहाँ से

यह होगा वर्ग डेटा लोड आपको कक्षाएं लोड करने दें। आप अन्य संसाधनों को लोड करने के लिए एक ही चीज़ (कक्षा लोडर के बिना) कर सकते हैं।

मज़ा लागू करने के लिए एक ओर जहां इस के साथ कुछ समस्याएं हैं (जो एक चुनौती की तरह उन लोगों के लिए):

  1. आप सामान डिक्रिप्ट करने के लिए सक्षम होना चाहिए चाहती है, इसलिए उपयोगकर्ता या तो प्रवेश करने के लिए होगा एक पासवर्ड हर बार या कुछ समान। यदि जार अपने स्वयं को डिक्रिप्ट करने के लिए पर्याप्त जानता है, तो कोई भी इसे देख सकता है और चीजों को डिक्रिप्ट करने का तरीका समझ सकता है। डिक्रिप्शन कुंजी के लिए पूछने के लिए इंटरनेट पर एक ज्ञात-अच्छे सर्वर से संपर्क करके इसे कम किया जा सकता है (जब तक आप उस प्रक्रिया को सुरक्षित करते हैं)। निश्चित रूप से किसी को प्रोग्राम चलाने के लिए किसी भी समय सक्रिय कनेक्शन की आवश्यकता होती है।
  2. सब कुछ स्मृति में समाप्त होता है। एक कस्टम जेवीएम के बिना जो एन्क्रिप्टेड बाइट कोड के छोटे बिट्स को नियंत्रित करता है (जैसा कि कैमरून मैके ने उल्लेख किया है) कक्षाएं किसी भी समय मुख्य स्मृति में डिक्रिप्ट की गईं समाप्त हो जाएंगी। जब तक कि आप अन्य लोगों को उस स्मृति को पढ़ने से रोकने के लिए ओएस पर भरोसा न करें, आप अपने हाथों पर थोड़े समय के साथ किसी के लिए लड़ाई खो चुके हैं।संसाधनों (जैसे छवियों/फोंट/आदि) के लिए एक ही समस्या जिसे आप कुछ एन्क्रिप्टेड स्टोर से पढ़ने का प्रयास करते हैं।

तो तुम लोगों को चलाने के चारों ओर दे सकते हैं और चीजों को कठिन बना, लेकिन स्थिति में आपके द्वारा दिए गए सभी आप कर सकते हैं यह समय अन्य व्यक्ति निवेश करना होगा लायक नहीं बनाने की कोशिश है।

सॉफ्टवेयर सुरक्षा कठिन है, खासकर जावा जैसी किसी चीज़ में जिसे आसानी से हटाया जा सकता है और सी/असेंबली जैसे अपने कोड को बदल नहीं सकता है। एक कारण है कि कुछ सबसे महंगी सॉफ़्टवेयर में हार्डवेयर डोंगल की आवश्यकता होती है या किसी निश्चित CPU या अन्य हार्डवेयर पर लॉक हो जाती है।

+0

अब मैं समझता हूं कि मैंने एरिक्सन टेम्स का उपयोग क्यों किया था, मुझे इसे चलाने के लिए हर समय यूएसबी डोंगल का उपयोग क्यों करना पड़ा, आश्चर्यजनक रूप से यूएसबी पर इसका कोई डेटा नहीं था, लेकिन यह इसके बिना काम नहीं करेगा – Johnydep

3

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

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

एसएसएल पर उपलब्ध डेटा (या कुंजी) बनाने की एक और संभावना है, और यह सत्यापित करने के लिए एक अच्छा प्रमाणीकरण विधि का उपयोग करें कि आपका उपयोगकर्ता कौन है।

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

9

मैं कोसी 2801 से सहमत हूं। क्लास फ़ाइल एन्क्रिप्शन केवल सुरक्षा की नकल है (http://www.excelsior-usa.com/articles/java-obfuscators.html देखें) कस्टम क्लासलोडर का उपयोग एप्लिकेशन को तोड़ सकता है, उदा। आवेदन सर्वर में।

बेहतर तरीका है: कक्षा फ़ाइलों में स्ट्रिंग स्थिरांक के एन्क्रिप्शन का उपयोग करें। अधिकांश वाणिज्यिक obfuscators में यह फ़ंक्शन है, उदाहरण के लिए Allatori, Stringer Java Obfuscation Toolkit, Zelix KlassMaster, Smokescreen, DashO (सुपर महंगा)। स्ट्रिंगर जावा Obfuscator कॉल संदर्भ जांच और अखंडता नियंत्रण सुविधाओं है जो सुरक्षा को हैक करने के लिए वास्तव में कठिन बनाता है।

सबसे सुरक्षित तरीका जावाकार्ड जैसे बाहरी डिवाइस पर बाइटकोड के हिस्सों को स्टोर और निष्पादित करना है।

एनबी। मैं लाइसेंस एलएलसी में सीईओ हूं। स्ट्रिंगर जावा Obfuscator के डेवलपर।

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