2015-01-25 10 views
6

कार्य, में प्रवेश किया पासवर्ड (PasswordStr) या mKey.getEncoded बाइट [] और बाद में स्वचालित रूप से क्रिप्टो एपीआई को भेजने (सिफर)एंड्रॉइड पर सुरक्षित रूप से पासवर्ड कैसे स्टोर करें?

SecretKey mKey = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(new PBEKeySpec(PasswordStr.toCharArray()); 

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

एंड्रॉइड पहले ही पासवर्ड संग्रहीत करने के लिए एक तंत्र प्रदान कर सकता है?

p.s दूरस्थ सर्वर का उपयोग संभव नहीं है। स्थानीय रूप से संग्रहीत करने की आवश्यकता है।

+1

आपका उपयोग केस क्या है? आपको पासवर्ड या कुंजी स्टोर करने की आवश्यकता क्यों है? वर्तमान में यह स्पष्ट नहीं है कि आप पासवर्ड या कुंजी स्टोर करना चाहते हैं। पसंद को देखते हुए, जेनरेट * कुंजी * (और पाठ्यक्रम के सार्वजनिक नमक) को बचाएं। आप अन्य पार्टियों के लिए उपयोगकर्ता का पासवर्ड रिसाव नहीं करना चाहते हैं! –

+0

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

+0

अब यह भी कम समझ में आता है। नमक कोड में नहीं होना चाहिए, नमक यादृच्छिक होना चाहिए, नहीं [इस प्रकार की यादृच्छिक] (http://xkcd.com/221/)। नमक और पुनरावृत्ति गिनती सार्वजनिक हो सकती है। –

उत्तर

0

आप एंड्रॉइड के लिए SQLCipher का उपयोग कर सकते हैं। यह SQLite का ही विस्तार है कि डेटाबेस फ़ाइलों

+0

बिना किसी सुरक्षा विवरण के यह उत्तर उतना मजबूत नहीं है जितना हो सकता है। एईएस -256 वास्तव में प्रदान की गई सुरक्षा के स्तर के बारे में कुछ भी नहीं कहता है। –

2

चेक Handling Credentials section on the android developers guide के पारदर्शी 256-बिट एईएस एन्क्रिप्शन प्रदान करता है। मैं इसे यहां उद्धृत करूंगा।

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

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

AccountManager का उपयोग करने के बाद Account, CREATOR किसी भी प्रमाण-पत्र में गुजरने से पहले, ताकि आप अनजाने में गलत एप्लिकेशन पर प्रमाण-पत्र पास न करें।

यदि प्रमाण-पत्र केवल आपके द्वारा बनाए गए एप्लिकेशन द्वारा उपयोग किए जाने हैं, तो आप checkSignature() का उपयोग कर खाता प्रबंधक का उपयोग करने वाले एप्लिकेशन को सत्यापित कर सकते हैं। वैकल्पिक रूप से, यदि केवल एक ही एप्लिकेशन क्रेडेंशियल का उपयोग करेगा, तो आप भंडारण के लिए KeyStore का उपयोग कर सकते हैं।

+0

यह सब सही है, लेकिन कभी-कभी पासवर्ड संग्रहीत करने के लिए वैध उपयोग के मामले होते हैं (यानी तृतीय पक्ष सेवाओं के लिए), और यह उत्तर उनको संबोधित नहीं करता है। –

3

आप एंड्रॉइड के Keystore API का उपयोग कर सकते हैं।

एक गुप्त एक masterpassword फोन का पासवर्ड या पिन से प्राप्त द्वारा एन्क्रिप्टेड है। यह एक अच्छा सॉफ्टवेयर आधारित एन्क्रिप्शन समाधान के रूप में माना जाता है। ध्यान दें, उपयोगकर्ता को काम करने के लिए अपने फोन पर एक पासवर्ड/पिन सेट करना होगा।

Nelenkov gives a good overview:

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

  • यह एक देशी डेमॉन है, बूट पर शुरू कर दिया
  • यह एप्लिकेशन और सिस्टम सेवाओं बात करने के लिए अनुमति देने के लिए एक स्थानीय नियंत्रण सॉकेट प्रदान करता है यह करने के लिए
  • यह एक एईएस 128 बिट मास्टर
  • कुंजी एन्क्रिप्टेड कुंजी/डेटा/विविध/कीस्ट्रोक में जमा हो जाती है, प्रति कुंजी
  • स्वामी कुंजी डिवाइस से ली गई है एक फ़ाइल का उपयोग कुंजी को एन्क्रिप्ट पासवर्ड को अनलॉक करने या पिन
  • प्रशासन फोन करने वाले यूआईडी

बारे में अधिक जानकारी के लिए Android Documentation देखें आधारित आदेश निष्पादन और कुंजी पहुँच अधिकृत करता है।

+2

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

+0

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

+0

अच्छा, मैंने सोचा यह पूछा गया था, लेकिन अब मैं उलझन में हूँ। निरस्त डाउनवोट, पूछा संगठन। टिप्पणियों में स्पष्टीकरण के लिए पोस्टर। –

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

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