O Adiantum é um método de criptografia projetado para dispositivos com Android 9 e versões mais recentes com CPUs que não tenham Instruções AES (em inglês). Se você estiver enviando uma solicitação de com extensões de criptografia ARMv8 ou um dispositivo baseado em x86 com AES-NI, você não deve usar Adiantum. O AES é mais rápido nas plataformas.
Para dispositivos que não têm essas instruções de CPU AES, o Adiantum oferece criptografia seu dispositivo com pouquíssima sobrecarga de desempenho. Para números comparativos, consulte o documento da Adiantum. Para a origem do comparativo de mercado para execução no seu hardware, consulte as Fonte Adiantum no GitHub (link em inglês).
Para ativar o Adiantum em um dispositivo com Android 9 ou versão mais recente, você precisa: fazer alterações no kernel e no espaço do usuário.
Mudanças do kernel
O Adiantum é compatível com os kernels comuns do Android, versão 4.9 e mais recentes.
Se o kernel do seu dispositivo ainda não tiver suporte ao Adiantum, selecione a
as alterações listadas abaixo. Se você tiver problemas para escolher a dedo, os dispositivos que usam a criptografia de disco completo (FDE, na sigla em inglês) podem excluir
o patch fscrypt:
.
Versão do kernel | Patches de Crypto e fscrypt | Patch do dm-crypt |
---|---|---|
4,19 | Kernel 4.19 | Patch dm-crypt
|
4,14 | Kernel 4.14 | Patch dm-crypt
|
4,9 | Kernel 4.9 | Patch dm-crypt
|
Ativar o Adiantum no seu 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
Caso seu dispositivo esteja 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 e uma configuração de kernel ligeiramente diferente são necessárias. 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 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 Android 9, selecione a as seguintes mudanças:
- cryptfs: adicionar compatibilidade com Adiantum
- cryptfs: permitir a configuração do tamanho do setor de criptografia dm-crypt
- cryptfs: arredondar o tamanho do dispositivo dm-crypt para limite do setor criptográfico
- cryptfs: melhorar a geração de registros de criação de dispositivos dm-crypt
- libfscrypt: adicionar compatibilidade com Adiantum
- fs_mgr_fstab: adicionar compatibilidade com Adiantum
Ativar o Adiantum no seu dispositivo
Primeiro, verifique se o PRODUCT_SHIPPING_API_LEVEL
está definido no dispositivo
corretamente para corresponder à versão do Android com que está sendo lançada. Por exemplo,
o dispositivo que é iniciado com o Android 11 precisa ter
PRODUCT_SHIPPING_API_LEVEL := 30
: Isso é importante porque algumas
as configurações de criptografia têm padrões diferentes dependendo da versão de lançamento.
Dispositivos com criptografia baseada em arquivos
Para ativar a criptografia baseada em arquivos Adiantum no armazenamento interno do seu dispositivo, adicione
a opção a seguir para a última coluna (o elemento fs_mgr_flags
coluna) da linha da partição userdata
no arquivo
Arquivo fstab
:
fileencryption=adiantum
Se o dispositivo for lançado com o Android 11 ou mais recente,
em seguida, ativando
a criptografia de metadados. Para usar o Adiantum para metadados
no armazenamento interno, o fs_mgr_flags para
O 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 o
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 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
ao
linha de comando do kernel. Isso reduzirá um pouco o uso da memória quando Adiantum
e a criptografia de metadados é usada. Antes de fazer isso, verifique se o
A opção de montagem inlinecrypt
não é especificada em fstab
.
Se for especificado, remova-o, já que não é necessário para a criptografia Adiantum,
e causa problemas de desempenho quando usada 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á isto 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 comando a seguir 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 seu desempenho, defina essas 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ária 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 4.096 bytes no disco.
No fstab
, para o conjunto de dados do usuário:
forceencrypt=footer
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á isto no registro do kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"