速率限制

Android 使用用户配置的锁屏知识因素 (LSKF)(例如 PIN 码、图案和密码)来保护用户数据,包括凭据加密存储和与身份验证绑定的 Keystore 密钥。LSKF 通常是低熵值,例如 4 位或 6 位 PIN 码,因此需要防范暴力破解。

Android 使用可信执行环境 (TEE) 或安全元件 (SE) 速率限制器来减慢攻击速度,并且在攻击者尝试足够多次后,会阻止其对 LSKF 执行暴力破解攻击。CDD 9.11 规定了 LSKF 速率限制器的最低安全要求和建议。与较低的 Android 版本相比,Android 16 QPR2 及更高版本实现了更严格的速率限制政策。如需了解详情,请参阅 Android 16 QPR2 及更高版本中更严格的默认速率限制政策

使用 LSKF 解锁受保护的用户数据

LockSettingsService 管理 LSKF 的存储和验证。用户一次只能有一个有效的 LSKF。分配新的 LSKF 会使之前的 LSKF 失效,并从头开始执行速率限制政策。

TEE 或 SE 中的主要速率限制器(GatekeeperWeaver)会针对有效 LSKF 强制执行速率限制。LockSettingsService 在有实现时首选 Weaver。

只有在向主速率限制器提供正确的 LSKF 时,受保护的用户数据才会解锁。 如果 LSKF 不正确,速率限制器会递增失败计数器,并在达到一定失败次数后强制执行超时。在超时期间,它会拒绝所有猜测并提供剩余的超时时间。

Android 16 QPR2 及更高版本中更严格的默认速率限制政策

CDD 9.11 要求在 Android 6 及更高版本中进行 LSKF 速率限制。从历史上看,所需的速率限制政策相当宽松。例如,满足 Android 16 最低要求的实现允许在第一分钟内最多进行 10 次猜测,在 6 分钟内最多进行 20 次猜测,在 25 分钟内最多进行 50 次猜测,在 24 小时内最多进行 110 次猜测,在 5 年内最多进行 1,800 次猜测。

虽然对于随机均匀选择的 LSKF,此政策相当安全,但在实践中,用户不会随机均匀地选择 LSKF。有些 LSKF 的出现频率远高于其他 LSKF。攻击者可以按频率递减的顺序尝试 LSKF,从而实现较高的成功率。

例如,研究此 PIN 码很容易被猜到发现,在 100 次猜测后,猜对真实 PIN 码的成功率为 16.2%,猜对图案的成功率为 35.5%。如果攻击者知道用户的生日等特定信息,则可以进一步提高成功率。

因此,Android 16 QPR2 及更高版本提供了更强的默认 LSKF 速率限制政策。此政策允许在第 1 分钟内最多尝试 6 次,在 6 分钟内最多尝试 7 次,在 25 分钟内最多尝试 8 次,在 24 小时内最多尝试 12 次,在 5 年内最多尝试 19 次。在猜错 20 次后,您将无法再进行猜测。完整的超时时间表如下所示。在未来的 Android 版本中,它可能会发生变化。

错误猜测的次数 猜错后超时
0 不适用
1-4 0 秒
5 1 分钟
6 5 分钟
7 15 分钟
8 30 分钟
9 90 分钟
10 4 小时
11 12 小时
12 36 小时
13 4 天
14 13 天
15 41 天
16 123 天
17 1 年
18 3 年
19 9 年
20+ 您已用完所有猜测次数

更新了速率限制器

Android 16 QPR2 及更高版本包含更新后的 GatekeeperWeaver 实现,这些实现会强制执行表中的速率限制政策。

软件速率限制器

Android 16 QPR2 及更高版本包含一个可选的次级速率限制器 SoftwareRateLimiter.。它在系统服务器中实现,可在 TEE 或 SE 无法更新时让设备提供更严格的速率限制政策。

通过 config_softwareLskfRateLimiterEnforcing 配置值,以强制执行模式配置 SoftwareRateLimiter。在强制执行模式下,SoftwareRateLimiter 会与主速率限制器同时应用其速率限制政策。对于给定的错误猜测次数,超时时间是主要速率限制器所需的时间和 SoftwareRateLimiter 所需的时间中较长的时间。 在非强制执行模式下,SoftwareRateLimiter 会将所有验证请求传递给主速率限制器,而不应用辅助速率限制政策。

检测重复的猜测

为了提高可用性并支持使用更严格的速率限制政策,Android 16 QPR2 及更高版本支持重复猜测检测。启用后,用户多次输入相同的错误 LSKF 不会受到惩罚。

合法用户有时会多次错误地输入同一 LSKF。如果将其视为多次猜测,则会导致不必要的超时。有能力的攻击者不会多次尝试给定的 LSKF。不计入重复猜测的政策可提高合法用户的 LSKF 输入可用性,同时不会让有能力的攻击者更容易猜出 LSKF,从而可以强制执行更严格的速率限制政策。合法用户不太可能遇到超时,因为用户必须输入 5 个唯一的错误猜测,而不是 5 个包含重复项的错误猜测。

在搭载 Android 16 QPR2 及更高版本、具有 Weaver 实现且 SoftwareRateLimiter 配置为强制模式的设备上,系统会在将重复猜测传递给 Weaver 之前检测并拒绝这些猜测。此类拒绝不会增加错误猜测次数。系统会在内存中跟踪最多 5 个不同的错误猜测。如果跟踪器已满,系统会舍弃最近最少使用的跟踪器,以便为新跟踪器腾出空间。在做出最后一次未跟踪的错误猜测后 5 分钟,系统会舍弃所有跟踪的猜测。

Gatekeeper 不会区分错误猜测与其他验证失败,因此当 Gatekeeper 是主要速率限制器时,SoftwareRateLimiter 不支持重复猜测检测。

Weaver 实现人员可以选择在 Weaver 实现中支持重复猜测检测。