7.0 אנדרואיד תומך גבוה מבוסס קובץ הצפנה (FBE). FBE מאפשר להצפין קבצים שונים באמצעות מפתחות שונים אותם ניתן לפתוח באופן עצמאי. מפתחות אלה משמשים להצפנת תוכן הקבצים ושמות הקבצים. כאשר משתמשים ב- FBE, מידע אחר, כגון פריסות ספריות, גדלי קבצים, הרשאות וזמני יצירה/שינוי, אינו מוצפן. ביחד, מידע אחר זה ידוע כמטא נתונים של מערכת הקבצים.
Android 9 הציג תמיכה בהצפנת מטא נתונים. עם הצפנת מטא נתונים, מפתח יחיד שנמצא בזמן האתחול מצפין כל תוכן שאינו מוצפן על ידי FBE. מפתח זה מוגן על ידי Keymaster, אשר בתורו מוגן על ידי אתחול מאומת.
הצפנה Metadata מופעלת תמיד על אחסון לאימוץ בכל פעם FBE מופעלת. ניתן גם להפעיל הצפנת מטא נתונים באחסון פנימי. התקנים שהושקו עם אנדרואיד 11 ומעלה חייבים להיות בעלי הצפנת מטא נתונים על אחסון פנימי.
יישום על אחסון פנימי
באפשרותך להגדיר הצפנה מטה על האחסון הפנימי של מכשירים חדשים על ידי ההקמה metadata
מערכת קבצים, שינוי של רצף init, ולאפשר הצפנת metadata בקובץ fstab של המכשיר.
תנאים מוקדמים
ניתן להגדיר הצפנת מטא -נתונים רק כאשר מחיצת הנתונים מעוצבת לראשונה. כתוצאה מכך, תכונה זו מיועדת רק למכשירים חדשים; זה לא משהו ש- OTA צריך לשנות.
הצפנת מידע נוסף מחייב את dm-default-key
מודול להיות מופעלות הקרנל שלך. בשנת אנדרואיד 11 ומעלה, dm-default-key
נתמך על ידי גרעינים המשותף אנדרואיד, בגרסה 4.14 ומעלה. גרסה זו של dm-default-key
משתמשת "סהרורים BLK שנקרא חומרת מסגרת הצפנה עצמאית-ספק.
כדי לאפשר dm-default-key
, להשתמש:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y CONFIG_DM_DEFAULT_KEY=y
dm-default-key
שימושים מוטבעי חומרת הצפנה (חומרה שמצפין / מפענח נתונים בזמן שהוא בדרך / מהתקן האחסון) כאשר זמינה. אם לא יהיה באמצעות חומרת הצפנה מוטבעת, זה גם הכרחי כדי לאפשר שחזור ל- API קריפטוגרפיה של הקרנל:
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
כאשר לא באמצעות חומרת הצפנה מוטבעת אתה צריך גם לאפשר אצה מבוססת מעבד זמינה כמומלץ תיעוד FBE .
בשנת אנדרואיד 10 ומטה, dm-default-key
לא נתמך על ידי הקרנל המשותף אנדרואיד. לכן היה עד ספקים ליישם dm-default-key
.
הגדר מערכת קבצים של מטא נתונים
מכיוון שלא ניתן לקרוא כלום במחיצת הנתונים של המשתמש עד שמפתח ההצפנה של המטא -נתונים קיים, על שולחן המחיצות להפריד מחיצה נפרדת בשם "מחיצת המטא -נתונים" לאחסון כתמי keymaster המגנים על מפתח זה. מחיצת המטא -נתונים צריכה להיות 16MB.
fstab.hardware
חייב לכלול ערך עבור מערכת הקבצים מטה אשר חייהם על מחיצה כי זה גובר על /metadata
, כולל formattable
הדגל כדי לוודא שהוא מעוצב בזמן האתחול. מערכת הקבצים f2fs אינה פועלת במחיצות קטנות יותר; אנו ממליצים להשתמש ב- ext4 במקום זאת. לדוגמה:
/dev/block/bootdevice/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard wait,check,formattable
כדי להבטיח את /metadata
את נקודת העיגון קיים, להוסיף את השורה הבאה BoardConfig-common.mk
:
BOARD_USES_METADATA_PARTITION := true
שינויים ברצף init
כאשר הצפנה מטה משמשת, vold
חייב לפעול לפני /data
מותקנים. כדי לוודא שהוא התחיל מוקדם מספיק, מוסיף את חרוז הבאה כדי init.hardware.rc
:
# We need vold early for metadata encryption on early-fs start vold
Keymaster חייב לפעול ומוכן לפני ניסיונות init לעלות /data
.
init.hardware.rc
צריך כבר מכילים mount_all
הוראה אשר תושבות /data
עצמה on late-fs
חרוזה. לפני הקו הזה, להוסיף את ההוראה exec wait_for_keymaster
שירות:
on late-fs … # Wait for keymaster exec_start wait_for_keymaster # Mount RW partitions which need run fsck mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late
הפעלת הצפנת מטא נתונים
לבסוף מוסיפים keydirectory=/metadata/vold/metadata_encryption
לעמודה fs_mgr_flags של fstab
כניסה userdata
. לדוגמה, קו fstab מלא עשוי להיראות כך:
/dev/block/bootdevice/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,inlinecrypt latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable
כברירת מחדל, אלגוריתם הצפנת המטא-נתונים באחסון הפנימי הוא AES-256-XTS. ניתן לעקוף על ידי קביעת metadata_encryption
אפשרות, גם בטור fs_mgr_flags:
- במכשירים חוסר האצת AES, הצפנה שֵׂעַרוֹת שׁוּלָמִית עשוי להיות מופעל על ידי קביעת
metadata_encryption=adiantum
. - במכשירים התומכים המפתחות חומרה עטוף , מפתח ההצפנה metadata יכול להתבצע עטוף החומרה על ידי הגדרת
metadata_encryption=aes-256-xts:wrappedkey_v0
(או באופן שקולmetadata_encryption=:wrappedkey_v0
, כמוaes-256-xts
הוא אלגוריתם ברירת המחדל).
בגלל הממשק הקרנל כדי dm-default-key
השתנה אנדרואיד 11, גם אתה צריך לוודא שיש לך להגדיר את הערך הנכון עבור PRODUCT_SHIPPING_API_LEVEL
ב device.mk
. לדוגמה, אם השקות מכשירות עם 11 אנדרואיד (רמת ה- API 30), device.mk
צריך להכיל:
PRODUCT_SHIPPING_API_LEVEL := 30
ניתן גם להגדיר את מאפיין המערכת הבאה כדי לכפות את השימוש החדש dm-default-key
API קשר משלוח רמת API:
PRODUCT_PROPERTY_OVERRIDES += \ ro.crypto.dm_default_key.options_format.version=2
מַתַן תוֹקֵף
כדי לוודא שהצפנת מטא נתונים מופעלת ועובדת כראוי, הפעל את הבדיקות המתוארות להלן. כמו כן להיות מודעים לבעיות הנפוצות המתוארות להלן.
בדיקות
התחל בהפעלת הפקודה הבאה כדי לוודא שהצפנת מטא נתונים מופעלת באחסון הפנימי:
adb root
adb shell dmctl table userdata
הפלט צריך להיות דומה ל:
Targets in the device-mapper table for userdata: 0-4194304: default-key, aes-xts-plain64 - 0 252:2 0 3 allow_discards sector_size:4096 iv_large_sectors
אם אתה גברת על הגדרות הצפנת ברירת מחדל על ידי קביעת metadata_encryption
האופציה של מכשיר fstab
, אז הפלט יהיה שונה מעט מן האמור לעיל. לדוגמה, אם הפעלת הצפנה שֵׂעַרוֹת שׁוּלָמִית , אז השדה השלישי יהיה xchacha12,aes-adiantum-plain64
במקום aes-xts-plain64
.
הבא, לרוץ vts_kernel_encryption_test כדי לוודא את נכונות הצפנה מטה FBE:
atest vts_kernel_encryption_test
אוֹ:
vts-tradefed run vts -m vts_kernel_encryption_test
בעיות נפוצות
במהלך השיחה כדי mount_all
, אשר עולה על מטה-מוצפן /data
מחיצה, init
מבצעת כלי VDC. מתחבר כלי VDC כדי vold
מעל binder
כדי להגדיר את המכשיר מטה-מוצפן הר המחיצה. למשך השיחה הזאת, init
חסומה, וניסיונות גם לקרוא או סט init
המאפיינים יחסמו עד mount_all
גימורים. אם, בשלב זה, כל חלק של vold
העבודה של בצורה ישירה או עקיפה חסומה על קריאה או הגדרת נכס, הקיפאון יביא. חשוב להבטיח כי vold
יכול להשלים את מלאכת קריאת המפתחות, אינטראקציה עם Keymaster, ואת הרכבת ספריית הנתונים ללא אינטראקציה נוספת עם init
.
אם Keymaster הוא לא התחיל באופן מלא כאשר mount_all
פועל, זה לא יגיב vold
עד שהוא קרא לו תכונות מסוימות מן init
, וכתוצאה מכך בדיוק את הקיפאון תיאר. צבת exec_start wait_for_keymaster
מעל הרלוונטיים mount_all
שבע כפי מבטיח הגדרה כי Keymaster פועל באופן מלא מראש וכך נמנעת הקיפאון הזה.
תצורה של אחסון שניתן לאמץ
מאז אנדרואיד 9, סוג של הצפנה metadata מופעלת תמיד על אחסון לאימוץ בכל פעם FBE מופעלת, גם כאשר ההצפנה מטה אינה מופעלת על אחסון פנימי.
בשנת AOSP, יש שני יישומים של הצפנה מטה על אחסון לאימוץ: אחד משימוש, המבוסס על dm-crypt
, וכן בהתבסס לחדשה יותר על dm-default-key
. כדי להבטיח שהיישום הנכון נבחר עבור המכשיר, להבטיח כי קבעת את הערך הנכון עבור PRODUCT_SHIPPING_API_LEVEL
ב device.mk
. לדוגמא, אם השקות מכשירות עם 11 אנדרואיד (רמת ה- API 30), device.mk
צריך להכיל:
PRODUCT_SHIPPING_API_LEVEL := 30
תוכל גם להגדיר את מאפייני המערכת הבאים כדי לאלץ את השימוש בשיטת הצפנת המטא נתונים החדשה (ובגרסת המדיניות החדשה של FBE) ללא קשר לרמת ה- API למשלוח:
PRODUCT_PROPERTY_OVERRIDES += \ ro.crypto.volume.metadata.method=dm-default-key \ ro.crypto.dm_default_key.options_format.version=2 \ ro.crypto.volume.options=::v2
השיטה הנוכחית
בהתקנים משיקים עם אנדרואיד 11 ומעלה, הצפנה מטה על אחסון לאימוץ משתמשת dm-default-key
מודול הקרנל, בדיוק כמו על האחסון פנימי. עיין התנאים המוקדמים מעל עבורו אפשרויות תצורה הקרנל כדי לאפשר. הערה כי חומרת הצפנה מוטבע כי עבודות על באחסון הפנימי של המכשיר עשויות להיות זמינות על אחסון לאימוץ, וכך CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
שיידרש.
כברירת מחדל, dm-default-key
שיטת ההצפנה מטה נפח משתמשת באלגוריתם הצפנת AES-256-XTS עם מגזרי הצפנה 4096-בייט. האלגוריתם ניתן לעקוף על ידי קביעת ro.crypto.volume.metadata.encryption
רכוש המערכת. יש ערך של נכס זה באותו תחביר כמו metadata_encryption
אפשרות fstab שתוארו לעיל. לדוגמה, על התקנים החסרים האצה AES, הצפנה שֵׂעַרוֹת שׁוּלָמִית עשוי להיות מופעל על ידי קביעת ro.crypto.volume.metadata.encryption=adiantum
.
שיטה מדור קודם
בהתקנים משיקים עם אנדרואיד 10 או נמוך, הצפנה מטה על אחסון לאימוץ משתמשת dm-crypt
מודול הקרנל ולא dm-default-key
:
CONFIG_DM_CRYPT=y
בניגוד dm-default-key
השיטה, את dm-crypt
השיטה גורמת תוכן הקובץ יוצפן פעמיים: פעם אחת עם מפתח FBE ופעם עם מפתח הצפנה מטה. הצפנה כפולה זו מפחיתה את הביצועים ואינה נדרשת להשגת מטרות האבטחה של הצפנת מטא נתונים, שכן אנדרואיד מבטיחה שקשה להתפשר על מפתחות FBE לפחות כמו מפתח ההצפנה של מטא נתונים. ספקים יכולים לבצע התאמות אישיות הקרנל כדי למנוע את ההצפנה כפול, בפרט על ידי יישום allow_encrypt_override
האופציה אשר אנדרואיד יעבור אלי dm-crypt
כאשר נכס המערכה ro.crypto.allow_encrypt_override
מוגדר true
. התאמות אלה אינן נתמכות על ידי הגרעין הנפוץ של Android.
כברירת מחדל, dm-crypt
שיטת ההצפנה מטה נפח משתמשת באלגוריתם הצפנת AES-128-CBC עם ESSIV ומגזרי הצפנה 512-בייט. ניתן לעקוף זאת על ידי הגדרת מאפייני המערכת הבאים (המשמשים גם ל- FDE):
-
ro.crypto.fde_algorithm
בוחר את אלגוריתם ההצפנה מטה. האפשרויות הןaes-128-cbc
וadiantum
. שֵׂעַרוֹת שׁוּלָמִית ניתן להשתמש רק אם המכשיר חסר האצה AES. -
ro.crypto.fde_sector_size
בוחר את גודל סקטור ההצפנה. האפשרויות הן 512, 1024, 2048 ו- 4096. להצפנת Adiantum, השתמש ב- 4096.