2013-02-07 19 views
6

मैं PHP में निर्मित एक नई वेबसाइट का डेवलपर हूं और मैं सोच रहा हूं कि हैशिंग के लिए उपयोग करने के लिए सबसे अच्छी चीज़ क्या है। मैंने md5 और sha1 को देखा है लेकिन क्या कुछ और सुरक्षित है।
मुझे खेद है कि यह कोई सवाल नहीं है लेकिन मैं PHP सुरक्षा के लिए नया हूं और मैं अपनी साइट को यथासंभव सुरक्षित बनाने की कोशिश कर रहा हूं। नमक क्या है?
धन्यवाद,
वसीमPHP - एमडी 5, एसएचए, हैशिंग सुरक्षा

+1

क्या आप के लिए हैश का उपयोग करने जा रहे हैं? नमक के रूप में देखें http://en.wikipedia.org/wiki/Salt_(क्रिप्टोग्राफी) –

+0

पासवर्ड और उपयोगकर्ता नाम –

+0

संकेत: 'bcrypt' - वह सब कुछ है। – Leigh

उत्तर

9

सबसे पहले md5 और SHA1 टक्कर हमलों के लिए vunrable होना सिद्ध किया गया है और इंद्रधनुष आसानी से रखा जा सकता है (जब वे अगर आप हैश आम पासवर्ड के अपने डेटाबेस में एक ही है देखें)।
वर्तमान में दो चीजें हैं जो पासवर्ड के लिए पर्याप्त सुरक्षित हैं, जिनका आप उपयोग कर सकते हैं।
पहला sha512 है। sha512 SHA2 का उप-संस्करण है। एसएचए 2 अभी तक टक्कर के हमलों के लिए घुमावदार साबित नहीं हुआ है और sha512 512 बिट हैश उत्पन्न करेगा।

<?php 
hash('sha512',$password); 

अन्य विकल्प bcrypt कहा जाता है: यहाँ कैसे SHA512 उपयोग करने के लिए का एक उदाहरण है। bcrypt अपने सुरक्षित हैश के लिए प्रसिद्ध है। इसकी शायद वहां सबसे सुरक्षित और सबसे अनुकूलन भी है।
इससे पहले कि आप का उपयोग शुरू करने bcrypt आप अगर अपने Sever यह सक्षम है की जाँच करने के, इस कोड दर्ज की जरूरत हैं:

<?php 
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) { 
    echo "CRYPT_BLOWFISH is enabled!"; 
}else { 
echo "CRYPT_BLOWFISH is not available"; 
} 

यह रिटर्न कि यह सक्षम किया गया है तो अगले कदम के लिए आसान है, तो आप सभी की जरूरत है एक पासवर्ड है bcrypt के लिए कर (अधिक customizability के लिए नोट आप इस How do you use bcrypt for hashing passwords in PHP? देखने की जरूरत):

crypt($password, $salt); 

अब अपने दूसरे सवाल का जवाब देने। एक नमक औपचारिक रूप से एक यादृच्छिक स्ट्रिंग है जिसे आप के अंत में जोड़ते हैं जब आप उन्हें रखते हैं तो आपके सभी पासवर्ड। नमक का उपयोग करना मतलब है कि अगर कोई आपको अपना डेटाबेस प्राप्त करता है तो वे सामान्य पासवर्ड के लिए हैंश की जांच नहीं कर सकते हैं। डेटाबेस को जांचना इंद्रधनुष तालिका का उपयोग कर कहा जाता है। हैशिंग करते समय आपको हमेशा नमक का उपयोग करना चाहिए !!
http://www.schneier.com/blog/archives/2012/10/when_will_we_se.html, http://eprint.iacr.org/2010/413.pdf, http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf, http://conf.isi.qut.edu.au/auscert/proceedings/2006/gauravaram06collision.pdf और Understanding sha-1 collision weakness

+4

बस रिकार्ड के लिए: bcrypt _not_ तेजी से किया जा रहा है लेकिन बहुत धीमी गति से (http://codahale.com/how-to-safely-store-a-password/) के लिए प्रसिद्ध है। – ckruse

+0

महान उत्तर !!! – Mez

+0

@ckruse गलती के लिए खेद है मैं इसे ठीक करूँगा :) – C1D

1

नमक का पूरा उद्देश्य पूर्व की एक सूची की तुलना से एक हमलावर को धीमा करने के लिए है:

यहाँ SHA1 और MD5 टक्कर हमले कमजोरियों के लिए अपने सबूत हैं लक्ष्य हैश के खिलाफ जेनरेटेड हैश।

प्रत्येक सादे टेक्स्ट पासवर्ड के लिए एक "हैश" मान पूर्व-गणना करने की आवश्यकता के बजाय, एक हमलावर को प्रत्येक सादे टेक्स्ट पासवर्ड (2^7 * 2^7) के लिए 16384 "हैश" मान प्रीकंप्यूट करने की आवश्यकता होती है।

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

आज इतना नहीं है कि हमारे पास छाया पासवर्ड जैसी चीजें हैं, क्रिप्ट के अलावा अन्य कोर पासवर्ड फ़ंक्शंस और प्रत्येक sysad आपको एक पासवर्ड चुनना चाहता है जो एक शब्दकोश में दिखाई नहीं देगी।

हैश आप उत्पन्न करना चाहते हैं पासवर्ड के लिए कर रहे हैं यह लागू करने की एक अच्छी तरह से स्वीकार कर लिया जाता है।

http://www.openwall.com/phpass/

+0

जानकारी के लिए धन्यवाद! –

+0

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

+0

@ मार्टिंस्टोक्ली - मुझे लगता है कि डैनिलो दो 7-बिट ASCII वर्णों को नमक के रूप में मान रहा था, इस प्रकार 16,384 संभावनाएं थीं। और मुझे लगता है कि आप लोग "एक-दूसरे से बात कर रहे हैं", यानी, मुझे लगता है कि आप दोनों एक ही बात कह रहे हैं। "एन" पासवर्ड के लिए इंद्रधनुष तालिका के बजाय, अब यह प्रत्येक "एन" पासवर्ड (या, अवधारणात्मक रूप से, एक 16 के x "n" मैट्रिक्स के लिए "एन" तत्व सरणी के बजाय 16K प्रविष्टियां है)। – Dan

0

आप पासवर्ड के लिए यह करने के लिए योजना बना रहे हैं, तो MD5 या SHA1 प्रयोग नहीं करते। वे नमक के साथ भी कमजोर और असुरक्षित होने के लिए जाने जाते हैं।

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

पासवर्ड hasing के लिए मौजूदा सबसे अच्छा अभ्यास एल्गोरिथ्म, BCrypt है उपयुक्त रेह के साथ।

और PHP में BCrypt पासवर्ड हैशिंग लागू करने के लिए सबसे अच्छा तरीका है पीएचपी का नया पासवर्ड एपीआई का उपयोग करने के लिए है। इस एपीआई को अगले कुछ महीनों में रिलीज के कारण PHP, v5.5 के अगले संस्करण में अंतर्निहित कार्यों के सेट के रूप में दिखाया जाएगा। अच्छी खबर यह है कि उन्होंने PHP (5.3 और 5.4) के मौजूदा संस्करणों के उपयोगकर्ताओं के लिए पिछड़ा-संगतता संस्करण भी जारी किया है, भले ही PHP 5.5 अभी तक जारी नहीं हुआ है, फिर भी आप तुरंत नए एपीआई का उपयोग शुरू कर सकते हैं।

आप यहाँ से संगतता पुस्तकालय डाउनलोड कर सकते हैं: https://github.com/ircmaxell/password_compat

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

नमक इसे मूल रूप से क्रैक करने के लिए कठिन बनाने के लिए पासवर्ड में अतिरिक्त स्ट्रिंग जोड़ा जाता है।

उदाहरण के लिए, एक हमलावर पहले से ही जान सकता है कि दिए गए पासवर्ड स्ट्रिंग के लिए हैश मूल्य क्या है, या यहां तक ​​कि पूरे पासवर्ड दिए गए पासवर्ड भी हैं। यदि वह आपके हैंश किए गए डेटा को पकड़ सकता है और आपने नमक का उपयोग नहीं किया है, तो वह सिर्फ अपने हैंश की तुलना ज्ञात पासवर्ड की सूची के विरुद्ध कर सकता है, और यदि आपके कोई भी उपयोगकर्ता पासवर्ड अनुमान लगाने में आसान हैं, तो वे होंगे सेकेंड में क्रैक किया गया, भले ही हैशिंग विधि का उपयोग किया गया हो।

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

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

आशा है कि मदद करता है।

संबंधित मुद्दे