Comparaison
Nous ne comparons FOLD que sur des propriétés vérifiables, et nous citons une source par colonne. Colonnes des concurrents : état de juin 2026 ; si un éditeur change quelque chose, ce tableau change avec lui.
| Propriété | FOLD | Apple Mail | Mimestream | Spark | Thunderbird | Outlook (nouveau) |
|---|---|---|---|---|---|---|
| Pas de backend cloud supplémentaire | Oui | Oui | Oui directement vers Gmail | Non cloud Readdle | Oui | Non cloud MS |
| App Sandbox active | Oui | Oui | Oui | Oui | Limité l’installation standard n’est pas sandboxée | Oui |
| OpenPGP natif | Oui Ed25519, Curve25519 + RSA | Non | Non | Non | Oui | Non |
| S/MIME natif | Oui | Oui | Non | Non | Oui | Oui |
| DKIM vérifié dans le client | Oui | Non | Non | Non | Extension hors du cœur | Non |
| Tout fournisseur IMAP | Oui | Oui | Non Gmail uniquement | Oui | Oui | Limité imposé via le cloud MS |
| Open source | Non | Non | Non | Non | Oui MPL 2.0 | Non |
Sources : Apple Platform Security · Comptes pris en charge par Mimestream · Spark : la confidentialité expliquée · Thunderbird · Synchronisation cloud du nouvel Outlook (Cybernews, 2023).
La ligne DKIM désigne une vérification indépendante côté client (recalcul du hachage du corps et de la signature), et non le simple affichage de l’en-tête Authentication-Results du serveur. État : 06/2026.
Politique de dépendances
Une dépendance tierce n’est acceptée que si les quatre critères sont réunis : elle fournit une primitive que nous ne pouvons pas construire correctement nous-mêmes · elle provient d’une source digne de confiance · elle est auditable · elle figure dans le tableau ci-dessous.
Le moteur et l’interface n’utilisent que les frameworks système d’Apple. Le téléchargement direct ajoute un outil de mise à jour à l’enveloppe de l’app.
| Autorisées | |
|---|---|
Foundation | SDK Apple. Des flux avec TLS portent IMAP et SMTP, y compris STARTTLS sur la connexion active. |
CryptoKit | Ed25519, X25519, AES-GCM, SHA-2, HKDF. |
Security | Trousseau, SecTrust, RSA, CMS pour S/MIME sur macOS. |
CommonCrypto | Chiffrement par bloc AES pour les modes OCB et CFB. |
AuthenticationServices | ASWebAuthenticationSession pour OAuth. |
SQLite3 | SQLite du système via une fine couche Swift. Ni GRDB, ni SQLite.swift. |
WebKit | Rendu des messages durci, JavaScript désactivé et politique de contenu stricte. |
os.Logger | SDK Apple. |
| Sparkle | Téléchargement direct uniquement, dans l’enveloppe de l’app : mises à jour signées. Ne fait partie ni du moteur ni de l’interface. |
| Exclues | |
|---|---|
swift-crypto | Jumeau multiplateforme de CryptoKit, inutile sur les plateformes Apple. |
libetpan, MailCore | Surcouches C ; nous voulons du Swift auditable. |
| Bibliothèques OpenPGP | Notre propre implémentation, moderne d’abord, plutôt qu’une vaste surface héritée. |
SwiftData, CoreData | Pas conçu pour 500 000 messages par boîte aux lettres ; SQLite en direct à la place. |
| Paquets tiers JSON, journalisation, réseau | Foundation et os suffisent. |
Stratégie cryptographique
La cryptographie asymétrique, AES-GCM, HKDF, SHA-2 et Curve25519 proviennent de CryptoKit et de Security.framework, les chiffrements par bloc de CommonCrypto. Là où Apple ne propose pas de primitive, FOLD l’implémente et la vérifie octet par octet par rapport à des implémentations de référence : Argon2id et BLAKE2b pour le mode Fortress, AES-OCB pour OpenPGP, PBKDF2 pour SCRAM. Les tags d’authentification et les signatures serveur SCRAM sont comparés en temps constant.
OpenPGP : moderne par défaut, l’héritage sous contrôle
Une doctrine en deux volets. Pour produire : clés de version 4 avec signatures Ed25519 et accord de clés Curve25519 (ECDH), AES-256 avec contrôle d’intégrité (SEIPD v1 avec MDC), SHA-256/512. Pour lire, et pour écrire à des destinataires existants : en plus, RSA dans Security.framework et, en lecture, le mode OCB de GnuPG ; les données chiffrées ne sont acceptées qu’avec un contrôle d’intégrité valide, sinon le message est rejeté (EFAIL). Pas encore pris en charge : les clés de version 6 et le chiffrement AEAD (SEIPD v2) de la RFC 9580. Rejetés définitivement : CAST5, IDEA, Blowfish, 3DES, les signatures MD5 et SHA-1, et les données chiffrées sans protection d’intégrité. Les clés privées sont conservées, protégées par S2K (AES-256), dans un coffre du trousseau lié à l’appareil. Vérifié face au vrai GnuPG.
S/MIME
Sur macOS via les interfaces CMS de Security.framework, sur iOS via une implémentation CMS indépendante de la plateforme, bâtie sur SecKey et SecTrust : signer, vérifier, chiffrer et déchiffrer. Une identité .p12 et des certificats de destinataires (.cer, .pem, .der) peuvent être importés, les certificats issus de messages signés vérifiés sont collectés, la confiance passe par SecTrust. Une signature valide dont l’adresse du certificat ne correspond pas à l’expéditeur est affichée comme non fiable. Sur iOS, les certificats des destinataires sont collectés à partir de messages signés vérifiés ; leur import manuel suivra. Vérifié face à des données de test signées avec openssl.
Paramètres TLS par défaut
Validation stricte du certificat et du nom d’hôte, sans aucun moyen de contournement. Les versions de TLS suivent les valeurs par défaut de la plateforme Apple. STARTTLS : FOLD se connecte, demande la mise à niveau et abandonne si le serveur refuse ou échoue ; des octets mis en mémoire tampon avant la mise à niveau sont traités comme un homme du milieu et mettent fin à la connexion. IMAP et SMTP non chiffrés sont refusés d’emblée. L’épinglage de certificat par compte est prévu, mais pas encore disponible.
Authentification
Les mots de passe et les jetons OAuth résident uniquement dans le trousseau avec kSecAttrAccessibleWhenUnlockedThisDeviceOnly, jamais dans UserDefaults ni dans des plists. OAuth passe par ASWebAuthenticationSession avec PKCE (S256) obligatoire, en tant que client public : aucun secret client dans le binaire, les renouvellements de jetons simultanés sont regroupés. SMTP privilégie SCRAM-SHA-256 avec vérification de la signature du serveur, puis CRAM-MD5, PLAIN et LOGIN ; les comptes OAuth utilisent XOAUTH2. En option, après un consentement distinct, les mots de passe IMAP et SMTP peuvent être répliqués via le trousseau iCloud, chiffré de bout en bout. Les jetons OAuth ainsi que les secrets Fortress et PGP ne quittent jamais l’appareil.
Politique de journalisation
Aucune donnée personnelle, aucun contenu de message, objet, adresse, jeton ni cookie dans les journaux, y compris dans les builds de débogage, ce qu’imposent des règles de lint qui font échouer le build. Autorisés : événements de connexion (hôte, port, version TLS, latence), état du protocole, catégories d’erreurs. Sur le Mac, la fenêtre d’activité, avec les étapes de synchronisation et la transcription SMTP, est conservée en mémoire, plafonnée à 300 entrées et jamais écrite sur le disque.
Sandbox et Hardened Runtime
macOS : App Sandbox et Hardened Runtime. Droits : connexions réseau sortantes, fichiers sélectionnés par l’utilisateur, un groupe d’accès au trousseau et le conteneur iCloud pour la synchronisation facultative ; les connexions entrantes sont désactivées. Aucun contournement de la validation des bibliothèques. iOS : sandbox du système, groupe de trousseau et conteneur iCloud, pas d’App Groups. Le téléchargement direct, pas encore public, ajoute une seule exception pour que son outil de mise à jour puisse installer les mises à jour. Distribution via Developer ID sur macOS et via l’App Store.
Mode Fortress
Chiffrement au niveau de l’application, activable par compte. Argon2id, appliqué à votre phrase secrète et à un sel de 32 octets conservé dans le trousseau (m = 64 Mio, t = 3, p = 4), dérive une clé maîtresse de 256 bits qui ne vit qu’en mémoire ; chaque compte reçoit sa propre clé via HKDF-SHA-256. AES-256-GCM scelle les colonnes de texte de la base des en-têtes et le cache des messages ; la recherche plein texte est limitée pour les comptes Fortress. Le verrouillage automatique efface la clé après une période d’inactivité, ainsi que lors du passage de l’app en arrière-plan si le verrouillage de l’app est activé. Argon2id et BLAKE2b sont nos propres implémentations, vérifiées par rapport à la RFC 9106 et à l’outil de référence.
Ce que Fortress n’est pas
Pas un substitut à OpenPGP ou S/MIME : ceux-ci protègent les messages en transit, Fortress protège la copie locale. Aucune défense contre un noyau ou un système d’exploitation compromis. Pas un mode d’anonymisation : les métadonnées IMAP indiquent toujours au serveur avec qui vous correspondez.
Modèle de menaces
Les défenses sont mises en correspondance avec MITRE ATT&CK (26 techniques) et MITRE D3FEND. Pour chaque technique, la parade de FOLD est nommée ; pour le traitement des entrées et le rendu (pièces jointes d’hameçonnage ciblé, bombes MIME, fichiers polyglottes, exfiltration de type EFAIL), le test qui la couvre l’est aussi.
Stratégie de test
Concurrence stricte de Swift 6 et ExistentialAny dès la compilation. Plus de 3 000 tests automatisés au 22 septembre 2026. Les sanitizers Address, Thread et Undefined Behavior servent de points de contrôle locaux avant chaque push et chaque publication ; il n’y a pas de CI hébergée, par choix. Une suite de régression rejoue des CVE historiques de clients de messagerie (EFAIL, BadWinmail, dépassements de tas dans iOS Mail). Cinq cibles libFuzzer couvrent MIME, les mots encodés, les adresses, les blocs d’en-têtes et CMS, et chaque exécution des tests rejoue le corpus avec 3 000 mutations.
Divulgation coordonnée
Vous avez trouvé une faille ? Écrivez à [email protected]. Nous accusons réception sous 72 heures et publions les correctifs en vous créditant. Clé PGP sur demande ; le contact figure aussi dans /.well-known/security.txt (RFC 9116).