تمكين Adiantum

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

بالنسبة للأجهزة التي تفتقر إلى تعليمات AES CPU هذه ، يوفر Adiantum تشفيرًا على جهازك مع أداء ضئيل للغاية. لأرقام المقارنة ، انظر ورقة Adiantum . لكي يعمل مصدر قياس الأداء على أجهزتك ، راجع مصدر Adiantum على GitHub .

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

تغييرات Kernel

Adiantum مدعوم من نواة Android الشائعة ، الإصدار 4.9 وما بعده.

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

إصدار النواة تصحيحات التشفير و fscrypt تصحيح dm-crypt
4.19 4.19 نواة تصحيح dm-crypt
4.14 4.14 نواة تصحيح dm-crypt
4.9 4.9 نواة تصحيح dm-crypt

تمكين Adiantum في النواة الخاصة بك

Android 11 والإصدارات الأحدث

إذا كان جهازك يعمل بنظام Android 11 أو أعلى ، فقم بتمكين الإعدادات التالية في تكوين kernel بجهازك:

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

إذا كان جهازك يعمل بنظام Android 9 أو 10 ، فستكون هناك حاجة إلى إعدادات تكوين kernel مختلفة قليلاً. قم بتمكين الإعدادات التالية:

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

تغييرات مساحة المستخدمين

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

بالنسبة للأجهزة التي تعمل بنظام Android 9 ، اختر التغييرات التالية:

قم بتمكين Adiantum في جهازك

أولاً ، تأكد من تعيين PRODUCT_SHIPPING_API_LEVEL بجهازك بشكل صحيح لمطابقة إصدار Android الذي يتم تشغيله به. على سبيل المثال ، يجب أن يحتوي الجهاز الذي يتم تشغيله بنظام Android 11 على PRODUCT_SHIPPING_API_LEVEL := 30 . هذا مهم لأن بعض إعدادات التشفير لها إعدادات افتراضية مختلفة في إصدارات التشغيل المختلفة.

الأجهزة ذات التشفير المستند إلى الملفات

لتمكين التشفير المستند إلى ملف Adiantum على وحدة التخزين الداخلية لجهازك ، أضف الخيار التالي إلى العمود الأخير (العمود fs_mgr_flags ) من صف قسم userdata في ملف fstab الخاص بالجهاز:

fileencryption=adiantum

إذا كان جهازك يعمل بنظام Android 11 أو أعلى ، فإن تمكين تشفير البيانات الوصفية مطلوب أيضًا. لاستخدام 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. سيؤدي ذلك إلى تقليل استخدام الذاكرة قليلاً عند استخدام تشفير البيانات الوصفية 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. لاستخدام هذا الإعداد ، يجب أن يبدأ قسم بيانات المستخدم بإزاحة 4096 بايت محاذاة على القرص.

في fstab ، لمجموعة بيانات المستخدم:

forceencrypt=footer

للتحقق من نجاح التنفيذ ، خذ تقرير خطأ أو شغّل:

adb root
adb shell dmesg

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

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