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، اختَر التغييرات التالية:
- 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 و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)"