Co sprawia, że ​​element pęku kluczy jest unikalny (w systemie iOS)?

Moje pytanie dotyczy pęków kluczy w systemie iOS (iPhone, iPad, ...). Myślę (ale nie jestem pewien), że implementacja pęków kluczy w systemie Mac OS X stawia to samo pytanie z tą samą odpowiedzią.

iOS zapewnia pięć typów (klas) elementów pęku kluczy. Musisz wybrać jedną z tych pięciu wartości kluczakSecClass określić typ:

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)

Po długim czasie czytania dokumentacji jabłek, blogów i wpisów na forum dowiedziałem się, że jest to przedmiot typu keychainkSecClassGenericPassword uzyskuje wyjątkowość od atrybutówkSecAttrAccessGroup, kSecAttrAccount ikSecAttrService.

Jeśli te trzy atrybuty w żądaniu 1 są takie same, jak w żądaniu 2, to otrzymujesz ten sam element pęku kluczy ogólnego hasła, niezależnie od innych atrybutów. Jeśli jeden (lub dwa lub wszystkie) z tych atrybutów zmieni swoją wartość, otrzymasz różne przedmioty.

AlekSecAttrService jest dostępny tylko dla elementów typukSecClassGenericPassword, więc nie może być częścią „unikalnego klucza” przedmiotu innego typu i wydaje się, że nie ma żadnej dokumentacji, która wyraźnie wskazywałaby, które atrybuty jednoznacznie określają element pęku kluczy.

Przykładowy kod w klasie „KeychainItemWrapper” w „GenericKeychain” używa atrybutukSecAttrGeneric aby uczynić przedmiot wyjątkowym, ale jest to błąd. Dwa wpisy w tym przykładzie są przechowywane jako dwa różne wpisy, ponieważ ichkSecAttrAccessGroup jest inny (jeden ma zestaw grupy dostępu, a drugi pozwala). Jeśli spróbujesz dodać drugie hasło bez grupy dostępu, za pomocą AppleKeychainItemWrapper, nie zdasz.

Proszę więc odpowiedzieć na moje pytania:

Czy to prawda, że ​​połączeniekSecAttrAccessGroup, kSecAttrAccount ikSecAttrService jest „unikalnym kluczem” elementu pęku kluczy, którego jest kSecClasskSecClassGenericPassword?Które atrybuty sprawiają, że element pęku kluczy jest unikalny, jeśli jestkSecClass nie jestkSecClassGenericPassword?

questionAnswers(3)

yourAnswerToTheQuestion