Dataskydd genom nyckelring
Många appar måste hantera lösenord och andra korta men viktiga data, till exempel nycklar och inloggningstokens. Nyckelringen gör att du kan lagra dessa objekt på ett säkert sätt. De olika Apple-operativsystemen använder olika mekanismer för att genomdriva de garantier som är kopplade till de olika nyckelringsskyddsklasserna. I macOS (inklusive Mac-datorer med Apple Silicon) används inte dataskydd direkt till att genomdriva dessa garantier.
Översikt
Nyckelringsobjekt krypteras med två olika AES-256-GCM-nycklar: en tabellnyckel (metadata) och en per-row-nyckel (hemlig nyckel). Nyckelringsmetadata (alla attribut utöver kSecValue) krypteras med metadatanyckeln för att öka hastigheten vid sökningar, och det hemliga värdet (kSecValueData) krypteras med den hemliga nyckeln. Metadatanyckeln skyddas av Secure Enclave, men cachelagras i approcessorn så att det snabbt går att skicka förfrågningar till nyckelringen. Den hemliga nyckeln kräver alltid att förfrågningar görs via Secure Enclave.
Nyckelringen implementeras som en SQLite-databas som lagras i filsystemet. Det finns bara en databas. Bakgrundsdemonen securityd
avgör vilka nyckelringsobjekt som varje process eller app kan komma åt. Nyckelhanterares API:er genererar anrop till bakgrundsdemonen som sedan söker efter appens behörigheter för ”Keychain-access-groups”, ”application-identifier” och ”application-group”. Med hjälp av tillgångsgrupper kan nyckelringsobjekt delas mellan appar istället för att tillgången begränsas till en enda process.
Nyckelringsobjekt kan endast delas mellan appar från samma utvecklare. För att dela nyckelringsobjekt måste appar från tredje part använda tillgångsgrupper med ett prefix som tilldelas via Apple Developer Program genom appgrupper. Kravet på prefix och på att appgruppen ska vara unik upprätthålls genom kodsignering, tillhandahållandeprofiler och Apple Developer Program.
Nyckelringsdata skyddas med hjälp av en klasstruktur som liknar den som används för dataskyddet på filnivå. Klasserna fungerar på samma sätt som dataskyddsklasserna för filer, men har andra nycklar och funktioner.
Tillgänglighet | Dataskydd på filnivå | Dataskydd genom nyckelring | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
När den är upplåst | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
När den är låst | NSFileProtectionComplete UnlessOpen | ||||||||||
Efter första upplåsningen | NSFileProtectionComplete UntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
Alltid | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
Lösenkodsaktiverad | kSecAttrAccessibleWhen PasscodeSetThisDeviceOnly |
Appar som använder uppdateringstjänster i bakgrunden kan använda kSecAttrAccessibleAfterFirstUnlock för nyckelringsobjekt som behöver vara tillgängliga under bakgrundsuppdateringar.
Klassen kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly beter sig likadant som kSecAttrAccessibleWhenUnlocked, men den är bara tillgänglig när enheten har konfigurerats med en lösenkod. Den här klassen finns bara i systemets nyckelsamling och den:
Synkroniseras inte till iCloud-nyckelring
Säkerhetskopieras inte
Ingår inte i deponerade nyckelsamlingar
Om lösenkoden tas bort eller nollställs görs objekten oanvändbara genom att klassnycklarna kastas.
Andra nyckelringsklasser har en motsvarighet till funktionen ”endast denna enhet”, som alltid skyddas med UID:t när den kopieras från enheten vid säkerhetskopiering, vilket gör att den blir oanvändbar om den återskapas på en annan enhet. För att hitta en bra balans mellan säkerhet och användbarhet väljer Apple nyckelringsklasser som varierar beroende på vilken typ av information som ska skyddas och när iOS och iPadOS behöver tillgång till den.
Dataklasskydd genom nyckelring
De klasskydd som listas nedan genomdrivs för nyckelringsobjekt.
Objekt | Tillgängligt |
---|---|
Wi-Fi-lösenord | Efter första upplåsningen |
E-postkonton | Efter första upplåsningen |
Microsoft Exchange ActiveSync-konton | Efter första upplåsningen |
VPN-lösenord | Efter första upplåsningen |
LDAP, CalDAV, CardDAV | Efter första upplåsningen |
Tokens för sociala nätverkskonton | Efter första upplåsningen |
Krypteringsnycklar för Handoff-annonsering | Efter första upplåsningen |
iCloud-token | Efter första upplåsningen |
iMessage-nycklar | Efter första upplåsningen |
Lösenord för Hemmadelning | När den är upplåst |
Safari-lösenord | När den är upplåst |
Safari-bokmärken | När den är upplåst |
Säkerhetskopiering med Finder/iTunes | När den är upplåst, ej flyttbar |
VPN-certifikat | Efter första upplåsningen, ej flyttbar |
Bluetooth-nycklar | Alltid, ej flyttbar |
APNs (Apples tjänst för pushnotiser)-token | Alltid, ej flyttbar |
iCloud-certifikat och privata nycklar | Alltid, ej flyttbar |
SIM-kortets PIN-kod | Alltid, ej flyttbar |
Token för Hitta | Alltid |
Röstbrevlåda | Alltid |
I macOS är alla nyckelringsobjekt som installeras av konfigurationsprofiler alltid tillgängliga. I iOS och iPadOS har nyckelringsobjekt som installeras av en konfigurationsprofil olika åtkomster beroende på deras typ, hur de refereras till och när de installerades. Som förval är nyckelringsobjekt som har installerats med konfigurationsprofiler tillgängliga efter första upplåsningen och ej flyttbara. Ett nyckelringsobjekt som har installerats av en konfigurationsprofil är dock alltid tillgängligt om det:
Installerades före uppgradering till iOS 15, iPadOS 15 eller senare
Är ett certifikat (inte en identitet)
Är en identitet som refereras till av
IdentityCertificateUUID
i encom.apple.mdm
-nyttolast
Behörighetsstyrning av nyckelringen
Nyckelringar kan använda behörighetslistor (ACL:er) för att ange policyer för tillgång samt autentiseringskrav. Objekten kan upprätta villkor som kräver användarens närvaro genom att begära autentisering med Face ID, Touch ID eller att enhetens lösenkod eller lösenord måste anges. Du kan begränsa tillgången till objekt genom att ange att registreringen av Face ID eller Touch ID inte har ändrats sedan objektet lades till. Denna begränsning förhindrar att obehöriga personer lägger till egna fingeravtryck för tillgång till ett nyckelringsobjekt. ACL:erna granskas inuti Secure Enclave och lämnas endast ut till kärnan om de angivna villkoren uppfylls.
Nyckelringsarkitektur i macOS
macOS ger också tillgång till nyckelringen för att smidigt och säkert lagra användarnamn och lösenord, digitala identiteter, krypteringsnycklar och säkra anteckningar. Du kommer åt den genom att öppna appen Nyckelhanterare i /Appar/Verktyg/. Genom att använda en nyckelring behöver användaren inte ange – eller ens komma ihåg – inloggningsuppgifterna för varje resurs. En första förvald nyckelring skapas för varje Mac-användare, men användarna kan också skapa andra nyckelringar för olika ändamål.
Utöver att förlita sig på användarnyckelringar använder macOS ett antal nyckelringar på systemnivå som håller reda på autentiseringsinformation som inte är användarspecifik, som nätverksbehörigheter och identiteter via PKI-certifikat (public key infrastructure). En av dessa nyckelringar, Systemrötter, kan inte ändras och lagrar internet-PKI-rotcertifikat från certifikatutfärdare (CA) för att underlätta vanliga åtgärder som banktjänster och e-handel via internet. Användaren kan även distribuera internt tillhandahållna CA-certifikat till hanterade Mac-datorer för att underlätta valideringen av interna webbplatser och tjänster.