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-Kryptoerweiterungen 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 ohne diese AES-CPU-Anweisungen bietet Adiantum eine Verschlüsselung auf Ihrem Gerät mit sehr geringem Leistungsaufwand. Benchmark-Zahlen finden Sie im Adiantum-Paper. Die Benchmark-Quelle für die Ausführung auf Ihrer Hardware finden Sie unter Adiantum 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 gemeinsamen Android-Kerneln der Version 4.9 und höher unterstützt.
Wenn der Kernel Ihres Geräts Adiantum noch nicht unterstützt, wählen Sie die unten aufgeführten Änderungen aus. Wenn Sie Probleme mit der Auswahl haben, können Geräte mit Datenträgervollverschlüsselung (Full-Disk Encryption, FDE)
den fscrypt: Patch ausschließen.
| Kernel-Version | 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
|
Adiantum im Kernel aktivieren
Android 11 und höher
Wenn Ihr Gerät mit Android 11 oder höher auf den Markt kommt, aktivieren Sie die folgenden Einstellungen in der Kernelkonfiguration des 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 auf den Markt kommt, sind etwas andere Kernelkonfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Wenn Ihr Gerät die dateibasierte Verschlüsselung verwendet, aktivieren Sie auch:
CONFIG_F2FS_FS_ENCRYPTION=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
Änderungen am Userspace
Bei Geräten mit Android 10 oder höher sind die Adiantum-Änderungen am Userspace bereits vorhanden.
Bei Geräten mit Android 9 wählen Sie die folgenden Änderungen aus:
- cryptfs: Add Adiantum support
- cryptfs: Allow setting dm-crypt sector size
- cryptfs: round down dm-crypt device size to crypto sector boundary
- cryptfs: improve logging of dm-crypt device creation
- libfscrypt: Add Adiantum support
- fs_mgr_fstab: Add Adiantum support
Adiantum auf dem Gerät aktivieren
Prüfen Sie zuerst, ob PRODUCT_SHIPPING_API_LEVEL auf Ihrem Gerät korrekt auf die Android-Version festgelegt ist, mit der es auf den Markt kommt. Bei einem Gerät, das mit Android 11 auf den Markt kommt, muss beispielsweise PRODUCT_SHIPPING_API_LEVEL := 30 festgelegt sein. Das ist wichtig, da einige der Verschlüsselungseinstellungen in den verschiedenen Startversionen unterschiedliche Standardwerte 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 (der 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 kommt,
dann ist auch die Metadatenverschlüsselung erforderlich. Wenn Sie Adiantum für die Metadatenverschlüsselung auf dem 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 auf anpassbarem 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 optional blk-crypto-fallback.num_keyslots=1 zur Kernel-Befehlszeile hinzu. Dadurch wird die Arbeitsspeichernutzung bei Verwendung der Adiantum-Metadatenverschlüsselung leicht reduziert. Prüfen Sie vorher, ob die Mount-Option inlinecrypt in der fstab angegeben ist.
Wenn sie angegeben ist, entfernen Sie sie, da sie für die Adiantum-Verschlüsselung nicht erforderlich ist und Leistungsprobleme verursacht, wenn sie in Kombination mit blk-crypto-fallback.num_keyslots=1 verwendet wird.
Wenn Sie prüfen möchten, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb rootadb shell dmesg
Wenn Adiantum korrekt aktiviert ist, sollte dies im Kernel-Log zu sehen sein:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Wenn Sie die Metadatenverschlüsselung aktiviert haben, führen Sie auch Folgendes aus, um zu prüfen, ob die Adiantum-Metadatenverschlüsselung korrekt aktiviert ist:
adb rootadb 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 die Leistung verbessern möchten, legen Sie diese 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, verbessert sich die Leistung, ist aber nicht erforderlich, damit Adiantum funktioniert. Damit diese Einstellung verwendet werden kann, muss die Partition „userdata“ mit einem um 4096 Byte ausgerichteten Offset auf dem Datenträger beginnen.
Legen Sie in der fstab für „userdata“ Folgendes fest:
forceencrypt=footer
Wenn Sie prüfen möchten, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb rootadb shell dmesg
Wenn Adiantum korrekt aktiviert ist, sollte dies im Kernel-Log zu sehen sein:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"