Adiantum هي طريقة تشفير مصمّمة للأجهزة التي تعمل بنظام التشغيل Android 9 والإصدارات الأحدث والتي لا تتضمّن وحدات المعالجة المركزية (CPU) تعليمات AES. إذا كنت تشحن جهازًا يستند إلى ARM ويتضمّن "إضافات التشفير ARMv8" أو جهازًا يستند إلى x86 ويتضمّن AES-NI، لا تستخدِم Adiantum. تكون AES أسرع على هذه الأنظمة الأساسية.
بالنسبة إلى الأجهزة التي لا تتضمّن تعليمات AES لوحدة المعالجة المركزية، يوفّر Adiantum التشفير على جهازك مع تأثير ضئيل جدًا على الأداء. للاطّلاع على أرقام المقارنة المعيارية، يُرجى الرجوع إلى ورقة Adiantum البحثية. للاطّلاع على مصدر المقارنة المعيارية لتشغيله على جهازك، يُرجى الرجوع إلى مصدر Adiantum على GitHub.
لتفعيل Adiantum على جهاز يعمل بنظام التشغيل Android 9 أو إصدار أحدث، عليك إجراء تغييرات على النواة ومساحة المستخدم.
التغييرات على النواة
تتوافق النواة الشائعة في Android، الإصدار 4.9 والإصدارات الأحدث، مع Adiantum.
إذا كانت نواة جهازك لا تتوافق مع 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 في النواة
Android 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
Android 9 و10
إذا كان جهازك يتم تشغيله بنظام التشغيل Android 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، اختَر التغييرات التالية:
cryptfs: إضافة دعم Adiantumcryptfs: السماح بضبط حجم قطاع dm-cryptcryptfs: تقليل حجم جهاز dm-crypt إلى الحد الأدنى لحدود قطاع التشفيرcryptfs: تحسين تسجيل عملية إنشاء جهاز dm-cryptlibfscrypt: إضافة دعم Adiantumfs_mgr_fstab: إضافة دعم Adiantum
تفعيل Adiantum على جهازك
أولاً، تأكَّد من ضبط PRODUCT_SHIPPING_API_LEVEL بشكلٍ صحيح على جهازك ليتطابق مع إصدار Android الذي يتم تشغيله. على سبيل المثال، يجب أن يكون PRODUCT_SHIPPING_API_LEVEL := 30 لجهاز يتم تشغيله بنظام التشغيل Android 11. هذا مهم لأنّ بعض إعدادات التشفير لها إعدادات تلقائية مختلفة في إصدارات التشغيل المختلفة.
الأجهزة التي تستخدم التشفير على مستوى الملفات
لتفعيل التشفير على مستوى الملفات باستخدام 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:
بالنسبة إلى Android 11 والإصدارات الأحدث:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
بالنسبة إلى Android 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 في 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 على 4096 إلى تحسين الأداء، ولكنّه ليس مطلوبًا لكي يعمل Adiantum. لاستخدام هذا الإعداد، يجب أن يبدأ قسم userdata بإزاحة متوافقة مع 4096 بايت على القرص.
في fstab، اضبط ما يلي لـ userdata:
forceencrypt=footer
للتأكّد من أنّ عملية التنفيذ نجحت، أنشئ تقريرًا عن الأخطاء أو شغِّل ما يلي:
adb rootadb shell dmesg
إذا تم تفعيل Adiantum بشكلٍ صحيح، من المفترض أن يظهر ذلك في سجلّ النواة:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"