FOLD
Dossiê de segurança

Segurança, de dentro para fora.

A versão legível dos nossos documentos internos de segurança, verificada contra o código em 2026-09-22. Quando uma propriedade está planejada e ainda não foi entregue, esta página diz isso.

Em comparação

Comparamos o FOLD apenas em propriedades verificáveis e indicamos uma fonte por coluna. Colunas dos concorrentes com dados de junho de 2026; se um fornecedor mudar algo, esta tabela muda junto.

PropriedadeFOLDApple MailMimestreamSparkThunderbirdOutlook (novo)
Sem backend de nuvem adicionalSimSimSim direto com o GmailNão nuvem da ReaddleSimNão nuvem da MS
App Sandbox ativoSimSimSimSimLimitado a instalação padrão não usa sandboxSim
OpenPGP nativoSim Ed25519, Curve25519 + RSANãoNãoNãoSimNão
S/MIME nativoSimSimNãoNãoSimSim
DKIM verificado no clienteSimNãoNãoNãoComplemento fora do núcleoNão
Qualquer provedor IMAPSimSimNão somente GmailSimSimLimitado obrigatoriamente pela nuvem da MS
Código abertoNãoNãoNãoNãoSim MPL 2.0Não

Fontes: Apple Platform Security · Contas suportadas pelo Mimestream · Privacidade no Spark explicada · Thunderbird · Sincronização em nuvem do novo Outlook (Cybernews, 2023).

A linha DKIM se refere à verificação independente no cliente (recálculo do hash do corpo e da assinatura), não apenas à exibição do cabeçalho Authentication-Results do servidor. Situação em 06/2026.

Política de dependências

Uma dependência de terceiros só é aceita quando os quatro critérios são atendidos: ela fornece uma primitiva que não conseguimos construir corretamente por conta própria · vem de uma fonte confiável · é auditável · consta na tabela abaixo.

O motor e a interface usam apenas frameworks do sistema da Apple. O download direto acrescenta um atualizador ao shell do app.

Permitidas
FoundationSDK da Apple. Streams com TLS transportam IMAP e SMTP, incluindo STARTTLS na conexão ativa.
CryptoKitEd25519, X25519, AES-GCM, SHA-2, HKDF.
SecurityChaves, SecTrust, RSA, CMS para S/MIME no macOS.
CommonCryptoCifra de bloco AES para os modos OCB e CFB.
AuthenticationServicesASWebAuthenticationSession para OAuth.
SQLite3SQLite do sistema por meio de um wrapper Swift fino. Sem GRDB, sem SQLite.swift.
WebKitRenderização de e-mail reforçada, com JavaScript desativado e uma política de conteúdo rígida.
os.LoggerSDK da Apple.
SparkleSomente no download direto, no shell do app: atualizações assinadas. Não faz parte do motor nem da interface.
Excluídas
swift-cryptoEquivalente multiplataforma do CryptoKit, desnecessário nas plataformas Apple.
libetpan, MailCoreWrappers em C; queremos Swift auditável.
Bibliotecas OpenPGPImplementação própria, moderna em primeiro lugar, em vez de uma grande superfície legada.
SwiftData, CoreDataNão foi feito para 500.000 mensagens por caixa de correio; em vez disso, SQLite direto.
JSON, logging e rede de terceirosFoundation e os bastam.

Estratégia criptográfica

Criptografia assimétrica, AES-GCM, HKDF, SHA-2 e Curve25519 vêm do CryptoKit e do Security.framework; as cifras de bloco, do CommonCrypto. Onde a Apple não oferece uma primitiva, o FOLD a implementa e a verifica byte a byte contra implementações de referência: Argon2id e BLAKE2b para o Modo Fortress, AES-OCB para OpenPGP, PBKDF2 para SCRAM. Tags de autenticação e assinaturas de servidor SCRAM são comparadas em tempo constante.

OpenPGP: moderno por padrão, legado sob controle

Doutrina em duas partes. Para produzir: chaves da versão 4 com assinaturas Ed25519 e acordo de chaves Curve25519 (ECDH), AES-256 com verificação de integridade (SEIPD v1 com MDC), SHA-256/512. Para ler e escrever para destinatários existentes: adicionalmente RSA no Security.framework e, na leitura, o modo OCB do GnuPG; dados criptografados só são aceitos com verificação de integridade válida; caso contrário, a mensagem é rejeitada (EFAIL). Ainda não suportados: chaves da versão 6 e criptografia AEAD (SEIPD v2) da RFC 9580. Rejeitados permanentemente: CAST5, IDEA, Blowfish, 3DES, assinaturas MD5 e SHA-1, e dados criptografados sem proteção de integridade. As chaves privadas ficam protegidas por S2K (AES-256) em um cofre nas Chaves vinculado ao dispositivo. Verificado com o GnuPG real.

S/MIME

No macOS, pelas interfaces CMS do Security.framework; no iOS, por uma implementação CMS independente de plataforma sobre SecKey e SecTrust: assinar, verificar, criptografar e descriptografar. É possível importar uma identidade .p12 e certificados de destinatários (.cer, .pem, .der); certificados de e-mails assinados verificados são coletados, e a confiança é avaliada pelo SecTrust. Uma assinatura válida cujo endereço no certificado não corresponde ao remetente é exibida como não confiável. No iOS, os certificados dos destinatários são coletados de e-mails assinados verificados; a importação manual virá depois. Verificado com dados de teste assinados com openssl.

Configurações padrão de TLS

Validação rigorosa de certificado e nome de host, sem nenhum caminho para contorná-la. As versões de TLS seguem os padrões da plataforma Apple. STARTTLS: o FOLD se conecta, solicita o upgrade e aborta se o servidor recusar ou falhar; bytes armazenados em buffer antes do upgrade são tratados como um ataque man-in-the-middle e encerram a conexão. IMAP e SMTP sem criptografia são recusados de imediato. O pinning de certificado por conta está planejado, mas ainda não está disponível.

Autenticação

Senhas e tokens OAuth ficam apenas nas Chaves, com kSecAttrAccessibleWhenUnlockedThisDeviceOnly, nunca em UserDefaults ou plists. O OAuth usa ASWebAuthenticationSession com PKCE obrigatório (S256) como cliente público: nenhum segredo de cliente no binário, e renovações simultâneas de token são unificadas. O SMTP prefere SCRAM-SHA-256 com verificação da assinatura do servidor, depois CRAM-MD5, PLAIN e LOGIN; contas OAuth usam XOAUTH2. Opcionalmente, após um consentimento separado, as senhas de IMAP e SMTP podem ser espelhadas pelas Chaves do iCloud, com criptografia de ponta a ponta. Tokens OAuth e segredos do Fortress e do PGP nunca saem do dispositivo.

Política de logs

Nenhum dado pessoal, conteúdo de mensagem, assunto, endereço, token ou cookie nos logs, também em builds de depuração, o que é garantido por regras de lint que fazem o build falhar. Permitido: eventos de conexão (host, porta, versão de TLS, latência), estado do protocolo, categorias de erro. A janela de atividade no Mac, com as etapas de sincronização e a transcrição SMTP, fica na memória, é limitada a 300 entradas e nunca é gravada em disco.

Sandbox e Hardened Runtime

macOS: App Sandbox e Hardened Runtime. Permissões: conexões de rede de saída, arquivos selecionados pelo usuário, um grupo de acesso às Chaves e o contêiner do iCloud para a sincronização opcional; conexões de entrada estão desativadas. Nenhum desvio da validação de bibliotecas. iOS: sandbox do sistema, grupo das Chaves e contêiner do iCloud, sem App Groups. O download direto, ainda não público, acrescenta uma única exceção para que seu atualizador possa instalar atualizações. Distribuição via Developer ID no macOS e pela App Store.

Modo Fortress

Criptografia no nível do app, ativada opcionalmente por conta. O Argon2id aplicado à sua frase secreta e a um sal de 32 bytes guardado nas Chaves (m = 64 MiB, t = 3, p = 4) deriva uma chave mestra de 256 bits que existe apenas na memória; cada conta recebe sua própria chave via HKDF-SHA-256. O AES-256-GCM sela as colunas de texto do banco de dados de cabeçalhos e o cache de mensagens; a busca de texto completo é limitada para contas Fortress. O bloqueio automático apaga a chave após um período de inatividade e, se o bloqueio do app estiver ativado, quando o app vai para segundo plano. Argon2id e BLAKE2b são implementações próprias, verificadas com a RFC 9106 e com a ferramenta de referência.

O que o Fortress não é

Não substitui OpenPGP nem S/MIME: esses protegem o e-mail em trânsito, o Fortress protege a cópia local. Não protege contra um kernel ou sistema operacional comprometido. Não é um modo de anonimização: os metadados IMAP continuam revelando ao servidor com quem você se corresponde.

Modelo de ameaças

As defesas são mapeadas em relação ao MITRE ATT&CK (26 técnicas) e ao MITRE D3FEND. Para cada técnica, a mitigação do FOLD é indicada; para o tratamento de entradas e a renderização (anexos de spear-phishing, bombas MIME, arquivos poliglotas, exfiltração no estilo EFAIL), também o teste que a cobre.

Estratégia de testes

Concorrência estrita do Swift 6 e ExistentialAny em tempo de compilação. Mais de 3.000 testes automatizados em 2026-09-22. Os sanitizers Address, Thread e Undefined Behavior rodam como verificações locais de liberação antes de cada push e de cada release; por decisão, não há CI hospedada. Uma suíte de regressão reproduz CVEs históricas de clientes de e-mail (EFAIL, BadWinmail, estouros de heap no iOS Mail). Cinco alvos libFuzzer cobrem MIME, palavras codificadas, endereços, blocos de cabeçalho e CMS, e cada execução de testes reproduz o corpus com 3.000 mutações.

Divulgação coordenada

Encontrou uma falha? Escreva para [email protected]. Confirmamos em até 72 horas e publicamos as correções com crédito. Chave PGP mediante solicitação; o contato também está publicado em /.well-known/security.txt (RFC 9116).

[email protected]