レート制限

Android は、ユーザーが構成したロック画面の知識要素(LSKF)(PIN、パターン、パスワードなど)を使用して、認証情報で暗号化されたストレージや認証にバインドされたKeystore キーなどのユーザーデータを保護します。LSKF は通常、4 桁または 6 桁の PIN などのエントロピーの低い値であるため、ブルート フォース アタックからの保護が必要です。

Android は、高信頼実行環境(TEE)またはセキュア エレメント(SE)のレート制限を使用して、LSKF に対するブルート フォース アタックを遅らせ、十分な試行回数で攻撃者をブロックします。CDD 9.11 では、LSKF レート制限の最小セキュリティ要件と推奨事項が規定されています。Android 16 QPR2 以降では、以前の Android バージョンよりも大幅に強力なレート制限ポリシーが実装されています。詳しくは、Android 16 QPR2 以降のデフォルトのレート制限ポリシーの強化をご覧ください。

Android 17 以降では、以前のバージョンよりも強力なデフォルトのロック画面レート制限が使用されます。まれに、ロック画面のタイムアウトが長くなることがあるため、Android 17 以降では、ロック画面で次のユーザー フィードバックが強化されています。

LockPatternUtils#getLockoutAttemptDeadline(int) メソッドの名前が LockPatternUtils#getLockoutEndTime(int) に変更され、システム管理キャッシュからロックアウト終了時刻が提供されるようになりました。この更新により、LockPatternUtils インスタンスごとにのみキャッシュされ、別のインスタンスを使用してトリガーされた場合にアクティブなタイムアウトが表示されないという問題が解決されました。ロック画面や設定アクティビティなどのシステム認証情報プロンプトのデベロッパーは、それらを更新して、さらに試行する前に既存のタイムアウトを確認する必要があります。

LSKF を使用して保護されたユーザーデータのロックを解除する

LockSettingsService は、LSKF の保存と検証を管理します。ユーザーがアクティブな LSKF を同時に使用できるのは 1 つだけです。新しい LSKF を割り当てると、以前の LSKF が無効になり、レート制限ポリシーが最初から開始されます。

TEE または SE のプライマリ レート制限(Gatekeeper または Weaverのいずれか)は、アクティブな LSKF のレート制限を適用します。実装が利用可能な場合、LockSettingsService は Weaver を優先します。

保護されたユーザーデータのロックが解除されるのは、正しい LSKF がプライマリ レート制限に提供された場合のみです。 LSKF が正しくない場合、レート制限は失敗カウンタを増やし、特定の失敗回数後にタイムアウトを適用します。タイムアウト中は、すべての推測が拒否され、残りのタイムアウトが提供されます。

Android 16 QPR2 以降のデフォルトのレート制限ポリシーの強化

CDD 9.11 では、Android 6 以降で LSKF レート制限が必須となっています。これまで、必要なレート制限ポリシーはかなり緩いものでした。たとえば、Android 16 の最小要件を満たす実装では、最初の 1 分間に最大 10 回、6 分間に 20 回、25 分間に 50 回、24 時間に 110 回、5 年間に 1,800 回の推測が許可されます。

このポリシーは、LSKF が一様にランダムに選択される場合は十分に安全ですが、実際にはユーザーは LSKF を一様にランダムに選択しません。一部の LSKF は、他の LSKF よりもはるかに頻繁に使用されます。攻撃者は、頻度の高い順に LSKF を試すことで、高い成功率を達成できます。

たとえば、This PIN Can Be Easily Guessed という調査では、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 実装で重複した推測の検出をサポートするかどうかを選択できます。