הצפנת דיסק מלא היא התהליך של קידוד כל נתוני המשתמשים במכשיר Android באמצעות מפתח מוצפן. אחרי שהמכשיר מוצפן, כל הנתונים שנוצרו על ידי משתמשים מוצפן באופן אוטומטי לפני שמירתו לדיסק וכל הקריאות תפענחו את הנתונים באופן אוטומטי לפני שתחזירו אותם לתהליך הקריאה.
ב-Android נוספה הצפנת דיסק מלא, אבל היא הושקה ב-Android 5.0. את התכונות החדשות הבאות:
- נוצרה הצפנה מהירה, שמצפינה רק בלוקים שנעשה בהם שימוש במחיצת הנתונים כדי שהאתחול הראשון יימשך זמן רב. רק במערכות קבצים ext4 ו-f2fs תומכים כרגע בהצפנה מהירה.
- הוספת את
forceencrypt
סימון fstab להצפנה באתחול הראשון. - נוספה תמיכה בתבניות ובהצפנה ללא סיסמה.
- נוסף אחסון של מפתח ההצפנה בגיבוי חומרה באמצעות חשבון מהימן יכולת החתימה של סביבת הביצוע (TEE) (למשל ב-TrustZone). מידע נוסף מופיע במאמר אחסון המפתח המוצפן פרטים.
זהירות: מכשירים שודרגו ל-Android 5.0 ולאחר מכן ייתכן שהוצפן יוחזר למצב לא מוצפן על ידי איפוס לנתוני היצרן. גרסת Android 5.0 חדשה מכשירים שהוצפנו בהפעלה הראשונה לא ניתן להחזיר למצב לא מוצפן.
איך פועלת ההצפנה של דיסק מלא ב-Android
הצפנת דיסק מלא ב-Android מבוססת על dm-crypt
, שהיא ליבה
שפועלת בשכבת הבלוקים של המכשיר. בגלל
ההצפנה פועלת עם כרטיס MultiMediaCard מוטמע (eMMC)
מכשירי Flash דומים שמציגים את עצמם בפני הליבה בתור בלוק
מכשירים. אי אפשר להצפין באמצעות YAFFS, שמדבר ישירות עם
שבב פלאש NAND.
אלגוריתם ההצפנה הוא 128 Advanced Encryption Standard (AES) עם שרשורי הצפנה עם בלוקים (CBC) ו-ESSIV:SHA256. מפתח המאסטר מוצפן באמצעות AES ב-128 ביט דרך קריאות לספריית OpenSSL. עליך להשתמש ב-128 סיביות או יותר עבור את המפתח (כש-256 הוא אופציונלי).
הערה:יצרני ציוד מקורי יכולים להשתמש בגרסת 128 ביט ומעלה כדי להצפין את מפתח המאסטר.
בגרסה Android 5.0 קיימים ארבעה סוגים של מצבי הצפנה:
- ברירת מחדל
- קוד אימות
- סיסמה
- קו ביטול נעילה
בהפעלה הראשונה, המכשיר יוצר מפתח מאסטר של 128 ביט שנוצר באופן אקראי ואז הוא מגבב אותו עם סיסמת ברירת מחדל ונתוני salt מאוחסן. סיסמת ברירת המחדל היא: "default_password" עם זאת, הגיבוב שנוצר נחתם גם דרך TEE (למשל TrustZone), שמשתמש בגיבוב של החתימה כדי להצפין את מפתח המאסטר.
אפשר למצוא את סיסמת ברירת המחדל שמוגדרת בפרויקט הקוד הפתוח של Android cryptfs.cpp חדש.
כשהמשתמש מגדיר קוד אימות/כרטיס או סיסמה במכשיר, רק המפתח של 128 ביט. מוצפן מחדש ומאוחסן. (למשל, שינויים בקוד האימות/הכרטיס/הדפוס של המשתמש לא גורמים הצפנה מחדש של נתוני המשתמש). שימו לב מכשיר מנוהל עשוי להיות כפוף להגבלות של קוד האימות, קו ביטול הנעילה או הסיסמה.
ההצפנה מנוהלת על ידי init
ועל ידי vold
.
init
קורא ל-vold
, והמאפיינים להפעלה
אירועים באתחול. חלקים אחרים במערכת
לבדוק גם את המאפיינים כדי לבצע משימות כמו סטטוס של דיווח, לבקש
או בקשה לאיפוס להגדרות המקוריות במקרה של שגיאה חמורה. להפעלה
תכונות הצפנה ב-vold
, המערכת משתמשת בכלי שורת הפקודה
פקודות cryptfs
של vdc
: checkpw
,
restart
, enablecrypto
, changepw
,
cryptocomplete
, verifypw
, setfield
,
getfield
, mountdefaultencrypted
, getpwtype
,
getpw
וגם clearpw
.
כדי להצפין, לפענח או לאפס את הנתונים של /data
, /data
שלא ניתן לטעון. עם זאת, כדי להציג כל ממשק משתמש (UI),
ה-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
.
כל אחד מהתהליכים מוסבר בפירוט בהמשך.
הצפנת מכשיר חדש באמצעות כוח הצפנה
זוהי הפעלה ראשונה רגילה של מכשיר Android 5.0.
- זיהוי של מערכת קבצים לא מוצפנת באמצעות הדגל
forceencrypt
הקובץ
/data
לא מוצפן, אבל צריך לבצע אותו כי הפקודהforceencrypt
מורה על כך. ניתוק/data
. - התחלת ההצפנה
/data
vold.decrypt = "trigger_encryption"
מפעיל אתinit.rc
, שיגרום ל-vold
להצפין את/data
ללא סיסמה. (לא הוגדר כי המכשיר אמור להיות חדש). - Mount tmpfs
vold
טוען tmpfs/data
(באמצעות אפשרויות tmpfs מ-ro.crypto.tmpfs_options
) ומגדיר את המאפייןvold.encrypt_progress
כ-0.vold
מכין את קוד האימות/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
, שממשיך את האתחול הרגיל תהליך האימות.
הצפנת מכשיר קיים
זה מה שקורה כשמצפינים K או גרסאות קודמות של Android לא מוצפן שהועבר ל-L.
התהליך הזה מופעל ביוזמת המשתמש והוא נקרא 'הצפנה במקום' בקוד. כשמשתמש בוחר להצפין מכשיר, ממשק המשתמש מוודא הסוללה טעונה במלואה ומתאם ה-AC מחובר, כך שיש מספיק כוח כדי לסיים את תהליך ההצפנה.
אזהרה: אם סוללת המכשיר מתרוקנת והוא ייכבה לפני שהוא הסתיים בזמן ההצפנה, נתוני הקובץ נשארים במצב מוצפן חלקית. המכשיר צריך יתבצע איפוס להגדרות המקוריות וכל הנתונים יאבדו.
כדי להפעיל הצפנה במקום, vold
מפעיל לולאה כדי לקרוא כל אחד מהם
של מכשיר הבלוק האמיתי, ואז לכתוב
למכשיר לבלוקים וירטואליים. vold
בודק אם מגזר מסוים נמצא
לשימוש לפני קריאה וכתיבה,
להצפין מהר יותר במכשיר חדש שאין בו מספיק נתונים או שאין בו נתונים בכלל.
מצב המכשיר: מגדירים את הערך ro.crypto.state = "unencrypted"
ומפעילים את הטריגר init
on nonencrypted
כדי להמשיך באתחול.
- בדיקת הסיסמה
ממשק המשתמש מפעיל את הפקודה
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
. כשה-framework רואה הערך שלvold.encrypt_progress
מוגדר ל-0, וזה מציג את סרגל ההתקדמות ממשק משתמש, ששולח שאילתה לגבי המאפיין הזה כל 5 שניות ומעדכן סרגל התקדמות. לולאת ההצפנה מתעדכנתvold.encrypt_progress
בכל פעם מצפין אחוז נוסף מהמחיצה. - כשהמזהה
/data
מוצפן, צריך לעדכן את הכותרת התחתונה של ההצפנהאם
/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
מוצפן עם או ללא סיסמה. - פענוח /נתונים
יוצר את המכשיר
dm-crypt
דרך התקן הבלוקים, כך שהמכשיר מוכן לשימוש. - טעינה /נתונים
לאחר מכן
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
בפעם הראשונה הזמן שעבר מאז האתחול. - התחלת מסגרת
עכשיו ה-framework מפעיל את כל השירותים שלה באמצעות
/data
המפוענח, והמערכת מוכנה לשימוש.
התחלת מכשיר מוצפן ללא הצפנה כברירת מחדל
זה מה שקורה כשמפעילים מכשיר מוצפן שיש לו סיסמה. סיסמת המכשיר יכולה להיות קוד אימות, קו ביטול נעילה או סיסמה.
- זיהוי של מכשיר מוצפן עם סיסמה
זיהוי שמכשיר Android מוצפן מפני שהדגל
ro.crypto.state = "encrypted"
vold
מגדיר אתvold.decrypt
כtrigger_restart_min_framework
כי/data
שהוצפנו באמצעות סיסמה. - Mount tmpfs
init
מגדיר חמישה מאפיינים לשמירת אפשרויות הטעינה הראשוניות נתון עבור/data
עם פרמטרים שהועברו מ-init.rc
.vold
משתמש במאפיינים הבאים כדי להגדיר את מיפוי הקריפטו:ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(מספר הקסדצימלי בן 8 ספרות של ASCII שלפני 0x)
- איך להפעיל את ה-framework כדי לבקש סיסמה
ה-framework מתחיל לפעול ומזהה שהערך של
vold.decrypt
מוגדרtrigger_restart_min_framework
. זה אומר ל-framework שמופעלת בדיסק tmpfs/data
וצריך לקבל את סיסמת המשתמש.עם זאת, קודם צריך לוודא שהדיסק הוצפן בצורה תקינה. הוא שולח את הפקודה
cryptfs cryptocomplete
אלvold
. הפונקציהvold
מחזירה 0 אם ההצפנה הושלמה בהצלחה, -1 במקרה של שגיאה פנימית, או -2 אם ההצפנה לא הושלמה.vold
קובע באמצעות חיפוש במטא-נתונים הקריפטוגרפיים שלCRYPTO_ENCRYPTION_IN_PROGRESS
לסמן. אם היא מוגדרת, תהליך ההצפנה נקטע ואין שאפשר להשתמש בהם במכשיר. אם הפונקציהvold
מחזירה שגיאה, ממשק המשתמש להציג הודעה למשתמש שעליו להפעיל מחדש את המכשיר ולאפס אותו להגדרות המקוריות, ולספק למשתמש צריך ללחוץ על לחצן כדי לעשות זאת. - הצפנת הנתונים באמצעות סיסמה
אחרי ביצוע של
cryptfs cryptocomplete
בהצלחה, ה-framework מציג ממשק משתמש שמבקש את סיסמת הדיסק. ממשק המשתמש בודק את הסיסמה על ידי שולח את הפקודהcryptfs checkpw
אלvold
. אם נכונה (שנקבעת לאחר טעינה מוצלחת של/data
פוענח במיקום זמני ולאחר מכן מנתק אותו), השם של מכשיר הבלוק המפוענח בנכס המפוענח נשמר על ידיvold
ro.crypto.fs_crypto_blkdev
ומחזירה את הסטטוס 0 לממשק המשתמש. אם הסיסמה שגויה, היא מחזירה לממשק המשתמש את המספר 1. - הפסקת המסגרת
ממשק המשתמש יוצר גרפיקה של אתחול הצפנה ואז קורא ל-
vold
באמצעות הפקודהcryptfs restart
. המאפייןvold
מוגדרvold.decrypt
עדtrigger_reset_main
, וזו הסיבהinit.rc
כדי לבצעclass_reset main
. הפעולה הזו תפסיק את כל השירותים במחלקה הראשית, וכך ניתן לנתק את הטעינה של/data
ה-tmpf. - טעינה
/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
בפעם הראשונה מאז האתחול. - התחלת המסגרת המלאה
עכשיו ה-framework מפעיל את כל השירותים שלה באמצעות
/data
המפוענח והמערכת מוכנה לשימוש.
נכשלה
מכשיר שהפענוח שלו נכשל, עלול להיות לא תקין מכמה סיבות. המכשיר מתחיל בסדרת השלבים הרגילה לאתחול:
- זיהוי מכשיר מוצפן עם סיסמה
- טעינת tmfs
- הפעלת framework כדי לבקש סיסמה
עם זאת, לאחר פתיחת ה-framework, עשויות להיות במכשיר שגיאות מסוימות:
- הסיסמה תואמת אבל לא ניתן לפענח את הנתונים
- המשתמש הזין סיסמה שגויה 30 פעמים
אם השגיאות האלה לא נפתרו, מבקשים מהמשתמש לאפס את הנתונים להגדרות המקוריות:
אם vold
מזהה שגיאה בתהליך ההצפנה, ואם
עדיין לא נהרסו נתונים וה-framework מוכן, vold
מגדיר
הנכס vold.encrypt_progress
ל-error_not_encrypted
.
ממשק המשתמש מציג למשתמש בקשה לבצע הפעלה מחדש ושולח התראה על תהליך ההצפנה
מעולם לא התחיל. אם השגיאה מתרחשת לאחר שה-framework הוסר, אבל
לפני שממשק המשתמש של סרגל ההתקדמות יוצג, המערכת תופעל מחדש על ידי vold
. אם המיקום
ההפעלה מחדש נכשלת, היא מגדירה את vold.encrypt_progress
error_shutting_down
ומחזירה את הערך -1; אבל לא יהיה שום דבר
כדי לזהות את השגיאה. המצב הזה לא צפוי לקרות.
אם vold
מזהה שגיאה בתהליך ההצפנה, היא מגדירה
vold.encrypt_progress
עד error_partially_encrypted
ומחזירה את הערך 1-. לאחר מכן, ממשק המשתמש אמור להציג הודעה שבה כתוב שההצפנה
הפעולה נכשלה ולספק למשתמש לחצן לאיפוס המכשיר להגדרות המקוריות.
אחסון המפתח המוצפן
המפתח המוצפן מאוחסן במטא-נתונים הקריפטוגרפיים. גיבוי החומרה הוא הוטמעו באמצעות יכולת החתימה של סביבת ביצוע מהימנה (TEE). בעבר, הצפנו את מפתח המאסטר באמצעות מפתח שנוצר באמצעות הצפנת scrypt לסיסמה של המשתמש ולנתוני ה-salt המאוחסנים. כדי שהמפתח עמיד מפני התקפות מחוץ לקופסה, אנחנו מרחיבים את האלגוריתם הזה על ידי חתימה על המפתח שמתקבל באמצעות מפתח TEE שמור. לאחר מכן החתימה שמתקבלת הופכת ל באורך של עוד אפליקציה אחת של scrypt. המפתח הזה משמש להצפנה ולפענח את מפתח המאסטר. כדי לאחסן את המפתח הזה:
- יצירת מפתח להצפנת דיסקים (DEK) אקראי בגודל 16 בייט ו-salt של 16 בייטים.
- החילו scrypt על סיסמת המשתמש ואת ה-salt כדי ליצור ביניים של 32 בייטים מקש 1 (IK1).
- Pad IK1 עם אפס בייטים לגודל המפתח הפרטי המקושר לחומרה (HBK). וספציפית, יש להזין את הקוד כך: 00 || IK1 || 00..00; אפס בייט אחד, 32 בייט IK1, 223 אפס בייטים.
- שלחו IK1 מרופד עם HBK כדי להפיק IK2 של 256 בייט.
- מחילים scrypt על IK2 ו-salt (אותו המלח כמו בשלב 2) כדי ליצור IK3 32 בייטים.
- משתמשים ב-16 הבייטים הראשונים של IK3 בתור KEK וב-16 הבייטים האחרונים בתור IV.
- הצפנת DEK באמצעות AES_CBC, עם מפתח KEK ווקטור אתחול IV.
שינוי הסיסמה
כשמשתמש בוחר לשנות או להסיר את הסיסמה שלו בהגדרות, ממשק המשתמש שולח
הפקודה cryptfs changepw
אל vold
,
vold
מצפין מחדש את מפתח המאסטר של הדיסק באמצעות הסיסמה החדשה.
מאפייני ההצפנה
vold
ו-init
מתקשרים ביניהם באמצעות
שמגדירים את המאפיינים. בהמשך מופיעה רשימה של מאפיינים זמינים להצפנה.
מאפייני Vold
נכס | תיאור |
---|---|
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 כדי להפעיל את ה-framework האמיתי וכל השירותים. |
vold.decrypt trigger_shutdown_framework |
יש להגדיר ב-vold כדי לכבות את ה-framework המלא כדי להתחיל בהצפנה. |
vold.decrypt trigger_restart_min_framework |
מוגדר ב-vold כדי להפעיל את
ממשק המשתמש של סרגל ההתקדמות להצפנה
בקשה לסיסמה, בהתאם
הערך של ro.crypto.state . |
vold.encrypt_progress |
כשה-framework מתחיל, אם המאפיין הזה מוגדר, מזינים את מצב ממשק המשתמש של סרגל ההתקדמות. |
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 . |
מאפייני אתחול
נכס | תיאור |
---|---|
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 עם האפשרויות שצריך להשתמש בהן כאשר
בטעינת מערכת הקבצים /data של tmpfs. |
התחלת פעולות
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