Android加密之全盘加密(FDE)

全盘加密

注意:搭载 Android 7.0 - 9 的设备支持全盘加密。搭载 Android 10 及更高版本的新设备必须使用文件级加密

全盘加密是使用密钥(密钥本身也经过加密)对 Android 设备上的所有用户数据进行编码的过程。设备经过加密后,所有由用户创建的数据在存入磁盘之前都会自动加密,并且所有读取操作都会在将数据返回给调用进程之前自动解密数据。

全盘加密是在 Android 4.4 版中引入的,不过 Android 5.0 中又引入了以下新功能:

  • 新增了快速加密方式,这种加密方式只会对数据分区中已使用的分块进行加密,以免首次启动用时过长。目前只有 EXT4 和 F2FS 文件系统支持快速加密。
  • 添加了 forceencrypt fstab 标记,以便在首次启动时进行加密。
  • 添加了对解锁图案和无密码加密的支持。
  • 添加了由硬件支持的加密密钥存储空间,该空间使用可信执行环境(TEE,例如 TrustZone)的签名功能。如需了解详情,请参阅存储已加密的密钥

注意:对于升级到 Android 5.0 的设备,如果升级之后进行了加密,则可以通过恢复出厂设置还原到未加密状态。在首次启动时加密的新 Android 5.0 设备无法还原到未加密状态。

Android 5.0 版中有以下 4 种加密状态:

  • 默认
  • PIN
  • 密码
  • 解锁图案

首次启动时,设备会创建一个随机生成的 128 位主密钥,然后会使用默认密码和存储的盐对其进行哈希处理。默认密码是“default_password”。不过,设备还会通过 TEE(例如 TrustZone)为生成的哈希签名。TEE 会使用相应签名的哈希来加密主密钥。

您可以在 Android 开源项目的 cryptfs.cpp 文件中找到定义的默认密码。

当用户在设备上设置 PIN 码/通行码或密码时,只有 128 位的密钥会被重新加密并存储起来(也就是说,更改用户 PIN 码/通行码/解锁图案不会导致重新加密用户数据)。请注意,受管理的设备可能有 PIN 码、解锁图案或密码限制。

使用 forceencrypt 加密新设备

这是 Android 5.0 设备首次启动时的普通流程。

  1. 检测带有 forceencrypt 标记的未加密文件系统

/data 未加密,但需要加密,因为 forceencrypt 强制要求进行此项加密。 卸载 /data

  1. 开始加密 /data

vold.decrypt = "trigger_encryption" 会触发 init.rc,从而使 vold  /data 进行无密码加密。(因为这应该是新设备,还没有设置密码。)

  1. 装载 tmpfs

vold 会装载一个 tmpfs /data(使用 ro.crypto.tmpfs_options 中的 tmpfs 选项),并会将 vold.encrypt_progress 属性设置为 0。vold 会准备 tmpfs /data 以便启动已加密的系统,并会将 vold.decrypt 属性设置为 trigger_restart_min_framework

  1. 启动框架以显示进度

由于设备上几乎没有要加密的数据,加密过程很快就会完成,因此实际上通常并不会显示进度条。如需详细了解进度界面,请参阅加密现有设备

  1. /data 加密后,关闭框架

vold 会将 vold.decrypt 设置为 trigger_default_encryption,这会启动 defaultcrypto 服务。(这会启动以下流程来装载默认的已加密用户数据。)trigger_default_encryption 会检查加密类型,以了解 /data 加密是否使用了密码。由于 Android 5.0 设备在首次启动时加密,应该没有设置任何密码,因此我们要解密并装载 /data

  1. 装载 /data

接下来,init 会使用从 ro.crypto.tmpfs_options(在 init.rc 中设置)中选取的参数在 tmpfs RAMDisk 中装载 /data

  1. 启动框架

 vold 设置为 trigger_restart_framework,这会继续常规启动过程。

更改密码

当用户选择在设置中更改或移除密码时,界面会向 vold 发送 cryptfs changepw 命令,然后 vold 会使用新密码重新加密磁盘主密钥。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值