आज हम Product Hunt पर हैं! टिप्पणी लिखें
Authenticator 1.16.0 आ गया है। देखें क्या नया है
सुरक्षा की समीक्षा करने वालों के लिए तकनीकी विवरण। यहाँ लिखी हर बात स्रोत कोड से मिलाकर जाँची जा सकती है — उन हिस्सों समेत जो हमारे पक्ष में नहीं हैं और जिन्हें हम छिपाने के बजाय साफ़ लिखते हैं।
यह एक Manifest V3 क्रोम एक्सटेंशन है जो TOTP कोड OTPAuth की मदद से डिवाइस पर ही बनाता है। कोड बनाने, खाते सहेजने और उन्हें एन्क्रिप्ट करने में कोई बैकएंड शामिल नहीं है, और हमारे यहाँ कोई उपयोगकर्ता खाता नहीं बनता। मुफ़्त प्लान और Pro के लिए हम एक सर्वर चलाते हैं, api.authenticator.sh — इसका विवरण नीचे है — और उस तक कभी कोई गुप्त कुंजी, खाते का नाम, जारीकर्ता या कोड नहीं पहुँचता।
उस सर्वर के पास किसी के भी खातों की कोई कुंजी सामग्री नहीं होती: न कुंजी एस्क्रो है, न हमारे नियंत्रण वाला कोई रिकवरी रास्ता। यदि उपयोगकर्ता पासवर्ड भूल जाए और रिकवरी कोड भी खो दे, तो हम कुछ नहीं कर सकते — यह डिज़ाइन का हिस्सा है।
पासवर्ड सुरक्षा वैकल्पिक है और डिफ़ॉल्ट रूप से बंद रहती है। चालू होने पर:
डेटा को पासवर्ड से बनी कुंजी से सीधे कभी एन्क्रिप्ट नहीं किया जाता। रिकॉर्ड एक यादृच्छिक मास्टर कुंजी से एन्क्रिप्ट होते हैं; PBKDF2 का आउटपुट सिर्फ़ उस मास्टर कुंजी को लपेटता है। इससे दो नतीजे निकलते हैं, और दोनों मायने रखते हैं:
पासवर्ड सुरक्षा चालू होने पर खाते का पूरा रिकॉर्ड एन्क्रिप्ट होता है, सिवाय उसके पहचानकर्ता और फ़िंगरप्रिंट के — सेवा का नाम भी इसमें शामिल है, ताकि चोरी हुई प्रोफ़ाइल से यह पता न चले कि उपयोगकर्ता के खाते किन सेवाओं पर हैं। चालू करते समय एक्सटेंशन रिकॉर्ड एन्क्रिप्ट करता है, उन्हें डिक्रिप्ट करके मिलान से जाँचता है, और उसके बाद ही हर सादा प्रति हटाता है: ब्राउज़र का लोकल स्टोरेज, सिंक और सातों घूमते बैकअप स्नैपशॉट।
साफ़-साफ़ कह रहे हैं, क्योंकि आपके आकलन के लिए यह अहम है:
संक्षेप में: यह निष्क्रिय अवस्था में रखे डेटा की रक्षा करता है। जो डिवाइस इस्तेमाल के समय पहले से ही हमलावर के नियंत्रण में है, उसकी रक्षा यह नहीं करता, और कर भी नहीं सकता।
मैनिफ़ेस्ट पाँच अनुमतियाँ घोषित करता है और कोई होस्ट अनुमति नहीं:
यहाँ कोई कंटेंट स्क्रिप्ट नहीं है हैं, tabs, cookies या webRequest अनुमतियाँ नहीं हैं, और कोई web-accessible resources नहीं हैं। जब तक आप वहाँ कोड नहीं माँगते, किसी पेज पर हमारा कुछ भी मौजूद नहीं होता; उस समय जो चलता है वह उसी एक टैब और उसी एक बार के लिए इंजेक्ट होता है, उसी अनुमति के तहत जो आपका अपना क्लिक देता है, और पीछे कुछ नहीं छोड़ता।
कैमरे से QR स्कैन करना पॉपअप में नहीं, बल्कि टैब में खुले एक्सटेंशन पेज पर चलता है — पॉपअप फ़ोकस हटते ही नष्ट हो जाता है, और अनुमति का संवाद ठीक यही करता है। इसके लिए मैनिफ़ेस्ट में किसी अनुमति की ज़रूरत नहीं: यह ब्राउज़र का सामान्य कैमरा अनुरोध इस्तेमाल करता है, जो एक्सटेंशन के ऑरिजिन पर दिया जाता है और साइट सेटिंग्स से वापस लिया जा सकता है, और जब तक उपयोगकर्ता स्कैनर न खोले तब तक कभी नहीं माँगा जाता। वीडियो डिवाइस पर ही डिकोड होता है और कभी भेजा या सहेजा नहीं जाता।
1.14.0 से एक्सटेंशन दिन में एक बार api.authenticator.sh से संपर्क करता है — ब्राउज़र शुरू होने पर, या पॉपअप दिख जाने के बाद; कोड दिखाने के रास्ते में कभी नहीं। अनुरोध में फ़ील्ड की एक तय, बंद सूची होती है, जो src/billing/sync.ts के एक ही फ़ंक्शन में बनती है, और एक टेस्ट उसे इसी सूची तक सीमित रखता है:
कभी नहीं भेजा जाता: गुप्त कुंजियाँ, खातों के नाम, जारीकर्ता, कोड, या वे साइटें जिन पर उनका इस्तेमाल होता है। सर्वर अपने एज पर अनुरोध से देश लेता है और IP पता सहेजता नहीं। अनइंस्टॉल पेज को वही इंस्टॉल ID ?i= के रूप में मिलती है: वह सर्वर को बताता है कि इंस्टॉलेशन हटा दिया गया है, और वैकल्पिक सर्वे का जवाब उसी इंस्टॉलेशन से जोड़ता है।
इसके लिए chrome.storage.local में रखा जाता है: इंस्टॉल ID, आख़िरी हस्ताक्षरित नीति और लाइसेंस, इस इंस्टॉलेशन के पास मौजूद लाइसेंस कुंजी (टाइप की हुई, या इसी पर ख़रीदने के बाद मिली), सर्वर तक पहुँचने तक हर दिन खोले जाने की गिनती, और कतार में रखी घटनाएँ — खातों का कोई डेटा नहीं। सिंक चालू रहने पर, इंस्टॉलेशन बिलिंग से पहले का है या नहीं — यह जानकारी और वही लाइसेंस कुंजी भी Chrome Sync में जाती हैं, ताकि उपयोगकर्ता की दूसरी Chrome प्रोफ़ाइलें उन्हें ले लें और Pro अपने-आप चालू कर दें; सिंक बंद करने पर दोनों Chrome Sync से हट जाती हैं, और फिर चालू करने पर वापस आ जाती हैं।
क्या वापस आता है, और एक्सटेंशन उसके साथ क्या करता है:
यह सीमा DRM नहीं है: कोड ओपन सोर्स है, और कोई फ़ोर्क इसे हटा सकता है। जो कभी संभव नहीं होना चाहिए, वह है किसी व्यक्ति का किसी दूसरे का लाइसेंस हासिल करना या इस्तेमाल करना, या किसी और के इंस्टॉलेशन पर सीमा लगवा देना — यह एक सुरक्षा खामी है, और हमारी सुरक्षा नीति के दायरे में आती है।
दो तरह के अनुरोध अपने आप होते हैं: घड़ी की जाँच और रोज़ाना का बिलिंग संपर्क। नीचे बाकी सब कुछ तभी होता है जब उपयोगकर्ता खुद कहीं क्लिक करता है। Manifest V3 रिमोट कोड पर रोक लगाता है, और इनमें से कोई भी खाते, गुप्त कुंजियाँ या बने हुए कोड नहीं ले जाता। पूरी सूची:
| होस्ट | कब | क्या उपयोगकर्ता डेटा जाता है? |
|---|---|---|
| time.akamai.com timeapi.io cloudflare.com | घड़ी के अंतर की जाँच, कैश के साथ; कोई भी स्रोत न मिले तो सेटिंग्स में यह लिखा होता है। घड़ी खिसकी हो तो TOTP टूट जाता है। | नहीं |
| authenticator.sh | इंस्टॉल पर स्वागत पेज; अनइंस्टॉल पर प्रतिक्रिया पेज, जिसके पते में इंस्टॉल ID होती है; पॉपअप से खोले जाने पर सहायता और सपोर्ट पेज। | इंस्टॉल ID, सिर्फ़ अनइंस्टॉल पेज पर; बाकी समय नहीं (सामान्य वेब सर्वर लॉग) |
| api.authenticator.sh | दिन में एक बार बिलिंग संपर्क; चेकआउट, लाइसेंस और पोर्टल अनुरोध, जब उपयोगकर्ता Pro खरीदता है, कुंजी डालता है, खरीदारी पुनर्स्थापित करता है या सदस्यता प्रबंधित करता है। | ऊपर बताए गए फ़ील्ड — खातों का डेटा कभी नहीं। लाइसेंस कुंजी या ईमेल पता सिर्फ़ तब, जब उपयोगकर्ता खुद उसे टाइप करे |
| checkout.stripe.com billing.stripe.com | Stripe Checkout और कस्टमर पोर्टल, जो उपयोगकर्ता के Pro खरीदने या सदस्यता प्रबंधित करने पर एक टैब में खुलते हैं। | जो ख़रीदार वहाँ डालता है। Stripe और Link की अपनी शर्तें लागू होती हैं |
| chromewebstore.google.com | स्टोर लिस्टिंग, क्लिक करने पर ही नए टैब में: रेटिंग के संकेत से समीक्षा फ़ॉर्म। | नहीं (Google को यह किसी भी दूसरे स्टोर पेज जैसी ही विज़िट दिखती है) |
कोई फ़ॉन्ट, स्क्रिप्ट, स्टाइल या छवि तृतीय-पक्ष होस्ट से लोड नहीं होती। इंटरफ़ेस दिखाने के लिए जो भी चाहिए, वह पैकेज के भीतर ही आता है।
ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। एक्सटेंशन ओपन सोर्स है और हर रिलीज़ दोबारा बनाई जा सकती है:
.crx डाउनलोड करके उसे अनज़िप करेंnpm ci && npm run build चलाएँdist/ की तुलना अनज़िप किए पैकेज से करेंबनी हुई dist/ की हर फ़ाइल का SHA-256 हर GitHub रिलीज़ के साथ SHA256SUMS-v<version>.txt नाम से, sha256sum प्रारूप में प्रकाशित होता है — इसलिए चरण 4 सिर्फ़ एक बार sha256sum -c चलाने जितना रह जाता है। अंतर केवल आर्काइव के भीतर फ़ाइलों के क्रम और Node की अलग पैच रिलीज़ में मिनिफ़ाइड आउटपुट के ख़ाली स्थान तक सीमित होने चाहिए।
रनटाइम निर्भरताएँ जानबूझकर बहुत कम हैं — OTPAuth, React, jsQR, Zustand, Framer Motion और Lucide — और कमिट की गई लॉकफ़ाइल से तय हैं। CycloneDX प्रारूप में SBOM माँगने पर उपलब्ध है।
स्रोत कोड देखेंहम एक छोटे स्वतंत्र विक्रेता हैं। यदि नीचे में से कुछ भी आपकी प्रक्रिया के लिए अनिवार्य है, तो मूल्यांकन के तीन हफ़्ते बाद पता चलने से बेहतर है कि अभी पता चल जाए:
इनके बदले हम जो देते हैं वह है स्रोत कोड की पूरी पारदर्शिता, जाँची जा सकने वाली बिल्ड, न्यूनतम अनुमतियाँ, और एक ऐसा सर्वर जिसे आपकी गुप्त कुंजियाँ, खातों के नाम या कोड भेजे ही नहीं जाते।
सुरक्षा खामियों की सूचना और सुरक्षा से जुड़े सवाल: security@authenticator.sh। हमारी प्रकटीकरण नीति, दायरा, प्रतिक्रिया समय और सेफ़ हार्बर शर्तें सुरक्षा नीति पेज पर हैं; क्या सहेजा जाता है और डिवाइस से क्या बाहर जाता है, यह गोपनीयता नीति में लिखा है।
हम विक्रेता आकलन की लिखित प्रश्नावली भरने या किसी सुरक्षा टीम के साथ कोड पर चलकर बात करने को तैयार हैं।
जो कुछ भी सुरक्षा का मामला नहीं है — इंस्टॉलेशन, खाता वापस पाना, तैनाती से जुड़े बिलिंग सवाल — उसके लिए सहायता देखें। कृपया सुरक्षा खामियों की सूचना वहाँ न भेजें; वह इनबॉक्स गोपनीय नहीं माना जाता।