⏱️ क्रिप्टोग्राफी एवं RFC प्रोटोकॉल ✓ IETF मानक विश्लेषण

TOTP बनाम HOTP का विश्लेषण: मुख्य अंतर, सुरक्षा और कार्य सिद्धांत

लाखों डेवलपर और सुरक्षा इंजीनियर हर दिन स्क्रीन पर 6-अंकीय रोलिंग सत्यापन कोड देखते हैं, लेकिन बहुत कम लोग स्क्रीन के नीचे संचालित होने वाले सुरुचिपूर्ण गणितीय तंत्र को समझते हैं। 2005 में RFC 4226 (HOTP) इवेंट-ड्रिवन काउंटर से लेकर 2011 में RFC 6238 (TOTP) असतत (discrete) समय चरणों तक, यह गाइड बाइट-स्तरीय डायनामिक ट्रंकेशन एल्गोरिदम, काउंटर डिसिंक कमजोरियों, क्लॉक ड्रिफ्ट सहनशीलता और आधुनिक वेब पर TOTP के वर्चस्व की जांच करती है।

2FA
2FA-Tool सुरक्षा टीम
अपडेट किया गया: अक्टूबर 2026
अनुमानित पढ़ने का समय: 14 मिनट (2,600+ शब्द)
RFC 6238 RFC 4226 Dynamic Truncation
💡 क्रिप्टोग्राफ़िक निष्कर्ष (संक्षेप में)
  • मौलिक इनपुट अंतर: HOTP एक मोनोटोनिक रूप से बढ़ते काउंटर C से हैश की गणना करता है, जबकि TOTP C को एक युग समय चरण T (CurrentUnixTime / 30) से बदल देता है।
  • प्रत्यक्ष विरासत: TOTP गणितीय रूप से HOTP का ही एक विशेष रूप है: TOTP(K, Time) = HOTP(K, T)। दोनों एल्गोरिदम बिल्कुल समान डायनामिक ट्रंकेशन फ़ंक्शन का उपयोग करते हैं।
  • वास्तुशिल्प निर्णायक कारक: HOTP स्टेटफुल (stateful) है (सर्वरों को प्रत्येक सत्यापन पर डिस्क पर काउंटरों को लॉक और सुरक्षित करना पड़ता है)। TOTP स्टेटलेस (stateless) है, जो आधुनिक क्लाउड माइक्रोसर्विसेज को केंद्रीकृत डेटाबेस राइट संचालन के बिना वितरित लोड-बैलेंस्ड क्लस्टर्स में टोकन सत्यापित करने की अनुमति देता है।
01

ऐतिहासिक जड़ें: मालिकाना हार्डवेयर टोकन से ओपन वेब मानकों तक

2000 के दशक की शुरुआत में, कॉर्पोरेट टू-फैक्टर प्रमाणीकरण पर RSA SecurID जैसे मालिकाना की-फ़ॉब्स (key fobs) का दबदबा था। इन बंद, महंगे उपकरणों में आंतरिक क्वार्ट्ज क्रिस्टल होते थे जो मालिकाना एंटरप्राइज़ सर्वरों के साथ सिंक्रनाइज़ होते थे। यदि कोई संगठन हजारों कर्मचारियों को मल्टी-फैक्टर सुरक्षा प्रदान करना चाहता था, तो हार्डवेयर खरीद और मालिकाना लाइसेंस की लागत अत्यधिक थी।

प्रमाणीकरण को मालिकाना विक्रेताओं से मुक्त करने के लिए, उद्योग के नेताओं द्वारा OATH (Initiative for Open Authentication) कंसोर्टियम का गठन किया गया ताकि खुले, रॉयल्टी-मुक्त IETF मानक प्रदान किए जा सकें जिनका कोई भी सॉफ्टवेयर इंजीनियर स्वतंत्र रूप से निरीक्षण, कार्यान्वयन और ऑडिट कर सके:

📜 2005: RFC 4226 (HOTP)

HMAC-Based One-Time Password Algorithm। भौतिक पुश बटन वाले कम-शक्ति वाले माइक्रोकंट्रोलर्स के लिए तैयार किया गया। बटन दबाने पर आंतरिक काउंटर बढ़ता है और LCD स्क्रीन पर 6-अंकीय टोकन प्रिंट होता है।

📜 2011: RFC 6238 (TOTP)

Time-Based One-Time Password Algorithm। जैसे ही स्मार्टफ़ोन अपनाने में वृद्धि हुई, इसे डिज़ाइन किया गया। सेलुलर NTP नेटवर्क समय सिंक्रोनाइज़ेशन का लाभ उठाकर, TOTP ने भौतिक बटन स्थिति के बेमेल होने को पूरी तरह से समाप्त कर दिया।

02

HOTP (RFC 4226) आर्किटेक्चर एवं डायनामिक ट्रंकेशन बाइट यांत्रिकी

HOTP की मूल गणितीय परिभाषा संक्षिप्त और सुरुचिपूर्ण है:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C)) mod 10DigitCount

पैरामीटर विवरण:

  • K: साझा सममित गुप्त कुंजी (आमतौर पर एक Base32 डिकोडेड 160-बिट / 20-बाइट बाइनरी अनुक्रम)।
  • C: 8-बाइट (64-बिट) बिग-एंडियन पूर्णांक काउंटर।
  • HMAC-SHA-1: 20-बाइट (160-बिट) क्रिप्टोग्राफ़िक डाइजेस्ट उत्पन्न करने वाला कीड-हैश मैसेज ऑथेंटिकेशन कोड।

🔍 डायनामिक ट्रंकेशन (DT) कैसे 20 बाइट्स को 6 अंकों में बदलता है:

एक HMAC-SHA1 डाइजेस्ट में 160 बिट्स (20 बाइट्स) होते हैं। 6 समान दशमलव अंक निकालने के लिए RFC 4226 के अनुभाग 5.3 में परिभाषित एक नियतात्मक (deterministic), टकराव-प्रतिरोधी चयन तंत्र की आवश्यकता होती है:

// चरण 1: डायनामिक ऑफ़सेट की गणना करें
Offset = HS[19] & 0x0F
20-बाइट डाइजेस्ट का अंतिम बाइट (इंडेक्स 19) लें। 0x0F के साथ मास्किंग करने पर निम्न-क्रम (low-order) 4 बिट्स अलग हो जाते हैं, जिससे 0 और 15 (0x0 से 0xF) के बीच का एक पूर्णांक प्राप्त होता है। यह सुनिश्चित करता है कि बाद का 4-बाइट निष्कर्षण कभी भी 20-बाइट बफ़र से आगे न जाए (चूँकि 15 + 4 = 19)।
// चरण 2: मास्किंग के साथ 4 क्रमागत बाइट्स निकालें
P = ( (HS[Offset] & 0x7F) << 24 ) | ( (HS[Offset+1] & 0xFF) << 16 ) | ( (HS[Offset+2] & 0xFF) << 8 ) | ( HS[Offset+3] & 0xFF )
Offset से शुरू करते हुए 4 बाइट्स निकालें। मास्क 0x7F विभिन्न CPU आर्किटेक्चर में हस्ताक्षरित पूर्णांक अतिप्रवाह (signed integer overflow) से बचने के लिए सबसे महत्वपूर्ण बिट (MSB) को शून्य कर देता है (एक शुद्ध धनात्मक 31-बिट पूर्णांक सुनिश्चित करता है)।
// चरण 3: अंतिम अंकों के लिए मॉड्यूलो अंकगणित
OTP = P mod 106 = P mod 1000000
मॉड्यूलो 1,000,000 लागू करने से अंतिम 6 दशमलव अंक अलग हो जाते हैं, यदि आवश्यक हो तो अग्रणी शून्यों (leading zeroes) के साथ पैडिंग की जाती है (उदा. 748 "000748" बन जाता है)।
🧪 RFC 4226 परिशिष्ट D से ठोस परीक्षण वेक्टर:

मान लीजिए गुप्त कुंजी ASCII "12345678901234567890" है और काउंटर C = 0 है। हेक्साडेसिमल में परिणामी HMAC-SHA1 डाइजेस्ट है:

cc 93 cf 18 50 8d 94 93 4c 64 b6 6d 8b fb 87 fb 23 cb 4b 71

1. अंतिम बाइट 0x71 है। 0x71 & 0x0F = 0x01, इसलिए Offset = 1।
2. बाइट्स 1 से 4 हैं: 93 cf 18 50। MSB को शून्य करने पर 0x13cf1850 प्राप्त होता है, जो दशमलव में 332,339,280 के बराबर है।
3. 332339280 mod 1000000 = 339280। परिणामी 6-अंकीय OTP 339280 है!

03

TOTP (RFC 6238) विकास: टाइम-स्टेप का जादू

HOTP के लिए क्लाइंट पर काउंटर को सर्वर के साथ सिंक रखना आवश्यक था। सॉफ़्टवेयर उपकरणों पर, कीस्ट्रोक्स या बटन दबाने की गिनती लगातार मानवीय त्रुटि पेश करती है।

RFC 6238 ने काउंटर C को सीधे Unix युग घड़ी से प्राप्त एक असतत (discrete) समय कदम T से बदल दिया:

T = ⌊ (CurrentUnixTime - T0) / X ⌋
  • CurrentUnixTime: 1970-01-01 00:00:00 UTC से बीते हुए सेकंड।
  • T0: युग आरंभीकरण संदर्भ (सभी आधुनिक परिनियोजनों में डिफ़ॉल्ट 0)।
  • X (टाइम स्टेप विंडो): 30 सेकंड की मानक अनुशंसित अवधि।
  • फ्लोर फंक्शन ⌊ ⌋: 30-सेकंड की विंडो के भीतर किसी भी टाइमस्टैम्प के लिए, T अपरिवर्तित रहता है। उदाहरण के लिए, युग सेकंड 1728211200 और 1728211229 के बीच, T बिल्कुल समान 64-बिट पूर्णांक का मूल्यांकन करता है।

बाइनरी सीरियलाइजेशन: एक बार T की गणना हो जाने के बाद, इसे 8-बाइट बिग-एंडियन बाइनरी बाइट बफ़र में पैक किया जाता है (HOTP में काउंटर C की मेमोरी संरचना के समान)। फलस्वरूप, एकीकृत सूत्र सरल हो जाता है:
TOTP(K, Time) = HOTP(K, T) यह गणितीय लालित्य बताता है कि ऑथेंटिकेटर ऐप्स लगातार स्थिति सिंक्रोनाइज़ेशन की आवश्यकता के बिना हर 30 सेकंड में समकालिक रूप से टोकन क्यों बदलते हैं।

RFC 6238 SHA-256 और SHA-512 का समर्थन: जबकि RFC 4226 ने कड़ाई से HMAC-SHA-1 को परिभाषित किया था, RFC 6238 ने HMAC-SHA-256 और HMAC-SHA-512 के लिए समर्थन बढ़ाया। SHA-256 (32-बाइट डाइजेस्ट) में, ऑफ़सेट बाइट 31 (HS[31] & 0x0F) से लिया जाता है; SHA-512 (64-बाइट डाइजेस्ट) में, ऑफ़सेट बाइट 63 (HS[63] & 0x0F) से लिया जाता है। हालाँकि, 99.9% वाणिज्यिक वेबसाइटों (Google, Microsoft, GitHub, AWS) में, लीगेसी मोबाइल क्लाइंट संगतता के कारण SHA-1 सर्वव्यापी डिफ़ॉल्ट बना हुआ है।
04

व्यापक तुलनात्मक मैट्रिक्स (HOTP बनाम TOTP)

आयाम HOTP (RFC 4226) TOTP (RFC 6238)
इनपुट चर इवेंट काउंटर C (मोनोटोनिक रूप से बढ़ता हुआ) टाइम स्टेप T (30-सेकंड Unix युग विंडो)
टोकन जीवनकाल अनिश्चित (अगले लॉगिन द्वारा उपभोग होने तक वैध) कड़ाई से 30 सेकंड (स्वचालित रूप से अमान्य)
सर्वर आर्किटेक्चर स्टेटफुल (प्रति लॉगिन परमाणु डेटाबेस राइट संचालन की आवश्यकता) स्टेटलेस (स्वतंत्र NTP सत्यापन)
रीप्ले हमला जोखिम मध्यम (इंटरसेप्ट किया गया टोकन उपयोग किए जाने तक वैध रहता है) न्यूनतम (वर्तमान विंडो में शेष सेकंड तक सीमित)
प्राथमिक विफलता मोड काउंटर डिसिंक्रोनाइज़ेशन (आकस्मिक बटन प्रेस) क्लॉक ड्रिफ्ट (क्लाइंट फोन समय में विचलन)
समर्थित क्रिप्टोग्राफ़िक हैश विशेष रूप से HMAC-SHA-1 HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512
उद्योग में अपनाना लीगेसी बैंकिंग फ़ॉब्स, विशिष्ट भौतिक गेट्स आधुनिक वेब ऑथेंटिकेटर्स का 99.9%
05

डिसिंक्रोनाइज़ेशन बनाम क्लॉक ड्रिफ्ट: तकनीकी समाधान

वितरित उत्पादन परिवेशों में, क्लाइंट और सर्वर अनिवार्य रूप से ड्रिफ्ट करते हैं। क्रिप्टोग्राफरों ने विश्वसनीयता बनाए रखने के लिए स्पष्ट क्षतिपूर्ति विंडो डिज़ाइन की हैं:

⚙️ HOTP शमन: लुक-अहेड सत्यापन विंडो (s)

यदि कोई उपयोगकर्ता सबमिट किए बिना अपने टोकन बटन को 5 बार क्लिक करता है, तो क्लाइंट काउंटर C+5 तक पहुंच जाता है जबकि सर्वर C पर रहता है।
RFC 4226 निर्दिष्ट करता है कि प्रमाणीकरण पर, सर्वर [C+1, C+s] (आमतौर पर s=20) तक फैली एक लुक-अहेड विंडो की गणना करता है। यदि कोई मेल मिलता है, तो सर्वर आगे छलांग लगाता है और काउंटर C को तुरंत सिंक्रनाइज़ करता है।

⏱️ TOTP शमन: समय विचलन सहनशीलता (±1 विंडो)

नेटवर्क विलंबता या क्लाइंट डिवाइस क्लॉक ड्रिफ्ट (उदा. 10 सेकंड पीछे चलने वाली फ़ोन घड़ी) के कारण, टोकन आसन्न समय चरणों में आ सकते हैं।
उत्पादन सर्वर 3-विंडो सरणी का मूल्यांकन करते हैं: [T-1, T, T+1], जो प्रभावी रूप से स्वीकृति विंडो को 90 सेकंड तक बढ़ा देता है।

अनिवार्य एंटी-रीप्ले नियम: 90-सेकंड की विचलन विंडो के भीतर रीप्ले हमलों को रोकने के लिए, सर्वरों को 90 सेकंड के लिए मेमोरी (उदा. Redis) में उपभोग किए गए टोकन को कैश और लॉक करना होगा, जिससे डुप्लिकेट सबमिशन अस्वीकार हो जाएं।
🛡️ कॉन्स्टेंट-टाइम स्ट्रिंग तुलना (टाइमिंग अटैक से सुरक्षा):

जब सर्वर सत्यापित करते हैं कि उपयोगकर्ता द्वारा प्रस्तुत कोड परिकलित कोड से मेल खाता है या नहीं, तो साधारण स्ट्रिंग समानता जांच (जैसे userOtp === serverOtp) पहले बेमेल वर्ण पर समाप्त हो जाती है। सूक्ष्म नेटवर्क राउंड-ट्रिप प्रतिक्रिया समय को मापने वाला हमलावर पुनरावृत्ति से अंकों का पुनर्निर्माण कर सकता है। एंटरप्राइज़ बैकएंड साइड-चैनल टाइमिंग विश्लेषण को विफल करने के लिए कॉन्स्टेंट-टाइम समानता तुलना (उदा. Node.js में crypto.timingSafeEqual) लागू करते हैं।

06

TOTP ने आधुनिक इंटरनेट पर क्यों जीत हासिल की

वेब पर HOTP पर TOTP की निर्णायक जीत तीन वास्तुशिल्प अनिवार्यताओं से प्रेरित थी:

☁️ स्टेटलेस क्लाउड स्केलेबिलिटी

वितरित बहु-क्षेत्रीय माइक्रोसर्विसेज में, NTP-सिंक्रनाइज़ घड़ी वाला कोई भी सर्वर इंस्टेंस केंद्रीकृत डेटाबेस रिकॉर्ड को क्वेरी या लॉक किए बिना TOTP टोकन सत्यापित कर सकता है।

📱 मोबाइल इकोसिस्टम तालमेल

स्मार्टफ़ोन सेलुलर बेस स्टेशनों और GPS के माध्यम से अपनी सिस्टम घड़ियों को लगातार कैलिब्रेट करते हैं, जिससे भौतिक हार्डवेयर रखरखाव की आवश्यकता के बिना क्लॉक ड्रिफ्ट समाप्त हो जाता है।

🛡️ संकीर्ण 30-सेकंड का आक्रमण विंडो

HOTP टोकन उपयोग किए जाने तक अनिश्चित काल के लिए वैध रहते हैं। TOTP टोकन 30 सेकंड के भीतर समाप्त हो जाते हैं, जिससे समझौता किए गए लॉग और पैसिव पैकेट कैप्चर स्वचालित रूप से निष्प्रभावी हो जाते हैं।

🧮 शुद्ध क्लाइंट-साइड RFC 6238 इंजन

2FA-Tool में रीयल-टाइम TOTP गणना का अनुभव करें

देखें कि कैसे आपकी Base32 गुप्त स्ट्रिंग HMAC-SHA1 डायनामिक ट्रंकेशन के माध्यम से गतिशील 6-अंकीय कोड में बदलती है। आपके ब्राउज़र में 100% ऑफ़लाइन।

ऑनलाइन जनरेटर खोलें