Adiantum ist eine Verschlüsselungsmethode für Geräte mit Android 9 und höher, 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 ausliefern, sollten Sie keinesfalls Adiantum verwenden. AES ist auf diesen Plattformen schneller.
Auf Geräten ohne diese AES-CPU-Anweisungen bietet Adiantum eine Verschlüsselung mit sehr geringem Leistungsoverhead. Benchmarkzahlen finden Sie im Adiantum-Artikel. Die Benchmarking-Quelle, die auf Ihrer Hardware ausgeführt werden soll, finden Sie in der Adiantum-Quelle auf GitHub.
Wenn Sie Adiantum auf einem Gerät mit Android 9 oder höher aktivieren möchten, müssen Sie Änderungen am Kernel und am Userspace vornehmen.
Kerneländerungen
Adiantum wird von den Android Common Kernels ab Version 4.9 unterstützt.
Wenn der Kernel Ihres Geräts noch keine Adiantum-Unterstützung hat, können Sie die unten aufgeführten Änderungen auswählen. Wenn Sie Probleme beim Auswählen von Geräten haben, können Sie den fscrypt:
-Patch für Geräte mit Datenträgervollverschlüsselung (Full Disk Encryption, FDE) ausschließen.
Kernel-Version | Crypto- und fscrypt-Patches | dm-crypt -Patch |
---|---|---|
4.19 | Kernel 4.19 | dm-crypt -Patch
|
4.14 | 4.14-Kernel | dm-crypt -Patch
|
4.9 | 4.9-Kernel | dm-crypt -Patch
|
Adiantum in Ihrem Kernel aktivieren
Android 11 oder höher
Wenn Ihr Gerät mit Android 11 oder höher gestartet wird, aktivieren Sie in der Kernelkonfiguration Ihres Geräts die folgenden Einstellungen:
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 gestartet wird, sind etwas andere Kernelkonfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Wenn auf Ihrem Gerät die dateibasierte Verschlüsselung verwendet wird, aktivieren Sie auch Folgendes:
CONFIG_F2FS_FS_ENCRYPTION=y
Wenn auf Ihrem Gerät ein 32-Bit-ARM-Kernel ausgeführt wird, 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
Auf Geräten mit Android 10 oder höher sind die Adiantum-Änderungen im Userspace bereits vorhanden.
Für Geräte mit Android 9 können Sie die folgenden Änderungen auswählen:
- cryptfs: Adiantum-Unterstützung hinzufügen
- cryptfs: Einstellung der dm-crypt-Sektorgröße zulassen
- cryptfs: dm-crypt-Gerätegröße auf die Grenze des Kryptosektors herunterrunden
- cryptfs: Verbesserung der Protokollierung der dm-crypt-Geräteerstellung
- libfscrypt: Adiantum-Unterstützung hinzufügen
- fs_mgr_fstab: Adiantum-Unterstützung hinzufügen
Adiantum auf Ihrem Gerät aktivieren
Prüfen Sie zuerst, ob PRODUCT_SHIPPING_API_LEVEL
auf Ihrem Gerät richtig für die Android-Version festgelegt ist, mit der es gestartet wird. Ein Gerät, das mit Android 11 auf den Markt gebracht wird, muss beispielsweise PRODUCT_SHIPPING_API_LEVEL := 30
haben. Das ist wichtig, da einige der Verschlüsselungseinstellungen in verschiedenen Release-Versionen unterschiedliche Standardeinstellungen haben.
Geräte mit dateibasierter Verschlüsselung
Wenn Sie die dateibasierte Adiantum-Verschlüsselung auf dem internen Speicher Ihres Geräts aktivieren möchten, fügen Sie der letzten Spalte (fs_mgr_flags) der Zeile für die userdata
-Partition in der fstab
-Datei des Geräts die folgende Option hinzu:
fileencryption=adiantum
Wenn Ihr Gerät mit Android 11 oder höher auf den Markt gebracht wird, muss außerdem die Verschlüsselung von Metadaten aktiviert werden. Wenn Sie Adiantum für die Metadatenverschlüsselung im internen Speicher verwenden möchten, müssen die fs_mgr_flags für userdata
auch die folgenden Optionen enthalten:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Aktivieren Sie als Nächstes die Adiantum-Verschlüsselung für adaptablen Speicher. Legen Sie dazu in PRODUCT_PROPERTY_OVERRIDES
die folgenden Systemeigenschaften fest:
Android 11 und höher:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
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 der Kernel-Befehlszeile optional blk-crypto-fallback.num_keyslots=1
hinzu. Dadurch wird die Arbeitsspeichernutzung bei der Verwendung der Adiantum-Metadatenverschlüsselung leicht reduziert. Prüfen Sie vorher, ob die Bereitstellungsoption inlinecrypt
nicht in fstab
angegeben ist.
Entfernen Sie sie, falls sie angegeben ist, da sie für die Adiantum-Verschlüsselung nicht erforderlich ist und in Kombination mit blk-crypto-fallback.num_keyslots=1
zu Leistungsproblemen führt.
Um zu prüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum richtig aktiviert ist, sollte im Kernel-Log Folgendes angezeigt werden:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Wenn Sie die Metadatenverschlüsselung aktiviert haben, führen Sie auch die folgenden Schritte aus, um zu prüfen, ob die Adiantum-Metadatenverschlüsselung richtig aktiviert ist:
adb root
adb shell dmctl table userdata
Das dritte Feld der Ausgabe sollte xchacha12,aes-adiantum-plain64
sein.
Geräte mit Datenträgervollverschlüsselung
Wenn Sie Adiantum aktivieren und seine Leistung verbessern möchten, legen Sie die folgenden Eigenschaften in PRODUCT_PROPERTY_OVERRIDES
fest:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Wenn Sie fde_sector_size
auf 4096 festlegen, wird die Leistung verbessert. Dies ist jedoch nicht erforderlich, damit Adiantum funktioniert. Wenn Sie diese Einstellung verwenden möchten, muss die userdata-Partition auf dem Laufwerk an einem auf 4.096 Byte ausgerichteten Offset beginnen.
Legen Sie in der fstab
für „userdata“ Folgendes fest:
forceencrypt=footer
Um zu prüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum richtig aktiviert ist, sollte im Kernel-Log Folgendes angezeigt werden:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"