O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Habilitando Adiantum

Adiantum é um método de criptografia projetado para dispositivos que executam o Android 9 e superior, cujas CPUs falta AES instruções. Se você está enviando um dispositivo baseado em ARM com ARMv8 Cryptography Extensions ou um dispositivo baseado em x86 com AES-NI, você não deve usar Adiantum. O AES é mais rápido nessas plataformas.

Para dispositivos sem essas instruções de CPU AES, o Adiantum fornece criptografia em seu dispositivo com muito pouca sobrecarga de desempenho. Para números de benchmarking, consulte o papel Adiantum . Para a fonte de benchmarking para executar em seu hardware, consulte a fonte Adiantum no GitHub .

Para habilitar o Adiantum em um dispositivo com Android 9 ou superior, você precisa fazer alterações no kernel e no espaço do usuário.

Mudanças de kernel

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

Se o kernel do seu dispositivo ainda não tem suporte para Adiantum, selecione as alterações listadas abaixo. Se você está tendo problemas para cherry-picking, dispositivos que utilizam a criptografia de disco completo (FDE) pode excluir a fscrypt: patch.

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

Habilite Adiantum em seu kernel

Android 11 e superior

Se o seu dispositivo está iniciando com Android 11 ou superior, habilite as seguintes configurações na configuração do kernel do seu 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 seu 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 seu dispositivo for inicializado com Android 9 ou 10, serão necessárias configurações ligeiramente diferentes do kernel. Ative as seguintes configurações:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Se o seu dispositivo usa criptografia baseada em arquivo, habilite também:

CONFIG_F2FS_FS_ENCRYPTION=y

Finalmente, se o seu 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 que executam o Android 10 ou superior, as mudanças do espaço do usuário Adiantum já estão presentes.

Para dispositivos com Android 9, escolha a dedo as seguintes alterações:

Habilite Adiantum em seu dispositivo

Em primeiro lugar, garantir que o seu dispositivo tem PRODUCT_SHIPPING_API_LEVEL definido corretamente para coincidir com a versão Android está lançando com. Por exemplo, um lançamento dispositivo com Android 11 deve ter PRODUCT_SHIPPING_API_LEVEL := 30 . Isso é importante porque algumas das configurações de criptografia têm padrões diferentes em versões de inicialização diferentes.

Dispositivos com criptografia baseada em arquivo

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

fileencryption=adiantum

Se o dispositivo está lançando com Android 11 ou superior, em seguida, ativar a criptografia de metadados também é necessária. Para usar Adiantum para criptografia de metadados no armazenamento interno, os fs_mgr_flags para userdata também deve conter as seguintes opções:

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

Em seguida, ativar a criptografia Adiantum em armazenamento adoptáveis . Para fazer isso, defina as seguintes propriedades do sistema em PRODUCT_PROPERTY_OVERRIDES :

Para Android 11 e superior:

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

Finalmente, opcionalmente, adicionar blk-crypto-fallback.num_keyslots=1 para a linha de comando do kernel. Isso reduzirá um pouco o uso de memória quando a criptografia de metadados Adiantum for usada. Antes de fazer isso, verifique se o inlinecrypt opção de montagem não é especificado no fstab . Se for especificado, removê-lo, uma vez que não é necessário para a criptografia Adiantum, e isso faz com que os problemas de desempenho quando utilizado em combinação com blk-crypto-fallback.num_keyslots=1 .

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

adb root
adb shell dmesg

Se o Adiantum estiver habilitado corretamente, você deverá ver isso no log do kernel:

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

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

adb root
adb shell dmctl table userdata

O terceiro campo da saída deve ser xchacha12,aes-adiantum-plain64 .

Dispositivos com criptografia de disco completo

Para habilitar Adiantum e melhorar o seu desempenho, definir essas propriedades em PRODUCT_PROPERTY_OVERRIDES :

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

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

Na fstab , para o conjunto de userdata:

forceencrypt=footer

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

adb root
adb shell dmesg

Se o Adiantum estiver habilitado corretamente, você deverá ver isso no log do kernel:

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