क्या Google Authenticator एक्सपोर्ट QR स्कैन करना सुरक्षित है?
केवल तभी जब आपने इसे स्वयं उत्पन्न किया हो — अपने पुराने फोन पर, अपने नए फोन को स्क्रीन पर लक्षित करके। कोई भी अन्य व्यक्ति जो किसी भी कारण से वह QR फोटोग्राफ करता है, उसे बंडल में हर खाते के लिए हर 2FA कोड तक स्थायी पहुँच मिल जाती है।
Google Authenticator और कई संगत ऐप (Aegis, Raivo OTP, 2FAS) आपको अपने संग्रहीत 2FA खाते "निर्यात" करने देते हैं ताकि आप उन्हें नए डिवाइस पर स्थानांतरित कर सकें। निर्यात एक QR कोड का रूप लेता है जिसका URI otpauth-migration:// से शुरू होता है। उस URI के अंदर एकल प्रोटोकॉल-बफर बंडल (Google का MigrationPayload स्कीमा) है जिसमें हर खाता एक साथ है — जारीकर्ता, खाता नाम, सीक्रेट सीड, एल्गोरिथ्म, अंक गिनती, प्रकार (HOTP / TOTP), और काउंटर।
फ़ॉर्मेट मूल रूप से अप्रलेखित था, लेकिन इसे रिवर्स-इंजीनियर किया गया है और अब 2FA बैकअप के लिए डी-फैक्टो इंटरचेंज फ़ॉर्मेट है। तृतीय-पक्ष प्रमाणीकरणकर्ता ऐप उसी QR को पहचानते और आयात करते हैं।
एक QR में दर्जनों खाते हो सकते हैं। QR दृश्य रूप से सामान्य TOTP सेटअप QR से अप्रभेद्य है — कोई दृश्य मार्कर नहीं बताता कि यह पूरा बंडल ले जाता है।
एकल बंडल QR अद्वितीय रूप से खतरनाक क्यों है
एक नियमित otpauth:// सेटअप QR खतरनाक है यदि आपने इसे अनुरोध नहीं किया, लेकिन विस्फोट त्रिज्या एक खाता है। माइग्रेशन QR की विस्फोट त्रिज्या आपके प्रमाणीकरणकर्ता में हर खाता है। यदि कोई हमलावर यह QR दिखाने वाली स्क्रीन की फोटो लेता है — कॉफी शॉप में आपके पीछे, किसी CCTV कैमरे से जो आपने नहीं देखा, साफ काँच की खिड़की से — वे हर उस खाते पर 2FA बाईपास करने की क्षमता लेकर चले जाते हैं। स्थायी रूप से। जब तक आप हर सीक्रेट को मैन्युअल रूप से नहीं बदलते, जो अधिकांश सेवाएँ आसान नहीं बनातीं।
बंडल में सीक्रेट की कोई समाप्ति नहीं है। सेशन टोकन (जो समाप्त होते हैं) के विपरीत, पासकी QR (जो एकल-शॉट है) के विपरीत, माइग्रेशन बंडल में सीड तब तक वैध हैं जब तक आप उन्हें सेवा-दर-सेवा नहीं बदलते।
इसीलिए हमारे स्कैनर का हर otpauth-migration:// QR पर वर्डिक्ट likely_dangerous से शुरू होता है और संदर्भ की परवाह किए बिना वहीं रहता है। फ़ॉर्मेट ठीक है; थ्रेट मॉडल फ़ॉर्मेट का अस्तित्व है।
base64 बॉडी, एक बार डिकोड होने पर, इन शीर्ष-स्तर फ़ील्ड के साथ एक MigrationPayload प्रोटोकॉल-बफर है:
otp_parameters — बार-बार। प्रति खाता एक प्रविष्टि।
version — स्कीमा संस्करण।
batch_size — जब निर्यात कई QR में विभाजित हो तो कुल चंक गिनती।
batch_index — इस चंक की स्थिति।
batch_id — चंक्स को एक साथ जोड़ने वाला अद्वितीय ID।
प्रत्येक otp_parameters प्रविष्टि में है:
secret — कच्चे सीड बाइट्स। यह वास्तविक की सामग्री है।
name — खाता लेबल (जैसे alice@acme.com)।
issuer — सेवा नाम (जैसे ACME, GitHub)।
algorithm — SHA1 / SHA256 / SHA512 / MD5।
digits — प्रति कोड 6 या 8 अंक।
type — TOTP (समय-आधारित) या HOTP (काउंटर-आधारित)।
counter — HOTP प्रविष्टियों के लिए वर्तमान काउंटर मूल्य।
हमारा स्कैनर क्या दिखाता है, और जानबूझकर क्या नहीं दिखाता
✓ दिखाया गया
बंडल में हर प्रविष्टि के लिए, वर्डिक्ट जारीकर्ता (ACME, GitHub, AWS), खाता नाम (alice@acme.com), एल्गोरिथ्म (SHA1), अंक गिनती (6), और प्रकार (TOTP) दिखाता है। वर्डिक्ट प्रकटीकरण पढ़ता है "इस बंडल में अनुदान: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …" ताकि जो उपयोगकर्ता वास्तव में माइग्रेशन के बीच में हो, वह आयात से पहले सूची की जाँच कर सके।
स्कीमा संस्करण, बैच इंडेक्स, बैच साइज़, और बैच ID भी दिखाए जाते हैं — तब उपयोगी जब निर्यात कई QR में चंक किया गया हो।
✗ कभी डिकोड नहीं किया
कच्चे secret बाइट्स कभी वर्डिक्ट आउटपुट में डिकोड नहीं किए जाते। हमारा एनालाइज़र उन्हें केवल यह सत्यापित करने के लिए पढ़ता है कि प्रत्येक प्रविष्टि सही-ढंग से बनी है (सीक्रेट मौजूद + गैर-खाली), फिर निष्कर्ष बनने से पहले मूल्य को छोड़ देता है।
यह परीक्षण सुइट द्वारा दावा किया जाता है — हम एनालाइज़र को कैनरी स्ट्रिंग (SECRET_SEED_1, SECRET_SEED_2) वाले हाथ से बने प्रोटोबफ पेलोड भेजते हैं और दावा करते हैं कि वे स्ट्रिंग क्रमबद्ध वर्डिक्ट आउटपुट में कभी नहीं दिखतीं। वहाँ रिग्रेशन CI को विफल कर देता है।
कब (और कैसे) उपयोग करें
वैध उपयोग मामला: आप एक फोन से दूसरे पर अपग्रेड कर रहे हैं। पुराना फोन ~30 सेकंड के लिए अपनी स्क्रीन पर माइग्रेशन QR दिखाता है। नए फोन का प्रमाणीकरणकर्ता ऐप स्क्रीन पर लक्षित होता है और आयात करता है। कमरे में कोई और नहीं है। सब कुछ आयात होने की पुष्टि के बाद पुराने फोन से निर्यात हटाएँ।
खतरे की सतहें हैं:
QR के स्क्रीनशॉट। क्लाउड-सिंक किए गए फोटो में सहेजा गया स्क्रीनशॉट QR को उस खाते से सिंक हर डिवाइस पर डाल देता है।
चैट पर QR साझा करना। भले ही संक्षेप में, चैट तक पहुँच वाला कोई भी (अभी या बाद में) बंडल निकाल सकता है।
हेल्प-फोरम थ्रेड में QR पोस्ट करना। यह आप जितना सोचते हैं उससे अधिक होता है; लोग मदद माँगते हैं और गलती से अपने प्रमाणीकरणकर्ता निर्यात की फोटो पोस्ट कर देते हैं।
सार्वजनिक पोस्टर / साइनेज जिन्हें सेटअप QR समझा जाता है। फ़ॉर्मेट दृश्य रूप से एकल-खाता सेटअप QR से अप्रभेद्य है।
यदि आपको संदेह है कि माइग्रेशन QR उजागर हुआ
बंडल में हर खाते में क्रेडेंशियल लीक मानें। पुनर्प्राप्ति चरण, क्रम में:
प्रत्येक प्रभावित सेवा में साइन इन करें और 2FA सीक्रेट बदलें। अधिकांश सेवाएँ इसे खाता → सुरक्षा → दो-कारक प्रमाणीकरण → अक्षम करें फिर पुनः नामांकन करें के तहत करने देती हैं।
उन सेवाओं के लिए जो रोटेशन उजागर नहीं करतीं (दुर्लभ लेकिन मौजूद), खाता हटाएँ और फिर जोड़ें।
हर प्रभावित खाते पर हालिया साइन-इन गतिविधि की जाँच करें।
हर डिवाइस + क्लाउड-सिंक किए गए फोटो लाइब्रेरी से मूल निर्यात QR हटाएँ जहाँ यह हो सकता है।
बंडल वाला हमलावर वर्षों तक वैध 2FA कोड उत्पन्न कर सकता है जब तक आप रोटेट नहीं करते। टालें नहीं।
हमारे स्कैनर में QR छवि डालें, otpauth-migration:// URI पेस्ट करें, या कैमरे का उपयोग करें। वर्डिक्ट सीक्रेट कभी डिकोड किए बिना बंडल में हर खाता दिखाता है।