SHA512 बनाम ब्लोफिश और Bcrypt [बंद]


222

मैं हैशिंग एल्गोरिदम को देख रहा हूं, लेकिन एक उत्तर नहीं मिला।

  • Bcrypt ब्लोफिश का उपयोग करता है
  • ब्लोफिश एमडी 5 से बेहतर है
  • क्यू: लेकिन ब्लोफिश SHA512 से बेहतर है?

धन्यवाद..

अपडेट करें:

मैं स्पष्ट करना चाहता हूं कि मैं हैशिंग और एन्क्रिप्शन के बीच अंतर को समझता हूं। मुझे इस तरह से यह सवाल पूछने के लिए प्रेरित किया कि क्या यह लेख है , जहां लेखक "अनुकूली हैशिंग" के रूप में bcrypt को संदर्भित करता है

चूंकि bcrypt ब्लोफिश पर आधारित है, मुझे यह सोचने के लिए प्रेरित किया गया था कि ब्लोफिश एक हैशिंग एल्गोरिथ्म है। यदि यह एन्क्रिप्शन है जैसा कि उत्तर ने इंगित किया है, तो मुझे ऐसा लगता है जैसे इस लेख में जगह नहीं होनी चाहिए। इससे भी बुरी बात यह है कि वह निष्कर्ष निकाल रहा है कि bcrypt सबसे अच्छा है। अब जो मुझे भ्रमित कर रहा है वह यह है कि फ़ॉग क्लास (पासवर्ड हैशिंग के लिए उपयोग किया जाता है) मेरा मानना ​​है कि bcrypt (यानी ब्लोफ़िश, यानी एन्क्रिप्शन) का उपयोग करता है। इस नई जानकारी के आधार पर आप लोग मुझे बता रहे हैं (ब्लोफिश एन्क्रिप्शन है), यह वर्ग गलत लगता है। क्या मैं कुछ भूल रहा हूँ?


2
यह गलत नहीं है; bcrypt कैसे काम करता है और क्यों यह हैश-आधारित "वन-वे" एल्गोरिथ्म के रूप में एक ही उद्देश्य के लिए मेरे जवाब के अपडेट को देखें।
एरिक्सन

3
bcryptबस डिफ़ॉल्ट रूप से एक उच्च "कार्य कारक" है। SHA को माना जाता है ... जब तक कि आप पासश 9 का उपयोग नहीं करते हैं, जो काम कारक के साथ भी उपयोग कर सकते हैं। यह प्रश्न बंद क्यों है? इसका उत्तर अभी तक बहुत महत्वपूर्ण है।

1
प्रश्न में लिंक नीचे है ...............
पेसियर

जवाबों:


320

यह कहना पर्याप्त होगा कि bcrypt या SHA-512 (PBKDF2 जैसे उपयुक्त एल्गोरिथम के संदर्भ में) काफी अच्छा है । और जवाब हां है, या तो एल्गोरिथ्म पर्याप्त सुरक्षित है कि एक उल्लंघन एक कार्यान्वयन दोष के माध्यम से होगा, क्रिप्टोनालिसिस नहीं।

यदि आप यह जानने पर जोर देते हैं कि कौन सा "बेहतर" है, तो SHA-512 को NIST और अन्य द्वारा गहराई से समीक्षा की गई है। यह अच्छा है, लेकिन खामियों को मान्यता दी गई है, जबकि अब शोषक नहीं है, नए हैश एल्गोरिदम के लिए SHA-3 प्रतियोगिता का नेतृत्व किया है। इसके अलावा, ध्यान रखें कि हैश एल्गोरिदम का अध्ययन सिफर की तुलना में "नया" है, और क्रिप्टोग्राफर अभी भी उनके बारे में सीख रहे हैं।

भले ही एक पूरी के रूप में bcrypt को ब्लोफिश के रूप में उतनी जांच नहीं हुई है, मेरा मानना ​​है कि एक अच्छी तरह से समझी गई संरचना के साथ एक सिफर पर आधारित होने के कारण इसे कुछ अंतर्निहित सुरक्षा मिलती है जिसमें हैश-आधारित प्रमाणीकरण का अभाव है। इसके अलावा, SHA-2- आधारित हैश पर हमला करने के लिए एक उपकरण के रूप में आम GPU का उपयोग करना आसान है; इसकी स्मृति आवश्यकताओं के कारण, bcrypt के अनुकूलन के लिए कुछ ऑन-बोर्ड रैम के साथ FPGA जैसे अधिक विशिष्ट हार्डवेयर की आवश्यकता होती है।


नोट: bcrypt एक एल्गोरिथ्म है जो आंतरिक रूप से ब्लोफिश का उपयोग करता है। यह स्वयं एक एन्क्रिप्शन एल्गोरिथ्म नहीं है। यह अपरिवर्तनीय रूप से अस्पष्ट पासवर्ड के लिए उपयोग किया जाता है, जैसे कि हैश फ़ंक्शन का उपयोग "वन-वे हैश" करने के लिए किया जाता है।

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

यदि कोई व्यक्ति पासवर्ड प्रदान करता है जो पासवर्ड तालिका में संग्रहीत मूल्य पर हैश करता है, तो वे प्रमाणित होते हैं। विशेष रूप से, हैश फ़ंक्शन की अपरिवर्तनीयता के कारण, यह माना जाता है कि उपयोगकर्ता कोई हमलावर नहीं है, जिसने हैश को पकड़ लिया है और काम करने वाले पासवर्ड को खोजने के लिए इसे उलट दिया है।

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

यहां क्रिप्टोग्राफी को तोड़ने के लिए, एक हमलावर को सिफरटेक्स्ट से कुंजी को पुनर्प्राप्त करना होगा। इसे एक "ज्ञात-प्लेटेक्स्ट" हमला कहा जाता है, क्योंकि हमले से पता चलता है कि जादुई स्ट्रिंग को एन्क्रिप्ट किया गया है, लेकिन उपयोग की गई कुंजी नहीं। ब्लोफिश का बड़े पैमाने पर अध्ययन किया गया है, और अभी तक किसी भी हमले का पता नहीं चला है जो एक हमलावर को एक ज्ञात प्लेटेक्स्ट के साथ कुंजी खोजने की अनुमति देगा।

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

यह मानते हुए कि इंद्रधनुष की तालिकाओं को नमक के उचित उपयोग से विफल कर दिया गया है, कोई भी अपरिवर्तनीय कार्य हमलावर को परीक्षण-और-त्रुटि में कम करता है। और जिस दर से हमलावर परीक्षण कर सकता है वह उस अपरिवर्तनीय "हैश" एल्गोरिथम की गति से निर्धारित होता है। यदि किसी हैश फ़ंक्शन के एकल पुनरावृत्ति का उपयोग किया जाता है, तो एक हमलावर उपकरण का उपयोग करके प्रति सेकंड लाखों परीक्षण कर सकता है, जिसकी लागत $ 1000 के आदेश पर होती है, कुछ महीनों में 8 वर्णों तक के सभी पासवर्ड का परीक्षण करते हैं।

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

तो, bcrypt के मेरी सिफारिश 1 मान्यताओं से उपजी है) कि एक ब्लोफिश हैश कार्यों के SHA-2 परिवार के समान है, और 2) है कि cipanalytic तरीके cipaners के लिए हैश कार्यों के लिए की तुलना में बेहतर विकसित कर रहे हैं।


4
+1 महान पोस्ट। लेकिन मेरे दो सवाल हैं। ब्लोफिश को एक दशक से भी अधिक पहले दो बार बदल दिया गया था, क्या एक प्रणाली को आधुनिक आदिम का उपयोग नहीं करना चाहिए? साथ ही हजारों पुनरावृत्तियां वेब एप्लिकेशन जैसे सिस्टम में बेकार लगती हैं जहां कई लोग किसी भी समय लॉग इन कर रहे हैं। उदाहरण के लिए PBKDF2 केवल उन परिदृश्यों में लागू किया जाता है जब 1 व्यक्ति एक समय पर लॉग इन कर रहा हो, जैसे कि एक एन्क्रिप्टेड फाइलसिस्टम के लिए एक string2key फ़ंक्शन। मैं कहावत का उपयोग करता हूं "यदि हमलावर को उठाने के लिए यह बहुत भारी है, तो यह आपके सर्वर के लिए बहुत भारी है।" तुम क्या सोचते हो?
किश्ती

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

15
यदि आप किसी हैश फ़ंक्शन के विनिर्देश को देखते हैं, तो आपको "नमक" के बारे में कुछ भी नहीं दिखाई देगा। एकमात्र पैरामीटर पचाने के लिए संदेश है। किसी भी सिफर के विनिर्देश की समीक्षा करें, और आप देखेंगे कि फ़ंक्शन एक कुंजी के साथ मानकीकृत है। " हैश " जो एक हैश के साथ मिलकर इस्तेमाल किया जा सकता है (या नहीं ) बस संदेश का हिस्सा है। हैश एल्गोरिथ्म को इसकी आवश्यकता नहीं है, यह विशेष रूप से व्यवहार नहीं करता है, और इसे शेष संदेश से अलग नहीं कर सकता है। इसलिए, जबकि यह सच है कि संदेश अक्सर नमस्कार द्वारा बदल दिए जाते हैं, एक दिया गया संदेश केवल एक हैश उत्पन्न करता है।
इरिकसन

1
@Andre D एक पंचर के रूप में मैं उन अनुप्रयोगों की रिपोर्ट करता हूं जो खातों को लॉक करते हैं, और मैं उन अनुप्रयोगों की रिपोर्ट करता हूं जो जानवर बल के खिलाफ नहीं रोकते हैं। आदर्श रूप से एक अपमानजनक आईपी पते को एक कैप्चा को हल करना होगा, इसके अलावा यदि उपयोगकर्ता नाम लक्षित किया जाता है (भले ही वह उपयोगकर्ता नाम मौजूद नहीं है) तो उस खाते को प्रमाणित करने से पहले एक कैप्चा को हल करना चाहिए। प्रति मिनट X का रैलिमिट लागू करना भी स्वीकार्य है। संबंधित: security.stackexchange.com/questions/25444/...
किश्ती

2
@rook: जबकि रैलिमिटिंग एप्लिकेशन अच्छा अभ्यास है आप इस मामले में मान सकते हैं कि डेटाबेस को डाउनलोड किया गया है और उन उपकरणों पर रखा गया है जिनकी दर सीमा आपके द्वारा वर्णित नहीं है।
एलर्ट वैन कोपरेन

50

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

आप निश्चित रूप से SHA-512 के आसपास एक सुरक्षित पासवर्ड हैशिंग एल्गोरिथ्म का निर्माण कर सकते हैं, इसे PHK के MD5 एल्गोरिदम के काम करने के तरीके की तरह हजारों बार पुनरावृत्त कर सकते हैं। उलरिच ड्रेपर ने ठीक यही किया , ग्लिबक के क्रिप्ट () के लिए। ऐसा करने का कोई विशेष कारण नहीं है, हालांकि, यदि आपके पास पहले से ही एक परीक्षण किया गया bcrypt कार्यान्वयन उपलब्ध है।


3
उम्मीद है कि मेरा जवाब स्पष्ट करता है कि एक एकल हैश पुनरावृत्ति पर्याप्त नहीं है (दुख की बात है, यहां तक ​​कि ज्ञान के इस अल्पविकसित स्तर को भी नहीं माना जा सकता है)। "यदि हैश फ़ंक्शन के एक एकल पुनरावृत्ति का उपयोग किया जाता है, तो एक हमलावर उपकरण का उपयोग करके प्रति सेकंड लाखों परीक्षण कर सकता है, जो कि $ 1000 के आदेश पर खर्च होता है, कुछ महीनों में 8 वर्णों तक के सभी पासवर्डों का परीक्षण करता है। यदि हां, तो पाचन आउटपुट। हजारों बार 'फीड बैक' किया जाता है, उस हार्डवेयर पर पासवर्ड के एक ही सेट का परीक्षण करने में सैकड़ों साल लगेंगे। Bcrypt ने पुनरावृति द्वारा 'कुंजी को मजबूत करने' के प्रभाव को प्राप्त किया ... "
इरिकसन

@ हेरिकसन: हां, हालांकि मुझे लगता है कि आपने वहां की परत को दबा दिया होगा। मैं जिस बिंदु को बनाने की कोशिश कर रहा था वह यह है कि bcrypt और SHA-512 की सीधी तुलना वास्तव में प्रासंगिक नहीं है, क्योंकि एक एक प्रमुख व्युत्पन्न कार्य है और दूसरा सिर्फ एक क्रिप्टोग्राफिक आदिम है, जो अपने आप में अनुपयुक्त है।
कैफे


1
SHA-512 के हजारों राउंड का उपयोग करना अनसुना नहीं है और विभिन्न cryptकार्यान्वयनों में इसका समावेश दिया है (PHP में जो मैं उपयोग करता हूं), जब मैंने मूल प्रश्न पढ़ा तो मैंने भी मान लिया कि ओपी का मतलब क्या है जब उसने SHA-512 के बारे में पूछा - वह वास्तव में SHA-512 बनाम bcrypt के हजारों चक्करों का जिक्र कर रहा था जो सैकड़ों या हजारों पुनरावृत्तियों का उपयोग करता है।
thomasrutter 5

33

ब्लोफिश एक हैशिंग एल्गोरिथ्म नहीं है। यह एक एन्क्रिप्शन एल्गोरिथ्म है। इसका मतलब यह है कि आप ब्लोफिश का उपयोग करके कुछ एन्क्रिप्ट कर सकते हैं, और फिर बाद में आप इसे सादे पाठ में वापस डिक्रिप्ट कर सकते हैं।

SHA512 एक हैशिंग एल्गोरिथ्म है। इसका मतलब है कि (सिद्धांत में) एक बार जब आपके पास इनपुट है तो आप मूल इनपुट को फिर से वापस नहीं पा सकते हैं।

वे 2 अलग-अलग चीजें हैं, जिन्हें विभिन्न कार्यों के लिए उपयोग करने के लिए डिज़ाइन किया गया है। "SHA512 की तुलना में ब्लोफ़िश बेहतर है" का कोई 'सही' उत्तर नहीं है। आप पूछ सकते हैं "सेब कंगारुओं से बेहतर हैं?"

यदि आप इस विषय पर कुछ और लिंक यहाँ पढ़ना चाहते हैं:


18
मुझे लगता है कि यह सवाल पासवर्ड के लिए अपरिवर्तनीय संरक्षण के रूप में bcrypt का उपयोग करने के बारे में है, जितना कि हैशिंग उस उद्देश्य के लिए उपयोग किया जाता है।
इस्कॉन

3
@erickson पाठ "Q: लेकिन ब्लोफिश SHA512 से बेहतर है?" मेरे लिए बहुत स्पष्ट लगता है और दिखाता है कि ओपी 2 एल्गोरिदम के बीच के अंतर को नहीं समझता है
ग्लेन

1
यहां ओ.पी. दरअसल, ग्लेन की इस आस्था पर आधारित है कि ब्लोफिश एक एन्क्रिप्शन एल्गोरिथ्म है (जो मुझे समझ में हैशिंग से अलग है), मुझे अब एहसास हुआ कि मेरा सवाल हाँ था। हालांकि अब यह भ्रामक है कि फ़ॉग क्लास (पासवर्ड हैशिंग के लिए उपयोग किया जाता है) मेरा मानना ​​है कि bcrypt (यानी ब्लोफ़िश, यानी एन्क्रिप्शन) का उपयोग करता है। अगर ब्लोफिश एन्क्रिप्शन है, तो कैसे आया हैपास पासवर्ड का उपयोग करता है, यह मेरे लिए एक दोष की तरह लगता है, नहीं? क्या मैं कुछ भूल रहा हूँ?
क्रिस

2
हालाँकि यह सवाल पूछता है कि कौन से सेब और कंगारू एक विशिष्ट कार्य के लिए बेहतर हैं। ब्लोफिश हैश की तुलना में शेक की तुलना में एक बेहतर हैशिंग फ़ंक्शन है। श के अधिकांश कार्यान्वयन मैंने देखे हैं बहुत तेज़ हैं। आप पासवर्ड हैशिंग के लिए एक धीमी एल्गोरिथ्म चाहते हैं।
जॉन निकोलस

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

4

ब्लोफिश MD5 या SHA512 से बेहतर नहीं है, क्योंकि वे विभिन्न उद्देश्यों की पूर्ति करते हैं। MD5 और SHA512 हैशिंग एल्गोरिदम हैं, ब्लोफ़िश एक एन्क्रिप्शन एल्गोरिथम है। दो पूरी तरह से अलग क्रिप्टोग्राफिक फ़ंक्शन।


2

मैं उलरिक ड्रेपर के SHA-256 / SHA-512 आधारित क्रिप्ट कार्यान्वयन की सिफारिश करूंगा।

हमने इन एल्गोरिदम को जावा में पोर्ट किया, और आप उनमें से एक स्वतंत्र रूप से लाइसेंस प्राप्त संस्करण पा सकते हैं ftp://ftp.arlut.utexas.edu/java_hashes/

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


PWDTK sourceforge.net/projects/pwdtknet HMAC-SHA512 का उपयोग करता है, हालांकि यह "पुनरावृत्ति" उर्फ ​​की स्ट्रेटिंग बनाने के लिए कई पुनरावृत्तियों पर ऐसा करता है जैसा कि अन्य लोग यहां बात कर रहे हैं। BCrypt एक SHA-512 से बेहतर है जैसा कि उल्लेख किया गया है, हालाँकि यदि आप PBKDF2 जैसी किसी चीज़ में SHA-512 का उपयोग करते हैं तो आप अच्छी तरह से सुरक्षित हैं (जब तक आप एक बड़े क्रिप्टो-रैंडम नमक का उपयोग कर रहे हैं और समय को बल देने के लिए पर्याप्त पुनरावृत्तियों का उपयोग कर रहे हैं एक इंद्रधनुष तालिका बनाएं) मेरे द्वारा अभी-अभी बनाया गया एपीआई मेरे द्वारा बनाया गया है और क्या आप .NET में चाहते हैं, अगर ऐसा है तो आप (भविष्य के पाठकों के लिए लाभ के लिए) विकसित कर रहे हैं
thashiznets

2

मैं अभी इस पार आया:

http://codahale.com/how-to-safely-store-a-password/

क्या इस लेख का लेखक गलत हो सकता है?


2
ऐसा नहीं है कि वह गलत है, यह सिर्फ इतना है कि वह हैश एल्गोरिदम को लागू करने के बारे में साहित्य के धन की अनदेखी कर रहा है। जैसा कि bcrypt करता है, उन्हें मुख्य व्युत्पत्ति कार्यों में पुनरावृत्त किया जाना चाहिए।
एरिकसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.