Moje pytanie dotyczy pęków kluczy w iOS (iPhone, iPad, ...). Myślę (ale nie jestem pewien), że implementacja pęków kluczy pod Mac OS X rodzi to samo pytanie z tą samą odpowiedzią.
iOS udostępnia pięć typów (klas) elementów pęku kluczy. Aby kSecClassokreślić typ, musisz wybrać jedną z tych pięciu wartości dla klucza :
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łka, blogi i wpisy w forum, dowiedziałem się, że pozycja brelok typu kSecClassGenericPassworddostaje swoją wyjątkowość z atrybutami kSecAttrAccessGroup, kSecAttrAccounta kSecAttrService.
Jeśli te trzy atrybuty w żądaniu 1 są takie same jak w żądaniu 2, otrzymasz ten sam ogólny element pęku kluczy haseł, niezależnie od innych atrybutów. Jeśli jeden (lub dwa lub wszystkie) z tych atrybutów zmieni swoją wartość, otrzymasz różne przedmioty.
Ale kSecAttrServicejest dostępny tylko dla elementów typu kSecClassGenericPassword, więc nie może być częścią „unikalnego klucza” przedmiotu innego typu i wydaje się, że nie ma dokumentacji, która jasno wskazywałaby, które atrybuty jednoznacznie określają przedmiot pęku kluczy.
Przykładowy kod w klasie „KeychainItemWrapper” elementu „GenericKeychain” używa tego atrybutu, kSecAttrGenericaby uczynić element unikalnym, ale jest to błąd. Tylko dwa wpisy w tym przykładzie są przechowywane jako dwa odrębne wpisy, ponieważ kSecAttrAccessGroupsą różne (jeden ma ustawioną grupę dostępu, a drugi umożliwia zwolnienie). Jeśli spróbujesz dodać drugie hasło bez grupy dostępu, używając Apple KeychainItemWrapper, nie powiedzie się.
Więc proszę, odpowiedz na moje pytania:
- Czy to prawda, że połączenie
kSecAttrAccessGroup,kSecAttrAccountikSecAttrServicejest „unikalny klucz” z pęku kluczy elementu, którego kSecClass jestkSecClassGenericPassword? - Jakie atrybuty sprawiają, że przedmiot pęku kluczy jest wyjątkowy, jeśli
kSecClassnie jestkSecClassGenericPassword?