c# क्या सी#में उपयोग करने के लिए बीसीआरपीटी एक अच्छा हैशिंग एल्गोरिदम है? मैं इसे कहाँ पा सकता हूँ?




hash bcrypt (2)

आपको .NET में BCrypt का उपयोग नहीं करना चाहिए । आपको पीबीकेडीएफ 2 का उपयोग करना चाहिए जैसा कि .NET फ्रेमवर्क कार्यान्वयन में बनाया गया है। एनआईएसटी द्वारा अनुशंसित एल्गोरिदम होने के साथ ही यह .NET में एकमात्र स्वतंत्र रूप से उपलब्ध क्रिप्टोग्राफिक रूप से सत्यापित कार्यान्वयन है।

StackId पहले बीयर्रीप्ट का इस्तेमाल किया और इस कारण से पीबीकेडीएफ 2 में स्थानांतरित हो गया:

उन उत्सुक लोगों के लिए, हम पीबीकेडीएफ 2 के साथ हैशिंग पासवर्ड हैं। रिलेवेंट कोड यहां है ( http://code.google.com/p/stackid/source/browse/OpenIdProvider/Current.cs#1135 ), संकेतों की कुछ परतों के माध्यम से। पहले के पुनरावृत्ति में, हम बीसीआरपीटी का उपयोग कर रहे थे; लेकिन पीबीकेडीएफ 2 में स्थानांतरित हो गया क्योंकि यह .NET ढांचे में बनाया गया है, जबकि बीसीआरपीटी को हमें कार्यान्वयन (कोई छोटा उपक्रम) सत्यापित करने की आवश्यकता नहीं होगी।

केविन मॉन्ट्रोज़, 27 मई 2011

(गिटहब पर अपडेट किया गया लिंक)

संपादित करें: क्रिप्टोग्राफिक शब्दों में सत्यापित किए गए अर्थ को आसानी से समझ में नहीं आता है, एक सत्यापित कार्यान्वयन का अर्थ है कि यह क्रिप्टोग्राफिक रूप से त्रुटि के बिना कार्यान्वित किया गया है। इसकी लागत आसानी से $ 20,000 या उससे अधिक तक पहुंच सकती है। मुझे यह याद है जब मैं ओपनएसएसएल पर शोध कर रहा था और पढ़ा था कि उन्होंने कहा कि उन्होंने पूरी सत्यापन प्रक्रिया पूरी नहीं की है, लेकिन अगर आपको पूरी तरह से सत्यापित करने की आवश्यकता है कि वे आपको इसके लिए सही रास्ते बता सकते हैं और संबंधित लागतों का उल्लेख कर सकते हैं। कुछ सरकारी आवश्यकताओं में सत्यापित एन्क्रिप्शन एल्गोरिदम के लिए जनादेश शामिल हैं।

.NET में bcrypt कार्यान्वयन सत्यापित नहीं किया गया है। एक असत्यापित एन्क्रिप्शन कार्यान्वयन का उपयोग करके आप पूरी तरह से निश्चित नहीं हो सकते हैं कि इसमें कोई जानबूझकर दुर्भावनापूर्ण दोष नहीं हैं जैसे कि बैकडोर को एन्क्रिप्टेड या अनजाने कार्यान्वयन दोषों की अनुमति देता है जिसके परिणामस्वरूप क्रिप्टोग्राफ़िक रूप से असुरक्षित डेटा होता है।

2014 संपादित करें: सत्यापित क्रिप्टोप्राफिकल एल्गोरिदम का उपयोग करने की अनिवार्यता पर सवाल उठाए गए किसी भी व्यक्ति के लिए ओपनएसएसएल में शोषित दिल से बने हैक द्वारा किए गए विनाश को देखें । एक असत्यापित कार्यान्वयन का उपयोग करने की लागत है। यह सुरक्षित है .... जब तक आपको पता न लगे कि कोई भी व्यक्ति आपके सर्वर की पूरी मेमोरी सामग्री को पढ़ सकता है।

हार्टबलेड, रॉबिन सेगेलमैन की शुरुआत में हुए परिवर्तन के लेखक ने कहा कि वह "एक चर युक्त एक चर को मान्य करने से चूक गए" और दोषपूर्ण कार्यान्वयन को प्रस्तुत करने के किसी भी इरादे से इंकार कर दिया। हार्टबलेड के प्रकटीकरण के बाद, सेगेलमैन ने दूसरे पहलू पर ध्यान केंद्रित करने का सुझाव दिया, जिसमें कहा गया था कि ओपनएसएसएल की समीक्षा पर्याप्त लोगों द्वारा नहीं की जाती है।

यह एक असत्यापित कार्यान्वयन की परिभाषा है। यहां तक ​​कि सबसे छोटा दोष भी पूरी सुरक्षा को अपंग कर सकता है।

2015 संपादित करें: अनुशंसित आधारित भाषा को हटा दिया गया और पूर्ण के साथ प्रतिस्थापित किया गया। वंशावली के लिए एम्बेडेड मूल केविन मॉन्ट्रोज़ टिप्पणी।

मैंने पढ़ा है कि पासवर्ड धोने पर, कई प्रोग्रामर बीसीक्रिप्ट एल्गोरिदम का उपयोग करने की सलाह देते हैं।

मैं सी # में प्रोग्रामिंग कर रहा हूं और सोच रहा हूं कि क्या कोई बीसीआरपीटी के लिए एक अच्छा कार्यान्वयन जानता है? मुझे यह पृष्ठ मिला, लेकिन मुझे वास्तव में पता नहीं है कि यह फर्जी है या नहीं।

पासवर्ड हैशिंग योजना चुनते समय मुझे क्या पता होना चाहिए? क्या बीसीआरपीटी एक 'अच्छा' कार्यान्वयन है?


सबसे पहले, कुछ शर्तें जो महत्वपूर्ण हैं:

Hashing - एक स्ट्रिंग लेने और पात्रों के अनुक्रम का निर्माण करने का कार्य जिसे मूल स्ट्रिंग पर वापस नहीं किया जा सकता है।

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

इंद्रधनुष तालिका - एक लुकअप टेबल जिसमें विशिष्ट हैशिंग एल्गोरिदम में वर्णित वर्णों की सभी भिन्नताएं शामिल हैं।

Salt - एक ज्ञात यादृच्छिक स्ट्रिंग को मूल स्ट्रिंग में लगाए जाने से पहले जोड़ा जाता है।

.NET Framework के लिए, Bcrypt में अभी तक एक सत्यापित संदर्भ कार्यान्वयन नहीं है। यह महत्वपूर्ण है क्योंकि मौजूदा कार्यान्वयन में गंभीर त्रुटियां हैं या नहीं, इसका कोई तरीका नहीं है। आप यहाँ .NET के लिए BCrypt का कार्यान्वयन प्राप्त कर सकते हैं । मुझे यह जानने के लिए क्रिप्टोग्राफी के बारे में पर्याप्त जानकारी नहीं है कि यह एक अच्छा या बुरा कार्यान्वयन है या नहीं। क्रिप्टोग्राफी एक बहुत गहरा क्षेत्र है। अपना खुद का एन्क्रिप्शन एल्गोरिदम बनाने का प्रयास न करें । गंभीरता से।

यदि आप अपनी पासवर्ड सुरक्षा (श्वास) को लागू करने जा रहे हैं, तो आपको कई चीजें करने की आवश्यकता है:

  1. एक अपेक्षाकृत सुरक्षित हैश एल्गोरिदम का प्रयोग करें।
  2. प्रत्येक पासवर्ड को धोने से पहले नमक करें।
  3. प्रत्येक पासवर्ड के लिए एक अद्वितीय और लंबा नमक का प्रयोग करें, और नमक को पासवर्ड के साथ स्टोर करें।
  4. मजबूत पासवर्ड की आवश्यकता है

दुर्भाग्यवश, यहां तक ​​कि यदि आप यह सब करते हैं, तो एक निर्धारित हैकर अभी भी संभावित रूप से पासवर्ड को समझ सकता है, यह उसे वास्तव में एक लंबा समय लगेगा। यह आपका मुख्य दुश्मन है: समय

Bcrypt एल्गोरिदम काम करता है क्योंकि यह एमडी 5 की तुलना में हैश को पासवर्ड के लिए लंबे समय तक पांच ऑर्डर लेता है ; (और अभी भी एईएस या एसएचए -512 से काफी लंबा)। यह हैकर को आपके पासवर्ड देखने के लिए इंद्रधनुष तालिका बनाने के लिए बहुत अधिक समय बिताने के लिए मजबूर करता है, जिससे आपके पासवर्ड को हैक होने की खतरे में पड़ने की संभावना कम हो जाती है।

यदि आप अपने पासवर्ड को नमस्कार और हैशिंग कर रहे हैं, और प्रत्येक नमक अलग है, तो एक संभावित हैकर को नमक के प्रत्येक बदलाव के लिए इंद्रधनुष तालिका बनाना होगा , केवल एक नमकीन + हैश पासवर्ड के लिए इंद्रधनुष तालिका रखना होगा। इसका मतलब है कि यदि आपके पास 1 मिलियन उपयोगकर्ता हैं, तो हैकर को 1 मिलियन इंद्रधनुष सारणीएं उत्पन्न करनी होंगी। यदि आप प्रत्येक उपयोगकर्ता के लिए एक ही नमक का उपयोग कर रहे हैं, तो हैकर को केवल आपके सिस्टम को सफलतापूर्वक हैक करने के लिए 1 इंद्रधनुष तालिका उत्पन्न करनी होगी।

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

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

अन्य संसाधन:

  1. जेफ एटवुड: .NET एन्क्रिप्शन सरलीकृत (हैशिंग के एक सिंहावलोकन के लिए बढ़िया)
  2. जेफ एटवुड: मैंने अभी आपके अंदर लॉग इन किया है
  3. जेफ एटवुड: आप शायद पासवर्ड गलत तरीके से संग्रहीत कर रहे हैं
  4. जेफ एटवुड: स्पीड हैशिंग

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





bcrypt.net