हैश वापस नहीं मुड़ता
एन्क्रिप्शन में चाबी हो तो मूल पाठ लौट आता है। हैश में ऐसी कोई चाबी नहीं होती। वह किसी भी लंबाई के इनपुट को एक तय लंबाई के मान में दबा देता है — यह एकतरफ़ा रास्ता है, नतीजे से मूल निकाला नहीं जा सकता।
इसलिए हैश एक ही सवाल का जवाब देता है: क्या ये दोनों चीज़ें एक जैसी हैं? डाउनलोड की फ़ाइल प्रकाशित मान से मिलती है या नहीं, अभी टाइप किया पासवर्ड सहेजे हुए से मिलता है या नहीं। अगर कुछ छिपाकर बाद में पढ़ना है, तो हैश नहीं, एन्क्रिप्शन चाहिए।
कौन-सा एल्गोरिदम चुनें
- MD5 — 1991 का डिज़ाइन। एक ही हैश देने वाले दो अलग इनपुट बनाने में लैपटॉप पर कुछ सेकंड लगते हैं। यह इसलिए बचा है क्योंकि वितरक अब भी MD5 चेकसम छापते हैं और उनसे मिलान करना पड़ता है।
- SHA-1 — 2017 में टकराने वाली दो PDF सार्वजनिक हो चुकी हैं। नए काम के लिए इसे चुनने की कोई वजह नहीं।
- SHA-256 — आज का डिफ़ॉल्ट। सर्टिफ़िकेट, हस्ताक्षर और ब्लॉकचेन यहीं हैं।
- SHA-384 और SHA-512 — ये 64-बिट संक्रियाओं पर चलते हैं, इसलिए 64-बिट मशीन पर कभी-कभी SHA-256 से तेज़ भी निकलते हैं। लंबा डाइजेस्ट चाहिए तो इन्हें लें।
सिर्फ़ अखंडता जाँचनी है तो SHA-256 काफ़ी है। वितरक ने केवल MD5 दिया हो तो उसी से मिलाएँ, पर फ़ाइल भरोसेमंद जगह से आई है या नहीं, यह अलग से तय करें।
पासवर्ड के लिए इतना काफ़ी नहीं
पासवर्ड को SHA-256 में रखना सादे पाठ से बेहतर है, फिर भी खतरनाक है। हैश फ़ंक्शन तेज़ चलने के लिए बने हैं, यानी हमलावर हर सेकंड अरबों कोशिशें कर सकता है, और आम पासवर्ड पहले से तालिकाओं में दर्ज हैं।
पासवर्ड के लिए जानबूझकर धीमे बनाए गए फ़ंक्शन लें: bcrypt, scrypt या Argon2। इनमें गणना की लागत बढ़ाई जा सकती है और हर उपयोगकर्ता के लिए अलग सॉल्ट अपने आप जुड़ता है। खुद मत लिखिए, अपनी भाषा में जो पहले से मौजूद है वही इस्तेमाल करें।
एक ही फ़ाइल, अलग हैश
यह टूल आपके इनपुट को UTF-8 बाइट में बदलकर हैश करता है। कमांड लाइन टूल से मान न मिले तो फ़र्क़ लगभग हमेशा स्क्रीन पर न दिखने वाली चीज़ों में होता है।
- लाइन के अंत के अक्षर — Windows का
\r\nऔर Unix का\nअलग बाइट हैं। - आखिर में लाइन ब्रेक —
echoडिफ़ॉल्ट रूप से एक जोड़ देता है।echo -nयाprintfआज़माएँ। - BOM — कुछ एडिटर फ़ाइल की शुरुआत में तीन बाइट लगा देते हैं।