O Adiantum é um método de criptografia projetado para dispositivos com Android 9 e versões mais recentes com CPUs sem 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 de CPU AES, o Adiantum oferece criptografia no seu dispositivo com pouquíssima sobrecarga de desempenho. Para números de comparativo de mercado, consulte o documento da Adiantum (em inglês). Para que a origem da comparação seja executada no seu hardware, consulte a fonte do Adiantum no GitHub (em inglês).
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 selecionar o que precisa, os dispositivos que usam a criptografia de disco completo (FDE) podem excluir
o patch fscrypt:
.
Versão do kernel | Patches de Crypto e fscrypt | Patch dm-crypt |
---|---|---|
4,19 | Kernel 4.19 | Correção dm-crypt
|
4.14 | Kernel 4.14 | Patch 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 iniciado 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 do 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 estiver sendo iniciado com o Android 9 ou 10, serão necessárias configurações do kernel um pouco diferentes. Ative as seguintes configurações:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Caso seu dispositivo use 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 do 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:
- cryptfs: adicionar compatibilidade com Adiantum
- cryptfs: permitir a configuração do tamanho do setor de criptografia dm-crypt
- cryptfs: arredondar para baixo o tamanho do dispositivo dm-crypt para o limite do setor de criptografia
- cryptfs: melhora o registro da criação de dispositivos dm-crypt
- libfscrypt: adicionar compatibilidade com Adiantum
- fs_mgr_fstab: adicionar compatibilidade com Adiantum
Ativar o Adiantum no dispositivo
Primeiro, verifique se a PRODUCT_SHIPPING_API_LEVEL
do dispositivo está definida
corretamente para corresponder à versão do Android com que está sendo iniciada. Por exemplo, um
dispositivo iniciado com o Android 11 precisa ter
PRODUCT_SHIPPING_API_LEVEL := 30
. Isso é importante porque algumas
configurações de criptografia têm padrões diferentes em versões de lançamento distintas.
Dispositivos com criptografia baseada em arquivos
Para ativar a criptografia baseada em arquivos Adiantum no armazenamento interno do dispositivo, adicione
a opção abaixo à última coluna (a coluna fs_mgr_flags)
da linha da partição userdata
no arquivo
fstab
do dispositivo:
fileencryption=adiantum
Se o dispositivo for iniciado 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 adotável. Para fazer isso, defina as
propriedades do sistema abaixo 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 o 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. Isso reduz um pouco o uso da memória quando a criptografia de metadados
Adiantum é usada. Antes de fazer isso, verifique se a
opção de ativação inlinecrypt
não está especificada em 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, gere um relatório do 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 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 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 isso não é necessário para que Adiantum funcione. 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 dados do usuário:
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)"