Activer l'adiantum

Adiantum est une méthode de chiffrement conçue pour les appareils équipés d'Android 9 ou version ultérieure dont les processeurs ne disposent pas d'instructions AES. Si vous expédiez un appareil ARM avec des extensions de cryptographie ARMv8 ou un appareil x86 avec AES-NI, vous ne devez pas utiliser Adiantum. AES est plus rapide sur ces plates-formes.

Pour les appareils qui ne disposent pas de ces instructions de processeur AES, Adiantum fournit un chiffrement sur votre appareil avec très peu de surcharge de performances. Pour connaître les chiffres de référence, consultez l'article sur Adiantum. Pour que le code source de référence s'exécute sur votre matériel, consultez le code source Adiantum sur GitHub.

Pour activer Adiantum sur un appareil équipé d'Android 9 ou version ultérieure, vous devez apporter des modifications au noyau et à l'espace utilisateur.

Modifications apportées au noyau

Adiantum est compatible avec les noyaux communs Android, version 4.9 et ultérieure.

Si le noyau de votre appareil n'est pas déjà compatible avec Adiantum, sélectionnez les modifications listées ci-dessous. Si vous rencontrez des difficultés à sélectionner des éléments, les appareils utilisant le chiffrement de disque (FDE) peuvent exclure le correctif fscrypt: .

Version de noyau Correctifs crypto et fscrypt Correctif dm-crypt
4.19 Noyau 4.19 Correctif dm-crypt
4.14 Noyau 4.14 Correctif dm-crypt
4.9 Noyau 4.9 Correctif dm-crypt

Activer Adiantum dans votre kernel

Android 11 ou version ultérieure

Si votre appareil démarre avec Android 11 ou version ultérieure, activez les paramètres suivants dans la configuration du noyau de votre appareil:

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

Si votre appareil exécute un noyau ARM 32 bits, activez également les instructions NEON pour améliorer les performances:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 et 10

Si votre appareil démarre avec Android 9 ou 10, des paramètres de configuration du noyau légèrement différents sont nécessaires. Activez les paramètres suivants:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Si votre appareil utilise le chiffrement basé sur les fichiers, activez également les éléments suivants:

CONFIG_F2FS_FS_ENCRYPTION=y

Enfin, si votre appareil exécute un noyau ARM 32 bits, activez les instructions NEON pour améliorer les performances:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Modifications apportées à l'espace utilisateur

Pour les appareils équipés d'Android 10 ou version ultérieure, les modifications de l'espace utilisateur Adiantum sont déjà présentes.

Pour les appareils sous Android 9, sélectionnez les modifications suivantes:

Activer Adiantum sur votre appareil

Tout d'abord, assurez-vous que PRODUCT_SHIPPING_API_LEVEL est correctement défini sur votre appareil pour correspondre à la version d'Android avec laquelle il est lancé. Par exemple, un appareil lancé avec Android 11 doit disposer de PRODUCT_SHIPPING_API_LEVEL := 30. Cela est important, car certains paramètres de chiffrement ont des valeurs par défaut différentes selon les versions de lancement.

Appareils avec chiffrement basé sur les fichiers

Pour activer le chiffrement basé sur les fichiers Adiantum sur l'espace de stockage interne de votre appareil, ajoutez l'option suivante à la dernière colonne (colonne fs_mgr_flags) de la ligne de la partition userdata dans le fichier fstab de l'appareil:

fileencryption=adiantum

Si votre appareil est lancé avec Android 11 ou version ultérieure, vous devez également activer le chiffrement des métadonnées. Pour utiliser Adiantum pour le chiffrement des métadonnées sur le stockage interne, fs_mgr_flags pour userdata doit également contenir les options suivantes:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

Ensuite, activez le chiffrement Adiantum sur l'espace de stockage adoptable. Pour ce faire, définissez les propriétés système suivantes dans PRODUCT_PROPERTY_OVERRIDES:

Pour Android 11 ou version ultérieure:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

Pour Android 9 et 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Enfin, ajoutez éventuellement blk-crypto-fallback.num_keyslots=1 à la ligne de commande du noyau. Cela réduit légèrement l'utilisation de la mémoire lorsque le chiffrement des métadonnées Adiantum est utilisé. Avant de procéder, vérifiez que l'option de montage inlinecrypt n'est pas spécifiée dans fstab. Si elle est spécifiée, supprimez-la, car elle n'est pas nécessaire pour le chiffrement Adiantum et elle entraîne des problèmes de performances lorsqu'elle est utilisée avec blk-crypto-fallback.num_keyslots=1.

Pour vérifier que votre implémentation a fonctionné, créez un rapport de bug ou exécutez:

adb root
adb shell dmesg

Si Adiantum est correctement activé, le message suivant doit s'afficher dans le journal du noyau:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

Si vous avez activé le chiffrement des métadonnées, exécutez également la commande suivante pour vérifier que le chiffrement des métadonnées Adiantum est correctement activé:

adb root
adb shell dmctl table userdata

Le troisième champ de la sortie doit être xchacha12,aes-adiantum-plain64.

Appareils avec chiffrement complet du disque

Pour activer Adiantum et améliorer ses performances, définissez ces propriétés dans PRODUCT_PROPERTY_OVERRIDES:

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

Définir fde_sector_size sur 4096 améliore les performances, mais n'est pas nécessaire pour que Adiantum fonctionne. Pour utiliser ce paramètre, la partition userdata doit commencer à un décalage aligné sur 4 096 octets sur le disque.

Dans fstab, pour userdata, définissez:

forceencrypt=footer

Pour vérifier que votre implémentation a fonctionné, créez un rapport de bug ou exécutez:

adb root
adb shell dmesg

Si Adiantum est correctement activé, le message suivant doit s'afficher dans le journal du noyau:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"