Включение Adiantum

Adiantum является метод шифрования предназначен для устройств , работающих под управлением Android 9 и выше , чьи процессоры не имеют AES инструкции. Если вы отправляете в ARM на основе устройства с ARMv8 Cryptography Extensions или х86 устройство с AES-NI, вы не должны использовать Adiantum. AES работает быстрее на этих платформах.

Для устройств, не имеющих этих инструкций ЦП AES, Adiantum обеспечивает шифрование на вашем устройстве с очень небольшими издержками производительности. Для сопоставительного анализа чисел см бумаги Adiantum . Для сопоставительного анализа источника для запуска на вашем оборудовании см источник Adiantum на GitHub .

Чтобы включить Adiantum на устройстве под управлением Android 9 или более поздней версии, вам необходимо внести изменения в ядро ​​и пользовательское пространство.

Изменения ядра

Adiantum поддерживается общими ядрами Android версии 4.9 и выше.

Если ядро ​​вашего устройства еще не поддерживает Adiantum, выберите изменения, перечисленные ниже. Если у вас возникли проблемы вишневого комплектование, устройство , использующее полный шифрование диска (FDE) может исключить fscrypt: патч.

Версия ядра Патчи Crypto и fscrypt dm-crypt патч
4,19 4.19 ядро dm-crypt патч
4,14 4.14 ядро dm-crypt патч
4.9 4.9 ядро dm-crypt патч

Включите Adiantum в вашем ядре

Android 11 и выше

Если ваше устройство запускается с Android 11 или более поздней версии, включите следующие параметры в конфигурации ядра вашего устройства:

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

Если ваше устройство работает под управлением 32-разрядного ядра ARM, также включите инструкции NEON для повышения производительности:

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

Android 9 и 10

Если ваше устройство запускается с Android 9 или 10, то требуются немного другие настройки конфигурации ядра. Включите следующие настройки:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Если на вашем устройстве используется файловое шифрование, включите также:

CONFIG_F2FS_FS_ENCRYPTION=y

Наконец, если на вашем устройстве установлено 32-разрядное ядро ​​ARM, включите инструкции NEON для повышения производительности:

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

Изменения в пользовательском пространстве

Для устройств , работающих под управлением Android 10 или выше, изменения в пользовательском пространстве Adiantum уже присутствуют.

Для устройств под управлением Android 9 выделите следующие изменения:

Включите Adiantum на вашем устройстве

Во- первых, убедитесь , что устройство имеет PRODUCT_SHIPPING_API_LEVEL правильно установлен в соответствии с Android версии он начинает с. Например, запуск устройства с Android 11 должен иметь PRODUCT_SHIPPING_API_LEVEL := 30 . Это важно, потому что некоторые параметры шифрования имеют разные значения по умолчанию в разных версиях запуска.

Устройства с файловым шифрованием

Чтобы включить Adiantum шифрования файлов на основе внутренней памяти вашего устройства, добавьте следующий параметр в последний столбец (столбец fs_mgr_flags) строки , для userdata раздела в устройстве fstab файла:

fileencryption=adiantum

Если устройство запуска с Android 11 или выше, а затем позволяет метаданных шифрования также требуется. Для того, чтобы использовать Adiantum для метаданных шифрования на внутренней памяти, то fs_mgr_flags для userdata должен также содержать следующие параметры:

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

Затем включить шифрование Adiantum на усыновлен хранения . Для этого установите следующие свойства системы в PRODUCT_PROPERTY_OVERRIDES :

Для Android 11 и выше:

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

Для Android 9 и 10:

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

Наконец, при необходимости добавлять blk-crypto-fallback.num_keyslots=1 в командной строке ядра. Это немного уменьшит использование памяти при использовании шифрования метаданных Adiantum. Прежде чем это сделать, убедитесь , что inlinecrypt опция монтирования не указан в fstab . Если указано, удалить его, так как он не нужен для шифрования Adiantum, и это вызывает проблемы производительности при использовании в сочетании с blk-crypto-fallback.num_keyslots=1 .

Чтобы убедиться, что ваша реализация работает, создайте отчет об ошибке или запустите:

adb root
adb shell dmesg

Если Adiantum включен правильно, вы должны увидеть это в журнале ядра:

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

Если вы включили шифрование метаданных, также выполните следующую команду, чтобы убедиться, что шифрование метаданных Adiantum включено правильно:

adb root
adb shell dmctl table userdata

Третье поле выходного сигнала должно быть xchacha12,aes-adiantum-plain64 .

Устройства с полнодисковым шифрованием

Чтобы включить Adiantum и повысить его производительность, установить эти свойства в PRODUCT_PROPERTY_OVERRIDES :

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

Установка fde_sector_size 4096 повышает производительность, но не является обязательным для Adiantum к работе. Чтобы использовать этот параметр, раздел пользовательских данных должен начинаться с выровненного смещения 4096 байт на диске.

В fstab для пользовательских данных набора:

forceencrypt=footer

Чтобы убедиться, что ваша реализация работает, создайте отчет об ошибке или запустите:

adb root
adb shell dmesg

Если Adiantum включен правильно, вы должны увидеть это в журнале ядра:

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