php SALT क्या है और मैं इसका उपयोग कैसे करूं?




(5)

अच्छी तरह से टिप्पणी में, धन्यवाद ceejayoz

en.wikipedia.org/wiki/Salt_(cryptography)

एक नमक एक ऐसी चीज है जिसे आप एक स्ट्रिंग में जोड़ते हैं इससे पहले कि आप इसे हैश करें, यह पासवर्ड और सुरक्षा की एक और परत जोड़ता है।

मैं चारों ओर खोज रहा हूं और मैं अभी भी अनिश्चित हूं कि "नमक" क्या है और इसे कैसे उपयोग / लागू किया जाए Noobish प्रश्न के लिए क्षमा करें, मैं स्वयं सीख रहा हूँ php।


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

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


एक नमक एक (छोटा) स्ट्रिंग है जिसे उस स्ट्रिंग में जोड़ा जाता है जिसे आप एन्क्रिप्ट या हैश करना चाहते हैं। एक उदाहरण:

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>

यह हैश में सुरक्षा जोड़ता है, क्योंकि यह संभावना नहीं है कि "कुछ भीywant_abcdefg" पहले से ही हैश-डेटाबेस ( http://en.wikipedia.org/wiki/Rainbow_tables ) में संग्रहीत है


आइए, हैशिंग के लिए कई एल्गोरिदम के संयोजन से चीजों को थोड़ा मसाले दें, एक डबल हैशिंग एल्गोरिथ्म बना:

$password = "myPassword";
$salt = sha1(md5($password)).'k32duem01vZsQ2lB8g0s'; 
$password = md5($password.$salt);

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


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

आमतौर पर, पासवर्ड + नमक को कुछ कठिन-से-रिवर्स प्रक्रिया द्वारा पूरी तरह से अलग स्ट्रिंग में बदल दिया जाता है। इस तब्दील स्ट्रिंग को तब पासवर्ड के रूप में संग्रहीत किया जाता है, साथ में नमक के प्लेनटेक्स्ट और पासवर्ड के मूल सादे पाठ को एक साथ फेंक दिया जाता है। जब आप यह जांचना चाहते हैं कि किसी के पास सही पासवर्ड है, तो आपने जो कुछ भी टाइप किया है, उसे उस नमक के साथ मिला दें, जो पासवर्ड फ़ाइल में सूचीबद्ध है और फिर उसका परिणाम है। यदि परिणाम आपके पास रिकॉर्ड पर मौजूद पासवर्ड से मेल खाता है, तो आप जानते हैं कि उन्होंने सही पासवर्ड डाल दिया है।

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

PHP के लिए, आप यह देखना चाह सकते हैं कि कुछ रूपरेखाओं ने इसे कैसे लागू किया है। CakePHP और Zend के लिए क्रमशः दो त्वरित लिंक:

http://www.jotlab.com/2010/04/18/cakephp-rainbow-table-protection-behaviour/

http://www.zimuel.it/blog/2009/07/build-a-secure-login-with-zend-framework/







salt