レート制限

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

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

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 を試すことで、成功率を大幅に高めることができます。

たとえば、この 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 実装で重複する推測の検出をサポートするかどうかを選択できます。