Keybags para Proteção de Dados
As chaves das classes de Proteção de Dados de arquivos e de chaves são coletadas e gerenciadas em keybags no iOS, iPadOS, tvOS e watchOS. Esses sistemas operacionais usam as seguintes keybags: usuário, dispositivo, backup, guarda e Backup do iCloud.
Keybag do usuário
A keybag do usuário é onde as chaves de classe embaladas, usadas em operações normais, são armazenadas. Por exemplo, quando um código é digitado, a NSFileProtectionComplete é carregada a partir da keybag do usuário e desembalada. Ela é um arquivo binário de lista de propriedades (.plist) armazenado na classe Sem Proteção.
No caso de dispositivos com SoCs anteriores ao A9, o conteúdo do arquivo .plist é criptografado com uma chave guardada no Armazenamento Apagável. Para oferecer mais segurança às keybags, essa chave é apagada e gerada novamente sempre que um usuário altera seu código.
No caso de dispositivos com os SoCs A9 ou posteriores, o arquivo .plist contém uma chave que indica que a keybag está armazenada em um cofre protegido por um valor antirreprodução controlado pelo Secure Enclave.
O Secure Enclave gerencia a keybag do usuário e pode ser consultado sobre o estado de bloqueio de um dispositivo. Ele informa que o dispositivo está desbloqueado somente se todas as chaves de classe da keybag do usuário estiverem acessíveis e desembaladas corretamente.
Keybag do dispositivo
A keybag do dispositivo é usada para armazenar as chaves de classe embaladas usadas em operações que envolvem dados específicos do dispositivo. Dispositivos iPadOS configurados para uso compartilhado às vezes precisam de acesso a credenciais antes que um usuário tenha iniciado uma sessão; portanto, é necessária uma keybag que não esteja protegida pelo código do usuário.
O iOS e iPadOS não são compatíveis com a separação criptográfica do conteúdo do sistema de arquivos por cada usuário, o que significa que o sistema usa chaves de classe da keybag do dispositivo para embalar chaves únicas por arquivo. Porém, as chaves usam chaves de classe da keybag do usuário para proteger itens nas chaves do usuário. Em dispositivos iPhone e iPad configurados para uso de um único usuário (configuração padrão), a keybag do dispositivo e a keybag do usuário são uma só e a mesma, protegidas pelo código do usuário.
Keybag de backup
A keybag de backup é criada quando o Finder (macOS 10.15 ou posterior) ou o iTunes (macOS 10.14 ou anterior) fazem um backup criptografado que é armazenado no computador onde o backup do dispositivo foi feito. Uma nova keybag é criada com um novo conjunto de chaves e os dados do backup são criptografados novamente com essas novas chaves. Como explicado anteriormente, os itens não migratórios das chaves permanecem embalados pela chave derivada do UID, permitindo que eles sejam restaurados para o dispositivo do qual o backup foi feito originalmente, mas deixando-os inacessíveis em um dispositivo diferente.
A keybag — protegida pela senha definida — passa por 10 milhões de iterações da função de derivação de chaves PBKDF2. Apesar dessa contagem de iteração extensa, não há vínculos com um dispositivo específico e, portanto, teoricamente, seria possível tentar um ataque de força bruta à keybag do backup usando vários computadores em paralelo. Essa ameaça pode ser atenuada com uma senha suficientemente forte.
Se um usuário decidir não criptografar o backup, os arquivos não são criptografados, independentemente de suas classes de Proteção de Dados, mas as chaves permanecem protegidas por uma chave derivada do UID. É por isso que os itens das chaves são migrados para um novo dispositivo apenas se uma senha de backup for definida.
Keybag de guarda
A keybag de guarda é usada para sincronizar com o Finder (macOS 10.15 ou posterior) ou iTunes (no macOS 10.14 ou anterior) via USB e gerenciamento de dispositivos móveis (MDM). Essa keybag permite o backup e a sincronização com o Finder ou o iTunes sem exigir que o usuário digite uma senha, e permite que uma solução MDM limpe o código de um usuário remotamente. Ela é armazenada no computador usado para sincronizar com o Finder ou o iTunes, ou na solução MDM que gerencia o dispositivo remotamente.
A keybag de guarda melhora a experiência do usuário durante a sincronização do dispositivo, o que potencialmente requer acesso a todas as classes de dados. Quando um dispositivo bloqueado por código é conectado pela primeira vez ao Finder ou iTunes, o usuário é solicitado a digitar um código. Em seguida, o dispositivo cria uma keybag de guarda que contém as mesmas chaves de classe usadas no dispositivo, protegida por uma nova chave recém-gerada. A keybag de guarda e a chave que a protege são divididas entre o dispositivo e o host ou servidor, com os dados armazenados no dispositivo na classe Protegido Até a Primeira Autenticação do Usuário. É por isso que o código do dispositivo deve ser digitado antes que o usuário faça um backup no Finder ou iTunes da primeira vez após uma reinicialização.
No caso de uma atualização de software sem fio (OTA), é solicitado que o usuário digite o código ao iniciar a atualização. Isso é feito para criar, de forma segura, um token de desbloqueio único, o qual desbloqueia a keybag do usuário depois da atualização. Esse token não pode ser gerado sem que o código do usuário seja digitado e todos os tokens gerados anteriormente são invalidados se o código do usuário for alterado.
Os tokens de desbloqueio de uso único servem para atualizações de software feitas com ou sem supervisão. Eles são criptografados com uma chave derivada do valor atual de um contador monotônico no Secure Enclave, o UUID da keybag e o UID do Secure Enclave.
Nos SoCs A9 (ou posteriores), o token de Desbloqueio de uso único não depende mais de contadores ou do Armazenamento Apagável. Em vez disso, ele é protegido pelo valor antirreprodução controlado pelo Secure Enclave.
O token de desbloqueio de uso único de atualizações de software supervisionadas expira depois de 20 minutos. No iOS 13 e iPadOS 13.1 ou posteriores, o token é armazenado em um cofre protegido pelo Secure Enclave. Antes do iOS 13, esse token era exportado do Secure Enclave e gravado no Armazenamento Apagável ou protegido pelo mecanismo antirreprodução do Secure Enclave. Um timer de política aumentava o contador se o dispositivo não tivesse sido reinicializado nos últimos 20 minutos.
Atualizações de software automáticas ocorrem quando o sistema detecta que há uma atualização disponível e quando um dos seguintes é verdadeiro:
As atualizações automáticas estão configuradas no iOS 12 ou posterior.
O usuário escolhe “Instalar Mais Tarde” ao receber a notificação sobre a atualização.
Após o usuário digitar seu código, um token de desbloqueio de uso único é gerado e pode permanecer válido no Secure Enclave por até oito horas. Se a atualização ainda não tiver ocorrido, o token de desbloqueio de uso único é destruído a cada bloqueio e recriado a cada desbloqueio subsequente. Cada desbloqueio reinicia a contagem de oito horas. Após oito horas, um timer de política invalida o token de desbloqueio de uso único.
Keybag do Backup do iCloud
A keybag do Backup do iCloud assemelha-se à keybag de backup. Todas as chaves de classe nessa keybag são assimétricas (usam Curve25519, da mesma maneira que a classe de Proteção de Dados “Protegido Exceto se Aberto”). Uma keybag assimétrica também é usada para proteger as chaves com backup para recuperação das Chaves do iCloud.