Submarine

यह पेज एक अनुवाद है। अगर यह अंग्रेज़ी वर्ज़न से अलग हो, तो अंग्रेज़ी वर्ज़न ही मान्य है। अंग्रेज़ी वर्ज़न

आपका डेटा कैसे सुरक्षित रहता है

हम यह नहीं कहते कि आप हम पर भरोसा करें। यह पेज ठीक-ठीक बताता है कि क्या एन्क्रिप्ट होता है, हमारा सर्वर क्या देख सकता है और क्या नहीं, और आप हर दावे को ख़ुद कैसे जाँच सकते हैं।

एक मिनट में

  • आपके सर्वर, लॉगिन, कुंजियाँ और नोट्स आपके डिवाइस पर एक फ़ाइल में रखे जाते हैं, AES-256-GCM से एन्क्रिप्ट करके। सिर्फ़ इसी डिवाइस के लिए चुने गए कुछ विकल्प, जैसे ऐप का लुक और RDP सर्वर के साथ शेयर किया गया फ़ोल्डर, ऐप की सेटिंग्स में बिना एन्क्रिप्शन के रखे जाते हैं और कभी सिंक नहीं होते।
  • कुंजी आपके प्रोफ़ाइल पासवर्ड से Argon2id के ज़रिए बनाई जाती है। यह तरीक़ा जानबूझकर धीमा रखा गया है, ताकि पासवर्ड का अनुमान लगाना महँगा पड़े। पासवर्ड न कहीं स्टोर किया जाता है, न कहीं भेजा जाता है।
  • अगर आप सिंक चालू करते हैं, तो हर आइटम अपलोड होने से पहले आपके डिवाइस पर एन्क्रिप्ट किया जाता है। सर्वर ऐसा डेटा स्टोर करता है, जिसे वह डिक्रिप्ट नहीं कर सकता।
  • आपके डेटा का बाहरी हिस्सा सर्वर को ज़रूर दिखता है: आपका ईमेल पता, आप कब और किस IP पते से सिंक करते हैं, आपके पास हर प्रकार के कितने आइटम हैं और वे कितने बड़े हैं, आपकी प्रोफ़ाइलों के नाम, और शेयर की गई प्रोफ़ाइलों के लिए शेयर के नाम और सदस्यों के ईमेल पते।
  • ऐप में न विज्ञापन हैं, न एनालिटिक्स, न क्रैश रिपोर्टिंग।

सर्वर क्या नहीं पढ़ सकता

  • आपके आइटमों के अंदर क्या है: नाम, पते, पोर्ट, यूज़रनेम, पासवर्ड, निजी कुंजियाँ और उनके पासफ़्रेज़, टनल, नोट्स, कमांड, फ़ोल्डरों के नाम
  • कौन-सा लॉगिन या कौन-सी कुंजी किस सर्वर की है
  • किसी आइटम को किसने बदला
  • आपका प्रोफ़ाइल पासवर्ड, आपका शेयरिंग पासफ़्रेज़ और वे कुंजियाँ जो आपकी प्रोफ़ाइलें खोलती हैं

सर्वर क्या देख सकता है

  • आपका ईमेल पता, और साइन इन करते समय आपका अकाउंट पासवर्ड (सर्वर उसका सिर्फ़ bcrypt हैश स्टोर करता है)
  • साइन-इन और सिंक का IP पता और समय
  • किसी प्रोफ़ाइल में हर प्रकार के कितने आइटम हैं, उनके साइज़, और हर आइटम कब और किस डिवाइस से बदला गया (डिवाइस की एक रैंडम ID)
  • आपकी प्रोफ़ाइलों के नाम
  • शेयर की गई प्रोफ़ाइलों के लिए: शेयर के नाम, सदस्यों के ईमेल पते और उनकी भूमिकाएँ

सिंक करने पर क्या होता है

कभी आपके डिवाइस से बाहर नहीं जाता
प्रोफ़ाइल पासवर्डArgon2idप्रोफ़ाइल कुंजीAES-256-GCMएन्क्रिप्टेड आइटम
HTTPSसिंक सर्वरएन्क्रिप्टेड आइटम और ऊपर बताई गई जानकारी स्टोर करता है
पासवर्ड और कुंजियाँ आपके डिवाइस पर ही रहती हैं। भेजे जाते हैं तो सिर्फ़ एन्क्रिप्टेड आइटम, और उनके आसपास की जानकारी।

1. आपके डिवाइस पर

हर प्रोफ़ाइल एक फ़ाइल है। उसके अंदर एक छोटा डेटाबेस होता है, जिसमें आपके सर्वर, लॉगिन, SSH कुंजियाँ, नोट्स और सेटिंग्स होती हैं। पूरे डेटाबेस को कंप्रेस किया जाता है और फिर AES-256-GCM से एन्क्रिप्ट किया जाता है। हर बार फ़ाइल सेव होने पर एक नया रैंडम नॉन्स इस्तेमाल होता है। फ़ाइल पहले एक अस्थायी कॉपी में लिखी जाती है, इसलिए कोई क्रैश आधी-अधूरी फ़ाइल पीछे नहीं छोड़ सकता।

कुंजी आपके प्रोफ़ाइल पासवर्ड से Argon2id के ज़रिए बनती है, जिसमें 64 MiB मेमोरी, 3 पास, 4 लेन और हर प्रोफ़ाइल के लिए एक रैंडम सॉल्ट इस्तेमाल होते हैं। ये सेटिंग्स ऐप में तय हैं, इसलिए कोई बदली हुई फ़ाइल इन्हें कमज़ोर नहीं कर सकती।

पासवर्ड न कभी डिस्क पर लिखा जाता है, न कहीं भेजा जाता है। कुंजी बनने के बाद, ऐप के कोर में मौजूद पासवर्ड की कॉपी मिटा दी जाती है, और प्रोफ़ाइल लॉक करने पर कुंजी भी मिटा दी जाती है। लॉक करने पर हर कनेक्शन भी बंद हो जाता है, और जो लॉगिन अभी चल रहा हो, वह भी रद्द हो जाता है। अगर आप पासवर्ड भूल जाएँ, तो प्रोफ़ाइल नहीं खुल सकती। कोई रीसेट नहीं है, क्योंकि ऐसा कुछ भी कहीं नहीं रखा जाता, जिससे वह खुल सके।

क्विक अनलॉक वैकल्पिक है और डिफ़ॉल्ट रूप से बंद रहता है। Windows पर यह Windows Hello और TPM का इस्तेमाल करता है, और Android पर फ़िंगरप्रिंट सेंसर और Android Keystore का। सिस्टम प्रोफ़ाइल की कुंजी रखता है, आपका पासवर्ड कभी नहीं, और यह कुंजी कभी सिंक नहीं होती। Android पर, ऐप के डेटा का जो क्लाउड बैकअप सिस्टम लेता है, वह बंद कर दिया गया है।

Windows पर, जब Remote Desktop Connection किसी ऐसे सर्वर को खोलता है जिसका पासवर्ड सेव है, तो ऐप वह पासवर्ड थोड़ी देर के लिए बनी एक .rdp फ़ाइल में देता है। उस फ़ाइल में पासवर्ड Windows DPAPI से आपके Windows यूज़र के लिए एन्क्रिप्ट होता है, और Remote Desktop Connection के उसे पढ़ते ही फ़ाइल डिलीट कर दी जाती है (ज़्यादा से ज़्यादा 30 सेकंड बाद; किसी क्रैश की वजह से पीछे छूटी फ़ाइल अगली बार ऐप शुरू होने पर हटा दी जाती है)।

2. क्लाउड सिंक (Cloud sync)

जब तक आप साइन इन नहीं करते, सिंक बंद रहता है। हर प्रोफ़ाइल की अपनी एक रैंडम 256-बिट डेटा कुंजी होती है, जो एन्क्रिप्टेड प्रोफ़ाइल के अंदर ही रहती है। अपलोड से पहले, हर आइटम (एक सर्वर, एक लॉगिन, एक कुंजी, एक नोट…) इसी कुंजी से अलग-अलग एन्क्रिप्ट किया जाता है, AES-256-GCM और एक नए रैंडम नॉन्स के साथ।

हर एन्क्रिप्टेड आइटम के साथ सर्वर को ये भी मिलते हैं: एक रैंडम ID, आइटम का प्रकार, एक टाइमस्टैम्प, और एक फ़्लैग, जो बताता है कि आइटम डिलीट हुआ है या नहीं। टाइमस्टैम्प में उस डिवाइस की एक रैंडम ID होती है, जिसने बदलाव किया। एन्क्रिप्टेड आइटम के साइज़ से मोटे तौर पर पता चलता है कि आइटम कितना बड़ा है। सर्वर हर प्रोफ़ाइल का नाम भी स्टोर करता है। ज्ञात होस्ट कुंजियाँ, कमांड हिस्ट्री, मॉनिटरिंग सेटिंग्स और सिर्फ़ इसी डिवाइस के लिए रखे गए विकल्प कभी सिंक नहीं होते।

एक आइटम के लिए सर्वर यह स्टोर करता है: (उदाहरण)

{
  "uuid": "6f1c2e0a9b7d4c3e8a5f0d1b2c3e4f50",
  "entity_type": "servers",
  "updated_at": "001761043562118:00000:9f3a61c2d4e5b7a8",
  "deleted": false,
  "blob": "4e8a1f0c2b9d3e7a5c6f8b1d0a2e4c6b8d0f1a3c5e7b9d1f…"
}

3. नए डिवाइस पर प्रोफ़ाइल खोलना

सिंक की गई प्रोफ़ाइल को किसी दूसरे डिवाइस पर खोलने के लिए, उस डिवाइस को प्रोफ़ाइल की डेटा कुंजी चाहिए। इसलिए सर्वर एक और रिकॉर्ड रखता है: डेटा कुंजी, जिसे आपके प्रोफ़ाइल पासवर्ड से उन्हीं Argon2id सेटिंग्स के साथ बनी एक कुंजी से एन्क्रिप्ट किया गया है। सर्वर इसे नहीं खोल सकता।

अगर कोई हमलावर कभी सर्वर का डेटा चुरा ले, तो वह मुख्य रूप से यही आज़मा सकता है: ऑफ़लाइन आपके प्रोफ़ाइल पासवर्ड का अनुमान लगाना। हर अनुमान पर Argon2id की एक पूरी गणना लगती है, इसलिए एक लंबा पासवर्ड, जिसे आप कहीं और इस्तेमाल नहीं करते, आपके डेटा को सुरक्षित रखता है।

4. आपका अकाउंट पासवर्ड

आपके सिंक अकाउंट का अपना पासवर्ड होता है, जो आपके प्रोफ़ाइल पासवर्ड से अलग है। साइन इन करते समय यह HTTPS के अंदर सर्वर को भेजा जाता है, और सर्वर उसका सिर्फ़ bcrypt हैश स्टोर करता है। 5 बार ग़लत पासवर्ड डालने के बाद, पासवर्ड से साइन-इन 15 मिनट के लिए रुक जाता है।

यह सेवा Cloudflare के पीछे है, जो इसके लिए HTTPS कनेक्शन संभालता है। इसलिए सर्वर की तरह Cloudflare भी साइन इन के समय आपका अकाउंट पासवर्ड देख सकता है, लेकिन आपके आइटम सिर्फ़ उनके एन्क्रिप्टेड रूप में।

अपने प्रोफ़ाइल पासवर्ड को कभी भी अकाउंट पासवर्ड न बनाएँ। तब सर्वर या Cloudflare कभी भी जो कुछ देखे, उससे आपकी प्रोफ़ाइलें नहीं खुल सकतीं।

5. प्रोफ़ाइल शेयर करना

प्रोफ़ाइलें शेयर करने के लिए, हर अकाउंट के पास एक X25519 कुंजी-जोड़ी होती है। निजी कुंजी आपके शेयरिंग पासफ़्रेज़ से बनी एक कुंजी से एन्क्रिप्ट की जाती है (फिर से Argon2id), और पासफ़्रेज़ कभी आपके डिवाइस से बाहर नहीं जाता। शेयर की गई प्रोफ़ाइल के हर सदस्य को प्रोफ़ाइल की डेटा कुंजी उसकी अपनी सार्वजनिक कुंजी से सील होकर मिलती है।

जब आप किसी को आमंत्रित करते हैं, तो ऐप वह सार्वजनिक कुंजी इस्तेमाल करता है, जो सर्वर उस ईमेल पते के लिए देता है। अगर बाद में किसी सदस्य की कुंजी बदल जाती है, तो ऐप आपको बताता है और एक फ़िंगरप्रिंट दिखाता है, जिसे आप उस सदस्य के साथ मिलाकर देख सकते हैं। सर्वर को शेयर की गई प्रोफ़ाइलों के नाम पता होते हैं, और यह भी कि कौन सदस्य है, लेकिन यह नहीं कि उनके अंदर क्या है।

6. अगर सर्वर आपके ख़िलाफ़ हो जाए

अच्छी सुरक्षा का मतलब सिर्फ़ यह नहीं है कि सर्वर को क्या करना चाहिए। यहाँ बताया गया है कि सर्वर पर पूरा नियंत्रण रखने वाला कोई व्यक्ति क्या कर सकता है और क्या नहीं।

वह क्या नहीं कर सकता

  • आपके आइटम पढ़ना, या उनके अंदर की चीज़ें इस तरह बदलना कि पता न चले
  • आपके प्रोफ़ाइल पासवर्ड के बिना आपकी प्रोफ़ाइल कुंजी की स्टोर की गई कॉपी खोलना
  • आपका प्रोफ़ाइल पासवर्ड या शेयरिंग पासफ़्रेज़ जानना, जिन्हें ऐप कभी नहीं भेजता
  • आपके डिवाइस पर ऐप को बदलना: कोई ऑटोमैटिक अपडेट नहीं होता, ऐप सिर्फ़ यह दिखाता है कि नया वर्ज़न मौजूद है

वह क्या कर सकता है

  • किसी कमज़ोर प्रोफ़ाइल पासवर्ड का ऑफ़लाइन अनुमान लगाने की कोशिश करना, जिसमें हर अनुमान पर Argon2id की एक धीमी गणना लगती है
  • अगली बार आपके साइन इन करने पर आपका अकाउंट पासवर्ड पकड़ लेना
  • आइटम डिलीट करना, पुराने वर्ज़न वापस ले आना, या बदलावों को रोककर रखना। सिंक से कुछ भी डिलीट होने से पहले, ऐप आपके डिवाइस पर आपकी प्रोफ़ाइल की एक कॉपी रख लेता है
  • जब आप किसी को शेयर की गई प्रोफ़ाइल में आमंत्रित करें, तब ग़लत सार्वजनिक कुंजी दे देना
  • ऊपर की तालिका में बताई गई जानकारी देखना

7. ऐप किन-किन से जुड़ता है

आपके अपने सर्वर, और उनके लिए आपके सेट किए गए प्रॉक्सी और जंप होस्ट। सिंक सर्वर, सिर्फ़ तब जब आप साइन इन हों। और GitHub, नया वर्ज़न देखने के लिए: जब प्रोफ़ाइल सूची खुलती है और जब आप “Check for updates” दबाते हैं, तब ऐप GitHub पर रिलीज़ की सार्वजनिक सूची से पूछता है। उस रिक्वेस्ट में सिर्फ़ ऐप का नाम और वर्ज़न होता है।

ऐप में एनालिटिक्स, क्रैश रिपोर्टिंग या विज्ञापन का कोई कोड नहीं है। सिंक के लिए ऐप सिर्फ़ सर्टिफ़िकेट अथॉरिटी की अपनी बिल्ट-इन सूची पर भरोसा करता है, और कभी किसी रीडायरेक्ट को फ़ॉलो नहीं करता, इसलिए उसे चुपचाप किसी दूसरे सर्वर की ओर नहीं मोड़ा जा सकता।

8. रिमोट डेस्कटॉप को आपके डिवाइस से क्या मिलता है

क्लिपबोर्ड। आप RDP या VNC टैब में जो टेक्स्ट पेस्ट करते हैं, वह उस सर्वर पर जाता है, और पेस्ट करने से पहले उसे कुछ भी नहीं दिया जाता। Share the clipboard चालू होने पर (यह डिफ़ॉल्ट है, और हर सर्वर के लिए इसका अलग स्विच है), रिमोट डेस्कटॉप पर कॉपी किया गया टेक्स्ट इस डिवाइस के क्लिपबोर्ड पर आ जाता है। यह सिर्फ़ टेक्स्ट होता है, फ़ाइलें कभी नहीं, और VNC सिर्फ़ सादा ASCII टेक्स्ट ले जाता है।

फ़ाइलें, सिर्फ़ कंप्यूटर पर बिल्ट-इन RDP क्लाइंट के साथ, और सिर्फ़ तब जब आप उस सर्वर के लिए कोई फ़ोल्डर या ड्राइव चुनें, आप चाहें तो सिर्फ़ पढ़ने के लिए (read-only)। सर्वर उसे \\tsclient के नीचे एक ड्राइव के रूप में देखता है, और आपके कंप्यूटर का और कुछ नहीं। सर्वर जो भी पाथ माँगता है, उसकी जाँच होती है: कोई .. नहीं, और रास्ते में कोई लिंक फ़ॉलो नहीं किया जाता, इसलिए आपकी चुनी हुई जगह के बाहर किसी चीज़ तक नहीं पहुँचा जा सकता।

ये विकल्प इसी डिवाइस पर रखे जाते हैं और कभी सिंक नहीं होते, इसलिए जिनके साथ आप कोई प्रोफ़ाइल शेयर करते हैं, उनमें से कोई इन्हें चालू नहीं कर सकता।

ख़ुद जाँचें

इसमें से कुछ भी आपको सिर्फ़ हमारे कहने पर मानने की ज़रूरत नहीं है। जाँचने के कुछ तरीक़े ये हैं, आसान से लेकर एडवांस्ड तक।

  1. कोड पढ़ें

    ऐप ओपन सोर्स है। इस पेज के लिंक आपको ठीक उन्हीं लाइनों पर ले जाते हैं, जो असल में यह काम करती हैं, उसी वर्ज़न में जिसका वर्णन यह पेज करता है (c9dec31)।

  2. कनेक्शन पर नज़र रखें

    कोई फ़ायरवॉल या नेटवर्क मॉनिटर इस्तेमाल करें। आपको अपने सर्वर दिखेंगे, सिंक सर्वर सिर्फ़ तब तक जब तक आप साइन इन हैं, और प्रोफ़ाइल सूची खुलने पर api.github.com। इसके अलावा कुछ नहीं।

  3. देखें कि सर्वर क्या स्टोर करता है

    एडवांस्ड: ऐप के डेटा फ़ोल्डर से अपना साइन-इन टोकन (cloud_token.json) लें, और X-Auth-Token हेडर के साथ API से अपना डेटा माँगें: GET /api/sync/profiles, या रिकॉर्ड की ख़ाली सूची के साथ POST /api/sync। जवाब में आपको सिर्फ़ ID, प्रकार, समय, फ़्लैग और एन्क्रिप्टेड टेक्स्ट मिलते हैं। बाद में वह सेशन ख़त्म करने के लिए ऐप में साइन आउट कर लें।

  4. ट्रैफ़िक पढ़ें

    एडवांस्ड: अपने कंप्यूटर पर एक छोटा प्रॉक्सी चलाएँ, जो रिक्वेस्ट को असली सर्वर तक आगे भेजे, और ऐप में सिंक सर्वर को http://127.0.0.1 और प्रॉक्सी के पोर्ट पर सेट करें। ऐप सादा HTTP सिर्फ़ आपके अपने कंप्यूटर के लिए चलने देता है। आप देख पाएँगे कि ऐप क्या भेजता है, और यह भी कि आपके आइटम एन्क्रिप्टेड हैं। (सिस्टम में जोड़ा गया प्रॉक्सी सर्टिफ़िकेट काम नहीं करेगा, क्योंकि ऐप सर्टिफ़िकेट अथॉरिटी की अपनी सूची इस्तेमाल करता है।)

  5. अपना डेटा ख़ुद डिक्रिप्ट करें

    एडवांस्ड: अपने पासवर्ड के साथ, आप नीचे दी गई तालिका की सेटिंग्स से किसी भी Argon2id और AES-GCM टूल में अपना डेटा खोल सकते हैं। पासवर्ड के बिना कोई नहीं खोल सकता।

  6. अपना डाउनलोड जाँचें

    चेकसम को रिलीज़ में मौजूद SHA256SUMS से मिलाएँ (वर्ज़न 0.4 से), Android ऐप का सर्टिफ़िकेट apksigner से जाँचें, या सोर्स से ऐप बिल्ड करें।

आपके अपने टूल के लिए सेटिंग्स

कुंजी बनाना (key derivation)Argon2id, वर्ज़न 0x13, 64 MiB मेमोरी, 3 पास, 4 लेन, 32-बाइट कुंजी, 16-बाइट रैंडम सॉल्ट
प्रोफ़ाइल फ़ाइल“OMNV” · वर्ज़न 1 · सॉल्ट (16 बाइट) · नॉन्स (12 बाइट) · zstd से कंप्रेस किए गए SQLite डेटाबेस का AES-256-GCM एन्क्रिप्शन, उसके 16-बाइट टैग के साथ
सिंक किया गया आइटमhex(नॉन्स (12 बाइट) · AES-256-GCM सिफ़रटेक्स्ट और टैग), प्रोफ़ाइल की 256-बिट डेटा कुंजी से
प्रोफ़ाइल कुंजी की स्टोर की गई कॉपीhex(0x02 · सॉल्ट (16 बाइट) · नॉन्स (12 बाइट) · 32-बाइट डेटा कुंजी का AES-256-GCM एन्क्रिप्शन), आपके प्रोफ़ाइल पासवर्ड से बनी कुंजी से
शेयरिंगX25519, HKDF-SHA256, AES-256-GCM

यह पेज किन बातों का वादा नहीं करता

  • Submarine का अभी तक कोई स्वतंत्र सुरक्षा ऑडिट नहीं हुआ है। अब तक की इसकी समीक्षाएँ डेवलपर ने ख़ुद की हैं।
  • कमज़ोर या दोबारा इस्तेमाल किया गया पासवर्ड सबसे कमज़ोर कड़ी है। एक लंबा प्रोफ़ाइल पासवर्ड रखें, जो कहीं और इस्तेमाल न होता हो, और अकाउंट पासवर्ड उससे अलग रखें।
  • Telnet और सादा VNC अपने डिज़ाइन के कारण एन्क्रिप्टेड नहीं हैं। ऐप इन पर निशान लगाता है, और इन्हें किसी SSH सर्वर के ज़रिए चला सकता है। सादे VNC पर, आपका पेस्ट किया हुआ या सर्वर का कॉपी किया हुआ क्लिपबोर्ड टेक्स्ट भी नेटवर्क पर बिना एन्क्रिप्शन के जाता है।
  • बिल्ट-इन RDP क्लाइंट एक्सपेरिमेंटल है (यह IronRDP की किसी रिलीज़ से नहीं, बल्कि एक कमिट से बना है), और तब तक बंद रहता है, जब तक आप उसे किसी सर्वर के लिए नहीं चुनते।
  • यह पेज ऐप का वर्णन कमिट c9dec31 के हिसाब से करता है। अगर कोड बदलता है, तो यह पेज भी उसके साथ बदलता है।