Habilitando Adiantum

Adiantum é um método de criptografia projetado para dispositivos com Android 9 e superior cujas CPUs não possuem 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 deverá usar o Adiantum. AES é mais rápido nessas plataformas.

Para dispositivos que não possuem 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 artigo da Adiantum . Para que a fonte de benchmarking seja executada em seu hardware, consulte a fonte Adiantum no GitHub .

Para ativar 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 no kernel

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

Se o kernel do seu dispositivo ainda não tiver suporte para Adiantum, escolha as alterações listadas abaixo. Se você estiver tendo problemas para escolher, os dispositivos que usam criptografia de disco completo (FDE) podem excluir o patch fscrypt:

Versão do kernel Patches de criptografia e fscrypt patch dm-crypt
4.19 núcleo 4.19 patch dm-crypt
4.14 núcleo 4.14 patch dm-crypt
4.9 núcleo 4.9 patch dm-crypt

Habilite Adiantum em seu kernel

Android 11 e superior

Se o seu dispositivo estiver 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 estiver iniciando com Android 9 ou 10, serão necessárias configurações de kernel ligeiramente diferentes. Ative as seguintes configurações:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

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

CONFIG_F2FS_FS_ENCRYPTION=y

Finalmente, se o seu dispositivo executa um kernel ARM de 32 bits, habilite 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 superior, as alterações no espaço de usuário do Adiantum já estão presentes.

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

Habilite Adiantum em seu dispositivo

Primeiro, certifique-se de que PRODUCT_SHIPPING_API_LEVEL do seu dispositivo esteja configurado corretamente para corresponder à versão do Android com a qual está sendo lançado. Por exemplo, um dispositivo lançado com Android 11 deve ter PRODUCT_SHIPPING_API_LEVEL := 30 . Isso é importante porque algumas configurações de criptografia têm padrões diferentes em diferentes versões de inicialização.

Dispositivos com criptografia baseada em arquivos

Para ativar a criptografia baseada em arquivo Adiantum no armazenamento interno do seu 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 seu dispositivo for lançado com Android 11 ou superior, 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 deve conter as seguintes opções:

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

Em seguida, habilite a criptografia Adiantum no armazenamento adotável . 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, adicione opcionalmente blk-crypto-fallback.num_keyslots=1 à linha de comando do kernel. Isto reduzirá ligeiramente o uso de memória quando a criptografia de metadados Adiantum for usada. Antes de fazer isso, verifique se a opção de montagem inlinecrypt não está especificada no fstab . Se for especificado, remova-o, pois não é necessário para criptografia Adiantum e causa problemas de desempenho quando usado 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 isto no log do kernel:

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

Se você habilitou a criptografia de metadados, execute também o seguinte para verificar se a criptografia de metadados Adiantum está habilitada 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 ativar o Adiantum e melhorar seu 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 que o Adiantum funcione. Para usar essa configuração, a partição userdata deve começar em um deslocamento alinhado de 4.096 bytes no disco.

No fstab , para o conjunto 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 isto no log do kernel:

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

Adiantum é um método de criptografia projetado para dispositivos com Android 9 e superior cujas CPUs não possuem 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 deverá usar o Adiantum. AES é mais rápido nessas plataformas.

Para dispositivos que não possuem 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 artigo da Adiantum . Para que a fonte de benchmarking seja executada em seu hardware, consulte a fonte Adiantum no GitHub .

Para ativar 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 no kernel

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

Se o kernel do seu dispositivo ainda não tiver suporte para Adiantum, escolha as alterações listadas abaixo. Se você estiver tendo problemas para escolher, os dispositivos que usam criptografia de disco completo (FDE) podem excluir o patch fscrypt:

Versão do kernel Patches de criptografia e fscrypt patch dm-crypt
4.19 núcleo 4.19 patch dm-crypt
4.14 núcleo 4.14 patch dm-crypt
4.9 núcleo 4.9 patch dm-crypt

Habilite Adiantum em seu kernel

Android 11 e superior

Se o seu dispositivo estiver 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 estiver iniciando com Android 9 ou 10, serão necessárias configurações de kernel ligeiramente diferentes. Ative as seguintes configurações:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

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

CONFIG_F2FS_FS_ENCRYPTION=y

Finalmente, se o seu dispositivo executa um kernel ARM de 32 bits, habilite 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 superior, as alterações no espaço de usuário do Adiantum já estão presentes.

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

Habilite Adiantum em seu dispositivo

Primeiro, certifique-se de que PRODUCT_SHIPPING_API_LEVEL do seu dispositivo esteja configurado corretamente para corresponder à versão do Android com a qual está sendo lançado. Por exemplo, um dispositivo lançado com Android 11 deve ter PRODUCT_SHIPPING_API_LEVEL := 30 . Isso é importante porque algumas configurações de criptografia têm padrões diferentes em diferentes versões de inicialização.

Dispositivos com criptografia baseada em arquivos

Para ativar a criptografia baseada em arquivo Adiantum no armazenamento interno do seu 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 seu dispositivo for lançado com Android 11 ou superior, 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 deve conter as seguintes opções:

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

Em seguida, habilite a criptografia Adiantum no armazenamento adotável . 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, adicione opcionalmente blk-crypto-fallback.num_keyslots=1 à linha de comando do kernel. Isto reduzirá ligeiramente o uso de memória quando a criptografia de metadados Adiantum for usada. Antes de fazer isso, verifique se a opção de montagem inlinecrypt não está especificada no fstab . Se for especificado, remova-o, pois não é necessário para criptografia Adiantum e causa problemas de desempenho quando usado 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 isto no log do kernel:

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

Se você habilitou a criptografia de metadados, execute também o seguinte para verificar se a criptografia de metadados Adiantum está habilitada 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 ativar o Adiantum e melhorar seu 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 que o Adiantum funcione. Para usar essa configuração, a partição userdata deve começar em um deslocamento alinhado de 4.096 bytes no disco.

No fstab , para o conjunto 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 isto no log do kernel:

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