Adiantum 是一種加密方法,專為搭載 Android 9 以上版本的裝置所設計 缺少的 CPU AES 指示。如果運送的是採用 ARM 架構的 搭載 ARMv8 加密編譯擴充功能的裝置,或採用 AES-NI 的 x86 型裝置, 請務必「不要」使用 AdiantumAES 能加快這些要求 平台。
如果裝置沒有這些 AES CPU 指示,Adiantum 會在 大幅降低效能對於基準數字 請參閱 Adiantum 報告。基準化來源 適合在硬體上執行 Adiantum 來源 。
如要在搭載 Android 9 以上版本的裝置上啟用 Adiantum,您必須: 進行核心變更和使用者空間變更。
核心變更
Android 通用核心 4.9 以上版本支援 Adiantum。
如果裝置的核心沒有 Adiantum 支援,請挑選
變更。如果無法挑選食物,可以使用全磁碟加密 (FDE) 的裝置排除
fscrypt:
修補程式
核心版本 | 加密編譯與 fscrypt 修補程式 | dm-crypt 個修補程式 |
---|---|---|
4.19 | 4.19 核心 | dm-crypt 修補程式
|
4 月 14 日 | 4.14 核心 | dm-crypt 修補程式
|
4.9 人 | 4.9 核心 | dm-crypt 修補程式
|
在核心中啟用 Adiantum
Android 11 以上版本
如果裝置搭載 Android 11 以上版本, 在裝置的核心設定中啟用下列設定:
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
如果您的裝置執行的是 32 位元 ARM 核心,請一併啟用 NEON 指示,以便 改善成效:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 和 10
如果裝置搭載的是 Android 9 10,核心設定稍有不同 請務必完成相關設定啟用下列設定:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
如果您的裝置使用檔案型加密,請一併啟用:
CONFIG_F2FS_FS_ENCRYPTION=y
最後,如果您的裝置執行的是 32 位元 ARM 核心,請啟用 NEON 指示, 改善成效:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
使用者空間變更
如果是搭載 Android 10 以上版本的裝置,Adiantum 使用者空間變更已經存在。
針對搭載 Android 9 的裝置,選擇 進行的變更:
- cryptfs:新增 Adiantum 支援
- cryptfs:允許設定 dm-crypt 向量大小
- cryptfs:將 dm-crypt 裝置大小四捨五入至加密領域邊界
- cryptfs:改善記錄 dm-crypt 裝置的建立流程
- libfscrypt:新增 Adiantum 支援
- fs_mgr_fstab:新增 Adiantum 支援
在裝置上啟用 Adiantum
首先,請確認裝置已設定「PRODUCT_SHIPPING_API_LEVEL
」
正確對應及用於啟動程序的 Android 版本舉例來說
搭載 Android 11 的裝置必須具備
PRODUCT_SHIPPING_API_LEVEL := 30
。這很重要,因為
不同啟動版本的加密設定會有不同的預設值
採用檔案式加密機制的裝置
如要在裝置內部儲存空間啟用 Adiantum 檔案型加密功能,請新增
將下列選項新增至最後一欄 (fs_mgr_flags)。
欄) 插入裝置的 userdata
分區中
fstab
檔案:
fileencryption=adiantum
如果裝置搭載 Android 11 以上版本,
然後啟用
中繼資料也須加密。使用 Adiantum 處理中繼資料
對內部儲存空間進行加密,fs_mgr_flags,
userdata
也必須包含下列選項:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
接著,在採用式儲存空間上啟用 Adiantum 加密。方法很簡單,只要將
PRODUCT_PROPERTY_OVERRIDES
中的系統屬性:
Android 11 以上版本:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
Android 9 和 10:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096,瞭解如何調查及移除這項存取權。
最後,您可以視需要將 blk-crypto-fallback.num_keyslots=1
新增至
核心指令列這樣在 Adiantum 時,記憶體用量會稍微降低
也會採用中繼資料加密執行此操作前,請確認
fstab
中未指定「inlinecrypt
」掛接選項。
如果有指定的話,請將其移除,因為 Adiantum 加密不需要這個金鑰。
假如搭配使用
blk-crypto-fallback.num_keyslots=1
。
如要驗證實作是否正常運作,請取得錯誤報告或執行下列指令:
adb root
adb shell dmesg
如果 Adiantum 已正確啟用,核心記錄中應會顯示以下內容:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
如果您已啟用中繼資料加密,請同時執行下列指令,以驗證 已正確啟用 Adiantum 中繼資料加密:
adb root
adb shell dmctl table userdata
輸出的第三個欄位應該是
xchacha12,aes-adiantum-plain64
。
搭載全磁碟加密的裝置
如要啟用 Adiantum 並提升效能,請在
PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
將 fde_sector_size
設為 4096 可改善效能,但不要
Adiantum 運作所需的一切如要使用這項設定,使用者資料分區必須
從磁碟上的 4096 位元組對齊偏移開始。
在 fstab
中,針對使用者資料集:
forceencrypt=footer
如要驗證實作是否正常運作,請取得錯誤報告或執行下列指令:
adb root
adb shell dmesg
如果 Adiantum 已正確啟用,核心記錄中應會顯示以下內容:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"