Como ativar o Adiantum

O Adiantum é um método de criptografia projetado para dispositivos com Android 9 e versões mais recentes com CPUs que não tenham Instruções AES (em inglês). Se você estiver enviando uma solicitação de com extensões de criptografia ARMv8 ou um dispositivo baseado em x86 com AES-NI, você não deve usar Adiantum. O AES é mais rápido nas plataformas.

Para dispositivos que não têm essas instruções de CPU AES, o Adiantum oferece criptografia seu dispositivo com pouquíssima sobrecarga de desempenho. Para números comparativos, consulte o documento da Adiantum. Para a origem do comparativo de mercado para execução no seu hardware, consulte as Fonte Adiantum no GitHub (link em inglês).

Para ativar o Adiantum em um dispositivo com Android 9 ou versão mais recente, você precisa: fazer alterações no kernel e no espaço do usuário.

Mudanças do kernel

O Adiantum é compatível com os kernels comuns do Android, versão 4.9 e mais recentes.

Se o kernel do seu dispositivo ainda não tiver suporte ao Adiantum, selecione a as alterações listadas abaixo. Se você tiver problemas para escolher a dedo, os dispositivos que usam a criptografia de disco completo (FDE, na sigla em inglês) podem excluir o patch fscrypt: .

Versão do kernel Patches de Crypto e fscrypt Patch do dm-crypt
4,19 Kernel 4.19 Patch dm-crypt
4,14 Kernel 4.14 Patch dm-crypt
4,9 Kernel 4.9 Patch dm-crypt

Ativar o Adiantum no seu kernel

Android 11 e versões mais recentes

Se o dispositivo for lançado com o Android 11 ou mais recente, ative as seguintes configurações na configuração do kernel do dispositivo:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_FS_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_DM_DEFAULT_KEY=y

Caso seu dispositivo esteja executando um kernel ARM de 32 bits, ative também as instruções do NEON para melhorar o desempenho:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 e 10

Se o dispositivo estiver sendo iniciado com o Android 9 ou 10 e uma configuração de kernel ligeiramente diferente são necessárias. Ative as seguintes configurações:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Caso seu dispositivo use criptografia baseada em arquivos, ative também:

CONFIG_F2FS_FS_ENCRYPTION=y

Por fim, se o dispositivo executar um kernel ARM de 32 bits, ative as instruções NEON para melhorar o desempenho:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Mudanças no espaço do usuário

Para dispositivos com o Android 10 ou versões mais recentes, as mudanças no espaço do usuário do Adiantum já estão presentes.

Para dispositivos com Android 9, selecione a as seguintes mudanças:

Ativar o Adiantum no seu dispositivo

Primeiro, verifique se o PRODUCT_SHIPPING_API_LEVEL está definido no dispositivo corretamente para corresponder à versão do Android com que está sendo lançada. Por exemplo, o dispositivo que é iniciado com o Android 11 precisa ter PRODUCT_SHIPPING_API_LEVEL := 30: Isso é importante porque algumas as configurações de criptografia têm padrões diferentes dependendo da versão de lançamento.

Dispositivos com criptografia baseada em arquivos

Para ativar a criptografia baseada em arquivos Adiantum no armazenamento interno do seu dispositivo, adicione a opção a seguir para a última coluna (o elemento fs_mgr_flags coluna) da linha da partição userdata no arquivo Arquivo fstab:

fileencryption=adiantum

Se o dispositivo for lançado com o Android 11 ou mais recente, em seguida, ativando a criptografia de metadados. Para usar o Adiantum para metadados no armazenamento interno, o fs_mgr_flags para O userdata também precisa conter as seguintes opções:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Em seguida, ative a criptografia Adiantum no armazenamento adotável. Para fazer isso, defina o seguintes propriedades do sistema em PRODUCT_PROPERTY_OVERRIDES:

Para o Android 11 e versões mais recentes:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

Para o Android 9 e 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096
.

Por fim, adicione blk-crypto-fallback.num_keyslots=1 ao linha de comando do kernel. Isso reduzirá um pouco o uso da memória quando Adiantum e a criptografia de metadados é usada. Antes de fazer isso, verifique se o A opção de montagem inlinecrypt não é especificada em fstab. Se for especificado, remova-o, já que não é necessário para a criptografia Adiantum, e causa problemas de desempenho quando usada em combinação com blk-crypto-fallback.num_keyslots=1:

Para verificar se a implementação funcionou, gere um relatório do bug ou execute:

adb root
adb shell dmesg

Se o Adiantum estiver ativado corretamente, você verá isto no registro do kernel:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

Se você ativou a criptografia de metadados, execute também o comando a seguir para verificar se A criptografia de metadados Adiantum está ativada corretamente:

adb root
adb shell dmctl table userdata

O terceiro campo da saída precisa ser xchacha12,aes-adiantum-plain64:

Dispositivos com criptografia de disco completo

Para ativar o Adiantum e melhorar seu desempenho, defina essas propriedades em PRODUCT_PROPERTY_OVERRIDES:

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Definir fde_sector_size como 4096 melhora o desempenho, mas não é necessária para que Adiantum funcione. Para usar essa configuração, a partição de dados do usuário precisa começar em um deslocamento alinhado de 4.096 bytes no disco.

No fstab, para o conjunto de dados do usuário:

forceencrypt=footer

Para verificar se a implementação funcionou, gere um relatório do bug ou execute:

adb root
adb shell dmesg

Se o Adiantum estiver ativado corretamente, você verá isto no registro do kernel:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"