2008-08-03 18 views
27

पासवर्ड को एन्क्रिप्ट करने के लिए सबसे तेज़, अभी तक सुरक्षित तरीका (PHP पसंदीदा) क्या है, और जिसके लिए आप जिस विधि को चुनते हैं वह पोर्टेबल है?पासवर्ड एन्क्रिप्ट करना

दूसरे शब्दों में यदि मैं बाद में अपनी वेबसाइट को एक अलग सर्वर पर माइग्रेट करता हूं तो क्या मेरे पासवर्ड काम करना जारी रखेंगे?

जिस विधि का मैं अब उपयोग कर रहा हूं, वह सर्वर पर स्थापित पुस्तकालयों के सटीक संस्करणों पर निर्भर है।

उत्तर

29

यदि आप अपने लॉगिन सिस्टम के लिए एक एन्क्रिप्शन विधि चुन रहे हैं तो गति आपके मित्र नहीं है, जेफ को थॉमस पटेसेक के साथ पासवर्ड और conclusion के साथ फेंकना था और आपको सबसे धीमी, सबसे सुरक्षित एन्क्रिप्शन विधि का उपयोग करना चाहिए आप कर सकते हैं

थॉमस Ptacek के ब्लॉग से:
स्पीड एकदम वही है जिसे आप एक पासवर्ड हैश समारोह में नहीं करना चाहती।

बढ़ती पासवर्ड क्रैकर्स के साथ आधुनिक पासवर्ड योजनाओं पर हमला किया जाता है।

वृद्धिशील क्रैकर्स सभी संभावित क्रैक किए गए पासवर्ड को पूर्ववत नहीं करते हैं। वे व्यक्तिगत रूप से प्रत्येक पासवर्ड हैश पर विचार करते हैं, और वे अपने PHP लॉगिन पेज के समान पासवर्ड हैश फ़ंक्शन के माध्यम से अपना शब्दकोश खिलाते हैं। इंद्रधनुष जैसे इंद्रधनुष तालिका क्रैकर्स पासवर्ड पर हमला करने के लिए अंतरिक्ष का उपयोग करते हैं; जॉन द रिपर, क्रैक, और एलसी 5 जैसे बढ़ते क्रैकर्स समय के साथ काम करते हैं: आंकड़े और गणना।

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

बेहतर आप अपने पासवर्ड हैश फ़ंक्शन को अनुकूलित कर सकते हैं, जितना तेज़ आपका पासवर्ड हैश फ़ंक्शन हो जाता है, आपकी योजना कमजोर होती है। एमडी 5 और एसएचए 1, डीईएस जैसे पारंपरिक ब्लॉक सिफर भी तेजी से डिजाइन किए गए हैं। एमडी 5, एसएचए 1, और डीईएस कमजोर पासवर्ड हैश हैं। आधुनिक सीपीयू पर, डीईएस और एमडी 5 जैसे कच्चे क्रिप्टो बिल्डिंग ब्लॉक को बिट्सस्लाइज्ड, वेक्टरिज्ड और समांतर किया जा सकता है ताकि पासवर्ड खोज बिजली तेज हो सके। गेम-ओवर एफपीजीए कार्यान्वयन केवल सैकड़ों डॉलर खर्च करते हैं।

14

मैं पीटर के साथ हूं। डेवलपर पासवर्ड समझ में नहीं आता है। हम सभी चुनते हैं (और मैं इसके लिए भी दोषी हूं) एमडी 5 या एसएचए 1 क्योंकि वे तेज़ हैं। इसके बारे में सोचते हुए ('किसी ने हाल ही में मुझे यह बताया) कि कोई समझ नहीं आता है। हमें एक हैशिंग एल्गोरिदम चुनना चाहिए जो बेवकूफ धीमी है। मेरा मतलब है, चीजों के पैमाने पर, एक व्यस्त साइट हैश पासवर्ड क्या होगा? प्रत्येक 1/2 मिनट? कौन परवाह करता है अगर यह 0.8 सेकंड बनाम 0.03 सेकंड सर्वर के अनुसार लेता है? लेकिन सभी प्रकार के सामान्य ब्रूट-फोर्किश हमलों को रोकने के लिए वह अतिरिक्त धीमापन बहुत बड़ा है।

मेरे पढ़ने से, bcrypt विशेष रूप से सुरक्षित पासवर्ड हैशिंग के लिए डिज़ाइन किया गया है। यह blowfish पर आधारित है, और कई कार्यान्वयन हैं।

पीएचपी के लिए, PHPPass http://www.openwall.com/phpass/

की जाँच किसी को भी कर नेट के लिए, बाहर की जाँच BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

2

मैं जरूरी सबसे तेजी से लेकिन एक अच्छा संतुलन, सर्वर से कुछ के लिए नहीं देख रहा हूँ कि यह कोड काफी धीमा होने के लिए विकसित किया जा रहा है, जिस स्क्रिप्ट में पासवर्ड हैश और स्टोर्स को चलाने के लिए 5-6 सेकंड लगते हैं, और मैंने इसे हैशिंग तक सीमित कर दिया है (अगर मैं इसे हिंगिंग आउट करता हूं, तो 1- 2 सेकेंड)।

यह सबसे सुरक्षित होने की जरूरत नहीं है, मैं एक बैंक के लिए codding (अभी) नहीं कर रहा हूँ, लेकिन मैं निश्चित रूप से WILL सादे-पाठ के रूप में नहीं दुकान पासवर्ड।

+0

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

8

यह बताया जाना चाहिए कि आप एन्क्रिप्ट पासवर्ड नहीं करना चाहते हैं, तो आप हैश यह करना चाहते हैं।

एन्क्रिप्टेड पासवर्ड को डिक्रिप्ट किया जा सकता है, जिससे कोई व्यक्ति पासवर्ड देख सके। हैशिंग एक तरफा ऑपरेशन है ताकि उपयोगकर्ता का मूल पासवर्ड (क्रिप्टोग्राफिक रूप से) चला गया हो।


जो एल्गोरिथ्म के लिए के रूप में आप का चयन करना चाहिए - का उपयोग वर्तमान में स्वीकृत मानक से एक:

  • 256 एच ऐ और जब आप उपयोगकर्ता का पासवर्ड हैश, भी हैश करने के लिए सुनिश्चित हो इसके साथ कुछ अन्य जंक में। उदाहरण के लिए:

    • पासवर्ड: password1
    • नमक: PasswordSaltDesignedForThisQuestion

    उपयोगकर्ता का पासवर्ड के लिए नमक जोड़ें:

    String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion"); 
    
+4

-1 SHA-256 एक पासवर्ड हैशिंग फ़ंक्शन नहीं है और यह इस उद्देश्य के लिए सुरक्षित नहीं है। यह * एक * (पीबीकेडीएफ 2) का हिस्सा हो सकता है, लेकिन यह पूरी तरह से कुछ अलग है। इसके अलावा आपका उदाहरण भ्रामक है, क्योंकि नमक एक चालाक वाक्यांश नहीं होना चाहिए, यह एक यादृच्छिक (प्रति उपयोगकर्ता) मान होना चाहिए। –

7

तुम जो भी करते हैं, अपनी खुद की एन्क्रिप्शन एल्गोरिथ्म नहीं लिखते । ऐसा करने से लगभग गारंटी मिलेगी (जब तक आप एक क्रिप्टोग्राफर नहीं होते) कि एल्गोरिदम में कोई दोष होगा जो क्रैक करने के लिए तुच्छ हो जाएगा।

+0

भले ही आप एक क्रिप्टोग्राफर हों, इसमें शायद एक दोष होगा - एल्गोरिदम 'लोकप्रिय' बनने से पहले समीक्षाओं में वर्षों लगते हैं –

+1

यह इतना सच है। और मुझे डॉन नूथ से इसी तरह की उपेक्षा की याद दिलाता है: बहुत समय पहले उसने यादृच्छिक संख्या जनरेटर लिखने की कोशिश की और कई अस्पष्ट परिचालनों को एक साथ ढेर कर दिया क्योंकि वह सोच सकता था। आखिर में उन्होंने इस विशाल रचना को भाग लिया और यह अनिश्चित काल तक संख्या 4 का उत्पादन किया। (विवरण को रीटेलिंग में बदल दिया गया हो सकता है।) – ndkrempel

2

bcrypt का उपयोग करने पर विचार करें इसका उपयोग लार्वेल जैसे कई आधुनिक ढांचे में किया जाता है।

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