2012-04-20 15 views
9

स्प्रिंग प्रलेखन कि याद मुझे कुकी में निम्नलिखित जानकारी भंडारण के द्वारा कार्यान्वित किया जाता है का कहना है कि -वसंत सुरक्षा प्रमाणीकरण प्रबंधन भेद्यता

बेस 64 (उपयोगकर्ता नाम + ":" + expirationTime + ":" + md5Hex (उपयोगकर्ता नाम + ":" + expirationTime + ":" पासवर्ड + ":" + कुंजी))

मैं निम्नलिखित भ्रम -

  1. क्यों एक का उपयोग एसएचए -1 या SHA-2 का उपयोग करने के बजाय जानकारी को पचाने के लिए एमडी 5 की तरह असुरक्षित हैश। क्या सूचनाओं के इतने छोटे टुकड़े के लिए इन से प्रदर्शन प्रदर्शन महत्वपूर्ण होगा?

  2. इस जानकारी को नेटवर्क पर क्यों प्रसारित करें? क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिक संख्या का नक्शा और सर्वर पर यह जानकारी क्यों न रखें, केवल कुकी के रूप में मानचित्र कुंजी लौटाएं। AFAIK यह सर्वलेट एपीआई द्वारा उपयोग किया जाने वाला दृष्टिकोण है और इसे अधिक सुरक्षित माना जाता है।

उत्तर

10

दूसरा सवाल के साथ शुरू की सुविधा देता है, क्योंकि यह अधिक प्रासंगिक एक है:

दूसरा सवाल जवाब "क्यों सब पर नेटवर्क पर पासवर्ड संचारित ....":

क्योंकि आपने जो वर्णन किया है वह केवल Simple Hash-Based Token Approach

यदि आप पृष्ठ Spring Security Reference: Chapter 10 Remember-Me Authentication पर स्क्रॉल करते हैं तो आप देखेंगे कि वसंत सुरक्षा मुझे अलग-अलग यादों का भी उपयोग कर सकती है: Chapter 10.3 Persistent Token Approach। और यही वह है जो आपने अपने दूसरे प्रश्न में सुझाया था।


पहला सवाल: करने के लिए कम जवाब है "? इन से प्रदर्शन हिट जानकारी के इस तरह के एक छोटे से टुकड़े के लिए महत्वपूर्ण होगा" - कोई

तो तुम Simple Hash-Based Token Approach का उपयोग और लगता है कि MD5 असुरक्षित है करना चाहते हैं, तो आप TokenBasedRememberMeService[javadoc] उपवर्ग और String makeTokenSignature(long tokenExpiryTime, String username, String password) विधि ओवरराइड कर सकते हैं। उदाहरण (untested) के लिए

protected String makeTokenSignature(long tokenExpiryTime, String username, String password) { 
    String data = username + ":" + tokenExpiryTime + ":" + password + ":" + getKey(); 
    MessageDigest digest; 
    try { 
     digest = MessageDigest.getInstance("SHA-256"); 
    } catch (NoSuchAlgorithmException e) { 
     throw new IllegalStateException("No SHA-256 algorithm available!"); 
    } 

    return new String(Hex.encode(digest.digest(data.getBytes()))); 
} 
+0

MakeTokenSignature() को ओवरराइड करना एक अच्छा तरीका है, क्योंकि मुझे नहीं लगता कि SHA-2 टूटा जा सकता है। मुझे आश्चर्य है कि किस मामले में लगातार एक सतत टोकन दृष्टिकोण का उपयोग करने की आवश्यकता होगी। –

+0

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

+0

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

4

सरल हैश आधारित टोकन द्वारा प्रयोग किया जाता MD5 हैश कि दृष्टिकोण के एक जोखिम नहीं है।

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

हालांकि, इस मामले में एमडी 5 का उपयोग हैश पासवर्ड में नहीं किया जा रहा है लेकिन इसे MAC के रूप में उपयोग किया जा रहा है। यदि आपने उस हैश के साथ टकराने वाले मान को खोजने के लिए इंद्रधनुष तालिका का उपयोग किया है, तो आप उस मूल्य का कितना उपयोग कर सकते हैं?

कुकी के लिए एक अलग हैश फ़ंक्शन का उपयोग करके आप अधिक सुरक्षित महसूस कर सकते हैं लेकिन यह इस मामले में और अधिक सुरक्षा प्रदान नहीं कर रहा है।

यदि आप अधिक सुरक्षा चाहते हैं तो आपको पर्सिस्टेंट हैश टोकन दृष्टिकोण का उपयोग करना चाहिए। सरल हैश टोकन ने उपयोगकर्ता नाम को क्लीयरक्स्ट में उजागर किया है और हमले को फिर से चलाने के लिए कमजोर है। निरंतर टोकन इन समस्याओं से बचाता है।

किसी भी तरह से आपको अपनी याद-सफाई कुकी को सुरक्षित और एचटीपी-केवल ध्वज सेट करके सुरक्षित करना चाहिए।

+0

(+1) स्पष्ट हश टोकन दृष्टिकोण के पेशेवरों को स्पष्ट रूप से समझाने के लिए - यहां तक ​​कि यह टिप्पणियों से केवल एक प्रश्न था – Ralph

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