Ativar o adiantum

O Adiantum é um método de criptografia projetado para dispositivos com Android 9 e mais recentes com CPUs que não têm instruções 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 sem essas instruções da CPU AES, o Adiantum fornece criptografia no dispositivo com muito pouco overhead de desempenho. Para números de comparativo de mercado, consulte o artigo do Adiantum. Para que a fonte de comparativo de mercado seja executada no seu hardware, consulte a fonte do Adiantum no GitHub.

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

Mudanças no kernel

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

Se o kernel do dispositivo ainda não tiver suporte ao Adiantum, selecione as mudanças listadas abaixo. Se você estiver com problemas para fazer o cherry-picking, os dispositivos que usam criptografia de disco completo (FDE) podem excluir o patch fscrypt: .

Versão do kernel Patches de criptografia e fscrypt dm-crypt patch
4.19 Kernel 4.19 dm-crypt patch
4.14 Kernel 4.14 dm-crypt patch
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 versões mais recentes, 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, ative também 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, serão necessárias configurações de configuração do kernel ligeiramente diferentes. 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 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 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, selecione 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 com que ele está sendo iniciado. Por exemplo, um dispositivo lançado com o Android 11 precisa ter PRODUCT_SHIPPING_API_LEVEL := 30. Isso é importante porque algumas das configurações de criptografia têm padrões diferentes em versões de lançamento diferentes.

Dispositivos com criptografia baseada em arquivos

Para ativar a criptografia baseada em arquivo do Adiantum no armazenamento interno do dispositivo, adicione a seguinte opção à ú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 uma versão mais recente, também será necessário ativar a criptografia de metadados. Para usar o Adiantum na criptografia de metadados no armazenamento interno, as fs_mgr_flags para userdata também precisam conter as seguintes opções:

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

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

No 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 do Adiantum é usada. Antes de fazer isso, verifique se a opção de montagem inlinecrypt não está especificada no fstab. Se ele estiver especificado, remova-o, já que 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, gere um relatório de bugs 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 a performance dele, 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 que o Adiantum funcione. Para usar essa configuração, a partição userdata precisa começar em um deslocamento alinhado de 4096 bytes no disco.

No fstab, para dados do usuário, defina:

forceencrypt=footer

Para verificar se a implementação funcionou, gere um relatório de bugs 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)"