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

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

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

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

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

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

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

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

הערה: יצרני ציוד מקורי יכול להשתמש 128 ביט ומעלה כדי להצפין את המפתח הראשי.

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

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

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

אתה יכול למצוא את סיסמת ברירת המחדל שהוגדר פרויקט הקוד הפתוח של אנדרואיד cryptfs.cpp קובץ.

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

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

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

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

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

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

  5. כאשר /data מוצפנים, מוריד את המסגרת

    vold סטים vold.decrypt כדי trigger_default_encryption אשר מתחיל את defaultcrypto שירות. (זה מתחיל את הזרימה להלן הרכבת UserData מחדל מוצפן.) 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.

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

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

כדי להפעיל הצפנת 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 metadata.

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

    אם אתחול מחדש נכשל מסיבה כלשהי, 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 להתחיל שירותים בכיתה 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 (מספר משושת 8 ספרות ASCII קדם 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 הוא מוצלח, מציג מסגרת ממשק משתמש בקשה להזין את סיסמת הדיסק. השיקים UI חדש ע"י שליחת הפקודה cryptfs checkpw כדי vold . אם הסיסמה נכונה (הנקבע בהצלחה על ידי הרכבה מפוענח /data בבאתר זמני, אז ביטל העגינה זה), vold חוסך את השם של המכשיר לחסום מפוענח בנכס ro.crypto.fs_crypto_blkdev וחוזר למעמד 0 עד UI . אם הסיסמה שגויה, היא מחזירה -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). בעבר הצפנו את מפתח הראשי באמצעות מפתח שנוצר על ידי החלת הצפנה על סיסמת המשתמש והמלח המאוחסן. על מנת להפוך את המפתח לגמיש מפני התקפות מחוץ לקופסה, אנו מרחיבים את האלגוריתם הזה על ידי חתימת המפתח שהתקבל באמצעות מפתח TEE מאוחסן. החתימה המתקבלת הופכת לאחר מכן למפתח באורך מתאים על ידי יישום נוסף של סקריפט. לאחר מכן מפתח זה משמש להצפנת ופענוח מפתח הראשי. לאחסון מפתח זה:

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