यह क्या करता है
HMAC (हैश-आधारित मैसेज ऑथेंटिकेशन कोड, RFC 2104) किसी संदेश पर हस्ताक्षर करने के लिए गुप्त कुंजी को हैश फ़ंक्शन के साथ जोड़ता है। वही कुंजी जानने वाला प्राप्तकर्ता HMAC दोबारा निकालकर भेजी गई वैल्यू से मिलाता है। अगर संदेश बदला गया हो या भेजने वाले को कुंजी पता न हो, तो वैल्यू मेल नहीं खातीं।
HMAC हर जगह है: वेबहुक हस्ताक्षर (GitHub, Stripe, Slack), साइन किए गए API अनुरोध, HS256 वाले JWT, कुकी साइनिंग और वन-टाइम पासवर्ड। यह टूल HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 और HMAC-SHA512 एक साथ निकालता है, ताकि आप अपने सिस्टम वाले से मिला सकें।
इस्तेमाल कैसे करें
- गुप्त कुंजी लिखें। अगर कुंजी सादे टेक्स्ट की बजाय hex या Base64 बाइट में है, तो कुंजी का फ़ॉर्मैट बदलें।
- संदेश पेस्ट करें या उदाहरण पर क्लिक करें।
- टाइप करते ही सभी HMAC अपडेट होते हैं। Hex या Base64 आउटपुट चुनें और ज़रूरी वैल्यू कॉपी करें।
संदेश ठीक वैसा ही UTF-8 में एन्कोड होता है जैसा लिखा गया है, स्पेस और नई पंक्तियों समेत।
उदाहरण
कुंजी key और संदेश The quick brown fox jumps over the lazy dog के लिए HMAC-SHA256 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 है। कमांड लाइन पर भी यही वैल्यू जाँच सकते हैं:
echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"
-n पर ध्यान दें: इसके बिना echo नई पंक्ति जोड़ देता है और HMAC बदल जाता है।
वेबहुक सत्यापित करना
वेबहुक जाँचने के लिए JSON पार्स करने से पहले की रॉ रिक्वेस्ट बॉडी लें, सेवा के दस्तावेज़ के अनुसार स्ट्रिंग बनाएँ (अक्सर timestamp.body), अपने साइनिंग सीक्रेट से HMAC निकालें और सिग्नेचर हेडर से मिलाएँ। अपने कोड में टाइमिंग हमलों से बचने के लिए हस्ताक्षर कॉन्स्टेंट-टाइम फ़ंक्शन से मिलाएँ।
अक्सर पूछे जाने वाले सवाल
› हैश और HMAC में क्या अंतर है?
SHA-256 जैसा सादा हैश कोई भी निकाल सकता है। HMAC हैश में एक गुप्त कुंजी मिलाता है, इसलिए वैल्यू बनाना या जाँचना सिर्फ़ वही कर सकता है जिसे कुंजी पता हो। यह केवल चेकसम नहीं, बल्कि मैसेज ऑथेंटिकेशन कोड है।
› कौन-सा HMAC एल्गोरिदम इस्तेमाल करूँ?
आम तौर पर HMAC-SHA256, ज़्यादातर API और वेबहुक यही चाहते हैं। HMAC-SHA512 भी ठीक है। HMAC-MD5 और HMAC-SHA1 को MAC के रूप में अब भी सुरक्षित माना जाता है, पर इन्हें तभी इस्तेमाल करें जब कोई पुराना सिस्टम माँगे।
› मेरा HMAC सर्वर वाले से मेल क्यों नहीं खाता?
संदेश के सटीक बाइट जाँचें (आख़िर में एक नई पंक्ति या JSON की अलग स्पेसिंग सब बदल देती है), कुंजी का फ़ॉर्मैट (टेक्स्ट, hex या Base64) और आउटपुट एन्कोडिंग देखें। वेबहुक सेवाएँ अक्सर टाइमस्टैम्प और रॉ रिक्वेस्ट बॉडी से बनी स्ट्रिंग पर हस्ताक्षर करती हैं।
› क्या मेरी गुप्त कुंजी कहीं सेव या भेजी जाती है?
नहीं। HMAC आपके ब्राउज़र में निकाला जाता है। कुंजी सिर्फ़ इस पेज की मेमोरी में रहती है: न सेव होती है, न एड्रेस बार में लिखी जाती है, न शेयर लिंक में जाती है।