مقارنة
لا نقارن FOLD إلا في الخصائص التي يمكن التحقق منها، ونورد مصدرًا لكل عمود. أعمدة المنافسين بحسب حالتها في يونيو 2026؛ وإذا غيّر أحد الموردين شيئًا، يتغيّر هذا الجدول معه.
| الخاصية | FOLD | Apple Mail | Mimestream | Spark | Thunderbird | Outlook (الجديد) |
|---|---|---|---|---|---|---|
| لا واجهة خلفية سحابية إضافية | نعم | نعم | نعم مباشرة إلى Gmail | لا سحابة Readdle | نعم | لا سحابة MS |
| App Sandbox مفعّل | نعم | نعم | نعم | نعم | محدود التثبيت القياسي غير معزول | نعم |
| دعم OpenPGP أصلي | نعم Ed25519، Curve25519 + RSA | لا | لا | لا | نعم | لا |
| دعم S/MIME أصلي | نعم | نعم | لا | لا | نعم | نعم |
| التحقق من DKIM داخل العميل | نعم | لا | لا | لا | إضافة ليس في النواة | لا |
| أي مزوّد IMAP | نعم | نعم | لا Gmail فقط | نعم | نعم | محدود عبر سحابة MS إلزاميًا |
| مفتوح المصدر | لا | لا | لا | لا | نعم MPL 2.0 | لا |
المصادر: Apple Platform Security · الحسابات المدعومة في Mimestream · شرح الخصوصية في Spark · Thunderbird · مزامنة Outlook الجديد مع السحابة (Cybernews، 2023).
يعني صف DKIM التحقق المستقل من جهة العميل (إعادة حساب تجزئة المتن والتوقيع)، لا مجرد عرض رأس Authentication-Results الذي يضيفه الخادم. الحالة في 06/2026.
سياسة التبعيات
لا تُقبل تبعية من طرف خارجي إلا إذا تحققت المعايير الأربعة كلها: توفر بدائية لا نستطيع بناءها بأنفسنا بشكل صحيح · تأتي من مصدر جدير بالثقة · قابلة للتدقيق · مدرجة في الجدول أدناه.
يستخدم المحرك والواجهة أطر نظام Apple فقط. ويضيف التنزيل المباشر محدِّثًا واحدًا إلى غلاف التطبيق.
| مسموح بها | |
|---|---|
Foundation | Apple SDK. تدفقات مع TLS تحمل IMAP وSMTP، بما في ذلك STARTTLS على الاتصال القائم. |
CryptoKit | Ed25519, X25519, AES-GCM, SHA-2, HKDF. |
Security | سلسلة المفاتيح، وSecTrust، وRSA، وCMS من أجل S/MIME على macOS. |
CommonCrypto | تشفير AES الكتلي لنمطي OCB وCFB. |
AuthenticationServices | ASWebAuthenticationSession من أجل OAuth. |
SQLite3 | SQLite الخاص بالنظام عبر غلاف Swift رقيق. لا GRDB، ولا SQLite.swift. |
WebKit | عرض مُحصّن للبريد مع تعطيل JavaScript وسياسة محتوى صارمة. |
os.Logger | Apple SDK. |
| Sparkle | للتنزيل المباشر فقط، وفي غلاف التطبيق: تحديثات موقّعة. ليس جزءًا من المحرك أو الواجهة. |
| مستبعدة | |
|---|---|
swift-crypto | النسخة متعددة المنصات من CryptoKit، ولا حاجة إليها على منصات Apple. |
libetpan, MailCore | أغلفة بلغة C؛ ونحن نريد Swift قابلًا للتدقيق. |
| مكتبات OpenPGP | تنفيذنا الخاص القائم على الحديث أولًا، بدل سطح كبير من الإرث القديم. |
SwiftData, CoreData | لم تُصمَّم لاستيعاب 500,000 رسالة في صندوق البريد الواحد؛ لذا نستخدم SQLite مباشرة. |
| حزم JSON والتسجيل والشبكات من أطراف خارجية | يكفي Foundation وos. |
استراتيجية التشفير
تأتي خوارزميات التشفير غير المتماثل، وAES-GCM، وHKDF، وSHA-2، وCurve25519 من CryptoKit وSecurity.framework، وخوارزميات التشفير الكتلي من CommonCrypto. وحيث لا توفر Apple بدائية، ينفّذها FOLD بنفسه ويتحقق منها بايتًا ببايت مقابل تنفيذات مرجعية: Argon2id وBLAKE2b لوضع Fortress، وAES-OCB من أجل OpenPGP، وPBKDF2 من أجل SCRAM. وتُقارَن وسوم المصادقة وتواقيع خادم SCRAM في زمن ثابت.
OpenPGP: حديث افتراضيًا، والإرث القديم محصور
مبدأ من شقّين. للإنشاء: مفاتيح الإصدار 4 مع توقيعات Ed25519 واتفاق المفاتيح عبر Curve25519 (ECDH)، وAES-256 مع التحقق من السلامة (SEIPD v1 مع MDC)، وSHA-256/512. للقراءة والكتابة إلى مستلمين حاليين: إضافةً إلى ذلك RSA في Security.framework، وعند القراءة أيضًا نمط OCB الخاص بـ GnuPG؛ ولا تُقبل البيانات المشفّرة إلا مع تحقق صالح من السلامة، وإلا تُرفض الرسالة (EFAIL). غير مدعوم بعد: مفاتيح الإصدار 6 والتشفير بنمط AEAD (SEIPD v2) من RFC 9580. مرفوض نهائيًا: CAST5، وIDEA، وBlowfish، و3DES، وتوقيعات MD5 وSHA-1، والبيانات المشفّرة دون حماية للسلامة. وتُحفظ المفاتيح الخاصة بحماية S2K (AES-256) في خزنة ضمن سلسلة المفاتيح مرتبطة بالجهاز. مُختبر مقابل GnuPG الحقيقي.
S/MIME
على macOS عبر واجهات CMS في Security.framework، وعلى iOS عبر تنفيذ CMS محايد للمنصة مبني على SecKey وSecTrust: التوقيع، والتحقق، والتشفير، وفك التشفير. ويمكن استيراد هوية .p12 وشهادات المستلمين (.cer، .pem، .der)، وتُجمع الشهادات من الرسائل الموقّعة التي جرى التحقق منها، ويمر تقييم الثقة عبر SecTrust. والتوقيع الصالح الذي لا يطابق عنوانُ شهادته المرسلَ يُعرض على أنه غير موثوق. وعلى iOS تُجمع شهادات المستلمين من الرسائل الموقّعة التي جرى التحقق منها؛ واستيرادها يدويًا قادم لاحقًا. مُختبر مقابل بيانات اختبار موقّعة عبر openssl.
إعدادات TLS الافتراضية
تحقق صارم من الشهادة واسم المضيف دون أي مسار للتجاوز. وتتبع إصدارات TLS الإعدادات الافتراضية لمنصة Apple. STARTTLS: يتصل FOLD، ويطلب الترقية، ويُلغي الاتصال إذا رفضها الخادم أو فشل فيها؛ والبيانات المخزّنة مؤقتًا قبل الترقية تُعامل على أنها هجوم الرجل في المنتصف وتنهي الاتصال. ويُرفض IMAP وSMTP غير المشفّرين رفضًا قاطعًا. وتثبيت الشهادات (pinning) لكل حساب مخطط له، ولم يتوفر بعد.
المصادقة
لا تُحفظ كلمات المرور ورموز OAuth إلا في سلسلة المفاتيح مع kSecAttrAccessibleWhenUnlockedThisDeviceOnly، ولا تُحفظ أبدًا في UserDefaults أو ملفات plist. ويعمل OAuth عبر ASWebAuthenticationSession مع PKCE إلزامي (S256) بصفته عميلًا عامًا: لا سرّ عميل في الملف التنفيذي، وتُدمج طلبات تجديد الرموز المتزامنة في طلب واحد. ويفضّل SMTP آلية SCRAM-SHA-256 مع التحقق من توقيع الخادم، ثم CRAM-MD5 وPLAIN وLOGIN؛ وتستخدم حسابات OAuth آلية XOAUTH2. واختياريًا، وبعد موافقة منفصلة، يمكن نسخ كلمات مرور IMAP وSMTP عبر سلسلة مفاتيح iCloud المشفّرة من طرف إلى طرف. أما رموز OAuth وأسرار Fortress وPGP فلا تغادر الجهاز أبدًا.
سياسة السجلات
لا بيانات شخصية، ولا محتوى رسائل، ولا أسطر موضوع، ولا عناوين، ولا رموز وصول أو ملفات تعريف ارتباط في السجلات، حتى في بنى التصحيح، ويُفرض ذلك بقواعد lint تُفشل البناء. المسموح به: أحداث الاتصال (المضيف، والمنفذ، وإصدار TLS، وزمن الاستجابة)، وحالة البروتوكول، وفئات الأخطاء. ونافذة النشاط على Mac، بما فيها من خطوات المزامنة ونص جلسة SMTP، تُحفظ في الذاكرة، ولا تتجاوز 300 إدخال، ولا تُكتب على القرص أبدًا.
العزل وHardened Runtime
macOS: App Sandbox وHardened Runtime. الاستحقاقات: اتصالات الشبكة الصادرة، والملفات التي يختارها المستخدم، ومجموعة وصول واحدة إلى سلسلة المفاتيح، وحاوية iCloud للمزامنة الاختيارية؛ أما الاتصالات الواردة فمعطّلة. ولا تجاوز للتحقق من المكتبات. iOS: عزل النظام، ومجموعة سلسلة المفاتيح، وحاوية iCloud، ولا App Groups. ويضيف التنزيل المباشر، غير المتاح للعموم بعد، استثناءً واحدًا فقط كي يتمكن محدِّثه من تثبيت التحديثات. والتوزيع عبر Developer ID على macOS وعبر App Store.
وضع Fortress
تشفير على مستوى التطبيق يُفعَّل اختياريًا لكل حساب. يشتق Argon2id من عبارة مرورك ومن ملح بطول 32 بايت محفوظ في سلسلة المفاتيح (m = 64 MiB, t = 3, p = 4) مفتاحًا رئيسيًا بطول 256 بت لا يوجد إلا في الذاكرة؛ ويحصل كل حساب على مفتاحه الخاص عبر HKDF-SHA-256. ويختم AES-256-GCM أعمدة النص في قاعدة بيانات الرؤوس وذاكرة الرسائل المؤقتة؛ والبحث في النص الكامل محدود لحسابات Fortress. ويمسح القفل التلقائي المفتاح بعد فترة من عدم النشاط، وكذلك عند انتقال التطبيق إلى الخلفية إذا كان قفل التطبيق مفعّلًا. وArgon2id وBLAKE2b تنفيذان خاصان بنا، جرى التحقق منهما مقابل RFC 9106 والأداة المرجعية.
ما لا يقدّمه Fortress
ليس بديلًا عن OpenPGP أو S/MIME: فهذان يحميان البريد أثناء النقل، بينما يحمي Fortress النسخة المحلية. ولا يحمي من نواة أو نظام تشغيل مخترقَين. وليس وضعًا لإخفاء الهوية: فبيانات IMAP الوصفية لا تزال تكشف للخادم من تراسل.
نموذج التهديدات
الدفاعات مُسقطة على MITRE ATT&CK (26 تقنية) وMITRE D3FEND. ولكل تقنية يُسمّى إجراء التخفيف في FOLD؛ وفي معالجة المدخلات والعرض (مرفقات التصيّد الموجّه، وقنابل MIME، والملفات متعددة الصيغ، والتسريب على طريقة EFAIL) يُسمّى أيضًا الاختبار الذي يغطيها.
استراتيجية الاختبار
التزامن الصارم في Swift 6 وExistentialAny عند الترجمة. أكثر من 3,000 اختبار آلي حتى 2026-09-22. وتعمل أدوات Address وThread وUndefined Behavior Sanitizer بوصفها بوابات إصدار محلية قبل كل push وكل إصدار؛ ولا يوجد CI مستضاف، وهذا قرار مقصود. وتعيد مجموعة اختبارات انحدار تشغيل ثغرات CVE تاريخية في برامج البريد (EFAIL، وBadWinmail، وتجاوزات سعة الكومة في iOS Mail). وتغطي خمسة أهداف libFuzzer كلًّا من MIME، والكلمات المرمّزة، والعناوين، وكتل الرؤوس، وCMS، ويعيد كل تشغيل للاختبارات تشغيل مجموعة المدخلات (corpus) مع 3,000 طفرة.
الإفصاح المنسّق
وجدت ثغرة؟ اكتب إلى [email protected]. نؤكد الاستلام خلال 72 ساعة، ونُصدر الإصلاحات مع ذكر اسمك. مفتاح PGP عند الطلب؛ وعنوان التواصل منشور أيضًا في /.well-known/security.txt (RFC 9116).