Adiantum یک روش رمزگذاری است که برای دستگاههایی با اندروید ۹ و بالاتر که CPU آنها فاقد دستورالعملهای AES است، طراحی شده است. اگر دستگاهی مبتنی بر ARM با افزونههای رمزنگاری ARMv8 یا دستگاهی مبتنی بر x86 با AES-NI خریداری میکنید، نباید از Adiantum استفاده کنید. AES در این پلتفرمها سریعتر است.
برای دستگاههایی که فاقد این دستورالعملهای AES CPU هستند، Adiantum رمزگذاری را با سربار عملکردی بسیار کمی روی دستگاه شما ارائه میدهد. برای مشاهدهی اعداد و ارقام مربوط به بنچمارک، به مقالهی Adiantum مراجعه کنید. برای مشاهدهی منبع بنچمارک برای اجرا روی سختافزار شما، به منبع Adiantum در GitHub مراجعه کنید.
برای فعال کردن Adiantum در دستگاهی که اندروید ۹ یا بالاتر دارد، باید تغییرات هسته و فضای کاربری را اعمال کنید.
تغییرات هسته
آدیانتوم توسط هستههای رایج اندروید، نسخه ۴.۹ و بالاتر، پشتیبانی میشود.
اگر هسته دستگاه شما از قبل از Adiantum پشتیبانی نمیکند، تغییرات ذکر شده در زیر را انتخاب کنید. اگر در انتخاب تغییرات مشکل دارید، دستگاههایی که از رمزگذاری کامل دیسک (FDE) استفاده میکنند میتوانند پچ fscrypt: را حذف کنند.
| نسخه هسته | وصلههای رمزنگاری و fscrypt | پچ dm-crypt |
|---|---|---|
| ۴.۱۹ | هسته ۴.۱۹ | پچ dm-crypt |
| ۴.۱۴ | هسته ۴.۱۴ | پچ dm-crypt |
| ۴.۹ | هسته ۴.۹ | پچ dm-crypt |
فعال کردن Adiantum در هسته سیستم شما
اندروید ۱۱ و بالاتر
اگر دستگاه شما با اندروید ۱۱ یا بالاتر راهاندازی میشود، تنظیمات زیر را در پیکربندی هسته دستگاه خود فعال کنید:
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
اگر دستگاه شما از هسته ARM 32 بیتی استفاده میکند، دستورالعملهای NEON را نیز برای بهبود عملکرد فعال کنید:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
اندروید ۹ و ۱۰
اگر دستگاه شما با اندروید ۹ یا ۱۰ راهاندازی میشود، تنظیمات پیکربندی هسته کمی متفاوت است. تنظیمات زیر را فعال کنید:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
اگر دستگاه شما از رمزگذاری مبتنی بر فایل استفاده میکند، موارد زیر را نیز فعال کنید:
CONFIG_F2FS_FS_ENCRYPTION=y
در نهایت، اگر دستگاه شما از هسته ARM 32 بیتی استفاده میکند، دستورالعملهای NEON را برای بهبود عملکرد فعال کنید:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
تغییرات فضای کاربری
برای دستگاههایی که اندروید ۱۰ یا بالاتر دارند، تغییرات فضای کاربری Adiantum از قبل وجود دارد.
برای دستگاههایی که اندروید ۹ را اجرا میکنند، تغییرات زیر را به دلخواه انتخاب کنید:
- cryptfs: پشتیبانی Adiantum را اضافه کنید
- cryptfs: اجازه تنظیم اندازه سکتور dm-crypt
- cryptfs: اندازه دستگاه dm-crypt را به مرز سکتور رمزنگاری گرد میکند.
- cryptfs: بهبود ثبت وقایع ایجاد دستگاه dm-crypt
- libfscrypt: پشتیبانی از Adiantum اضافه شد
- fs_mgr_fstab: اضافه کردن پشتیبانی از گل آدیانتوم
فعال کردن Adiantum در دستگاه شما
ابتدا، مطمئن شوید که PRODUCT_SHIPPING_API_LEVEL دستگاه شما به درستی تنظیم شده باشد تا با نسخه اندرویدی که با آن راهاندازی میشود مطابقت داشته باشد. به عنوان مثال، دستگاهی که با اندروید ۱۱ راهاندازی میشود باید PRODUCT_SHIPPING_API_LEVEL := 30 داشته باشد. این مهم است زیرا برخی از تنظیمات رمزگذاری در نسخههای راهاندازی مختلف، پیشفرضهای متفاوتی دارند.
دستگاههایی با رمزگذاری مبتنی بر فایل
برای فعال کردن رمزگذاری مبتنی بر فایل Adiantum در حافظه داخلی دستگاه خود، گزینه زیر را به آخرین ستون (ستون fs_mgr_flags ) از ردیف مربوط به پارتیشن userdata در فایل fstab دستگاه اضافه کنید:
fileencryption=adiantum
اگر دستگاه شما با اندروید ۱۱ یا بالاتر راهاندازی میشود، فعال کردن رمزگذاری فراداده نیز الزامی است. برای استفاده از Adiantum برای رمزگذاری فراداده در حافظه داخلی، fs_mgr_flags برای userdata باید شامل گزینههای زیر نیز باشد:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
در مرحله بعد، رمزگذاری Adiantum را روی حافظه adoptable فعال کنید. برای انجام این کار، ویژگیهای سیستمی زیر را در PRODUCT_PROPERTY_OVERRIDES تنظیم کنید:
برای اندروید ۱۱ و بالاتر:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
برای اندروید ۹ و ۱۰:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
در نهایت، به صورت اختیاری، blk-crypto-fallback.num_keyslots=1 را به خط فرمان هسته اضافه کنید. این کار هنگام استفاده از رمزگذاری فراداده Adiantum، میزان استفاده از حافظه را کمی کاهش میدهد. قبل از انجام این کار، بررسی کنید که گزینه inlinecrypt mount در fstab مشخص نشده باشد. اگر مشخص شده است، آن را حذف کنید، زیرا برای رمزگذاری Adiantum لازم نیست و هنگام استفاده در ترکیب با blk-crypto-fallback.num_keyslots=1 باعث مشکلات عملکردی میشود.
برای تأیید اینکه پیادهسازی شما کار کرده است، یک گزارش اشکال بگیرید یا دستور زیر را اجرا کنید:
adb rootadb shell dmesg
اگر Adiantum به درستی فعال شده باشد، باید این را در لاگ هسته ببینید:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
اگر رمزگذاری فراداده را فعال کردهاید، برای تأیید فعال بودن صحیح رمزگذاری فراداده Adiantum، دستور زیر را نیز اجرا کنید:
adb rootadb shell dmctl table userdata
فیلد سوم خروجی باید xchacha12,aes-adiantum-plain64 باشد.
دستگاههایی با رمزگذاری کامل دیسک
برای فعال کردن Adiantum و بهبود عملکرد آن، این ویژگیها را در PRODUCT_PROPERTY_OVERRIDES تنظیم کنید:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
تنظیم fde_sector_size روی ۴۰۹۶ عملکرد را بهبود میبخشد، اما برای کار کردن Adiantum الزامی نیست. برای استفاده از این تنظیم، پارتیشن userdata باید از یک آفست همتراز ۴۰۹۶ بایتی روی دیسک شروع شود.
در fstab ، برای مجموعه userdata:
forceencrypt=footer
برای تأیید اینکه پیادهسازی شما کار کرده است، یک گزارش اشکال بگیرید یا دستور زیر را اجرا کنید:
adb rootadb shell dmesg
اگر Adiantum به درستی فعال شده باشد، باید این را در لاگ هسته ببینید:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"