Meine Frage betrifft Schlüsselanhänger in iOS (iPhone, iPad, ...). Ich denke (bin mir aber nicht sicher), dass die Implementierung von Schlüsselanhängern unter Mac OS X dieselbe Frage mit derselben Antwort aufwirft.
iOS bietet fünf Arten (Klassen) von Schlüsselbundelementen. Sie müssen einen dieser fünf Werte für den Schlüssel auswählen kSecClass
, um den Typ zu bestimmen:
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
Nach langer Zeit des Lesens Äpfel Dokumentation, Blogs und Forum-Einträge, fand ich heraus , dass ein Schlüsselbund Artikel vom Typ kSecClassGenericPassword
seine Einzigartigkeit aus den Attributen wird kSecAttrAccessGroup
, kSecAttrAccount
und kSecAttrService
.
Wenn diese drei Attribute in Anforderung 1 mit denen in Anforderung 2 identisch sind, erhalten Sie unabhängig von anderen Attributen dasselbe generische Kennwort-Schlüsselbundelement. Wenn eines (oder zwei oder alle) dieser Attribute seinen Wert ändert, erhalten Sie verschiedene Elemente.
Ist kSecAttrService
jedoch nur für Artikel vom Typ verfügbar kSecClassGenericPassword
, kann es also nicht Teil des "eindeutigen Schlüssels" eines Artikels eines anderen Typs sein, und es scheint keine Dokumentation zu geben, die klar darauf hinweist, welche Attribute einen Schlüsselbundartikel eindeutig bestimmen.
Der Beispielcode in der Klasse "KeychainItemWrapper" von "GenericKeychain" verwendet das Attribut kSecAttrGeneric
, um ein Element eindeutig zu machen. Dies ist jedoch ein Fehler. Die beiden Einträge in diesem Beispiel werden nur als zwei unterschiedliche Einträge gespeichert, da sie kSecAttrAccessGroup
unterschiedlich sind (bei einem ist die Zugriffsgruppe festgelegt, bei dem anderen ist sie frei). Wenn Sie versuchen, mit Apple ein zweites Kennwort ohne Zugriffsgruppe hinzuzufügen, schlagen KeychainItemWrapper
Sie fehl.
Beantworten Sie also bitte meine Fragen:
- Ist es wahr, dass die Kombination aus
kSecAttrAccessGroup
,kSecAttrAccount
undkSecAttrService
sind die „eindeutigen Schlüssel“ ein Schlüsselanhänger - Elements , dessen kSecClass istkSecClassGenericPassword
? - Welche Attribute machen ein Schlüsselbundelement einzigartig, wenn dies
kSecClass
nicht der Fall istkSecClassGenericPassword
?