Clavenzo कैसे काम करता है
मोटे तौर पर, सरल भाषा में, और कुछ भी ज़रूरी छोड़े बिना। छोटा जवाब चाहिए तो यह है: आपका फ़ोन या कंप्यूटर एक कुंजी बनाता है, वही कुंजी आपका पता है, और दो उपकरणों के बीच जो कुछ भी चलता है वह ऐसी कुंजियों से एन्क्रिप्ट होता है जो सिर्फ़ उन्हीं दो के पास होती हैं।
आपकी पहचान एक कुंजी है, खाता नहीं
ज़्यादातर मैसेजिंग ऐप शुरुआत ही फ़ोन नंबर माँगकर करते हैं। वह नंबर एक कंपनी जारी करती है, वह आपके कानूनी नाम से बँधा होता है, दुकान पर बैठे कर्मचारी को समझा लेने वाला कोई भी उसे अपने नाम करा सकता है, और जिसके पास वह है वह उसे खोज भी सकता है। निजी बातचीत के लिए यह कमज़ोर नींव है।
Clavenzo की शुरुआत अलग है। पहली बार खोलने पर ऐप उपकरण पर ही क्रिप्टोग्राफ़िक कुंजियों का एक जोड़ा बनाता है। सार्वजनिक आधा हिस्सा आपका पता बन जाता है। निजी आधा उपकरण में ही रहता है। उसका कभी किसी क्लाउड में बैकअप नहीं होता और वह कभी हमारे पास नहीं होता। वह उपकरण से तभी बाहर जाता है जब आप खुद उसे निर्यात करें, एक-बार-इस्तेमाल वाले कोड से सील करके।
आपका पता दो रूपों में दिखता है: 16 अक्षरों का एक कोड जिसे आप बोल भी सकते हैं और चिपका भी सकते हैं, और एक QR कोड जिसे कोई स्कैन कर सकता है। एक और छोटा कोड भी है जो सिर्फ़ यह जाँचने के काम आता है कि आप सही व्यक्ति से बात कर रहे हैं: किसी को जोड़ने के लिए बहुत छोटा, ज़ोर से मिलाने के लिए काफ़ी।
जब आप कॉल करते हैं तो क्या होता है
दो फ़ोनों को पहले एक-दूसरे को ढूँढना होता है, फिर एक कुंजी पर सहमत होना होता है। Clavenzo दूसरा काम ऐसे करता है कि सुनने वाले के लिए पहला काम बेमानी हो जाता है।
- एक-दूसरे को ढूँढना। अगर आप एक ही Wi-Fi पर 'आस-पास' में दिख रहे किसी व्यक्ति को कॉल करते हैं, तो फ़ोन सीधे जुड़ जाते हैं और कोई सर्वर बीच में नहीं आता। वरना एक छोटी मिलन-सेवा सीलबंद प्रस्ताव पहुँचाती है और दोनों फ़ोन आपस में सीधा रास्ता बनाने की कोशिश करते हैं। इसके लिए हर फ़ोन दूसरे को अपने नेटवर्क पते बताता है, इसलिए सामने वाले व्यक्ति का ऐप आपका IP पता जान लेता है।
- कुंजी पर सहमति। दोनों उपकरण हस्ताक्षरित क्षणिक X25519 आदान-प्रदान करते हैं, और जुड़ने के एक पल बाद उसके ऊपर पोस्ट-क्वांटम कुंजी आदान-प्रदान, ML-KEM-768, जोड़ते हैं। 'क्षणिक' ही अहम शब्द है: कुंजियाँ सिर्फ़ इसी एक कॉल के लिए बनती हैं और उसके खत्म होते ही नष्ट हो जाती हैं।
- बात करना। आवाज़ हर 20 मिलीसेकंड में 33 बाइट में कोड होती है, और उनमें से हर पैकेट अलग-अलग एन्क्रिप्ट और प्रमाणित होता है। तार पर नज़र रखने वाले किसी के लिए सामग्री बेतरतीब शोर जैसी दिखती है, हालाँकि पैकेटों के समय से अब भी पता चल सकता है कि कोई कब बोल रहा है।
- जाँचना। दोनों फ़ोन उसी कुंजी से चार शब्द निकालते हैं जिस पर सचमुच सहमति बनी। उन्हें ज़ोर से पढ़िए। अगर दोनों स्क्रीन पर वे मिलते हैं, तो बीच में कोई तीसरा नहीं है।
यही आखिरी कदम वह है जिसे लोग छोड़ देते हैं और जो सबसे ज़्यादा मायने रखता है। एन्क्रिप्शन इसकी गारंटी देता है कि दूसरी कुंजी जिसके पास है वही आपको पढ़ सकता है। वह अपने आप यह नहीं बता सकता कि वह कौन है। चार शब्द यही पता लगाने का तरीका हैं।
आज की कॉल की रिकॉर्डिंग अपठनीय क्यों रहती है
एक आम और वास्तविक हमला धैर्य का है: एन्क्रिप्टेड ट्रैफ़िक अभी रिकॉर्ड कर लो, कुंजी बाद में हासिल करो (अदालती आदेश से, चोरी से, या वर्षों बाद किसी उपकरण में सेंध लगाकर) और फिर फ़ुर्सत से रिकॉर्डिंग खोल लो।
क्षणिक कुंजियाँ इसे नाकाम कर देती हैं। जिस कुंजी ने वास्तव में आपकी कॉल एन्क्रिप्ट की थी वह कॉल भर के लिए, दो उपकरणों पर मौजूद थी, और अंत में नष्ट हो गई। आपकी स्थायी पहचान-कुंजी सिर्फ़ आदान-प्रदान पर हस्ताक्षर करती है; वह एक सेकंड की आवाज़ भी एन्क्रिप्ट नहीं करती। कल उसका समझौता होने पर कोई कल आपका रूप धर सकता है। कल जो रिकॉर्ड हुआ था उसे वह नहीं खोल सकता।
इस गुण को अग्रिम गोपनीयता कहते हैं, और यह किसी भी एन्क्रिप्टेड कॉल के पास होने वाली सबसे कीमती चीज़ है।
हर कॉल जुड़ने के एक सेकंड के अंश में ML-KEM-768, एक पोस्ट-क्वांटम एल्गोरिद्म, से फिर कुंजी बनाती है, बशर्ते दोनों ऐप इसका समर्थन करते हों। यह उसी धैर्यवान हमलावर का जवाब है जिसके पास बेहतर औज़ार है: अभी रिकॉर्ड किया गया ट्रैफ़िक, जिसे बाद में क्वांटम कंप्यूटर खोले। संदेशों और फ़ाइलों की बात फ़िलहाल अलग है। वे RSA और ML-KEM-768 दोनों से एक साथ सील होते हैं, लेकिन आज ML-KEM कुंजी RSA कुंजी से ही निकाली जाती है, इसलिए हम अभी उन्हें पोस्ट-क्वांटम नहीं कहते। और जो संदेश किसी बंद फ़ोन के इंतज़ार में सर्वर पर रुका है, उसमें फ़ॉरवर्ड सीक्रेसी नहीं होती: जिसने उसे रिकॉर्ड किया हो और बाद में पाने वाले की पहचान कुंजी हासिल कर ले, वह उसे खोल सकता है।
सर्वर क्या करता है, और क्या नहीं कर सकता
एक काम ऐसा है जो कोई भी पीयर-टू-पीयर ऐप अकेले सचमुच नहीं कर सकता: उस फ़ोन को जगाना जिसमें ऐप बंद है। इसी के लिए एक मिलन-सेवा है, जो यह काम करते हुए भी कम से कम जानने के हिसाब से बनाई गई है।
- वह सामग्री कभी नहीं देखती। प्रस्ताव और ऑफ़लाइन संदेश आपके फ़ोन से निकलने से पहले ही पाने वाले की कुंजी से सील कर दिए जाते हैं। सेवा ऐसे बाइट रखती है जिन्हें वह खोल नहीं सकती।
- वह आपका नाम नहीं जानता। उसकी निर्देशिका में हर उपकरण का पता, सार्वजनिक कुंजियाँ और प्लेटफ़ॉर्म, और फ़ोन का पुश टोकन रहते हैं। उसके पास न नाम हैं, न फ़ोन नंबर, न ईमेल पते, क्योंकि ऐप कभी पूछता ही नहीं। जिसके पास भी कोई पता है, वह पूछ सकता है कि वह पता पंजीकृत है या नहीं।
- उसकी सूचनाओं में न भेजने वाला होता है, न सामग्री। आपके फ़ोन को जगाने वाला पुश सिर्फ़ इतना बताता है कि यह कॉल है या संदेश। iPhone पर संदेश की सूचना में “New message” और “Tap to read” लिखा आता है। Apple और Google देख सकते हैं कि कुछ भेजा गया और कब; वे यह नहीं देख सकते कि क्या भेजा गया और किसने भेजा।
- वह जल्दी भूल जाती है। कॉल का निमंत्रण 60 सेकंड जीता है। सीलबंद ऑफ़लाइन संदेश ज़्यादा से ज़्यादा 72 घंटे। उपकरण का पंजीकरण नवीनीकरण के बिना 30 दिन में समाप्त हो जाता है।
- जब तक निमंत्रण या संदेश इंतज़ार में है, वह देखता है कि कौन किसे कॉल कर रहा है। कॉल के निमंत्रण या ऑफ़लाइन संदेश को वह कुंजी बतानी पड़ती है जिसके लिए वह है और वह कुंजी जिससे वह आया है, इसलिए सर्वर दोनों को गुज़रते देखता है। निमंत्रण या संदेश के चले जाने के बाद वह इस जोड़ी का कोई रिकॉर्ड नहीं रखता: निमंत्रण 60 सेकंड में और संदेश ज़्यादा से ज़्यादा 72 घंटे में भुला दिया जाता है। भेजने वाले को भी छिपाना (सील्ड सेंडर) हमारी सूची में है। हमारे सर्वर Cloudflare के पीछे हैं, जो यही जानकारी देखता है, पर सामग्री कभी नहीं।
जब कॉल सीधे नहीं जा पाती, आमतौर पर इसलिए कि दोनों नेटवर्क मना कर देते हैं (जो कुछ मोबाइल कंपनियों पर होता है), तब एक रिले एन्क्रिप्टेड पैकेट आगे बढ़ाता है: पहले हमारा अपना रिले UDP पर, फिर TCP पर, उसके बाद Cloudflare के रिले। रिले बस डेटा आगे बढ़ाता है। उसके पास कुंजी नहीं है और वह उसे पा भी नहीं सकता। हाँ, वह दोनों उपकरणों के IP पते देखता है। आज ऐसी कोई सेटिंग नहीं है जो हर कॉल को रिले से भेजे, और हर कॉल में, रिले से हो या नहीं, हर उपकरण दूसरे उपकरण का IP पता जान लेता है।
एक ही Wi-Fi पर कॉल
एक ही Wi-Fi नेटवर्क पर, या एक ही हॉटस्पॉट से जुड़े, दो उपकरण एक-दूसरे को ढूँढकर बिना इंटरनेट कनेक्शन और बिना सर्वर के पूरी एन्क्रिप्टेड कॉल कर सकते हैं। आज यह Android पर तब चलता है जब कॉल पाने वाले फ़ोन पर कॉल लेने के लिए तैयार दबा दिया गया हो, iPhone पर तब तक जब तक उस पर Clavenzo खुला हो, और कंप्यूटर पर तब तक जब तक Clavenzo चल रहा हो; iPhone स्थानीय नेटवर्क इस्तेमाल करने की अनुमति माँग सकता है। जब दोनों उपकरणों पर ऐप खुला हो, तब संदेश और फ़ाइलें भी इसी रास्ते, एन्क्रिप्ट होकर, पहुँचते हैं।
यह कम सुरक्षा वाला कोई वैकल्पिक तरीका नहीं है। यह वही एन्क्रिप्शन और वही सुरक्षा-शब्द हैं, बस मिलन वाले कदम की जगह स्थानीय खोज ले लेती है। यह हवाई जहाज़ में, बिना सिग्नल वाली इमारत में, निजी नेटवर्क वाले परिसर में, और हर उस जगह काम आता है जहाँ इंटरनेट भरोसेमंद या स्वागत-योग्य न हो।
जब चीज़ें टूटती हैं
Clavenzo एक कठिन सवाल के इर्द-गिर्द बनाया गया है: जब सब गड़बड़ हो, तब क्या चलता रहता है? कोई तूफ़ान डेटा सेंटर गिरा देता है। कोई देश अपने कनेक्शन धीमे कर देता है। कोई प्रदाता ग़ायब हो जाता है। टावर बंद हो जाते हैं और सिर्फ़ स्थानीय नेटवर्क बचता है। इनमें से हर एक का जवाब नीचे है।
- बिल्कुल इंटरनेट नहीं। एक ही Wi-Fi या हॉटस्पॉट पर फ़ोन, ऊपर बताई गई सीमाओं के भीतर, सीधे एक-दूसरे को कॉल कर सकते हैं। न सर्वर, कमरे के बाहर कुछ नहीं।
- सर्वर छोटे हैं, और कई हैं। वे सिर्फ़ दो फ़ोनों का परिचय कराते हैं और सील किए गए संदेश रखते हैं। आवाज़ और वीडियो उनसे होकर तभी जाते हैं जब रिले की ज़रूरत हो, इसलिए पूरी सेवा अलग-अलग प्रदाताओं और अलग-अलग जगहों पर कुछ छोटी मशीनों पर चलती है।
- इनमें से कोई एक ज़रूरी नहीं। आपका फ़ोन हर सर्वर पर पंजीकरण करता है और हर एक से संदेश लेता है। एक गिरे तो बाकी चलते रहते हैं, और कॉल उसी सर्वर से उठाई जाती है जिसने उसे पहुँचाया।
- सर्वरों की सूची पर हस्ताक्षर है। फ़ोन इसे ख़ुद सर्वरों से लेते हैं और ऐसी कुंजी से जाँचते हैं जो कभी किसी सर्वर को नहीं छूती। नए सर्वर ऐप अपडेट के बिना जुड़ सकते हैं, और कोई पुरानी सूची दोबारा चलाकर फ़ोनों को ग़लत जगह नहीं भेजा जा सकता।
- DNS नहीं, तो भी दिक़्क़त नहीं। सूची में पिन किए गए प्रमाणपत्रों वाले सीधे नेटवर्क पते हैं, इसलिए नाम सर्वर बंद हो या झूठ बोले, या कंटेंट डिलीवरी नेटवर्क गिर जाए, तब भी फ़ोन किसी प्रमाणपत्र प्राधिकरण पर भरोसा किए बिना सर्वर तक पहुँच सकते हैं।
- दो रिले, एक सीढ़ी। जब दो नेटवर्क सीधा रास्ता नहीं देते, तो रिले एन्क्रिप्टेड कॉल ले जाता है: पहले हमारा अपना रिले UDP पर, फिर TCP पर, उसके बाद Cloudflare के रिले। किसी एक के बंद होने से एक पायदान जाता है, कॉल नहीं।
- पतले और अविश्वसनीय लिंक। आवाज़ को 13.2 kbit/s चाहिए। जिटर बफ़र नेटवर्क को मापकर उसके हिसाब से ढलता है, खोए पैकेट क्लिक के बजाय छिपा दिए जाते हैं, और बड़ी फ़ाइलें अपने-आप रुकती और फिर चलती हैं।
- अड़चन डालने वाले नेटवर्क। SOCKS5 और HTTP CONNECT प्रॉक्सी ऐप में ही हैं, उन नेटवर्कों के लिए जो प्रॉक्सी ज़रूरी करते हैं या जहाँ स्थानीय रिज़ॉल्वर बंद या छेड़छाड़ वाला है।
संदेश, तस्वीरें, फ़ाइलें और आवाज़ी संदेश
मैसेजिंग उसी एन्क्रिप्शन पर चलती है। पाठ, तस्वीरें, फ़ाइलें और आवाज़ी संदेश पाने वाले के लिए एन्क्रिप्ट होते हैं, और बातचीत आपके फ़ोन में ऐप के निजी भंडार में रखी जाती है। यह भंडार फ़ोन के अपने एन्क्रिप्शन और स्क्रीन लॉक से सुरक्षित है, और Google तथा iCloud बैकअप से बाहर रखा जाता है। कंप्यूटर पर बातचीत आपके उपयोगकर्ता खाते के तहत ऐप के अपने फ़ोल्डर में रखी जाती है।
जिसका फ़ोन बंद है उसके लिए भेजा गया संदेश उसकी कुंजी से सील करके मिलन-सेवा के पास छोड़ा जाता है, जो उसे ज़्यादा से ज़्यादा 72 घंटे रखती है और उसका एक बाइट भी नहीं पढ़ सकती।
1 MB से बड़ी फ़ाइलें एक जानबूझकर रखा गया अपवाद हैं: वे सिर्फ़ फ़ोन से फ़ोन तक जाती हैं, कभी किसी सर्वर से होकर नहीं। अगर सीधा रास्ता अभी उपलब्ध नहीं है, तो स्थानांतरण रुककर खुद-ब-खुद फिर शुरू हो जाता है: बजाय इसके कि आपकी बड़ी फ़ाइल चुपचाप किसी और की मशीन से गुज़ार दी जाए।
इसके अलावा हर बातचीत के लिए गायब होने वाले संदेश हैं, जो आपके भेजने से और उनके देखने से गिनती शुरू करते हैं; पढ़े जाने की सूचना, जिसे आप दोनों दिशाओं में एक साथ बंद कर सकते हैं; और संदेश अनुरोध की स्थिति, ताकि जो आपके संपर्कों में नहीं है उसे यह पता न चले कि उसका संदेश पहुँचा या पढ़ा गया, जब तक आप उसे स्वीकार न कर लें।
जो आप चालू कर सकते हैं
- ऐप लॉक: Clavenzo पर लौटने पर फ़ोन का स्क्रीन लॉक (पिन, पैटर्न, उँगली की छाप या चेहरा) माँगता है, और Windows पर Windows Hello। कॉल फिर भी बजती हैं; सूचनाएँ संदेश का पाठ दिखाना बंद कर देती हैं। Linux पर यह अभी उपलब्ध नहीं है।
- स्क्रीन सुरक्षा: Android पर ऐप के स्क्रीनशॉट और स्क्रीन रिकॉर्डिंग रोकती है और हाल के ऐप्स की सूची में उसे छिपा देती है। iPhone पर, जहाँ कोई भी ऐप स्क्रीनशॉट नहीं रोक सकता, यह ऐप स्विचर में ऐप को छिपा देती है। Windows पर यह खिड़की को स्क्रीनशॉट, स्क्रीन रिकॉर्डिंग और स्क्रीन शेयरिंग से बाहर रखती है; Linux पर इसे लागू नहीं किया जा सकता। बैकअप और स्थानांतरण कोड इस सेटिंग से परे, हमेशा सुरक्षित रहते हैं।
- इनकॉग्निटो कीबोर्ड (सिर्फ़ Android): आपके कीबोर्ड से अनुरोध करता है कि वह आपके लिखे से न सीखे। यह अनुरोध भर है, और कुछ कीबोर्ड इसे अनसुना कर देते हैं: इसीलिए ऐप ऐसा कहता है। iPhone ऐप्स को ऐसा कोई अनुरोध करने का तरीका नहीं देता।
- प्रॉक्सी समर्थन: SOCKS5 या HTTP CONNECT, उन नेटवर्कों के लिए जहाँ यह ज़रूरी है या जहाँ स्थानीय रिज़ॉल्वर अवरुद्ध है या झूठ बोलता है।
- बिना सहेजे लोगों की कॉल चुप रखें: वे बजती नहीं। वे फिर भी छूटी हुई कॉल के रूप में दिखती हैं और आप वापस कॉल कर सकते हैं।
नए फ़ोन पर जाना
दो अलग निर्यात, जानबूझकर अलग रखे गए, क्योंकि वे अलग-अलग चीज़ें ले जाते हैं।
एक एन्क्रिप्टेड बैकअप में आपकी बातचीत, तस्वीरें, कॉल इतिहास और संपर्क एक फ़ाइल में रहते हैं जिसे आप जहाँ चाहें रखें। वह सिर्फ़ उस कोड से खुलती है जो निर्यात के समय एक बार दिखाया जाता है और कहीं सहेजा नहीं जाता। आयात करने पर जो नहीं है वह जुड़ जाता है और जो पहले से है वह कभी नहीं बदलता।
एक पहचान निर्यात उस कुंजी को ले जाता है जो आपका पता है। वह अपने ही एक-बार-इस्तेमाल वाले स्थानांतरण कोड से सील होता है, आपके फ़ोन के स्क्रीन लॉक के पीछे खड़ा रहता है, और यही एकमात्र तरीका है जिससे वह कुंजी किसी उपकरण से बाहर जाती है। उसे आयात करने पर नया फ़ोन उसी पहचान के रूप में जवाब देने लगता है।
यह बनावट कहाँ रुक जाती है
हर बनावट की सीमाएँ होती हैं। ये हमारी हैं।
- कौन किससे बात करता है। कॉल का निमंत्रण या ऑफ़लाइन संदेश उन दो पतों का नाम लेता है जिनके बीच वह जाता है, इसलिए जब तक वह रखा रहता है, सर्वर और उसके आगे खड़ा Cloudflare यह जोड़ी देखते हैं। सीधी कॉल के शुरुआती हैंडशेक में भी दोनों पहचान कुंजियाँ बिना एन्क्रिप्शन के होती हैं, इसलिए उस नेटवर्क पर नज़र रखने वाला बता सकता है कि कौन-सी दो पहचानें बात कर रही हैं। इनमें से कोई भी कही गई बात का एक शब्द नहीं खोलता। दोनों मेटाडेटा हैं, और दोनों ठीक करने की सूची में हैं।
- समय और मेटाडेटा। सर्वर को अनिवार्य रूप से यह दिखता है कि आपका उपकरण कब हाज़िरी लगाता है। कॉल के दौरान पैकेटों की चाल यह बता सकती है कि कोई कब बोल रहा है, भले ही जो कहा गया वह एन्क्रिप्शन से कभी बाहर न निकले।
- आपका IP पता। हर कॉल में, उसमें भी जो आखिर में रिले से होकर जाए, सामने वाले व्यक्ति का ऐप आपका IP पता जान लेता है, क्योंकि सीधा रास्ता खोजने के लिए दोनों उपकरण अपने नेटवर्क पतों का आदान-प्रदान करते हैं। इससे मोटे तौर पर पता चल सकता है कि आप कहाँ हैं। रिले भी दोनों IP पते देखता है।
- आपका उपकरण ही कमज़ोर कड़ी है। जिसके हाथ में आपका खुला हुआ फ़ोन है, उसके पास आपके संदेश हैं। फ़ोन पर मौजूद कोई नुकसानदेह प्रोग्राम आपके लिखे को एन्क्रिप्ट होने से पहले ही पढ़ लेता है। यह अब तक लिखे गए हर मैसेंजर पर लागू होता है।
- इसका स्वतंत्र ऑडिट नहीं हुआ है। इसे ध्यान से बनाया गया है और भरपूर परखा गया है। यह वही बात नहीं है, और हम ऐसा दिखावा नहीं करेंगे।
अगर आपके खतरे के आकलन में पूरे नेटवर्क पर नज़र रखने वाला प्रतिद्वंद्वी शामिल है, तो इन सीमाओं को समझिए, प्रॉक्सी समर्थन का उपयोग कीजिए, और किसी एक औज़ार पर (इस पर भी) ऐसा कुछ दाँव पर मत लगाइए जिसे खोना आप सह न सकें।