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