क्या आप अपने महंगे इंटरनेट बिल को फेंकना चाहते हैं और अपने पड़ोसी की असुरक्षित वाईफाई का उपयोग करना चाहते हैं? क्या केवल एक चीज आपको हनीबैगर सिंगल-फैक्टर ऑथ फ्लो को वापस रोक रही थी? अच्छा, क्या मुझे आपके लिए खबर मिली है।
घोषणा करना:दो कारक प्रमाणीकरण (2FA)
सब मजाक कर रहे हैं, हम सुरक्षा को बहुत गंभीरता से लेते हैं। हम अपने उपयोगकर्ताओं और उनके डेटा को अधिक सुरक्षित रखने में मदद करने के लिए एक महत्वपूर्ण टूल प्रदान करने में सक्षम होने के लिए रोमांचित हैं।
मुझे लगता है कि मैं सिर्फ यह समझा सकता हूं कि 2FA कैसे सक्षम किया जाए, लेकिन इसमें मजा क्या है? कैसे हम क्रिप्टोग्राफ़ी की जंगली दुनिया में एक हल्की-फुल्की झलक लेते हैं और यह पता लगाते हैं कि 2FA कैसे काम करता है।
यदि मज़ा आपकी चीज़ नहीं है, तो आप सीधे सीधे जा सकते हैं कैसे सक्षम करें, मेरी भावनाओं को ठेस नहीं पहुंचेगी।
⚠️ चेतावनी:कुछ सिद्धांत नीचे
कई 2FA कार्यान्वयन समय-आधारित वन-टाइम पासवर्ड called नामक एल्गोरिथम पर बनाए गए हैं (TOTP ) जीभ से सीधे लुढ़कता है।
एक बार?
हां, इस पद्धति में सुंदरता यह है कि आप हर बार लॉग इन करने पर एक ही "पासवर्ड" प्रेषित नहीं कर रहे हैं। एक प्रमाणक एप्लिकेशन का उपयोग करके, एक बार का "पासवर्ड" उत्पन्न होता है और एक छोटी अवधि (आमतौर पर 30 सेकंड) के लिए वैध रहता है। , जो एक मैल्कम-इन-द-मिडिल हमले की प्रभावशीलता को बहुत कम कर देता है।
हालांकि कुछ जटिल बिट्स हैं, समग्र कार्यान्वयन अपेक्षाकृत सरल है।
द सीक्रेट
एक कुंजी TOTP . के बारे में समझने के लिए बिंदु यह है कि सर्वर (सत्यापनकर्ता) और प्रमाणक (प्रोवर) एक साझा रहस्य होना चाहिए। यह असली है "पासवर्ड", हालांकि यह केवल एक बार प्रसारित होता है (इसलिए मुझे लगता है कि यह एक बार भी है)!
रहस्य का उपभोग करने का अनुशंसित तरीका क्यूआर कोड है। जब आप अपने स्मार्टफोन में क्यूआर कोड को स्कैन करते हैं, तो रहस्य एक मानक यूआरआई में एन्कोड किया जाता है जो कुछ इस तरह दिखता है:
otpauth://totp/Honeybadger.io:[email protected]?secret=base32-secret-key
क्यूआर कोड प्रदान करने के कुछ लाभ हैं (सादे पाठ के रहस्य को उजागर करने के विपरीत):
- 32 वर्णों का कोड टाइप करने के लिए किसके पास समय है?
- आपका प्रमाणक ऐप आपके वन-टाइम पासवर्ड के लिए सहायक लेबल प्रदान कर सकता है (यूआरआई में ईमेल और जारीकर्ता का संदर्भ)। यह विशेष रूप से तब उपयोगी होता है जब आप कई सेवाओं पर 2FA का उपयोग करते हैं।
- आखिरकार एक अच्छा क्यूआर कोड का उपयोग करने का कारण!
otpauth
. के लिए कुछ अतिरिक्त (ज्यादातर अनदेखा) पैरामीटर हैं योजना, जिसे आप यहाँ देख सकते हैं।
मैक और मैं
एक बार रहस्यों पर सहमति हो जाने के बाद, आपसे (किसी बिंदु पर) वन-टाइम पासवर्ड प्रदान करने के लिए कहा जाएगा। यही वह जगह है जहां चीजें वास्तविक होती हैं ।
TOTP HMAC-आधारित वन-टाइम पासवर्ड called नामक एक अन्य एल्गोरिथम के शीर्ष पर बनाया गया है (HOTP) , जो स्वयं हैश-आधारित संदेश प्रमाणीकरण कोड . पर आधारित है (एचएमएसी) . यह सब एक बड़ा क्रिप्टो प्याज है।
TOTP &HOTP मूल रूप से भिन्नताएं हैं कि कौन सा संदेश हैश हो जाता है। एचएमएसी वास्तव में वह जगह है जहां जादू होता है। एचएमएसी एक डाइजेस्ट उत्पन्न करता है, जो हैशिंग एल्गोरिथम के माध्यम से कुछ मूल्य चलाने का आउटपुट है। आइए इसे कुछ रूबी कोड के साथ क्रिया में देखें:
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"
वाह, उस बाइनरी स्ट्रिंग को देखो! यह हमारा संदेश प्रमाणीकरण कोड है (मैक) ।
हमने SHA1
. चुना है हमारे हैशिंग फ़ंक्शन के रूप में (जैसा कि TOTP . का हमारा कार्यान्वयन करता है) ) चुनने के लिए कई अन्य कार्य हैं, जिनमें से प्रत्येक की अपनी सुरक्षा और प्रदर्शन निहितार्थ हैं। हैशिंग एल्गोरिथम के बारे में मौलिक बात यह है कि किसी भी इनपुट . के लिए , हमें समान आउटपुट . मिलेगा , हर बार! यह एक काफी अलग और अद्वितीय . भी तैयार करेगा किसी भी सूक्ष्म इनपुट परिवर्तन से आउटपुट (अहम, हैशिंग फ़ंक्शन के आधार पर, लेकिन चिंता न करें हम यहां टकराव से बहुत चिंतित नहीं हैं)।
ठीक है, इसलिए इसे संदेश प्रमाणीकरण कोड . कहा जाता है क्योंकि इसका उपयोग यह साबित करने के लिए किया जा सकता है कि प्राप्त संदेश प्रामाणिक है। यदि आप और मैं रहस्य जानते हैं (my-secret-key
), मैं आपको the-earth-is-flat
message संदेश भेज सकता हूं मैक . के साथ . आपको बस एक ही इनपुट के साथ ठीक उसी डाइजेस्ट फ़ंक्शन को चलाने की ज़रूरत है, और यदि मैक मेल खाते हैं, तो आपने संदेश को प्रमाणित कर दिया है! आप जानते हैं कि इसके साथ छेड़छाड़ नहीं की गई थी और यह केवल मेरी ओर से आ सकता था!
टाइमकोड
तो चलिए इसे वापस TOTP पर लाते हैं . यह समय समय के बारे में बात करने का है . आप देखें, TOTP . के साथ , the-earth-is-flat
. जैसे बेतुके संदेश को पचाने के बजाय , हम इसके बजाय इनपुट के रूप में एक समय चरण गणना (एक स्ट्रिंग में परिवर्तित) का उपयोग करते हैं। यदि आप अपना प्रमाणक ऐप खोलते हैं, और देखते हैं कि कोड कब स्विच होते हैं, तो आपको एक पैटर्न दिखाई दे सकता है। यह सही है, मेरे साथ कहो:"वे मिनट और आधा मिनट स्विच करते हैं", बहुत अच्छा।
इससे संदेश की गणना करना थोड़ा आसान हो जाता है। इस मामले में हम 30 सेकंड की राउंड डाउन काउंट (समय चरण .) का उपयोग करते हैं ) समय की शुरुआत के बाद से (ठीक है, यूनिक्स समय)। तो, फिर से माणिक में:
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 Spec में यह कैसे काम करता है, इसके बारे में पढ़ सकते हैं।
जब आप सर्वर को कोड सबमिट करते हैं, तो यह ठीक उसी डाइजेस्ट ऑपरेशन को करता है और कोड की तुलना करता है। जब वे मेल खाते हैं, तो आप अंदर हैं! क्योंकि हम समय के साथ काम कर रहे हैं, विलंबता एक कारक है। संभावित देरी के लिए खाते में रणनीतियां हैं। अगर आप चाहें तो इसे समझना आपका गृहकार्य होगा।
समय-आधारित वन-टाइम पासवर्ड . का सार यही है काम!! 🎉 अपनी अगली डिनर पार्टी के जीवन के लिए इस जानकारी का उपयोग करने के बाद बेझिझक मुझे एक धन्यवाद ईमेल भेजें!
कार्यान्वयन
जबकि मुझे लगता है कि यह समझना महत्वपूर्ण है कि ये चीजें कैसे काम करती हैं, यह दृढ़ता से हतोत्साहित किया जाता है कि आप अपना खुद का कुछ भी रोल करें क्रिप्टो संबंधित। रूबी / रेल पारिस्थितिकी तंत्र के बारे में महान चीजों में से एक यह है कि आप अपनी समस्या को हल करने के लिए अक्सर एक रत्न (कभी-कभी कई) ढूंढ सकते हैं।
हम यहां हनीबैगर में वसीयत का उपयोग करते हैं और दो_फैक्टर_ऑथेंटिकेशन नामक एक महान वसीयत प्लगइन है। चुनने के लिए कुछ 2FA कार्यान्वयन हैं, इसलिए यहां कुछ कारण दिए गए हैं जिन्हें हमने चुना है:
- साधारण सेटअप (एक माइग्रेशन, कुछ कॉन्फिग और इनिशियलाइज़र के बारे में छिड़का हुआ)
- यह वन-टाइम कोड को अपने पेज पर (वैध उपयोगकर्ता/पासवर्ड के बाद) दर्ज करने की अनुमति देता है
- स्वीकार्य डिफ़ॉल्ट, फिर भी ओवरराइड करना आसान
- इसमें अधिकतम लॉगिन प्रयासों की जांच भी है, जो कि युक्ति द्वारा अनुशंसित है
कैसे सक्षम करें
सेटअप सरल है:उपयोगकर्ता सेटिंग> प्रमाणीकरण पृष्ठ पर नेविगेट करें, "दो कारक प्रमाणीकरण सेट करें" चुनें और Authy या Google प्रमाणक (या वास्तव में किसी अन्य TOTP का उपयोग करके रहस्य को समन्वयित करने के लिए निर्देशों का पालन करें। ऐप)।
इतना ही! अगली बार जब आप लॉग इन करेंगे, तो हम आपको आपके प्रमाणक कोड के लिए संकेत देंगे। इसे भरें और मन की पूर्ण शांति के साथ जाएं।
सुरक्षा और सादगी? क्या यह बेहतर हो सकता है?
एक आखिरी चीज:Pwned Password Check
मेरे पास कमजोर पासवर्ड के आप सभी समर्थकों के लिए एक त्वरित एक है। हमने devise-pwned_password रत्न के साथ भी एकीकरण किया है। अब से, जब आप कोई भी ऑपरेशन करते हैं जिसके लिए पासवर्ड की आवश्यकता होती है, तो हम यह सुनिश्चित करने के लिए जांच करते हैं कि प्रस्तावित पासवर्ड किसी भी ज्ञात डेटा उल्लंघनों में प्रचलित नहीं है। यदि आप एक नया पासवर्ड जोड़ रहे हैं, और यह चेक में विफल हो जाता है, तो हम इसकी अनुमति नहीं देंगे।
यदि आप पहले से नहीं हैं, तो हम अत्यधिक पासवर्ड प्रबंधक (1 पासवर्ड अहम) का उपयोग करने की अनुशंसा करें।
Pwned Password के सबसे दिलचस्प बिट्स में से एक यह है कि आपका पासवर्ड किसी तृतीय पक्ष सेवा से डेटाबेस के विरुद्ध जाँच करते समय भी कैसे सुरक्षित रहता है। इसे k-Anonymity
कहा जाता है और आप यहां इसके बारे में एक सिंहावलोकन प्राप्त कर सकते हैं।
खैर, अभी के लिए हमारे पास बस इतना ही है। अगली बार तक!