2012-03-05 16 views
11

प्रमाणीकृत एन्क्रिप्शन की आवश्यकता है कि हम किसी संदेश को एन्क्रिप्ट करने और प्रमाणीकृत करने के लिए कुछ स्वीकृत मानक का उपयोग करें। तो हम दोनों संदेश को एन्क्रिप्ट करते हैं और संदेश पर मैक की गणना करते हैं ताकि यह सत्यापित किया जा सके कि इसे छेड़छाड़ नहीं किया गया है।जावा में प्रमाणीकृत एन्क्रिप्शन करने का सही तरीका क्या है?

This question पासवर्ड आधारित कुंजी को मजबूत बनाने और एन्क्रिप्शन प्रदर्शन करने के लिए एक तरह से की रूपरेखा:

/* Derive the key, given password and salt. */ 
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256); 
SecretKey tmp = factory.generateSecret(spec); 
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); 
/* Encrypt the message. */ 
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
cipher.init(Cipher.ENCRYPT_MODE, secret); 
AlgorithmParameters params = cipher.getParameters(); 
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV(); 
byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8")); 

लेकिन जहाँ तक मैं बता सकता हूँ, यह किसी भी मैक सिफर पर गणना नहीं करता है और इतने असुरक्षित हो जाएगा। जावा में प्रमाणीकृत एन्क्रिप्शन करने के लिए स्वीकार्य मानक क्या है?

+0

यदि आप पूर्ण संदेश को एन्क्रिप्ट/डिक्रिप्ट करते हैं तो आप जानते हैं कि यह बिना छेड़छाड़ नहीं किया गया है !? जब आप "सादे पाठ" में कोई संदेश (या डेटा) भेजना चाहते हैं तो एचएमएसी का उपयोग नहीं किया जाता है और फिर सादा पाठ प्रमाणित करने के लिए एचएमएसी भेजते हैं? – TacticalCoder

+0

प्रमाणित एन्क्रिप्शन करने के लिए कोई स्वीकार्य मानक नहीं है, यह (असममित) हस्ताक्षर, मैक (उदा। एईएससीएमएसी), एचएमएसी या प्रमाणीकृत मोड हो सकता है। हालांकि कुछ असुरक्षित हैं (उदाहरण के लिए डिफ़ॉल्ट एईएस-मैक बहुत सुरक्षित नहीं है)। एक अच्छे उत्तर के लिए नीचे देखें जो आपके उपयोग के मामले में फिट होना चाहिए। –

+0

एरिक उत्तर के साथ कोई समस्या? –

उत्तर

11

मैं जीसीएम मोड एन्क्रिप्शन का उपयोग करने की सलाह दूंगा। इसे डिफ़ॉल्ट रूप से नवीनतम जेडीके (1.7) में शामिल किया गया है। यह काउंटर मोड एन्क्रिप्शन (एक स्ट्रीम सिफर, कोई पैडिंग आवश्यक) का उपयोग करता है और एक प्रमाणीकरण टैग जोड़ता है। एक बड़ा फायदा यह है कि इसे केवल एक ही कुंजी की आवश्यकता होती है, जबकि एचएमएसी मिश्रण में एक और कुंजी जोड़ता है। बाउंसी कैसल में भी एक कार्यान्वयन है, जो मस्तिष्क ओरेकल द्वारा प्रदान किए गए एक के साथ संगत है।

जीसीएम मोड एन्क्रिप्शन एक टीएलएस आरएफसी में भी है, और एक्सएमएल एन्क्रिप्ट 1.1 (दोनों अंतिम नहीं) में भी विशेषताएं हैं। जीसीएम मोड सभी तीन सुरक्षा सुविधाओं को प्रदान करता है: डेटा भेजने की गोपनीयता, अखंडता और प्रामाणिकता। स्ट्रिंग सीबीसी के बजाय "एईएस/जीसीएम/नोपैडिंग" होगी जिसे आप अब तैनात कर रहे हैं। जैसा कि कहा गया है, सुनिश्चित करें कि आपके पास ओरेकल से नवीनतम जेडीके है, या बाउंसी कैसल प्रदाता स्थापित है।

मेरा उत्तर here भी देखें, जो ज्यादातर स्ट्रिंग एन्कोडिंग के बारे में है, लेकिन मैंने सफलतापूर्वक जीसीएम मोड की भी कोशिश की है - टिप्पणी देखें।

+0

किसी भी स्ट्रीम सिफर के साथ, सावधान रहें कि आप एनओएनसीई/IV का उपयोग कैसे करते हैं , एक ही मूल्य काटने के रूप में असुरक्षा का कारण बन जाएगा। –

+0

हाँ मुझे लगता है कि यह सभी चीजों का सबसे अच्छा जवाब है। मैं जेडीके 1.6 का उपयोग करने के लिए संकुचित हूं इसलिए मैं ऐसे समाधान के साथ गया जो 256 बिट कुंजी उत्पन्न करने के लिए पासवर्ड आधारित कुंजी को मजबूत करता है। मैं कुंजी के पहले 128 बिट्स लेता हूं और एईएस सीबीसी का उपयोग करके एन्क्रिप्ट करने के लिए इसका उपयोग करता हूं और फिर मैक को सिफरटेक्स्ट में अंतिम 128 बिट्स का उपयोग करता हूं। –

+0

@EricConner प्रारंभिक वेक्टर भी मैक को भूलना नहीं भूलता! – MauganRa

3

सुरक्षित FTP के माध्यम से एक सर्वर से दूसरी सर्वर में फ़ाइलों को स्थानांतरित करते समय, मैं "से" सर्वर पर रहने वाली निजी कुंजी और "टू" सर्वर पर रहने वाली सार्वजनिक कुंजी के साथ निजी/सार्वजनिक कुंजी जोड़े का उपयोग करता हूं।

फ़ाइलों को स्थानांतरित करते समय निजी/सार्वजनिक कुंजी जोड़े का उपयोग करना एक सुरक्षित मानक है।

मुझे विश्वास है कि जावा एप्लिकेशन के संदर्भ में यह एक सुरक्षित माध्यम भी होगा।

जावा में डिजिटल हस्ताक्षर के लिए एक निजी/सार्वजनिक कुंजी जोड़ी सेटअप का उपयोग करने के बारे में अधिक जानकारी के लिए Generating and Verifying Signatures और Generate Public and Private Keys देखें।

+0

ठीक है, यह एक बिल्कुल नया उपयोग मामला है लेकिन मैं थोड़ा कठोर था। हस्ताक्षर और पीकेआई * * ईमानदारी नियंत्रण और प्रमाणीकरण की वैध विधि हैं, लेकिन यह मैक की गणना करने का एक बड़ा तरीका है। –

+1

@owlstead - मैं संक्षेप में आपकी मूल टिप्पणी को याद करता हूं लेकिन अब इसे नहीं देख सकता क्योंकि ऐसा लगता है कि इसे हटा दिया गया है। कोई चिंता नहीं है। मेरे कई जवाब मेरे उत्तरों को कम कर चुके हैं और मैं समझता हूं कि कई मामलों में क्यों। मैं उम्मीद कर रहा हूं कि डाउनवोट पर होवर करते समय अधिक लोगों को देखा जाता है - "यह उत्तर उपयोगी नहीं है"।इस मामले में, मुझे सच में विश्वास है कि मेरा जवाब ओपी की मदद कर सकता है और इसलिए मैंने इसे पोस्ट किया। भगवान forbid कि हम में से कोई भी अंक के लिए बस कुछ फेंक देगा। हम सभी को आखिरकार एक-दूसरे की मदद करने का प्रयास करना चाहिए ... –

+0

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

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