فعال کردن Adiantum

Adiantum یک روش رمزگذاری است که برای دستگاه‌های دارای Android 9 و بالاتر طراحی شده است که CPU آنها فاقد دستورالعمل‌های AES هستند. اگر یک دستگاه مبتنی بر ARM با افزونه های رمزنگاری ARMv8 یا دستگاه مبتنی بر x86 با AES-NI ارسال می کنید، نباید از Adiantum استفاده کنید. AES در آن پلتفرم ها سریعتر است.

برای دستگاه‌هایی که فاقد این دستورالعمل‌های CPU AES هستند، Adiantum رمزگذاری را بر روی دستگاه شما با سربار عملکرد بسیار کمی ارائه می‌کند. برای اعداد معیار، به مقاله Adiantum مراجعه کنید. برای اینکه منبع بنچمارک روی سخت افزار شما اجرا شود، منبع Adiantum را در GitHub ببینید.

برای فعال کردن Adiantum در دستگاه دارای Android 9 یا بالاتر، باید تغییرات هسته و تغییرات فضای کاربر را ایجاد کنید.

کرنل تغییر می کند

Adiantum توسط هسته های رایج اندروید، نسخه 4.9 و بالاتر پشتیبانی می شود.

اگر هسته دستگاه شما از قبل از Adiantum پشتیبانی نمی کند، تغییرات فهرست شده در زیر را انتخاب کنید. اگر در انتخاب گیلاس مشکل دارید، دستگاه‌هایی که از رمزگذاری فول دیسک (FDE) استفاده می‌کنند می‌توانند پچ fscrypt: را حذف کنند.

نسخه کرنل وصله های رمزنگاری و fscrypt پچ dm-crypt
4.19 هسته 4.19 پچ dm-crypt
4.14 هسته 4.14 پچ dm-crypt
4.9 هسته 4.9 پچ dm-crypt

Adiantum را در هسته خود فعال کنید

اندروید 11 و بالاتر

اگر دستگاه شما با Android 11 یا بالاتر راه اندازی می شود، تنظیمات زیر را در پیکربندی هسته دستگاه خود فعال کنید:

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

اندروید 9 و 10

اگر دستگاه شما با اندروید 9 یا 10 راه اندازی می شود، تنظیمات پیکربندی هسته کمی متفاوت مورد نیاز است. تنظیمات زیر را فعال کنید:

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

فضای کاربری تغییر می کند

برای دستگاه‌های دارای Android 10 یا بالاتر، تغییرات فضای کاربران Adiantum از قبل وجود دارد.

برای دستگاه‌های دارای Android 9، تغییرات زیر را انتخاب کنید:

Adiantum را در دستگاه خود فعال کنید

ابتدا مطمئن شوید که دستگاه شما PRODUCT_SHIPPING_API_LEVEL را به درستی تنظیم کرده است تا با نسخه اندرویدی که با آن راه اندازی می شود مطابقت داشته باشد. برای مثال، دستگاهی که با Android 11 راه اندازی می شود باید PRODUCT_SHIPPING_API_LEVEL := 30 داشته باشد. این مهم است زیرا برخی از تنظیمات رمزگذاری در نسخه های مختلف راه اندازی پیش فرض های متفاوتی دارند.

دستگاه هایی با رمزگذاری مبتنی بر فایل

برای فعال کردن رمزگذاری مبتنی بر فایل Adiantum در حافظه داخلی دستگاه خود، گزینه زیر را به آخرین ستون (ستون fs_mgr_flags ) ردیف مربوط به پارتیشن داده های userdata در فایل fstab دستگاه اضافه کنید:

fileencryption=adiantum

اگر دستگاه شما با Android 11 یا بالاتر راه اندازی می شود، فعال کردن رمزگذاری ابرداده نیز لازم است. برای استفاده از Adiantum برای رمزگذاری ابرداده در حافظه داخلی، fs_mgr_flags برای داده‌های userdata نیز باید دارای گزینه‌های زیر باشد:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

سپس، رمزگذاری Adiantum را در فضای ذخیره‌سازی قابل قبول فعال کنید. برای انجام این کار، ویژگی های سیستم زیر را در PRODUCT_PROPERTY_OVERRIDES تنظیم کنید:

برای اندروید 11 و بالاتر:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

برای اندروید 9 و 10:

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 root
adb shell dmesg

اگر Adiantum به درستی فعال شده باشد، باید این را در گزارش هسته مشاهده کنید:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

اگر رمزگذاری ابرداده را فعال کرده اید، موارد زیر را نیز اجرا کنید تا بررسی کنید که رمزگذاری ابرداده Adiantum به درستی فعال شده است:

adb root
adb 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 روی 4096 عملکرد را بهبود می بخشد، اما برای کار Adiantum لازم نیست. برای استفاده از این تنظیم، پارتیشن داده‌های کاربر باید از یک آفست 4096 بایتی روی دیسک شروع شود.

در fstab ، برای مجموعه داده های کاربر:

forceencrypt=footer

برای تأیید اینکه پیاده سازی شما کار می کند، یک گزارش اشکال تهیه کنید یا اجرا کنید:

adb root
adb shell dmesg

اگر Adiantum به درستی فعال شده باشد، باید این را در گزارش هسته مشاهده کنید:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"