הצפנת דיסק מלא

הצפנת דיסק מלא היא תהליך של קידוד כל נתוני המשתמש במכשיר אנדרואיד באמצעות מפתח מוצפן. ברגע שהתקן מוצפן, כל הנתונים שנוצרו על ידי המשתמש מוצפנים אוטומטית לפני העברתם לדיסק והכל קוראים את הנתונים המפענחים באופן אוטומטי לפני החזרתם לתהליך ההתקשרות.

הצפנת דיסק מלא הוצגה לאנדרואיד בגרסה 4.4, אך אנדרואיד 5.0 הציגה את התכונות החדשות הבאות:

  • יצר הצפנה מהירה, המצפינה רק בלוקים משומשים במחיצת הנתונים כדי למנוע אתחול הראשון של זמן רב. רק מערכות קבצים ext4 ו-f2fs תומכות כרגע בהצפנה מהירה.
  • הוסיף את דגל forceencrypt fstab כדי להצפין באתחול הראשון.
  • נוספה תמיכה בתבניות והצפנה ללא סיסמה.
  • נוסף אחסון מגובה חומרה של מפתח ההצפנה באמצעות יכולת החתימה של Trusted Execution Environment (TEE) (כגון ב-TrustZone). ראה אחסון המפתח המוצפן לפרטים נוספים.

זהירות: מכשירים ששודרגו ל-Android 5.0 ולאחר מכן מוצפנים עשויים להיות מוחזרים למצב לא מוצפן על ידי איפוס נתוני היצרן. לא ניתן להחזיר מכשירי אנדרואיד 5.0 חדשים שהוצפנו באתחול הראשון למצב לא מוצפן.

כיצד פועלת הצפנת אנדרואיד בדיסק מלא

הצפנת אנדרואיד בדיסק מלא מבוססת על dm-crypt , שהיא תכונת ליבה הפועלת בשכבת מכשיר החסימה. בשל כך, ההצפנה עובדת עם MultiMediaCard ( eMMC) ומכשירי פלאש דומים המציגים את עצמם בפני הליבה כהתקני בלוק. הצפנה אינה אפשרית עם YAFFS, שמדבר ישירות עם שבב פלאש NAND גולמי.

אלגוריתם ההצפנה הוא 128 Advanced Encryption Standard (AES) עם שרשור בלוק צופן (CBC) ו-ESSIV:SHA256. המפתח הראשי מוצפן באמצעות AES של 128 סיביות באמצעות שיחות לספריית OpenSSL. עליך להשתמש ב-128 סיביות או יותר עבור המפתח (כאשר 256 הם אופציונליים).

הערה: יצרני OEM יכולים להשתמש ב-128 סיביות ומעלה כדי להצפין את המפתח הראשי.

במהדורת אנדרואיד 5.0, ישנם ארבעה סוגים של מצבי הצפנה:

  • בְּרִירַת מֶחדָל
  • פִּין
  • סיסמה
  • תבנית

עם האתחול הראשון, ההתקן יוצר מפתח ראשי של 128 סיביות שנוצר באופן אקראי ולאחר מכן מאחסן אותו עם סיסמת ברירת מחדל ומלח מאוחסן. סיסמת ברירת המחדל היא: "default_password" עם זאת, ה-hash שנוצר חתום גם באמצעות TEE (כגון TrustZone), המשתמש ב-hash של החתימה כדי להצפין את מפתח הראשי.

אתה יכול למצוא את סיסמת ברירת המחדל שהוגדרה בקובץ Android Open Source Project cryptfs.cpp .

כאשר המשתמש מגדיר את ה-PIN/Pass או הסיסמה במכשיר, רק מפתח 128 סיביות מוצפן מחדש ומאוחסן. (כלומר, שינויים ב-PIN/מעבר/דפוס משתמש אינם גורמים להצפנה מחדש של נתוני משתמש.) שימו לב שהמכשיר המנוהל עשוי להיות כפוף להגבלות של PIN, דפוס או סיסמה.

ההצפנה מנוהלת על ידי init ו- vold . init קורא ל- vold , ו-vold מגדיר מאפיינים להפעלת אירועים ב-init. חלקים אחרים של המערכת גם בוחנים את המאפיינים כדי לבצע משימות כמו דיווח על סטטוס, בקשת סיסמה או בקשה לאיפוס להגדרות היצרן במקרה של שגיאה קטלנית. כדי להפעיל תכונות הצפנה ב- vold , המערכת משתמשת בכלי שורת הפקודה בפקודות cryptfs של vdc : checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw , ו- clearpw .

על מנת להצפין, לפענח או למחוק /data , אין להרכיב /data . עם זאת, על מנת להציג ממשק משתמש כלשהו (UI), המסגרת חייבת להתחיל והמסגרת דורשת /data לפעול. כדי לפתור את החידה הזו, מערכת קבצים זמנית מותקנת על /data . זה מאפשר לאנדרואיד לבקש סיסמאות, להציג התקדמות או להציע מחיקת נתונים לפי הצורך. זה כן מטיל את המגבלה שכדי לעבור ממערכת הקבצים הזמנית למערכת הקבצים האמיתית /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 ומעלה).
  • אתחל מכשיר מוצפן:
    • הפעלת מכשיר מוצפן ללא סיסמה: אתחול מכשיר מוצפן שאין לו סיסמה מוגדרת (רלוונטי למכשירים עם אנדרואיד 5.0 ואילך).
    • הפעלת מכשיר מוצפן עם סיסמה: אתחול מכשיר מוצפן שיש לו סיסמה מוגדרת.

בנוסף לזרימות אלו, המכשיר עלול גם להיכשל בהצפנת /data . כל אחת מהזרימות מוסברת בפירוט להלן.

הצפין מכשיר חדש באמצעות Forceencrypt

זהו האתחול הראשון הרגיל עבור מכשיר אנדרואיד 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 מכין את ה-tmpfs /data לאתחול מערכת מוצפנת ומגדיר את המאפיין vold.decrypt ל: trigger_restart_min_framework

  4. העלה מסגרת כדי להראות התקדמות

    מכיוון שלמכשיר אין כמעט נתונים להצפין, סרגל ההתקדמות לרוב לא יופיע בפועל מכיוון שההצפנה מתרחשת כל כך מהר. ראה הצפנת מכשיר קיים לפרטים נוספים על ממשק המשתמש ההתקדמות.

  5. כאשר /data מוצפן, הסר את המסגרת

    vold מגדיר את vold.decrypt ל- trigger_default_encryption שמתחיל את שירות defaultcrypto . (זה מתחיל את הזרימה למטה להרכבת ברירת מחדל של נתוני משתמש מוצפנים.) trigger_default_encryption בודק את סוג ההצפנה כדי לראות אם /data מוצפן עם או בלי סיסמה. מכיוון שמכשירי אנדרואיד 5.0 מוצפנים באתחול הראשון, לא אמורה להיות מוגדרת סיסמה; לכן אנו מפענחים ומעלים /data .

  6. הר /data

    לאחר מכן, init מעלה את /data על דיסק RAMDisk של tmpfs באמצעות פרמטרים שהוא קולט מ- ro.crypto.tmpfs_options , המוגדר ב- init.rc

  7. התחל את המסגרת

    vold מגדיר את vold.decrypt ל- trigger_restart_framework , מה שממשיך את תהליך האתחול הרגיל.

הצפין מכשיר קיים

זה מה שקורה כאשר אתה מצפין מכשיר Android K לא מוצפן או מכשיר מוקדם יותר שהועבר ל-L.

תהליך זה מתבצע ביוזמת המשתמש ומכונה "הצפנה במקום" בקוד. כאשר משתמש בוחר להצפין מכשיר, ממשק המשתמש מוודא שהסוללה טעונה במלואה ומתאם ה-AC מחובר לחשמל כך שיש מספיק חשמל כדי לסיים את תהליך ההצפנה.

אזהרה: אם נגמר החשמל במכשיר והוא נכבה לפני שסיים להצפין, נתוני הקבצים נשארים במצב מוצפן חלקית. המכשיר חייב להיות מאופס להגדרות היצרן וכל הנתונים אובדים.

כדי לאפשר הצפנה במקום, vold מתחיל לולאה לקריאת כל סקטור של התקן הבלוק האמיתי ולאחר מכן כותב אותו למכשיר הבלוק ההצפנה. vold בודק אם סקטור נמצא בשימוש לפני הקריאה והכתיבה שלו, מה שהופך את ההצפנה למהירה הרבה יותר במכשיר חדש שיש לו מעט נתונים.

מצב ההתקן : הגדר ro.crypto.state = "unencrypted" והפעל את טריגר init on nonencrypted כדי להמשיך באתחול.

  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, היא מעלה את ממשק המשתמש של סרגל ההתקדמות, שמחפש את המאפיין הזה כל חמש שניות ומעדכן סרגל התקדמות. לולאת ההצפנה מעדכנת vold.encrypt_progress בכל פעם שהיא מצפינה עוד אחוז מהמחיצה.

  10. כאשר /data מוצפן, עדכן את הכותרת התחתונה של ההצפנה

    כאשר /data מוצפן בהצלחה, vold מנקה את הדגל ENCRYPTION_IN_PROGRESS במטא נתונים.

    לאחר ביטול נעילת המכשיר בהצלחה, הסיסמה משמשת להצפנת מפתח הראשי והכותרת התחתונה של ההצפנה מתעדכנת.

    אם האתחול מחדש נכשל מסיבה כלשהי, vold מגדיר את המאפיין vold.encrypt_progress ל- error_reboot_failed והממשק משתמש אמור להציג הודעה המבקשת מהמשתמש ללחוץ על כפתור כדי לאתחל. זה לא צפוי להתרחש אי פעם.

הפעלת מכשיר מוצפן עם הצפנת ברירת מחדל

זה מה שקורה כשאתה מאתחל מכשיר מוצפן ללא סיסמה. מכיוון שמכשירי אנדרואיד 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 להפעיל שוב שירותים ב-class main וגם להפעיל שירותים ב-class 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 מחזיר שגיאה, ממשק המשתמש אמור להציג הודעה למשתמש לאתחל ולאפס את המכשיר להגדרות היצרן, ולתת למשתמש כפתור ללחוץ כדי לעשות זאת.

  4. פענוח נתונים באמצעות סיסמה

    לאחר ש- cryptfs cryptocomplete הצליח, המסגרת מציגה ממשק משתמש המבקש את סיסמת הדיסק. ממשק המשתמש בודק את הסיסמה על ידי שליחת הפקודה cryptfs checkpw אל vold . אם הסיסמה נכונה (מה שנקבע על ידי הרכבה מוצלחת של /data במיקום זמני, ואז ביטול הטעינה שלו), vold שומר את שם התקן החסימה המפוענח במאפיין ro.crypto.fs_crypto_blkdev ומחזיר את המצב 0 לממשק המשתמש . אם הסיסמה שגויה, היא מחזירה -1 לממשק המשתמש.

  5. עצור את המסגרת

    ממשק המשתמש מעלה גרפיקת אתחול קריפטו ואז קורא vold עם הפקודה cryptfs restart . vold מגדיר את המאפיין vold.decrypt ל- trigger_reset_main , מה שגורם init.rc לבצע class_reset main . זה עוצר את כל השירותים במחלקה הראשית, מה שמאפשר לבטל את הטעינה של tmpfs /data .

  6. הר /data

    לאחר מכן, vold מעלה את מחיצת ה-real /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 להפעיל שוב שירותים ב-class main וגם להפעיל שירותים ב-class late_start בפעם הראשונה מאז האתחול.

  7. התחל מסגרת מלאה

    כעת המסגרת מאתחלת את כל השירותים שלה באמצעות מערכת הקבצים המפוענחת /data , והמערכת מוכנה לשימוש.

כישלון

מכשיר שלא מצליח לפענח עלול להיות שגוי מכמה סיבות. המכשיר מתחיל בסדרת השלבים הרגילה לאתחול:

  1. זיהוי מכשיר מוצפן עם סיסמה
  2. הר tmpfs
  3. התחל את המסגרת כדי לבקש סיסמה

אבל לאחר פתיחת המסגרת, המכשיר יכול להיתקל בכמה שגיאות:

  • הסיסמה תואמת אך אינה יכולה לפענח נתונים
  • המשתמש מזין סיסמה שגויה 30 פעמים

אם השגיאות הללו אינן נפתרות, בקש מהמשתמש למחוק מהמפעל :

אם vold מזהה שגיאה במהלך תהליך ההצפנה, ואם עדיין לא הושמדו נתונים והמסגרת פועלת, vold מגדיר את המאפיין vold.encrypt_progress ל- error_not_encrypted . ממשק המשתמש מבקש מהמשתמש לאתחל מחדש ומתריע על כך שתהליך ההצפנה מעולם לא התחיל. אם השגיאה מתרחשת לאחר שהמסגרת נקרעה, אך לפני שממשק המשתמש של סרגל ההתקדמות עלה, vold יאתחל את המערכת. אם האתחול נכשל, הוא מגדיר את vold.encrypt_progress ל- error_shutting_down ומחזיר -1; אבל לא יהיה שום דבר שיתפוס את השגיאה. זה לא צפוי לקרות.

אם vold מזהה שגיאה במהלך תהליך ההצפנה, הוא מגדיר את vold.encrypt_progress ל- error_partially_encrypted ומחזיר -1. לאחר מכן, ממשק המשתמש אמור להציג הודעה האומרת שההצפנה נכשלה ולספק לחצן למשתמש לאפס את המכשיר להגדרות היצרן.

אחסון המפתח המוצפן

המפתח המוצפן מאוחסן במטא-נתונים של ההצפנה. גיבוי חומרה מיושם על ידי שימוש ביכולת החתימה של Trusted Execution Environment (TEE). בעבר, הצפנו את המפתח הראשי בעזרת מפתח שנוצר על ידי החלת scrypt על סיסמת המשתמש והמלח המאוחסן. על מנת להפוך את המפתח לעמיד בפני התקפות מחוץ לקופסה, אנו מרחיבים אלגוריתם זה על ידי חתימה על המפתח שנוצר עם מפתח TEE שמור. החתימה המתקבלת הופכת למפתח באורך מתאים על ידי יישום אחד נוסף של scrypt. מפתח זה משמש לאחר מכן להצפנה ולפענוח של המפתח הראשי. כדי לאחסן מפתח זה:

  1. צור מפתח הצפנת דיסק אקראי של 16 בתים (DEK) ומלח של 16 בתים.
  2. החל scrypt על סיסמת המשתמש והמלח כדי לייצר מפתח ביניים 1 (IK1) של 32 בתים.
  3. פד IK1 עם אפס בתים לגודל המפתח הפרטי המחובר לחומרה (HBK). באופן ספציפי, אנו מרופדים כ: 00 || IK1 || 00..00; בית אפס אחד, 32 בתים IK1, 223 בתים אפס.
  4. שלט מרופד IK1 עם HBK לייצור IK2 של 256 בתים.
  5. החל scrypt על IK2 ומלח (אותו מלח כמו שלב 2) כדי לייצר IK3 של 32 בתים.
  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 עם ספריות נחוצות, et al.
vold.decrypt trigger_restart_framework הוגדר על ידי vold כדי להתחיל את המסגרת האמיתית ואת כל השירותים.
vold.decrypt trigger_shutdown_framework הוגדר על ידי vold כדי לכבות את המסגרת המלאה כדי להתחיל בהצפנה.
vold.decrypt trigger_restart_min_framework הוגדר על ידי vold כדי להפעיל את ממשק המשתמש של סרגל ההתקדמות להצפנה או לבקש סיסמה, בהתאם לערך של 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 לשימוש מאוחר יותר על ידי restart של פקודת vold .
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 עם האפשרויות ש-init צריך להשתמש בו בעת הרכבה של מערכת הקבצים 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