Android FBE学习笔记

1.FBE和FDE

FDE:Full-Disk Encryption 全盘加密
FBE:File-Based Encryption基于文件的加密

2.适配FBE

2.1存储位置

ce默认存储位置(user/0):用户解锁后才可以使用;
de(user_de/0)”直接启动“(direct boot)模式和用户解锁后均可用;
在开机未解锁的场景,ce目录被锁定,只能访问de目录,但是有些应用场景,例如闹钟,即使开机未解锁也需要提供服务,因此需要适配FBE。

2.2适配

1.配置
在manifest里面配置 android:directBootAware=“true”,并设置一个广播接收器,用户解锁之后,可以收到android.intent.action.LOCKED_BOOT_COMPLETED广播




  ...
  
    
  

2.访问de
在“直接启动”模式下,需要调用Context.createDeviceProtectedStorageContext() 创建另一个 Context 实例。
3.一些api

  • 查询用户是否解锁
public static boolean isUserUnlocked(Context context) {
    if (Build.VERSION.SDK_INT >= BuildUtil.N) {
        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        return userManager.isUserUnlocked();
    } else {
        return false;
    }
}
  • 迁移数据
Context.moveSharedPreferencesFrom() 
Context.moveDatabaseFrom() 

3.场景

例如天气,并不涉及到用户的隐私,因此可以直接将所有的数据从ce迁移到de当中,即从user/0目录迁移到user_de/0目录。
在“直接启动”模式下,通过Context.createDeviceProtectedStorageContext() 访问de文件,当收到android.intent.action.LOCKED_BOOT_COMPLETED广播之后,可以使用Context.moveSharedPreferencesFrom() 和 Context.moveDatabaseFrom() 方法将ce目录下的内容迁移到de目录下,实现兼容。

参考资料:
https://source.android.com/security/encryption/full-disk.html
https://source.android.com/security/encryption/file-based.html

你可能感兴趣的:(android,FBE,FDE)