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 kSecClass
okreś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 kSecClassGenericPassword
dostaje swoją wyjątkowość z atrybutami kSecAttrAccessGroup
, kSecAttrAccount
a 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 kSecAttrService
jest 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, kSecAttrGeneric
aby uczynić element unikalnym, ale jest to błąd. Tylko dwa wpisy w tym przykładzie są przechowywane jako dwa odrębne wpisy, ponieważ kSecAttrAccessGroup
są 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
,kSecAttrAccount
ikSecAttrService
jest „unikalny klucz” z pęku kluczy elementu, którego kSecClass jestkSecClassGenericPassword
? - Jakie atrybuty sprawiają, że przedmiot pęku kluczy jest wyjątkowy, jeśli
kSecClass
nie jestkSecClassGenericPassword
?