Adiantum ist eine Verschlüsselungsmethode, die für Geräte mit Android 9 und höher entwickelt wurde, deren CPUs keine AES-Befehle unterstützen. 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.
Auf Geräten, die diese AES-CPU-Befehle nicht unterstützen, bietet Adiantum eine Verschlüsselung mit sehr geringem Leistungsaufwand. Benchmarking-Zahlen finden Sie im Adiantum-Artikel. Informationen zum Ausführen der Benchmarking-Quelle auf Ihrer Hardware 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 Kernel- und Userspace-Änderungen vornehmen.
Kernel-Änderungen
Adiantum wird von den gemeinsamen Android-Kerneln ab Version 4.9 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 einzelner Änderungen haben, kann der fscrypt:
-Patch auf Geräten mit Datenträgervollverschlüsselung (Full-Disk Encryption, FDE) ausgeschlossen werden.
Kernel-Version | 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
|
Adiantum im Kernel aktivieren
Android 11 oder höher
Wenn Ihr Gerät mit Android 11 oder höher auf den Markt kommt, 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-Befehle, 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 leicht unterschiedliche Einstellungen für die Kernelkonfiguration 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 außerdem:
CONFIG_F2FS_FS_ENCRYPTION=y
Wenn auf Ihrem Gerät ein 32‑Bit-ARM-Kernel ausgeführt wird, aktivieren Sie NEON-Befehle, 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 Nutzerbereich
Auf Geräten mit Android 10 oder höher sind die Adiantum-Änderungen im Nutzerbereich bereits vorhanden.
Für Geräte mit Android 9 müssen die folgenden Änderungen per Cherry-Picking übernommen werden:
- cryptfs: Add Adiantum support
- cryptfs: Allow setting dm-crypt sector size (cryptfs: Festlegen der dm-crypt-Sektorgröße zulassen)
- cryptfs: dm-crypt-Gerätegröße auf die Grenze des Kryptosektors abrunden
- cryptfs: improve logging of dm-crypt device creation (cryptfs: Protokollierung der Erstellung von dm-crypt-Geräten verbessern)
- 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
richtig auf die Android-Version eingestellt ist, mit der das Gerät gestartet wird. Ein Gerät, das mit Android 11 auf den Markt kommt, muss beispielsweise PRODUCT_SHIPPING_API_LEVEL := 30
haben. Das ist wichtig, da einige der Verschlüsselungseinstellungen in verschiedenen Launch-Versionen 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 Partition userdata
in der Datei fstab
des Geräts die folgende Option hinzu:
fileencryption=adiantum
Wenn Ihr Gerät mit Android 11 oder höher auf den Markt kommt, ist auch die Aktivierung der Metadatenverschlüsselung erforderlich. 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 adoptable storage. Legen Sie dazu die folgenden Systemattribute in PRODUCT_PROPERTY_OVERRIDES
fest:
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
in die Kernel-Befehlszeile ein. Dadurch wird die Arbeitsspeichernutzung bei Verwendung der Adiantum-Metadatenverschlüsselung leicht reduziert. Prüfen Sie zuerst, 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 in Kombination mit blk-crypto-fallback.num_keyslots=1
Leistungsprobleme verursacht.
Um zu prüfen, ob die Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum richtig aktiviert ist, sollte dies im Kernel-Log angezeigt werden:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Wenn Sie die Metadatenverschlüsselung aktiviert haben, führen Sie auch den folgenden Befehl aus, um zu prü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
sein.
Geräte mit Datenträgerverschlüsselung
Wenn Sie Adiantum aktivieren und die Leistung verbessern möchten, legen Sie die folgenden Attribute 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. Damit Sie diese Einstellung verwenden können, muss die userdata-Partition auf dem Datenträger an einem 4096‑Byte-ausgerichteten Offset beginnen.
Legen Sie im fstab
für Nutzerdaten Folgendes fest:
forceencrypt=footer
Um zu prüfen, ob die Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum richtig aktiviert ist, sollte dies im Kernel-Log angezeigt werden:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"