تشفير القرص بالكامل

تشفير القرص بالكامل هو عملية تشفير جميع بيانات المستخدم على جهاز Android باستخدام مفتاح مشفر. بمجرد تشفير الجهاز ، يتم تشفير جميع البيانات التي أنشأها المستخدم تلقائيًا قبل إلزامها بالقرص وتقوم جميع القراءات بفك تشفير البيانات تلقائيًا قبل إعادتها إلى عملية الاتصال.

تم تقديم تشفير القرص بالكامل إلى Android في الإصدار 4.4 ، ولكن Android 5.0 قدم هذه الميزات الجديدة:

  • تم إنشاء تشفير سريع ، يقوم فقط بتشفير الكتل المستخدمة على قسم البيانات لتجنب استغراق التمهيد الأول وقتًا طويلاً. تدعم أنظمة الملفات ext4 و f2fs فقط التشفير السريع حاليًا.
  • واضاف forceencrypt العلم fstab لتشفير على التمهيد الأول.
  • دعم إضافي للأنماط والتشفير بدون كلمة مرور.
  • تمت إضافة تخزين مدعوم بالأجهزة لمفتاح التشفير باستخدام إمكانية توقيع Trusted Execution Environment (TEE) (مثل TrustZone). انظر تخزين مفتاح مشفر لمزيد من التفاصيل.

قد يتم إرجاع أجهزة ترقيتها إلى أندرويد 5.0 ومن ثم مشفرة إلى حالة غير مشفرة عن طريق إعادة تعيين بيانات المصنع: الحذر. لا يمكن إعادة أجهزة Android 5.0 الجديدة المشفرة عند التشغيل الأول إلى حالة غير مشفرة.

كيف يعمل تشفير القرص الكامل لنظام Android

ويستند التشفير الكامل للقرص الروبوت على dm-crypt ، والتي هي ميزة النواة التي تعمل في طبقة جهاز كتلة. وبسبب هذا، ويعمل التشفير مع الوسائط المتعددة جزءا لا يتجزأ من (eMMC) والأجهزة المحمولة المماثلة التي تقدم نفسها إلى النواة كأجهزة كتلة. التشفير غير ممكن مع YAFFS ، التي تتحدث مباشرة إلى شريحة فلاش NAND الخام.

خوارزمية التشفير هي 128 معيار تشفير متقدم (AES) مع تسلسل كتل التشفير (CBC) و ESSIV: SHA256. يتم تشفير المفتاح الرئيسي بـ 128 بت AES عبر المكالمات إلى مكتبة OpenSSL. يجب عليك استخدام 128 بت أو أكثر للمفتاح (مع 256 كونها اختيارية).

ملاحظة: مصنعي المعدات الأصلية يمكن استخدام 128 بت أو أعلى لتشفير المفتاح الرئيسي.

في إصدار Android 5.0 ، هناك أربعة أنواع من حالات التشفير:

  • إفتراضي
  • دبوس
  • كلمه السر
  • نمط

عند التمهيد الأول ، يقوم الجهاز بإنشاء مفتاح رئيسي 128 بت يتم إنشاؤه عشوائيًا ثم يقوم بتجزئته بكلمة مرور افتراضية وملح مخزّن. كلمة المرور الافتراضية هي: "default_password" ومع ذلك ، يتم أيضًا توقيع التجزئة الناتجة من خلال TEE (مثل TrustZone) ، والتي تستخدم تجزئة التوقيع لتشفير المفتاح الرئيسي.

يمكنك العثور على كلمة المرور الافتراضية المحددة في مشروع مفتوح المصدر أندرويد cryptfs.cpp الملف.

عندما يقوم المستخدم بتعيين PIN / المرور أو كلمة المرور على الجهاز ، يتم إعادة تشفير وتخزين مفتاح 128 بت فقط. (أي المستخدم PIN / نجاح / التغييرات نمط لا تسبب إعادة التشفير من بيانات المستخدمين.) لاحظ أن الجهاز تمكن قد تكون خاضعة لقيود PIN أو نقش أو كلمة المرور.

ويدير التشفير init و vold . init يدعو vold الخصائص، وvold مجموعات للأحداث الزناد في الحرف الأول. تنظر أجزاء أخرى من النظام أيضًا في الخصائص لإجراء مهام مثل حالة الإبلاغ أو طلب كلمة مرور أو المطالبة بإعادة ضبط المصنع في حالة حدوث خطأ فادح. استدعاء ميزات التشفير في vold ، يستخدم النظام أداة سطر الأوامر vdc الصورة cryptfs الأوامر: checkpw ، restart ، enablecrypto ، changepw ، cryptocomplete ، verifypw ، setfield ، getfield ، mountdefaultencrypted ، getpwtype ، getpw ، و clearpw .

من أجل تشفير، فك تشفير أو مسح /data ، /data لا يجب أن يتم تنظيمها. ومع ذلك، من أجل إظهار أي واجهة المستخدم (UI)، يجب أن يبدأ الإطار والإطار يتطلب /data تشغيل. لحل هذا اللغز، هي التي شنت نظام الملفات مؤقت على /data . يتيح ذلك لنظام Android المطالبة بكلمات المرور أو إظهار التقدم أو اقتراح مسح البيانات حسب الحاجة. وهو يفعل فرض قيود أنه من أجل التحول من نظام الملفات المؤقتة إلى صحيح /data الملفات، يجب على النظام عن كل عملية مع الملفات المفتوحة على الملفات المؤقتة وإعادة تشغيل تلك العمليات على الحقيقي /data الملفات. للقيام بذلك، يجب أن تكون جميع الخدمات في واحدة من ثلاث مجموعات: core ، main ، و late_start .

  • core : لم تغلق بعد بدء.
  • main : أسفل اغلاق ومن ثم إعادة تشغيل بعد إدخال كلمة المرور القرص.
  • late_start : لا يبدأ إلا بعد /data تم فك وتركيب.

لتحريك هذه الإجراءات، vold.decrypt تم تعيين الخاصية إلى سلاسل مختلفة . لقتل وخدمات إعادة التشغيل، init الأوامر هي:

  • class_reset : توقف خدمة ولكن يسمح لها إعادة تشغيل مع class_start.
  • class_start : إعادة الخدمة.
  • class_stop : توقف خدمة ويضيف SVC_DISABLED العلم. الخدمات توقف لا تستجيب ل class_start .

يطفو

هناك أربعة تدفقات لجهاز مشفر. يتم تشفير الجهاز مرة واحدة فقط ثم يتبع تدفق تمهيد عادي.

  • تشفير جهاز غير مشفر سابقًا:
    • تشفير جهاز جديد مع forceencrypt : التشفير الإلزامي في التمهيد الأول (ابتداء من الروبوت L).
    • تشفير جهاز موجود: التشفير الذي يبدأه المستخدم (Android K والإصدارات الأقدم).
  • قم بتشغيل جهاز مشفر:
    • بدء تشغيل جهاز مشفر بدون كلمة مرور: تشغيل جهاز مشفر لا يحتوي على كلمة مرور محددة (مناسب للأجهزة التي تعمل بنظام Android 5.0 والإصدارات الأحدث).
    • بدء تشغيل جهاز مشفر بكلمة مرور: تمهيد جهاز مشفر له كلمة مرور محددة.

وبالإضافة إلى هذه التدفقات، ويمكن أيضا أن تفشل الجهاز لتشفير /data . يتم شرح كل من التدفقات بالتفصيل أدناه.

تشفير جهاز جديد باستخدام Forceencrypt

هذا هو التمهيد الأول العادي لجهاز Android 5.0.

  1. كشف الملفات غير مشفرة مع forceencrypt العلم

    /data غير مشفرة ولكن يجب أن يكون ل forceencrypt ولايات عليه. إلغاء تحميل /data .

  2. بداية تشفير /data

    vold.decrypt = "trigger_encryption" مشغلات init.rc ، والذي يؤدي vold لتشفير /data مع أية كلمة مرور. (لم يتم تعيين أي شيء لأن هذا يجب أن يكون جهازًا جديدًا.)

  3. جبل tmpfs

    vold يتصاعد من tmpfs /data (باستخدام خيارات من tmpfs ro.crypto.tmpfs_options ) ومجموعات الممتلكات vold.encrypt_progress إلى 0. vold prepepares وtmpfs /data للتمهيد نظام وأجهزة تشفير الملكية vold.decrypt إلى: trigger_restart_min_framework

  4. قم بإحضار إطار العمل لإظهار التقدم

    نظرًا لأن الجهاز لا يحتوي فعليًا على أي بيانات للتشفير ، فلن يظهر شريط التقدم في الواقع لأن التشفير يحدث بسرعة كبيرة. انظر تشفير جهاز موجود لمزيد من التفاصيل حول UI التقدم.

  5. عندما /data مشفرة، إنزال الإطار

    vold مجموعات vold.decrypt إلى trigger_default_encryption الذي يبدأ defaultcrypto الخدمة. (هذا يبدأ تدفق أقل للتركيب على بيانات المستخدمين مشفرة الافتراضية.) trigger_default_encryption الشيكات نوع التشفير لمعرفة ما اذا كان /data يتم تشفير مع أو بدون كلمة مرور. نظرًا لأن أجهزة Android 5.0 مشفرة في التمهيد الأول ، فلا يجب تعيين كلمة مرور ؛ وبالتالي فإننا فك وتركيب /data .

  6. جبل /data

    init ثم يتصاعد /data على tmpfs RAMDISK باستخدام معلمات تلتقط من ro.crypto.tmpfs_options ، التي تم تعيينها في init.rc .

  7. ابدأ الإطار

    مجموعة vold إلى trigger_restart_framework ، التي لا تزال عملية التمهيد المعتادة.

تشفير جهاز موجود

هذا ما يحدث عندما تقوم بتشفير جهاز Android K غير مشفر أو جهاز أقدم تم ترحيله إلى L.

يتم بدء هذه العملية من قبل المستخدم ويشار إليها باسم "التشفير الداخلي" في الكود. عندما يختار المستخدم تشفير جهاز ، تتأكد واجهة المستخدم من شحن البطارية بالكامل وتوصيل محول التيار المتردد بحيث يكون هناك طاقة كافية لإنهاء عملية التشفير.

تحذير: في حالة تشغيل الجهاز خارج السلطة وتغلق قبل أن يحصل على تشفير النهائي، يتم ترك ملف البيانات في حالة مشفرة جزئيا. يجب إعادة ضبط الجهاز على إعدادات المصنع وفقدان جميع البيانات.

لتمكين التشفير inplace، vold يبدأ حلقة لقراءة كل قطاع من قطاعات الجهاز كتلة الحقيقي ومن ثم الكتابة إلى الجهاز كتلة التشفير. vold التدقيق لمعرفة ما إذا كان قطاع قيد الاستخدام قبل القراءة والكتابة، والذي يجعل التشفير أسرع بكثير على جهاز جديد يحتوي على القليل من أية بيانات.

حالة الجهاز: مجموعة ro.crypto.state = "unencrypted" وتنفيذ on nonencrypted init الزناد لمواصلة تمهيد.

  1. تحقق من كلمة المرور

    واجهة المستخدم يدعو vold مع الأمر cryptfs enablecrypto inplace حيث passwd هي كلمة السر قفل الشاشة للمستخدم.

  2. أزل الإطار

    vold الشيكات للأخطاء، والعودة -1 إذا كان لا يمكن تشفير، ويطبع السبب في السجل. إذا كان يمكن تشفير، فإنه بتعيين الخاصية vold.decrypt إلى trigger_shutdown_framework . هذه الأسباب init.rc لوقف الخدمات في الطبقات late_start و main .

  3. قم بإنشاء تذييل تشفير
  4. قم بإنشاء ملف مسار تنقل
  5. اعادة التشغيل
  6. كشف ملف مسار التنقل
  7. بداية تشفير /data

    vold ثم يضع تعيين التشفير، مما يخلق الجهاز كتلة التشفير الظاهري الذي الخرائط على جهاز كتلة حقيقية ولكن تشفير كل قطاع كما هو مكتوب، ويفك شفرة كل قطاع كما هو قراءتها. vold ثم يخلق ويكتب من البيانات الوصفية التشفير.

  8. أثناء التشفير ، قم بتركيب tmpfs

    vold يتصاعد من tmpfs /data (باستخدام خيارات من tmpfs ro.crypto.tmpfs_options ) ومجموعات الممتلكات vold.encrypt_progress إلى 0. vold يستعد tmpfs /data للتمهيد نظام تشفير وتعيين الخاصية vold.decrypt إلى: trigger_restart_min_framework

  9. قم بإحضار إطار العمل لإظهار التقدم

    trigger_restart_min_framework يسبب init.rc لبدء main فئة من الخدمات. عندما يرى الإطار الذي vold.encrypt_progress يتم تعيين إلى 0، فإنه إحضار شريط التقدم UI، التي الاستعلامات تلك الممتلكات كل خمس ثوان، وبتحديث شريط تقدم. التحديثات التشفير حلقة vold.encrypt_progress كل الوقت الذي يشفر في المئة أخرى من القسم.

  10. عندما /data يتم تشفير، تحديث تذييل التشفير

    عندما /data مشفرة بنجاح، vold مسح العلم ENCRYPTION_IN_PROGRESS في البيانات الوصفية.

    عندما يتم إلغاء قفل الجهاز بنجاح ، يتم استخدام كلمة المرور لتشفير المفتاح الرئيسي ويتم تحديث تذييل التشفير.

    إذا فشل إعادة التمهيد لسبب ما، vold تعيين الخاصية vold.encrypt_progress إلى error_reboot_failed وUI يجب عرض رسالة تطلب من المستخدم الضغط على الزر لإعادة تشغيل الكمبيوتر. هذا ليس من المتوقع أن يحدث على الإطلاق.

بدء تشغيل جهاز مشفر بالتشفير الافتراضي

هذا ما يحدث عندما تقوم بتشغيل جهاز مشفر بدون كلمة مرور. لأنه يتم تشفير أندرويد 5.0 الأجهزة على التمهيد الأول، يجب أن يكون هناك مجموعة كلمة السر، وبالتالي هذه هي حالة التشفير الافتراضي.

  1. كشف مشفرة /data مع عدم وجود كلمة المرور

    كشف أن يتم تشفير جهاز الروبوت ل /data لا يمكن تركيبه واحد من أعلام encryptable أو forceencrypt ومن المقرر.

    vold مجموعات vold.decrypt إلى trigger_default_encryption ، الذي يبدأ defaultcrypto الخدمة. trigger_default_encryption الشيكات نوع التشفير لمعرفة ما اذا كان /data يتم تشفير مع أو بدون كلمة مرور.

  2. فك تشفير / البيانات

    يخلق dm-crypt الجهاز عبر الجهاز كتلة ذلك الجهاز جاهزا للاستخدام.

  3. جبل / البيانات

    vold ثم يتصاعد في فك الحقيقي /data القسم ثم يعد القسم الجديد. يقوم بتعيين خاصية vold.post_fs_data_done إلى 0 ثم يضع vold.decrypt إلى trigger_post_fs_data . هذه الأسباب init.rc لتشغيل لها post-fs-data الأوامر. فإنها ستخلق أي أدلة أو وصلات اللازمة ثم مجموعة vold.post_fs_data_done إلى 1.

    مرة واحدة vold يرى 1 في تلك الممتلكات، فإنه بتعيين الخاصية vold.decrypt إلى: trigger_restart_framework. هذه الأسباب init.rc لبدء الخدمات في الصف main مرة أخرى وأيضا بدء تشغيل الخدمات في الصف late_start للمرة الأولى منذ التمهيد.

  4. ابدأ الإطار

    الآن الأحذية إطار كل خدماتها باستخدام فك تشفير /data ، والنظام جاهز للاستخدام.

بدء تشغيل جهاز مشفر بدون تشفير افتراضي

هذا ما يحدث عندما تقوم بتشغيل جهاز مشفر له كلمة مرور محددة. يمكن أن تكون كلمة مرور الجهاز عبارة عن رقم تعريف شخصي أو نقش أو كلمة مرور.

  1. كشف الجهاز المشفر بكلمة مرور

    كشف أن يتم تشفير جهاز الروبوت لأن العلم ro.crypto.state = "encrypted"

    vold مجموعات vold.decrypt إلى trigger_restart_min_framework بسبب /data يتم تشفير بكلمة مرور.

  2. جبل tmpfs

    init خمس مجموعات خصائص لحفظ جبل الخيارات الأولية نظرا ل /data مع المعلمات التي تم تمريرها من init.rc . vold يستخدم هذه الخصائص لإعداد الخرائط التشفير:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (ASCII المكون من 8 أرقام عدد عرافة يسبقه 0X)
  3. ابدأ إطار العمل للمطالبة بكلمة المرور

    يبدأ الإطار صعودا ويرى أن vold.decrypt ومن المقرر أن trigger_restart_min_framework . هذا يقول الإطار أنه تمهيد على tmpfs /data القرص وتحتاج إلى الحصول على كلمة المرور للمستخدم.

    أولاً ، ومع ذلك ، فإنه يحتاج إلى التأكد من أن القرص قد تم تشفيره بشكل صحيح. يرسل الأمر cryptfs cryptocomplete إلى vold . vold عوائد 0 إذا تم الانتهاء التشفير بنجاح، -1 على خطأ داخلي، أو -2 إذا لم يتم إكمال التشفير بنجاح. vold يحدد هذا من خلال النظر في البيانات الوصفية التشفير ل CRYPTO_ENCRYPTION_IN_PROGRESS العلم. إذا تم تعيينه ، فقد تمت مقاطعة عملية التشفير ، ولا توجد بيانات قابلة للاستخدام على الجهاز. إذا vold بإرجاع خطأ، يجب أن UI عرض رسالة للمستخدم لإعادة تشغيل المصنع وإعادة ضبط الجهاز، وتعطي المستخدم على زر للضغط للقيام بذلك.

  4. فك تشفير البيانات بكلمة مرور

    مرة واحدة cryptfs cryptocomplete ناجحا، يعرض إطار واجهة يسأل عن كلمة السر القرص. الشيكات UI كلمة المرور عن طريق إرسال الأمر cryptfs checkpw إلى vold . إذا كانت كلمة المرور الصحيحة (التي يتم تحديدها من قبل بنجاح تركيب فك شفرة /data في موقع مؤقت، ثم غير متزايد عليه)، vold يحفظ اسم الجهاز كتلة فك تشفيره في الممتلكات ro.crypto.fs_crypto_blkdev ويعود الوضع 0 إلى واجهة المستخدم . إذا كانت كلمة المرور غير صحيحة ، فإنها ترجع -1 إلى واجهة المستخدم.

  5. وقف الإطار

    ويضع UI تصل رسم التمهيد التشفير ومن ثم تدعو vold مع الأمر cryptfs restart . vold تعيين الخاصية vold.decrypt إلى trigger_reset_main ، والذي يسبب init.rc للقيام class_reset main . هذا توقف جميع الخدمات في الدرجة الرئيسية، مما يسمح للtmpfs /data أن يكون صاعد.

  6. جبل /data

    vold ثم يتصاعد في فك الحقيقي /data التقسيم ويستعد القسم الجديد (والذي ربما لم أعد إذا تم تشفيرها مع الخيار، الذي غير معتمد على الإصدار الأول للقضاء). يقوم بتعيين خاصية vold.post_fs_data_done إلى 0 ثم يضع vold.decrypt إلى trigger_post_fs_data . هذه الأسباب init.rc لتشغيل لها post-fs-data الأوامر. فإنها ستخلق أي أدلة أو وصلات اللازمة ثم مجموعة vold.post_fs_data_done إلى 1. بمجرد vold يرى 1 في تلك الممتلكات، فإنه بتعيين الخاصية vold.decrypt إلى trigger_restart_framework . هذه الأسباب init.rc لبدء الخدمات في الصف main مرة أخرى وأيضا بدء تشغيل الخدمات في الصف late_start للمرة الأولى منذ التمهيد.

  7. ابدأ الإطار الكامل

    الآن الأحذية إطار كل خدماتها باستخدام فك تشفير /data الملفات، والنظام جاهز للاستخدام.

بالفشل

قد يكون الجهاز الذي يفشل في فك التشفير منحرفًا لعدة أسباب. يبدأ الجهاز بسلسلة خطوات التشغيل العادية:

  1. كشف الجهاز المشفر بكلمة مرور
  2. جبل tmpfs
  3. ابدأ إطار العمل للمطالبة بكلمة المرور

ولكن بعد فتح إطار العمل ، قد يواجه الجهاز بعض الأخطاء:

  • كلمة المرور تطابق البيانات ولكن لا يمكن فك تشفيرها
  • يقوم المستخدم بإدخال كلمة مرور خاطئة 30 مرة

إذا لم يتم حل هذه الأخطاء، المستخدم الفوري لمصنع مسح:

إذا vold بالكشف عن خطأ أثناء عملية التشفير، وإذا كان قد تم تدمير أي بيانات حتى الآن، والإطار هو ما يصل، vold بتعيين خاصية vold.encrypt_progress إلى error_not_encrypted . تطالب واجهة المستخدم المستخدم بإعادة التشغيل وتنبهه بأن عملية التشفير لم تبدأ مطلقًا. إذا حدث الخطأ بعد أن تم تمزيق الإطار أسفل، ولكن قبل شريط UI التقدم هو ما يصل، vold سيتم إعادة تشغيل النظام. إذا فشل إعادة التشغيل، فإنه يضع vold.encrypt_progress إلى error_shutting_down والعوائد -1. ولكن لن يكون هناك أي شيء للقبض على الخطأ. هذا ليس من المتوقع أن يحدث.

إذا vold بالكشف عن خطأ أثناء عملية التشفير، فإنه يضع vold.encrypt_progress إلى error_partially_encrypted العوائد و-1. يجب أن تعرض واجهة المستخدم بعد ذلك رسالة تفيد بفشل التشفير وتوفر زرًا للمستخدم لإعادة ضبط الجهاز في المصنع.

تخزين المفتاح المشفر

يتم تخزين المفتاح المشفر في بيانات تعريف التشفير. يتم تنفيذ دعم الأجهزة باستخدام إمكانية توقيع Trusted Execution Environment (TEE). في السابق ، قمنا بتشفير المفتاح الرئيسي باستخدام مفتاح تم إنشاؤه عن طريق تطبيق scrypt على كلمة مرور المستخدم والملح المخزن. من أجل جعل المفتاح مرنًا ضد الهجمات خارج الصندوق ، نقوم بتوسيع هذه الخوارزمية من خلال توقيع المفتاح الناتج باستخدام مفتاح TEE مخزن. ثم يتم تحويل التوقيع الناتج إلى مفتاح طول مناسب من خلال تطبيق آخر للسكربت. ثم يتم استخدام هذا المفتاح لتشفير وفك تشفير المفتاح الرئيسي. لتخزين هذا المفتاح:

  1. قم بإنشاء مفتاح تشفير قرص عشوائي 16 بايت (DEK) وملح 16 بايت.
  2. تطبيق scrypt على كلمة مرور المستخدم والملح لإنتاج مفتاح وسيط 32 بايت 1 (IK1).
  3. لوحة IK1 مع صفر بايت لحجم المفتاح الخاص المرتبط بالأجهزة (HBK). على وجه التحديد ، نحن نضع حشوة مثل: 00 || IK1 || 00..00 ؛ صفر بايت واحد ، 32 بايت IK1 بايت ، 223 بايت صفر.
  4. قم بتسجيل IK1 مبطن مع HBK لإنتاج 256 بايت IK2.
  5. قم بتطبيق scrypt على IK2 والملح (نفس الملح كما في الخطوة 2) لإنتاج 32 بايت IK3.
  6. استخدم أول 16 بايت من IK3 كـ KEK وآخر 16 بايت كـ IV.
  7. تشفير DEK باستخدام AES_CBC ، باستخدام مفتاح KEK ، وناقل التهيئة IV.

تغيير كلمة المرور

عندما ينتخب المستخدم لتغيير أو إزالة كلمة المرور الخاصة بهم في الإعدادات، واجهة المستخدم يرسل الأمر cryptfs changepw إلى vold ، و vold إعادة بتشفير-المفتاح الرئيسي القرص باستخدام كلمة المرور الجديدة.

خصائص التشفير

vold و init التواصل مع بعضهم البعض من خلال إعداد خصائص. فيما يلي قائمة بالخصائص المتاحة للتشفير.

خصائص فولد

ملكية وصف
vold.decrypt trigger_encryption تشفير محرك الأقراص بدون كلمة مرور.
vold.decrypt trigger_default_encryption تحقق من محرك الأقراص لمعرفة ما إذا كان مشفرًا بدون كلمة مرور. إذا كان كذلك، فك وتركيبها، وإلا مجموعة vold.decrypt إلى trigger_restart_min_framework.
vold.decrypt trigger_reset_main اضبط بواسطة vold لإيقاف تشغيل واجهة المستخدم التي تطلب كلمة مرور القرص.
vold.decrypt trigger_post_fs_data التي وضعتها vold إلى الإعدادية /data مع الدلائل اللازمة، وآخرون.
vold.decrypt trigger_restart_framework تم تعيينه بواسطة vold لبدء الإطار الحقيقي وجميع الخدمات.
vold.decrypt trigger_shutdown_framework اضبط بواسطة vold لإغلاق الإطار الكامل لبدء التشفير.
vold.decrypt trigger_restart_min_framework التي وضعتها vold لبدء UI شريط التقدم لتشفير أو موجه لكلمة المرور، اعتمادا على قيمة ro.crypto.state .
vold.encrypt_progress عندما يبدأ إطار العمل ، إذا تم تعيين هذه الخاصية ، أدخل وضع واجهة مستخدم شريط التقدم.
vold.encrypt_progress 0 to 100 يجب أن تعرض واجهة مستخدم شريط التقدم النسبة المئوية المعينة.
vold.encrypt_progress error_partially_encrypted يجب أن تعرض واجهة مستخدم شريط التقدم رسالة تفيد بفشل التشفير ، ومنح المستخدم خيارًا لإعادة ضبط الجهاز إلى إعدادات المصنع.
vold.encrypt_progress error_reboot_failed يجب أن تعرض واجهة مستخدم شريط التقدم رسالة تفيد بأن التشفير قد اكتمل ، ومنح المستخدم زرًا لإعادة تشغيل الجهاز. لا يتوقع حدوث هذا الخطأ.
vold.encrypt_progress error_not_encrypted يجب أن تعرض واجهة مستخدم شريط التقدم رسالة تفيد بحدوث خطأ ، ولم يتم تشفير أي بيانات أو فقدها ، وإعطاء المستخدم زرًا لإعادة تشغيل النظام.
vold.encrypt_progress error_shutting_down واجهة مستخدم شريط التقدم ليست قيد التشغيل ، لذلك ليس من الواضح من سيستجيب لهذا الخطأ. ولا ينبغي أن يحدث على أي حال.
vold.post_fs_data_done 0 التي وضعتها vold قبل وضع vold.decrypt إلى trigger_post_fs_data .
vold.post_fs_data_done 1 مجموعة من init.rc أو init.rc فقط بعد الانتهاء من مهمة post-fs-data .

خصائص init

ملكية وصف
ro.crypto.fs_crypto_blkdev التي وضعتها vold قيادة checkpw لاستخدامها لاحقا من قبل vold قيادة restart .
ro.crypto.state unencrypted مجموعة من init إلى يقولون ان هذا النظام يعمل مع غير مشفرة /data ro.crypto.state encrypted . التي وضعتها init أن أقوله هو هذا النظام يعمل مع مشفرة /data .

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

يتم تعيين هذه الخصائص الخمسة init عندما كان يحاول جبل /data مع المعلمات التي تم تمريرها في من init.rc . vold يستخدم هذه لإعداد الخرائط التشفير.
ro.crypto.tmpfs_options مجموعة من init.rc مع الخيارات الحرف الأول يجب استخدامها عند تركيب tmpfs /data الملفات.

الإجراءات الأولية

on post-fs-data
on nonencrypted
on property:vold.decrypt=trigger_reset_main
on property:vold.decrypt=trigger_post_fs_data
on property:vold.decrypt=trigger_restart_min_framework
on property:vold.decrypt=trigger_restart_framework
on property:vold.decrypt=trigger_shutdown_framework
on property:vold.decrypt=trigger_encryption
on property:vold.decrypt=trigger_default_encryption