PlainApp सुरक्षा गहन विश्लेषण
PlainApp आपके डेटा को स्थानीय Wi-Fi पर कैसे सुरक्षित रखता है — open-source कोड से प्रमाण सहित।
स्थानीय नेटवर्क सुरक्षा क्यों महत्वपूर्ण है?
जब आप किसी ऐप का उपयोग करके अपने Android फोन को PC ब्राउज़र से प्रबंधित करते हैं, तो आपके SMS, फोटो, संपर्क और फाइलें आपके Wi-Fi नेटवर्क पर यात्रा करती हैं। अधिकांश ऐप्स यह सब पठनीय सादे टेक्स्ट के रूप में भेजते हैं। उसी नेटवर्क पर कोई भी इसे देख सकता है।
आप सोच सकते हैं: "यह मेरा घर का Wi-Fi है, कौन जासूसी करेगा?" लेकिन इन पर विचार करें:
- सार्वजनिक Wi-Fi — कैफे, हवाई अड्डे, होटल — आसपास कोई भी ट्रैफिक कैप्चर कर सकता है
- साझा नेटवर्क — रूममेट, मेहमान, या समझौता किए गए IoT डिवाइस
- राउटर कमज़ोरियाँ — ज्ञात कमज़ोरियों वाला पुराना firmware
यदि कोई ऐप आपके SMS संदेशों को HTTP के माध्यम से सादे टेक्स्ट में भेजता है, तो Wireshark जैसे मुफ्त टूल से कोई भी उन्हें पढ़ सकता है। यह सैद्धांतिक नहीं है — यह बेहद आसान है।
अधिकांश फोन-प्रबंधन ऐप्स ठीक यही करते हैं। उनके web UI का उपयोग करते समय Chrome DevTools खोलें (F12 → Network टैब), और आप हर API कॉल को सादे JSON में पढ़ सकते हैं — SMS सामग्री, फाइल पथ, संपर्क नाम, सब कुछ।
PlainApp कैसे अलग है
PlainApp एन्क्रिप्शन और प्रमाणीकरण की कई परतें लागू करता है। यहाँ प्रत्येक परत क्या करती है, सरल भाषा में।
GraphQL API — केवल वही माँगें जो आपको चाहिए
अधिकांश ऐप्स पुराने REST API का उपयोग करते हैं: प्रत्येक संसाधन के लिए एक URL, जो सब कुछ भेजता है चाहे आपको इसकी ज़रूरत हो या नहीं। PlainApp GraphQL का उपयोग करता है — एक आधुनिक दृष्टिकोण जहाँ ब्राउज़र ठीक वही डेटा माँगता है जो उसे चाहिए, उससे अधिक नहीं।
यह क्यों महत्वपूर्ण है:
- कम डेटा एक्सपोज़ — यदि आपको केवल फाइल का नाम चाहिए, तो बस वही भेजा जाता है
- एक endpoint — दर्जनों के बजाय एक /graphql URL है, जो attack surface को कम करता है
- प्रति-query अनुमतियाँ — प्रत्येक query अपनी अनुमति की जाँच करता है (जैसे, SMS पढ़ने के लिए लॉगिन के बाद भी READ_SMS अनुमति आवश्यक है)
एन्क्रिप्टेड API कॉल (XChaCha20-Poly1305)
यह PlainApp और अधिकांश प्रतिस्पर्धियों के बीच सबसे बड़ा अंतर है।
हर API अनुरोध और प्रतिक्रिया — HTTP और WebSocket ट्रैफ़िक दोनों — XChaCha20-Poly1305 से एन्क्रिप्ट की जाती है, HTTP और HTTPS दोनों मोड में। यह WireGuard VPN, Cloudflare और Google की Tink लाइब्रेरी द्वारा उपयोग किया जाने वाला आधुनिक AEAD एन्क्रिप्शन एल्गोरिदम है।
सरल शब्दों में:
- 1आपका ब्राउज़र एक अनुरोध बनाता है (जैसे, "मेरे SMS दिखाओ")
- 2रीप्ले सुरक्षा के लिए एक टाइमस्टैम्प और यादृच्छिक nonce जोड़ता है
- 3XChaCha20-Poly1305 से पूरे पेलोड को अपठनीय बाइनरी डेटा में एन्क्रिप्ट करता है
- 4एन्क्रिप्टेड बाइनरी नेटवर्क पर भेजी जाती है — कोई base64 नहीं, कोई JSON नहीं, शुद्ध बाइनरी
- 5केवल आपका फ़ोन ही डिक्रिप्ट और सत्यापित कर सकता है
भले ही कोई ट्रैफिक को इंटरसेप्ट करे, उन्हें अर्थहीन बाइनरी डेटा दिखता है — पठनीय JSON नहीं।
एन्क्रिप्शन के बारे में:
- 256-bit key (अत्यंत मज़बूत)
- 192-bit nonce (कुछ प्रकार के हमलों को रोकता है जो अन्य ciphers को प्रभावित करते हैं)
- अंतर्निहित छेड़छाड़ पहचान — यदि कोई ट्रांज़िट में डेटा को बदलता है, तो decryption विफल हो जाता है
- Android पक्ष: Google Tink द्वारा संचालित
- Web पक्ष: @noble/ciphers (एक अच्छी तरह से ऑडिट की गई JavaScript crypto लाइब्रेरी) द्वारा संचालित
डिजिटल हस्ताक्षर (Ed25519) — डिवाइस-से-डिवाइस
जब दो PlainApp डिवाइस एक-दूसरे से संवाद करते हैं (जैसे, फ़ोन-से-फ़ोन चैट), केवल एन्क्रिप्शन पर्याप्त नहीं है — प्रत्येक डिवाइस को सत्यापित करना होगा कि संदेश वास्तव में दूसरे डिवाइस से आया है और जाली नहीं है।
टाइमस्टैम्प
प्राप्तकर्ता डिवाइस भेजने वाले की सार्वजनिक कुंजी से हस्ताक्षर सत्यापित करता है और 5 मिनट से पुराने टाइमस्टैम्प वाले अनुरोधों को अस्वीकार करता है। यह जालसाज़ी और रीप्ले हमलों दोनों को रोकता है।
सुरक्षित डिवाइस पेयरिंग (ECDH Key Exchange)
जब दो PlainApp डिवाइस एक-दूसरे के साथ पेयर होते हैं (जैसे, दो फोन), तो उन्हें एक साझा एन्क्रिप्शन key की ज़रूरत होती है। लेकिन नेटवर्क पर key भेजना उद्देश्य को विफल कर देगा।
PlainApp इसे ECDH (Elliptic Curve Diffie-Hellman) key exchange से हल करता है — वही गणित जो TLS, Apple के Secure Enclave, और WebAuthn में उपयोग होता है:
- 1प्रत्येक डिवाइस एक key pair (public + private) उत्पन्न करता है
- 2वे केवल अपनी public keys का आदान-प्रदान करते हैं
- 3प्रत्येक डिवाइस अपनी private key को दूसरे की public key के साथ जोड़ता है
- 4दोनों एक ही shared secret पर पहुँचते हैं — बिना इसे नेटवर्क पर भेजे
एन्क्रिप्टेड URLs — फाइल पथ छुपाना
यहाँ एक विवरण है जो अधिकांश लोगों को नहीं दिखता: URL पथ भी जानकारी प्रकट करते हैं।
जब आप कोई फाइल डाउनलोड करते हैं, तो URL सर्वर को बताता है कि आपको कौन सी फाइल चाहिए। कई ऐप्स में, URL इस तरह दिखता है:
/fs?path=/sdcard/DCIM/Camera/photo_2024.jpgट्रैफिक स्निफ करने वाला कोई भी (या ब्राउज़र इतिहास देखने वाला) यह देख सकता है कि आपने कौन सी फाइल एक्सेस की और आपके फोन की फोल्डर संरचना क्या है।
PlainApp URL में फाइल पथ को एन्क्रिप्ट करता है:
/fs?id=AxK9f2mQ7vR3xP8nWz...id पैरामीटर URL Token नामक एक रैंडम key से XChaCha20-Poly1305 के साथ एन्क्रिप्ट किया गया फाइल पाथ है। डिफ़ॉल्ट रूप से यह key स्थायी होती है और ऐप रीस्टार्ट होने पर भी नहीं बदलती, जिससे शेयर किए गए लिंक काम करते रहते हैं। key के बिना कोई भी वास्तविक पाथ का अनुमान नहीं लगा सकता, आपकी फाइलों की सूची नहीं बना सकता, या डाउनलोड URL नहीं बना सकता।
Self-Signed Certificates के साथ HTTPS
PlainApp आपके फोन पर एक self-signed TLS certificate बनाता है। यह एक एन्क्रिप्टेड HTTPS टनल बनाता है — वही तकनीक जो बैंक और वेबसाइटें उपयोग करती हैं।
Certificate में उपयोग होता है:
- ECDSA with P-256 curve (प्रमुख वेबसाइटों के समान)
- SHA256 signature
- ऐप की private directory में संग्रहीत
application-layer XChaCha20 एन्क्रिप्शन के साथ मिलकर, यह आपको एन्क्रिप्शन की दो स्वतंत्र परतें देता है। एक को तोड़ने से दूसरे को तोड़े बिना कोई फायदा नहीं होता।
लॉगिन सुरक्षा
PlainApp पासवर्ड अनुमान लगाने से रोकने के लिए लॉगिन प्रयासों को सीमित करता है:
- प्रति IP पते पर 60 सेकंड में 5 प्रयास
- उसके बाद, कनेक्शन अस्वीकार कर दिए जाते हैं
- पुराने rate-limit रिकॉर्ड स्वचालित रूप से साफ हो जाते हैं
HTTP बनाम HTTPS: एक ईमानदार नोट
PlainApp HTTP और HTTPS दोनों मोड प्रदान करता है। यहाँ ईमानदार अंतर है:
| HTTP मोड | HTTPS मोड | |
|---|---|---|
| फाइल पथ URLs | एन्क्रिप्टेड (XChaCha20) | एन्क्रिप्टेड (XChaCha20) |
| API कॉल | एन्क्रिप्टेड (XChaCha20) | एन्क्रिप्टेड (XChaCha20 + TLS) |
| फाइल डाउनलोड | ट्रांज़िट में एन्क्रिप्टेड नहीं | TLS द्वारा एन्क्रिप्टेड |
| किसके लिए है | शुरुआती उपयोगकर्ता (कोई ब्राउज़र SSL चेतावनी नहीं) | गोपनीयता-सजग उपयोगकर्ता |
दोनों मोड API कॉल को XChaCha20-Poly1305 से एन्क्रिप्ट करते हैं — आपके SMS, संपर्क, और अन्य डेटा HTTP या HTTPS की परवाह किए बिना हमेशा एन्क्रिप्टेड रहते हैं।
HTTP मोड इसलिए है क्योंकि self-signed certificates ब्राउज़र में एक चेतावनी दिखाते हैं ("आपका कनेक्शन निजी नहीं है")। कम तकनीकी उपयोगकर्ताओं के लिए, यह चेतावनी भ्रामक और डरावनी होती है। HTTP इस परेशानी से बचाता है।
हालाँकि, HTTP मोड फाइल ट्रांसफर को एन्क्रिप्ट नहीं करता। यदि आप साझा या सार्वजनिक नेटवर्क पर हैं, तो हमेशा HTTPS उपयोग करें।
सुझाव: जब भी संभव हो HTTPS उपयोग करें। ब्राउज़र की self-signed certificate चेतावनी स्वीकार करें — स्थानीय-नेटवर्क ऐप के लिए यह सामान्य और अपेक्षित है।
Supply Chain सुरक्षा — कम Dependencies, कम जोखिम
एक सुरक्षा खतरा जिसके बारे में कई उपयोगकर्ता नहीं सोचते: supply chain attacks। जब कोई ऐप सैकड़ों third-party लाइब्रेरीज़ का उपयोग करता है, तो उनमें से कोई भी समझौता हो सकती है — दुर्भावनापूर्ण कोड इंजेक्ट करना जो डेटा चुराता है, cryptocurrency माइन करता है, या backdoors खोलता है।
यह JavaScript ecosystem में विशेष रूप से खतरनाक है। हाल के वर्षों में, लोकप्रिय npm पैकेज जैसे event-stream, ua-parser-js, और colors को हाइजैक कर लाखों प्रोजेक्ट्स में दुर्भावनापूर्ण कोड इंजेक्ट किया गया। यदि किसी फोन प्रबंधन ऐप का web UI सैकड़ों JS पैकेज का उपयोग करता है, तो हर एक संभावित attack vector है।
PlainApp एक जानबूझकर दृष्टिकोण अपनाता है: कम से कम dependencies उपयोग करें, और जब समझदारी हो तो कस्टम कोड बनाएं।
Android ऐप (plain-app)
- कोई dependency injection framework नहीं (न Hilt, न Dagger) — सरल singletons का उपयोग
- Crypto केवल 3 प्रसिद्ध libs द्वारा: Google Tink, Bouncy Castle, और अंतर्निहित Java Cryptography Extension
- Server Ktor (JetBrains द्वारा आधिकारिक Kotlin framework) पर चलता है — कोई अस्पष्ट third-party server लाइब्रेरी नहीं
Web UI (plain-desktop)
केवल 28 runtime dependencies — सामान्य web ऐप्स से बहुत कम। कई चीज़ें जो सामान्यतः npm पैकेज की आवश्यकता होतीं, शुरू से बनाई गई हैं:
| सुविधा | सामान्य ऐप | PlainApp |
|---|---|---|
| Notification ध्वनि | howler.js / tone.js | कस्टम Web Audio API synth |
| UUID जनरेशन | uuid npm पैकेज | हाथ से लिखा RFC 4122 implementation |
| फाइल अपलोड | uppy / axios | कस्टम chunked upload with queue |
| WebRTC वीडियो | Twilio / Daily.co SDK | हाथ से लिखा PeerConnection कोड |
| HTTP client | axios / ky | नेटिव ब्राउज़र fetch |
Web पक्ष पर Crypto @noble/ciphers का उपयोग करता है — एक अच्छी तरह से ऑडिट की गई, शून्य-dependency JavaScript crypto लाइब्रेरी — बड़े, भारी विकल्पों के बजाय।
यह क्यों महत्वपूर्ण है
हर dependency जो आप जोड़ते हैं वह ऐसा कोड है जिस पर आपका नियंत्रण नहीं है। PlainApp के दृष्टिकोण का अर्थ है:
- दुर्भावनापूर्ण कोड छुपने के कम स्थान
- छोटा attack surface
- ऑडिट करना आसान (पूरा कोडबेस open source है)
- परित्यक्त या हाइजैक किए गए npm पैकेज से कोई जोखिम नहीं
कई प्रतिस्पर्धी क्या गलत करते हैं
यह किसी विशिष्ट ऐप को नाम देने के बारे में नहीं है। यह इस श्रेणी में सामान्य पैटर्न के बारे में है:
| सुरक्षा पहलू | PlainApp | प्रतिस्पर्धियों में आम |
|---|---|---|
| API ट्रैफिक | एन्क्रिप्टेड (XChaCha20) HTTP और HTTPS दोनों में | HTTP पर सादा JSON |
| WebSocket ट्रैफ़िक | एन्क्रिप्टेड बाइनरी फ़्रेम (XChaCha20) | सादा टेक्स्ट JSON या WebSocket नहीं |
| प्रमाणीकरण टोकन प्रबंधन | एन्क्रिप्शन कुंजी के रूप में उपयोग, हेडर में कभी नहीं | HTTP हेडर में भेजा जाता है (आसानी से लीक) |
| फाइल URLs | एन्क्रिप्टेड path IDs | सादे टेक्स्ट पथ उजागर |
| Key exchange | ECDH (P-256) | कोई नहीं |
| अनुरोध हस्ताक्षर | Ed25519 (केवल डिवाइस-से-डिवाइस) | नहीं |
| रीप्ले सुरक्षा | 30 सेकंड + nonce (Web); 5 मिनट + हस्ताक्षर (डिवाइस) | नहीं |
| लॉगिन सुरक्षा | दर सीमा + दो-कारक पुष्टि | असीमित |
| डेटा routing | 100% स्थानीय, कोई cloud नहीं | कुछ cloud से गुज़रते हैं |
| Dependencies | न्यूनतम, प्रसिद्ध libs | सैकड़ों npm पैकेज |
| Source code | Open source (GPL-3.0) | अधिकतर closed source |
किसी भी ऐप की जाँच करने का सबसे आसान तरीका: ऐप उपयोग करते समय Chrome DevTools (F12) → Network टैब खोलें। यदि आप API प्रतिक्रियाओं को JSON के रूप में पढ़ सकते हैं, तो ऐप में कोई एन्क्रिप्शन नहीं है।
स्वयं सत्यापित करें
PlainApp पूरी तरह से open source है। इस लेख में हर दावे को कोड में सत्यापित किया जा सकता है।
github.com/plainhub/plain-app (GPL-3.0)स्वचालित, ट्रेस करने योग्य और छेड़छाड़-रोधी रिलीज़ पाइपलाइन
सभी इंस्टॉल पैकेज GitHub और F-Droid इंफ्रास्ट्रक्चर द्वारा स्वतः बनाए जाते हैं। बिल्ड ट्रेस करने योग्य, सुरक्षित और बिना मैन्युअल हस्तक्षेप के होते हैं। PlainApp उन कुछ Android ऐप्स में है जो सत्यापित बिल्ड (SLSA) और VirusTotal-स्कैन किए गए रिलीज़ दोनों प्रदान करते हैं।
GitHub और F-Droid पर स्वचालित बिल्ड
रिलीज़ आर्टिफैक्ट स्थानीय मैन्युअल पैकेजिंग की बजाय CI पाइपलाइन से बनते हैं। हर आर्टिफैक्ट को सोर्स कमिट और पुनरुत्पादित बिल्ड वर्कफ़्लो तक ट्रेस किया जा सकता है।
SLSA Provenance (Level 3) + VirusTotal स्कैन
हर रिलीज़ में SLSA provenance अटेस्टेशन और VirusTotal स्कैन परिणाम शामिल होते हैं, जिससे सप्लाई चेन ऑडिट योग्य बनती है और इंस्टॉल से पहले सत्यापन संभव होता है।
अक्सर पूछे जाने वाले प्रश्न
क्या PlainApp वास्तव में एन्क्रिप्टेड है यदि मैं HTTP मोड उपयोग करता हूँ?
हाँ। सभी API कॉल (SMS, संपर्क, फाइल सूची, आदि) HTTP और HTTPS दोनों मोड में XChaCha20-Poly1305 से एन्क्रिप्टेड हैं। HTTP मोड केवल फाइल डाउनलोड को अनएन्क्रिप्टेड छोड़ता है। पूर्ण सुरक्षा के लिए, HTTPS उपयोग करें।
मेरा ब्राउज़र सुरक्षा चेतावनी क्यों दिखाता है?
PlainApp एन्क्रिप्शन के लिए self-signed TLS certificate का उपयोग करता है। चूँकि यह किसी सार्वजनिक Certificate Authority द्वारा जारी नहीं किया गया है, आपका ब्राउज़र एक चेतावनी दिखाता है। स्थानीय-नेटवर्क ऐप के लिए यह सामान्य और अपेक्षित है। जारी रखने के लिए 'Advanced' और 'Proceed' पर क्लिक करें।
क्या उसी Wi-Fi पर कोई मेरा डेटा देख सकता है?
PlainApp के साथ, नहीं। API कॉल XChaCha20-Poly1305 से एन्क्रिप्टेड हैं, और HTTPS मोड में फाइल ट्रांसफर भी TLS द्वारा एन्क्रिप्टेड हैं। अधिकांश प्रतिस्पर्धी ऐप्स के साथ, हाँ — उनकी API कॉल सादे टेक्स्ट JSON के रूप में भेजी जाती हैं।
PlainApp की तुलना VPN से कैसे होती है?
VPN आपके डिवाइस और VPN सर्वर के बीच ट्रैफिक को एन्क्रिप्ट करता है। PlainApp स्थानीय नेटवर्क पर आपके फोन और ब्राउज़र के बीच ट्रैफिक को एन्क्रिप्ट करता है। वे अलग-अलग उद्देश्यों की पूर्ति करते हैं — PlainApp स्थानीय डिवाइस प्रबंधन को सुरक्षित करता है, जबकि VPN इंटरनेट ट्रैफिक को सुरक्षित करता है।
क्या कोड वास्तव में open source है?
हाँ। PlainApp GPL-3.0 के अंतर्गत लाइसेंस प्राप्त है। पूरा source code github.com/plainhub/plain-app पर उपलब्ध है। आप हर एन्क्रिप्शन implementation का निरीक्षण कर सकते हैं, source से बिल्ड कर सकते हैं, या योगदान कर सकते हैं।
अपने फ़ोन का नियंत्रण वापस लें।
कोई क्लाउड बिचौलिया नहीं। कोई मासिक शुल्क नहीं. बस आपका फ़ोन और आपका ब्राउज़र।