HMAC क्या है?
HMAC (hash-based message authentication code) एक सीक्रेट की को SHA-256 जैसे हैश फ़ंक्शन के साथ जोड़कर एक टैग बनाता है जो साबित करता है कि मैसेज की रखने वाले ने बनाया और बाद में बदला नहीं गया। यही HS256 JWT और ज़्यादातर वेबहुक पेलोड पर हस्ताक्षर करता है; इसे सत्यापित करने का मतलब है उसी की से दोबारा गणना और कॉन्स्टेंट-टाइम तुलना।
- 1कच्ची रिक्वेस्ट बॉडीठीक वही bytes जो आपके सर्वर को मिले
शाखा: pretty-printing, key का बदला क्रम या आख़िर में नई लाइन: अलग bytesफ़ेल
- 2साइन की गई payload बनानाGitHub, Shopify: बॉडी · Stripe:
<t>.<body>· Slack:v0:<timestamp>:<body>· Twilio: पूरा URL + नाम से सॉर्ट किए POST पैरामीटर - 3आपके secret से HMACSHA-256; Twilio के लिए SHA-1; सामान्य HMAC में SHA-1 या SHA-512 भी
- 4नतीजा एन्कोड करनाअपेक्षित signature: hex या Base64; GitHub
sha256=प्रीफ़िक्स जोड़ता है, Slackv0= - 5constant-time तुलनाअपेक्षित बनाम signature हेडर वैल्यू; Stripe में हर
v1वैल्यूशाखा: मेल नहींफ़ेल
गेट: Stripe, Slack: हस्ताक्षरित timestamp सहनशीलता (डिफ़ॉल्ट 5 मिनट) के भीतर हो, वरना नतीजा INVALID
- 6VALIDsignature मेल खाता हैपास
GitLab shared token और body + secret का SHA-256 HMAC वाले चरण से नहीं गुज़रते: token की सीधे तुलना होती है, और दूसरा सादा hash है।
Webhook सिग्नेचर एनालाइज़र कैसे इस्तेमाल करें
- कच्ची रिक्वेस्ट बॉडी ठीक वैसे पेस्ट करें जैसे वह मिली थी (दोबारा फ़ॉर्मैट न करें)।
- scheme चुनें, secret डालें और signature हेडर की वैल्यू पेस्ट करें।
- Slack के लिए रिक्वेस्ट का timestamp जोड़ें; Twilio के लिए पूरा रिक्वेस्ट URL जोड़ें।
- Verify दबाएँ: VALID/INVALID, अपेक्षित बनाम दिया गया signature, टिप्पणियाँ और कोड स्निपेट दिखते हैं।
Webhook सिग्नेचर एनालाइज़र की खूबियाँ
- अपेक्षित signature WebCrypto से लोकल रूप से दोबारा निकालता है — secret कभी ब्राउज़र से बाहर नहीं जाते
- सामान्य HMAC-SHA256/SHA1/SHA512 (hex/Base64), Stripe, GitHub, Shopify, Slack, Twilio, GitLab टोकन और SHA-256(body+secret)
- Stripe और Slack के लिए timestamp सहनशीलता की जाँच (replay से सुरक्षा)
- ठीक वह payload दिखाता है जिस पर हस्ताक्षर हुआ, और constant-time तुलना का नतीजा
- चुनी हुई scheme के लिए तुरंत इस्तेमाल लायक़ Node.js verification स्निपेट
Webhook सिग्नेचर एनालाइज़र का उदाहरण
GitHub का X-Hub-Signature-256
इनपुट:
Body {"a":1} · Secret s · Signature sha256=37beaf650f70b40ec9706929c2e9d835cbd63729988f48781e6383a147215f07आउटपुट:
VALID — the signature matches
Algorithm: HMAC-SHA256 (hex) with "sha256=" prefix
Expected: sha256=37beaf65…215f07Webhook सिग्नेचर एनालाइज़र के बारे में अक्सर पूछे जाने वाले सवाल
कौन-सी scheme सपोर्ट की जाती हैं?
hex या Base64 में सामान्य HMAC-SHA256/SHA1/SHA512, Stripe (t=…,v1=… timestamp सहनशीलता के साथ), GitHub (sha256=…), Shopify (Base64), Slack (v0=… और X-Slack-Request-Timestamp के साथ), Twilio (URL + नाम से सॉर्ट किए पैरामीटर, Base64 SHA1), GitLab shared token और body + secret का SHA-256।
मान्य webhook INVALID क्यों दिखता है?
लगभग हमेशा इसलिए कि बॉडी दोबारा serialize हो गई: pretty-printing, key का बदला हुआ क्रम या आख़िर में नई लाइन बाइट बदल देते हैं। ठीक वही कच्ची बॉडी पेस्ट करें जो आपके सर्वर को मिली थी।
क्या मेरा secret सुरक्षित है?
हाँ — HMAC आपके ब्राउज़र में WebCrypto से निकाला जाता है; secret और payload पेज से बाहर कभी नहीं जाते।
timestamp सहनशीलता क्या है?
Stripe और Slack के लिए हस्ताक्षरित timestamp अभी के समय की सहनशीलता (डिफ़ॉल्ट 5 मिनट) के भीतर होना चाहिए, वरना HMAC मेल खाने पर भी दोबारा भेजी गई डिलीवरी ठुकरा दी जाती है।
तकनीकी नोट्स
Stripe "<t>.<body>" पर हस्ताक्षर करता है और हेडर में v1 signature सूचीबद्ध करता है; Slack "v0:<timestamp>:<body>" पर हस्ताक्षर करता है; Twilio पूरे URL के बाद नाम से सॉर्ट किए गए POST पैरामीटर पर हस्ताक्षर करता है। तुलनाएँ constant-time होती हैं ताकि वे प्रोडक्शन verification कोड जैसी ही रहें।
संदर्भ
- RFC 2104: HMAC: Keyed-Hashing for Message AuthenticationHMAC संरचना: एक सीक्रेट की और हैश फ़ंक्शन मिलकर मैसेज ऑथेंटिकेशन कोड कैसे बनाते हैं।
- FIPS 198-1: The Keyed-Hash Message Authentication Code (HMAC)HMAC का NIST मानक, की-लंबाई और ट्रंकेशन मार्गदर्शन सहित।
- RFC 6234: US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)SHA-1, SHA-224/256/384/512 और HMAC में उनके उपयोग के संदर्भ विवरण और कोड।
- RFC 9421: HTTP Message SignaturesHTTP मैसेज पर हस्ताक्षर करने का मानक तरीका ताकि रिसीवर उनके स्रोत और अखंडता की जाँच कर सके — आधुनिक वेबहुक सिग्नेचर का आधार।