Ativar o adiantum

O Adiantum é um método de criptografia projetado para dispositivos com o Android 9 e versões mais recentes com CPUs que não têm instruções do AES. Se você estiver enviando um dispositivo baseado em ARM com extensões de criptografia ARMv8 ou um dispositivo baseado em x86 com AES-NI, não use o Adiantum. O AES é mais rápido nessas plataformas.

Para dispositivos que não têm essas instruções da CPU AES, o Adiantum oferece criptografia no dispositivo com muito pouca sobrecarga de desempenho. Para números de comparação, consulte o documento da Adiantum. Para que a fonte de comparação seja executada no seu hardware, consulte a fonte do Adiantum no GitHub.

Para ativar o Adiantum em um dispositivo com o Android 9 ou versões mais recentes, é necessário fazer mudanças no kernel e no espaço do usuário.

Mudanças no kernel

O Adiantum tem suporte dos kernels comuns do Android, versão 4.9 e mais recentes.

Se o kernel do seu dispositivo ainda não tiver suporte ao Adiantum, escolha as mudanças listadas abaixo. Se você tiver problemas para selecionar o que precisa, os dispositivos que usam a criptografia de disco completo (FDE) podem excluir o patch fscrypt: .

Versão do kernel Patches de criptografia e fscrypt Patch dm-crypt
4.19 Kernel 4.19 dm-crypt patch
4.14 Kernel 4.14 Correção dm-crypt
4,9 Kernel 4.9 dm-crypt patch

Ativar o Adiantum no 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

Se o dispositivo estiver executando um kernel ARM de 32 bits, também 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

Android 9 e 10

Se o dispositivo for lançado com o Android 9 ou 10, configurações de configuração do kernel um pouco diferentes serão necessárias. Ative as seguintes configurações:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Se o dispositivo usa criptografia baseada em arquivos, ative também:

CONFIG_F2FS_FS_ENCRYPTION=y

Por fim, se o dispositivo executa 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 o Android 9, escolha as seguintes mudanças:

Ativar o Adiantum no dispositivo

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

Dispositivos com criptografia baseada em arquivos

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

fileencryption=adiantum

Se o dispositivo for lançado com o Android 11 ou mais recente, também será necessário ativar a criptografia de metadados. Para usar o Adiantum para criptografia de metadados no armazenamento interno, o fs_mgr_flags para 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 adaptável. Para fazer isso, defina as 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 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 à linha de comando do kernel, se quiser. Isso reduz um pouco o uso de memória quando a criptografia de metadados Adiantum é usada. Antes de fazer isso, verifique se a opção de montagem inlinecrypt não está especificada no fstab. Se ele for especificado, remova-o, já que ele não é necessário para a criptografia Adiantum e causa problemas de desempenho quando usado em combinação com blk-crypto-fallback.num_keyslots=1.

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

adb root
adb shell dmesg

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

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

Se você ativou a criptografia de metadados, execute o seguinte comando para verificar se a criptografia de metadados do 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 o desempenho, defina estas 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ário para o Adiantum funcionar. Para usar essa configuração, a partição de dados do usuário precisa começar em um deslocamento alinhado de 4096 bytes no disco.

No fstab, para o conjunto de userdata:

forceencrypt=footer

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

adb root
adb shell dmesg

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

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