标题: 【十万火急】有沒有懂硬件数据的大师
时间: 2020-01-07发布,2020-01-07修改
『回复列表(28|隐藏机器人聊天)』
@不負如來不負卿,数据加密的情况可能比想象中的更复杂,来自AOSP的文档:
较新的系统使用文件级加密,在手机之外解密可能相当困难:
https://source.android.com/security/encryption/file-based?hl=zh-cn#key-derivation
密钥派生
磁盘加密密钥(512 位 AES-XTS 密钥)以加密形式存储:通过另一个存放在 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 中的相应密钥,并享有适用于 KM_TAG_APPLICATION_ID 的所有保证。
此时,你的手机密码并不是文件解密密钥,它只是从安全芯片获取密钥的一个验证方式。如果无法得到存储在安全芯片中的密钥,data分区也就无法解密,数据恢复也就无法完成。
然而问题是,TEE安全芯片位于CPU内,如果手机无法开机,则无法得到该密钥。
所以,如果华为按AOSP推荐的方法实施了加密,则CPU损坏=丢失数据。如果CPU没有损坏,则将CPU和闪存一起安装到新主板上可能可以解密数据。
老一点的系统使用全盘加密:
https://source.android.com/security/encryption/full-disk?hl=zh-cn
全盘加密是在 Android 4.4 版中引入的,不过 Android 5.0 中又引入了以下新功能:
- 添加了由硬件支持的加密密钥存储空间,该空间使用可信执行环境(TEE,例如 TrustZone)的签名功能。如需更多详细信息,请参阅存储已加密的密钥。
Android 全盘加密的运作方式Android 全盘加密基于在块设备层运行的内核功能 dm-crypt。因此,这种加密方式适用于以块设备的形式呈现给内核的嵌入式多媒体卡 (eMMC) 和类似闪存设备。YAFFS 会直接与原始 NAND 闪存芯片交互,无法进行全盘加密。
全盘加密采用的是 128 位高级加密标准 (AES) 算法(搭配加密块链 (CBC) 和 ESSIV:SHA256)。对主密钥进行加密时使用的是 128 位 AES 算法(通过对 OpenSSL 库的调用实现)。对于该密钥,您必须使用 128 位或更多位(可以选择 256 位)。
首次启动时,设备会创建一个随机生成的 128 位主密钥,然后会使用默认密码和存储的盐对其进行哈希处理。默认密码是“default_password”。不过,设备还会通过 TEE(例如 TrustZone)为生成的哈希签名。TEE 会使用相应签名的哈希来加密主密钥。
当用户在设备上设置 PIN 码/通行码或密码时,只有 128 位的密钥会被重新加密并存储起来(也就是说,更改用户 PIN 码/通行码/解锁图案不会导致重新加密用户数据)。
此时,你需要找到128位密钥才能进行解密。但里面又涉及到喜闻乐见的TEE。在ARM架构中,TEE是CPU的一部分。
https://source.android.com/security/encryption/file-based?hl=zh-cn#dependencies
要安全地使用 AOSP 提供的 FBE 实现,设备需要满足以下依赖关系:
- 必须在可信执行环境 (TEE) 中实现 Keymaster/Keystore 和 Gatekeeper,以便为 DE 密钥提供保护,从而使未经授权的操作系统(刷写到设备上的定制操作系统)无法直接请求 DE 密钥。
这基本上断绝了在原装SoC(系统芯片,也就是CPU,内含TEE及密钥数据)之外解密data分区文件的可能性。