Adiantum هي طريقة تشفير مصمّمة للأجهزة التي تعمل بنظام التشغيل Android 9 والإصدارات الأحدث والتي لا تتضمّن وحدات المعالجة المركزية فيها تعليمات AES. إذا كنت بصدد شحن جهاز يستند إلى ARM مزوّد بـ ARMv8 Cryptography Extensions أو جهاز يستند إلى x86 مزوّد بـ AES-NI، عليك عدم استخدام Adiantum. ويكون معيار AES أسرع على تلك المنصات.
بالنسبة إلى الأجهزة التي لا تحتوي على تعليمات وحدة المعالجة المركزية (CPU) AES هذه، توفّر Adiantum التشفير على مع أداء منخفض جدًا على الأداء. للاطّلاع على أرقام قياس الأداء، يُرجى الاطّلاع على ورقة Adiantum. لاستخدام مصدر قياس الأداء على جهازك، يُرجى الاطّلاع على مصدر Adiantum على GitHub.
لتفعيل خدمة Adiantum على جهاز يعمل بالإصدار 9 من نظام التشغيل Android أو إصدار أحدث، عليك تنفيذ ما يلي: إجراء تغييرات على النواة وتغييرات على مساحة المستخدم.
تغييرات في النواة
يتوافق Adiantum مع النواة الشائعة لنظام التشغيل Android، الإصدار 4.9 والإصدارات الأحدث.
إذا لم يكن نواة جهازك متوافقة مع Adiantum، اختَر بعناية
التغييرات الواردة أدناه. في حال مواجهة مشكلة في الاختيار، يمكن للأجهزة التي تستخدم تشفير القرص الكامل (FDE) استبعاد
التصحيح fscrypt:
.
إصدار النواة | تصحيحات التعمية والتشفير | تصحيح واحد (dm-crypt ) |
---|---|---|
4.19 | النواة 4.19 | رمز التصحيح dm-crypt
|
4.14 | الإصدار 4.14 من نواة Linux | رمز التصحيح 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
الإصداران 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، اختَر بعناية التغييرات التالية:
- cryptfs: إضافة دعم Adiantum
- cryptfs: السماح بضبط حجم قطاع dm-crypt
- cryptfs: تقريب حجم جهاز dm-crypt إلى حدود قطاع التشفير
- cryptfs: تحسين تسجيل عملية إنشاء الأجهزة بالترميز dm-crypt
- libfscrypt: إضافة فريق دعم Adiantum
- fs_mgr_fstab: إضافة فريق دعم Adiantum
تفعيل Adiantum في جهازك
أولاً، تأكَّد من ضبط PRODUCT_SHIPPING_API_LEVEL
على جهازك
بشكل صحيح ليتوافق مع إصدار Android الذي يتم تشغيله عليه. على سبيل المثال،
الأجهزة التي تعمل بنظام التشغيل Android 11 عند إطلاقها
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
إلى سطر تعليمات برمجية
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)"