जवाबों:
सीआरसी डेटा में यादृच्छिक त्रुटियों का पता लगाने के लिए ठीक काम करता है, उदाहरण के लिए, नेटवर्क हस्तक्षेप, लाइन शोर, विरूपण, आदि से हो सकता है।
CRC कम्प्यूटेशनल रूप से MD5 या SHA1 की तुलना में बहुत कम जटिल है। MD5 जैसे हैश फ़ंक्शन का उपयोग करना शायद यादृच्छिक त्रुटि का पता लगाने के लिए ओवरकिल है। हालाँकि, किसी भी प्रकार की सुरक्षा जांच के लिए CRC का उपयोग करना MD5 जैसे अधिक जटिल हैशिंग फ़ंक्शन की तुलना में बहुत कम सुरक्षित होगा।
और हां, अंतर्निहित हार्डवेयर पर सीआरसी लागू करना बहुत आसान है, आप आईसी पर इसके लिए अलग-अलग पैक किए गए समाधान भी प्राप्त कर सकते हैं।
MD5
, SHA-1
यह भी बचा जाना चाहिए, किसी भिन्न रूप SHA-2
की सिफारिश की है।
CRC को डेटा में अनजाने में हुए बदलाव के खिलाफ बनाया गया है। यही है, यह अनजाने में त्रुटियों का पता लगाने के लिए अच्छा है, लेकिन यह सुनिश्चित करने के तरीके के रूप में बेकार होगा कि डेटा दुर्भावनापूर्ण रूप से संभाला नहीं गया था।
यह भी देखें इस ।
मुझे एक अध्ययन मिला जिसमें दिखाया गया है कि हैश टेबल के लिए CRC हैश कितना अनुपयुक्त है । यह एल्गोरिथ्म की वास्तविक विशेषताओं की भी व्याख्या करता है। अध्ययन में अन्य हैश एल्गोरिदम का मूल्यांकन भी शामिल है और रखने के लिए एक अच्छा संदर्भ है।
हैश के लिए सीआरसी पर प्रासंगिक निष्कर्ष:
CRC32 कभी भी हैश टेबल के उपयोग के लिए अभिप्रेत नहीं था। इस उद्देश्य के लिए इसका उपयोग करने का कोई अच्छा कारण नहीं है, और मेरा सुझाव है कि आप ऐसा करने से बचें। यदि आप CRC32 का उपयोग करने का निर्णय लेते हैं, तो यह महत्वपूर्ण है कि आप हैश बिट्स का उपयोग उसके विपरीत छोर से करें, जिसमें मुख्य ओकटेट खिलाए जाते हैं। यह किस छोर पर विशिष्ट CRC32 कार्यान्वयन पर निर्भर करता है। CRC32 को "ब्लैक बॉक्स" हैश फ़ंक्शन के रूप में न मानें, और इसे सामान्य उद्देश्य हैश के रूप में उपयोग न करें। उपयुक्तता के लिए इसके प्रत्येक अनुप्रयोग का परीक्षण करना सुनिश्चित करें।
अपडेट करें
ऐसा लगता है कि साइट नीचे है। इंटरनेट पुरालेख एक प्रति है , हालांकि।
मैंने इस PHP कोड की हर लाइन को 1.000.000 लूप में चलाया। परिणाम टिप्पणियों (#) में हैं।
hash('crc32', 'The quick brown fox jumped over the lazy dog.');# 750ms 8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');# 700ms 8 chars
hash('md5', 'The quick brown fox jumped over the lazy dog.');# 770ms 32 chars
hash('sha1', 'The quick brown fox jumped over the lazy dog.');# 880ms 40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms 64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms 96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars
मेरा निष्कर्ष:
जब आप अतिरिक्त सुरक्षा परत की आवश्यकता हो तो "sha256" (या उच्चतर) का उपयोग करें।
"Md5" या "sha1" का उपयोग न करें क्योंकि उनके पास:
"The quick brown fox jumped over the lazy dog."
) पर लागू किया जाता है, तो आप देखेंगे कि एमडीसी की तुलना में सीआरसी कितना तेज है।
कार्यान्वयन, गति और विश्वसनीयता के बारे में सीआरसी जानकारी के लिए, सीआरसी त्रुटि का पता लगाने वाले एल्गोरिदम के लिए एक दर्द रहित मार्गदर्शिका देखें । इसमें सीआरसी पर सब कुछ है।
जब तक कोई व्यक्ति आपके डेटा को दुर्भावनापूर्ण रूप से संशोधित करने और बदलने के लिए नहीं जा रहा है, तो सीआरसी पर्याप्त है। बस एक "अच्छा" (मानक) बहुपद का उपयोग करें।
यह सब आपकी आवश्यकताओं और अपेक्षा पर निर्भर करता है।
यहाँ इन हैश फ़ंक्शन एल्गोरिदम के बीच त्वरित संक्षिप्त अंतर हैं :
एक क्रिप्टोग्राफिक हैश एल्गोरिथ्म है,
संदेश डाइजेस्ट के रूप में जाना जाने वाला 160-बिट (20-बाइट) हैश मान पैदा करता है
यह एक क्रिप्टोग्राफिक हैश है और 2005 के बाद से इसे सुरक्षित नहीं माना जाता है,
एन्क्रिप्शन उद्देश्यों के लिए इस्तेमाल किया जा सकता है,
पहली बार 1993 में (SHA-0 के रूप में) प्रकाशित हुआ, फिर 1995 में SHA-1 के रूप में,
श्रृंखला: SHA-0, SHA-1, SHA-2, SHA-3,
सारांश में, SHA-1 नहीं रह गया है अच्छी तरह से वित्त पोषित विरोधियों के खिलाफ सुरक्षित माना जाता है, क्योंकि 2005 में, cryptanalysts SHA-1 जो यह चल रही उपयोग के लिए सुरक्षित पर्याप्त नहीं हो सकता है पता चलता है पर हमले पाया का उपयोग कर Schneier । यूएस एनआईएसटी सलाह देता है कि संघीय एजेंसियों को आवेदन के लिए SHA1-1 का उपयोग करना बंद कर देना चाहिए जिसके लिए टकराव प्रतिरोध की आवश्यकता होती है और 2010 NIST के बाद SHA-2 का उपयोग करना चाहिए ।
इसलिए, यदि आप फ़ाइलों की अखंडता (भ्रष्टाचार के खिलाफ) की जाँच के लिए सरल और त्वरित समाधान की तलाश कर रहे हैं, या प्रदर्शन के संदर्भ में कुछ सरल कैशिंग उद्देश्यों के लिए, आप CRC-32 पर विचार कर सकते हैं, हैशिंग के लिए आप उपयोग करने पर विचार कर सकते हैं एमडी 5, हालांकि यदि आप किसी भी टकराव की संभावनाओं से बचने के लिए पेशेवर एप्लिकेशन (जो सुरक्षित और सुसंगत होना चाहिए) विकसित कर रहे हैं - SHA-2 और इसके बाद के संस्करण (जैसे SHA-3) का उपयोग करें।
PHP में कुछ सरल बेंचमार्क टेस्ट:
# Testing static text.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real 0m0.845s
user 0m0.830s
sys 0m0.008s
$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real 0m1.103s
user 0m1.089s
sys 0m0.009s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real 0m1.132s
user 0m1.116s
sys 0m0.010s
# Testing random number.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real 0m1.754s
user 0m1.735s
sys 0m0.012s\
$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real 0m2.065s
user 0m2.042s
sys 0m0.015s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real 0m2.050s
user 0m2.021s
sys 0m0.015s
सम्बंधित:
आप यह नहीं कहते कि यह क्या है जिसे आप संरक्षित करने की कोशिश कर रहे हैं।
दुर्भावनापूर्ण सिस्टम संशोधन को रोकने के लिए विरोधाभासी डेटा भ्रष्टाचार के खिलाफ चेक के रूप में एम्बेडेड सिस्टम में अक्सर एक सीआरसी का उपयोग किया जाता है। उन जगहों के उदाहरण जहां सीआरसी उपयोगी हो सकते हैं, फर्मवेयर भ्रष्टाचार के खिलाफ गार्ड के लिए सिस्टम इनिशियलाइजेशन के दौरान EPROM छवि को मान्य करना है। सिस्टम बूटलोडर आवेदन कोड के लिए सीआरसी की गणना करेगा और कोड को चलाने की अनुमति देने से पहले संग्रहीत मूल्य के साथ तुलना करेगा। यह आकस्मिक कार्यक्रम भ्रष्टाचार या असफल डाउनलोड की संभावना से बचाता है।
एक सीआरसी का उपयोग FLASH या EEPROM में संग्रहीत कॉन्फ़िगरेशन डेटा को सुरक्षित रखने के लिए भी किया जा सकता है। यदि CRC गलत है, तो डेटा को अमान्य और डिफ़ॉल्ट या बैकअप डेटा सेट के रूप में चिह्नित किया जा सकता है। डिवाइस की विफलता या कॉन्फ़िगरेशन डेटा स्टोर के अपडेट के दौरान उपयोगकर्ता द्वारा हटाए जाने के कारण CRC अमान्य हो सकता है।
ऐसी टिप्पणियां की गई हैं कि एक हैश कई बिट त्रुटियों के साथ सीआरसी की तुलना में भ्रष्टाचार का पता लगाने की अधिक संभावना प्रदान करता है। यह सच है, और 16 या 32 बिट सीआरसी का उपयोग करने या न करने का निर्णय एक भ्रष्ट डेटा ब्लॉक के सुरक्षा परिणामों पर टिका होगा और क्या आप 1 में 2 ^ 16 या 2 ^ 32 में से 1 का औचित्य साबित कर सकते हैं। डेटा ब्लॉक को गलत तरीके से वैध घोषित किया जा रहा है।
कई उपकरणों में मानक एल्गोरिदम के लिए निर्मित सीआरसी जनरेटर होता है। टेक्सास से MSP430F5X श्रृंखला में CRC-CCITT मानक का एक हार्डवेयर कार्यान्वयन है।
CRC32 तेज है और हैश केवल 32 बिट लंबा है।
इसका उपयोग तब करें जब आप सिर्फ एक त्वरित और हल्का चेकसम चाहते हैं। ईथरनेट में CRC का उपयोग किया जाता है।
यदि आपको अधिक विश्वसनीयता की आवश्यकता है तो आधुनिक हैशिंग फ़ंक्शन का उपयोग करना बेहतर होगा।
केवल सीआरसी का उपयोग करें यदि कम्प्यूटेशन संसाधन बहुत तंग हैं (यानी कुछ एम्बेड वातावरण) या आपको कई आउटपुट मानों और स्पेस / बैंडविड्थ को स्टोर करने / परिवहन करने की आवश्यकता है (जैसा कि सीआरसी आमतौर पर 32-बिट होता है जहां एमडी 5 आउटपुट 128-बिट, एसएचए 1 160 है बिट, और अन्य SHA 512 बिट तक भिन्न होते हैं)।
कभी भी सीआरसी का उपयोग सुरक्षा जांच के लिए नहीं करें क्योंकि सीआरसी को "नकली" करना बहुत आसान है।
यहां तक कि आकस्मिक त्रुटि का पता लगाने के लिए (दुर्भावनापूर्ण परिवर्तन का पता लगाने के बजाय) हैश एक साधारण सीआरसी से बेहतर है। आंशिक रूप से एक साधारण तरीके के कारण एक सीआरसी की गणना की जाती है (और आंशिक रूप से क्योंकि सीआरसी मूल्य आम हैश आउटपुट की तुलना में सामान्य रूप से छोटे होते हैं इसलिए संभावित मानों की एक छोटी श्रृंखला होती है) यह अधिक संभावना है कि, ऐसी स्थिति में जहां दो या दो से अधिक त्रुटियां हैं। , एक त्रुटि एक और मुखौटा होगी तो आप दो त्रुटियों के बावजूद एक ही सीआरसी के साथ समाप्त हो जाएंगे।
संक्षेप में: जब तक आपके पास एक सभ्य हैश एल्गोरिथ्म का उपयोग न करने का कारण है, साधारण सीआरसी से बचें।
मुझे हाल ही में सीआरसी का एक प्रयोग हुआ, जो स्मार्ट था। के लेखक jdupe फ़ाइल दोहराव की पहचान और निष्कासन उपकरण (लोकप्रिय exif उपकरण jhead का एक ही लेखक) फ़ाइलों के माध्यम से पहले पारित दौरान इसे इस्तेमाल करता है। एक सीआरसी की गणना प्रत्येक फाइल के पहले 32K पर की जाती है, जो दिखने वाली फाइलों को चिह्नित करने के लिए होती है, साथ ही फाइलों का आकार भी एक जैसा होना चाहिए। इन फ़ाइलों को उन फ़ाइलों की सूची में जोड़ा जाता है जिन पर पूर्ण बाइनरी तुलना करना है। यह बड़ी मीडिया फ़ाइलों की जाँच में तेजी लाता है।
मूलभूत बातों से शुरू करें।
क्रिप्टोग्राफी में, एक हैशिंग ऑपरेशन एक डाइजेस्ट ऑपरेशन के माध्यम से कई बिट्स को कम बिट्स में परिवर्तित करता है। संदेश और फ़ाइलों की अखंडता की पुष्टि करने के लिए हैश का उपयोग किया जाता है।
सभी हैशिंग एल्गोरिदम टकराव उत्पन्न करते हैं। एक टक्कर तब होती है जब कई कई-बिट संयोजन समान कम बिट आउटपुट उत्पन्न करते हैं। एक हैशिंग एल्गोरिथ्म की क्रिप्टोग्राफ़िक ताकत एक व्यक्ति के लिए अक्षमता से निर्धारित होती है कि किसी दिए गए इनपुट के लिए आउटपुट क्या होने वाला है क्योंकि यदि वे एक हैश के साथ एक फ़ाइल का निर्माण कर सकते हैं जो एक वैध फ़ाइल से मेल खाता है और मान्य अखंडता से समझौता करता है। प्रणाली में। CRC32 और MD5 के बीच का अंतर यह है कि MD5 एक बड़ा हैश उत्पन्न करता है जिसकी भविष्यवाणी करना कठिन है।
जब आप संदेश की अखंडता को लागू करना चाहते हैं - मतलब संदेश पारगमन में छेड़छाड़ नहीं किया गया है - टकराव की भविष्यवाणी करने में असमर्थता एक महत्वपूर्ण संपत्ति है। एक 32-बिट हैश 4 बिलियन विभिन्न अद्वितीय हैश का उपयोग करके 4 बिलियन विभिन्न संदेशों या फ़ाइलों का वर्णन कर सकता है । यदि आपके पास 4 बिलियन और 1 फाइलें हैं, तो आपको 1 टक्कर की गारंटी है। 1 टीबी बिटस्पेस में अरबों टकराव की संभावना है। यदि मैं एक हमलावर हूं और मैं यह अनुमान लगा सकता हूं कि 32 बिट हैश क्या होने जा रहा है, तो मैं एक संक्रमित फाइल का निर्माण कर सकता हूं जो लक्ष्य फ़ाइल से टकराती है; उसी के पास हैश है।
इसके अतिरिक्त अगर मैं 10mbps ट्रांसमिशन कर रहा हूं, तो crc32 को बाईपास करने के एक पैकेट के सही होने की संभावना है और गंतव्य के लिए जारी है और निष्पादित करना बहुत कम है। 10mbps पर कहते हैं कि मुझे 10 त्रुटियाँ मिलीं \ n दूसरी । अगर मैं 1 जीबीपीएस तक रैंप करता हूं, तो अब मुझे प्रति सेकंड 1,000 त्रुटियां हो रही हैं । यदि मैं प्रति सेकंड 1 एक्सबिट तक राम करता हूं, तो मेरे पास प्रति सेकंड 1,000,000,000 त्रुटियों की त्रुटि दर है । मान लीजिए कि हमारे पास 1 \ 1,000,000 की टक्कर दर हैसंचरण त्रुटियों, अर्थ 1 में एक लाख संचरण त्रुटियों के परिणामस्वरूप भ्रष्ट डेटा अनिर्धारित हो रहा है। 10mbps पर मुझे त्रुटि डेटा हर 100,000 सेकंड या दिन में एक बार भेजा जा रहा है। 1 जीबीपीएस पर यह हर 5 मिनट में एक बार होता है। प्रति सेकंड 1 छूट पर, हम कई बार एक दूसरे से बात कर रहे हैं।
यदि आप Wireshark खोलते हैं, तो आप देखेंगे कि आपके सामान्य ईथरनेट हेडर में CRC32 है, आपके IP हेडर में CRC32 है, और आपके TCP Header में CRC32 है, और इसके अलावा उच्चतर परत प्रोटोकॉल क्या कर सकता है; जैसे IPSEC उपरोक्त के अलावा अखंडता जाँच के लिए MD5 या SHA का उपयोग कर सकता है। विशिष्ट नेटवर्क संचार में त्रुटि जाँच की कई परतें हैं, और वे उप-10mbps गति पर अब और फिर से चलती हैं।
चक्रीय अतिरेक जाँच (CRC) के कई सामान्य संस्करण हैं और कई असामान्य हैं लेकिन आम तौर पर यह बताने के लिए डिज़ाइन किया गया है कि जब कोई संदेश या फ़ाइल पारगमन (कई बिट्स फ़्लिपिंग) में क्षतिग्रस्त हो गई हो। CRC32 टकराव की दर के कारण बड़े, स्केलर उद्यम वातावरण में आज के मानकों द्वारा प्रोटोकॉल की जाँच करने में बहुत अच्छी त्रुटि नहीं है; औसत उपयोगकर्ता हार्ड-ड्राइव में 100k फाइलें ऊपर की ओर हो सकती हैं, और किसी कंपनी पर फ़ाइल-शेयर में लाखों लोग हो सकते हैं। फ़ाइलों की संख्या के लिए हैश-स्पेस का अनुपात बहुत कम है। CRC32 को लागू करने के लिए कम्प्यूटेशनल रूप से सस्ता है जबकि MD5 नहीं है।
MD5 को दुर्भावनापूर्ण फ़ाइल को सौम्य बनाने के लिए टकराव के जानबूझकर उपयोग को रोकने के लिए डिज़ाइन किया गया था। इसे असुरक्षित माना जाता है क्योंकि हैशस्पेस को कुछ हमलों को सक्षम करने के लिए पर्याप्त रूप से मैप किया गया है, और कुछ टकराव पूर्वानुमान योग्य हैं। SHA1 और SHA2 ब्लॉक पर नए बच्चे हैं।
फ़ाइल सत्यापन के लिए, Md5 का उपयोग बहुत सारे विक्रेताओं द्वारा किया जाना शुरू हो जाता है क्योंकि आप मल्टीगैबाइट फ़ाइल या मल्टीट्रैबाइट फ़ाइलों को इसके साथ जल्दी से कर सकते हैं और इसे ढेर कर सकते हैं जो सामान्य OS के उपयोग और CRC32 के समर्थन के शीर्ष पर है। अगर अगले दशक के भीतर फाइलसिस्टम त्रुटि की जाँच के लिए एमडी 5 का उपयोग करना शुरू करें तो आश्चर्यचकित न हों।