O Adiantum é um método de criptografia desenvolvido para dispositivos com o Android 9 e versões mais recentes que não têm 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 da CPU AES, o Adiantum oferece criptografia no dispositivo com 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 escolher, 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 | Correção dm-crypt
|
4.14 | Kernel 4.14 | Correção 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 inicializado 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 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, também ative:
CONFIG_F2FS_FS_ENCRYPTION=y
Por fim, se o dispositivo executar 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: 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: 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
das 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 da memória quando a criptografia de metadados
do 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)"