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ị thiếu các hướng 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 hao tổn hiệu suất. Để 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 | Bản vá dm-crypt |
---|---|---|
4.19 | Kernel 4.19 | Bản vá dm-crypt
|
4,14 | Kernel 4.14 | Bản vá dm-crypt
|
4,9 | Kernel 4.9 | Bản vá dm-crypt
|
Bật Adiantum trong hạt nhâ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 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 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 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 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 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 phân đoạn dm-crypt
- cryptfs: làm tròn kích thước thiết bị dm-crypt xuống ranh giới của phân đoạn mã hoá
- cryptfs: cải thiện việc ghi nhật ký tạo thiết bị dm-crypt
- libfscrypt: Thêm tính năng hỗ trợ Adiantum
- fs_mgr_fstab: Thêm tính năng hỗ trợ Adiantum
Bật Adiantum trong thiết bị
Trước tiên, hãy đảm bảo rằng thiết bị của bạn đã thiết lập PRODUCT_SHIPPING_API_LEVEL
đúng cách để 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 chế độ 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ị 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 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 bộ nhớ có thể chuyển đổi. Để 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 nhẹ mức sử dụng bộ nhớ khi sử dụng tính năng mã hoá siêu dữ liệu của Adiantum. Trước khi thực hiện việc này, hãy xác minh rằng tuỳ chọn gắn inlinecrypt
không đượ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 bật Adiantum đúng cách, bạn sẽ thấy thông tin 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 tính năng mã hoá siêu dữ liệu, hãy chạy thêm 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 userdata phải bắt đầu tại một độ lệch được 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 đã hoạt động, 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)"