En comparación
Solo comparamos FOLD en propiedades verificables y enlazamos una fuente por columna. Las columnas de la competencia reflejan la situación de junio de 2026; si un fabricante cambia algo, esta tabla cambia con él.
| Propiedad | FOLD | Apple Mail | Mimestream | Spark | Thunderbird | Outlook (nuevo) |
|---|---|---|---|---|---|---|
| Sin backend adicional en la nube | Sí | Sí | Sí directo a Gmail | No nube de Readdle | Sí | No nube de MS |
| App Sandbox activo | Sí | Sí | Sí | Sí | Limitado la instalación estándar no usa sandbox | Sí |
| OpenPGP nativo | Sí Ed25519, Curve25519 + RSA | No | No | No | Sí | No |
| S/MIME nativo | Sí | Sí | No | No | Sí | Sí |
| DKIM verificado en el cliente | Sí | No | No | No | Complemento fuera del núcleo | No |
| Cualquier proveedor IMAP | Sí | Sí | No solo Gmail | Sí | Sí | Limitado obligatoriamente a través de la nube de MS |
| Código abierto | No | No | No | No | Sí MPL 2.0 | No |
Fuentes: Apple Platform Security · Cuentas compatibles con Mimestream · La privacidad en Spark, explicada · Thunderbird · Sincronización en la nube del nuevo Outlook (Cybernews, 2023).
La fila DKIM se refiere a una verificación independiente en el cliente (recalcular el hash del cuerpo y la firma), no a la mera visualización del encabezado Authentication-Results del servidor. Datos de junio de 2026.
Política de dependencias
Una dependencia de terceros solo se acepta si se cumplen los cuatro criterios: aporta una primitiva que no podemos construir correctamente nosotros mismos · procede de una fuente fiable · es auditable · figura en la tabla de abajo.
El motor y la interfaz solo usan frameworks del sistema de Apple. La descarga directa añade un actualizador a la capa exterior de la app.
| Permitidas | |
|---|---|
Foundation | SDK de Apple. Los flujos con TLS transportan IMAP y SMTP, incluido STARTTLS en la conexión activa. |
CryptoKit | Ed25519, X25519, AES-GCM, SHA-2, HKDF. |
Security | Llavero, SecTrust, RSA, CMS para S/MIME en macOS. |
CommonCrypto | Cifrado por bloques AES para los modos OCB y CFB. |
AuthenticationServices | ASWebAuthenticationSession para OAuth. |
SQLite3 | SQLite del sistema mediante un envoltorio fino en Swift. Sin GRDB, sin SQLite.swift. |
WebKit | Renderizado de correo reforzado, con JavaScript desactivado y una política de contenido estricta. |
os.Logger | SDK de Apple. |
| Sparkle | Solo en la descarga directa, en la capa exterior de la app: actualizaciones firmadas. No forma parte del motor ni de la interfaz. |
| Excluidas | |
|---|---|
swift-crypto | Gemelo multiplataforma de CryptoKit, innecesario en las plataformas de Apple. |
libetpan, MailCore | Envoltorios en C; queremos Swift auditable. |
| Bibliotecas OpenPGP | Implementación propia que prioriza lo moderno, en lugar de una gran superficie heredada. |
SwiftData, CoreData | No está pensado para 500.000 mensajes por buzón; en su lugar, SQLite directamente. |
| Paquetes de terceros para JSON, registro y red | Con Foundation y os basta. |
Estrategia criptográfica
La criptografía asimétrica, AES-GCM, HKDF, SHA-2 y Curve25519 proceden de CryptoKit y Security.framework; los cifrados por bloques, de CommonCrypto. Donde Apple no ofrece una primitiva, FOLD la implementa y la verifica byte a byte frente a implementaciones de referencia: Argon2id y BLAKE2b para el modo Fortress, AES-OCB para OpenPGP, PBKDF2 para SCRAM. Las etiquetas de autenticación y las firmas de servidor de SCRAM se comparan en tiempo constante.
OpenPGP: moderno por defecto, legado acotado
Doctrina en dos partes. Para generar: claves de versión 4 con firmas Ed25519 y acuerdo de claves Curve25519 (ECDH), AES-256 con comprobación de integridad (SEIPD v1 con MDC), SHA-256/512. Para leer y para escribir a destinatarios existentes: además RSA en Security.framework y, para leer, el modo OCB de GnuPG; los datos cifrados solo se aceptan con una comprobación de integridad válida y, si no, el mensaje se rechaza (EFAIL). Todavía no se admiten: claves de versión 6 ni cifrado AEAD (SEIPD v2) del RFC 9580. Rechazados de forma permanente: CAST5, IDEA, Blowfish, 3DES, las firmas MD5 y SHA-1, y los datos cifrados sin protección de integridad. Las claves privadas se guardan protegidas con S2K (AES-256) en una bóveda del llavero vinculada al dispositivo. Comprobado con GnuPG real.
S/MIME
En macOS, mediante las interfaces CMS de Security.framework; en iOS, mediante una implementación CMS independiente de la plataforma sobre SecKey y SecTrust: firmar, verificar, cifrar y descifrar. Se pueden importar una identidad .p12 y certificados de destinatario (.cer, .pem, .der), se recopilan los certificados del correo firmado verificado y la confianza se evalúa con SecTrust. Una firma válida cuya dirección de certificado no coincide con el remitente se muestra como no fiable. En iOS, los certificados de destinatario se recopilan del correo firmado verificado; la importación manual llegará más adelante. Comprobado con datos de prueba firmados con openssl.
TLS por defecto
Validación estricta del certificado y del nombre de host, sin forma de omitirla. Las versiones de TLS siguen los valores predeterminados de la plataforma de Apple. STARTTLS: FOLD se conecta, solicita el paso a TLS y aborta si el servidor lo rechaza o falla; los bytes almacenados en búfer antes del paso a TLS se tratan como un ataque de intermediario y cierran la conexión. IMAP y SMTP sin cifrar se rechazan sin excepción. La fijación de certificados (pinning) por cuenta está planificada, pero aún no está disponible.
Autenticación
Las contraseñas y los tokens OAuth solo se guardan en el llavero con kSecAttrAccessibleWhenUnlockedThisDeviceOnly, nunca en UserDefaults ni en archivos plist. OAuth funciona mediante ASWebAuthenticationSession con PKCE (S256) obligatorio como cliente público: sin secreto de cliente en el binario, y las renovaciones de tokens simultáneas se agrupan. SMTP prefiere SCRAM-SHA-256 con comprobación de la firma del servidor, y después CRAM-MD5, PLAIN y LOGIN; las cuentas OAuth usan XOAUTH2. De forma opcional, y con un consentimiento aparte, las contraseñas IMAP y SMTP pueden replicarse a través del Llavero de iCloud, cifrado de extremo a extremo. Los tokens OAuth y los secretos de Fortress y PGP nunca salen del dispositivo.
Política de registros
Sin datos personales, contenido de mensajes, asuntos, direcciones, tokens ni cookies en los registros, tampoco en las compilaciones de depuración; lo imponen reglas de lint que hacen fallar la compilación. Permitido: eventos de conexión (host, puerto, versión de TLS, latencia), estado del protocolo, categorías de error. La ventana de actividad en Mac, con los pasos de sincronización y la transcripción SMTP, se mantiene en memoria, está limitada a 300 entradas y nunca se escribe en disco.
Sandbox y Hardened Runtime
macOS: App Sandbox y Hardened Runtime. Permisos: conexiones de red salientes, archivos elegidos por el usuario, un grupo de acceso al llavero y el contenedor de iCloud para la sincronización opcional; las conexiones entrantes están desactivadas. Sin excepción a la validación de bibliotecas. iOS: sandbox del sistema, grupo de llavero y contenedor de iCloud, sin App Groups. La descarga directa, aún no pública, añade una única excepción para que su actualizador pueda instalar actualizaciones. Distribución mediante Developer ID en macOS y a través del App Store.
Modo Fortress
Cifrado a nivel de aplicación que se activa por cuenta. Argon2id sobre tu frase de contraseña y una sal de 32 bytes guardada en el llavero (m = 64 MiB, t = 3, p = 4) deriva una clave maestra de 256 bits que solo vive en memoria; cada cuenta obtiene su propia clave mediante HKDF-SHA-256. AES-256-GCM sella las columnas de texto de la base de datos de encabezados y la caché de mensajes; la búsqueda de texto completo es limitada en las cuentas Fortress. El bloqueo automático borra la clave tras un periodo de inactividad y, si el bloqueo de la app está activado, cuando la app pasa a segundo plano. Argon2id y BLAKE2b son implementaciones propias, verificadas con el RFC 9106 y la herramienta de referencia.
Lo que Fortress no es
No sustituye a OpenPGP ni a S/MIME: estos protegen el correo en tránsito, Fortress protege la copia local. No defiende frente a un kernel o un sistema operativo comprometidos. No es un modo de anonimato: los metadatos IMAP siguen revelando al servidor con quién te escribes.
Modelo de amenazas
Las defensas están mapeadas frente a MITRE ATT&CK (26 técnicas) y MITRE D3FEND. Para cada técnica se indica la mitigación de FOLD; para el manejo de entradas y el renderizado (adjuntos de spear phishing, bombas MIME, archivos políglotas, exfiltración al estilo EFAIL), también la prueba que la cubre.
Estrategia de pruebas
Concurrencia estricta de Swift 6 y ExistentialAny en tiempo de compilación. Más de 3000 pruebas automatizadas según el recuento del 22 de septiembre de 2026. Los sanitizers Address, Thread y Undefined Behavior se ejecutan como controles locales de publicación antes de cada push y de cada lanzamiento; no hay CI alojada, por decisión propia. Una batería de regresión reproduce CVE históricas de clientes de correo (EFAIL, BadWinmail, desbordamientos de heap en iOS Mail). Cinco objetivos de libFuzzer cubren MIME, palabras codificadas, direcciones, bloques de encabezado y CMS, y cada ejecución de pruebas reproduce el corpus con 3000 mutaciones.
Divulgación coordinada
¿Has encontrado un fallo? Escribe a [email protected]. Confirmamos la recepción en un plazo de 72 horas y publicamos las correcciones reconociendo tu aportación. Clave PGP bajo solicitud; el contacto también figura en /.well-known/security.txt (RFC 9116).