Ativar adiantum

O Adiantum é um método de criptografia desenvolvido para dispositivos com o Android 9 e versões mais recentes 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 que não têm essas instruções da CPU AES, o Adiantum oferece criptografia no dispositivo com 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 escolher, 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 Correção dm-crypt
4.14 Kernel 4.14 Correção dm-crypt
4,9 Kernel 4.9 Correção dm-crypt

Ativar o Adiantum no kernel

Android 11 e versões mais recentes

Se o dispositivo estiver sendo inicializado 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, 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, 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, também ative:

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 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 das 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 da 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 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)"