CR5 MD5 / SHA1 की तुलना में उपयोग करने के लिए अधिक उपयुक्त है?


130

जब MD5 या SHA1 जैसे अधिक आधुनिक हैशिंग फ़ंक्शन बनाम त्रुटि का पता लगाने के लिए CRC का उपयोग करना उचित है? क्या पूर्व हार्डवेयर एम्बेडेड हार्डवेयर पर लागू करना आसान है?

जवाबों:


114

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

CRC कम्प्यूटेशनल रूप से MD5 या SHA1 की तुलना में बहुत कम जटिल है। MD5 जैसे हैश फ़ंक्शन का उपयोग करना शायद यादृच्छिक त्रुटि का पता लगाने के लिए ओवरकिल है। हालाँकि, किसी भी प्रकार की सुरक्षा जांच के लिए CRC का उपयोग करना MD5 जैसे अधिक जटिल हैशिंग फ़ंक्शन की तुलना में बहुत कम सुरक्षित होगा।

और हां, अंतर्निहित हार्डवेयर पर सीआरसी लागू करना बहुत आसान है, आप आईसी पर इसके लिए अलग-अलग पैक किए गए समाधान भी प्राप्त कर सकते हैं।


1
@ गिल्ली: आप हमेशा एक ही परिणामी डॉर्ड प्राप्त करने के लिए केवल एक साथ डाइव लगा सकते हैं।
ब्लाइंडी

2
@ डस्टिन: आप अपने उत्तर में पूरी तरह से सही हैं, लेकिन शायद "सीआरसी कम्प्यूटेशनल रूप से बहुत अधिक कुशल है" "सीआरसी कम्प्यूटेशनल रूप से बहुत अधिक कुशल है" बदलने पर विचार करें? MD5 / SHA-1 एल्गोरिदम जटिल हैं, लेकिन वास्तव में 'अक्षम' IMO नहीं हैं।
कॉक्सी डे

1
@ कॉक्सिमला आप सही हैं, मुझे जो शब्द इस्तेमाल करना चाहिए था वह "जटिल" नहीं "अक्षम" है। धन्यवाद!
परिभाषित करता है

27
किसी भी लंबे हैश को 32 बिट्स तक कम करने के लिए, बस पहले 32 बिट्स लें।
ऑरिज

1
यदि सुरक्षा आप लक्ष्य है तो आप कभी भी उपयोग कभी नहीं करना चाहिए MD5, SHA-1यह भी बचा जाना चाहिए, किसी भिन्न रूप SHA-2की सिफारिश की है।
पीटर

33

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

यह भी देखें इस


इस उत्तर में लिंक से सबसे महत्वपूर्ण हिस्सा: "(...) यहां तक ​​कि 2048-बिट सीआरसी क्रिप्टोग्राफिक रूप से 128-बिट एमडी 5 की तुलना में बहुत कम सुरक्षित होगा"
Marc.2377

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

21

मुझे एक अध्ययन मिला जिसमें दिखाया गया है कि हैश टेबल के लिए CRC हैश कितना अनुपयुक्त है । यह एल्गोरिथ्म की वास्तविक विशेषताओं की भी व्याख्या करता है। अध्ययन में अन्य हैश एल्गोरिदम का मूल्यांकन भी शामिल है और रखने के लिए एक अच्छा संदर्भ है।

हैश के लिए सीआरसी पर प्रासंगिक निष्कर्ष:

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

अपडेट करें

ऐसा लगता है कि साइट नीचे है। इंटरनेट पुरालेख एक प्रति है , हालांकि।


लिंक टूट गया है। शायद आप स्वयं स्पष्टीकरण लिख सकते हैं? अगर नहीं तो जवाब देना बेकार है।
ceving

ठीक है, मैं अपने उत्तर में निष्कर्ष शामिल करूंगा।
आंद्रे लुस

अजीब, यहाँ बेंचमार्क के अनुसार , सीआरसी वास्तव में गति और टकराव की संख्या के मामले में बहुत अच्छा करता है।
ओस्ट्रोकैच

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

मेरे अनुभव में लाखों URL हैं, CRC64 8 बार और MD5 टकराए। 5. जाहिर है MD5 बेहतर था, लेकिन CRC64 एक महान और बहुत तेज और सरल हैश था।
जे। डिमो

18

मैंने इस 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

मेरा निष्कर्ष:

  • जब आपको http://en.wikipedia.org/wiki/Cyclic_redundancy_check की आवश्यकता हो तो "crc32b" का उपयोग करें और आपको सुरक्षा की परवाह नहीं है।
  • जब आप अतिरिक्त सुरक्षा परत की आवश्यकता हो तो "sha256" (या उच्चतर) का उपयोग करें।

  • "Md5" या "sha1" का उपयोग न करें क्योंकि उनके पास:

    1. जब आप सुरक्षा का ध्यान रखते हैं तो कुछ सुरक्षा मुद्दे
    2. अब हैश स्ट्रिंग और "crc32b" की तुलना में धीमी है जब आप सभी की जरूरत है सीआरसी

तुम्हारा मतलब है बिट्स,
चार्ट्स

ज़रुरी नहीं। इको हैश ('crc32', 'क्विक ब्राउन फॉक्स आलसी कुत्ते पर कूद गया।'); गूँज "413a86af", 8 वर्ण लंबी स्ट्रिंग क्या है। Btw, यह 32 बिट HEX प्रारूप में संग्रहीत संख्या है। उदाहरण के लिए, "sha256" में 256 बिट हैश है, जिसे फिर से हेक्स के रूप में संग्रहीत किया गया है, जो 64 वर्ण लंबी स्ट्रिंग देता है।
मार्टिन

45
ये परिणाम बहुत ही धोखा देने वाले हैं। जब इन हैशिंग एल्गोरिदम को एक बड़े डेटा सेट ( युद्ध और शांति के बजाय "The quick brown fox jumped over the lazy dog.") पर लागू किया जाता है, तो आप देखेंगे कि एमडीसी की तुलना में सीआरसी कितना तेज है।
ubiquibacon

1
एक मध्यवर्ती मामला है (पुस्तकालयों में डुप्लिकेट चेकिंग) जहां एमडी 5 / शा 1 सही समाधान है: उन्हें उस मामले को संभालने की आवश्यकता नहीं है, जहां गायब होने वाले हैश टकराव को सावधानीपूर्वक क्राफ्टिंग करते हुए एक विरोधी है, लेकिन उन्हें आकस्मिक टकराव को संभालने की आवश्यकता नहीं है। इसलिए: बिट त्रुटियों और भ्रष्टाचार का पता लगाना: CRC32 पुस्तकालयों में टकराव का पता लगाना: MD5 / SHA1 सलाहकार अनुप्रयोग: Sha256 और इसके बाद के संस्करण। बेशक, यदि आपके पास अरबों प्रविष्टियों के साथ एक पुस्तकालय है, तो आपको संभवतः अपने हैश बिट्स को भी बढ़ाना होगा।
डेवी मॉर्गन

पीएचपी? एआरएम प्लेटफ़ॉर्म पर, एम्बेडेड कोड, 16 मेगाहर्ट्ज 46 बाइट्स का सीआरसी 32, शायद 12 माइक्रोसेकंड। इसमें हार्डवेयर असिस्ट है। यहां तक ​​कि एईएस की मदद से हार्डवेयर कई सौ गुना धीमा हो जाएगा। बिना लुकअप टेबल CRC अभी भी लगभग 50 माइक्रोसेकंड में आना चाहिए।
इलगित्नो

11

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

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


9

यह सब आपकी आवश्यकताओं और अपेक्षा पर निर्भर करता है।

यहाँ इन हैश फ़ंक्शन एल्गोरिदम के बीच त्वरित संक्षिप्त अंतर हैं :

CRC (CRC-8/16/32/64)

  • है एक क्रिप्टोग्राफिक हैशिंग एल्गोरिथ्म (यह चक्रीय अतिरेक जांच इस आधार पर रैखिक कार्य उपयोग कर रहा है)
  • 9, 17, 33 या 65 बिट्स का उत्पादन कर सकता है
  • क्रिप्टोग्राफ़िक प्रयोजनों के लिए इस्तेमाल करने का इरादा नहीं है क्योंकि कोई क्रिप्टोग्राफ़िक गारंटी नहीं देता है,
  • डिजिटल हस्ताक्षर में उपयोग के लिए अनुपयुक्त, क्योंकि यह आसानी से प्रतिवर्ती 2006 है ,
  • एन्क्रिप्शन उद्देश्यों के लिए उपयोग नहीं किया जाना चाहिए,
  • विभिन्न तार टकराव उत्पन्न कर सकते हैं,
  • 1961 में आविष्कार किया और ईथरनेट और कई अन्य मानकों में इस्तेमाल किया,

MD5

  • एक क्रिप्टोग्राफिक हैश एल्गोरिथ्म है,
  • 128-बिट (16-बाइट) हैश मान (32 अंक हेक्साडेसिमल संख्या) का उत्पादन करना
  • यह एक क्रिप्टोग्राफिक हैश है, लेकिन अगर आप सुरक्षा के बारे में चिंता करते हैं, तो यह माना जाता है कि
  • ज्ञात तार हैं जिनका MD5 हैश मान समान है
  • एन्क्रिप्शन उद्देश्यों के लिए इस्तेमाल किया जा सकता है,

SHA-1

  • एक क्रिप्टोग्राफिक हैश एल्गोरिथ्म है,

  • संदेश डाइजेस्ट के रूप में जाना जाने वाला 160-बिट (20-बाइट) हैश मान पैदा करता है

  • यह एक क्रिप्टोग्राफिक हैश है और 2005 के बाद से इसे सुरक्षित नहीं माना जाता है,

  • एन्क्रिप्शन उद्देश्यों के लिए इस्तेमाल किया जा सकता है,

  • sha1 टकराव का एक उदाहरण पाया गया है

  • पहली बार 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

सम्बंधित:


8

आप यह नहीं कहते कि यह क्या है जिसे आप संरक्षित करने की कोशिश कर रहे हैं।

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

एक सीआरसी का उपयोग FLASH या EEPROM में संग्रहीत कॉन्फ़िगरेशन डेटा को सुरक्षित रखने के लिए भी किया जा सकता है। यदि CRC गलत है, तो डेटा को अमान्य और डिफ़ॉल्ट या बैकअप डेटा सेट के रूप में चिह्नित किया जा सकता है। डिवाइस की विफलता या कॉन्फ़िगरेशन डेटा स्टोर के अपडेट के दौरान उपयोगकर्ता द्वारा हटाए जाने के कारण CRC अमान्य हो सकता है।

ऐसी टिप्पणियां की गई हैं कि एक हैश कई बिट त्रुटियों के साथ सीआरसी की तुलना में भ्रष्टाचार का पता लगाने की अधिक संभावना प्रदान करता है। यह सच है, और 16 या 32 बिट सीआरसी का उपयोग करने या न करने का निर्णय एक भ्रष्ट डेटा ब्लॉक के सुरक्षा परिणामों पर टिका होगा और क्या आप 1 में 2 ^ 16 या 2 ^ 32 में से 1 का औचित्य साबित कर सकते हैं। डेटा ब्लॉक को गलत तरीके से वैध घोषित किया जा रहा है।

कई उपकरणों में मानक एल्गोरिदम के लिए निर्मित सीआरसी जनरेटर होता है। टेक्सास से MSP430F5X श्रृंखला में CRC-CCITT मानक का एक हार्डवेयर कार्यान्वयन है।


6

CRC32 तेज है और हैश केवल 32 बिट लंबा है।

इसका उपयोग तब करें जब आप सिर्फ एक त्वरित और हल्का चेकसम चाहते हैं। ईथरनेट में CRC का उपयोग किया जाता है।

यदि आपको अधिक विश्वसनीयता की आवश्यकता है तो आधुनिक हैशिंग फ़ंक्शन का उपयोग करना बेहतर होगा।


5

केवल सीआरसी का उपयोग करें यदि कम्प्यूटेशन संसाधन बहुत तंग हैं (यानी कुछ एम्बेड वातावरण) या आपको कई आउटपुट मानों और स्पेस / बैंडविड्थ को स्टोर करने / परिवहन करने की आवश्यकता है (जैसा कि सीआरसी आमतौर पर 32-बिट होता है जहां एमडी 5 आउटपुट 128-बिट, एसएचए 1 160 है बिट, और अन्य SHA 512 बिट तक भिन्न होते हैं)।

कभी भी सीआरसी का उपयोग सुरक्षा जांच के लिए नहीं करें क्योंकि सीआरसी को "नकली" करना बहुत आसान है।

यहां तक ​​कि आकस्मिक त्रुटि का पता लगाने के लिए (दुर्भावनापूर्ण परिवर्तन का पता लगाने के बजाय) हैश एक साधारण सीआरसी से बेहतर है। आंशिक रूप से एक साधारण तरीके के कारण एक सीआरसी की गणना की जाती है (और आंशिक रूप से क्योंकि सीआरसी मूल्य आम हैश आउटपुट की तुलना में सामान्य रूप से छोटे होते हैं इसलिए संभावित मानों की एक छोटी श्रृंखला होती है) यह अधिक संभावना है कि, ऐसी स्थिति में जहां दो या दो से अधिक त्रुटियां हैं। , एक त्रुटि एक और मुखौटा होगी तो आप दो त्रुटियों के बावजूद एक ही सीआरसी के साथ समाप्त हो जाएंगे।

संक्षेप में: जब तक आपके पास एक सभ्य हैश एल्गोरिथ्म का उपयोग करने का कारण है, साधारण सीआरसी से बचें।


1
यदि आप एक उचित बहुपद का उपयोग कर रहे हैं तो सीआरसी सभी आकस्मिक डेटा परिवर्तनों को पकड़ लेगा। 1/2 ^ 32 बदलाव याद किए जाते हैं अगर ठीक कई बिट्स बदले जाएं।
गेरहार्ड

और एक उचित बहुपद के साथ यह कुछ सामान्य वर्गों की सभी त्रुटियों को भी पकड़ लेगा, जैसे कि त्रुटियां।
एरिक्कलेन

मैं आपके उत्तर से सहमत हूँ सिवाय इसके कि प्रश्न एम्बेडेड सिस्टम के बारे में है। एक क्रिप्टोग्राफिक एल्गोरिथ्म का प्रदर्शन छोटे एम्बेडेड सिस्टम पर समस्याग्रस्त हो सकता है।
क्रेग मैकक्वीन

इससे पूरी तरह असहमत होंगे। सीआरसी त्रुटि बहुपद को सावधानी से चुना जाता है ताकि वे 1,2,3,5 का पता लगा सकें और कुछ मामलों में 11 बिट्स की तरह ही कुछ त्रुटियों को मिटा सकें। एक क्रिप्टोग्राफिक हैश विशुद्ध रूप से सांख्यिकीय है, इसलिए आपको बड़े पाचन मूल्यों का उपयोग करना होगा। 8-32 बिट्स एक क्रिप्टोग्राफिक हैश डाइजेस्ट के लिए अवास्तविक है और साथ ही साथ सीपीयू शैलियों और फाटकों में भी महंगा है। यदि आप एम्बेडेड सिस्टम पर काम करते हैं तो निश्चित रूप से बोर्ड पर लेने का जवाब नहीं। सीआरसी का उपयोग करने का एकमात्र समय नहीं है यदि आपको एक बुद्धिमान विरोधी परिदृश्य से निपटना है।
इलिगतानो

5

मुझे हाल ही में सीआरसी का एक प्रयोग हुआ, जो स्मार्ट था। के लेखक jdupe फ़ाइल दोहराव की पहचान और निष्कासन उपकरण (लोकप्रिय exif उपकरण jhead का एक ही लेखक) फ़ाइलों के माध्यम से पहले पारित दौरान इसे इस्तेमाल करता है। एक सीआरसी की गणना प्रत्येक फाइल के पहले 32K पर की जाती है, जो दिखने वाली फाइलों को चिह्नित करने के लिए होती है, साथ ही फाइलों का आकार भी एक जैसा होना चाहिए। इन फ़ाइलों को उन फ़ाइलों की सूची में जोड़ा जाता है जिन पर पूर्ण बाइनरी तुलना करना है। यह बड़ी मीडिया फ़ाइलों की जाँच में तेजी लाता है।


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

1
@ सुपरकैट - मैं वास्तव में विश्वास नहीं करता कि यह वास्तव में एक मुद्दा है। यदि किसी फ़ाइल में crc32 हैडर होता है जो कि बाकी फ़ाइल का crc32 होता है, तो जब crc32 हेडर में प्रत्येक बिट में फ़ाइल को अपडेट किया जाता है, तो उसके अलग होने की लगभग 50% संभावना होगी। हेडर में परिवर्तन एक काफी यादृच्छिक वितरण का पालन करना चाहिए। मैं यह देखने में विफल रहता हूं कि यह कैसे CRC32 (हेडर + डेटा) के परिणामस्वरूप हमेशा एक ही हो रहा है, या किसी भी तरह से फ़ाइल के डेटा भाग पर निर्भर नहीं है।
teratorn

@teratorn: मैंने कई फाइलें देखी हैं जिनके अंत में एक CRC32 है, इस तरह से गणना की जाती है कि संपूर्ण फ़ाइल की CRC32, कुछ विशेष बीज स्थिरांक का उपयोग करके गणना की जाती है, हमेशा कुछ अन्य निरंतर मान होगा। यह बाइनरी कोड छवियों जैसी चीजों के साथ बहुत आम है। यदि एक्मे 1000 डीवीडी प्लेयर फ़र्मवेयर अपग्रेड के लिए निश्चित आकार की कोड छवियों का उपयोग करता है, और हर कोड छवि को एक निश्चित CRC32 होने की उम्मीद करता है, तो एक दिनचर्या जो CRC32 की विभिन्न फ़ाइलों की गणना करती है, वह Acme 1000 के लिए विभिन्न कोड छवियों को भेद करने में असमर्थ होगी।
सुपरकैट

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

4

CRC32 तेजी से रास्ता है और कभी-कभी हार्डवेयर समर्थन (यानी नेहेलम प्रोसेसर पर) होता है। यदि आप हार्डवेयर के साथ हस्तक्षेप कर रहे हैं, या यदि आप प्रदर्शन पर वास्तव में तंग हैं, तो वास्तव में, इसका उपयोग करने का एकमात्र समय है


4

मूलभूत बातों से शुरू करें।

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

सभी हैशिंग एल्गोरिदम टकराव उत्पन्न करते हैं। एक टक्कर तब होती है जब कई कई-बिट संयोजन समान कम बिट आउटपुट उत्पन्न करते हैं। एक हैशिंग एल्गोरिथ्म की क्रिप्टोग्राफ़िक ताकत एक व्यक्ति के लिए अक्षमता से निर्धारित होती है कि किसी दिए गए इनपुट के लिए आउटपुट क्या होने वाला है क्योंकि यदि वे एक हैश के साथ एक फ़ाइल का निर्माण कर सकते हैं जो एक वैध फ़ाइल से मेल खाता है और मान्य अखंडता से समझौता करता है। प्रणाली में। 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 का उपयोग करना शुरू करें तो आश्चर्यचकित न हों।


1

सीआरसी कोड सरल और तेज है।

आपको किस चीज की आवश्यकता है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.