Zugriffskontrolle für den Keychain
Schützen Sie Einträge durch biometrische Authentifizierung und Gerätesperre.
Zugriffskontrolle für den Keychain ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Steuern, wann Geheimnisse ausgelesen werden können
Ein Geheimnis zu speichern, ist nur die halbe Aufgabe — Sie müssen auch steuern, wann es ausgelesen werden kann. Der Keychain bietet Zugriffsklassen und Zugriffskontroll-Flags, die den Zugriff auf Items an das Entsperren des Geräts, den Gerätecode oder biometrische Merkmale knüpfen. Das schützt Daten, wenn ein Gerät verloren geht.
import Security
// Two layers of control:
// kSecAttrAccessible -> when readable (lock state)
// SecAccessControl -> user presence / biometricsDer Schlüssel kSecAttrAccessible
kSecAttrAccessible legt beim Hinzufügen die Zugriffsklasse fest. Sie bestimmt, ob ein Item immer, erst nach dem ersten Entsperren oder nur bei entsperrtem Gerät verfügbar ist. Wählen Sie die strengste Stufe, die Ihre Funktion zulässt.
import Security
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "user",
kSecValueData as String: Data("secret".utf8),
kSecAttrAccessible as String:
kSecAttrAccessibleWhenUnlocked
]
_ = queryWhenUnlocked
kSecAttrAccessibleWhenUnlocked macht das Item nur lesbar, solange das Gerät entsperrt ist. Hintergrundaufgaben, die bei gesperrtem Gerät ausgeführt werden, können nicht darauf zugreifen. Für die meisten Sitzungstoken ist dies die sinnvolle Standardeinstellung.
import Security
// Readable only while unlocked; blocked when locked.
let level = kSecAttrAccessibleWhenUnlocked
_ = levelAfterFirstUnlock
kSecAttrAccessibleAfterFirstUnlock hält das Item ab dem ersten Entsperren nach dem Start bis zum nächsten Neustart lesbar — auch dann, wenn das Gerät später wieder gesperrt ist. Verwenden Sie diese Einstellung für Geheimnisse, die ein Hintergrundprozess benötigt, etwa ein Token zur Verarbeitung von Push-Benachrichtigungen.
import Security
// Available after the first unlock post-boot,
// including while subsequently locked.
let level = kSecAttrAccessibleAfterFirstUnlock
_ = levelThisDeviceOnly-Varianten
Zu jeder Zugriffsklasse gibt es eine Variante mit ...ThisDeviceOnly. Diese Items werden von verschlüsselten Backups ausgeschlossen und niemals auf ein neues Gerät übertragen. Verwenden Sie sie für Schlüssel, die diese Hardware niemals verlassen sollen.
import Security
// Never backed up, never migrated:
let local = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
_ = localWhen Passcode Is Set
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly speichert das Item nur, wenn der Benutzer einen Gerätecode festgelegt hat, und löscht es, sobald der Gerätecode entfernt wird. Dadurch ist das Geheimnis immer durch einen Gerätecode geschützt.
import Security
let level =
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
// Item vanishes if the user disables their passcode.
_ = levelSecAccessControl für die Benutzeranwesenheit
Über den Sperrstatus hinaus erstellt SecAccessControlCreateWithFlags eine Richtlinie, die zum Zeitpunkt des Auslesens eine aktive Benutzerauthentifizierung — biometrische Merkmale oder Gerätecode — verlangt. Sie hängen sie über kSecAttrAccessControl an, anstelle des Zugriffsschlüssels oder zusätzlich zu ihm.
import Security
func makeControl() -> SecAccessControl? {
return SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.userPresence,
nil)
}Flags der Zugriffskontrolle
Flags präzisieren die Anforderung: .userPresence erlaubt biometrische Authentifizierung oder die Eingabe des Gerätecodes als Alternative; .biometryCurrentSet macht das Item ungültig, wenn sich die registrierten Fingerabdrücke oder Gesichter ändern; .devicePasscode erzwingt die Eingabe des Gerätecodes. Kombinieren Sie die Flags, um Ihre Sicherheitsanforderungen auszudrücken.
import Security
// .userPresence -> biometric OR passcode
// .biometryAny -> any enrolled biometric
// .biometryCurrentSet -> invalidate on biometric change
// .devicePasscode -> passcode only
let flags: SecAccessControlCreateFlags = [.userPresence]
_ = flagsEin geschütztes Item hinzufügen
Um ein durch biometrische Authentifizierung geschütztes Geheimnis zu speichern, legen Sie das SecAccessControl-Objekt unter kSecAttrAccessControl ab. Bei jedem späteren Auslesen wird der Benutzer zur Authentifizierung aufgefordert, bevor die Daten zurückgegeben werden.
import Security
func saveProtected(_ data: Data, account: String,
control: SecAccessControl) -> Bool {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecValueData as String: data,
kSecAttrAccessControl as String: control]
return SecItemAdd(query as CFDictionary, nil)
== errSecSuccess
}Beim Auslesen wird der Benutzer aufgefordert
Beim Auslesen eines geschützten Items wird die Authentifizierungsoberfläche automatisch angezeigt. Über kSecUseOperationPrompt können Sie eine Begründung angeben, damit die Aufforderung erklärt, warum der Zugriff erforderlich ist. Das Auslesen wartet, bis der Benutzer sich authentifiziert oder abbricht.
import Security
func readProtected(account: String) -> Data? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecReturnData as String: true,
kSecUseOperationPrompt as String:
String(localized: "Unlock your saved key")]
var out: CFTypeRef?
return SecItemCopyMatching(query as CFDictionary,
&out) == errSecSuccess ? out as? Data : nil
}Die richtige Stufe wählen
Passen Sie die Richtlinie an das Risiko an:
- Sitzungstoken für die Verwendung im Hintergrund:
AfterFirstUnlock. - Token ausschließlich für die Benutzeroberfläche:
WhenUnlocked. - Besonders wertvolles Geheimnis:
SecAccessControlmit.userPresenceund einerThisDeviceOnly-Klasse.
Eine strengere Einstellung ist sicherer, verhindert aber den Zugriff im Hintergrund — wägen Sie beides gegeneinander ab.
import Security
// High-value: biometric-gated, device-bound, no backup
let control = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.userPresence, nil)
_ = controlKurztest
Rufen Sie sich in Erinnerung, welche Zugriffsklasse für ein im Hintergrund benötigtes Geheimnis geeignet ist.
Zusammenfassung
Sie haben gelernt, den Zugriff auf Keychain-Items zu beschränken:
kSecAttrAccessiblelegt die Verfügbarkeit abhängig vom Sperrstatus fest:WhenUnlocked,AfterFirstUnlockund...ThisDeviceOnly-Varianten, die Backups ausschließen.WhenPasscodeSetThisDeviceOnlybindet das Item an das Vorhandensein eines Gerätecodes.SecAccessControlmit Flags wie.userPresenceoder.biometryCurrentSeterfordert beim Auslesen eine Authentifizierung.- Wählen Sie die strengste Stufe, die Ihr Zugriffsmuster noch zulässt.
Häufig gestellte Fragen
Ist die Lektion „Zugriffskontrolle für den Keychain“ kostenlos?
Ja — der vollständige Text von „Zugriffskontrolle für den Keychain“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Zugriffskontrolle für den Keychain“?
Schützen Sie Einträge durch biometrische Authentifizierung und Gerätesperre. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Zugriffskontrolle für den Keychain“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Geheimnisse im Keychain speichern
- Zugriffskontrolle für den Keychain
- Biometrische Authentifizierung
- Datenschutz und Verschlüsselung