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 Cryptography Extensions oder ein x86-basiertes Gerät mit AES-NI ausliefern, 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 Ausführung der Benchmarking-Quelle 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 Änderungen am Kernel und am Benutzerbereich vornehmen.
Kernel ändert sich
Adiantum wird von den allgemeinen Android-Kerneln ab Version 4.9 unterstützt.
Wenn der Kernel Ihres Geräts noch keine Adiantum-Unterstützung bietet, wählen Sie die unten aufgeführten Änderungen aus. Wenn Sie Probleme bei der Auswahl von Kirschen haben, können Geräte mit FDE ( Full-Disk Encryption ) den Patch fscrypt:
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 gestartet wird, 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 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 geringfügig andere Kernelkonfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Wenn Ihr Gerät eine dateibasierte Verschlüsselung verwendet, aktivieren Sie außerdem Folgendes:
CONFIG_F2FS_FS_ENCRYPTION=y
Wenn auf Ihrem Gerät ein 32-Bit-ARM-Kernel ausgeführt wird, aktivieren Sie 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
Benutzerbereich ändert sich
Bei Geräten mit Android 10 oder höher sind die Änderungen im Adiantum-Benutzerbereich bereits vorhanden.
Wählen Sie für Geräte mit Android 9 die folgenden Änderungen aus:
- cryptfs: Adiantum-Unterstützung hinzufügen
- cryptfs: Ermöglicht das Festlegen der Größe des dm-crypt-Sektors
- cryptfs: Runden Sie die Größe des dm-crypt-Geräts auf die Grenze des Kryptosektors ab
- cryptfs: Verbessert die Protokollierung der Erstellung von dm-crypt-Geräten
- libfscrypt: Adiantum-Unterstützung hinzufügen
- fs_mgr_fstab: Adiantum-Unterstützung hinzufügen
Aktivieren Sie Adiantum auf Ihrem Gerät
PRODUCT_SHIPPING_API_LEVEL
sicher, dass auf Ihrem Gerät PRODUCT_SHIPPING_API_LEVEL
richtig eingestellt ist, um mit der Android-Version PRODUCT_SHIPPING_API_LEVEL
, mit der es gestartet wird. Ein Gerät, das mit Android 11 PRODUCT_SHIPPING_API_LEVEL := 30
muss beispielsweise PRODUCT_SHIPPING_API_LEVEL := 30
. Dies ist wichtig, da einige der Verschlüsselungseinstellungen bei verschiedenen Startversionen unterschiedliche Standardeinstellungen haben.
Geräte mit dateibasierter Verschlüsselung
Fügen Sie der letzten Spalte (der Spalte fs_mgr_flags ) der Zeile für die userdata
in der fstab
Datei des Geräts die folgende Option hinzu, um die dateibasierte Adiantum-Verschlüsselung im internen Speicher Ihres Geräts zu userdata
:
fileencryption=adiantum
Wenn Ihr Gerät mit Android 11 oder höher gestartet wird, muss auch die Metadatenverschlüsselung aktiviert werden. 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
Aktivieren Sie schließlich die Adiantum-Verschlüsselung für einen akzeptablen Speicher . PRODUCT_PROPERTY_OVERRIDES
in PRODUCT_PROPERTY_OVERRIDES
die folgenden Systemeigenschaften 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
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, sollte dies im Kernel-Protokoll angezeigt werden:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Geräte mit Vollplattenverschlüsselung
PRODUCT_PROPERTY_OVERRIDES
diese Eigenschaften in PRODUCT_PROPERTY_OVERRIDES
um Adiantum zu aktivieren und seine Leistung zu verbessern:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Das Festlegen von fde_sector_size
auf 4096 verbessert die Leistung, ist jedoch nicht erforderlich, damit Adiantum funktioniert. Um diese Einstellung verwenden zu können, muss die Benutzerdatenpartition mit einem auf der Festplatte ausgerichteten Versatz von 4096 Byte beginnen.
In der fstab
für 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, sollte dies im Kernel-Protokoll angezeigt werden:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"