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 mà thiếu CPU hướng dẫn dành cho 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 về CPU AES 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 thiết bị chạy Android 9 trở lên, bạn cần phải thực hiện thay đổi về nhân hệ điều hành và thay đổi không gian người dùng.
Thay đổi về nhân
Adiantum được hỗ trợ bởi các nhân phổ biến của Android, 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 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 | Hạt nhân 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 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, 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 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 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ý quá trình tạo thiết bị dm-crypt
- libfscrypt: Thêm hỗ trợ của Adiantum
- fs_mgr_fstab: Thêm 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 đã 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 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 của 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 (fs_mgr_flags
cột) của hàng cho phân vùng userdata
trong phân vùng của thiết bị
Tệp fstab
:
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 siêu dữ liệu
mã hoá trên bộ nhớ trong, fs_mgr_flags cho
userdata
cũng phải có 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ớ cho phép. Để thực hiện việc này, hãy đặt
các thuộc tính hệ thống sau đây 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 (không bắt buộc)
dòng lệnh kernel. Điều này làm giảm mức sử dụng bộ nhớ một chút khi Adiantum
có sử dụng phương thức mã hoá siêu dữ liệu. 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 quy tắc này được chỉ định, hãy xoá phương thức đó vì phương thức đó không cần thiết cho quy trình mã hoá Adiantum,
đồng thời gây ra 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 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 Bạn đã bật tính năng mã hoá siêu dữ liệu Adiantum đú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, 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
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 tại một độ dời đượ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)"