Adiantum aktivieren

Adiantum ist eine Verschlüsselungsmethode, die für Geräte mit Android 9 und höher entwickelt wurde, deren CPUs keine AES- Anweisungen haben. Wenn Sie ein ARM-basiertes Gerät mit ARMv8-Kryptografieerweiterungen oder ein x86-basiertes Gerät mit AES-NI versenden, sollten Sie Adiantum nicht 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. Benchmarking-Zahlen finden Sie im Adiantum-Papier . Informationen zur Benchmarking-Quelle zur Ausführung auf Ihrer Hardware finden Sie in der 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-Kerneln ab Version 4.9 unterstützt.

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

Kernelversion Krypto- 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

Aktivieren Sie Adiantum in Ihrem Kernel

Android 11 und höher

Wenn Ihr Gerät mit Android 11 oder höher startet, aktivieren Sie die folgenden Einstellungen in der Kernelkonfiguration 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 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 startet, 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 Folgendes:

CONFIG_F2FS_FS_ENCRYPTION=y

Wenn Ihr Gerät schließlich einen 32-Bit-ARM-Kernel ausführt, aktivieren Sie 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

Änderungen im Userspace

Für Geräte mit Android 10 oder höher sind die Adiantum-Userspace-Änderungen bereits vorhanden.

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

Aktivieren Sie Adiantum auf Ihrem Gerät

Stellen Sie zunächst sicher, dass PRODUCT_SHIPPING_API_LEVEL auf Ihrem Gerät richtig eingestellt ist, damit es mit der Android-Version übereinstimmt, mit der es gestartet wird. Beispielsweise muss ein Gerät, das mit Android 11 gestartet wird PRODUCT_SHIPPING_API_LEVEL := 30 haben. Dies ist wichtig, da einige der Verschlüsselungseinstellungen in verschiedenen Startversionen unterschiedliche Standardeinstellungen haben.

Geräte mit dateibasierter Verschlüsselung

Um die dateibasierte Adiantum-Verschlüsselung im internen Speicher Ihres Geräts zu aktivieren, fügen Sie die folgende Option zur letzten Spalte (der fs_mgr_flags- Spalte) der Zeile für die userdata in der fstab Datei des Geräts hinzu:

fileencryption=adiantum

Wenn Ihr Gerät mit Android 11 oder höher startet, ist auch die Aktivierung der Metadatenverschlüsselung erforderlich. Um Adiantum für die Metadatenverschlüsselung im internen Speicher zu verwenden, müssen die fs_mgr_flags für userdata auch die folgenden Optionen enthalten:

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

Als nächstes aktivieren Sie die Adiantum-Verschlüsselung auf dem anpassbaren Speicher . Legen Sie dazu die folgenden Systemeigenschaften in PRODUCT_PROPERTY_OVERRIDES fest:

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

Fügen Sie abschließend optional blk-crypto-fallback.num_keyslots=1 zur Kernel-Befehlszeile hinzu. Dadurch wird die Speichernutzung leicht reduziert, wenn die Adiantum-Metadatenverschlüsselung verwendet wird. Bevor Sie dies tun, stellen Sie sicher, dass die inlinecrypt Mount-Option nicht in der fstab angegeben ist. Wenn es angegeben ist, entfernen Sie es, da es für die Adiantum-Verschlüsselung nicht benötigt wird und in Kombination mit blk-crypto-fallback.num_keyslots=1 zu Leistungsproblemen führt.

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 Folgendes im Kernel-Protokoll 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 lauten.

Geräte mit vollständiger Festplattenverschlüsselung

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

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

Das Festlegen fde_sector_size auf 4096 verbessert die Leistung, ist jedoch nicht erforderlich, damit Adiantum funktioniert. Um diese Einstellung zu verwenden, muss die Benutzerdatenpartition bei einem 4096-Byte-ausgerichteten Offset auf der Festplatte beginnen.

In der fstab für den Benutzerdatensatz:

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 Folgendes im Kernel-Protokoll sehen:

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