Adiantum là một phương pháp mã hóa được thiết kế cho các thiết bị chạy Android 9 trở lên có CPU thiếu hướng dẫn AES . Nếu bạn đang vận chuyển thiết bị dựa trên ARM có Tiện ích mở rộng mã hóa ARMv8 hoặc thiết bị dựa trên x86 với AES-NI, bạn không nên sử dụng Adiantum. AES nhanh hơn trên các nền tảng đó.
Đối với các thiết bị thiếu các hướng dẫn CPU AES này, Adiantum cung cấp mã hóa trên thiết bị của bạn với chi phí hiệu suất rất thấp. Để biết số điểm chuẩn, hãy xem bài báo Adiantum . Để nguồn đo điểm chuẩn chạy trên phần cứng của bạn, hãy xem nguồn Adiantum trên GitHub .
Để bật Adiantum trên thiết bị chạy Android 9 trở lên, bạn cần thực hiện thay đổi nhân và thay đổi không gian người dùng.
Thay đổi nhân
Adiantum được hỗ trợ bởi các hạt nhân chung của Android, phiên bản 4.9 trở lên.
Nếu hạt nhân của thiết bị của bạn chưa có hỗ trợ Adiantum, hãy chọn những thay đổi được liệt kê bên dưới. Nếu bạn gặp sự cố khi chọn anh đào, các thiết bị sử dụng mã hóa toàn đĩa (FDE) có thể loại trừ fscrypt:
patch.
Phiên bản hạt nhân | Các bản vá mật mã và fscrypt | bản vá dm-crypt |
---|---|---|
4,19 | Hạt nhân 4,19 | bản vá dm-crypt |
4,14 | Nhân 4,14 | bản vá dm-crypt |
4,9 | 4,9 hạt nhân | bản vá dm-crypt |
Bật Adiantum trong nhân của bạn
Android 11 trở lên
Nếu thiết bị của bạn đang chạy Android 11 trở lên, hãy bật các cài đặt sau trong cấu hình hạt nhân của thiết bị:
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
Nếu thiết bị của bạn đang chạy nhân ARM 32-bit, hãy bật hướng dẫn NEON để cải thiện hiệu suất:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 và 10
Nếu thiết bị của bạn đang chạy Android 9 hoặc 10, thì cần có các cài đặt cấu hình hạt nhân hơi khác. Bật các cài đặt sau:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Nếu thiết bị của bạn sử dụng mã hóa dựa trên tệp, hãy bật:
CONFIG_F2FS_FS_ENCRYPTION=y
Cuối cùng, nếu thiết bị của bạn chạy nhân ARM 32-bit, hãy bật hướng dẫn NEON để cải thiện hiệu suất:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Thay đổi không gian người dùng
Đối với các thiết bị chạy Android 10 trở lên, các thay đổi về không gian người dùng Adiantum đã có sẵn.
Đối với các thiết bị chạy Android 9, hãy chọn những thay đổi sau:
- cryptfs: Thêm hỗ trợ Adiantum
- cryptfs: Cho phép thiết lập kích thước khu vực dm-crypt
- cryptfs: làm tròn kích thước thiết bị dm-crypt xuống ranh giới khu vực tiền điện tử
- cryptfs: cải thiện việc ghi nhật ký tạo thiết bị dm-crypt
- libfscrypt: Thêm hỗ trợ Adiantum
- fs_mgr_fstab: Thêm hỗ trợ Adiantum
Bật Adiantum trong thiết bị của bạn
Trước tiên, hãy đảm bảo rằng thiết bị của bạn đã đặt PRODUCT_SHIPPING_API_LEVEL
chính xác để khớp với phiên bản Android mà thiết bị đang chạy. Ví dụ: một thiết bị chạy Android 11 phải có PRODUCT_SHIPPING_API_LEVEL := 30
. Điều này quan trọng vì một số cài đặt mã hóa có các giá trị mặc định khác nhau trên các phiên bản khởi chạy khác nhau.
Thiết bị có mã hóa dựa trên tệp
Để bật mã hóa dựa trên tệp Adiantum trên bộ nhớ trong của thiết bị, hãy thêm tùy chọn sau vào cột cuối cùng (cột fs_mgr_flags ) của hàng cho phân vùng userdata
liệu người dùng trong tệp fstab
của thiết bị:
fileencryption=adiantum
Nếu thiết bị của bạn đang chạy Android 11 trở lên, thì việc bật mã hóa siêu dữ liệu cũng là bắt buộc. Để sử dụng Adiantum cho mã hóa siêu dữ liệu trên bộ nhớ trong, fs_mgr_flags cho dữ liệu người userdata
cũng phải chứa các tùy chọn sau:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Tiếp theo, bật mã hóa Adiantum trên bộ nhớ có thể chấp nhận. Để thực hiện việc này, hãy đặt các thuộc tính hệ thống sau trong PRODUCT_PROPERTY_OVERRIDES
:
Đối với Android 11 trở lên:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
Đối với Android 9 và 10:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Cuối cùng, tùy chọn thêm blk-crypto-fallback.num_keyslots=1
vào dòng lệnh hạt nhân. Điều này sẽ làm giảm mức sử dụng bộ nhớ một chút khi sử dụng mã hóa siêu dữ liệu Adiantum. Trước khi thực hiện việc này, hãy xác minh rằng tùy chọn mount inlinecrypt
không được chỉ định trong fstab
. Nếu nó được chỉ định, hãy xóa nó vì nó không cần thiết cho mã hóa Adiantum và nó gây ra các vấn đề về hiệu suất khi được sử dụng kết hợp với blk-crypto-fallback.num_keyslots=1
.
Để xác minh rằng việc triển khai của bạn đã hoạt động, hãy báo cáo lỗi hoặc chạy:
adb root
adb shell dmesg
Nếu Adiantum được bật đúng cách, bạn sẽ thấy điều này trong nhật ký hạt nhân:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Nếu bạn đã bật mã hóa siêu dữ liệu, hãy chạy phần sau để xác minh rằng mã hóa siêu dữ liệu Adiantum được bật chính xác:
adb root
adb shell dmctl table userdata
Trường thứ ba của đầu ra phải là xchacha12,aes-adiantum-plain64
.
Thiết bị có mã hóa toàn đĩa
Để bật Adiantum và cải thiện hiệu suất của nó, hãy đặt các thuộc tính này trong PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Đặt fde_sector_size
thành 4096 cải thiện hiệu suất, nhưng không bắt buộc để Adiantum hoạt động. Để sử dụng cài đặt này, phân vùng dữ liệu người dùng phải bắt đầu ở độ lệch căn chỉnh 4096 byte trên đĩa.
Trong fstab
, đối với tập dữ liệu người dùng:
forceencrypt=footer
Để xác minh rằng việc triển khai của bạn đã hoạt động, hãy báo cáo lỗi hoặc chạy:
adb root
adb shell dmesg
Nếu Adiantum được bật đúng cách, bạn sẽ thấy điều này trong nhật ký hạt nhân:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"