全面加密
注意: Android 7.0 – 9设备支持全加密。 安装Android 10或更高版本的新设备必须使用文件级加密。
完全加密是使用密钥加密Android设备上的所有用户数据的过程。 设备加密后,用户创建的所有数据将在保存到磁盘之前自动加密,所有读取操作将在返回调用进程之前自动解密数据。
全面加密是在Android 4.4版中引入的,而Android 5.0版引入了以下新功能:
为了避免在首次启动时过长,添加了只对数据分区中已经使用的块进行加密的快速加密方法。 目前,只有EXT4和F2FS文件系统支持快速加密。 添加了forceencryptfstab标记,并在首次启动时对其进行加密。 添加了对解锁模式和无密码加密的支持。 添加了使用可信中心签名功能(如可信区域)的硬件支持的加密密钥存储。 有关详细信息,请参阅保存加密密钥。 3358 www.Sina.com/:对于升级到Android 5.0的设备,如果在升级后进行了加密,则可以通过恢复出厂设置来恢复未加密状态。 首次启动时加密的新Android 5.0设备无法恢复为未加密状态。
Android 5.0版有四种加密状态:
默认PIN码密码解锁模式首次启动时,设备将创建随机生成的128位主密钥,并使用默认密码和存储的盐进行mndsl处理。 默认密码为” default_password “。 但是,设备将对由TEE (例如TrustZone )生成的mndsl签名。 TEE使用相应签名的mndsl加密主密钥。
定义的缺省密码位于Android开源项目的cryptfs.cpp文件中。
当用户在设备上设置PIN码/密码或密码时,只有128位密钥会被重新加密和存储。 也就是说,更改用户的PIN码/密码/解锁模式不会重新加密用户数据。 受管理的设备可能有PIN码、解锁模式或密码限制。
使用forceencrypt加密新设备
这是Android 5.0设备首次启动时的一般流程。
检测到未加密的文件系统/data (标记为forceencrypt )未加密,但需要加密。 这是因为forceencrypt强制请求此加密。 卸载/data。
/datavold.decrypt=’ trigger _ encryption ‘加密开始后,init.rc将启动,vold可以在没有密码的情况下加密/data。 (因为这应该是新设备,所以还没有设置密码。 )
加载tmpfsvold时,将使用ro.crypto.tmpfs_options中的tmpfs选项加载tmpfs/data,并将vold.encrypt_progress属性设置为0。 vold准备tmpfs/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使用从ro.crypto.tmpfs _ options (在init.RC中设置)中选择的参数在tmpfs RAMDisk上装载/data。
启动框架将vold设置为trigger_restart_framework,然后继续正常启动过程。
注意如果用户在设置中选择更改或删除密码,则接口向vold发送cryptfs changepw命令,vold使用新密码重新加密磁盘主密钥