تفعيل adiantum

‫Adiantum هي طريقة تشفير مصمّمة للأجهزة التي تعمل بنظام التشغيل Android 9 والإصدارات الأحدث والتي لا تتضمّن وحدات المعالجة المركزية فيها تعليمات AES. إذا كنت ستشحن جهازًا يستند إلى ARM ومزوّدًا بـ "إضافات التشفير" ARMv8 أو جهازًا يستند إلى x86 ومزوّدًا بـ AES-NI، عليك عدم استخدام Adiantum. وتكون خوارزمية AES أسرع على هذه المنصات.

بالنسبة إلى الأجهزة التي لا تتضمّن تعليمات وحدة المعالجة المركزية AES هذه، يوفّر Adiantum التشفير على جهازك مع الحد الأدنى من تكلفة الأداء. للاطّلاع على أرقام قياس الأداء، راجِع ورقة Adiantum. للاطّلاع على مصدر قياس الأداء الذي يمكن تشغيله على جهازك، يُرجى الانتقال إلى مصدر Adiantum على GitHub.

لتفعيل Adiantum على جهاز يعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث، عليك إجراء تغييرات على النواة وتغييرات على مساحة المستخدم.

تغييرات النواة

يتوافق Adiantum مع النواة الشائعة لنظام التشغيل Android، الإصدار 4.9 والإصدارات الأحدث.

إذا لم يكن إصدار النواة على جهازك يتوافق مع 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.

بالنسبة إلى الأجهزة التي تعمل بالإصدار Android 9، اختَر التغييرات التالية:

تفعيل 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 و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)"