هذه الصفحة مترجمة. وإذا اختلفت عن النسخة الإنجليزية، فالنسخة الإنجليزية هي المعتمدة. النسخة الإنجليزية
كيف تُحمى بياناتك
لا نطلب منك أن تثق بنا. تشرح هذه الصفحة بدقة ما الذي يُشفَّر، وما الذي يستطيع خادمنا رؤيته وما لا يستطيع، وكيف تتحقق من كل ادعاء بنفسك.
في دقيقة واحدة
- تُحفظ خوادمك وبيانات دخولك ومفاتيحك وملاحظاتك في ملف واحد على جهازك، مشفّرةً باستخدام AES-256-GCM. أما بعض الخيارات الخاصة بهذا الجهاز وحده، مثل مظهر التطبيق والمجلد الذي تشاركه مع خادم RDP، فتُحفظ دون تشفير في إعدادات التطبيق ولا تُزامَن أبدًا.
- يُشتق المفتاح من كلمة مرور ملف التعريف باستخدام Argon2id، وهي طريقة بطيئة عمدًا ليكون التخمين مكلفًا. ولا تُحفظ كلمة المرور ولا تُرسَل إلى أي مكان أبدًا.
- إذا فعّلت المزامنة، يُشفَّر كل عنصر على جهازك قبل رفعه. ويخزّن الخادم بيانات لا يستطيع فك تشفيرها.
- ومع ذلك، يرى الخادم ظاهر بياناتك: عنوان بريدك الإلكتروني، ومتى تُجري المزامنة ومن أي عنوان IP، وعدد العناصر من كل نوع لديك وأحجامها، وأسماء ملفات التعريف الخاصة بك، وفي ملفات التعريف المشتركة، أسماء المشاركات وعناوين البريد الإلكتروني للأعضاء.
- لا يحتوي التطبيق على إعلانات، ولا أدوات تحليل، ولا تقارير أعطال.
ما لا يستطيع الخادم قراءته
- محتوى عناصرك: الأسماء، والعناوين، والمنافذ، وأسماء المستخدمين، وكلمات المرور، والمفاتيح الخاصة وعبارات مرورها، والأنفاق، والملاحظات، والأوامر، وأسماء المجلدات
- أي بيانات دخول أو أي مفتاح يخص أي خادم
- من غيّر عنصرًا ما
- كلمة مرور ملف التعريف، وعبارة مرور المشاركة، والمفاتيح التي تفتح ملفات التعريف الخاصة بك
ما يستطيع الخادم رؤيته
- عنوان بريدك الإلكتروني، وكلمة مرور حسابك عند تسجيل الدخول (ولا يخزّن منها إلا تجزئة bcrypt)
- عنوان IP ووقت عمليات تسجيل الدخول والمزامنة
- عدد العناصر من كل نوع في ملف التعريف، وأحجامها، ومتى غُيّر كل منها ومن أي جهاز (معرّف عشوائي)
- أسماء ملفات التعريف الخاصة بك
- في ملفات التعريف المشتركة: أسماء المشاركات، وعناوين البريد الإلكتروني للأعضاء، وأدوارهم
ما الذي يحدث عند المزامنة
1. على جهازك
كل ملف تعريف هو ملف واحد. وفي داخله قاعدة بيانات صغيرة تضم خوادمك، وبيانات دخولك، ومفاتيح SSH، والملاحظات، والإعدادات. تُضغط قاعدة البيانات كاملةً ثم تُشفَّر باستخدام AES-256-GCM. وتُستخدم قيمة nonce عشوائية جديدة في كل مرة يُحفظ فيها الملف، ويُكتب الملف أولًا في نسخة مؤقتة، فلا يمكن لعطل مفاجئ أن يترك وراءه ملفًا ناقصًا.
يُشتق المفتاح من كلمة مرور ملف التعريف عبر Argon2id، بذاكرة قدرها 64 MiB، و3 تمريرات، و4 مسارات، وملح (salt) عشوائي لكل ملف تعريف. هذه الإعدادات ثابتة في التطبيق، لذا لا يمكن لملف معدَّل أن يُضعفها.
لا تُكتب كلمة المرور على القرص أبدًا، ولا تُرسَل إلى أي مكان. وبعد اشتقاق المفتاح، تُمحى نسخة كلمة المرور الموجودة في نواة التطبيق، ويُمحى المفتاح عندما تقفل ملف التعريف. ويؤدي القفل أيضًا إلى إغلاق كل الاتصالات، وإلغاء أي تسجيل دخول لا يزال جاريًا. إذا نسيت كلمة المرور، فلا يمكن فتح ملف التعريف. ولا توجد إعادة تعيين، لأنه لا يُحتفظ في أي مكان بشيء يمكنه فتحه.
الفتح السريع (Quick unlock) اختياري ومعطّل افتراضيًا. على Windows يستخدم Windows Hello ووحدة TPM، وعلى Android يستخدم مستشعر بصمة الإصبع وAndroid Keystore. يحتفظ النظام بمفتاح ملف التعريف، لا بكلمة مرورك أبدًا، ولا يُزامَن المفتاح أبدًا. وعلى Android، يكون النسخ الاحتياطي السحابي الذي يجريه النظام لبيانات التطبيق معطّلًا.
على Windows، عندما يفتح برنامج Remote Desktop Connection خادمًا له كلمة مرور محفوظة، يسلّم التطبيق كلمة المرور في ملف .rdp قصير العمر. وتكون كلمة المرور فيه مشفّرة باستخدام Windows DPAPI لمستخدم Windows الخاص بك، ويُحذف الملف فور أن يقرأه Remote Desktop Connection (بعد 30 ثانية على الأكثر؛ وأي ملف يبقى بسبب عطل مفاجئ يُزال عند التشغيل التالي).
- اشتقاق المفتاح (إعدادات Argon2id) lib.rs:237–254
- AES-256-GCM مع قيمة nonce جديدة lib.rs:256–263
- حفظ ملف التعريف lib.rs:431–486
- كلمة المرور لبرنامج Remote Desktop Connection (DPAPI) rdp.rs:178–193
2. المزامنة السحابية (Cloud sync)
المزامنة معطّلة إلى أن تسجّل الدخول. لكل ملف تعريف مفتاح بيانات عشوائي خاص به بطول 256 بت، ويُحفظ داخل ملف التعريف المشفّر. وقبل الرفع، يُشفَّر كل عنصر (خادم، أو بيانات دخول، أو مفتاح، أو ملاحظة…) على حدة بهذا المفتاح، باستخدام AES-256-GCM وقيمة nonce عشوائية جديدة.
وإلى جانب كل عنصر مشفّر، يتلقى الخادم معرّفًا عشوائيًا، ونوع العنصر، وطابعًا زمنيًا، وعلامة تبيّن ما إذا كان قد حُذف. ويتضمن الطابع الزمني معرّفًا عشوائيًا للجهاز الذي أجرى التغيير. ويدل حجم العنصر المشفّر على حجم العنصر تقريبًا. ويخزّن الخادم أيضًا اسم كل ملف تعريف. أما مفاتيح المضيفات المعروفة، وسجل الأوامر، وإعدادات المراقبة، والخيارات المحفوظة لهذا الجهاز وحده، فلا تُزامَن أبدًا.
هذا ما يخزّنه الخادم لعنصر واحد: (مثال)
{
"uuid": "6f1c2e0a9b7d4c3e8a5f0d1b2c3e4f50",
"entity_type": "servers",
"updated_at": "001761043562118:00000:9f3a61c2d4e5b7a8",
"deleted": false,
"blob": "4e8a1f0c2b9d3e7a5c6f8b1d0a2e4c6b8d0f1a3c5e7b9d1f…"
}- تشفير كل عنصر مُزامَن lib.rs:1050–1056
- ما يُرسَل لكل عنصر lib.rs:1086–1124
3. فتح ملف تعريف على جهاز جديد
لفتح ملف تعريف مُزامَن على جهاز آخر، يحتاج ذلك الجهاز إلى مفتاح البيانات الخاص بملف التعريف. لذلك يحتفظ الخادم بسجل إضافي واحد: مفتاح البيانات مشفّرًا بمفتاح مشتق من كلمة مرور ملف التعريف، بإعدادات Argon2id نفسها. ولا يستطيع الخادم فتحه.
وهذا أيضًا أهم ما قد يحاوله مهاجم لو سرق بيانات الخادم يومًا: تخمين كلمة مرور ملف التعريف دون اتصال. فكل تخمين يكلّف تشغيلًا كاملًا لـ Argon2id، لذا فإن كلمة مرور طويلة لا تستخدمها في أي مكان آخر تُبقي بياناتك في أمان.
- النسخة المخزّنة من مفتاح ملف التعريف lib.rs:1551–1569
- فتحها على جهاز جديد lib.rs:1574–1594
4. كلمة مرور حسابك
لحساب المزامنة كلمة مرور خاصة به، منفصلة عن كلمة مرور ملف التعريف. تُرسَل إلى الخادم عند تسجيل الدخول ضمن اتصال HTTPS، ولا يخزّن الخادم منها إلا تجزئة bcrypt. وبعد إدخال 5 كلمات مرور خاطئة، يتوقف تسجيل الدخول بكلمة المرور مؤقتًا لمدة 15 دقيقة.
تعمل الخدمة خلف Cloudflare، التي تتولى اتصال HTTPS نيابةً عنها. لذا يمكن لـ Cloudflare، مثل الخادم، أن ترى كلمة مرور حسابك عند تسجيل الدخول، لكنها لا ترى عناصرك إلا بصيغتها المشفّرة.
لا تستخدم أبدًا كلمة مرور ملف التعريف كلمةَ مرور لحسابك. وبذلك لا يمكن لأي شيء يراه الخادم أو Cloudflare، في أي وقت، أن يفتح ملفات التعريف الخاصة بك.
- طلب تسجيل الدخول cloud.rs:105–108
6. لو كان الخادم خبيثًا
الأمان الجيد لا يقتصر على ما يُفترض أن يفعله الخادم. إليك ما يمكن لشخص يتحكم بالخادم تحكمًا كاملًا أن يفعله، وما لا يمكنه فعله.
ما لا يمكنه فعله
- قراءة عناصرك، أو تغيير محتواها دون أن يُلاحَظ ذلك
- فتح النسخة المخزّنة من مفتاح ملف التعريف دون كلمة مرور ملف التعريف
- معرفة كلمة مرور ملف التعريف أو عبارة مرور المشاركة، فالتطبيق لا يرسلهما أبدًا
- تغيير التطبيق على جهازك: فلا توجد تحديثات تلقائية، والتطبيق يكتفي بإظهار أن إصدارًا جديدًا متوفر
ما يمكنه فعله
- محاولة تخمين كلمة مرور ضعيفة لملف التعريف دون اتصال، بتشغيل بطيء واحد لـ Argon2id لكل تخمين
- التقاط كلمة مرور حسابك في المرة التالية التي تسجّل فيها الدخول
- حذف العناصر، أو إرجاعها إلى نسخ أقدم، أو حجب التغييرات. وقبل أن تحذف المزامنة أي شيء، يحتفظ التطبيق بنسخة من ملف التعريف على جهازك
- تقديم مفتاح عام خاطئ عندما تدعو شخصًا إلى ملف تعريف مشترك
- رؤية التفاصيل المذكورة في الجدول أعلاه
7. كل ما يتصل به التطبيق
خوادمك أنت، والخوادم الوكيلة وخوادم القفز التي تضبطها لها. وخادم المزامنة، فقط عندما تكون مسجّل الدخول. وGitHub، للتحقق من وجود إصدار أحدث: عند فتح قائمة ملفات التعريف، وعندما تضغط «Check for updates» (التحقق من التحديثات)، يستعلم التطبيق من قائمة الإصدارات العامة على GitHub. ولا يحمل هذا الطلب إلا اسم التطبيق وإصداره.
لا يحتوي التطبيق على أي شيفرة للتحليلات أو للإبلاغ عن الأعطال أو للإعلانات. وفي المزامنة، لا يثق التطبيق إلا بقائمته المدمجة من جهات إصدار الشهادات، ولا يتبع أي إعادة توجيه أبدًا، لذا لا يمكن توجيهه خفيةً إلى خادم آخر.
- التحقق من التحديثات about.rs:75–139
8. ما الذي يحصل عليه سطح المكتب البعيد من جهازك
الحافظة. النص الذي تلصقه في علامة تبويب RDP أو VNC يذهب إلى ذلك الخادم، ولا يُعرض عليه أي شيء قبل أن تلصق. وعندما يكون خيار Share the clipboard مفعّلًا (وهو الإعداد الافتراضي، ويُضبط لكل خادم على حدة)، يوضع النص المنسوخ على سطح المكتب البعيد في حافظة هذا الجهاز. وهو نص فقط، لا ملفات أبدًا، ولا ينقل VNC إلا نص ASCII العادي.
الملفات، فقط مع عميل RDP المدمج على الحاسوب، وفقط إذا اخترت مجلدًا أو محرك أقراص لذلك الخادم، للقراءة فقط إن شئت. ويراه الخادم على أنه محرك أقراص ضمن \\tsclient، ولا يرى شيئًا آخر من حاسوبك. ويُفحص كل مسار يطلبه: لا ..، ولا يُتبع أي رابط على طول المسار، فلا يمكن الوصول إلى أي شيء خارج ما اخترته.
وتُحفظ هذه الخيارات على هذا الجهاز ولا تُزامَن أبدًا، لذا لا يستطيع أي شخص تشارك معه ملف تعريف أن يفعّلها.
- إبقاء مسارات المجلد المشارَك داخله rdp_share.rs:121–147
- ما يُسمح لحافظة VNC بنقله vnc_client.rs:180–188
تحقّق بنفسك
لا داعي لأن تصدّق كلامنا في أي من هذا. إليك طرقًا للتحقق، من السهلة إلى المتقدمة.
اقرأ الشيفرة
التطبيق مفتوح المصدر. والروابط في هذه الصفحة تقودك إلى الأسطر نفسها التي تؤدي هذا العمل، في نسخة الشيفرة التي تصفها هذه الصفحة (
c9dec31).راقب الاتصالات
استخدم جدار حماية أو أداة لمراقبة الشبكة. سترى خوادمك أنت، وخادم المزامنة فقط أثناء تسجيل دخولك، وكذلك api.github.com عند فتح قائمة ملفات التعريف. ولا شيء غير ذلك.
انظر إلى ما يخزّنه الخادم
متقدّم: خذ رمز الجلسة الخاص بك من مجلد بيانات التطبيق (cloud_token.json)، واطلب بياناتك من واجهة API مع الترويسة X-Auth-Token، عبر GET /api/sync/profiles، أو عبر POST /api/sync مع قائمة سجلات فارغة. ولن تحصل إلا على معرّفات، وأنواع، وأوقات، وعلامات، ونص مشفّر. ثم سجّل الخروج في التطبيق لإنهاء تلك الجلسة.
اقرأ حركة البيانات
متقدّم: شغّل على حاسوبك خادمًا وكيلًا صغيرًا يمرّر الطلبات إلى الخادم الحقيقي، واضبط خادم المزامنة في التطبيق على http://127.0.0.1 مع منفذ الخادم الوكيل. لا يسمح التطبيق باتصال HTTP العادي إلا مع حاسوبك أنت. سترى ما يرسله التطبيق، وأن عناصرك مشفّرة. (لن تعمل شهادة خادم وكيل تضيفها إلى نظامك، لأن التطبيق يستخدم قائمته الخاصة من جهات إصدار الشهادات.)
فكّ تشفير بياناتك بنفسك
متقدّم: بكلمة مرورك، يمكنك فتح بياناتك بأي أداة تدعم Argon2id وAES-GCM، باستخدام الإعدادات في الجدول أدناه. ومن دون كلمة المرور، لا يستطيع أحد ذلك.
تحقّق من تنزيلك
قارن المجموع الاختباري بما ورد في ملف SHA256SUMS المرفق بالإصدار (بدءًا من الإصدار 0.4)، أو تحقّق من شهادة تطبيق Android باستخدام apksigner، أو ابنِ التطبيق من الشيفرة المصدرية.
الإعدادات، لاستخدامها في أدواتك
| اشتقاق المفتاح | Argon2id، الإصدار 0x13، وذاكرة 64 MiB، و3 تمريرات (passes)، و4 مسارات (lanes)، ومفتاح بطول 32 بايت، وملح عشوائي بطول 16 بايت |
| صيغة ملف التعريف | “OMNV” · الإصدار 1 · الملح (16 بايت) · nonce (12 بايت) · تشفير AES-256-GCM لقاعدة بيانات SQLite المضغوطة بـ zstd، مع وسم المصادقة (tag) البالغ 16 بايت |
| عنصر مُزامَن | hex(nonce (12 bytes) · AES-256-GCM ciphertext and tag)، بمفتاح البيانات الخاص بملف التعريف (256 بت) |
| النسخة المخزّنة من مفتاح ملف التعريف | hex(0x02 · salt (16 bytes) · nonce (12 bytes) · AES-256-GCM of the 32-byte data key)، بالمفتاح المشتق من كلمة مرور ملف التعريف |
| المشاركة | X25519، HKDF-SHA256، AES-256-GCM |
ما لا تَعِد به هذه الصفحة
- لم يخضع Submarine لتدقيق أمني مستقل. والمراجعات التي أُجريت حتى الآن قام بها المطوّر.
- كلمة المرور الضعيفة أو المعاد استخدامها هي أضعف نقطة. استخدم كلمة مرور طويلة وفريدة لملف التعريف، وكلمة مرور مختلفة للحساب.
- اتصالات Telnet وVNC العادي غير مشفّرة بحكم تصميمها. ويميّزها التطبيق بعلامة، ويمكنه تمريرها عبر خادم SSH. وفي VNC العادي، يعبر الشبكة دون تشفير أيضًا نص الحافظة الذي تلصقه أو الذي ينسخه الخادم.
- عميل RDP المدمج تجريبي (فهو مبني على commit من IronRDP، وليس على إصدار)، ومعطّل إلى أن تختاره لخادم ما.
- تصف هذه الصفحة التطبيق كما هو في النسخة
c9dec31. وإذا تغيّرت الشيفرة، تتغيّر هذه الصفحة معها.