Aktivierung von Adiantum

Adiantum ist ein Verschlüsselungsverfahren für die Geräte entwickelt , mit Android 9 und höher , dessen CPUs fehlt AES Anweisungen. Falls Sie ein ARM-basiertes Gerät mit ARMv8 Cryptography Extensions oder ein x86-basierten Gerät mit AES-NI versenden, sollten Sie nicht Adiantum verwenden. AES ist auf diesen Plattformen schneller.

Für Geräte, denen diese AES-CPU-Anweisungen fehlen, bietet Adiantum eine Verschlüsselung auf Ihrem Gerät mit sehr geringem Leistungsaufwand. Für das Benchmarking Zahlen finden Sie in der Adiantum Papier . Für die Benchmarking - Quelle auf Ihrer Hardware finden Sie in der laufen Adiantum Quelle auf GitHub .

Um Adiantum auf einem Gerät mit Android 9 oder höher zu aktivieren, müssen Sie Kernel- und Userspace-Änderungen vornehmen.

Kernel-Änderungen

Adiantum wird von den gängigen Android-Kernels ab Version 4.9 unterstützt.

Wenn der Kernel Ihres Geräts noch nicht über Adiantum-Unterstützung verfügt, wählen Sie die unten aufgeführten Änderungen aus. Wenn Sie Probleme beim Rosinenpickerei haben sollte , Geräte mit Full-Disk - fscrypt: Verschlüsselung (FDE) können die ausschließen fscrypt: Patch.

Kernelversion Crypto- und fscrypt-Patches dm-crypt Patch
4.19 4.19 Kernel dm-crypt Patch
4.14 4.14 Kernel dm-crypt Patch
4.9 4.9 Kernel dm-crypt Patch

Aktiviere Adiantum in deinem Kernel

Android 11 und höher

Wenn Ihr Gerät mit Android 11 oder höher gestartet wird, aktivieren Sie die folgenden Einstellungen in der Kernel-Konfiguration Ihres Geräts:

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

Wenn auf Ihrem Gerät ein 32-Bit-ARM-Kernel ausgeführt wird, aktivieren Sie auch die NEON-Anweisungen, um die Leistung zu verbessern:

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

Android 9 und 10

Wenn Ihr Gerät mit Android 9 oder 10 gestartet wird, sind etwas andere Kernel-Konfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Wenn Ihr Gerät dateibasierte Verschlüsselung verwendet, aktivieren Sie außerdem:

CONFIG_F2FS_FS_ENCRYPTION=y

Wenn Ihr Gerät einen 32-Bit-ARM-Kernel ausführt, aktivieren Sie schließlich die NEON-Anweisungen, um die Leistung zu verbessern:

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

Userspace-Änderungen

Für Geräte mit Android 10 oder höher ausgeführt wird , die Adiantum User - Space Änderungen sind bereits vorhanden.

Wählen Sie für Geräte mit Android 9 die folgenden Änderungen aus:

Aktivieren Sie Adiantum in Ihrem Gerät

Erstens, stellen Sie sicher , dass Ihr Gerät hat PRODUCT_SHIPPING_API_LEVEL richtig eingestellt , die Android - Version passen es mit bringt. Zum Beispiel mit Android ein Gerät Abschuss 11 muss PRODUCT_SHIPPING_API_LEVEL := 30 . Dies ist wichtig, da einige der Verschlüsselungseinstellungen bei verschiedenen Startversionen unterschiedliche Standardwerte haben.

Geräte mit dateibasierter Verschlüsselung

Adiantum dateibasierte Verschlüsselung auf dem Gerät internen Speicher, fügen Sie die folgende Option zu der letzten Spalte (die fs_mgr_flags Spalte) der Zeile für das ermöglichen , userdata Partition in den Geräten fstab - Datei:

fileencryption=adiantum

Wenn Ihr Gerät mit Android 11 oder höher starten, dann ermöglicht , Metadaten - Verschlüsselung ist ebenfalls erforderlich. So verwenden Adiantum für Metadaten - Verschlüsselung auf internen Speicher, die fs_mgr_flags für userdata müssen auch die folgenden Optionen enthalten:

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

Als nächstes Adiantum Verschlüsselung aktiviert adoptable Lagerung . Dazu legen Sie die folgenden Systemeigenschaften in PRODUCT_PROPERTY_OVERRIDES :

Für Android 11 und höher:

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

Für Android 9 und 10:

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

Schließlich fügt wahl blk-crypto-fallback.num_keyslots=1 an die Kernel - Befehlszeile. Dadurch wird die Speichernutzung geringfügig reduziert, wenn die Adiantum-Metadatenverschlüsselung verwendet wird. Bevor Sie dies tun, stellen Sie sicher , dass die inlinecrypt Mount - Option nicht in der angegeben wird fstab . Wenn es angegeben ist, entfernen Sie diese, da sie nicht für Adiantum Verschlüsselung erforderlich, und es führt zu Problemen Leistung , wenn in Kombination mit verwendet blk-crypto-fallback.num_keyslots=1 .

Um zu überprüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:

adb root
adb shell dmesg

Wenn Adiantum korrekt aktiviert ist, sollten Sie dies im Kernel-Log sehen:

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

Wenn Sie die Metadatenverschlüsselung aktiviert haben, führen Sie außerdem Folgendes aus, um zu überprüfen, ob die Adiantum-Metadatenverschlüsselung korrekt aktiviert ist:

adb root
adb shell dmctl table userdata

Das dritte Feld der Ausgabe sollte xchacha12,aes-adiantum-plain64 .

Geräte mit Festplattenverschlüsselung

Um Adiantum zu aktivieren und seine Leistung zu verbessern, setzen Sie diese Eigenschaften in PRODUCT_PROPERTY_OVERRIDES :

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

Einstellen fde_sector_size bis 4096 verbessert die Leistung, ist aber nicht für Adiantum an Arbeit erforderlich. Um diese Einstellung zu verwenden, muss die Benutzerdatenpartition bei einem ausgerichteten Offset von 4096 Byte auf der Festplatte beginnen.

In der fstab für Benutzerdaten Set:

forceencrypt=footer

Um zu überprüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:

adb root
adb shell dmesg

Wenn Adiantum korrekt aktiviert ist, sollten Sie dies im Kernel-Log sehen:

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