android 的 FDE 是否可以免受离线攻击?

信息安全 安卓 密钥管理
2021-08-31 17:44:00

Android 提供 FDE,但它使用锁屏密码,这(至少在我的情况下)相当弱(如 4 位密码)。这是否意味着我的 FDE 很容易被离线攻击破坏?

或者也许主密钥存储在 TPM 上并且所有加密都在那里完成?在这种情况下,它可以限制试验,甚至在完成一定数量的试验后自行关闭。

我在source.android.com上找到了这篇文章(强调我的):

加密的密钥存储在加密元数据中。硬件支持是通过使用可信执行环境 (TEE) 的签名功能来实现的。以前,我们使用通过对用户密码和存储的盐应用 scrypt 生成的密钥来加密主密钥。为了使密钥能够抵御开箱攻击,我们通过使用存储的 TEE 密钥对结果密钥进行签名来扩展该算法然后通过 scrypt 的另一种应用程序将生成的签名转换为适当长度的密钥。然后使用此密钥对主密钥进行加密和解密。要存储此密钥:

但是,他们没有解释此签名过程是否以某种方式受到速率限制或受到其他方式的保护。

2个回答

要记住的重要一点是,卷的实际加密密钥存储在可信执行环境 (TEE) 芯片中,该芯片旨在提供安全的密钥存储。该设备的目标是充当加密预言机:你给它一些数据,它加密或解密它,然后给你结果。这意味着如果你取出闪存芯片并尝试直接读取它,你只会得到加密的数据。

默认情况下,用户没有直接向 TEE 进行身份验证,以防止攻击者只要求解密数据。这就是向您的手机添加 PIN 或密码的地方 - 它充当 TEE 的身份验证机制,以确保您不能只要求解密数据而无需“证明”您是谁。

关于速率限制的关键短语是:

然后通过 scrypt 的另一种应用程序将生成的签名转换为适当长度的密钥。

scrypt KDF 的设计速度很慢,而且内存足够大,因此难以在常见的计算平台(例如 CUDA)上进行并行化。另请注意,他们说“scrypt 的另一种应用”;DEK 已经通过 scrypt 进行了转换,因此尝试通过针对候选密码反复推导 DEK 来尝试“破解”它是不可行的。

您引用的段落解释了如何保护 FDE 密钥免受离线攻击:它源自存储在 TEE 中的秘密组件(签名密钥)。TEE(可信执行环境) ¹是一种安全协处理器(通常是虚拟协处理器,但仍然受到保护,不会被正常操作系统访问),它可以独占访问某些密钥。虽然可以通过复制闪存来克隆 Android 存储,但 TEE 密钥存储在芯片内的单独内存中,无法在设备外复制(至少在不对处理器进行物理攻击的情况下无法复制)。

因此,在加密密钥由 TEE 支持的 Android 安装中(许多不是!),即使您知道 PIN,也无法解密数据,除非您可以访问原始设备(或者您以某种方式设法从 TEE 中提取密钥)。

防止在线攻击是另一回事。使用 4 位 PIN 码,即使节流也不够;您需要锁定设备(通常需要更长的安全码才能解锁)。例如,(基于芯片的)信用卡和手机 SIM 卡就会发生这种情况。据我所知,Android 不需要任何特定的限制或锁定机制,因此加密密钥是否容易受到在线攻击取决于各个 TEE 实现(每个制造商都有自己的)。

¹顺便说一下,这与 TPM 不同。