Classes de Proteção de Dados
Quando um novo arquivo é criado em um dispositivo compatível com a Proteção de Dados, o app que o criou atribui uma classe ao arquivo. Cada classe usa políticas diferentes para determinar quando os dados podem ser acessados. As classes e políticas básicas são descritas nas seções a seguir. Computadores Mac baseados em Apple Silicon não são compatíveis com Classe D: Sem Proteção e um limite de segurança é estabelecido ao redor do início e término da sessão (e não ao bloquear ou desbloquear, como no iPhone e iPad).
Classe | Tipo de proteção |
---|---|
Classe A: Proteção Completa | NSFileProtectionComplete |
Classe B: Protegido Exceto se Aberto | NSFileProtectionCompleteUnlessOpen |
Classe C: Protegido Até a Primeira Autenticação do Usuário Nota: o macOS usa uma chave de volume para recriar as características de proteção do FileVault. | NSFileProtectionCompleteUntilFirstUserAuthentication |
Classe D: Sem Proteção Nota: incompatível com o macOS. | NSFileProtectionNone |
Proteção Completa
NSFileProtectionComplete: a chave de classe é protegida por uma chave derivada do código ou senha do usuário e do UID do dispositivo. Logo depois do usuário bloquear um dispositivo (10 segundos, se o ajuste em Exigir Senha for Imediatamente), a chave de classe descriptografada é descartada, deixando todos os dados nesta classe inacessíveis até que o usuário digite o código novamente ou use o Face ID ou Touch ID para desbloquear (iniciar a sessão) no dispositivo.
No macOS, logo depois que o último usuário finaliza a sessão, a chave de classe descriptografada é descartada, deixando todos os dados nesta classe inacessíveis até que um usuário digite o código novamente ou use o Touch ID para iniciar a sessão no dispositivo.
Protegido Exceto se Aberto
NSFileProtectionCompleteUnlessOpen: talvez seja necessário gravar alguns arquivos enquanto o dispositivo estiver bloqueado ou o usuário não tiver uma sessão iniciada. Um bom exemplo disso é o download em segundo plano de um anexo de e-mail. Esse comportamento é executado através do uso da criptografia assimétrica de curva elíptica (ECDH sobre Curve25519). A chave única por arquivo habitual é protegida por uma chave derivada que usa o Acordo de Chaves Diffie-Hellman de Um Passo, como descrito no NIST SP 800-56A.
A chave pública transitória do Acordo é armazenada em conjunto com a chave única por arquivo embalada. A KDF é a Função de Derivação da Chave de Concatenação (Alternativa Aprovada 1), como descrita em 5.8.1 do NIST SP 800-56A. O AlgorithmID é omitido. PartyUInfo é uma chave pública transitória e PartyVInfo é uma chave pública estática. SHA256 é usado como a função de hash. Assim que o arquivo é fechado, a chave única por arquivo é apagada da memória. Para abri-lo novamente, o segredo compartilhado é recriado usando a chave privada da classe Protegido Exceto se Aberto e a chave pública transitória do arquivo, que são usadas para desembalar a chave única por arquivo, que por sua vez, é usada para descriptografar o arquivo.
No macOS, a parte privada de NSFileProtectionCompleteUnlessOpen é acessível desde que qualquer usuário no sistema tenha uma sessão iniciada ou esteja autenticado.
Protegido Até a Primeira Autenticação do Usuário
NSFileProtectionCompleteUntilFirstUserAuthentication: essa classe se comporta da mesma maneira que a Proteção Completa, exceto pelo fato de que a chave de classe descriptografada não é removida da memória quando o dispositivo é bloqueado ou o usuário finaliza a sessão. A proteção desta classe tem propriedades semelhantes à criptografia de volume completo em computadores de mesa e protege os dados de ataques que envolvem reinicialização. Essa é a classe padrão de todos os dados de apps de terceiros que não tiverem sido atribuídos a uma classe de Proteção de Dados.
No macOS, essa classe usa uma chave de volume que fica acessível desde que o volume esteja montado e age da mesma forma que o FileVault.
Sem Proteção
NSFileProtectionNone: essa chave de classe é protegida apenas pelo UID e é mantida no Armazenamento Apagável. Como todas as chaves necessárias para descriptografar os arquivos desta classe são armazenadas no dispositivo, a criptografia oferece apenas o benefício do apagamento remoto rápido. Se um arquivo não for atribuído a uma classe de Proteção de Dados, ele ainda é armazenado criptografado (como todos os dados em um dispositivo iOS e iPadOS).
Isso não é compatível com o macOS.
Nota: no macOS, em volumes que não correspondem a um sistema operacional inicializado, todas as classes de proteção de dados são acessíveis desde que o volume esteja montado. A classe de proteção de dados padrão é NSFileProtectionCompleteUntilFirstUserAuthentication. A funcionalidade de chave por extensão está disponível tanto a apps Rosetta 2 quanto a apps nativos.