Adiantum é um método de criptografia projetado para dispositivos que executam o 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, você não deve usar o 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, veja o artigo da Adiantum . Para que a fonte de benchmarking seja executada 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.
Alterações do kernel
Adiantum é suportado pelos 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 o Adiantum em seu kernel
Android 11 e superior
Se o seu dispositivo estiver sendo iniciado com o Android 11 ou superior, ative 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 sendo iniciado com o Android 9 ou 10, serão necessárias configurações de kernel ligeiramente diferentes. Habilite as seguintes configurações:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Se o seu dispositivo usa criptografia baseada em arquivo, ative também:
CONFIG_F2FS_FS_ENCRYPTION=y
Por fim, 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
Alterações no espaço do usuário
Para dispositivos com Android 10 ou superior, as alterações do espaço de usuário do Adiantum já estão presentes.
Para dispositivos que executam o Android 9, escolha as seguintes alterações:
- cryptfs: adicione suporte a Adiantum
- cryptfs: permite definir o tamanho do setor dm-crypt
- cryptfs: arredonda o tamanho do dispositivo dm-crypt para o limite do setor de criptografia
- cryptfs: melhore o registro da criação do dispositivo dm-crypt
- libfscrypt: Adicione suporte ao Adiantum
- fs_mgr_fstab: Adicionar suporte Adiantum
Ative o Adiantum no seu dispositivo
Primeiro, verifique se o PRODUCT_SHIPPING_API_LEVEL
do seu dispositivo está configurado corretamente para corresponder à versão do Android com a qual está sendo iniciado. Por exemplo, um dispositivo iniciado com o Android 11 deve 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 inicialização.
Dispositivos com criptografia baseada em arquivo
Para habilitar 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 iniciado com o Android 11 ou superior, também será necessário ativar a criptografia de metadados . Para usar Adiantum para criptografia de metadados em 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, opcionalmente, adicione blk-crypto-fallback.num_keyslots=1
à 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 a opção de montagem inlinecrypt
não está especificada no fstab
. Se for especificado, remova-o, pois 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 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 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 no disco de 4096 bytes.
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 isso no log do kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"