FOLD
Dosier de seguridad

Seguridad, de dentro hacia fuera.

La versión legible de nuestros documentos internos de seguridad, cotejada con el código el 22 de septiembre de 2026. Cuando una propiedad está planificada y aún no se ha publicado, esta página lo dice.

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.

PropiedadFOLDApple MailMimestreamSparkThunderbirdOutlook (nuevo)
Sin backend adicional en la nubedirecto a GmailNo nube de ReaddleNo nube de MS
App Sandbox activoLimitado la instalación estándar no usa sandbox
OpenPGP nativoEd25519, Curve25519 + RSANoNoNoNo
S/MIME nativoNoNo
DKIM verificado en el clienteNoNoNoComplemento fuera del núcleoNo
Cualquier proveedor IMAPNo solo GmailLimitado obligatoriamente a través de la nube de MS
Código abiertoNoNoNoNoMPL 2.0No

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
FoundationSDK de Apple. Los flujos con TLS transportan IMAP y SMTP, incluido STARTTLS en la conexión activa.
CryptoKitEd25519, X25519, AES-GCM, SHA-2, HKDF.
SecurityLlavero, SecTrust, RSA, CMS para S/MIME en macOS.
CommonCryptoCifrado por bloques AES para los modos OCB y CFB.
AuthenticationServicesASWebAuthenticationSession para OAuth.
SQLite3SQLite del sistema mediante un envoltorio fino en Swift. Sin GRDB, sin SQLite.swift.
WebKitRenderizado de correo reforzado, con JavaScript desactivado y una política de contenido estricta.
os.LoggerSDK de Apple.
SparkleSolo en la descarga directa, en la capa exterior de la app: actualizaciones firmadas. No forma parte del motor ni de la interfaz.
Excluidas
swift-cryptoGemelo multiplataforma de CryptoKit, innecesario en las plataformas de Apple.
libetpan, MailCoreEnvoltorios en C; queremos Swift auditable.
Bibliotecas OpenPGPImplementación propia que prioriza lo moderno, en lugar de una gran superficie heredada.
SwiftData, CoreDataNo está pensado para 500.000 mensajes por buzón; en su lugar, SQLite directamente.
Paquetes de terceros para JSON, registro y redCon 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).

[email protected]