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