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 以上版本會在鎖定畫面上提供下列強化使用者意見回饋。
- 改善時間格式:鎖定螢幕會以較大的時間單位顯示一分鐘以上的逾時時間,方便使用者閱讀,例如「請在 30 分鐘後再試一次」,而不是「請在 1800 秒後再試一次」。
- 復原短連結:鎖定畫面會顯示短連結 (預設為 g.co/android/unlock),協助使用者在其他裝置上尋找復原選項。這個連結可透過
config_lockscreenLockoutShortlink資源設定。 - 重複嘗試回饋:在實作 Weaver 的裝置上,如果輸入重複的錯誤猜測,系統會顯示專屬訊息。這項特定意見回饋不適用於僅支援 Gatekeeper 的裝置,因為這類裝置不會針對猜錯密碼和其他驗證失敗情況提供個別的回應代碼。
- 一致的憑證輸入管理機制:如果裝置使用 PIN 碼憑證,螢幕鎖定會停用 PIN 碼輸入鍵盤,與密碼和解鎖圖案憑證輸入機制類似。
LockPatternUtils#getLockoutAttemptDeadline(int) 方法已重新命名為 LockPatternUtils#getLockoutEndTime(int),並從系統管理的快取提供鎖定結束時間。這項更新修正了快取僅適用於每個 LockPatternUtils 執行個體的問題,如果使用另一個執行個體觸發逾時,系統會錯誤地顯示沒有有效逾時。系統憑證提示 (例如鎖定螢幕和設定活動) 的開發人員必須更新這些提示,先驗證現有的逾時,再允許進一步嘗試。
使用 LSKF 解鎖受保護的使用者資料
LockSettingsService
負責管理 LSKF 的儲存和驗證作業。使用者一次只能有一個有效的 LSKF。指派新的 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 年內 1800 次。
雖然這項政策對於隨機選擇的 LSKF 相當安全,但實際上使用者不會隨機選擇 LSKF。有些 LSKF 的發生頻率遠高於其他 LSKF。攻擊者可以依頻率遞減順序嘗試 LSKF,大幅提高成功率。
舉例來說,研究「This PIN Can Be Easily Guessed」發現,猜測真實 PIN 碼的成功率為 16.2% (猜測 100 次後),猜測圖案的成功率則為 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 | 24 小時 |
| 13 | 4 天 |
| 14 | 13 天 |
| 15 | 41 天 |
| 16 | 123 天 |
| 17 | 1 年 |
| 18 | 3 年 |
| 19 | 9 年 |
| 20+ | 你已用完所有猜測次數 |
更新頻率限制器
Android 16 QPR2 以上版本包含更新後的 Gatekeeper 和 Weaver 實作項目,可強制執行表格中的速率限制政策。
軟體速率限制器
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 實作中選擇支援重複猜測偵測。