इस लेख में
HMAC क्या है?
HMAC (हैश-आधारित संदेश प्रमाणीकरण कोड) एक क्रिप्टोग्राफ़िक तंत्र है जो एक संदेश प्रमाणीकरण कोड उत्पन्न करने के लिए एक गुप्त कुंजी को हैश फ़ंक्शन के साथ जोड़ता है। एक साधारण हैश के विपरीत, HMAC किसी संदेश की अखंडता और प्रामाणिकता दोनों को सिद्ध करता है — यह आपको बताता है कि डेटा से छेड़छाड़ नहीं की गई है और यह किसी ऐसे व्यक्ति से आया है जो गुप्त कुंजी जानता है।
HMAC को RFC 2104 में परिभाषित किया गया था और इसका उपयोग TLS, IPsec, JWT हस्ताक्षर और API webhook सत्यापन में होता है। यह एल्गोरिदम उन लंबाई-विस्तार हमलों के प्रति प्रतिरोधी है जो SHA-256 जैसे साधारण हैश फ़ंक्शनों को प्रभावित करते हैं, जिससे यह कुंजीबद्ध संदेश प्रमाणीकरण के लिए मानक विकल्प बन जाता है।
HMAC कैसे काम करता है
HMAC आंतरिक और बाहरी पैडिंग के साथ दो-पास हैशिंग दृष्टिकोण का उपयोग करता है। गुप्त कुंजी को हैश फ़ंक्शन के ब्लॉक आकार तक पैड किया जाता है, फिर दो अलग-अलग स्थिरांकों (ipad और opad) के साथ XOR किया जाता है ताकि दो व्युत्पन्न कुंजियाँ उत्पन्न हो सकें।
- आंतरिक हैश — कुंजी को ipad (0x36 दोहराया गया) के साथ XOR किया जाता है, संदेश के साथ जोड़ा जाता है और हैश किया जाता है: H(K XOR ipad || message)
- बाहरी हैश — कुंजी को opad (0x5C दोहराया गया) के साथ XOR किया जाता है, आंतरिक हैश परिणाम के साथ जोड़ा जाता है और फिर से हैश किया जाता है: H(K XOR opad || inner_hash)
- अंतिम आउटपुट — बाहरी हैश का परिणाम HMAC मान होता है, जिसे आमतौर पर हेक्साडेसिमल स्ट्रिंग के रूप में दर्शाया जाता है
यह दोहरी-हैशिंग रचना लंबाई-विस्तार हमलों को रोकती है। भले ही कोई हमलावर H(message) जानता हो, वह गुप्त कुंजी के बिना HMAC(key, message || extra_data) की गणना नहीं कर सकता।
HMAC एल्गोरिदम
HMAC रचना किसी भी क्रिप्टोग्राफ़िक हैश फ़ंक्शन के साथ काम करती है। सबसे सामान्य विकल्प SHA-256, SHA-384 और SHA-512 हैं, हालाँकि SHA-1 और MD5 अभी भी पुरानी प्रणालियों में मिलते हैं।
- HMAC-SHA256 — 256-बिट आउटपुट, API प्रमाणीकरण, JWT HS256 हस्ताक्षर और webhook सत्यापन के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला रूप। अनुशंसित कुंजी आकार: 32 बाइट
- HMAC-SHA384 — 384-बिट आउटपुट, TLS 1.3 सिफर सूट और उच्च-सुरक्षा अनुप्रयोगों में उपयोग किया जाता है। अनुशंसित कुंजी आकार: 48 बाइट
- HMAC-SHA512 — 512-बिट आउटपुट, तब पसंद किया जाता है जब अधिकतम सुरक्षा मार्जिन की आवश्यकता हो या जब प्लेटफ़ॉर्म 64-बिट ऑपरेशन कुशलता से संभालता हो। अनुशंसित कुंजी आकार: 64 बाइट
कुंजी कम से कम हैश आउटपुट जितनी लंबी होनी चाहिए। छोटी कुंजियाँ पैड की जाती हैं, लंबी कुंजियाँ पहले हैश की जाती हैं। अधिकांश अनुप्रयोगों के लिए, 32-बाइट यादृच्छिक कुंजी वाला HMAC-SHA256 उत्कृष्ट सुरक्षा प्रदान करता है।
निःशुल्क आज़माएँ — कोई साइनअप आवश्यक नहीं
HMAC हस्ताक्षर उत्पन्न करें →सामान्य उपयोग के मामले
HMAC कई सुरक्षा प्रोटोकॉल और API प्रमाणीकरण योजनाओं की नींव है।
- API प्रमाणीकरण — Stripe, GitHub और AWS जैसी सेवाएँ webhook पेलोड को सत्यापित करने के लिए HMAC हस्ताक्षरों का उपयोग करती हैं, जिससे यह सुनिश्चित होता है कि अनुरोध वास्तव में प्रदाता से आए हैं
- JWT हस्ताक्षर — JSON Web Tokens में HS256, HS384 और HS512 एल्गोरिदम टोकन पेलोड पर हस्ताक्षर करने के लिए HMAC का उपयोग करते हैं, जिससे प्राप्तकर्ता यह सत्यापित कर सकते हैं कि टोकन में संशोधन नहीं किया गया था
- संदेश अखंडता — HMAC यह सत्यापित करता है कि किसी नेटवर्क पर प्रसारित डेटा में मार्ग में बदलाव नहीं किया गया है, जिसका उपयोग TLS रिकॉर्ड लेयर और IPsec प्रमाणीकरण हेडर में होता है
- OAuth 1.0a — HMAC-SHA1 हस्ताक्षर विधि OAuth अनुरोध पैरामीटर पर हस्ताक्षर करती है ताकि यह सिद्ध हो सके कि अनुरोध किसी अधिकृत क्लाइंट से आया है
HMAC बनाम अन्य प्रमाणीकरण तरीके
HMAC संदेश प्रमाणीकरण के कई दृष्टिकोणों में से एक है। प्रत्येक में सुरक्षा, प्रदर्शन और कुंजी प्रबंधन के मामले में अलग-अलग समझौते होते हैं।
- HMAC बनाम डिजिटल हस्ताक्षर — HMAC एक साझा गुप्त कुंजी (सममित) का उपयोग करता है, जबकि डिजिटल हस्ताक्षर सार्वजनिक/निजी कुंजी जोड़े (असममित) का उपयोग करते हैं। HMAC तेज़ है लेकिन इसके लिए दोनों पक्षों को एक ही सीक्रेट साझा करना आवश्यक है। डिजिटल हस्ताक्षर अस्वीकार्यता-रोधन प्रदान करते हैं।
- HMAC बनाम API कुंजियाँ — API कुंजियाँ हेडर में भेजे जाने वाले साधारण बियरर टोकन हैं। HMAC अनुरोध की सामग्री पर हस्ताक्षर करता है, इसलिए किसी पिछले अनुरोध को इंटरसेप्ट करने से नए अनुरोध जाली नहीं बनाए जा सकते। टाइमस्टैम्प या nonce के साथ मिलाने पर HMAC रीप्ले सुरक्षा प्रदान करता है।
- HMAC बनाम साधारण हैशिंग — किसी संदेश को SHA-256 से हैश करना अखंडता सिद्ध करता है लेकिन प्रामाणिकता नहीं। कोई भी SHA-256(message) की गणना कर सकता है। HMAC के लिए गुप्त कुंजी आवश्यक है, इसलिए केवल अधिकृत पक्ष ही मान्य हस्ताक्षर उत्पन्न कर सकते हैं।
अक्सर पूछे जाने वाले प्रश्न
आदर्श HMAC कुंजी की लंबाई क्या है?
कुंजी कम से कम हैश आउटपुट जितनी लंबी होनी चाहिए — HMAC-SHA256 के लिए 32 बाइट, HMAC-SHA384 के लिए 48 बाइट और HMAC-SHA512 के लिए 64 बाइट। हैश आउटपुट से छोटी कुंजियाँ सुरक्षा गारंटी को कमज़ोर करती हैं। ब्लॉक आकार (SHA-256 के लिए 64 बाइट, SHA-512 के लिए 128 बाइट) से लंबी कुंजियाँ पहले हैश की जाती हैं, इसलिए अत्यधिक लंबी कुंजियों का कोई लाभ नहीं है।
क्या HMAC एन्क्रिप्शन के समान है?
नहीं। HMAC प्रमाणीकरण और अखंडता प्रदान करता है, गोपनीयता नहीं। एक HMAC हस्ताक्षर सिद्ध करता है कि किसी संदेश से छेड़छाड़ नहीं की गई थी और उसे गुप्त कुंजी वाले किसी व्यक्ति ने बनाया था, लेकिन मूल संदेश पठनीय बना रहता है। यदि आपको संदेश की सामग्री छिपानी है, तो HMAC के साथ-साथ एन्क्रिप्शन (AES, ChaCha20) का उपयोग करें।
क्या मैं ब्राउज़र में Web Crypto API के साथ HMAC का उपयोग कर सकता हूँ?
हाँ। Web Crypto API crypto.subtle.importKey() और crypto.subtle.sign() के माध्यम से HMAC का मूल रूप से समर्थन करता है। आप किसी भी बाहरी लाइब्रेरी के बिना पूरी तरह से क्लाइंट-साइड HMAC-SHA256, HMAC-SHA384 और HMAC-SHA512 हस्ताक्षर उत्पन्न कर सकते हैं। यह वही दृष्टिकोण है जिसका उपयोग आधुनिक ब्राउज़र-आधारित HMAC टूल करते हैं।