हैश फ़ंक्शन क्या है?
एक हैश फ़ंक्शन किसी भी सामग्री — एक वाक्य, कोई प्रोग्राम, कई गीगाबाइट की बैकअप — को स्थिर लंबाईवाली उस स्ट्रिंग में बदल देता है जिसे कहते हैं हैश या डाइजेस्ट। तीन गुण इसे परिभाषित करते हैं : इनपुट चाहे कुछ भी हो, आउटपुट का आकार हमेशा एक जैसा रहता है, समान सामग्री हमेशा समान हैश बनाती है, और व्यावहारिक रूप से हैश से इनपुट तक लौटना असंभव होना चाहिए। यही तीसरा बिंदु क्रिप्टोग्राफ़िक हैशिंग को CRC32 जैसी चेकसम से अलग करता है।
व्यावहारिक रूप से, दो ही उपयोग मुख्य काम आते हैं। अखंडता की जाँच : प्रकाशक अपनी फ़ाइल का हैश प्रकाशित करता है, आप उसकी दोबारा गणना करते हैं, और समानता साबित करती है कि डाउनलोड में कोई छेड़छाड़ नहीं हुई। सामग्री की तुलना : दस्तावेज़ खुद रखने के बजाय उनके हैश रखे जाते हैं — हैश समान हों तो सामग्री भी समान, और उसके स्वरूप का कुछ भी पता नहीं चलता।
आज कौन सा एल्गोरिदम चुनें?
SHA-256 डिफ़ॉल्ट जवाब है : NSA द्वारा मानकीकृत, फिर हर जगह अपनाया गया, हर भाषा में लागू, और जिसकी कोई ज्ञात कोलिज़न नहीं। SHA-512 64-बिट प्रोसेसर पर बड़े वॉल्यूम के लिए उपयुक्त है, इस तरह की आर्किटेक्चर पर अक्सर अपने चचेरे संस्करण से भी तेज़। SHA-384 सिर्फ़ लंबे संस्करण के अलावा कुछ खास नहीं देता। कुंजी के साथ संदेश के हस्ताक्षर के लिए HMAC-SHA-256 मानक माना जाता है : यह गोपनीय कुंजी और हैशिंग को मिलाता है, जिससे केवल कुंजी रखने वाला ही समान मान बना सकता है।
इनमें MD5 और SHA-1 गैर-संवेदनशील जाँच के लिए उपयोगी रहते हैं — इंडेक्स, कैश, डुप्लिकेट पहचान — जहाँ प्रतिरोध से ज़्यादा गति मायने रखती है। और CRC32क्रिप्टोग्राफ़िक हैश बिल्कुल नहीं है : यह दुर्घटनावश हुई छेड़छाड़ पहचान लेता है, पर जानबूझकर की गई छेड़छाड़ कुछ ही सेकंड में बना ली जाती है।
MD5 और SHA-1 को टूटा हुआ क्यों माना जाता है?
क्योंकि शोधकर्ताओं ने दोनों के लिए, एक ही हैश साझा करने वाले दो अलग-अलग दस्तावेज़. MD5 का यह प्रदर्शन 2004 में हुआ, जबकि SHA-1 की असली कोलिज़न 2017 में SHAttered नाम से सामने आई। कोलिज़न किसी हस्ताक्षर को तोड़ने के लिए काफ़ी है : अगर हमलाकर्ता दस्तावेज़ चुनता है और प्रकाशक बस उसे हैश करता है, तो वह ऐसा दस्तावेज़ दे सकता है जिस पर अलग सामग्री के हस्ताक्षर लगे हों। यही वजह है कि TLS प्रमाणपत्र, सॉफ़्टवेयर अपडेट और पैकेज हस्ताक्षरों ने इन एल्गोरिदम को छोड़ दिया।
हैशिंग जो नहीं करता
हैश करना एन्क्रिप्ट करना नहीं है : हैश डिज़ाइन से ही अपरिवर्तनीय है, पर वह सामग्री को अपठनीय बनाकर उसकी सुरक्षा नहीं करता। हैशिंग कुछ भी एन्क्रिप्ट नहीं करता, यह न तो TLS की जगह लेता है न एन्क्रिप्शन कुंजी, और अकेले पासवर्ड की भी रक्षा नहीं करता — यह काम bcrypt, scrypt या Argon2 का है, जो जानबूझकर धीमे बनाए गए हैं। अंत में, दो बार हैश करने से कुछ मज़बूत नहीं होता : एल्गोरिदम जोड़कर चलाने से सिर्फ़ एक कमज़ोर परत जुड़ती है, जबकि एक अटूट फ़ंक्शन ही काफ़ी होता है।
इनके लिए उपयुक्त
डिस्ट्रीब्यूशन की चेकसम जाँचने वाले सिस्टम एडमिन और CIO, आर्टिफ़ैक्ट सील करने या webhooks को प्रमाणित करने वाले डेवलपर, बैकअप की अखंडता जाँचने वाले ऑडिटर और कंप्लायंस टीम, दस्तावेज़ों की तुलना बाँटे बिना करने वाले पत्रकार और विश्लेषक, हैश, कोलिज़न और साल्ट जैसी अवधारणाओं के साथ काम करने वाले क्रिप्टोग्राफ़ी के विद्यार्थी — और हर वह व्यक्ति जो सामग्री को हैश करना चाहता है, तेज़ी से और बिना निशान के, जिसके पूरक हैं पासवर्ड जनरेटर, Base64 एन्कोडर / डीकोडर, JWT डिकोडर, regex टेस्टर और कैरेक्टर काउंटर.