הצפנת הדיסק במלואו היא תהליך של קידוד כל נתוני המשתמש במכשיר Android באמצעות מפתח מוצפן. אחרי שמצפינים מכשיר, כל הנתונים שהמשתמש יוצר מוצפנים באופן אוטומטי לפני שהם נשמרים בדיסק, וכל הקריאות מפענחות את הנתונים באופן אוטומטי לפני שהם מוחזרים לתהליך הקורא.
הצפנה מלאה של הדיסק הושקה ב-Android 4.4, אבל ב-Android 5.0 הושקו התכונות החדשות האלה:
- נוצרה הצפנה מהירה, שמצפינה רק בלוקים בשימוש במחיצת הנתונים כדי למנוע אתחול ראשון שלוקח הרבה זמן. נכון לעכשיו, רק מערכות הקבצים ext4 ו-f2fs תומכות בהצפנה מהירה.
- הוספנו את
forceencryptהדגל fstab להצפנה בהפעלה הראשונה. - הוספנו תמיכה בקווי פתיחת נעילה ובהצפנה ללא סיסמה.
- הוספנו אחסון של מפתח ההצפנה שמגובה בחומרה באמצעות יכולת החתימה של סביבת מחשוב אמינה (TEE) (למשל ב-TrustZone). פרטים נוספים זמינים במאמר בנושא אחסון המפתח המוצפן.
זהירות: מכשירים ששודרגו ל-Android 5.0 ואז הוצפן יכולים לחזור למצב לא מוצפן באמצעות איפוס לנתוני היצרן. אי אפשר להחזיר למצב לא מוצפן מכשירי Android 5.0 חדשים שהוצפנו בהפעלה הראשונה.
איך פועלת הצפנה מלאה של הדיסק ב-Android
הצפנה מלאה של הדיסק ב-Android מבוססת על dm-crypt, שהיא תכונה של ליבת המערכת שפועלת בשכבת מכשיר הבלוקים. לכן, ההצפנה פועלת עם Embedded MultiMediaCard (eMMC) ועם מכשירי פלאש דומים שמוצגים לליבה כמכשירי בלוק. אי אפשר להצפין עם YAFFS, שמתקשר ישירות עם שבב NAND flash גולמי.
אלגוריתם ההצפנה הוא 128 Advanced Encryption Standard (AES) עם cipher-block chaining (CBC) ו-ESSIV:SHA256. מפתח המאסטר מוצפן באמצעות AES של 128 ביט דרך קריאות לספריית OpenSSL. חובה להשתמש במפתח של 128 ביט או יותר (אפשר להשתמש במפתח של 256 ביט).
הערה: יצרני ציוד מקורי יכולים להשתמש בהצפנה של 128 ביט או יותר כדי להצפין את מפתח המאסטר.
בגרסה 5.0 של Android יש ארבעה סוגים של מצבי הצפנה:
- ברירת מחדל
- קוד אימות
- סיסמה
- קו ביטול נעילה
באתחול הראשון, המכשיר יוצר מפתח ראשי בן 128 ביט שנוצר באופן אקראי, ואז מבצע גיבוב שלו באמצעות סיסמת ברירת מחדל ומלח מאוחסן. סיסמת ברירת המחדל היא: default_password. עם זאת, הגיבוב שמתקבל נחתם גם באמצעות TEE (כמו TrustZone), שמשתמש בגיבוב של החתימה כדי להצפין את מפתח המאסטר.
אפשר למצוא את סיסמת ברירת המחדל שמוגדרת בקובץ cryptfs.cpp של פרויקט הקוד הפתוח של Android.
כשהמשתמש מגדיר קוד אימות או סיסמה במכשיר, רק המפתח בן 128 הביטים מוצפן מחדש ונשמר. (כלומר, שינויים בקוד האימות, בסיסמה או בתבנית של המשתמש לא גורמים להצפנה מחדש של נתוני המשתמש). שימו לב שמכשיר מנוהל עשוי להיות כפוף להגבלות על קוד אימות, קו פתיחת נעילה או סיסמה.
ההצפנה מנוהלת על ידי init ועל ידי vold.
init קורא ל-vold, ו-vold מגדיר מאפיינים להפעלת אירועים ב-init. חלקים אחרים במערכת בודקים גם את המאפיינים כדי לבצע משימות כמו דיווח על סטטוס, בקשת סיסמה או הצעה לאיפוס להגדרות המקוריות במקרה של שגיאה חמורה. כדי להפעיל את תכונות ההצפנה ב-vold, המערכת משתמשת בפקודות cryptfs של כלי שורת הפקודה vdc: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpw ו-clearpw.
כדי להצפין, לפענח או למחוק את /data, /data
אסור שיהיה מותקן. עם זאת, כדי להציג ממשק משתמש כלשהו, צריך להפעיל את ה-framework, וה-framework דורש /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: הצפנה חובה בהפעלה הראשונה (החל מ-Android L). - הצפנה של מכשיר קיים: הצפנה שמתבצעת על ידי המשתמש (Android K ומטה).
- הצפנת מכשיר חדש באמצעות
- הפעלה של מכשיר מוצפן:
- הפעלה של מכשיר מוצפן ללא סיסמה: אתחול של מכשיר מוצפן שלא הוגדרה לו סיסמה (רלוונטי למכשירים עם Android מגרסה 5.0 ואילך).
- הפעלת מכשיר מוצפן באמצעות סיסמה: אתחול של מכשיר מוצפן עם סיסמה מוגדרת.
בנוסף לתהליכים האלה, יכול להיות שהמכשיר לא יצליח להצפין את /data.
בהמשך מוסבר כל אחד מהתהליכים בפירוט.
הצפנת מכשיר חדש באמצעות forceencrypt
זהו האתחול הראשון הרגיל של מכשיר Android 5.0.
- זיהוי מערכת קבצים לא מוצפנת באמצעות הדגל
forceencrypt/dataלא מוצפן אבל צריך להיות מוצפן כיforceencryptמחייב זאת. ביטול ההצמדה של/data. - התחלת ההצפנה
/data
vold.decrypt = "trigger_encryption"triggersinit.rc, which causesvoldto encrypt/datawith no password. (לא מוגדר כלום כי זה אמור להיות מכשיר חדש). - טעינת tmpfs
voldיוצר tmpfs/data(באמצעות האפשרויות של tmpfs מ-ro.crypto.tmpfs_options) ומגדיר את המאפייןvold.encrypt_progressל-0. voldמכין את tmpfs/dataלאתחול של מערכת מוצפנת ומגדיר את המאפייןvold.decryptלערך:trigger_restart_min_framework - הצגת מסגרת כדי לראות את ההתקדמות
במכשיר כמעט אין נתונים להצפנה, ולכן סרגל ההתקדמות לא יופיע לעיתים קרובות כי ההצפנה מתבצעת במהירות. מידע נוסף על ממשק המשתמש של ההתקדמות מופיע במאמר בנושא הצפנת מכשיר קיים.
- כש-
/dataמוצפן, צריך להסיר את המסגרת
voldמגדיר אתvold.decryptל-trigger_default_encryption, וכך מתחיל השירותdefaultcrypto. (כך מתחיל התהליך שמתואר בהמשך להרכבת נתוני משתמש מוצפנים שמוגדרים כברירת מחדל). trigger_default_encryptionבודק את סוג ההצפנה כדי לראות אם/dataמוצפן עם סיסמה או בלי סיסמה. מכיוון שמכשירי Android 5.0 מוצפנים בהפעלה הראשונה, לא אמורה להיות סיסמה מוגדרת. לכן אנחנו מבטלים את ההצפנה של/dataומעלים אותו. - טעינה
/data
initואז טוען את/dataב-RAMDisk של tmpfs באמצעות פרמטרים שהוא מקבל מ-ro.crypto.tmpfs_options, שמוגדר ב-init.rc. - הפעלת מסגרת
voldמגדיר אתvold.decryptל-trigger_restart_framework, וממשיך בתהליך האתחול הרגיל.
הצפנה של מכשיר קיים
זה מה שקורה כשמצפינים מכשיר Android K או גרסה קודמת לא מוצפנת שהועברה ל-L.
התהליך הזה מתחיל על ידי המשתמש והוא נקרא 'הצפנה במקום' בקוד. כשמשתמש בוחר להצפין מכשיר, ממשק המשתמש מוודא שהסוללה טעונה במלואה ומתאם ה-AC מחובר, כדי שיהיה מספיק חשמל להשלמת תהליך ההצפנה.
אזהרה: אם הסוללה של המכשיר מתרוקנת והוא נכבה לפני שההצפנה מסתיימת, נתוני הקובץ נשארים במצב מוצפן חלקי. המכשיר צריך לעבור איפוס להגדרות המקוריות וכל הנתונים יימחקו.
כדי להפעיל הצפנה במקום, vold מתחיל לולאה לקריאת כל סקטור של מכשיר הבלוק האמיתי ואז כתיבה שלו למכשיר הבלוק המוצפן. vold בודקת אם סקטור נמצא בשימוש לפני שהיא קוראת אותו וכותבת בו, מה שהופך את ההצפנה למהירה הרבה יותר במכשיר חדש שיש בו מעט נתונים או שאין בו נתונים בכלל.
מצב המכשיר: מגדירים את ro.crypto.state = "unencrypted"
ומפעילים את טריגר on nonencrypted init כדי להמשיך בהפעלה.
- בדיקת סיסמה
ממשק המשתמש קורא לפקודה
voldעם הפקודהcryptfs enablecrypto inplace, כאשרpasswdהיא הסיסמה של מסך הנעילה של המשתמש. - הסרת המסגרת
הפונקציה
voldבודקת אם יש שגיאות, מחזירה -1 אם היא לא מצליחה להצפין, ומדפיסה סיבה ביומן. אם אפשר להצפין, המאפייןvold.decryptמוגדר לערךtrigger_shutdown_framework. כתוצאה מכך,init.rcמפסיק את השירותים בכיתותlate_startו-main. - יצירת כותרת תחתונה עם הצפנה
- יצירת קובץ של נתיב הניווט
- הפעלה מחדש
- זיהוי קובץ נתיב ניווט
- התחלת ההצפנה
/data
voldואז מגדיר את מיפוי ההצפנה, שיוצר מכשיר בלוקים וירטואלי להצפנה שממופה למכשיר הבלוקים האמיתי, אבל מצפין כל סקטור בזמן הכתיבה ומפענח כל סקטור בזמן הקריאה. voldיוצר וכותב את המטא-נתונים של המטבעות הווירטואליים. - בזמן ההצפנה, טוענים את tmpfs
voldיוצר tmpfs/data(באמצעות האפשרויות של tmpfs מ-ro.crypto.tmpfs_options) ומגדיר את המאפייןvold.encrypt_progressל-0. voldמכין את tmpfs/dataלהפעלה של מערכת מוצפנת ומגדיר את המאפייןvold.decryptלערך:trigger_restart_min_framework - הצגת מסגרת כדי לראות את ההתקדמות
trigger_restart_min_frameworkגורם ל-init.rcלהתחיל את מחלקת השירותיםmain. כשהמסגרת מזהה שהערך שלvold.encrypt_progressהוא 0, היא מציגה את ממשק המשתמש של סרגל ההתקדמות, שמבצע שאילתה לגבי המאפיין הזה כל חמש שניות ומעדכן את סרגל ההתקדמות. הלולאה של ההצפנה מתעדכנתvold.encrypt_progressבכל פעם שהיא מצפינה עוד אחוז מהמחיצה. - When
/datais encrypted, update the crypto footerכש-
/dataמוצפן בהצלחה,voldמנקה את הדגלENCRYPTION_IN_PROGRESSבמטא-נתונים.כשהנעילה של המכשיר מבוטלת בהצלחה, הסיסמה משמשת להצפנה של המפתח הראשי, והכותרת התחתונה של ההצפנה מתעדכנת.
אם האתחול מחדש נכשל מסיבה כלשהי,
voldמגדיר את המאפייןvold.encrypt_progressלערךerror_reboot_failed, וממשק המשתמש צריך להציג הודעה שבה המשתמש מתבקש ללחוץ על לחצן כדי לבצע אתחול מחדש. לא צפוי שזה יקרה.
הפעלה של מכשיר מוצפן עם הצפנה שמוגדרת כברירת מחדל
זה מה שקורה כשמפעילים מכשיר מוצפן ללא סיסמה. מכשירי Android מגרסה 5.0 מוצפנים בהפעלה הראשונה, ולכן לא אמורה להיות מוגדרת סיסמה. זהו מצב ההצפנה שמוגדרת כברירת מחדל.
- זיהוי של
/dataמוצפנים ללא סיסמהלזהות שהמכשיר Android מוצפן כי אי אפשר לטעון את
/dataואחד מהדגליםencryptableאוforceencryptמוגדר.
voldמגדיר אתvold.decryptל-trigger_default_encryption, וכך מתחיל את השירותdefaultcrypto. trigger_default_encryptionבודק את סוג ההצפנה כדי לראות אם/dataמוצפן עם סיסמה או בלי סיסמה. - Decrypt /data
יוצר את מכשיר
dm-cryptמעל מכשיר החסימה, כדי שהמכשיר יהיה מוכן לשימוש. - טעינת הנתונים
voldואז מתבצעת טעינה של מחיצת/dataאמיתית מפוענחת ואז המחיצה החדשה מוכנה. הוא מגדיר את המאפייןvold.post_fs_data_doneל-0 ואז מגדיר אתvold.decryptל-trigger_post_fs_data. בעקבות זאת, הפקודות שלpost-fs-dataמופעלות ב-init.rc. הם יוצרים את כל הספריות או הקישורים הנדרשים ואז מגדירים אתvold.post_fs_data_doneל-1.אחרי ש-
voldמזהה את הערך 1 במאפיין הזה, הוא מגדיר את המאפייןvold.decryptלערך:trigger_restart_framework.כתוצאה מכך,init.rcמתחיל שוב את השירותים בכיתהmainוגם מתחיל את השירותים בכיתהlate_startבפעם הראשונה מאז האתחול. - הפעלת מסגרת
עכשיו המסגרת מפעילה את כל השירותים שלה באמצעות
/dataשפוענח, והמערכת מוכנה לשימוש.
הפעלה של מכשיר מוצפן ללא הצפנה כברירת מחדל
זה מה שקורה כשמפעילים מכשיר מוצפן עם סיסמה מוגדרת. הסיסמה של המכשיר יכולה להיות קוד אימות, קו פתיחת נעילה או סיסמה.
- זיהוי מכשיר מוצפן עם סיסמה
לזהות שמכשיר Android מוצפן כי הדגל
ro.crypto.state = "encrypted"
voldמגדיר אתvold.decryptל-trigger_restart_min_frameworkכי/dataמוצפן באמצעות סיסמה. - טעינת tmpfs
initמגדיר חמישה מאפיינים לשמירת אפשרויות ההרכבה הראשוניות שצוינו עבור/dataעם פרמטרים שהועברו מ-init.rc. voldמשתמש במאפיינים האלה כדי להגדיר את מיפוי ההצפנה:ro.crypto.fs_typero.crypto.fs_real_blkdevro.crypto.fs_mnt_pointro.crypto.fs_options-
ro.crypto.fs_flags(ASCII 8-digit hex number preceded by 0x)
- הפעלת מסגרת להצגת בקשה להזנת סיסמה
המסגרת מופעלת ורואה שהערך של
vold.decryptמוגדר ל-trigger_restart_min_framework. ההגדרה הזו מציינת למסגרת שהיא מופעלת בדיסק tmpfs/dataושהיא צריכה לקבל את סיסמת המשתמש.אבל קודם צריך לוודא שהדיסק הוצפן בצורה תקינה. הפקודה
cryptfs cryptocompleteנשלחת אלvold. הפונקציהvoldמחזירה 0 אם ההצפנה הושלמה בהצלחה, -1 אם הייתה שגיאה פנימית או -2 אם ההצפנה לא הושלמה בהצלחה. voldקובע את זה על ידי בדיקה של המטא-נתונים של ההצפנה כדי למצוא את הדגלCRYPTO_ENCRYPTION_IN_PROGRESS. אם המדיניות מוגדרת, תהליך ההצפנה הופסק ואין נתונים שניתן להשתמש בהם במכשיר. אם הפקודהvoldמחזירה שגיאה, בממשק המשתמש תוצג הודעה למשתמש להפעיל מחדש את המכשיר ולאפס אותו להגדרות המקוריות, ויוצג לחצן שאפשר ללחוץ עליו כדי לבצע את הפעולות האלה. - פענוח נתונים באמצעות סיסמה
אחרי ש-
cryptfs cryptocompleteיסתיים בהצלחה, יוצג בממשק המשתמש של המסגרת חלון עם בקשה להזנת הסיסמה של הדיסק. ממשק המשתמש בודק את הסיסמה על ידי שליחת הפקודהcryptfs checkpwאלvold. אם הסיסמה נכונה (הסיסמה נקבעת על ידי טעינה מוצלחת של/dataהמוצפן במיקום זמני, ואז ביטול הטעינה שלו),voldשומר את השם של מכשיר הבלוק המוצפן במאפייןro.crypto.fs_crypto_blkdevומחזיר את הסטטוס 0 לממשק המשתמש. אם הסיסמה שגויה, הפונקציה מחזירה את הערך -1 לממשק המשתמש. - Stop framework
בממשק המשתמש מוצגת גרפיקה של אתחול מוצפן, ואז מתבצעת קריאה ל-
voldעם הפקודהcryptfs restart. הקודvoldמגדיר את המאפייןvold.decryptלערךtrigger_reset_main, וכתוצאה מכךinit.rcמבצע את הפעולהclass_reset main. הפעולה הזו מפסיקה את כל השירותים בכיתה הראשית, וכך אפשר לבטל את ההרכבה של tmpfs/data. - טעינה
/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בפעם הראשונה מאז האתחול. - התחלת מסגרת מלאה
עכשיו המסגרת מפעילה את כל השירותים שלה באמצעות מערכת הקבצים המפוענחת
/dataוהמערכת מוכנה לשימוש.
כישלון
יכולות להיות כמה סיבות לכך שמכשיר לא מצליח לפענח את הנתונים. המכשיר מתחיל עם סדרת השלבים הרגילה להפעלה:
- זיהוי מכשיר מוצפן באמצעות סיסמה
- טעינת tmpfs
- התחלת מסגרת להצגת בקשה לסיסמה
אבל אחרי שהמסגרת נפתחת, יכולות להיות שגיאות במכשיר:
- הסיסמה תואמת אבל אי אפשר לפענח את הנתונים
- המשתמש מזין סיסמה שגויה 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. בממשק המשתמש תוצג הודעה שההצפנה נכשלה, ויוצג כפתור לאיפוס המכשיר להגדרות המקוריות.
אחסון המפתח המוצפן
המפתח המוצפן מאוחסן במטא-נתונים של ההצפנה. הגיבוי בחומרה מיושם באמצעות יכולת החתימה של סביבת מחשוב אמינה (TEE). בעבר, הצפנו את מפתח המאסטר באמצעות מפתח שנוצר על ידי החלת scrypt על הסיסמה של המשתמש והמלח המאוחסן. כדי שהמפתח יהיה עמיד בפני מתקפות מחוץ לתיבה, אנחנו מרחיבים את האלגוריתם הזה על ידי חתימה על המפתח שמתקבל באמצעות מפתח TEE מאוחסן. לאחר מכן, החתימה שמתקבלת הופכת למפתח באורך המתאים על ידי יישום נוסף של scrypt. לאחר מכן המפתח הזה משמש להצפנה ולפענוח של מפתח המאסטר. כדי לאחסן את המפתח הזה:
- יצירת מפתח רנדומלי להצפנת דיסק (DEK) באורך 16 בייט ומלח באורך 16 בייט.
- מחילים scrypt על סיסמת המשתמש ועל ה-salt כדי ליצור מפתח ביניים 1 (IK1) בגודל 32 בייט.
- מוסיפים ל-IK1 בייטים של אפסים עד לגודל של המפתח הפרטי שקשור לחומרה (HBK). באופן ספציפי, הריפוד הוא: 00 || IK1 || 00..00; בייט אחד של אפס, 32 בייטים של IK1, 223 בייטים של אפס.
- חותמים על IK1 עם HBK כדי ליצור IK2 באורך 256 בייט.
- מפעילים scrypt על IK2 ומלח (אותו מלח כמו בשלב 2) כדי ליצור IK3 בגודל 32 בייט.
- משתמשים ב-16 הבייטים הראשונים של IK3 כ-KEK וב-16 הבייטים האחרונים כ-IV.
- מצפינים את ה-DEK באמצעות AES_CBC, עם מפתח KEK ווקטור אתחול IV.
שינוי הסיסמה
כשמשתמש בוחר לשנות או להסיר את הסיסמה שלו בהגדרות, ממשק המשתמש שולח את הפקודה cryptfs changepw אל vold, ו-vold מצפין מחדש את מפתח הראשי של הדיסק באמצעות הסיסמה החדשה.
מאפייני הצפנה
vold ו-init מתקשרים ביניהם באמצעות הגדרת מאפיינים. הנה רשימה של מאפיינים זמינים להצפנה.
מאפייני Vold
| מאפיין (property) | תיאור |
|---|---|
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 כדי להפעיל את ממשק המשתמש של סרגל ההתקדמות להצפנה או כדי להציג בקשה להזנת סיסמה, בהתאם לערך של 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
| מאפיין (property) | תיאור |
|---|---|
ro.crypto.fs_crypto_blkdev |
מוגדר על ידי הפקודה vold checkpw לשימוש מאוחר יותר על ידי הפקודה vold restart. |
ro.crypto.state unencrypted |
הוגדר על ידי init כדי לציין שהמערכת הזו פועלת עם /data ro.crypto.state encrypted לא מוצפן. ההגדרה נקבעה על ידי init כדי לציין
שהמערכת הזו פועלת עם /data מוצפן. |
|
חמשת המאפיינים האלה מוגדרים על ידי init כשהוא מנסה לטעון את /data עם פרמטרים שמועברים מ-init.rc. vold משתמש בהם כדי להגדיר את מיפוי ההצפנה. |
ro.crypto.tmpfs_options |
הערך מוגדר על ידי init.rc עם האפשרויות שצריך להשתמש בהן כשמפעילים את מערכת הקבצים tmpfs /data. |
פעולות init
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