1.全盤加密
數據在空閒的時候進行加密
每個設備只有一個用戶可以被全盤加密進行保護
那個用戶在做任何工作前必須登錄
2.文件級別加密
使用ext4文件系統
使用AES-256方式對文件內容進行加密
文件名也需要進行加密
文件級別加密的性能要稍微好於全盤加密
f2fs文件系統用於支持nand flash
DE(device encrypted)
文件會被一個密鑰進行加密,這個密鑰僅在系統執行了可驗證的啓動後才能獲得。
在系統中,只有一個DEsys的key,有多個DEn的key對於每一個用戶
CE(credential encrypted)
文件加密使用一個和用戶認證(PIN,圖案,密碼)關聯的key,這個key只有用戶先執行了認證後才能獲取
每一個用戶擁有一個ce key
NE(none encrypted)
文件不加密,這種情況十分少見,而OTA更新文件是個例子
用戶數據佈局的變更:
APPS: 1.默認的app的存儲必須使用ce key來保證數據安全
2.一個app可以存取一個DE存儲空間
MEDIA: 內部的共享存儲必須是使用CE進行加密的
SYSTEM: 1.默認的系統存儲空間必須是使用DEsys進行加密的,以使數據遷移變得簡單
2.系統可以訪問多個CE和DE存儲空間,以便更好地保護數據
存儲空間和key的對應關係
system存儲空間 SYSTEM
DEsys /data/system/
/data/misc
CE0-n /data/system_ce/{0-n}
/data/misc_ce/{0-n}
DE0-n /data/system_de/{0-n}
/data/misc_de/{0-n}
media存儲空間 MEDIA
CE0-n /data/media/{0-n}
應用存儲空間 APP
CE0-n /data/user/{0-n}
DE0-n /data/user_de/{0-n}
如何判斷數據應該屬於CE還是DE
DE:
WIFI認證,藍牙匹配碼
鬧鐘數據
壁紙,鈴聲
CE:
通訊錄
賬戶授權密碼
歷史瀏覽信息,地址信息
最近任務,截屏
獲取系統存儲空間的CE,DE目錄的API
Environment.getUserSystemDirectory DEsys
Environment.getUserSystemEncryptedDirectory DE0-n
Environment.getUserSystemCredentialEncryptedDirectory CE0-N
Environment.getMiscNotEncryptedDirectory
獲取應用存儲空間的CE,DE目錄的API
應用中的上下文(Context)默認指向CE目錄,如果需要訪問DE目錄,需要使用Context.createDeviceEncryptedStorageContext函數創建指向DE目錄的上下文
用戶的狀態和key的獲取
running locked: DEsys和DEn
running unlocked: DEsys,DEn,CEn
加密敏感APP
應用的組件可以申明encryptionAware=true,以在沒有拿到CE的key的時候也可以運行
package會根據用戶的狀態對組件的查詢進行過濾
判斷用戶狀態的API
當用戶進入locked state狀態的時候,會發送LOCKED_BOOT_COMPLETED
當用戶進入unlocked state狀態的時候,BOOT_COMPLETED,USER_UNLOCKED廣播會被髮送