हैश कोड और चेकसम - क्या अंतर है?


115

मेरी समझ यह है कि एक हैश कोड और चेकसम समान चीजें हैं - एक संख्यात्मक मान, जो डेटा के ब्लॉक के लिए गणना की जाती है, यह अपेक्षाकृत अद्वितीय है।

यानी एक ही संख्यात्मक हैश / चेकसम वैल्यू के डेटा के दो ब्लॉक की संभावना इतनी कम है कि इसे एप्लिकेशन के प्रयोजनों के लिए नजरअंदाज किया जा सकता है।

तो क्या हमारे पास एक ही चीज़ के लिए दो शब्द हैं, या हैश कोड और चेकसम के बीच महत्वपूर्ण अंतर हैं?


3
नीचे दिए गए उत्तरों को संक्षेप में प्रस्तुत करने के लिए: एक हैश कोड एक छोटी संख्या में इनपुट को कम कर देता है, इस तरह से टकराव की संभावना को कम करता है। दूसरी ओर, एक चेकसम, एक छोटी संख्या में इनपुट को कम कर देता है, इस तरह से टकराव की संभावना को कम करता है। आप उस विवरण को मनमाने ढंग से रीफ़्रेश करके एक ध्वनि को दूसरे से अलग कर सकते हैं।
डेन स्टाल्के

3
@DanStahlke - नहीं, ऐसा नहीं है कि नीचे दिए गए उत्तर क्या कहते हैं। हां, वे दोनों कम संख्या में इनपुट कम करते हैं। लेकिन ऐसा करने के लिए कई, कई तरीके हैं, कैसे एल्गोरिदम का उपयोग करने के लिए चुनना है? जो आपके लक्ष्य पर निर्भर करता है। शीर्ष दो उत्तरों को संक्षेप में प्रस्तुत करना: एक चेकसम का लक्ष्य " सबसे सामान्य त्रुटियों का पता लगाना " है। एक एल्गोरिथ्म चुनें जो आपके परिदृश्य में "सबसे आम" हो, जो भी हो, एक अलग चेकसम की उपज देता है। यदि आप एक या दो बिट्स के टकराने के बारे में चिंतित हैं, तो आप एक एल्गोरिथ्म चुन सकते हैं जो उस विशिष्ट त्रुटि का पता लगाने की गारंटी देता है ! यह एक बहुत ही विशिष्ट व्यापार है।
टूलमेकरसेव

1
@DanStahlke - दूसरी ओर, हैश कोड संभावित व्यापार- बंदों की एक विस्तृत श्रृंखला को शामिल करता है। अगर हम एक हैश तालिका बनाने में इस्तेमाल एक मूल्य मतलब है, हम जानते हैं कि वहाँ होगा टकराव, उनमें से बहुत से हो। यह एक बहुत अलग ट्रेड-ऑफ (चेकसम की तुलना में) है। हम औसतन टकराव कम करने की कोशिश कर रहे हैं । हम कुछ भी गारंटी नहीं देते हैं। कुछ इनपुट हो सकते हैं जो केवल एक बिट से भिन्न होते हैं, फिर भी उसी हैश का उत्पादन करते हैं। यह पूरी तरह से ठीक है, अगर औसतन हमें हैश मूल्यों का अच्छा प्रसार मिलता है। फिर भी एक चेकसम के लिए अस्वीकार्य होगा।
टूलमेकरसैट

जवाबों:


72

मैं कहूँगा कि एक checksum जरूरी है एक hashCode । हालांकि, सभी हैशकोड अच्छे चेकसम नहीं बनाते हैं।

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

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


6
हो सकता है कि एक को दूसरे के रूप में इस्तेमाल किया जा सकता है, लेकिन यह देखते हुए कि उनके पास अलग-अलग डिज़ाइन लक्ष्य हैं यह समस्या को भ्रमित करता है।
विम कॉइनन

8
@gumbo: नहीं, हर हैशकोड एक चेकसम नहीं है। नीचे MSalters से स्ट्रिंग उदाहरण देखें।
मारख

41

उनमें से प्रत्येक के पीछे एक अलग उद्देश्य है:

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

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


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

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

22

वास्तव में कुछ अंतर हैं:

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

1
मुझे नहीं लगता कि अलग-अलग इनपुट के लिए चेकसम के अलग होने का कोई लाभ है। वे सिर्फ अखंडता की जाँच के लिए हैं, हैशिंग के लिए नहीं।
user541686

1
@ मेहरदाद: तो आप विभिन्न इनपुट के लिए अलग-अलग परिणाम प्राप्त किए बिना अखंडता की जांच का प्रस्ताव कैसे करते हैं?
माइकल Borgwardt

एर, हो सकता है कि मैंने जो कहा, वह गलत हो? मैं उस हिस्से का जिक्र कर रहा था जहाँ आपने कहा था "जहाँ तक संभव हो" - मैं सिर्फ इतना कह रहा हूँ कि उनके अप्रत्याशित होने का कोई कारण नहीं है या "दूर" जैसे हैश हैं। जब तक इनपुट में एक विशिष्ट परिवर्तन से गुजरता है तब तक चेकसम में कुछ बदलाव होता है, यह एक अच्छा चेकसम है। इसके विपरीत, हैश के साथ, जिसमें समान रूप से / यादृच्छिक रूप से / अप्रत्याशित रूप से / "दूर" चीजों को उनके कोडोमेन पर वितरित करने का लक्ष्य है।
user541686

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

@ मेहरदाद - पहले तो मुझे इससे कोई मतलब नहीं था। यदि एक चेकसम में संभावित चेकसम मानों का अच्छा वितरण नहीं होता है, तो इसका मतलब है कि कुछ चेकसम मान हैं जो कई और इनपुट मानों (अन्य चेकसमों की तुलना में) के लिए लौटाए जाते हैं। लेकिन, इससे चेकसम की उपयोगिता कम हो जाती है? [यह उन बाधाओं को बढ़ाता है जो खराब डेटा उसी परिणाम को लौटाएगा, ठीक है?] हम्म, मैं गलत हूं, आप सही हैं: चेकसम को केवल संभावित गड़बड़ियों का पता लगाने में अच्छा होना चाहिए । सभी मूल्यों पर एक समान वितरण की आवश्यकता नहीं हो सकती है।
टूलमेकरसैट

10

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

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


यह उत्तर वही है जो मेरे लिए घंटी बजाता है। तो डेटा अखंडता एक हैश का ध्यान केंद्रित नहीं है।
त्रयूटीद्रिष्ट

9

विकिपीडिया इसे अच्छी तरह से बताता है:

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


28
यह पढ़ने के बाद, मैं अभी भी सोच रहा हूं कि अंतर क्या है।
kirk.burleson

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

5

एक चेकसम आकस्मिक परिवर्तनों से बचाता है।

एक क्रिप्टोग्राफिक हैश एक बहुत प्रेरित हमलावर के खिलाफ की रक्षा करता है।

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

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


3
"क्रिप्टोग्राफिक हैश" "हैश" और "चेकसम" के बीच भ्रम को बढ़ाता है। "क्रिप्टोग्राफिक चेकसम" बेहतर है क्योंकि यह नहीं करता है।
मार्श

5

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

स्रोत: CompTIA® सिक्योरिटी + गाइड टू नेटवर्क सिक्योरिटी फंडामेंटल - फिफ्थ एडिशन - मार्क सियापा-पेज 191


4

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


4

हैश-कोड और चेकसम फ़ंक्शन के बीच का अंतर है, उन्हें अलग-अलग उद्देश्यों के लिए डिज़ाइन किया जा रहा है।

  • जांच योग पता लगाने के लिए प्रयोग किया जाता है , तो इनपुट में कुछ बदल गया है।

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

    इसके अलावा, इस नियम के विरोध में हैश-फंक्शन के लिए और आवश्यकताएं हो सकती हैं, जैसे कि हैश-कोड वैल्यूज़ के पेड़ / क्लस्टर / बाल्टी बनाने की क्षमता।

    और यदि आप कुछ साझा प्रारंभिक यादृच्छिककरण जोड़ते हैं, तो आप आधुनिक एन्क्रिप्शन / की-एक्सचेंज के लिए अवधारणा प्राप्त करते हैं।


संभाव्यता के बारे में:

उदाहरण के लिए, मान लेते हैं कि इनपुट डेटा वास्तव में हमेशा बदलता रहता है (समय का 100%)। और मान लें कि आपके पास "परिपूर्ण" हैश / चेकसम फ़ंक्शन है, जो 1-बिट हैश / चेकसम मान उत्पन्न करता है। इसलिए, आपको यादृच्छिक इनपुट-डेटा के लिए अलग-अलग हैश / चेकसम मान, 50% समय मिलेगा।

  • यदि आपके यादृच्छिक इनपुट डेटा में वास्तव में 1 बिट बदल गया है, तो आप 100% समय का पता लगा पाएंगे, चाहे इनपुट डेटा कितना भी बड़ा क्यों न हो।

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

    ...

इसका मतलब है, यदि आपके इनपुट डेटा में बिट्स की संख्या आपके हैश / चेकसम मूल्य में बिट्स की संख्या से कई गुना अधिक है, तो वास्तव में अलग-अलग इनपुट मानों के लिए अलग-अलग हैश / चेकसम वैल्यू प्राप्त करने की संभावना कम हो जाती है और यह आवश्यक नहीं है स्थिर


2

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


1
क्योंकि चेकसम को उल्टा करना मुश्किल नहीं है, इससे पता चलता है कि वे जाँच के लिए अच्छा नहीं होगा कि क्या कुछ जानबूझकर बदल दिया गया था।
बेब्लास्सेल

0

Redis क्लस्टर डेटा शार्किंग में, यह hash slotतय करने के लिए एक का उपयोग करता है कि यह किस नोड में जाता है। उदाहरण के लिए नीचे modulo ऑपरेशन लें:

123 % 9 = 6
122 % 9 = 5
141 % 9 = 6

6भिन्न आदानों भर में दो बार आया है। हैश का उद्देश्य केवल इनपुट वैल्यू को आउटपुट वैल्यू में मैप करना है और यूनीकनेस डील का हिस्सा नहीं है। तो दो अलग-अलग इनपुट जो समान आउटपुट उत्पन्न करते हैं, हैश की दुनिया में ठीक है।

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


-4

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

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

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