2012-07-28 45 views
5

पृष्ठभूमि:बीक्रिप्ट (4) (= 4 पुनरावृत्तियों) बनाम SHA512 या प्रति पासवर्ड अद्वितीय नमक के साथ कुछ अलग?

मैं अपने छोटे साइट है, जो एक ऑनलाइन php आवेदन है, जो मैं भविष्य में ज्यादा उपयोगकर्ता गतिविधि सहन करने में सक्षम होने के लिए निर्माण करना चाहते हैं के लिए एक लॉगिन जोड़ना चाहते हैं।

लाइट ओपेनआईड लागू करने में आगे देखने से पहले मैं एक सामान्य लॉगिन जोड़ना चाहता हूं। जिस पुस्तक से मैं सीख रहा था उसे हेड फर्स्ट PHP & माईएसक्यूएल (2008) कहा जाता है और अध्याय का अंतिम कोड mysql क्वेरी के हिस्से के रूप में SHA('$user_password') का उपयोग करता है।

जैसा कि मैंने जेफ एटवुड के लेखन में रुचि ले रहा scrypt के रूप में bcrypt से अच्छी तरह परिचित हूँ। लेकिन देखा गया है कि स्क्रिप का कोई PHP कार्यान्वयन नहीं है और इसे चलाने के लिए कोई समर्पित सर्वर नहीं है, मैंने कम से कम अब तक bcrypt को लागू करने का निर्णय लिया है।

हालांकि मैं पूरी तरह से अनुभवहीन नहीं कर रहा हूँ, मुझे पता है मैं बाहर देखना चाहिए मेरी बहुत विनम्र होस्टिंग संसाधनों overextend करने के लिए नहीं। संसाधनों से संबंधित किसी और चीज से पहले PHP एप को हमेशा पहले आना चाहिए।

Andrew Moore's method (कैसे php 5.2.17 जो मेरे मेजबान का उपयोग करता है पर इसे लागू करने को देखने के लिए हालांकि मैं होगा) अच्छा लगता है और यह हार्डवेयर की गति के लिए एक टिप के साथ आता है:

आप एक नंबर का चयन करना चाहिए राउंड के परिणामस्वरूप काम के 200-250 एमएस में परिणाम। बीसीआरपी सुरक्षित क्यों है इसका एक कारण यह है कि यह धीमा है। आप को यह सुनिश्चित करना चाहिए कि उस विशेषता को बनाए रखने वाले कई राउंड हों। - एंड्रयू मूर

अन्य उपयोगकर्ता से कहा गया है उसे चल microtime() के लिए Bcrypt के लिए 0.314 देता है कि (9) है, जो इस प्रकार के पास इष्टतम किया जाएगा।

प्रश्न:

देखा के रूप में मैं सिर्फ अपने निपटान में बहुत विनम्र संसाधन हैं और मैं php एप्लिकेशन को स्वयं के लिए सबसे छोड़ने उनमें से सबसे अच्छा करना चाहते हैं,, मैं अभी भी बेहतर बंद कर रहा हूँ किसी और चीज के बजाय Bcrypt (4) का उपयोग कर?

Bcrypt (4) सच रिटर्न लगभग तुरंत, लेकिन यह अभी भी रखता है विशेषता मूर बारे में बात करती है? (वह हिस्सा विषय में रैम यह मुश्किल है कि बनाता है GPU bruteforcing के लिए होगा?) या SHA512 होगा या कुछ और वास्तव में तेजी से लेकिन इस बिंदु पर अधिक सुरक्षित हो?

मैं Bcrypt (4) इस स्थिति में जीतने के लिए उम्मीद थी, लेकिन नरक मैं सही पता है? : पी

+0

5.2 प्राचीन है। या तो अपने मेजबान पर चिल्लाओ, या प्रतिस्थापित करें। –

+0

यह आश्चर्यजनक रूप से सस्ते होने के बावजूद यह एक बहुत ही सभ्य मेजबान है, मुझे लगता है कि यह बदलाव मेजबान पूरी तरह से, एक आभासी समर्पित सर्वर के लिए अपग्रेड का अधिक है। सुविधा के लिए कुछ कौन सा है। – Suzy

उत्तर

5

सुरक्षा हमेशा आप जो सुरक्षित करने की कोशिश कर रहे हैं उसके बारे में है।

आप अपनी सुरक्षा के बारे में की तुलना में अपने संसाधनों के बारे में अधिक चिंतित हैं, bcrypt (2) पहले से ही overkill है। कोई हैकर कभी भी सामान्य एप्लिकेशन के लिए इसे तोड़ने की कोशिश नहीं करेगा, जिसमें लिंकडइन और कई अन्य लोगों जैसे आसान लक्षित साइटें होंगी, जो केवल एक ही पुनरावृत्ति के साथ शा परिवार से कार्यों का उपयोग करती हैं, और अनसाल्टेड होती हैं। वे 'कम लटकते फल' के लिए जाएंगे। या वे आपके एप्लिकेशन को हैक करने की कोशिश कर सकते हैं, बस पासवर्ड एन्क्रिप्शन भाग में नहीं।

SHA-512 बहुत SHA-1 की तुलना में अधिक सुरक्षित रूप में पासवर्ड हैशिंग एल्गोरिथ्म [1], यह उस उद्देश्य के लिए डिज़ाइन नहीं किया गया है नहीं है।हालांकि वे अभी भी सुरक्षित क्रिप्टोग्राफिक एल्गोरिदम बनाने के लिए प्राइमेटिव के रूप में उपयोग किए जा सकते हैं, लेकिन ऐसा कुछ भी नहीं है जो किसी एकल व्यक्ति को करना चाहिए। सुरक्षित माना जाने के लिए, क्रिप्टो एल्गोरिदम को पीयर की समीक्षा करने के लिए सार्वजनिक होना चाहिए, और समय की परीक्षा उत्तीर्ण करनी होगी। और जाहिर है, उन चीज़ों के लिए डिज़ाइन किया जाना चाहिए जिन्हें आप उनका उपयोग करने जा रहे हैं। एमडी 5, एसएचए-एक्स, आदि क्रिप्टोग्राफिक एल्गोरिदम हैं, लेकिन पासवर्ड संग्रहित करने के लिए डिज़ाइन नहीं किए गए थे।

बस अपने bcrypt में राउंड जोड़ें या हटाएं। इस मामले में मैं 1 या 2 का उपयोग करूंगा। यह भी ध्यान रखें कि 1 राउंड! = 1 पुनरावृत्ति। वे तेजी से बढ़ रहे हैं। यदि आप कैसे काम करते हैं, इस बारे में पढ़ते हैं, तो आप देखेंगे कि पुनरावृत्तियों की तुलना में इसके लिए बहुत कुछ है। उदाहरण के लिए, आपने 'प्रति पासवर्ड अद्वितीय नमक' का उल्लेख किया है। Bcrypt पहले से ही है।

[1] अन्य बातों के लिए यह स्पष्ट रूप से अधिक सुरक्षित है

+0

मैंने लॉग भाग के विवरण पर अधिक ध्यान नहीं दिया, क्योंकि मुझे लगता है कि यह 4 $ log_2_rounds' के लिए खड़ा है जो "राउंड गिनती का लॉग" है (जैसा मैथ्यू फ्लैंचन ने टिप्पणियों में लिखा था)। और हाँ मुझे पता है कि नमक पहले से ही बीक्रिप्ट में जेनरेटेड हैश का एक अभिन्न हिस्सा है। – Suzy

+0

@Suzy Well मुझे खेद है कि आपको मेरा जवाब पसंद नहीं आया, लेकिन आप bcrypt से बेहतर कुछ नहीं ढूंढ पाएंगे। आप पहले से ही स्क्रिप जानते हैं, लेकिन आप इसका लाभ नहीं उठा पाएंगे।और यदि आप कर सकते हैं, तो इसके बारे में चिंता करने में कोई बात नहीं है। – ChocoDeveloper

+0

मैंने नहीं कहा था कि मुझे आपका जवाब पसंद नहीं आया: पी यह जानकारीपूर्ण है, मैं तुरंत पहले जवाब पर स्वीकार कर रहा हूं। – Suzy

2

तुम बस नहीं bcrypt की प्रणाली की सुरक्षा पर गौर करना चाहिए।

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

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

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

+0

हाँ मैं पहले से ही सुरक्षित पासवर्ड बनाने में उपयोगकर्ताओं को मजबूर करने के लिए कुछ स्थापित करने की योजना बना रहा था। और यह भी एक छोटे पैराग्राफ बनाने के बारे में बताते हुए कि यह क्यों मायने रखता है और सेमी-पासफ्रेज़ का सुझाव देता है। =) – Suzy

+0

मैं क्लाइंट साइड हैशिंग में बाद में देखूंगा, मुझे यकीन नहीं है कि धीमी जावास्क्रिप्ट में इसे धीमा जावास्क्रिप्ट में चलाने के अलावा अन्य डाउनसाइड्स हैं, जो संभवतः बहुत धीमी मशीन पर है, जो शायद इसे स्पीड टेस्ट की आवश्यकता होती है। लेकिन यह उपयोगकर्ता को अपनी खुद की पुनरावृत्ति गिनती चुनने का विकल्प दे सकता है! (सर्वर से कुछ तनाव लेने के साथ!) – Suzy

+0

यद्यपि "जानकारी की मात्रा सीमित करें" के साथ आपका क्या मतलब है? क्या चुने गए समय अंतराल के लिए छोड़े गए प्रयासों की मात्रा को संवाद करना गलत होगा? पसंद है: "आपके पास 4 प्रयास बाकी हैं, उसके बाद आपको दोबारा प्रयास करने से पहले 1 घंटे का इंतजार करना होगा।" – Suzy

1

या SHA512 या वास्तव में कुछ और वास्तव में तेज़ लेकिन अधिक सुरक्षित होगा? धीमी अपने एल्गोरिथ्म (अन्य एल्गोरिदम के सापेक्ष) है, यह कठिन के लिए है -

धीमापन पासवर्ड हैशिंग एल्गोरिदम (जिनमें से, bcrypt है, लेकिन SHA-512 अपने आप में नहीं है) की एक प्रमुख विशेषता है हैश पर आधारित बलपूर्वक बल पासवर्ड के लिए एक हमलावर। इस परिप्रेक्ष्य से, सुरक्षित रूप से पासवर्ड संग्रहीत करने के उद्देश्य से SHA-512 का एक राउंड bcrypt से कम उपयुक्त है, क्योंकि यह काफी तेज़ है।

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

अच्छी खबर यह है कि उपयोगकर्ता आमतौर पर अन्य कार्यों की तुलना में आपके लॉगिन फ़ंक्शन का उपयोग करते हैं, इसलिए धीमे/संसाधन गहन लॉगिन फ़ंक्शन का प्रभाव आम तौर पर एक बड़ी समस्या नहीं है।