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 lệnh 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, 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ị không có các lệnh AES CPU này, Adiantum cung cấp tính năng mã hoá trên thiết bị của bạn với mức hao tổn hiệu suất rất thấp. Để biết 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 một thiết bị chạy Android 9 trở lên, bạn cần thực hiện các thay đổi đối với nhân và không gian người dùng.
Thay đổi về nhân
Adiantum được các nhân chung của Android, phiên bản 4.9 trở lên hỗ trợ.
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 sự cố khi chọn lọc, các thiết bị sử dụng tính năng mã hoá toàn bộ ổ đĩa (FDE) có thể loại trừ bản vá fscrypt:
.
Phiên bản Kernel | Bản vá mã hoá và fscrypt | dm-crypt bản vá |
---|---|---|
4.19 | Kernel 4.19 | Bản vá dm-crypt
|
4,14 | Hạt nhân 4.14 | Bản vá dm-crypt
|
4,9 | Kernel 4.9 | 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 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 nhân hệ điều hành ARM 32 bit, hãy bật cả 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ì bạn cần phải thiết lập cấu hình hạt nhân 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 hệ điều hành 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 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 đối với không gian người dùng Adiantum đã được áp dụng.
Đối với các thiết bị chạy Android 9, hãy chọn lọc những thay đổi sau:
- cryptfs: Thêm tính năng hỗ trợ Adiantum
- cryptfs: Cho phép đặt 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 ngành của mật mã
- cryptfs: cải thiện việc ghi nhật ký quá trình tạo thiết bị dm-crypt
- libfscrypt: Thêm hỗ trợ của Adiantum
- fs_mgr_fstab: Thêm tính năng hỗ trợ Adiantum
Bật Adiantum trên 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ụ: thiết bị chạy 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ó các giá trị mặc định khác nhau trên các phiên bản phát hành.
Thiết bị có phương thức 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 tuỳ 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ị đang chạy Android 11 trở lên, bạn cũng phải bật tính năng mã hoá siêu dữ liệu. Để sử dụng Adiantum cho việc mã hoá siêu dữ liệu trên bộ nhớ trong, fs_mgr_flags cho userdata
cũng phải chứa các tuỳ chọn sau:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Tiếp theo, hãy bật tính năng mã hoá Adiantum trên phần bộ nhớ 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, tuỳ ý thêm blk-crypto-fallback.num_keyslots=1
vào dòng lệnh hạt nhân. Điều này làm giảm mức sử dụng bộ nhớ một chút khi sử dụng phương thức 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 tuỳ chọn gắn kết inlinecrypt
chưa được chỉ định trong fstab
.
Nếu được chỉ định, hãy xoá thuộc tính này vì không cần thiết cho việc mã hoá Adiantum và gây ra sự cố 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 quá trình triển khai của bạn đã hoạt động, hãy tạo 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 thông tin này trong nhật ký 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 cả mã 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 kết quả 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 công cụ này, 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 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 quá trình triển khai của bạn có hiệu quả, hãy tạo 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 thông tin 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)"