Lösenordsövervakning
Lösenordsövervakning är en funktion som kontrollerar lösenord som lagras i användarens nyckelring Autofyll lösenord mot en kontinuerligt uppdaterad och övervakad lista över lösenord som har exponerats i läckor från olika webborganisationer. Om funktionen är aktiverad kontrollerar det övervakande protokollet kontinuerligt användarens lösenord i nyckelringen Autofyll lösenord mot listan.
Hur övervakning fungerar
Användarens enhet utför kontinuerligt round-robin-kontroller för användarens lösenord och skickar förfrågningar för ett intervall som är oberoende av användarens lösenord eller dess användningsmönster för lösenordshanteraren. Det säkerställer att verifieringsstatusen hålls uppdaterad med den aktuella listan över läckta lösenord. För att förhindra läckage av information, relaterad till hur många unika lösenord en användare har, sker förfrågningar gruppvis och utförs parallellt. Ett fast antal lösenord verifieras parallellt vid varje kontroll, och om användaren har färre lösenord än detta antal genereras slumpmässiga lösenord och läggs till i förfrågningarna för att fylla ut antalet.
Hur lösenord matchas
Lösenord matchas i en tvådelad process. De vanligaste läckta lösenorden finns i en lokal lista på användarens enhet. Om användarens lösenord finns i den här listan meddelas användaren omedelbart utan någon extern interaktion. Detta ser till att ingen information läcker ut om de lösenord en användare har som utgör störst risk på grund en lösenordsläcka.
Om lösenordet inte finns i listan över de vanligaste läckta lösenorden matchas det mot mer sällan läckta lösenord.
Jämföra användares lösenord mot en övervakad lista
För att verifiera om ett lösenord som inte finns i den lokala listan matchar mer sällan läckta lösenord krävs viss interaktion med Apple-servrar. För att säkerställa att legitima användares lösenord inte skickas till Apple används en typ av kryptografisk privat uppsättningsskärningspunkt som jämför användarnas lösenord mot en stor uppsättning läckta lösenord. Detta är tänkt att säkerställa att mycket lite information delas med Apple för lösenord med lägre risk. För en användares lösenord är den här informationen begränsad till ett 15-bitarsprefix av en kryptografisk hash. Att de vanligaste läckta lösenorden tagits bort från den här interaktiva processen, genom användning av den lokala listan över de vanligaste läckta lösenorden, minskar delta för den relativa frekvensen för lösenord i webbtjänstens behållare. Detta gör det opraktiskt att försöka komma åt användarlösenord via den här processen.
Det underliggande protokollet delar upp listan över övervakade lösenord, som innehåller ungefär 1,5 miljarder lösenord när denna text skrivs, i 215 olika behållare. Vilken behållare ett lösenord hör till baseras på de första 15 bitarna av lösenordets SHA256-hashvärde. Dessutom är varje läckt lösenord, pw, kopplat till en elliptisk kurvpunkt på NIST P256-kurvan: Ppw = ⍺·HSWU(pw), där ⍺ är en hemlig slumpmässig nyckel som endast Apple känner till, och HSWU är en slumpmässig oracle-funktion som mappar lösenord till kurvpunkter baserat på Shallue-van de Woestijne-Ulas-metoden. Den här transformationen är skapad för att beräkningsmässigt gömma värdena för lösenord och förhindra avslöjandet av nyligen läckta lösenord genom lösenordsövervakning.
För att beräkna den privata uppsättningsskärningspunkten avgör användarens enhet vilken behållare användarens lösenord hör till genom att använda λ, 15-bitarsprefixet för SHA256(upw), där upw är ett av användarens lösenord. Enheten genererar en egen slumpmässig konstant, β, och skickar punkten Pc = β·HSWU(upw) till servern tillsammans med en begäran om behållaren som motsvarar λ. Här gömmer β information om användarens lösenord och begränsar till λ den information som exponeras från lösenordet till Apple. Slutligen tar servern den punkt som skickats av användarens enhet, beräknar ⍺Pc = ⍺β·HSWU(upw) och returnerar informationen tillsammans med lämplig behållare för punkterna Bλ={ Ppw | SHA256(pw) börjar med prefixet λ} till enheten.
Den returnerade informationen tillåter enheten att beräkna B’λ={β·Ppw | Ppw∈Bλ} och säkerställer att användarens lösenord har läckts om ⍺Pc ∈B'λ.