Proteção de Dados das Chaves
Muitos apps precisam gerenciar senhas e outros dados simples, porém sensíveis, como chaves e tokens de acesso. As chaves oferecem uma maneira segura de armazenar esses itens. Os diversos sistemas operacionais da Apple usam mecanismos diferentes para exigir as garantias associadas às várias classes de proteção das chaves. No macOS (incluindo um Mac com Apple Silicon), a Proteção de Dados não é usada diretamente para exigir essas garantias.
Visão geral
Os itens das Chaves são criptografados usando duas chaves AES-256-GCM diferentes: uma chave de tabela (metadados) e uma chave por linha (chave secreta). Os metadados das Chaves (todos os atributos que não sejam kSecValue) são criptografados com a chave dos metadados para acelerar buscas, e o valor secreto (kSecValueData) é criptografado com a chave secreta. A chave dos metadados é protegida pelo Secure Enclave, mas é armazenada em cache no Processador de Aplicativos para permitir consultas rápidas às chaves. A chave secreta sempre requer uma passagem completa pelo Secure Enclave.
As chaves são implementadas na forma de um banco de dados SQLite, armazenado no sistema de arquivos. Existe apenas um banco de dados e o daemon securityd
determina quais itens das chaves cada processo ou app pode acessar. As APIs de Acesso às Chaves resultam em chamadas ao daemon, que consulta os direitos “grupos-acesso-Chaves”, “identificador-aplicativo” e “grupo-aplicativo” do app. Ao invés de limitar o acesso a um único processo, os grupos de acesso permitem que os itens das chaves sejam compartilhados entre apps.
Os itens das chaves podem ser compartilhados apenas entre apps do mesmo desenvolvedor. Para compartilhar os itens das chaves, apps de terceiros usam grupos de acesso com um prefixo a eles alocados através do Programa de Desenvolvedor da Apple em seus respectivos grupos de aplicativos. A exigência do prefixo e a exclusividade do grupo do aplicativo são aplicadas através da assinatura de código, perfis de provisão e o Programa de Desenvolvedor da Apple (em inglês).
Os dados das Chaves são protegidos usando uma estrutura de classes semelhante à usada na Proteção de Dados de arquivos. Essas classes apresentam comportamentos equivalentes às classes de Proteção de Dados de arquivos, mas usam chaves e funções distintas.
Disponibilidade | Proteção de dados de arquivos | Proteção de Dados das Chaves | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Quando desbloqueado | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
Enquanto bloqueado | NSFileProtectionComplete UnlessOpen | ||||||||||
Depois do primeiro desbloqueio | NSFileProtectionComplete UntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
Sempre | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
Código ativado | kSecAttrAccessibleWhen PasscodeSetThisDeviceOnly |
Os apps que usam serviços de atualização em segundo plano podem usar kSecAttrAccessibleAfterFirstUnlock para itens das chaves que precisam ser acessados durante atualizações em segundo plano.
A classe kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly se comporta da mesma maneira que kSecAttrAccessibleWhenUnlocked, mas fica disponível apenas quando o dispositivo está configurado com um código. Essa classe existe somente na keybag do sistema e:
Não é sincronizada com as Chaves do iCloud
Não recebe backup
Não é incluída em keybags de guarda
Se o código for removido ou redefinido, os itens serão inutilizados por meio do descarte das chaves de classe.
Outras classes de chaves têm uma contraparte “Somente este dispositivo”, a qual está sempre protegida pelo UID ao ser copiada do dispositivo durante um backup, inutilizando-a caso ela seja restaurada em um dispositivo diferente. A Apple equilibrou segurança e usabilidade cuidadosamente, escolhendo classes de chaves que variam de acordo com o tipo de informação sendo protegida e de quando o iOS e iPadOS precisam dela.
Proteções de classes de dados das Chaves
As proteções de classes na lista abaixo são exigidas para itens das chaves.
Item | Acessível |
---|---|
Senhas de Wi-Fi | Depois do primeiro desbloqueio |
Contas do Mail | Depois do primeiro desbloqueio |
Contas do Microsoft Exchange ActiveSync | Depois do primeiro desbloqueio |
Senhas de VPN | Depois do primeiro desbloqueio |
LDAP, CalDAV, CardDAV | Depois do primeiro desbloqueio |
Tokens de contas de redes sociais | Depois do primeiro desbloqueio |
Chaves de criptografia de anúncio de Handoff | Depois do primeiro desbloqueio |
Token do iCloud | Depois do primeiro desbloqueio |
Chaves do iMessage | Depois do primeiro desbloqueio |
Senha do compartilhamento pessoal | Quando desbloqueado |
Senhas do Safari | Quando desbloqueado |
Favoritos do Safari | Quando desbloqueado |
Backup do Finder/iTunes | Quando desbloqueado, não migratória |
Certificados de VPN | Depois do primeiro desbloqueio, não migratória |
Chaves do Bluetooth® | Sempre, não migratória |
Token do serviço de Notificações Push da Apple (APNs) | Sempre, não migratória |
Certificados e chaves privadas do iCloud | Sempre, não migratória |
PIN do SIM | Sempre, não migratória |
Token do Buscar | Sempre |
Voicemail | Sempre |
No macOS, todos os itens das chaves instaladas por perfis de configuração estão sempre disponíveis. No iOS e no iPadOS, os itens das chaves instaladas por um perfil de configuração têm acessibilidade diferente, dependendo do tipo, como são referenciados e onde estão instalados. Por padrão, os itens das chaves instaladas usando perfis de configuração ficam disponíveis depois do primeiro desbloqueio e são não migratórios. No entanto, um item de chave instalada por um perfil de configuração ficará sempre disponível se:
Tiver sido instalada antes da atualização para o iOS 15, iPadOS 15 ou posteriores
For um certificado (não uma identidade)
For uma identidade referenciada por
IdentityCertificateUUID
em um payloadcom.apple.mdm
Controle de acesso às Chaves
As Chaves podem usar listas de controle de acesso (ACLs) para definir políticas de acessibilidade e requisitos de autenticação. Os itens podem estabelecer condições que exijam a presença do usuário, especificando que os mesmos não poderão ser acessados a menos que o usuário tenha autenticado através do Face ID, Touch ID ou pela digitação do código ou senha do dispositivo. O acesso a itens também pode ser limitado ao especificar que os registros do Face ID ou Touch ID não tenham sido alterados desde que o item foi adicionado. Essa limitação ajuda a impedir que um invasor adicione sua própria impressão digital para acessar um item das chaves. As ACLs são avaliadas no Secure Enclave e liberadas ao kernel somente se as restrições especificadas forem atendidas.
Arquitetura das Chaves no macOS
O macOS também oferece acesso às chaves para armazenar de forma conveniente e segura nomes de usuário e senhas, incluindo identidades digitais, chaves de criptografia e notas seguras. Ele pode ser acessado por meio do app Acesso às Chaves em /Aplicativos/Utilitários/. O uso das Chaves elimina a necessidade de digitar (ou mesmo de lembrar) as credenciais de cada recurso. Um conjunto inicial e padrão de chaves é criado para cada usuário do Mac, embora os usuários possam criar outros conjuntos com objetivos específicos.
Além de contar com chaves de usuário, o macOS conta com uma série de chaves no nível do sistema que mantêm materiais de autenticação não específicos ao usuário, como credenciais de rede e identidades de infraestrutura de chave pública (PKI). Uma dessas chaves, Raízes do Sistema, é imutável e armazena certificados de autoridades de certificação (AC) raiz de PKI da internet para a realização de tarefas comuns, como transações bancárias on-line e de comércio eletrônico. De forma semelhante, o usuário pode implantar certificados de AC fornecidos internamente em computadores Mac gerenciados para ajudar a validar sites e serviços internos.