2011-12-02 12 views
16

मेरे पास एक वेब सेवा के लिए प्रमाणीकरण जानकारी के साथ एक जावा गुण वस्तु है। मुझे उस डेटा को एन्क्रिप्ट करने की आवश्यकता है, लेकिन मुझे नहीं पता कि मुझे सुरक्षित रहने के लिए एन्क्रिप्शन कुंजी को स्टोर करने की आवश्यकता है।मैं जावा में एन्क्रिप्शन कुंजी को सुरक्षित रूप से कैसे स्टोर करूं?

इस डेटा को एन्क्रिप्ट करने और इसे सुरक्षित तरीके से पुनर्प्राप्त करने के आसपास सर्वोत्तम प्रथाएं क्या हैं?

क्या एक कीस्टोर का उपयोग करने के लिए कोई फायदा है?

ws_user=username 
ws_password=password 
ws_url=https://www.whatever.com/myservice 
+0

ऐसा लगता है कि मेरे एप्लिकेशन को कुंजी तक पहुंच की आवश्यकता है, तो इसे "सुरक्षित" करने का कोई तरीका नहीं है। यदि मैं इसे एक कीस्टोर में संग्रहीत करता हूं तो यह अधिक अस्पष्ट होगा, लेकिन यह अधिक सुरक्षित नहीं लगता है। मुझे उम्मीद है कि मैं गलत हूं :) – ScArcher2

+0

यह अंततः बूटस्ट्रैपिंग समस्या की तरह लगता है। श्रृंखला में किसी बिंदु पर आपको एक कुंजी रखना है जिसके साथ कुछ अनएन्क्रिप्ट करना है। यहां तक ​​कि यदि आप एक कीस्टोर का उपयोग करते हैं, तो आपको उस कीस्टोर के लिए एक पासवर्ड चाहिए। क्या आपकी कोई प्रमाणीकरण योजना बदल सकती है? यदि आप वहां से पूछें तो आपको http://security.stackexchange.com/ पर कुछ सुंदर जानकार प्रतिक्रियाएं मिल सकती हैं। – mcfinnigan

+0

@mcfinnigan मैंने यही सोचा था। मैं सिर्फ यह देखना चाहता था कि समस्या के आसपास कोई रास्ता है या नहीं। – ScArcher2

उत्तर

5

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

+0

मैं ऐसी परिस्थिति में भाग गया जहां ग्राहक की सुरक्षा नीति को कॉन्फ़िगरेशन फ़ाइलों में उपयोगकर्ता नाम/पासवर्ड की एन्क्रिप्शन की आवश्यकता होती है। यह मूर्खतापूर्ण लग रहा था, लेकिन मैंने सोचा कि मैं यह देखने के लिए यहां जांच करूंगा कि मुझे कुछ याद आ रहा है या नहीं। – ScArcher2

4

यह एक चिकन-अंडे की समस्या है।
फिर आप को खोजने के लिए जहां कीस्ट्रोक के लिए पासवर्ड स्टोर करने के लिए और और इतने पर आप सममित एन्क्रिप्शन का उपयोग डेटा enrypt सकता है पासवर्ड पुनः प्राप्त की आवश्यकता होगी .....

अपने सुरक्षा आवश्यकताओं और जरूरतों पर निर्भर करता है, और क्लाइंट साइड सर्टिफिकेट प्रमाणीकरण का उपयोग कर रिमोट सर्वर (आपका सर्वर) के माध्यम से।

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

0

मुझे संपत्ति फ़ाइलों में संवेदनशील जानकारी एन्क्रिप्ट करने और लवण उत्पन्न करने और पासवर्ड पुनर्प्राप्त करने के लिए कुछ घर की प्रक्रियाओं को एन्क्रिप्ट करने के लिए Jasypt के StringEncrytor का उपयोग करके सफलता मिली है। चूंकि आप एक वेब सेवा का उपयोग कर रहे हैं, इसलिए आप समय पर तैनात करने के लिए मैन्युअल रूप से पासवर्ड दर्ज करने या अपने स्वयं के समान समाधान को रोल करने के लिए जैसीप्ट के Web PBE Configuration का उपयोग कर सकते हैं।

+0

हाय दान, क्या आपने वेब पीबीई कॉन्फ़िगरेशन का उपयोग किया है? मुझे लगता है कि यह चिकन-अंडे की समस्या को हल कर सकता है (पाठ को एन्क्रिप्ट करने के लिए हमेशा एक मास्टर कुंजी की आवश्यकता होती है)। इसे कैसे स्थापित किया जाना है? मैं थोड़ा परेशान हूँ। सहायता के लिए धन्यवाद! वी – Viktor

4

नीचे की रेखा यह है कि कहीं भी एक अनएन्क्रिप्टेड रूप में "रूट-ऑफ-द-चेन" पासवर्ड होना चाहिए। एक ओएस-संरक्षित स्थानीय फ़ाइल, एक ओएस-संरक्षित दूरस्थ फ़ाइल, स्रोत में हार्डकोडेड, आदि

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

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