Sorum iOS'taki (iPhone, iPad, ...) anahtar zincirleriyle ilgili. Mac OS X altında anahtar zincirlerinin uygulanmasının aynı soruyu aynı cevapla gündeme getirdiğini düşünüyorum (ama emin değilim).
iOS, beş tür (sınıf) anahtar zinciri öğesi sağlar. Türünü kSecClassbelirlemek için anahtar için şu beş değerden birini seçmelisiniz :
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)
Okuma elma dokümantasyon, bloglar ve forum-girişlerinin uzun süre sonra türde bir anahtarlık kalem öğrendim kSecClassGenericPasswordnitelikler onun benzersizliğini alır kSecAttrAccessGroup, kSecAttrAccountve kSecAttrService.
Talep 1'deki bu üç öznitelik, istek 2'deki ile aynıysa, diğer özniteliklerden bağımsız olarak aynı genel parola anahtar zinciri öğesini alırsınız. Bu özelliklerden biri (veya ikisi veya tümü) değerini değiştirirse, farklı öğeler alırsınız.
Ancak kSecAttrServiceyalnızca türdeki öğeler için mevcuttur kSecClassGenericPassword, bu nedenle başka türden bir öğenin "benzersiz anahtarının" parçası olamaz ve hangi özelliklerin bir anahtar zinciri öğesini benzersiz şekilde belirlediğini açıkça gösteren hiçbir belge yok gibi görünüyor.
"GenericKeychain" in "KeychainItemWrapper" sınıfındaki örnek kod, kSecAttrGenericbir öğeyi benzersiz kılmak için özniteliği kullanır , ancak bu bir hatadır. Bu örnekteki iki giriş yalnızca iki ayrı giriş olarak saklanır, çünkü bunların kSecAttrAccessGroupfarklıdır (biri erişim grubu setine sahip, diğeri serbest bırakıyor). Apple'ı kullanarak erişim grubu olmadan 2. bir parola eklemeye çalışırsanız KeychainItemWrapperbaşarısız olursunuz.
Lütfen sorularıma cevap verin:
- O, doğru mu bu kombinasyonu
kSecAttrAccessGroup,kSecAttrAccountvekSecAttrServicekSecClass bir anahtarlık öğenin "eşsiz anahtar" dırkSecClassGenericPassword? - Onun ise hangi nitelikleri bir anahtarlık öğesi eşsiz kılan
kSecClassdeğilkSecClassGenericPassword?