[security] सर्वोत्तम व्यवहार: सलाखों और काली मिर्च पासवर्ड?


Answers

मुट्ठी हमें एक काली मिर्च के सही लाभ के बारे में बात करनी चाहिए:

  • काली मिर्च एक विशेष हमले में एक शब्दकोश हमले से कमजोर पासवर्ड की रक्षा कर सकती है, जहां हमलावर के पास डेटाबेस (हैश युक्त) तक पहुंच-पहुंच है लेकिन मिर्च के साथ स्रोत कोड तक पहुंच नहीं है।

एक सामान्य परिदृश्य एसक्यूएल-इंजेक्शन होगा, बैकअप को हटा दिया जाएगा, सर्वर को त्याग दिया जाएगा ... ये स्थितियां असामान्य नहीं हैं जितनी यह लगता है, और अक्सर आपके नियंत्रण में नहीं (सर्वर-होस्टिंग)। यदि तुम प्रयोग करते हो...

  • प्रति पासवर्ड एक अद्वितीय नमक
  • बीसीआरपीटी की तरह एक धीमी हैशिंग एल्गोरिदम

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

दूसरा सवाल यह है कि मिर्च को कैसे लागू किया जाए ?

एक काली मिर्च लगाने के लिए अक्सर अनुशंसित तरीका हैश फ़ंक्शन में पास करने से पहले पासवर्ड और काली मिर्च को गठबंधन करना है:

$pepperedPassword = hash_hmac('sha512', $password, $pepper);
$passwordHash = bcrypt($pepperedPassword);

यद्यपि एक और बेहतर तरीका है हालांकि:

$passwordHash = bcrypt($password);
$encryptedHash = encrypt($passwordHash, $serverSideKey);

यह न केवल सर्वर साइड रहस्य जोड़ने की अनुमति देता है, यह $ ServerSideKey का आदान-प्रदान करने की भी अनुमति देता है, यह आवश्यक होना चाहिए। इस विधि में थोड़ा और काम शामिल है, लेकिन यदि कोड एक बार मौजूद है (पुस्तकालय) इसका उपयोग करने का कोई कारण नहीं है।

Question

मैं एक चर्चा में आया जिसमें मैंने सीखा कि मैं जो कर रहा था वह वास्तव में पासवर्ड को सलाम नहीं कर रहा था, लेकिन उन्हें मिर्च कर रहा था, और मैंने तब से दोनों को एक समारोह के साथ करना शुरू कर दिया है:

hash_function($salt.hash_function($pepper.$password)) [multiple iterations]

चुने हुए हैश एल्गोरिदम को अनदेखा करना (मैं चाहता हूं कि यह लवण और मिर्च की चर्चा हो और विशिष्ट एल्गोरिदम नहीं, लेकिन मैं एक सुरक्षित उपयोग कर रहा हूं), क्या यह एक सुरक्षित विकल्प है या मुझे कुछ अलग करना चाहिए? उन शर्तों के लिए अपरिचित लोगों के लिए:

  • नमक एक यादृच्छिक रूप से जेनरेट किया गया मान आमतौर पर डेटाबेस में स्ट्रिंग के साथ संग्रहीत होता है ताकि पासवर्ड को क्रैक करने के लिए हैश टेबल का उपयोग करना असंभव हो सके। चूंकि प्रत्येक पासवर्ड का अपना नमक होता है, इसलिए उन्हें क्रैक करने के लिए सभी को क्रूर-मजबूर होना चाहिए; हालांकि, चूंकि डेटाबेस में नमक को पासवर्ड हैश के साथ संग्रहीत किया जाता है, इसलिए डेटाबेस समझौता दोनों का मतलब है।

  • एक काली मिर्च एक साइट-व्यापी स्थिर मूल्य डेटाबेस से अलग से संग्रहीत होता है (आमतौर पर एप्लिकेशन के स्रोत कोड में हार्ड-कोडित) जिसका उद्देश्य गुप्त होना है। इसका उपयोग किया जाता है ताकि डेटाबेस का समझौता पूरे एप्लिकेशन की पासवर्ड तालिका को क्रूर-बलवान नहीं बन सके।

क्या कोई ऐसी चीज है जो मुझे याद आ रही है और मेरे पासवर्ड की सुरक्षा और सुरक्षा के लिए मेरे पासवर्ड को सबसे अच्छा विकल्प है? क्या इस तरह से ऐसा करने के लिए कोई संभावित सुरक्षा दोष है?

नोट: चर्चा के उद्देश्य के लिए मान लें कि एप्लिकेशन और डेटाबेस अलग मशीनों पर संग्रहीत हैं, पासवर्ड आदि साझा नहीं करते हैं, इसलिए डेटाबेस सर्वर का उल्लंघन स्वचालित रूप से एप्लिकेशन सर्वर का उल्लंघन नहीं होता है।




किसी भी सुरक्षा प्रासंगिकता के रूप में आपके स्रोत कोड में हार्डकोडेड मान को संग्रहीत नहीं देख सकता। यह अस्पष्टता के माध्यम से सुरक्षा है।

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






Links