Oh MyUtils

TOTP जनरेटर - समय-आधारित वन-टाइम पासवर्ड टूल ऑनलाइन

2FA परीक्षण के लिए TOTP कोड जनरेट और सत्यापित करें। सीक्रेट, QR कोड और otpauth:// URI बनाएं। RFC 6238 अनुपालन — 100% क्लाइंट-साइड।

100% क्लाइंट-साइड — सीक्रेट कुंजियां कभी आपके ब्राउज़र से बाहर नहीं जातीं
एल्गोरिथम
अंक
अवधि (सेकंड)

TOTP कोड जनरेट करने के लिए सीक्रेट कुंजी दर्ज करें

अक्सर पूछे जाने वाले प्रश्न

TOTP जनरेटर क्या है?

TOTP (टाइम-बेस्ड वन-टाइम पासवर्ड) जनरेटर एक ऑनलाइन टूल है जो RFC 6238 मानक का पालन करते हुए समय-सीमित प्रमाणीकरण कोड बनाता है। TOTP, Google Authenticator, Authy और Microsoft Authenticator जैसे लोकप्रिय प्रमाणीकरण ऐप्स के पीछे का एल्गोरिदम है। यह एक साझा गुप्त कुंजी को वर्तमान Unix टाइमस्टैम्प के साथ HMAC (हैश-बेस्ड मैसेज ऑथेंटिकेशन कोड) फंक्शन का उपयोग करके जोड़ता है, फिर परिणाम को छोटा करके एक संक्षिप्त संख्यात्मक कोड (आमतौर पर 6 या 8 अंक) बनाता है। कोड हर 30 सेकंड (डिफ़ॉल्ट रूप से) बदलता है, जो इसे दो-कारक प्रमाणीकरण (2FA) में दूसरे कारक के रूप में उपयोगी बनाता है। यह टूल डेवलपर्स को प्रमाणीकरण ऐप इंस्टॉल किए बिना सीधे ब्राउज़र में TOTP कोड जनरेट, सत्यापित और परीक्षण करने की अनुमति देता है।

मैं इस टूल का उपयोग कैसे करूं?

1. Base32-एन्कोडेड गुप्त कुंजी दर्ज करें, या यादृच्छिक कुंजी बनाने के लिए "सीक्रेट जनरेट करें" पर क्लिक करें। 2. TOTP पैरामीटर कॉन्फ़िगर करें: एल्गोरिदम (SHA-1 अधिकांश सेवाओं द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट है), अंकों की संख्या (6 या 8), और समय अवधि (30 सेकंड मानक है)। 3. टूल तुरंत वर्तमान TOTP कोड दिखाता है जिसमें एक काउंटडाउन टाइमर होता है जो बताता है कि कोड कब रिफ्रेश होगा। 4. वैकल्पिक रूप से, पूर्ण otpauth:// URI जनरेट करने के लिए जारीकर्ता और लेबल फ़ील्ड भरें। 5. कोड मिलान सत्यापित करने के लिए अपने प्रमाणीकरण ऐप से जनरेट किए गए QR कोड को स्कैन करें। 6. सत्यापन टैब का उपयोग करके कोड पेस्ट करें और जांचें कि यह कॉन्फ़िगर किए गए सीक्रेट और टाइम विंडो के लिए वैध है या नहीं। 7. किसी भी कोड या URI को क्लिपबोर्ड पर कॉपी करने के लिए उसके बगल में कॉपी बटन पर क्लिक करें।

क्या मेरी गुप्त कुंजी सुरक्षित है? क्या यह सर्वर पर भेजी जाती है?

आपकी गुप्त कुंजी 100% सुरक्षित है और कभी भी आपके ब्राउज़र से बाहर नहीं जाती। सभी TOTP गणना -- HMAC कैलकुलेशन, कोड जनरेशन, सत्यापन, और QR कोड रेंडरिंग -- पूरी तरह से JavaScript का उपयोग करके क्लाइंट-साइड पर की जाती है। टूल RFC 6238 गणना के लिए otpauth लाइब्रेरी और क्रिप्टोग्राफिक ऑपरेशन के लिए ब्राउज़र के नेटिव Web Crypto API का उपयोग करता है। कोई भी डेटा किसी सर्वर पर प्रेषित नहीं किया जाता, कोई एनालिटिक्स आपकी गुप्त कुंजी की सामग्री को ट्रैक नहीं करता, और आपके ब्राउज़र टैब की मेमोरी के अलावा कहीं भी कोई डेटा संग्रहीत नहीं किया जाता। यह डेवलपमेंट और QA के दौरान वास्तविक TOTP सीक्रेट्स के साथ परीक्षण के लिए टूल को सुरक्षित बनाता है।

otpauth:// URI प्रारूप क्या है?

otpauth:// URI प्रमाणीकरण ऐप्स में TOTP (और HOTP) सीक्रेट्स को प्रोविज़न करने के लिए एक मानकीकृत प्रारूप है। जब इसे QR कोड में एन्कोड किया जाता है, तो स्कैन करने पर प्रमाणीकरण ऐप स्वचालित रूप से सभी आवश्यक पैरामीटर के साथ कॉन्फ़िगर हो जाता है। प्रारूप है: otpauth://totp/{label}?secret={secret}&issuer={issuer}&algorithm={algorithm}&digits={digits}&period={period}। लेबल आमतौर पर issuer:account प्रारूप में होता है (जैसे, MyApp:user@example.com), सीक्रेट Base32 में एन्कोडेड साझा कुंजी है, और वैकल्पिक पैरामीटर में एल्गोरिदम (SHA1, SHA256, SHA512), अंक (6 या 8), और अवधि (डिफ़ॉल्ट 30 सेकंड) शामिल हैं। यह प्रारूप Google Authenticator, Microsoft Authenticator, Authy, FreeOTP और लगभग सभी मानक-अनुपालक प्रमाणीकरण ऐप्स द्वारा समर्थित है।

TOTP और HOTP में क्या अंतर है?

TOTP (टाइम-बेस्ड वन-टाइम पासवर्ड, RFC 6238) वर्तमान समय के आधार पर कोड जनरेट करता है। कोड हर N सेकंड (डिफ़ॉल्ट 30) में स्वचालित रूप से बदलता है, और सर्वर और क्लाइंट दोनों वर्तमान Unix टाइमस्टैम्प को काउंटर के रूप में उपयोग करते हैं, इसलिए जब तक उनकी घड़ियां यथोचित रूप से सटीक हैं, वे सिंक्रनाइज़्ड रहते हैं। HOTP (HMAC-बेस्ड वन-टाइम पासवर्ड, RFC 4226) एक बढ़ते काउंटर के आधार पर कोड जनरेट करता है। हर बार कोड जनरेट होने पर काउंटर एक बढ़ता है, और सर्वर और क्लाइंट को स्वतंत्र रूप से काउंटर ट्रैक करना होता है -- यदि कोड जनरेट किए जाते हैं लेकिन उपयोग नहीं किए जाते तो डीसिंक्रनाइज़ेशन हो सकता है। TOTP तकनीकी रूप से HOTP का एक विस्तार है जहां "काउंटर" वर्तमान समय को अवधि से विभाजित करके प्राप्त किया जाता है। यह टूल TOTP पर केंद्रित है क्योंकि यह आधुनिक 2FA कार्यान्वयन के लिए प्रमुख मानक है।

मेरे TOTP कोड मेरे प्रमाणीकरण ऐप से अलग क्यों हैं?

यदि इस टूल द्वारा जनरेट किए गए कोड आपके प्रमाणीकरण ऐप से मेल नहीं खाते, तो इन सामान्य कारणों की जांच करें: (1) गलत गुप्त कुंजी -- सुनिश्चित करें कि Base32 सीक्रेट सटीक रूप से दर्ज किया गया है, क्योंकि एक भी गलत अक्षर पूरी तरह से अलग कोड उत्पन्न करेगा। (2) एल्गोरिदम बेमेल -- अधिकांश सेवाएं SHA-1 (डिफ़ॉल्ट) का उपयोग करती हैं, इसलिए सुनिश्चित करें कि टूल और आपका ऐप दोनों समान रूप से कॉन्फ़िगर किए गए हैं यदि आपकी सेवा SHA-256 या SHA-512 का उपयोग करती है। (3) अंक संख्या बेमेल -- अधिकांश सेवाएं 6 अंक उपयोग करती हैं, लेकिन कुछ एंटरप्राइज़ टूल 8 अंक उपयोग करते हैं। (4) अवधि बेमेल -- मानक अवधि 30 सेकंड है, लेकिन कुछ सेवाएं 60 या 90 सेकंड उपयोग करती हैं। (5) क्लॉक स्क्यू -- TOTP समय-संवेदनशील है, इसलिए यदि आपके डिवाइस की घड़ी काफी गड़बड़ है (30 सेकंड से अधिक), तो कोड मेल नहीं खाएंगे। सुनिश्चित करें कि आपकी सिस्टम घड़ी NTP के माध्यम से सिंक्रनाइज़ है।

दो-कारक प्रमाणीकरण के लिए TOTP कितना सुरक्षित है?

TOTP सही ढंग से लागू होने पर प्रमाणीकरण के लिए एक मजबूत दूसरा कारक प्रदान करता है। प्रत्येक कोड केवल एक समय अवधि (आमतौर पर 30 सेकंड) के लिए वैध होता है, जो अवरोधन हमलों की विंडो को सीमित करता है। यह HMAC के माध्यम से क्रिप्टोग्राफिक हैश फंक्शन (SHA-1, SHA-256, या SHA-512) का उपयोग करके गुप्त कुंजी से कोड प्राप्त करता है, जिससे देखे गए कोड से सीक्रेट को रिवर्स-इंजीनियर करना कम्प्यूटेशनली असंभव हो जाता है। साझा सीक्रेट एक बार नामांकन के दौरान स्थापित किया जाता है और सामान्य प्रमाणीकरण के दौरान फिर कभी प्रेषित नहीं किया जाता। हालांकि, TOTP सभी हमलों से प्रतिरक्षित नहीं है -- फ़िशिंग हमले वास्तविक समय में कोड को कैप्चर और रीप्ले कर सकते हैं, और यदि सर्वर का सीक्रेट स्टोरेज भंग हो जाता है तो साझा सीक्रेट से समझौता हो सकता है। उच्चतम सुरक्षा के लिए, TOTP को WebAuthn/FIDO2 जैसे फ़िशिंग-प्रतिरोधी तरीकों के साथ जोड़ें।

कोड उदाहरण

// TOTP Generator using Web Crypto API (RFC 6238)

function base32Decode(base32) {
  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
  const cleaned = base32.toUpperCase().replace(/[^A-Z2-7]/g, '');
  let bits = '';
  for (const char of cleaned) {
    const val = alphabet.indexOf(char);
    if (val === -1) throw new Error(`Invalid Base32 character: ${char}`);
    bits += val.toString(2).padStart(5, '0');
  }
  const bytes = new Uint8Array(Math.floor(bits.length / 8));
  for (let i = 0; i < bytes.length; i++) {
    bytes[i] = parseInt(bits.substr(i * 8, 8), 2);
  }
  return bytes;
}

async function generateTOTP(secret, options = {}) {
  const {
    algorithm = 'SHA-1',
    digits = 6,
    period = 30,
    timestamp = Date.now(),
  } = options;

  const counter = Math.floor(timestamp / 1000 / period);
  const counterBuffer = new ArrayBuffer(8);
  const counterView = new DataView(counterBuffer);
  counterView.setUint32(4, counter, false);

  const keyBytes = base32Decode(secret);
  const cryptoKey = await crypto.subtle.importKey(
    'raw', keyBytes,
    { name: 'HMAC', hash: algorithm },
    false, ['sign']
  );

  const hmacBuffer = await crypto.subtle.sign('HMAC', cryptoKey, counterBuffer);
  const hmac = new Uint8Array(hmacBuffer);

  const offset = hmac[hmac.length - 1] & 0x0f;
  const code =
    ((hmac[offset] & 0x7f) << 24) |
    ((hmac[offset + 1] & 0xff) << 16) |
    ((hmac[offset + 2] & 0xff) << 8) |
    (hmac[offset + 3] & 0xff);

  const otp = code % Math.pow(10, digits);
  return otp.toString().padStart(digits, '0');
}

function generateSecret(bits = 160) {
  const bytes = new Uint8Array(bits / 8);
  crypto.getRandomValues(bytes);
  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
  let result = '', buffer = 0, bufferLength = 0;
  for (const byte of bytes) {
    buffer = (buffer << 8) | byte;
    bufferLength += 8;
    while (bufferLength >= 5) {
      bufferLength -= 5;
      result += alphabet[(buffer >> bufferLength) & 0x1f];
    }
  }
  if (bufferLength > 0) {
    result += alphabet[(buffer << (5 - bufferLength)) & 0x1f];
  }
  return result;
}

// Usage:
// const secret = generateSecret();
// const code = await generateTOTP(secret);
// console.log('TOTP:', code);

संबंधित उपकरण