क्या आप अपना महंगा इंटरनेट बिल फेंककर अपने पड़ोसी के असुरक्षित वाईफाई का उपयोग करना चाहते थे? क्या एकमात्र चीज जो आपको रोक रही थी वह थी Honeybadger का सिंगल-फैक्टर ऑथ फ्लो? खैर, मेरे पास आपके लिए खबर है।
घोषणा: टू-फैक्टर ऑथेंटिकेशन (2FA)
मजाक एक तरफ, हम सुरक्षा को बहुत गंभीरता से लेते हैं। हम अपने उपयोगकर्ताओं और उनके डेटा को अधिक सुरक्षित रखने में मदद करने के लिए एक महत्वपूर्ण उपकरण प्रदान करने में सक्षम होने पर रोमांचित हैं।
मैं सिर्फ यह समझा सकता था कि 2FA कैसे सक्षम करें, लेकिन इसमें मज़ा क्या है? क्रिप्टोग्राफी की जंगली दुनिया में एक हल्की-फुल्की झलक लेकर देखते हैं कि 2FA कैसे काम करता है।
अगर मज़ा आपकी चीज़ नहीं है, तो आप सीधे "कैसे सक्षम करें" पर जा सकते हैं, मेरी भावनाओं को चोट नहीं पहुंचेगी।
⚠️ चेतावनी: नीचे कुछ सिद्धांत
कई 2FA कार्यान्वयन टाइम-बेस्ड वन-टाइम पासवर्ड (TOTP) नामक एक एल्गोरिदम पर बने हैं। जुबान पर आसानी से चढ़ जाता है।
वन-टाइम?
हां, इस विधि की सुंदरता यह है कि आप हर बार लॉग इन करते समय वही "पासवर्ड" प्रसारित नहीं कर रहे हैं। एक ऑथेंटिकेटर एप्लिकेशन का उपयोग करके, एक वन-टाइम "पासवर्ड" उत्पन्न होता है और थोड़ी देर के लिए वैध रहता है (आमतौर पर 30 सेकंड), जो मैन-इन-द-मिडिल हमले की प्रभावशीलता को काफी कम कर देता है।
हालांकि कुछ जटिल बिट्स हैं, समग्र कार्यान्वयन अपेक्षाकृत सरल है।
सीक्रेट
TOTP के बारे में समझने के लिए एक मुख्य बिंदु यह है कि सर्वर (वेरिफायर) और ऑथेंटिकेटर (प्रूवर) के पास एक शेयर्ड सीक्रेट होना चाहिए। यह असली "पासवर्ड" है, हालांकि यह केवल एक बार प्रसारित होता है (तो मुझे लगता है कि यह भी वन-टाइम है)!
सीक्रेट का उपभोग करने का अनुशंसित तरीका QR कोड के माध्यम से है। जब आप QR कोड को अपने स्मार्टफोन में स्कैन करते हैं, तो सीक्रेट एक मानक URI के भीतर एन्कोडेड होता है जो कुछ इस तरह दिखता है:
otpauth://totp/Honeybadger.io:inigo@honeybadger.io?secret=base32-secret-key
QR कोड प्रदान करने के कुछ लाभ हैं (सादे टेक्स्ट सीक्रेट को उजागर करने के विपरीत):
- के पास 32 कैरेक्टर कोड टाइप करने का समय किसके पास है?
- आपका ऑथेंटिकेटर ऐप आपके वन-टाइम पासवर्ड के लिए उपयोगी लेबल प्रदान कर सकता है (URI में ईमेल और जारीकर्ता का संदर्भ)। यह विशेष रूप से उपयोगी है जब आप कई सेवाओं पर 2FA का उपयोग करते हैं।
- आखिरकार QR कोड का उपयोग करने का एक अच्छा कारण!
otpauth योजना के लिए कुछ अतिरिक्त (ज्यादातर नजरअंदाज किए गए) पैरामीटर हैं, जिन्हें आप यहां देख सकते हैं।
MAC और मैं
एक बार जब सीक्रेट्स पर सहमति हो जाती है 🤝, तो आपको (किसी बिंदु पर) वन-टाइम पासवर्ड प्रदान करने के लिए कहा जाएगा। यह वह जगह है जहां चीजें वास्तविक हो जाती हैं।
TOTP एक अन्य एल्गोरिदम के शीर्ष पर बनाया गया है जिसे HMAC-बेस्ड वन-टाइम पासवर्ड (HOTP) कहा जाता है, जो स्वयं हैश-बेस्ड मैसेज ऑथेंटिकेशन कोड (HMAC) पर आधारित है। यह सब एक बड़ा क्रिप्टो प्याज है।
TOTP और HOTP मूल रूप से इस बात पर विविधताएं हैं कि कौन सा संदेश हैश किया जाता है। HMAC वास्तव में वह जगह है जहां जादू होता है। HMAC एक डाइजेस्ट उत्पन्न करता है, जो किसी मान को हैशिंग एल्गोरिदम के माध्यम से चलाने का आउटपुट है। आइए कुछ Ruby कोड के साथ इसे क्रिया में देखें:
OpenSSL::HMAC.digest("SHA1", "my-secret-key", "the-earth-is-flat")
=> "R\xABp\xCB\xEC\xFEJ\r#\x02\xC8\xAB\x96\xB68\v\xDA0\xD7z"
वाह, उस बाइनरी स्ट्रिंग को देखो! वह हमारा मैसेज ऑथेंटिकेशन कोड (MAC) है।
हमने अपने हैशिंग फंक्शन के रूप में SHA1 को चुना (जैसा कि हमारे TOTP के कार्यान्वयन में होता है)। चुनने के लिए कई अन्य फंक्शन हैं, प्रत्येक के अपने सुरक्षा और प्रदर्शन निहितार्थ हैं। हैशिंग एल्गोरिदम के बारे में क्या कट्टरपंथी है कि किसी भी इनपुट के लिए, हमें हर बार वही आउटपुट मिलेगा! यह किसी भी सूक्ष्म इनपुट परिवर्तन से काफी अलग और अद्वितीय आउटपुट भी उत्पन्न करेगा (खांसी, हैशिंग फंक्शन पर निर्भर करता है, लेकिन चिंता न करें हम यहां टकरावों से बहुत चिंतित नहीं हैं)।
ठीक है, तो इसे मैसेज ऑथेंटिकेशन कोड कहा जाता है क्योंकि इसका उपयोग यह साबित करने के लिए किया जा सकता है कि एक प्राप्त संदेश प्रामाणिक है। यदि आप और मैं सीक्रेट (my-secret-key) जानते हैं, तो मैं आपको संदेश the-earth-is-flat MAC के साथ भेज सकता हूं। आपको बस ठीक वही डाइजेस्ट फंक्शन चलाना है, उन्हीं इनपुट्स के साथ, और यदि MAC मेल खाते हैं, तो आपने संदेश को प्रमाणित कर दिया है! आप जानते हैं कि इसके साथ छेड़छाड़ नहीं की गई थी और यह केवल मुझसे आ सकता था!
😎
टाइमकोड
तो आइए इसे TOTP पर वापस लाएं। समय के बारे में बात करने का समय है। आप देखते हैं, TOTP के साथ, the-earth-is-flat जैसे हास्यास्पद संदेश को डाइजेस्ट करने के बजाय, हम इनपुट के रूप में एक टाइम स्टेप काउंट (स्ट्रिंग में परिवर्तित) का उपयोग करते हैं। यदि आप अपना ऑथेंटिकेटर ऐप खोलते हैं, और देखते हैं कि कोड कब स्विच होते हैं, तो आप एक पैटर्न देख सकते हैं। सही है, इसे मेरे साथ कहें: "वे मिनट और आधे मिनट पर स्विच होते हैं", बहुत अच्छा।
यह संदेश की गणना को थोड़ा सरल बनाता है। इस मामले में हम समय की शुरुआत (ठीक है, यूनिक्स समय) से 30 सेकंड ( टाइम स्टेप) के राउंड डाउन काउंट का उपयोग करते हैं। तो, Ruby में फिर से:
Time.now.to_i / 30 => 51772900
अहा! वह हमारा संदेश है।
तो हमारे ऑथेंटिकेटर ऐप में, हम एक नया HMAC प्राप्त करने के लिए अपने भरोसेमंद डाइजेस्ट फंक्शन का उपयोग करते हैं:
hmac = OpenSSL::HMAC.digest("SHA1", "avwe8aw71j2boib23jkbjk32", "51772900")
=> "H\x7F\xC1\xACL\xDA\xDB\xE7DQ\x91kE\x1C\xE3,c\nH\xA0"
get_otp_code(hmac) => "332204"
अंतिम चरण इस बाइनरी स्ट्रिंग से नंबर कोड प्राप्त करना है। चूंकि कुछ बिट मैनिपुलेशन आवश्यक है, मैं अभी के लिए अपने गुमनाम get_otp_code फंक्शन के पीछे छिपने जा रहा हूं। यदि आप चाहते हैं, तो आप पढ़ सकते हैं कि यह HOTP स्पेक में कैसे काम करता है।
जब आप कोड को सर्वर पर सबमिट करते हैं, तो यह सटीक वही डाइजेस्ट ऑपरेशन करता है और कोड की तुलना करता है। जब वे मेल खाते हैं, तो आप अंदर हैं! क्योंकि हम समय के साथ काम कर रहे हैं, लेटेंसी एक कारक है। संभावित देरी के लिए खाते की रणनीतियाँ हैं। इसे समझना आपका होमवर्क होगा, यदि आप चाहते हैं।
यही है कि टाइम-बेस्ड वन-टाइम पासवर्ड कैसे काम करते हैं!! 🎉 इस जानकारी का उपयोग करके अपनी अगली डिनर पार्टी का जीवन बनने के बाद मुझे धन्यवाद ईमेल भेजने के लिए स्वतंत्र महसूस करें!
कार्यान्वयन
मुझे लगता है कि यह समझना महत्वपूर्ण है कि ये चीजें कैसे काम करती हैं, लेकिन अपनी खुद की कुछ भी क्रिप्टो संबंधित रोल करना दृढ़ता से हतोत्साहित किया जाता है। Ruby/Rails इकोसिस्टम के बारे में महान चीजों में से एक यह है कि आप अक्सर अपनी समस्या को हल करने के लिए एक जेम (कभी-कभी कई) पा सकते हैं।
हम यहां Honeybadger पर devise का उपयोग करते हैं और two_factor_authentication नामक एक बढ़िया devise प्लगइन है। चुनने के लिए कुछ 2FA कार्यान्वयन हैं, तो यहां कुछ कारण हैं कि हमने इसे क्यों चुना:
- सरल सेटअप (एक माइग्रेशन, कुछ कॉन्फिग और इनिशियलाइज़र छिड़के हुए)
- यह वन-टाइम कोड को अपने पेज पर दर्ज करने की अनुमति देता है (वैध यूज़र/पासवर्ड के बाद)
- स्वीकार्य डिफ़ॉल्ट, फिर भी ओवरराइड करना सरल
- इसमें एक मैक्स लॉगिन अटेम्प्ट्स चेक भी है, जो स्पेक द्वारा अनुशंसित है
कैसे सक्षम करें
सेटअप सरल है: यूज़र सेटिंग्स > ऑथेंटिकेशन पेज पर नेविगेट करें, "सेट अप टू फैक्टर ऑथेंटिकेशन" चुनें और Authy या Google Authenticator (या वास्तव में कोई अन्य TOTP ऐप) का उपयोग करके सीक्रेट को सिंक करने के निर्देशों का पालन करें।

बस! अगली बार जब आप लॉग इन करेंगे, तो हम आपसे आपका ऑथेंटिकेटर कोड मांगेंगे। इसे भरें और पूर्ण शांति के साथ आगे बढ़ें। 🧘

सुरक्षा और सरलता? क्या यह इससे बेहतर हो सकता है?
एक अंतिम चीज़: Pwned पासवर्ड चेक
मेरे पास आप सभी कमजोर पासवर्ड के समर्थकों के लिए एक त्वरित बात है। हमने devise-pwned_password जेम के साथ भी एकीकृत किया है। अब से, जब भी आप कोई ऑपरेशन करते हैं जिसमें पासवर्ड की आवश्यकता होती है, हम यह सुनिश्चित करने के लिए जांच करते हैं कि प्रस्तावित पासवर्ड किसी भी ज्ञात डेटा उल्लंघन में प्रचलित नहीं है। यदि आप एक नया पासवर्ड जोड़ रहे हैं, और यह जांच में विफल रहता है, तो हम इसकी अनुमति नहीं देंगे।
यदि आप पहले से नहीं हैं, तो हम दृढ़ता से पासवर्ड मैनेजर (1Password आह) का उपयोग करने की सलाह देते हैं।
Pwned पासवर्ड के अधिक दिलचस्प बिट्स में से एक यह है कि आपका पासवर्ड तीसरे पक्ष की सेवा से डेटाबेस के खिलाफ जांच करते समय भी सुरक्षित रहता है। इसे k-Anonymity कहा जाता है और आप इसके बारे में यहां एक अवलोकन प्राप्त कर सकते हैं।
अभी के लिए बस इतना ही। अगली बार तक! 👋