[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]

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

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

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

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

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




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

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