Android 开源项目(4)

此外,测试人员可以在主用户已设置锁定屏幕的情况下启动一个 userdebug 实例。然后通过 adb shell 命令进入设备,并使用 su 获得 root 权限。确认 /data/data 中是否包含加密的文件名;如果没有,则表示存在问题。

我们还建议设备制造商探索如何在其设备或内核上运行。这些测试是 xfstests 文件系统测试套件的一部分。不过,Android 不对这些上游测试提供官方支持。

AOSP 实现详情

本部分详细介绍了 AOSP 的文件级加密实现,并讲解了文件级加密的运作方式。设备制造商应该无需执行任何更改,即可在其设备上使用 FBE 和“直接启动”功能。

fscrypt 加密

AOSP 实现会用到内核中的“fscrypt”加密(受 ext4 和 f2fs 支持),并通常配置如下:

借助采用 XTS 模式的 AES-256 算法加密文件内容

借助采用 CBC-CTS 模式的 AES-256 算法加密文件名

Adiantum 加密也受到支持。启用 Adiantum 加密后,文件内容和文件名都会使用 Adiantum 进行加密。

如需详细了解 fscrypt,请参阅上游内核文档。

密钥派生

文件级加密密钥(512 位密钥)以加密形式存储,通过另一个存放在 TEE 中的密钥(256 位 AES-GCM 密钥)进行加密。如需使用此 TEE 密钥,必须具备以下三项:

身份验证令牌

扩展凭据

secdiscardable hash

身份验证令牌是一个经过加密身份验证的令牌,由Gatekeeper 在用户成功登录时生成。除非用户提供的身份验证令牌正确无误,否则 TEE 将拒绝用户使用该密钥。如果用户没有任何凭据,则不使用也不需要使用身份验证令牌。

扩展凭据是使用 scrypt 算法进行加盐和扩展处理后的用户凭据。实际上,凭据在被传递到 vold(以便传递到 scrypt)之前,会在锁定设置服务中接受一次哈希处理。扩展凭据会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 KM_TAG_APPLICATION_ID 的所有保证。如果用户没有凭据,则不使用也不需要使用扩展凭据。

secdiscardable hash 是 16 KB 随机文件的 512 位哈希,和用于重建相应密钥的其他信息(例如种子)存储在一起。在相应密钥被删除时,该文件会被一并安全删除,或以新的方式加密;采用这种额外的保护措施后,攻击者要恢复相应密钥,必须先恢复这个安全删除的文件中的每一个位。secdiscardable hash 同样会以加密形式绑定到 TEE 中的相应密钥,并享有适用于 的所有保证。

在大多数情况下,FBE 密钥还会在内核中执行额外的密钥派生步骤,以生成实际用于加密的子密钥,例如按文件或按模式生成的密钥。对于第 2 版加密政策,系统会为此使用 HKDF-SHA512。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e0d2747ccf30d166c0651a9274740f26.html