एक base32 सीक्रेट से समय-आधारित वन-टाइम पासवर्ड (TOTP) उत्पन्न करें और सत्यापित करें। Google Authenticator और RFC 6238 के साथ संगत।
वन-टाइम पासवर्ड, RFC 6238। एक base32 सीक्रेट के लिए वर्तमान TOTP उत्पन्न करें और आपके द्वारा प्राप्त कोड को सत्यापित करें। काउंटर वर्तमान समय से लिया जाता है, इसलिए कोड हर 30 या 60 सेकंड में रीफ्रेश होते हैं। पूरी तरह आपके ब्राउज़र में चलता है।
------
कोड सत्यापित करें
TOTP कैसे काम करता है
एक साझा सीक्रेट और घड़ी
TOTP को RFC 6238 में परिभाषित किया गया है और यह HOTP पर एक पतली परत है। दोनों पक्ष एक ही सीक्रेट रखते हैं, जो आम तौर पर एक बार QR कोड के रूप में वितरित किया जाता है और एक ऑथेंटिकेटर ऐप में संग्रहीत होता है। एक कोड उत्पन्न करने के लिए, प्रत्येक पक्ष वर्तमान Unix समय लेता है, काउंटर प्राप्त करने के लिए उसे स्टेप आकार (डिफ़ॉल्ट 30 सेकंड) से विभाजित करता है, सीक्रेट के तहत उस काउंटर का HMAC-SHA1 की गणना करता है, और परिणाम को आवश्यक अंकों की संख्या तक छोटा करता है。
चूँकि काउंटर संदेश के बजाय घड़ी से आता है, नामांकन के बाद दोनों पक्षों के बीच कुछ भी यात्रा करने की आवश्यकता नहीं होती। सर्वर कोई चुनौती नहीं भेजता और ऐप को नेटवर्क एक्सेस की आवश्यकता नहीं होती — यही कारण है कि ऑथेंटिकेटर ऐप्स विमान मोड में काम करते हैं。
छोटा करना और अंकों की गिनती
HMAC आउटपुट 20 बाइट्स है, जो 6-अंकीय कोड से कहीं अधिक है। डायनामिक ट्रंकेशन अंतिम बाइट के निम्न निबल को ऑफसेट के रूप में उपयोग करता है, वहाँ से शुरू होने वाले चार बाइट्स पढ़ता है, साइन समस्याओं से बचने के लिए शीर्ष बिट को मास्क करता है, और उस संख्या को 10^अंकों का मॉड्यूलो लेता है। निश्चित ऑफसेट के बजाय परिवर्तनशील ऑफसेट का उपयोग करने का अर्थ है कि एक हमलावर डाइजेस्ट के ज्ञात टुकड़े पर विश्लेषण केंद्रित नहीं कर सकता।
छह अंक लगभग सार्वभौमिक डिफ़ॉल्ट हैं। अधिकांश ऐप्स आठ अंकों का समर्थन करते हैं और अनुमान-प्रतिरोध के लगभग दो अतिरिक्त दशमलव अंक खरीदते हैं, जो रेट लिमिटिंग की तुलना में कहीं कम मायने रखता है — एक 6-अंकीय कोड का प्रति अनुमान दस लाख में एक मौका होता है, इसलिए वास्तविक रक्षा कुछ विफलताओं के बाद लॉकआउट करना है।
घड़ी ड्रिफ्ट और रीप्ले
डिवाइस ड्रिफ्ट करते हैं। सर्वर आम तौर पर वर्तमान कोड के साथ-साथ पिछली और अगली विंडो के कोड को भी स्वीकार करते हैं, जिससे ±30 सेकंड की सहनशीलता मिलती है। उस विंडो को एक या दो मिनट से आगे बढ़ाने से हमले की सतह में वास्तविक वृद्धि होने लगती है और यह आम तौर पर इस बात का संकेत होता है कि डिवाइस की घड़ी को ठीक करने की ज़रूरत है।
इसे तैनात करते समय दो गुण याद रखने लायक हैं। एक कोड अपनी पूरी विंडो के लिए वैध रहता है, इसलिए एक इंटरसेप्ट किया गया कोड उस विंडो के भीतर रीप्ले किया जा सकता है जब तक कि सर्वर उपयोग किए गए काउंटरों को खर्च के रूप में चिह्नित न करे। और सीक्रेट सममित है: जिसके पास सर्वर-साइड कॉपी है वह हमेशा के लिए वैध कोड उत्पन्न कर सकता है, इसलिए इसे पासवर्ड डेटाबेस की तरह ही समान सुरक्षा की आवश्यकता होती है — विश्राम अवस्था में एन्क्रिप्टेड, कभी लॉग नहीं किया गया, कभी git रिपो में नहीं।
अक्सर पूछे जाने वाले प्रश्न
क्या यह मेरे ऑथेंटिकेटर ऐप की जगह ले सकता है?
यह परीक्षण के लिए और तब उपयोगी है जब आपका फ़ोन उपलब्ध न हो, लेकिन एक ब्राउज़र टैब किसी दीर्घकालिक साझा सीक्रेट को रखने के लिए सुरक्षित जगह नहीं है।
मेरा कोड अस्वीकार क्यों किया जाता है?
लगभग हमेशा घड़ी ड्रिफ्ट। TOTP कोड को वर्तमान UNIX समय से व्युत्पन्न करता है, इसलिए सर्वर से एक 30-सेकंड स्टेप से अधिक दूर एक डिवाइस वह कोड उत्पन्न करता है जिसे सर्वर पहले ही पार कर चुका है।
Base32 सीक्रेट क्या दर्शाता है?
यह वह साझा कुंजी है जिसे दोनों पक्ष रखते हैं। Base32 का उपयोग इसलिए किया जाता है क्योंकि यह केस-असंवेदनशील है और अस्पष्ट वर्णों से बचता है, जिससे इसे टाइप करना या QR कोड में एन्कोड करना व्यावहारिक हो जाता है।
कोड छह अंकों के क्यों होते हैं?
RFC 6238 HMAC को 31-बिट मान तक छोटा करता है और उसे 10^6 का मॉड्यूलो लेता है। छह अंक उपयोगिता और प्रति प्रयास दस लाख में एक अनुमान दर के बीच संतुलन बनाते हैं, जिसे रेट लिमिटिंग और कम करती है।
TOTP और HOTP में क्या अंतर है?
TOTP 30-सेकंड के समय चरणों की गिनती करता है; HOTP घटनाओं की गिनती करता है और केवल तब आगे बढ़ता है जब कोड का उपयोग हो। TOTP को सिंक्रनाइज़ड घड़ियों की आवश्यकता होती है, HOTP को सिंक्रनाइज़ड काउंटरों की।
क्या एक ही कोड दो बार उपयोग किया जा सकता है?
ऐसा नहीं होना चाहिए। एक कोड अपने पूरे समय चरण के लिए वैध रहता है, इसलिए सर्वर से अपेक्षा की जाती है कि वह रिकॉर्ड करे कि उपयोगकर्ता कौन सा चरण पहले ही उपभोग कर चुका है और एक रीप्ले को अस्वीकार करे।