O Adiantum é um método de criptografia projetado para dispositivos com o Android 9 e versões mais recentes com CPUs que não têm instruções do 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 muito 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 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 criptografia e fscrypt | Patch dm-crypt |
---|---|---|
4.19 | Kernel 4.19 | dm-crypt patch
|
4.14 | Kernel 4.14 | Correção dm-crypt
|
4,9 | Kernel 4.9 | dm-crypt patch
|
Ativar o Adiantum no kernel
Android 11 e versões mais recentes
Se o dispositivo for lançado 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, também 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
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, ative também:
CONFIG_F2FS_FS_ENCRYPTION=y
Por fim, se o 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 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: adição de suporte ao Adiantum
- cryptfs: permitir a configuração do tamanho do setor de dm-crypt
- cryptfs: arredonda 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: adição de suporte ao Adiantum
- fs_mgr_fstab: adição de suporte ao Adiantum
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
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 de memória quando a criptografia de metadados
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)"