تفعيل adiantum

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

بالنسبة إلى الأجهزة التي لا تتضمّن تعليمات وحدة المعالجة المركزية (CPU) الخاصة بتشفير AES، يقدّم Adiantum التشفير على جهازك مع القليل جدًا من التأثير على الأداء. للاطّلاع على أرقام قياس الأداء، يُرجى الاطّلاع على ورقة Adiantum. لاستخدام مصدر اختبار الأداء على جهازك، يُرجى الاطّلاع على مصدر Adiantum على GitHub.

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

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

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

إذا لم يكن نواة جهازك متوافقة مع Adiantum، اختَر بعناية التغييرات الواردة أدناه. إذا كنت تواجه مشكلة في اختيار التحديثات، يمكن للأجهزة التي تستخدم تشفير القرص الكامل (FDE) استبعاد تحديث fscrypt: .

إصدار النواة تصحيحات Crypto وfscrypt تصحيح dm-crypt
4.19 الإصدار 4.19 من نواة Linux تصحيح dm-crypt
4.14 الإصدار 4.14 من نواة Linux تصحيح dm-crypt
4.9 الإصدار 4.9 من نواة Linux تصحيح 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

الإصداران 9 و10 من Android

إذا كان جهازك يعمل بالإصدار 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

بالنسبة إلى الإصدارَين 9 و10 من Android:

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 إلى سطر تعليمات برمجية kernel. يقلل ذلك من استخدام الذاكرة قليلاً عند استخدام تشفير metadata باستخدام Adiantum. قبل إجراء ذلك، تأكَّد من عدم تحديد خيار التثبيت inlinecrypt في fstab. إذا تم تحديده، أزِله، لأنّه غير مطلوب لتشفير Adiantum، ويتسبّب في مشاكل في الأداء عند استخدامه مع blk-crypto-fallback.num_keyslots=1.

للتأكّد من نجاح عملية التنفيذ، يمكنك إعداد تقرير أخطاء أو تنفيذ ما يلي:

adb root
adb shell dmesg

إذا تم تفعيل Adiantum بشكل صحيح، من المفترض أن يظهر لك هذا في سجلّ kernel:

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. لاستخدام هذا الإعداد، يجب أن يبدأ قسم userdata من بدء مُعدَّل 4096 بايت على القرص.

في fstab، اضبط userdata على:

forceencrypt=footer

للتأكّد من نجاح عملية التنفيذ، يمكنك إعداد تقرير أخطاء أو تنفيذ ما يلي:

adb root
adb shell dmesg

إذا تم تفعيل Adiantum بشكل صحيح، من المفترض أن يظهر لك هذا في سجلّ kernel:

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