بياناتك عندنا في ثلاثة أوعية، ولكل وعاء نظام مختلف. نكتب هنا ما نستطيع فعله وما لا نستطيع، وأين ينتهي ما نَعِد به.
ما دام الكود الذي نسلّمه لمتصفحك سليماً، لا نستطيع نحن ولا من يستولي على خادمنا قراءة خزنتك. لو اختُرق خادمنا أو حساب من ينشر الكود، فقد يُسلَّم كود يسرق عبارة مرورك عند كتابتها. نقلّل ذلك بتثبيت بصمة الكود ونشرها، وبمنع أي سكربت خارجي في صفحة الخزنة، وبسجل تغييرات علني.
شريط FuSuite: لوحة التطبيق تحمّل شريط منصّات فيودكس من خادم آخر، ولا نستطيع تثبيت بصمته لأنه يتحدّث مع المنصّات كلها. لذلك تعمل الخزنة من أصل مستقل هو vault.comply.fudex.com.sa: لا يصله الشريط، ولا يستطيع سكربت على لوحة التطبيق قراءة صفحتها أو طلب نصّها المشفّر. وحدّ ذلك أن تدخل الخزنة من هذا العنوان وتتأكد منه قبل كتابة عبارتك، فسكربت مخترق على لوحة التطبيق يستطيع تغيير الرابط إليها. وكوكي الدخول مشترك بين منصّات فيودكس، فمن يستولي على جلسة دخولك يصل إلى النص المشفّر ويخمّن عبارة ضعيفة خارج الخادم، ولهذا نرفض العبارات السهلة.
وما على جهازك من برمجيات خبيثة أو إضافات متصفح خارج سيطرتنا. والمتصفح لا يحمي الذاكرة كما يحميها برنامج مكتبي.
باختصار: عبارتك تولّد مفتاحاً، وهذا المفتاح يفتح مفتاحاً ثانياً، والمفتاح الثاني يفتح عناصرك. لهذا يكون تغيير العبارة فورياً، ويكون استبعاد شخص أثقل.
| اشتقاق مفتاح التغليف KEK | PBKDF2-HMAC-SHA256، 600,000 iterations، salt 16 bytes، 256-bit |
|---|---|
| مفتاح البيانات DEK | 256-bit من crypto.getRandomValues عبر WebCrypto generateKey، ويُفك غير قابل للاستخراج في الجلسة العادية |
| تغليف DEK | AES-256-GCM، iv 96-bit، AAD = fucomply-vault-v1|<tenant>|dek |
| العناصر | AES-256-GCM، iv جديد عند كل حفظ، AAD = <tenant>|<item_id>|<version> |
| مفتاح الاسترداد | 200-bit، Base32 Crockford، 40 chars؛ HKDF-SHA256 (salt 16 bytes، info = fucomply-vault-v1|<tenant>|recovery)؛ AAD = fucomply-vault-v1|<tenant>|dek-recovery |
| العبارة المولَّدة | سبع كلمات عشوائية من قائمة عربية فيها 2048 كلمة، أي 77.0 بت. القوة المستهدفة في التصميم كانت قائمة أكبر، ولم نبلغ بعد قائمة بتلك الجودة، فنكتب الرقم الحقيقي. |
| العبارة الخاصة | 14 حرفاً على الأقل و60 بتاً بمقياس تقريبي يحسب الكلمات لا الحروف، ويرفض اسم منشأتك والسنوات والكلمات المتوقعة. يعمل المقياس في متصفحك عند الاختيار، ولا يستطيع خادمنا فحص عبارة لا يراها. قوتها الفعلية بقدر عشوائيتها. |
| تطبيع العبارة قبل الاشتقاق | NFKC، حذف التشكيل والكشيدة ومحارف الاتجاه، توحيد الهمزات والتاء المربوطة والألف المقصورة، ومسافة واحدة بين الكلمات. هذا يقلّل قوة العبارة الخاصة قليلاً مقابل ألّا يقفلك اختلاف لوحة المفاتيح. |
| أرضية في المتصفح | يرفض المتصفح ترويسة بتكرارات أقل من 600,000 أو أكثر من 20,000,000 أو خوارزمية غير معروفة، حتى لو أرسلها الخادم. |
| الأرشيف | AES-256-GCM على الخادم، DEK لكل منشأة، مغلَّف بمفتاح رئيسي لدى فيودكس |
في الخزنة يرى خادمنا: المنشأة، معرّفات العناصر، أحجامها، أزمنتها، من جلب ماذا ومتى، والنص المشفّر.
ولا يرى: المحتوى، العناوين، عبارة المرور، مفتاح البيانات، مفتاح الاسترداد.
حدود ذلك: حجم العنصر ظاهر لنا لأن الحجم لا يُخفى. والخادم لا يفك شيئاً، لكنه يستطيع نظرياً أن يحذف عنصراً أو يمنعه عنك أو يعيد نسخة أقدم منه؛ التشفير يكشف العبث بالمحتوى ولا يمنع الحذف.
فريقنا: لا يدخل حساب منشأتك إلا بمنحة مؤقتة بسبب مكتوب، وتظهر في سجل الأثر عندك المنحة وكل ملف فُتح بها وكل صفحة وصل إليها، وتستطيع إلغاءها. وبوت تيليجرام يضبطه موظف تحت منحة ينفكّ ربطه بانتهائها. هذه المنح لا تصل إلى الخزنة ولا إلى نصّها المشفّر. أما البيانات التشغيلية والأرشيف فتصل إليها المنحة بحدود دورها.
عند تفعيل الخزنة تظهر ورقة استرداد مرة واحدة، فتطبعها أنت. لا نحتفظ بها.
ضياع العبارة والورقة معاً يعني ضياع الخزنة. لا يستطيع خادمنا ولا فريقنا استعادتها، ولا توجد نسخة احتياطية تفتحها: نسخنا الاحتياطية تحوي النص المشفّر نفسه.
تغيير العبارة يعيد تغليف المفتاح وحده. أما استبعاد عضو فيعني مفتاحاً جديداً وإعادة تشفير كل عنصر في متصفحك وعبارة جديدة وورقة جديدة. وحتى هذا لا يمحو ما اطّلع عليه العضو من قبل، فغيّر الأسرار نفسها عند مصادرها.
مسودة قيد مراجعة قانونية
خوادمنا عند هتزنر في فالكنشتاين بألمانيا، والنسخ الاحتياطي في Wasabi بمنطقة eu-central-1.
نسخة ما قبل الترحيل: قبل كل تحديث لبنية القاعدة نأخذ نسخة صريحة منها على الخادم نفسه للرجوع عن تحديث فاشل. تُحذف تلقائياً بعد 7 أيام على الأكثر. وحذف منشأتك يمحوها من هذه النسخ فوراً.
النسخ الاحتياطية الخارجية: حذف منشأتك لا يصل إلى اللقطات الخارجية المأخوذة قبله. فيها القاعدة بما فيها البيانات التشغيلية ونص البحث، والنص المشفّر، ومفتاح الأرشيف مغلَّفاً. لم نعلن هنا مدة بقائها بعد، فاسألنا عنها قبل أن تعتمد على الحذف الفوري.
يعني هذا أن بياناتك تُحفظ خارج المملكة. ما يترتّب على ذلك تحت نظام حماية البيانات الشخصية نصٌّ يراجعه محامٍ قبل اعتماده، ولا نقدّم هذه الفقرة بوصفها رأياً قانونياً.
a1a996b94cc1c81735da385362428e853d7ba250efae8ff38fd62de4af385b9aحد هذا الفحص: البصمة هنا وصفحة الخزنة يقدّمهما خادم واحد، فمن يخترقه يستطيع تغييرهما معاً. لذلك تزيد قيمة الفحص حين تقارن بما حفظته سابقاً أو بنسخة منشورة خارج هذا الخادم.
| vault/index.html | 0d52983d5c50b25b49eda67c7bf92411706d8bb0654660cab306f4759dbd34fd |
|---|---|
| vault.js | d6ba4fd6c22fef3465a932cd9bc017042b5fe6746420b7f33d53f6892fb41847 |
| vault-crypto.js | 84c4d8da47071c313f47ec456e98a7593ba671e08f50ba83661eea998a1eae4b |
| vault-words.js | a1fdb3690738eb1c7cbd112502890a6898339ea005bf345d21f18bed59d44192 |
| vault.css | ec54d6437c955efb33a9f9c9ded0d4f77910697e0b812c871d290d1fd1695e3e |
بصمة البناء: SHA-256 لبيان أسطره «الاسم البصمة» لملفات الخزنة الأربعة بالترتيب الوارد في tools/vault_build.py.
هذه الصفحة بلا سكربت ولا خطوط خارجية ولا أدوات تتبّع.