2010-03-03 8 views
16

मैं जावा में पासवर्ड आधारित फ़ाइल एन्क्रिप्शन कर रहा हूं; मैं निम्नलिखित कोड का उपयोग करके नमक और पासवर्ड संयोजन से एक कुंजी प्राप्त करने के लिए अंतर्निहित एन्क्रिप्शन एल्गोरिदम और PBKDF2WithHmacSHA1 के रूप में एईएस का उपयोग कर रहा हूं (जो मुझे इस साइट पर किसी अन्य उदार पोस्टर से मिला है)।जावा में पीबीकेडीएफ 2 के साथ पासवर्ड सत्यापन

SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
KeySpec ks = new PBEKeySpec(password,salt,1024,128); 
SecretKey s = f.generateSecret(ks); 
Key k = new SecretKeySpec(s.getEncoded(),"AES"); 

मैं नमक का हिस्सा, उपयोगकर्ता प्रत्येक के अंत और एन्क्रिप्शन और डिक्रिप्शन काम ठीक पर अपना पासवर्ड में प्रवेश करती है :-) मेरे समस्या यह है कि मैं यह सत्यापित करने के पासवर्ड उपयोगकर्ता द्वारा दर्ज करने से पहले सही है सक्षम होने के लिए चाहते हैं (संभावित रूप से लंबी) डिक्रिप्शन प्रक्रिया शुरू करना। मुझे पता है कि पीबीकेडी स्पेक में एक वैकल्पिक 2 बाइट सत्यापन मान शामिल है लेकिन मुझे यकीन नहीं है कि उपर्युक्त दृष्टिकोण का उपयोग करके इस मूल्य को कैसे उत्पन्न किया जाए। क्या जावा इसके लिए समर्थन प्रदान करता है या नहीं, तो एक सुरक्षित विकल्प क्या होगा?

आपके समय के लिए धन्यवाद।

उत्तर

4

अरे, पागल स्कॉट और क्रिस के लिए मदद के लिए धन्यवाद। कुछ खुदाई करने के बाद मैंने पासवर्ड सत्यापन और संदेश प्रमाणीकरण दोनों करने के लिए Dr Gladmans file encryption page पर वर्णित विधियों का उपयोग करने का निर्णय लिया। मेरा मानना ​​है कि पीबीकेडीएफ 2 और एक मैक के आधार पर यह विधि, पासवर्ड को सुरक्षित बनाने के लिए पर्याप्त रूप से महंगी पासवर्ड के लिए सत्यापन मूल्य प्राप्त करती है। फिर से धन्यवाद, और मुझे आशा है कि यह समाधान दूसरों को सहायता देगा।

5

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

+0

हाय, आपके उत्तर के लिए धन्यवाद। मैं इस धारणा के तहत था कि पीबीकेडीएफ 2 का उद्देश्य और कुंजी प्राप्त करने के लिए नमक और पासवर्ड के दोहराए गए संयोजन को सादा पाठ पासवर्ड से कुंजी की गणना करने की प्रक्रिया को महंगी और शब्दकोश शैली के हमलों को कठिन बनाने के लिए किया गया था। जैसे मैंने कहा कि पीबीकेडीएफ 2 spec में एक वैकल्पिक पासवर्ड सत्यापन मान शामिल है, मैं नहीं जानता कि जावा कार्यान्वयन में इसे कैसे प्राप्त किया जाए। – PinkyNoBrain

+0

मैं मानता हूं कि कुंजी व्युत्पन्न प्रक्रिया प्रक्रिया पूरी होने के बाद त्वरित जांच की अनुमति देने से ब्रूट फोर्स हमला आसान हो जाता है क्योंकि हमलावर को वास्तव में वहां कुंजी की जांच करने के लिए कुछ भी डिक्रिप्ट करने की आवश्यकता नहीं होती है, लेकिन मैंने 256-बिट एईएस कुंजी की बड़ी खोज स्थान सोचा होगा वैसे भी एक शुद्ध ब्रूट फोर्स हमले निषिद्ध है? – PinkyNoBrain

+0

@ पंकिनोब्रेन: त्वरित जांच के साथ समस्या यह है कि यह महत्वपूर्ण स्थान को बहुत कम करता है: आपके पास सभी पासफ्रेज़ को खोजने का एक त्वरित तरीका है जिसके लिए त्वरित जांच सफल होती है। इसलिए, आपके पास एईएस बल को बल देने के लिए बहुत कम कुंजी हैं। –

2

कुछ प्रकार के पासवर्ड सत्यापन टैग की गणना करें और एन्क्रिप्टेड फ़ाइल डेटा के साथ स्टोर करें ताकि आप इसे पहले देख सकें। यह एक निश्चित (लघु) स्ट्रिंग के पीबीएमएसी की तरह कुछ हो सकता है। बेशक, इसे एक गैर-परिवर्तनीय कार्य करने की आवश्यकता है, इसलिए एक क्रैकर पासवर्ड निर्धारित नहीं कर सका, और गणना करने के लिए बहुत जल्दी नहीं है ताकि ब्रूट फोर्स अटैक को भंग कर सके।

क्या आपने सोचा है कि क्या (और कैसे) आप पता लगाएंगे कि पूरी फ़ाइल सही ढंग से डिक्रिप्ट की गई है या नहीं? आपको सीधे एईएस का उपयोग करने के बजाय पीबीईएस 2 और पीबीएमएसी के कुछ संयोजन में देखना चाहिए।

+0

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

+0

यह सच है कि कुछ प्रकार के सत्यापन आवश्यक रूप से एक ज्ञात सादे पाठ बनाता है। हालांकि पीबी * कार्यों का उपयोग कार्य को कठिन बनाता है, एक निष्क्रिय एकल हैश की तुलना में प्रभावी ढंग से इसे आपके पुनरावृत्ति गणना से गुणा करता है। – crazyscot

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