没有合适的资源?快使用搜索试试~ 我知道了~
前言 Android 的安全性问题一直备受关注,Google 在 Android 系统的安全方面也是一直没有停止过更新,努力做到更加安全的手机移动操作系统。 在 Android 的安全性方面,有很多模块: 1 内核安全性 2 应用安全性 3 应用签名 4 身份验证 5 Trusty TEE 6 SELinux 7 加密 等等 其中,加密又分全盘加密(Android 4.4 引入)和文件级加密(Android 7.0 引入),本文将论述加密中的全盘加密的基本知识。全盘加密在 Android 4.4 中引入,在 Android 5.0 中做了比较大的更新。 本文部分片段摘自 Android 官
资源推荐
资源详情
资源评论
Android加密之全盘加密详解加密之全盘加密详解
前言前言
Android 的安全性问题一直备受关注,Google 在 Android 系统的安全方面也是一直没有停止过更新,努力做到更加安全的手
机移动操作系统。
在 Android 的安全性方面,有很多模块:
1 内核安全性
2 应用安全性
3 应用签名
4 身份验证
5 Trusty TEE
6 SELinux
7 加密
等等
其中,加密又分全盘加密(Android 4.4 引入)和文件级加密(Android 7.0 引入),本文将论述加密中的全盘加密的基本知
识。全盘加密在 Android 4.4 中引入,在 Android 5.0 中做了比较大的更新。
本文部分片段摘自 Android 官网,融合笔者的个人理解和知识。
什么是全盘加密什么是全盘加密
全盘加密是使用已加密的密钥对 Android 设备上的所有用户数据进行编码的过程。设备经过加密后,所有由用户创建的数据在
写入磁盘之前都会自动加密,并且所有读取操作都会在将数据返回给调用进程之前自动解密数据。
Android 5.0 中又引入了以下新功能:
创建了快速加密方式,这种加密方式只会对数据分区中已使用的分块进行加密,以免首次启动用时过长。目前只有 EXT4 和
F2FS 文件系统支持快速加密。
添加了 forceencrypt fstab 标记,以便在首次启动时进行加密。
添加了对解锁图案和无密码加密的支持。
添加了由硬件支持的加密密钥存储空间,该空间使用可信执行环境(TEE,例如 TrustZone)的签名功能。
全盘加密运作方式全盘加密运作方式
Android 全盘加密基于在块设备层运行的内核功能 dm-crypt。因此,这种加密方式适用于以块设备的形式呈现给内核的嵌入式
多媒体卡 (eMMC) 和类似闪存设备。YAFFS 会直接与原始 NAND 闪存芯片交互,无法进行全盘加密。
全盘加密采用的是 128 位高级加密标准 (AES) 算法(搭配密码块链接 (CBC) 和 ESSIV:SHA256)。对主密钥进行加密时使用
的是 128 位 AES 算法,并会调用 OpenSSL 库。对于该密钥,您必须使用 128 位或更多位(可以选择 256 位)。
Android 5.0 版中有以下 4 种加密状态:
默认
PIN 码
密码
解锁图案
首次启动时,设备会创建一个随机生成的 128 位主密钥,然后会使用默认密码和存储的盐对其进行哈希处理。默认密码
是“default_password”。不过,设备还会通过 TEE(例如 TrustZone)为生成的哈希签名。TEE 会使用相应签名的哈希来加密
主密钥。
您可以在 Android 开放源代码项目 cryptfs.c 文件中找到定义的默认密码。
当用户在设备上设置 PIN 码/通行码或密码时,只有 128 位的密钥会被重新加密并存储起来(也就是说,更改用户 PIN 码/通
行码/解锁图案不会导致重新加密用户数据)。请注意,受管理的设备可能受 PIN 码、解锁图案或密码限制。
加密操作由 init 和 vold 管理。 init 负责调用 vold,然后 vold 会设置相关属性以触发 init 中的事件。系统的其他部分也会查看
这些属性以执行各项任务,例如报告状态、提示输入密码,或有严重错误发生时提示恢复出厂设置。为了调用 vold 中的加密
功能,系统会使用命令行工具 vdc 的 cryptfs 命令:checkpw、restart、enablecrypto、changepw、cryptocomplete、
verifypw、setfield、getfield、mountdefaultencrypted、getpwtype、getpw 以及 clearpw。
要加密、解密或清空 /data,/data 不得处于装载状态。但要显示任何界面,框架都必须启动,而框架需要 /data 才能运行。为
了解决这一冲突,/data 上会装载一个临时文件系统。通过该文件系统,Android 可以提示输入密码、显示进度或根据需要建
议清除数据。不过,该文件系统会带来以下限制:要从临时文件系统切换到实际的 /data 文件系统,系统必须停止临时文件系
统中打开了文件的所有进程,并在实际的 /data 文件系统中重启这些进程。为此,所有服务都必须位于以下其中一个组内:
core、main 和 late_start。
core:启动后一直不会关闭。
main:关闭,然后在用户输入磁盘密码后会重启。
late_start:在 /data 未解密并装载之前,一直不会启动。
为了触发这些操作,vold.decrypt 属性会被设为多种字符串。要结束和重启服务,请使用以下 init 命令:
class_reset:停止相应服务,但允许通过 class_start 重启该服务。
class_start:重启相应服务。
class_stop:停止相应服务并添加 SVC_DISABLED 标记。被停止的服务不会对。
class_start 做出响应。
加密流程和启动流程加密流程和启动流程
使用使用 forceencrypt 加密新设备加密新设备
这是 Android 5.0 设备首次启动时的常规流程。
检测带有 forceencrypt 标记的未加密文件系统
/data 未加密,但需要加密,因为 forceencrypt 强制要求进行此项加密。卸载 /data。
开始加密 /data
vold.decrypt = “trigger_encryption” 会触发 init.rc,从而使 vold 对 /data 进行无密码加密。(因为这应该是新设备,还没有设
置密码。)
剩余10页未读,继续阅读
资源评论
weixin_38640674
- 粉丝: 2
- 资源: 960
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功