密碼監測
「密碼監測」是一項功能,可將儲存在用户的「自動填寫密碼」鑰匙圈中的密碼與不斷更新和整理的密碼列表(已知已暴露於不同網上組織的洩漏資料中)進行比對。如果啟用了此功能,則監測通訊協定會持續將用户的「自動填寫密碼」鑰匙圈密碼與整理的列表相比對。
監測功能的運作方式
用户裝置會連續對用户密碼進行循環檢查,並以不受用户密碼或其密碼管理程式使用模式影響的時間間隔進行查詢。這有助確保驗證狀態與洩漏密碼的目前最新整理列表保持最新狀態。為協助防止洩漏用户擁有多少個專屬密碼的相關資料,要求會批次且並行執行。每次檢查都會並行確認固定數量的密碼,並且如果用户擁有的數量少於此數量,則會產生隨機密碼並將其加入到查詢中以彌補差異。
密碼的比對方式
密碼比對過程分為兩部份。最常洩露的密碼包含在用户裝置的本機列表中。如果用户的密碼出現在此列表中,則會立即通知用户,而無需進行任何外部互動。其設計用意是確保不會洩露因密碼洩露而讓用户產生最大風險的相關密碼資料。
如果該密碼未包含在最頻繁洩漏的列表中,則其與洩漏頻率較低的密碼比對。
將用户密碼與指定列表進行比較
確認本機列表中不存在的密碼是否相符,會涉及與 Apple 伺服器的一些互動。為協助確保不會將合法用户的密碼傳送給 Apple,我們部署了一種加密的私密集交叉作業,將用户的密碼與大量洩露的密碼進行比較。其設計用意是確保,對於侵害風險較低的密碼,與 Apple 共享更少的資料。對用户的密碼而言,此資料的限制為加密雜湊值的15 位元前置碼。使用最經常洩露的密碼的本機列表來從此互動過程中刪除最經常洩露的密碼,會減少網絡服務儲存貯體中密碼的相對頻率變化,從這些查詢中推測用户密碼是徒勞的。
此底層協定將整理的密碼列表劃分為 215 個不同的儲存桶,其中的密碼在撰寫本文時包含大約 15 億個密碼。密碼所屬的儲存桶是依據密碼的 SHA256 雜湊值的前 15 位元而定。此外,每個洩漏的密碼(pw)與 NIST P256 曲線上的橢圓曲線點相關聯:Ppw = ⍺·HSWU(pw),其中 ⍺ 是僅 Apple 所知的秘密隨機密鑰,而 HSWU 是根據 Shallue-van de Woestijne-Ulas 方法將密碼映射到曲線點的隨機 oracle 函數。此轉換的設計用意在透過計算隱藏密碼的值,並透過「密碼監測」協助防止揭露新洩漏的密碼。
為了計算私密集的交集,用户裝置會使用 λ(SHA256(upw) 的 15 位元前置碼)來決定用户密碼所屬的儲存桶,其中 upw 是其中一個用户密碼。裝置產生自己的隨機常數 β,並將點 Pc = β·HSWU(upw) 以及與 λ 對應的儲存桶要求傳送到伺服器。β 在此處隱藏了有關用户密碼的資料,並且將從密碼向 Apple 揭露的資料限制為 λ。最後,伺服器取得用户裝置所傳送的點,計算出 ⍺Pc = ⍺β·HSWU(upw),並將其連同相關的點之儲存桶—Bλ={ Ppw | SHA256(pw) 以前置碼 λ 開頭}—傳回至裝置。
傳回的資料讓裝置可以計算 B’λ = {β·Ppw | Ppw ∈ Bλ},如果 ⍺Pc ∈ B'λ,則確定用户密碼已遭洩漏。